AMX MOD X
Пятница, 26.04.2024, 10:20:00



Приветствую Вас Гость | RSS
[ Главная ] [ Как исправить? - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Как исправить? (при /weapons давалось несколько оружий + 250 ammo к каждому)
Как исправить?
manyДата: Среда, 19.03.2008, 21:47:18 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 49
Репутация: 0
Статус: Не в сети
Писал я плагин для своего JUMP что бы при /weapons давалось несколько оружий + 250 ammo к каждому... и при перезарядке ammo опять становилось 250
Только AMXX ругаеться потому что я пытаюсь дать weapon_knife ammo
И че то у меня не получаеться сделать норм..
Code
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>

#define PLUGIN    "weapons"
#define AUTHOR    "many"
#define VERSION    "0.1"
#define MAX_WEAPONS     15

new WeaponList[MAX_WEAPONS][] = {
   "weapon_usp", "weapon_glock18", "weapon_deagle", "weapon_p228", "weapon_elite", "weapon_fiveseven",
   "weapon_m3", "weapon_xm1014", "weapon_m4a1",  
   "weapon_famas", "weapon_ak47", "weapon_awp",
   "weapon_galil", "weapon_m249", "weapon_c4"
}

public plugin_init()
{
  register_plugin(PLUGIN, VERSION, AUTHOR)
  register_clcmd( "say /weapons", "cmdweapons",  0, "- give you some weapons")
  register_event("CurWeapon" , "cmdCurWeapon" , "abe", "1=1")
}

public cmdweapons(id)
{
  if( !is_user_alive(id))
     return PLUGIN_HANDLED
  new i
  for( i = 0; i < MAX_WEAPONS; i++ )
  {
  give_item(id, WeaponList[i])
  }
  set_task(0.1,"cmdammo",id)
  return PLUGIN_HANDLED
}

public cmdammo(id)
{
  new Weapons[32]  
  new numWeapons, j, weapon  
  get_user_weapons(id, Weapons, numWeapons)  
  for (j=0; j<numWeapons; j++)  
  {  
  weapon = Weapons[j]  
  cs_set_user_bpammo(id, weapon , 250)
  }  
  return PLUGIN_HANDLED
}

public cmdCurWeapon(id)
{
  if(is_user_alive(id)){
  new Weapons[32]  
  new numWeapons, j, weapon  
  get_user_weapons(id, Weapons, numWeapons)  
  for (j=0; j<numWeapons; j++)  
  {  
  weapon = Weapons[j]
  if(cs_get_user_bpammo(id, weapon) != 250){
  cs_set_user_bpammo(id, weapon , 250)
  }
}
}
  return PLUGIN_HANDLED
}
 
VENДата: Среда, 19.03.2008, 22:28:42 | Сообщение # 2
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Автор, необходимо давать более конкретно название создаваемой теме (добавил описание темы).
  • Необходимо соблюдать Общие правила всех разделов форума.

    "abe" следует исправить на "be", a - это флаг для глобальных событий.

    Последняя функция может быть безболезненно и даже полезно урезана:

    Code
    public cmdCurWeapon(id)
    {
                cs_set_user_bpammo(id, read_data(2), 250)
    }

    Но нужно регистрировать ее с определенными фильтрами, отбросив hegrenade, c4, smokegrenade, flashbang и knife, и, убедившись, что сообщение вызывается для кокретного оружия, а не с нулевым WeaponId(индексом оружия):

    Code
    register_event("CurWeapon" , "cmdCurWeapon" , "be", "1=1", "2>0", "2!4", "2!6", "2!9", "2!25", "2!29")

    set_task() здесь совсем не нужно - это только делает код менее эффективным.

    Для фильтрации вышеуказанных оружий в cmdammo функции предварительно создадим макроконстанту, содержащую бит-сумму индексов этих т.н. "нежелательных" оружий:

    Code
    #define NON_BACKPACK_AMMO_WEAPONS ((1<<CSW_HEGRENADE) | (1<<CSW_C4) | (1<<CSW_SMOKEGRENADE) | (1<<CSW_FLASHBANG) | (1<<CSW_KNIFE))
    После чего в теле цикла перед функцией cs_set_user_bpammo добавим строку проверки на отсутствие принадлежности данного оружия к вышеупомянутым:
    Code
    if (!(NON_BACKPACK_AMMO_WEAPONS & (1<<weapon)))
  •  
    manyДата: Среда, 19.03.2008, 23:08:44 | Сообщение # 3
    Лейтенант
    Группа: Пользователи
    Сообщений: 49
    Репутация: 0
    Статус: Не в сети
    все равно ругаеться...
    L 03/19/2008 - 23:05:09: [CSTRIKE] Invalid weapon id 29
    L 03/19/2008 - 23:05:09: [AMXX] Displaying debug trace (plugin "weapons2.amxx")
    L 03/19/2008 - 23:05:09: [AMXX] Run time error 10: native error (native "cs_set_user_bpammo")
    L 03/19/2008 - 23:05:09: [AMXX] [0] weapons2.sma::cmdCurWeapon (line 61)
    L 03/19/2008 - 23:05:37: [CSTRIKE] Invalid weapon id 29
    L 03/19/2008 - 23:05:37: [AMXX] Displaying debug trace (plugin "weapons2.amxx")
    L 03/19/2008 - 23:05:37: [AMXX] Run time error 10: native error (native "cs_set_user_bpammo")
    L 03/19/2008 - 23:05:37: [AMXX] [0] weapons2.sma::cmdCurWeapon (l

    61 строчка это
    public cmdCurWeapon(id)
    {
    --> cs_set_user_bpammo(id, read_data(2), 250)
    }
    хотя стоит - register_event("CurWeapon" , "cmdCurWeapon" , "be", "1=1", "2>0", "2!4", "2!6", "2!9", "2!25", "2!29")

     
    VENДата: Среда, 19.03.2008, 23:29:14 | Сообщение # 4
    AMXX-Скриптинг-Эксперт
    Группа: Админы
    Сообщений: 1892
    Репутация: 45
    Статус: Не в сети
    Плагин перекомпилирован/переустановлен? А вообще, необходимо вылаживать код в таких случаях.
     
    manyДата: Среда, 19.03.2008, 23:34:51 | Сообщение # 5
    Лейтенант
    Группа: Пользователи
    Сообщений: 49
    Репутация: 0
    Статус: Не в сети
    он и перекомпилирован и переустановлен.
    Code
    #include <amxmodx>
    #include <amxmisc>
    #include <cstrike>
    #include <fun>

    #define PLUGIN    "weapons"
    #define AUTHOR    "many"
    #define VERSION    "0.1"
    #define MAX_WEAPONS     15
    #define NON_BACKPACK_AMMO_WEAPONS ((1<<CSW_HEGRENADE) | (1<<CSW_C4) | (1<<CSW_SMOKEGRENADE) | (1<<CSW_FLASHBANG) | (1<<CSW_KNIFE))

    new WeaponList[MAX_WEAPONS][] = {
          "weapon_usp", "weapon_glock18", "weapon_deagle", "weapon_p228", "weapon_elite", "weapon_fiveseven",
          "weapon_m3", "weapon_xm1014", "weapon_m4a1",     
          "weapon_famas", "weapon_ak47", "weapon_awp",
          "weapon_galil", "weapon_m249", "weapon_c4"
    }

    public plugin_init()
    {
         register_plugin(PLUGIN, VERSION, AUTHOR)
         register_clcmd( "say /weapons", "cmdweapons",  0, "- give you some weapons")
         register_event("CurWeapon" , "cmdCurWeapon" , "be", "1=1", "2>0", "2!4", "2!6", "2!9", "2!25", "2!29")
    }

    public cmdweapons(id)
    {
         if( !is_user_alive(id))
            return PLUGIN_HANDLED
         new i
         for( i = 0; i < MAX_WEAPONS; i++ )
         {
         give_item(id, WeaponList[i])
         }
         set_task(0.1,"cmdammo",id)
         return PLUGIN_HANDLED
    }

    public cmdammo(id)
    {
         new Weapons[32]     
         new numWeapons, j, weapon     
         get_user_weapons(id, Weapons, numWeapons)     
         for (j=0; j<numWeapons; j++)     
         {     
         weapon = Weapons[j]
         if (!(NON_BACKPACK_AMMO_WEAPONS & (1<<weapon)))
         cs_set_user_bpammo(id, weapon , 250)
         }     
         return PLUGIN_HANDLED
    }

    public cmdCurWeapon(id)
    {
         cs_set_user_bpammo(id, read_data(2), 250)     
    }

    Теперь код такой)

    Кстати 250 c4 тоже имееться)))))

    Сообщение отредактировал many - Среда, 19.03.2008, 23:42:45
     
    VENДата: Четверг, 20.03.2008, 00:01:47 | Сообщение # 6
    AMXX-Скриптинг-Эксперт
    Группа: Админы
    Сообщений: 1892
    Репутация: 45
    Статус: Не в сети
    У меня, вроде, работает твой, код как надо. Измени, например, номер версии плагина, перекомпилируй, переустанови плагин, набери в консоли amx_plugins или amxx plugins (в консоли сервера) и проверь, изменился ли номер версии.
     
    manyДата: Четверг, 20.03.2008, 01:14:46 | Сообщение # 7
    Лейтенант
    Группа: Пользователи
    Сообщений: 49
    Репутация: 0
    Статус: Не в сети
    версия поменялась ошибочка эта осталась... она не стразу появляеться а через минуту игры примерно посмотри в консоле серверной
     
    slogicДата: Четверг, 20.03.2008, 13:05:47 | Сообщение # 8
    Генералиссимус
    Группа: Админы
    Сообщений: 1941
    Репутация: 47
    Статус: Не в сети
    Ну и правильно тебе пишет что ошибка, т.к. 29 - это нож.
     
    DaTaДата: Четверг, 20.03.2008, 13:29:56 | Сообщение # 9
    Генерал-полковник
    Группа: Cупер-модеры
    Сообщений: 1025
    Репутация: 16
    Статус: Не в сети
    Quote (many)
    public cmdCurWeapon(id) {cs_set_user_bpammo(id, read_data(2), 250)}

    когда игрок достает нож - ты ему даешь патроны %)
     
    manyДата: Четверг, 20.03.2008, 14:18:17 | Сообщение # 10
    Лейтенант
    Группа: Пользователи
    Сообщений: 49
    Репутация: 0
    Статус: Не в сети
    При регистрации eventa я укзал register_event("CurWeapon" , "cmdCurWeapon" , "be", "1=1", "2>0", "2!4", "2!6", "2!9", "2!25", "2!29")
    Так что он не должен давать патроны ножу (вроде blush )
     
    slogicДата: Четверг, 20.03.2008, 17:10:03 | Сообщение # 11
    Генералиссимус
    Группа: Админы
    Сообщений: 1941
    Репутация: 47
    Статус: Не в сети
    фишка в том, что ты не используешь read_
    Quote (many)
    register_event("CurWeapon" , "cmdCurWeapon" , "be", "1=1", "2>0", "2!4", "2!6", "2!9", "2!25", "2!29")

    а вот кстати, я до сих пор точно не понимаю, все эти условия трактуются как AND или если хотя бы одно выполнилось, то вызвать обработчик? я стараюсь сложные условия писать сам, лично, так надежнее. и тебе советую.
     
    manyДата: Четверг, 20.03.2008, 17:28:56 | Сообщение # 12
    Лейтенант
    Группа: Пользователи
    Сообщений: 49
    Репутация: 0
    Статус: Не в сети
    Quote
    фишка в том, что ты не используешь read_
    а поподробнее можно? =)
     
    VENДата: Четверг, 20.03.2008, 22:25:43 | Сообщение # 13
    AMXX-Скриптинг-Эксперт
    Группа: Админы
    Сообщений: 1892
    Репутация: 45
    Статус: Не в сети
    Quote
    а вот кстати, я до сих пор точно не понимаю, все эти условия трактуются как AND или если хотя бы одно выполнилось, то вызвать обработчик?
    Вопрос в "яблочко". OR - хотя бы одно из условий. Для каждого параметра своя цепочка OR проверок. Именно поэтому, впринципе, ошибка и выскакивает. register_event фильтр - штука удобная, но можно было бы AND функционал добавить, хотя, это усложняет конструкцию, что чревато, поэтому вопрос спорный...

    Quote
    Quote
    фишка в том, что ты не используешь read_

    а поподробнее можно?
    Убери из фильтра условия: "2!4", "2!6", "2!9", "2!25", "2!29"
    В cmdCurWeapon функции сам сконструируй проверку на отсеивание данных индексов оружий. Самый эффективный способ:
    Code
            static iWeaponId
             iWeaponId = read_data(2)
             if (!(NON_BACKPACK_AMMO_WEAPONS & (1<<iWeaponId)))  
                     cs_set_user_bpammo(id, iWeaponId, 250)
     
    manyДата: Пятница, 21.03.2008, 16:44:49 | Сообщение # 14
    Лейтенант
    Группа: Пользователи
    Сообщений: 49
    Репутация: 0
    Статус: Не в сети
    Спасибо всем особенно VEN
    Вот готовый плагин мб кому нить пригодиться )))
    Тему можно закрывать)
    Прикрепления: weapons.sma (1.8 Kb)


    Сообщение отредактировал many - Пятница, 21.03.2008, 16:45:12
     
    BruteДата: Пятница, 21.03.2008, 17:44:40 | Сообщение # 15
    Генерал-полковник
    Группа: Скриптеры
    Сообщений: 1123
    Репутация: 9
    Статус: Не в сети
    закрыто.
     
    AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Как исправить? (при /weapons давалось несколько оружий + 250 ammo к каждому)
    • Страница 1 из 1
    • 1
    Поиск:

    AMX Mod X Russian Community © 2006-2024