Игрок умер - его оружие пропало.. (EventHookMode_Pre)
|
|
Regedit
|
Дата: Пятница, 14.08.2015, 10:09:03 | Сообщение # 1 |
|
Сообщений: 135
Репутация: 1 [ +/- ]
|
|
Код HookEvent("player_death", playerDeath_Pre, EventHookMode_Pre);
public Action:playerDeath_Pre(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); decl index; for (new slot = 0; slot <= 4; slot++) { if ((index = GetPlayerWeaponSlot(client, slot)) > 0) { if (IsWeapon(index)) PrintToChat(client, "Слот: %d (есть оружие)", index); else PrintToChat(client, "Слот: %d (это не оружие)", index); } else PrintToChat(client, "Слот: %d (нет оружия)", index); } }
Когда я себя убиваю и у меня полный комплект оружия на каждый слот пишит "Слот: %d (нет оружия)"
Что не так??
|
|
| |
BarD
|
Дата: Пятница, 14.08.2015, 11:40:43 | Сообщение # 2 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
Видимо, игрок уже мертв. Поэтому оружие ему не принадлежит. Поэтому нужно проходить по всем энтити, и если это энтити не принадлежит никому, то удалять.
|
|
| |
Regedit
|
Дата: Пятница, 14.08.2015, 11:46:07 | Сообщение # 3 |
|
Сообщений: 135
Репутация: 1 [ +/- ]
|
|
Цитата BarD ( ) Видимо, игрок уже мертв. Поэтому оружие ему не принадлежит. Поэтому нужно проходить по всем энтити, и если это энтити не принадлежит никому, то удалять. Такой вариант мне не подходит.. я спецом юзаю EventHookMode_Pre чтоб перед смертью проверяло... а оно походу не фурычит... удалить нужно не все оружия а конкретно оружия умирающего.
|
|
| |
Scarface_slv
|
Дата: Пятница, 14.08.2015, 16:27:42 | Сообщение # 4 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
Можно разными способами сделать например с SDKHook_OnTakeDamage
|
|
| |
Regedit
|
Дата: Пятница, 14.08.2015, 18:09:40 | Сообщение # 5 |
|
Сообщений: 135
Репутация: 1 [ +/- ]
|
|
Цитата Scarface_slv ( ) Можно разными способами сделать например с SDKHook_OnTakeDamage
спс допер)))Добавлено (14.08.2015, 18:07:49) --------------------------------------------- А как получить индексы его амуниции (оружия) когда игрок отключился? (перед отключением)..?? Добавлено (14.08.2015, 18:09:40) --------------------------------------------- И SDKHook_OnTakeDamage наверно мне тоже не кактит... нужно это применять когда тот сам себя убивает... (меняет команду, пиши kill, выходит с сервера)... вот когда мне нужны индексы его оружий..
Сообщение отредактировал Regedit - Пятница, 14.08.2015, 18:05:24 |
|
| |
Scarface_slv
|
Дата: Пятница, 14.08.2015, 21:43:54 | Сообщение # 6 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
AddCommandListener(Command, "kill"); AddCommandListener(Command, "jointeam"); public OnClientDisconnect(client)
|
|
| |
Regedit
|
Дата: Суббота, 15.08.2015, 01:24:10 | Сообщение # 7 |
|
Сообщений: 135
Репутация: 1 [ +/- ]
|
|
Код KillWeapons(client) { if (GetClientTeam(client) == 3) { new index; for (new slot = 0; slot <= 4; slot++) { if ((index = GetPlayerWeaponSlot(client, slot)) > 0) { RemovePlayerItem(client, index); } PrintToChat(client, "Слот #%d: Индекс: %d", slot, index); } } }
вызываю эту функцию для живого КТ с оружием - Индексы по всем слотам -1... что не так? я че проклятый блин!?
|
|
| |
Tokami
|
Дата: Суббота, 15.08.2015, 20:13:04 | Сообщение # 8 |
|
Сообщений: 238
Репутация: 19 [ +/- ]
|
|
Regedit,
Код new wepIdx; for (new i; i < 4; i++) { if ((wepIdx = GetPlayerWeaponSlot(client, i)) != -1) { RemovePlayerItem(client, wepIdx); AcceptEntityInput(wepIdx, "Kill"); PrintToChat(client, "Слот %d: Индекс: %d", i, wepIdx); } }
|
|
| |
Regedit
|
Дата: Суббота, 15.08.2015, 21:26:39 | Сообщение # 9 |
|
Сообщений: 135
Репутация: 1 [ +/- ]
|
|
Цитата Tokami ( ) Regedit,
Код
new wepIdx; for (new i; i < 4; i++) { if ((wepIdx = GetPlayerWeaponSlot(client, i)) != -1) { RemovePlayerItem(client, wepIdx); AcceptEntityInput(wepIdx, "Kill"); PrintToChat(client, "Слот %d: Индекс: %d", i, wepIdx); } }
молодец что заменил мой код на свои переменные.
|
|
| |
Tokami
|
Дата: Суббота, 15.08.2015, 21:42:37 | Сообщение # 10 |
|
Сообщений: 238
Репутация: 19 [ +/- ]
|
|
Regedit, мой код, давно в админки сделал что когда игроков перебрасывал у них забирало оружия, я бы на твоем месте по благодарил а не выпендривался.
|
|
| |
Sallcom
|
Дата: Воскресенье, 16.08.2015, 03:10:08 | Сообщение # 11 |
|
Сообщений: 205
Репутация: 31 [ +/- ]
|
|
Цитата Tokami ( ) мой код Лол, индекс сохраняется в переменную, а потом объект удаляется, а переменная хранит индекс уже не существующего объекта)
|
|
| |
Tokami
|
Дата: Воскресенье, 16.08.2015, 04:09:44 | Сообщение # 12 |
|
Сообщений: 238
Репутация: 19 [ +/- ]
|
|
Sallcom, дак и пускай, я когда вызову команду он заново объявится.
|
|
| |
_wS_
|
Дата: Воскресенье, 16.08.2015, 06:52:07 | Сообщение # 13 |
|
Цитата Regedit ( ) Когда я себя убиваю и у меня полный комплект оружия на каждый слот пишит "Слот: %d (нет оружия)"
Код HookEvent("player_hurt", player_hurt, EventHookMode_Post);
public player_hurt(Handle:event, const String:name[], bool:silent) { if (GetEventInt(event, "health") < 1) { // тут удаляй оружие } }
Если все оружие удалить надо, то:
Код new entity = CreateEntityByName("player_weaponstrip"); if (entity > MaxClients) { // DispatchSpawn(entity); AcceptEntityInput(entity, "StripWeaponsAndSuit", client); AcceptEntityInput(entity, "Kill"); } else { new elements = GetEntPropArraySize(client, Prop_Send, "m_hMyWeapons"); for (new i = 0; i < elements; i++) { if ((entity = GetEntPropEnt(client, Prop_Send, "m_hMyWeapons", i)) > MaxClients) { // наверно не обязательно // if (IsValidEntity(entity)) // RemovePlayerItem/CS_DropWeapon
AcceptEntityInput(entity, "Kill"); } } }
|
|
| |
Regedit
|
Дата: Воскресенье, 16.08.2015, 12:24:58 | Сообщение # 14 |
|
Сообщений: 135
Репутация: 1 [ +/- ]
|
|
Цитата _wS_ ( ) HookEvent("player_hurt", player_hurt, EventHookMode_Post);
public player_hurt(Handle:event, const String:name[], bool:silent) { if (GetEventInt(event, "health") < 1) { // тут удаляй оружие } }
Если все оружие удалить надо, то:
Код new entity = CreateEntityByName("player_weaponstrip"); if (entity > MaxClients) { // DispatchSpawn(entity); AcceptEntityInput(entity, "StripWeaponsAndSuit", client); AcceptEntityInput(entity, "Kill"); } else { new elements = GetEntPropArraySize(client, Prop_Send, "m_hMyWeapons"); for (new i = 0; i < elements; i++) { if ((entity = GetEntPropEnt(client, Prop_Send, "m_hMyWeapons", i)) > MaxClients) { // наверно не обязательно // if (IsValidEntity(entity)) // RemovePlayerItem/CS_DropWeapon
AcceptEntityInput(entity, "Kill"); } } }
Немного уточню задачу) Нужно забирать у игрока оружие в том случае если он погиб не от игрока противоположной команды... т.к если написал kill или разбился или получил что-то из этого ForcePlayerSuicide(index); ChangeClientTeam(index, 1);... крч если игрок перестал быть живым не по причине смерти от руки противника. Вот.
|
|
| |
pro-health
|
Дата: Понедельник, 17.08.2015, 10:15:48 | Сообщение # 15 |
|
Сообщений: 188
Репутация: 5 [ +/- ]
|
|
Вопрос а как удалить грены? Код decl item; for (new slot = 0; slot < 5; slot++) { if ((item = GetPlayerWeaponSlot(client, slot)) > 0 && RemovePlayerItem(client, item)) { AcceptEntityInput(item, "Kill"); } }
|
|
| |