|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
Подскажите правельную функцию в hamsandwich !
|
|
Koka | Дата: Среда, 01.07.2009, 19:57:33 | Сообщение # 1 |
Полковник
Группа: Пользователи
Сообщений: 169
Статус: Не в сети
| Нужно перехватить момент, когда клиент получает броню (любую) разным способом (покупает, поднимает и т.д.), а затем установить значение этой брони, чтобы до клиента дошло это без блокирования дополнительных функций (звук при покупке/поднятии, снимание денег и т.д.) примеры: 1)у игрока 0 AP и он купил броню (любую, например b-8-2) - у игрока появилось 200 AP. 2)у игрока 20 AP и он поднял с земли броню, - у игрока появилось 200 AP. help plz ! :'(
стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...
|
|
| |
PAHANCS | Дата: Среда, 01.07.2009, 20:54:57 | Сообщение # 2 |
Полковник
Группа: Пользователи
Сообщений: 183
Статус: Не в сети
| Не пробывал но может вот это, регистрировать по имени класса брони "item_kevlar", "item_assaultsuit": Code /** * Description: Adds the item to the player. * Forward params: function(this, idPlayer); * Return type: Integer (boolean). * Execute params: ExecuteHam(Ham_Item_AddToPlayer, this, idPlayer); */ Ham_Item_AddToPlayer
Ток проблема в том что нет данных о значение этой брони, но можно самому всё это устроить и ставить ретурн на HAM_SUPERCEDE.
PAHANCS
|
|
| |
se7h | Дата: Среда, 01.07.2009, 23:39:18 | Сообщение # 3 |
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Статус: Не в сети
| можно запросто обойтись без hamsandwich используй эвент Battery, вызывается каждый раз когда изменяется количество брони Code #include <amxmodx> #include <fakemeta>
#define OFFSET_ARMORTYPE 112
public plugin_init() { register_event("Battery", "event_set_armor", "be") //если дело касается только покупки или поднятия броника когда тебе нужен лишь момент установки AP в 100 то можно добавить дополнительное условие register_event("Battery", "event_set_armor", "be", "1=100") }
public event_set_armor(id) { static iArmorAmount, iArmorType
iArmorAmount = read_data(1) // количество брони
iArmorType = get_pdata_int(id, OFFSET_ARMORTYPE) //тип брони: 0 - нет брони, 1 - kevlar, 2 - kevlar+helm
if(iArmorAmount ==? && iArmorType == ?) //любые нужные тебе условия, вместо if можно использовать switch set_pev(id, pev_armorvalue, 200.0) //установить нужное количество брони в Float } думаю дальше разберёшься сам
Сообщение отредактировал se7h - Среда, 01.07.2009, 23:55:28 |
|
| |
Koka | Дата: Четверг, 02.07.2009, 12:36:13 | Сообщение # 4 |
Полковник
Группа: Пользователи
Сообщений: 169
Статус: Не в сети
| se7h, спасибо. про батарейку я уже догодался (biohazard посмотрел), а вот "be", "1=100" точно понадобится
стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...
|
|
| |
slogic | Дата: Четверг, 02.07.2009, 13:55:22 | Сообщение # 5 |
Генералиссимус
Группа: Админы
Сообщений: 1941
Статус: Не в сети
| а проверка на 100 зачем? автор просил определить назначение любой брони. кстати, если в другом плагине устанавливается броня, и не рассылается соощение через emessage, то твой плагин сообщение не получит. т.е. в идеальном случае не должно быть активных плагинов, которые модифицируют броню аналогичным способом, иначе будут конфликты.
|
|
| |
se7h | Дата: Четверг, 02.07.2009, 15:21:47 | Сообщение # 6 |
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Статус: Не в сети
| В комментарии к наброску я разъяснил этот момент для решения проблем с другими плагами достаточно разослать emessage 'Battery' и 'ArmorType': Code emessage_begin(MSG_ONE, get_user_msgid("Battery"), _, id) ewrite_byte(x) // x - количество AP emessage_end()
emessage_begin(MSG_ONE, get_user_msgid("ArmorType"), _, id) ewrite_byte(x) // 0 - kevlar, 1 - kevlar+helm emessage_end() Добавлено (2009-07-02, 3:21 Pm) --------------------------------------------- кстати, насчёт брони в CS был замечены глюки(?): 1) если купить kevlar+helm (1000$) и израсходовать часть брони, а потом попытаться приобрести просто kevlar (650$) значение установится в 100 как и положено, значок тоже станет соответсвующим kevlar, но проверка get_pdata_int(id, OFFSET_ARMORTYPE) даёт 2 что расносильно kevlar+helm, хотя повторюсь броня была куплена просто kevlar за 650$ 2) если после того как израсходуется часть kevlar+helm попытаться снова купить такую же броню то снимется не 1000$, а 650$ как за простой kevlar
Сообщение отредактировал se7h - Четверг, 02.07.2009, 15:28:00 |
|
| |
Koka | Дата: Четверг, 02.07.2009, 20:29:13 | Сообщение # 7 |
Полковник
Группа: Пользователи
Сообщений: 169
Статус: Не в сети
| у меня блокирования этого события нету, только смена значение на мое, поэтому мне кажется это лишнее. Code new CsArmorType:stored_armor_type[33] = { CS_ARMOR_NONE, ... }
public msg_battery(msgid, dest, id) { if(!g_HasAccess[id]) return PLUGIN_CONTINUE static CsArmorType:armortype cs_get_user_armor(id, armortype) if(!CanChangeArmorAtUser[id] && armortype == stored_armor_type[id]) return PLUGIN_CONTINUE if(get_msg_arg_int(1) > 0) { cs_set_user_armor(id, CurrentValue[id], armortype) // need? =/ set_msg_arg_int(1, ARG_SHORT, CurrentValue[id]) stored_armor_type[id] = armortype CanChangeArmorAtUser[id] = false } return PLUGIN_CONTINUE }
Float:cs_get_user_armor(index, &CsArmorType:armortype) { new Float:armorvalue pev(index, pev_armorvalue, armorvalue) static offset = 112 armortype = CsArmorType:get_pdata_int(index, offset) return armorvalue }
cs_set_user_armor(index, armorvalue, CsArmorType:armortype) { set_pev(index, pev_armorvalue, float(armorvalue)) static offset = 112 set_pdata_int(index, offset, _:armortype) }
кстате на счёт cs_set_user_armor(id, CurrentValue[id], armortype) // need? =/ - нужно ли это ?? (без этого не проверял, т.к. с этим надежнее )
стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...
|
|
| |
se7h | Дата: Пятница, 03.07.2009, 01:58:57 | Сообщение # 8 |
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Статус: Не в сети
| тип брони можно и не устанавливать, если тебе не нужно его изменить
|
|
| |
Koka | Дата: Пятница, 03.07.2009, 11:59:37 | Сообщение # 9 |
Полковник
Группа: Пользователи
Сообщений: 169
Статус: Не в сети
| я не про тип, который читается стоком по умолчанию и нужен (пока) для этого ...armortype == stored_armor_type[id]), я про то, нужно ли вообще ему менять броню через cs_set_user_armor либо достаточно оставить set_msg_arg_int. спрашиваю, т.к. лень проверять такую ерунду :))) ладно, можно закрывать, вроде все понятно теперь.
стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...
Сообщение отредактировал Koka - Пятница, 03.07.2009, 12:00:31 |
|
| |
| AMX Mod X Russian Community © 2006-2024 | |
|
| |