Обучение и помощь по скриптингу для MIRDOBRO777

Сообщения
47
Реакции
11
Предупреждения
5
Ayk, заработало. А можно в массив вставлять переменную (квар)?
Я пытаюсь, но он ругается (error 008).
Например:
{ "weapon", "weapon_deagle", 5 }
Заменить число патронов на переменную:
{ "weapon", "weapon_deagle", iAmmo }
Так возможно делать?
 
Сообщения
47
Реакции
11
Предупреждения
5
Что-то с оружием не могу понять что происходит.
Тестировал долгое время. Выдает все оружие или гранаты, но AWP ни разу не выдало.
В логах следующее (порядок строк соблюден):
L 08/14/2019 - 11:34:45: Start of error session.
L 08/14/2019 - 11:34:45: Info (map "de_dust2_3x3_lite") (file "addons/amxmodx/logs/error_20190814.log")
L 08/14/2019 - 11:34:45: [ReAPI] set_member: invalid or uninitialized entity
L 08/14/2019 - 11:34:45: [AMXX] Displaying debug trace (plugin "s.amxx", version "1.0")
L 08/14/2019 - 11:34:45: [AMXX] Run time error 10: native error (native "set_member")
L 08/14/2019 - 11:34:45: [AMXX] [0] s.sma::GiveItem (line 60)
L 08/14/2019 - 11:34:45: [AMXX] [1] s.sma::@Test (line 42)
После данной ошибки, мне выдало Scout с полным боезапасом (патроны).
Код:
#include <amxmodx>
#include <reapi>
//     log_to_file("addons\amxmodx\logs\test.txt" , "^nПродолжительность: %.2f^nКвар: %d^n", TaskGravity, anum);
//    emit_sound(0, CHAN_BODY, SOUND_FLASH, 1.0, ATTN_NORM, 0, PITCH_HIGH);
//https://dev-cs.ru/threads/7222/page-2

#define GetCvarDesc(%0) fmt("%L", LANG_SERVER, %0)
//#define MSG_GIVE "^3Действие ^4%d сек."
//new const TASK_NORMAL = 101

new const iAmmoMode = 1;
enum _:WEAPONS_DATA { ITEM_CASE[10], ITEM_NAME[10], WEAPON_NAME[20], VALUE_AMMO };
new const g_ItemList[][WEAPONS_DATA] = {
    { "weapon", "Glock18", "weapon_glock18", 4 },
    { "weapon", "Usp", "weapon_usp", 4 },
    { "weapon", "Deagle", "weapon_deagle", 4 },
    { "weapon", "AK47", "weapon_ak47", 3 },
    { "weapon", "M4A1", "weapon_m4a1", 3 },
    { "weapon", "Famas", "weapon_famas", 3 },
    { "weapon", "AUG", "weapon_aug", 3 },
    { "weapon", "Scout", "weapon_scout", 5 },
    { "weapon", "AWP", "weapon_awp", 5 },
    { "nade", "HE", "weapon_hegrenade", 5 },
    { "nade", "Freeze", "weapon_flashbang", 3 },
    { "nade", "Frost", "weapon_smokegrenade", 2 }
};

public plugin_init() {
    register_plugin("Testing", "1.0", "Admin");
//    register_dictionary("test.txt");
    register_clcmd("say /r", "@Test");

//    new pCvarAmmoNumMin = create_cvar("rulya_ammo_num_min", "1", FCVAR_NONE, GetCvarDesc("RULYA_CVAR_AMMO_NUM_MIN"), true, 1.0);
//    new pCvarAmmoNumMax = create_cvar("rulya_ammo_num_max", "5", FCVAR_NONE, GetCvarDesc("RULYA_CVAR_AMMO_NUM_MAX"));

//    iAmmoNumMin = get_pcvar_num(pCvarAmmoNumMin);
//    iAmmoNumMax = get_pcvar_num(pCvarAmmoNumMax);
}

@Test(id) {
    new i = random(sizeof (g_ItemList));
    GiveItem(id, g_ItemList[i][ITEM_CASE], g_ItemList[i][ITEM_NAME], g_ItemList[i][WEAPON_NAME], g_ItemList[i][VALUE_AMMO]);
}

GiveItem(id, szCase[], szName[], szItem[], iValue) {
    new g_Ammo;
    if(iAmmoMode) g_Ammo = random(iValue);
    else g_Ammo = iValue;

    switch(szCase[0]) {
    case 'n': {
    rg_give_item(id, szItem);
    rg_set_user_bpammo(id, rg_get_weapon_info(szItem, WI_ID), g_Ammo);
    if(g_Ammo > 0) log_to_file("addons\amxmodx\logs\nade.txt" , "^nИмя: %s^nПатроны: %d^n", szName, g_Ammo);
    else log_to_file("addons\amxmodx\logs\no.txt" , "^nИмя: %s^nПатроны: %d^n", szName, g_Ammo);
}
    case 'w': {
    rg_remove_item(id, szItem, true);
    new iWpn = rg_give_item(id, szItem);
    set_member(iWpn, m_Weapon_iClip, g_Ammo);
    log_to_file("addons\amxmodx\logs\w.txt" , "^nИмя: %s^nПатроны: %d^n", szName, g_Ammo);
}
}
}
 
Сообщения
47
Реакции
11
Предупреждения
5
С выдачей патронов разобрался путем установки принудительно "0":
rg_set_user_bpammo(id, rg_get_weapon_info(szItem, WI_ID), 0);
А вот с АВП не пойму в чем причина ошибки.
Закомментировал строку с выдачей АВП и все работает правильно, без ошибок в логах и выдает что надо.
Подскажите, пожалуйста, как правильно выдать АВП или может чего с массивом не так.
 

Ayk

Сообщения
173
Реакции
113
[ReAPI] set_member: invalid or uninitialized entity
Функция rg_give_item() может вернуть -1 если выдача итема не увенчалось успехом.
Результат надо проверять на валидность перед дальнейшей работой над предполагаемой энтити оружия.
Код:
    new iWpn = rg_give_item(id, szItem);
    if( is_nullent(iWpn) )
        return; // fail
    set_member(iWpn, m_Weapon_iClip, g_Ammo);
А вот с АВП не пойму в чем причина ошибки.
В коде проблем не вижу. Ну только если из-за рандома АВП просто напросто не попадается.
Возможно у тебя стоит плагин блокирующий АВП.
 
Сообщения
47
Реакции
11
Предупреждения
5
Ayk, спасибо! Стоит плагин блокировки АВП на тестовом серваке и он не давал АВП. А на счет замены прочих функций, например подсветка или невидимость игрока, а также отлов игрока на лестнице, можешь подсказать замену из ReAPI?
 

Ayk

Сообщения
173
Реакции
113
Сообщения
47
Реакции
11
Предупреждения
5
Ayk,
Пролистал всю тему, что ты скинул, но не нашел замены вот таких функций:
Код:
    new flags = pev(id, pev_flags);
    if((flags & FL_ONGROUND) || (flags & FL_PARTIALGROUND)) {
и вот такая: entity_set_string(id, EV_SZ_viewmodel, "");
В инклюде ReAPI нашел "var_flags", но не пойму что это значит. Флаги доступа?
И в той теме действительно интересные решения есть. Спасибо! =)
P.S. Хочу просто убрать модули, которые можно заменить ReAPI.
 
Сообщения
36
Реакции
26
Предупреждения
1
MIRDOBRO777, нет, не флаги доступа, юзай
C++:
get_entvar(index, var_flags)
set_entvar(index, var_viewmodel, "")
 
Сообщения
47
Реакции
11
Предупреждения
5
Вот еще функции для замены.
Заменил сам:
Код:
    new Float:velocity[3];
//    entity_get_vector(id, EV_VEC_velocity, velocity); // что заменял
    get_entvar(id, var_origin, velocity); // правильно заменил?
// Далее аналогично
    velocity[2] = 250.0;
//    entity_set_vector(id, EV_VEC_velocity, velocity);
    set_entvar(id, var_origin, velocity);
А вот эту функцию не знаю как заменить: entity_set_int(id, EV_INT_gaitsequence, 6);
 
Сообщения
47
Реакции
11
Предупреждения
5
Denzer,
на форуме по Вашей ссылке тоже вроде, что и в инклюде.
Вот Вы объяснили, что я ошибся и указал координаты, вместо ускорения. Мне так понятно сразу.
По описанию на английском я не понимаю о чем речь.
Поэтому и спрашиваю здесь.
Так чем заменить функцию установки свойства для игрока (в моем случае вроде при соприкосновении с поверхностью)?
 

w0w

Сообщения
1.075
Реакции
2.062

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

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