Оптимизация плагина

Mandar1n

theRoone
Пользователь
Регистрация
13 Янв 2018
Сообщения
394
Симпатии
70
Пол
Мужской
Сделал я плагин для зм на тестовый сервер(Идею увидел из одного старого видео зомби биохазарда). Когда люди заходили, они интересовались что за плагин, раз уж многим интересно могу выложить его, но наверное нужна хорошая оптимизация, т.к. много циклов наверное не хорошо) Я просто не знаю, как можно реализовать это все одним циклом, и можно ли?

[ + Знаю, что можно использовать zp_get_zombie_count() и zp_get_human_count(), но я решил все проделать своими проверками ]

C++:
#include <amxmodx>
#include <zombieplague>

const Float:HUD_X = 0.8
const Float:HUD_Y = 0.4

#define TASK_SHOWHUD 100
#define ID_SHOWHUD (taskid - TASK_SHOWHUD)

public plugin_init()
{
    register_plugin("[ZP] Players Status List", "1.0", "Mandar1n")
}

public client_putinserver(id)
{
    if (!is_user_bot(id))
    {
        set_task(1.0, "ShowHUD", id+TASK_SHOWHUD, _, _, "b")
    }
}

public client_disconnected(id)
{
    remove_task(id+TASK_SHOWHUD)
}

public ShowHUD(taskid)
{
    set_dhudmessage(100, 255, 100, HUD_X, HUD_Y, 0, 2.0, 1.0) 
    show_dhudmessage(ID_SHOWHUD, "Alive humans: %d^nAlive zombies: %d^nHumans killed: %d^nZombies killed: %d^nDead players: %d^nSpectators: %d^nTotal players: %d", alivehumans(), alivezombies(), humanskilled(), zombieskilled(), deadplayers(), spectators(), totalplayers())
}

alivehumans()
{
    new player
    for(new id = 1; id <= get_maxplayers(); id++)
    {
        if(is_user_connected(id) && !zp_get_user_zombie(id) && is_user_alive(id))
            player++
    }
    return player
}

alivezombies()
{
    new player
    for(new id = 1; id <= get_maxplayers(); id++)
    {
        if(is_user_connected(id) && zp_get_user_zombie(id) && is_user_alive(id))
            player++
    }
    return player
}

humanskilled()
{
    new player
    for(new id = 1; id <= get_maxplayers(); id++)
    {
        if(is_user_connected(id) && !zp_get_user_zombie(id) && !is_user_alive(id))
            player++
    }
    return player
}

zombieskilled()
{
    new player
    for(new id = 1; id <= get_maxplayers(); id++)
    {
        if(is_user_connected(id) && zp_get_user_zombie(id) && !is_user_alive(id))
            player++
    }
    return player
}

deadplayers()
{
    new player
    for(new id = 1; id <= get_maxplayers(); id++)
    {
        if(is_user_connected(id) && !is_user_alive(id))
            player++
    }
    return player
}

spectators()
{
    new player
    static idTeam, sTeam[16];
    for(new id = 1; id <= get_maxplayers(); id++)
    {
        idTeam  = get_user_team(id, sTeam, charsmax(sTeam));
        if(is_user_connected(id) && idTeam == 3)
            player++
    }
    return player
}

totalplayers()
{
    new player
    for(new id = 1; id <= get_maxplayers(); id++)
    {
        if(is_user_connected(id))
            player++
    }
    return player
}
 
Последнее редактирование:

paffgame

D0L64E6
Разработчик
Регистрация
9 Июн 2017
Сообщения
154
Симпатии
84
Пол
Мужской
Telegram
@paffgame
PHP:
#include <amxmodx>
#include <zombieplague>

#if AMXX_VERSION_NUM < 183
    #include <dhudmessage>
#endif

const Float:HUD_X = 0.8
const Float:HUD_Y = 0.4

#define TASK_SHOWHUD 100

public plugin_init()
{
    register_plugin("[ZP] Players Status List", "1.0", "Mandar1n")
    set_task(1.0, "ShowHUD", TASK_SHOWHUD, _, _, "b")
}

public ShowHUD()
{
    static ahuman, azombies, hkills, zkills, dpls, specs, total;
    ahuman = 0;  
    azombies = 0;  
    hkills = 0;  
    zkills = 0;  
    dpls = 0;  
    specs = 0;
    total = get_pl(ahuman, azombies, hkills, zkills, dpls, specs);
   
    set_dhudmessage(100, 255, 100, HUD_X, HUD_Y, 0, 2.0, 1.0)
    show_dhudmessage(0, "Alive humans: %d^nAlive zombies: %d^nHumans killed: %d^nZombies killed: %d^nDead players: %d^nSpectators: %d^nTotal players: %d", ahuman, azombies, hkills, zkills, dpls, specs, total)
}

stock get_pl(&ahum, &azomb, &hkill, &zkill, &dpl, &spec){
    static pl[32], cnt, i, id, alive;
    get_players(pl, cnt);
   
    for(i = 0; i < cnt; i ++){
        id = pl[i];
        if(!(alive = is_user_alive(id)))
            dpl ++;
           
        if(get_user_team(id) == 3){
            spec ++;
            continue;
        }
       
        switch(zp_get_user_zombie(id)){
            case true:{
                switch(alive){
                    case true:        azomb ++;
                    case false:        zkill ++;
                }
            }
            case false:{
                switch(alive){
                    case true:        ahum ++;
                    case false:        hkill ++;
                }
            }
        }
    }
    return cnt;
}
 

Mandar1n

theRoone
Пользователь
Регистрация
13 Янв 2018
Сообщения
394
Симпатии
70
Пол
Мужской
paffgame, Спасибо. Суть кода ясна, но сам бы не сделал такое)
 
Сверху Снизу