1. ThePhoenix Пользователь

    Регистрация:
    08.03.15
    Сообщения:
    1.423
    Симпатии:
    136
    Пол:
    Мужской
    Skype:
    the.phoenix666
    В общем следующая ошибка:
    Код (Unknown Language):
    1. L 08/14/2016 - 23:34:36: Info (map "de_dust2_2x2") (file "addons/amxmodx/logs/error_20160814.log")
    2. L 08/14/2016 - 23:34:36: [AMXX] Displaying debug trace (plugin "codsql_beta.amxx")
    3. L 08/14/2016 - 23:34:36: [AMXX] Run time error 3: stack error
    4. L 08/14/2016 - 23:34:36: [AMXX]    [0] codsql_beta.sma::Item_Deploy_Post (line 1212)
    Вот собственно функция и строчка:
    Код (Unknown Language):
    1. new WeaponName[24];
    2.     for(new i = CSW_P228; i <= CSW_P90; i++){
    3.         if(i == 2)
    4.             continue;
    5.  
    6.         get_weaponname(i, WeaponName, 23);
    7.         RegisterHam(Ham_Item_Deploy, WeaponName, "Item_Deploy_Post", 1);
    8.     }
    Код (Unknown Language):
    1. public Item_Deploy_Post(ent)
    2. {
    3.     new id = get_pdata_cbase(ent, 41, 4);
    4.     if(!is_user_alive(id))
    5.         return;
    6.  
    7.     new team = get_user_team(id);
    8.     if(team > 2)
    9.         return;
    10.  
    11.     new bron = cs_get_weapon_id(ent);
    12.     if(!((1<<bron) & (bronie_klasy[klasa_gracza[id]] | bonusowe_bronie_gracza[id] | bronie_druzyny[team] | bronie_dozwolone)))
    13.     {
    14.         new weaponname[24]; //1212 line
    15.         get_weaponname(bron, weaponname, 23);
    16.         engclient_cmd(id, "drop", weaponname);
    17.     }
    18.     if(cs_get_user_shield(id) && !gracz_ma_tarcze[id])
    19.         engclient_cmd(id, "drop", "weapon_shield");
    20. }
    Если не ошибаюсь,то это функция блокировки оружия. Если оружия нет в классе,то оно его дропнуть пытается.
    Но у меня стоит вип система и оно не может дропнуть грены,по этому видать и вылетает ошибка.
    Но суть в чём,как сделать исключение к примеру на грены? И на пистолеты желательно!
    Чтобы дропало всё,кроме грен + пистолетов.
    Или может быть я не прав и эта не та функция?
     
  2. pUzzlik Пользователь

    Регистрация:
    06.05.15
    Сообщения:
    847
    Симпатии:
    286
    Пол:
    Мужской
    @ThePhoenix, Если я верно понял вопрос, то ищем следующее.
    PHP:
    1. #define CSW_NONE            0
    2. #define CSW_P228            1
    3. #define CSW_GLOCK           2  // Unused by game, See CSW_GLOCK18.
    4. #define CSW_SCOUT           3
    5. #define CSW_HEGRENADE       4
    6. #define CSW_XM1014          5
    7. #define CSW_C4              6
    8. #define CSW_MAC10           7
    9. #define CSW_AUG             8
    10. #define CSW_SMOKEGRENADE    9
    11. #define CSW_ELITE           10
    12. #define CSW_FIVESEVEN       11
    13. #define CSW_UMP45           12
    14. #define CSW_SG550           13
    15. #define CSW_GALI            14
    16. #define CSW_GALIL           14
    17. #define CSW_FAMAS           15
    18. #define CSW_USP             16
    19. #define CSW_GLOCK18         17
    20. #define CSW_AWP             18
    21. #define CSW_MP5NAVY         19
    22. #define CSW_M249            20
    23. #define CSW_M3              21
    24. #define CSW_M4A1            22
    25. #define CSW_TMP             23
    26. #define CSW_G3SG1           24
    27. #define CSW_FLASHBANG       25
    28. #define CSW_DEAGLE          26
    29. #define CSW_SG552           27
    30. #define CSW_AK47            28
    31. #define CSW_KNIFE           29
    32. #define CSW_P90             30
    33. #define CSW_VEST            31  // Custom
    34. #define CSW_VESTHELM        32  // Custom
    35. #define CSW_SHIELDGUN       99
    36. #define CSW_LAST_WEAPON     CSW_P90
    Как я вижу из кода у тебя уже есть исключения для глока.
    А так то чтобы сделать исключения для грены нужно под цикл добавить
    PHP:
    1. if(i == CSW_HEGRENADE) continue;
    2.  
    3. // or
    4.  
    5. if(i == 4) continue;
    дальше по анологии
     
  3. pUzzlik Пользователь

    Регистрация:
    06.05.15
    Сообщения:
    847
    Симпатии:
    286
    Пол:
    Мужской
    Ах да от и ошибку нашёл, конечно хотелось бы увидеть весь код чтобы наверняка убедиться но все же
    PHP:
    1. new weaponname[24]; //1212 line
    2. get_weaponname(bron, weaponname, 23);
    >>>>
    PHP:
    1. static weaponname[33];
    2. get_weaponname(bron, weaponname, charsmax(weaponname));
    Не знаю что за мудак указал именно такую размерность массива но к примеру CSW_SMOKEGRENADE будет равен 31 байтам почем
    engclient_cmd(id, "drop", weaponname);
    Просто не сможет указать полностью название, ну крч ошибка тут очевидна, но и я могу ошибаться :)
     
  4. Mistrick Разработчик

    Регистрация:
    13.07.15
    Сообщения:
    158
    Симпатии:
    87
    Пол:
    Мужской
    @pUzzlik, откуда там будет 31 байт? "weapon_smokegrenade" - 19 байт. Нет weaponname больше 23 байт, потому столько и выделили. Хотя смок и так самый длинный, значит даже 20 байт достаточно.
     
  5. pUzzlik Пользователь

    Регистрация:
    06.05.15
    Сообщения:
    847
    Симпатии:
    286
    Пол:
    Мужской
    @Mistrick, Ну я по этому посчитал CSW_SMOKEGRENADE :)
     
  6. ThePhoenix Пользователь

    Регистрация:
    08.03.15
    Сообщения:
    1.423
    Симпатии:
    136
    Пол:
    Мужской
    Skype:
    the.phoenix666
    @pUzzlik, я так понял,это :
    if(i == 2)
    Исключение для глока?
    Я могу показать и весь код,просто светить не охота всем.
    Мне бы понадобилась ещё небольшая помощь.