А интересный, кстати, вопрос.
Попробовал через Post Player_PostThink.
Код:
#include <amxmodx>
#include <engine>
#include <fakemeta_util>
#include <hamsandwich>
#pragma ctrlchar '\'
#define AUTHOR "Lev"
#define PLUGIN "test"
#define VERSION "0.0"
#define _DEBUG
new HamHook:_ham_Player_PostThink;
new bool:killed;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_event("DeathMsg", "OnDeath", "a");
_ham_Player_PostThink = RegisterHam(Ham_Player_PostThink, "player", "Player_PostThink", 1);
//DisableHamForward(_ham_Player_PostThink);
}
public OnDeath()
{
new killer = read_data(1);
new victim = read_data(2);
#if defined _DEBUG
server_print("time: %f, killer: %i, victim: %i", get_gametime(), killer, victim);
#endif
// Return if there is no victim
if (!victim) return PLUGIN_CONTINUE;
// If no killer then this is selfkill
if (!killer) killer = victim;
// Get weapon name
new weaponName[32];
new num = read_datanum();
// In HL weapon name is in 4 parameter, in CS it is 5
read_data(num - 1, weaponName, charsmax(weaponName));
#if defined _DEBUG
server_print("weaponName: %s", weaponName);
#endif
killed = true;
//EnableHamForward(_ham_Player_PostThink);
return PLUGIN_CONTINUE;
}
public Player_PostThink(id)
{
if (!killed) return;
#if defined _DEBUG
server_print("Player_PostThink time: %f, id: %i", get_gametime(), id);
#endif
fm_strip_user_weapons(id);
//DisableHamForward(_ham_Player_PostThink);
killed = false;
}
Бывает нормально срабатывает
Цитата:
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 секунды:Неверно работает лишь для ракет, гранат и т.п., что логично.