Урон по одному союзнику

Тема в разделе "Программирование / Скриптинг", создана пользователем Primo, 20 май 2015.

  1. Primo

    Primo Где мои манеры

    Сообщения:
    1.336
    Симпатии:
    409
    Заинтересовался в нанесении урона не по всем союзникам, а только по одному. Т.е. все могут бить одного союзника, а он может бить их всех. Толпа бить друг друга не может, только одного :D

    Хотелось бы узнать варианты реализации подобного. Кому не жалко поделиться :D
     
  2. AlmazON

    AlmazON Не путать с самим yand3xmail

    Сообщения:
    5.165
    Симпатии:
    2.434
    mp_friendlyfire 1
    Определяешь индекс "особенного" игрока и просто проверяешь урон относительно него.
    Если событием хукнул, то просто возвращаешь всем союзникам HP, когда бьют не его.
    Если SDHook, то просто блокируешь такой же урон.
     
    TWRP и Primo нравится это.
  3. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.052
    Симпатии:
    695
    Primo, Оффтоп
     
  4. Primo

    Primo Где мои манеры

    Сообщения:
    1.336
    Симпатии:
    409
    EPacker2, скорее, чтобы люди искали кого забить до смерти
     
  5. AlmazON

    AlmazON Не путать с самим yand3xmail

    Сообщения:
    5.165
    Симпатии:
    2.434
    Урон по одному союзнику, а он - по всем

    Если ещё не нашлось хорошего варианта:
    PHP:
    #define ANTIFRIEND_INDEX 1

    public OnPluginStart() HookEvent("player_hurt"Event_PlayerHurt);

    public 
    Event_PlayerHurt(Handle:eventString:name[], bool:dontBroadcast)
    {
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));
        if(
    attacker && attacker != ANTIFRIEND_INDEX)
        {
            new 
    client GetClientOfUserId(GetEventInt(event"userid"));
            if(
    attacker != client && client != ANTIFRIEND_INDEX && GetClientTeam(attacker) == GetClientTeam(client))
            {
                
    SetEntProp(clientProp_Send"m_iHealth"GetEventInt(event"dmg_health")+GetEventInt(event"health"));
            }
        }
    }
    mp_friendlyfire 1 не забывываем.
     
    Primo нравится это.
  6. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    298
    Симпатии:
    681
    Re: Урон по одному союзнику, а он - по всем

    EventHookMode_Pre для такого обязателен. Иначе попадание в голову (или нанесение урона больше, чем есть у человека) = смерть. К тому же каждый раунд один и тот же игрок будет этой целью. Как только он покинет сервер, не будет игрока, в которого можно стрелять. Всё же стоит определить этот индекс глобально и выбирать его случайным каждый раунд.
     
    Primo нравится это.
  7. R1KO

    R1KO Source Dealer Супер-модератор

    Сообщения:
    6.805
    Симпатии:
    3.854
    AlmazON, не лучше ли через sdkhooks ?

    Reiko1231, индекс он написал просто для примера. ТС сам уже подстроит
     
    Primo нравится это.
  8. AlmazON

    AlmazON Не путать с самим yand3xmail

    Сообщения:
    5.165
    Симпатии:
    2.434
    Сначала вызывается событие урона, а уже позже - смерти. Так что, данное событие просто переустановит HP - должно быть нормально.
    Пользовался как-то - вроде никто не умирал.
    Лучше, но там расписывать побольше) Я больше пример привёл, собственно проверок, для достижения эффекта. А чем и как - дело личное.
     
    Primo нравится это.
  9. R1KO

    R1KO Source Dealer Супер-модератор

    Сообщения:
    6.805
    Симпатии:
    3.854
    Re: Урон по одному союзнику, а он - по всем

    PHP:
    #define ANTIFRIEND_INDEX 1

    public OnClientPutInServer(iClient)
    {
        
    SDKHook(iClientSDKHook_OnTakeDamageOnTakeDamage);
    }

    public 
    Action:OnTakeDamage(iClient, &iAttacker, &inflictor, &Float:damage, &damagetype)
    {
        if(
    iAttacker && iAttacker != ANTIFRIEND_INDEX && iAttacker != iClient && iClient != ANTIFRIEND_INDEX && GetClientTeam(iAttacker) == GetClientTeam(iClient))
        {
            
    damage 0.0;
            return 
    Plugin_Changed;
        }

    }
    Или просто return Plugin_Handled;
     
    Primo нравится это.
  10. AlmazON

    AlmazON Не путать с самим yand3xmail

    Сообщения:
    5.165
    Симпатии:
    2.434
    Не так. Раз уж взялся расписывать, то хукаем только участников нужной команды. Поскольку среди них и есть нужные атакующие, так и сама жертва. А раз оба типа этих индексов присутствует, то должно работать и без глобального хука. Оффтоп
     
    Последнее редактирование: 22 май 2015
    Primo нравится это.
  11. R1KO

    R1KO Source Dealer Супер-модератор

    Сообщения:
    6.805
    Симпатии:
    3.854
    AlmazON, если для игрока не хуункуто то он будет 0.
    Следовательно ты не узнаешь он упал или его ранили из чужой команды.

    Лучше лишний раз проверить
     
    Primo нравится это.
  12. AlmazON

    AlmazON Не путать с самим yand3xmail

    Сообщения:
    5.165
    Симпатии:
    2.434
    Разве атакующий тогда не будет 0? Он то в проверке так и остаётся (ты же оставил) - мир то поэтому и не хукается.
     
    Primo нравится это.