Я и PAWN | Изучаю, потому что интересно

Сообщения
702
Реакции
54
d3m37r4, искать по слову Score, но не нашёл получение кол. выгранных раундов, только прибавление побед.
 
Сообщения
702
Реакции
54
Как можно получить координаты позиции по направлению прицела? Что-то по типу get_user_aiming, но только без столкновения с ентити.
Просто получить координаты точки, которая находиться через сто метров.

Хочу себе блинк сделать, а вот с получением координат пока не нашёл способа (сам прыжок сделал, нашёл как через трейс проверить на наличие препятствий)
 
Сообщения
162
Реакции
445
Помог
2 раз(а)
Просто получить координаты точки, которая находиться через сто метров.
Есть несколько способов, но суть одна: получаем нормализированный вектор направления вперед, умножаем на расстояние и добавляем текущие координаты. Например, так:
C++:
#include <amxmodx>
#include <fakemeta>
#include <xs>

public test(player)
{
    // Угол напрления взгляда игрока
    new Float:vecViewAngle[3];
    pev(player, pev_v_angle, vecViewAngle);

    // Создаем вектора напраяления из ViewAngle
    // Рузультат будет сохранен в глобальные переменные glb_v_forward, glb_v_up, glb_v_right
    engfunc(EngFunc_MakeVectors, vecViewAngle);

    // Получем вектор направления 'вперед' из глобальной переменной
    new Float:vecForward[3];
    global_get(glb_v_forward, vecForward);

    // Умножаем вектор 'вперед' на необходимое значение (расстояние в юнитах)
    xs_vec_mul_scalar(vecForward, 100.0, vecForward);

    // Текущие координаты игрока
    new Float:vecOrigin[3];
    pev(player, pev_origin, vecOrigin);

    // Получем координаты точки в напраялении 100 юнитов вперед
    xs_vec_add(vecOrigin, vecForward, vecOrigin);
}
 
Сообщения
702
Реакции
54
У меня тут возникло пару вопросов по поводу сохранения в MySQL:
1. Могут ли данные не загрузится? Если не учитывать ошибки с неправильным запросом и ошибкой соединения.
2. Если в момент загрузки данных произошла ошибка соединения то в дальнейшем можно получить нулевые данные после дисконнекта. То есть если сначала данные не загрузились, а при дисконнекте сохранились текущие значения, т.е нули. Как можно этого избежать?
 
Последнее редактирование:
Сообщения
1,015
Реакции
818
Помог
10 раз(а)
ThePhoenix, 1. Обычно прилетают ошибки, других ситуаций не встречал, не знаю. 2. Вводи булевую, например g_bReceivedData, отправляй запрос на получение данных, в ответе, как получишь данные переключай булевую, если по какой то причины данные были не получены, то булевая будет ложной и при дисконнекте это учитывай и не отправляй запросы на сохранение.
 
Сообщения
702
Реакции
54
Javekson, 1. Я просто пока стату фримэна смотрел пару раз упоролся))
2. Но отсюда может выплыть другая штука, если когда данные не получены это же может быть новый игрок или же какая-то трабла))
 
Сообщения
1,015
Реакции
818
Помог
10 раз(а)
ThePhoenix, если новый игрок не записался или его данные не получены, то зачем с ним работать дальше? Это единичные случаи виной которой является сама база данных, как правило, а если случаи многочисленны то ищи другого хостера. Юзай локальную базу данных тогда, или повторяй попытку получение данных через n время если так сильно приспичило
 
Сообщения
702
Реакции
54
Javekson, Я не думаю, что у меня будут проблемы с данными, т.к у меня есть локальные бд у которых по сути сбои - это редкость.
Просто хочу чуть лучше разобраться)

если новый игрок не записался или его данные не получены, то зачем с ним работать дальше?
Логично, но я немного не о том. Ты говоришь, что если данные по каким-то причинам не получены, заюзать бул и потом учитывать. Хорошо. Но, я же посылаю при коннекте проверку, есть ли данные по моему идентификатору или нет, т.е пытаюсь загрузить, а если их нету, то отправляю игрока на создание новой записи. И вопрос тут в том, что когда мне присваивать значения переменной, которую я потом буду учитывать, если "не загруженные данные" могут означать не только ошибку, а ещё и нового игрока.
 
Сообщения
1,015
Реакции
818
Помог
10 раз(а)
ThePhoenix, да в смысле когда? В обработчики запроса, при успешном получение данных или при успешной новой записи
Код:
public handler_SqlQuery( iFailState, Handle: hQueryHandle, sError[ ], iErrorCode, eSqlData[ ], iDataSize, Float: fQueryTime )
{
    switch( eSqlData[ SQL_DATA__QUERY_TYPE ] )
    {
        case QUERY_TYPE__GET_ONLINE:
        {
            if( SQL_MoreResults( hQueryHandle ) )
            {
                g_bReceivedOnline[ id ] = true;
            }
            else
            {
                func_QueryInsertOnline( id );
            }
        }

        case QUERY_TYPE__INSERT_ONLINE:
        {
            g_bReceivedOnline[ id ] = true;
        }
    }
}
 
Сообщения
702
Реакции
54
Как можно вырезать со стринга какое-то слово?

Я запилил себе поиск оружия - запилил список ID и зарандомил, но мне нужно так же каждому оружию записать иконку. Собсна т.к функций для получения названия иконки у нас вроде как нету, мне надо из WI_NAME вырезать "weapon_" и отформатировать название иконки.

Можно ли вырезать "weapon_" и как?

UPD: сделал
Код:
new weapon[20] = "weapon_ak47";
new icon[10] = "d_";

log_amx("%s : %s", icon, weapon);

replace(weapon, charsmax(weapon), "weapon_", "");
formatex(icon, charsmax(icon), "%s%s", icon, weapon);

log_amx("%s : %s", icon, weapon);
Код:
L 10/31/2020 - 16:14:22: [test.amxx] d_ : weapon_ak47
L 10/31/2020 - 16:14:22: [test.amxx] d_ak47 : ak47
 
Последнее редактирование:
Сообщения
576
Реакции
1,003
Помог
18 раз(а)
Код:
-replace(weapon, charsmax(weapon), "weapon_", "");
-formatex(icon, charsmax(icon), "%s%s", icon, weapon);
+formatex(icon, charsmax(icon), "%s%s", icon, weapon[7]);
 
Сообщения
1,176
Реакции
2,144
Помог
57 раз(а)
ThePhoenix, А если позиция заранее неизвестна, то можно найти в строке искомый символ (или искомую последовательность) и просто буфер отправить начиная с ячейки где началась последовательность
Код:
new const szText[] = "weapon_ak47"
new iPos = strfind(szText, "_")

if(iPos == -1) client_print(0, print_chat, "Not found");
else client_print(0, print_chat, "Weapon: %s", szText[iPos + 1])
 
Сообщения
702
Реакции
54
Раскажет кто по поводу этих варов:
Код:
/*
    * Description:      -
    * Member type:      struct edict_s *
    * Get params:       get_entvar(index, EntVars:var);
    * Set params:       set_entvar(index, EntVars:var, value);
    */
    var_dmg_inflictor,
    
    /*
    * Description:      -
    * Member type:      int
    * Get params:       get_entvar(index, EntVars:var);
    * Set params:       set_entvar(index, EntVars:var, value);
    */
    var_dmg_take,

    /*
    * Description:      -
    * Member type:      int
    * Get params:       get_entvar(index, EntVars:var);
    * Set params:       set_entvar(index, EntVars:var, value);
    */
    var_dmg_save,

    /*
    * Description:      -
    * Member type:      int
    * Get params:       get_entvar(index, EntVars:var);
    * Set params:       set_entvar(index, EntVars:var, value);
    */
    var_dmg,
6 Ноя 2020
Толком не нагуглил ничего.
Если по поводу:
Код:
/*
    * Description:      -
    * Member type:      float
    * Get params:       Float:get_entvar(index, EntVars:var);
    * Set params:       set_entvar(index, EntVars:var, Float:value);
    */
    var_takedamage,
Можно найти и понять, что он по сути неуязвимость, как в фане, то по поводу тех, что выше, не совсем понятно, что они делают, от какого значения считаются и сбрасываются когда и сбрасываются ли вообще (как var_maxspeed, например)
 
Последнее редактирование:

RockTheStreet

Саппорт года
Сообщения
1,743
Реакции
346
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
var_dmg_inflictor
По-моему это тот, кто нанёс дамаг. Но могу ошибаться.
 
Сообщения
702
Реакции
54
melfyk, Вот по этому и уточняю. Потому что тесты показывают либо 0 - всегда, либо же набор из 10 цифр, что бывает, когда неправильно тип выводишь. (юзал %d и %i - для всех, кроме var_dmg_inflictor).

Там кста вроде был какой-то способ увеличить урон через вар для всех оружек, кроме ножика, но я его потерял.
 
Сообщения
287
Реакции
223
Помог
6 раз(а)
ThePhoenix, если не ошибаюсь, то:
var_dmg_save - частота нанесения урона;
var_dmg_take - продолжительность нанесения урона;
var_dmg - радиус нанесения урона;

var_dmg_inflictor - едикт энтити, которая нанесла урон. Это может быть либо игрок, если урон был получен из оружия, либо граната или бомба. Если нужно знать, чья граната, то сначала получаешь ее айди, а потом через айди узнаешь владельца через var_owner
6 Ноя 2020
Там кста вроде был какой-то способ увеличить урон через вар для всех оружек, кроме ножика, но я его потерял.
Вот
 
Последнее редактирование:

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу