Half-Life и Adrenaline Gamer форум

Всё об игре в Халф-Лайф и АГ
Текущее время: 01 июн 2015, 08:26

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Стрип всего оружия при убийстве
СообщениеДобавлено: 30 июн 2014, 18:21 
Не в сети
Зарегистрирован:
06 авг 2010, 10:25
Последнее посещение:
19 май 2015, 13:59
Сообщения: 653
Откуда: Uzbekistan
Как правильно забрать всё оружие у игрока при убийстве?

Убийство хукается при помощи hamsandwich.
Код:
RegisterHam(Ham_Killed,"player","On_PlayerKilled",true)
.
Забирается оружие при помощи функции strip_user_weapons.

Проблема в том, что если убить из огнестрельного оружия (MP5,357,glock и т.д.) сервер сразу падает.

Пытался стрипать таким методом:
Код:
new wEnt = get_pdata_cbase(id,modOffsets[m_pActiveItem])
new wId = get_user_weapon(id)

if(is_valid_ent(wEnt)){
   ExecuteHam(Ham_Weapon_RetireWeapon,wEnt)
   
   if(ExecuteHam(Ham_RemovePlayerItem,id,wEnt))
      ExecuteHam(Ham_Item_Kill,wEnt)
      
   entity_set_int(id,EV_INT_weapons,entity_get_int(id,EV_INT_weapons) & ~(1<<wId))
}
Один фиг падает.
Как игрок мог кого-то убить, если он не выстрелил до конца? хД

_________________
Изображение


Вернуться к началу
 Профиль 
  
СообщениеДобавлено: 01 июл 2014, 12:05 
Не в сети
Зарегистрирован:
06 авг 2010, 10:25
Последнее посещение:
19 май 2015, 13:59
Сообщения: 653
Откуда: Uzbekistan
Пытался в Weapon_PrimaryAttack_Post удалять оружие. Пример кода:
Код:
new HamHook:primaryAttack

priamryAttack = RegisterHam(Ham_Weapon_PrimaryAttack,"weapon_9mmAR","On_WeaponFirePost",true)
DisableHamForward(primaryAttack)

public On_PlayerKilled(victim,killer)
   EnableHamForward(primaryAttack)

public On_WeaponFirePost(ent){
   new owner = entity_get_edic(ent,EV_ENT_owner)
   strip_user_weapons(owner)

   DisableHamForward(primaryAttack)
}

Вроде работает, но очень часто в WeaponFirePost прилетает оружие другого игрока.
FAIL

Добавлено спустя 11 минут 49 секунд:
Решил так:
Код:
if(killer == inflictor){
   set_task(0.1,"Do_PlayerStrip",killer)
         
   return HAM_IGNORED
}

public Do_PlayerStrip(id)
   if(is_user_alive(id))
      strip_user_weapons(id)
Изображение

_________________
Изображение


Вернуться к началу
 Профиль 
  
СообщениеДобавлено: 01 июл 2014, 14:17 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
01 июн 2015, 02:09
Сообщения: 4973
А интересный, кстати, вопрос.
Попробовал через Post Player_PostThink.
 

Бывает нормально срабатывает
Цитата:
time: 118.106292, killer: 5, victim: 4
weaponName: 357
L 07/01/2014 - 14:05:08: "[XDM]Headless_Driver<5><BOT><5>" killed "Sampson<4><BOT><4>" with "357"
Player_PostThink time: 118.106292, id: 5

time: 129.841629, killer: 4, victim: 2
weaponName: 357
L 07/01/2014 - 14:05:20: "Sampson<4><BOT><4>" killed "Riderless_Head[HL1DM]<2><BOT><2>" with "357"
Player_PostThink time: 129.841629, id: 4

Бывает нет
Цитата:
time: 141.947540, killer: 2, victim: 4
weaponName: hornet
L 07/01/2014 - 14:05:32: "Riderless_Head[HL1DM]<2><BOT><2>" killed "Sampson<4><BOT><4>" with "hornet"
Player_PostThink time: 141.971496, id: 1

Можно заметить, что при неправильном время пост синка позже времени выстрела. Просто это другой игрок уже думает. А почему не сработало на стрелявшего - непонятно пока.
Отключил в коде включение/отключение форварда (см в коде) - не помогло, значит не в этом дело.
Т.е., либо выстрел не в пост синке, либо пост пост синк не всегда срабатывает. И то, и то, довольно странно.

GordonFreeman писал(а):
Вроде работает, но очень часто в WeaponFirePost прилетает оружие другого игрока.
Видимо здесь аналогичный эффект.

А вот пример почему нельзя удалять во время выстрела:
Цитата:
time: 266.264221, killer: 3, victim: 1
weaponName: rpg_rocket
L 07/01/2014 - 14:07:36: "mister_million_names<3><BOT><3>" killed "BAC9<1><BOT><1>" with "rpg_rocket"
time: 266.264221, killer: 3, victim: 6
weaponName: rpg_rocket
L 07/01/2014 - 14:07:36: "mister_million_names<3><BOT><3>" killed "AngelsGuru<6><BOT><6>" with "rpg_rocket"
Player_PostThink time: 266.285705, id: 1

time: 160.203094, killer: 5, victim: 3
weaponName: rpg_rocket
L 07/01/2014 - 14:05:50: "[XDM]Headless_Driver<5><BOT><5>" killed "mister_million_names<3><BOT><3>" with "rpg_rocket"
time: 160.203094, killer: 5, victim: 5
weaponName: rpg_rocket
L 07/01/2014 - 14:05:50: "[XDM]Headless_Driver<5><BOT><5>" committed suicide with "rpg_rocket"
Player_PostThink time: 160.216598, id: 1
OnDeath вызывается несколько раз для одного оружия. И было бы странно удалить его во время первого вызова.

Добавлено спустя 1 час 44 секунды:
Неверно работает лишь для ракет, гранат и т.п., что логично.


Вернуться к началу
 Профиль 
  
СообщениеДобавлено: 01 июл 2014, 19:20 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
01 июн 2015, 02:09
Сообщения: 4973
Вот мое видение решения этого вопроса.
А заодним получился забавный мод.
Вложение:
Комментарий к файлу: Retire Weapon Mod plugin by Lev. All weapons are stripped when player kills somebody.
Скачать плагин или Скачать исходник [retire_weapon_mod.sma - 1.8 КБ]
Скачиваний: 28

Нормально работает на ракетах, с задержкой:
Цитата:
time: 192.035446, killer: 3, victim: 1
weaponName: rpg_rocket
L 07/01/2014 - 19:04:13: "Sampson<5><BOT><5>" killed "BAC9<1><BOT><1>" with "rpg_rocket"
time: 192.035446, killer: 3, victim: 9
weaponName: rpg_rocket
L 07/01/2014 - 19:04:13: "Sampson<5><BOT><5>" killed "Food_Fighter<11><BOT><11>" with "rpg_rocket"
Player_PostThink time: 192.042236, id: 3

На гауссе:
Цитата:
time: 204.747955, killer: 3, victim: 9
weaponName: gauss
L 07/01/2014 - 19:04:26: "Sampson<5><BOT><5>" killed "Food_Fighter<11><BOT><11>" with "tau_cannon"
time: 204.747955, killer: 3, victim: 2
weaponName: gauss
L 07/01/2014 - 19:04:26: "Sampson<5><BOT><5>" killed "Ryan_The_Leet<4><BOT><4>" with "tau_cannon"
Player_PostThink time: 204.747955, id: 3

Ну и на всём остальном:
Цитата:
time: 198.250015, killer: 3, victim: 2
weaponName: grenade
L 07/01/2014 - 19:04:19: "Sampson<5><BOT><5>" killed "Ryan_The_Leet<4><BOT><4>" with "grenade"
Player_PostThink time: 198.256668, id: 3

time: 198.719741, killer: 7, victim: 3
weaponName: shotgun
L 07/01/2014 - 19:04:20: "AngelsGuru<9><BOT><9>" killed "Sampson<5><BOT><5>" with "shotgun"
Player_PostThink time: 198.719741, id: 7

time: 200.326416, killer: 5, victim: 7
weaponName: 9mmhandgun
L 07/01/2014 - 19:04:21: "[AG]FragFag<7><BOT><7>" killed "AngelsGuru<9><BOT><9>" with "9mmhandgun"
Player_PostThink time: 200.326416, id: 5


Вернуться к началу
 Профиль 
  
СообщениеДобавлено: 02 июл 2014, 04:25 
Не в сети
Аватара пользователя
Зарегистрирован:
15 апр 2011, 22:26
Последнее посещение:
19 май 2015, 04:01
Сообщения: 132
Откуда: Астрахань
Можно вопрос: а зачем? :D

_________________
Изображение


Вернуться к началу
 Профиль 
  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: Yahoo [Bot] и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB