Заказать Сервер Заказать Плагин Контакты Поиск

[ вход ]
[ последние сообщения ]

Страница 1 из 212»
Форум » SourceMod - Counter Strike Source && CS GO » Обсуждение » Игрок умер - его оружие пропало.. (EventHookMode_Pre)
Игрок умер - его оружие пропало.. (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
Сообщений: 944
Репутация: 132 [ +/- ]
Видимо, игрок уже мертв. Поэтому оружие ему не принадлежит. Поэтому нужно проходить по всем энтити, и если это энтити не принадлежит никому, то удалять.
 
Regedit Дата: Пятница, 14.08.2015, 11:46:07 | Сообщение # 3
Сообщений: 135
Репутация: 1 [ +/- ]
Цитата BarD ()
Видимо, игрок уже мертв. Поэтому оружие ему не принадлежит. Поэтому нужно проходить по всем энтити, и если это энтити не принадлежит никому, то удалять.

Такой вариант мне не подходит.. я спецом юзаю EventHookMode_Pre чтоб перед смертью проверяло... а оно походу не фурычит... удалить нужно не все оружия а конкретно оружия умирающего.
 
Scarface_slv Дата: Пятница, 14.08.2015, 16:27:42 | Сообщение # 4
Сообщений: 749
Репутация: 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
Сообщений: 749
Репутация: 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);
   }
  }


молодец что заменил мой код на свои переменные. xaxa
 
Tokami Дата: Суббота, 15.08.2015, 21:42:37 | Сообщение # 10
Сообщений: 238
Репутация: 19 [ +/- ]
Regedit, мой код, давно в админки сделал что когда игроков перебрасывал у них забирало оружия, я бы на твоем месте по благодарил а не выпендривался.
 
Sallcom Дата: Воскресенье, 16.08.2015, 03:10:08 | Сообщение # 11
Сообщений: 206
Репутация: 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");  
     }
    }
 
Форум » SourceMod - Counter Strike Source && CS GO » Обсуждение » Игрок умер - его оружие пропало.. (EventHookMode_Pre)
Страница 1 из 212»
Поиск: