Проверьте на логику\валидность код

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

  1. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.714
    Симпатии:
    451
    PHP:
    #include <rankme>
    public Plugin:myinfo = {
        
    name "RankMe Info",
        
    author "Danyas",
        
    version "1.1",
        
    url "http://hlmod.ru/forum/member.php?u=38940"
    };

    new 
    Handle:g_hPrintType INVALID_HANDLE;
    new 
    Handle:g_hHookType INVALID_HANDLE;
    new 
    g_Type;
    public 
    OnPluginStart()
    {
        
    g_hPrintType CreateConVar("sm_rankinfo_type""2""Display a message saying that your rank. 0 - disable 1 - chat 2 - hint 3 - center"FCVAR_PLUGINtrue0.0true3.0);
        
    g_hHookType CreateConVar("sm_rankinfo_event""1""Display a message on event. 0 - player_death 1 - player_spawn 2 - round_start 3 - round_end [PLUGIN MUST BE RESTARTED AFTER EDIT!!!]"FCVAR_PLUGINtrue0.0true3.0);
    //    if (g_hPrintType) HookConVarChange(g_hHookType, Rehook);
        
    HookConVarChange(g_hPrintTypeRehook_msg);
        new 
    HookType GetConVarInt(g_hHookType);
        if (
    HookType == 0)   HookEvent("player_death"Event_P);
        else if (
    HookType == 1)   HookEvent("player_spawn"Event_P);
        else if (
    HookType == 2)   HookEvent("round_start"Event_R);
        else 
    HookEvent("round_end"Event_R);
        
    g_Type GetConVarInt(g_hPrintType);
        
    AutoExecConfig(true"rankme_info");
    }

    public 
    Rehook_msg(Handle:convar, const String:oldValue[], const String:newValue[])
    {
        
    g_Type GetConVarInt(g_hPrintType);
    }
    /*
    public Rehook(Handle:convar, const String:oldValue[], const String:newValue[])
    {
        if (StrEqual(oldValue, newValue)) return
        else if (StrEqual(oldValue, "0")) UnhookEvent("player_death", Event)
        else if (StrEqual(oldValue, "1")) UnhookEvent("player_spawn", Event)
        else if (StrEqual(oldValue, "2")) UnhookEvent("round_start", Event)
        else UnhookEvent("round_end", Event)
        
        if (StrEqual(newValue, "0")) HookEvent("player_death", Event);
        else if (StrEqual(newValue, "1")) HookEvent("player_spawn", Event);
        else if (StrEqual(newValue, "2")) HookEvent("round_start", Event);
        else  HookEvent("round_end", Event);
    }
    */

    public Event_P(Handleevent , const Stringname[] , booldontBroadcast)
    {
        if(
    g_Type != 0RankMe_GetRank(GetClientOfUserId(GetEventInt(event,"userid")),RankCallback);
    }

    public 
    Event_R(Handleevent , const Stringname[] , booldontBroadcast)
    {
        if(
    g_Type != 0)
        {
            new 
    count 0;
            for (new 
    1<= MaxClientsi++)
            {
                if(
    IsClientInGame(i) && !IsFakeClient(i))
                {
                    
    count++;
                    
    RankMe_GetRank(i,RankCallback);
                }
            }
        }
    }

    public 
    RankCallback(clientrankany:data)
    {
        if(
    IsClientInGame(client) && !IsFakeClient(client)) 
        {
            if(
    g_Type == 1)PrintToChat(client"\x04[RankMe Info]\x01 %N занимает \x04%d\x01 место с \x04%d\x01 очк.",client,rank,RankMe_GetPoints(client));
            else if(
    g_Type == 2)PrintHintText(client"[RankMe Info]\n%N\n%d место\n%d очк.",client,rank,RankMe_GetPoints(client));
            else 
    PrintCenterText(client"[RankMe Info]\n%N\n%d место\n%d очк.",client,rank,RankMe_GetPoints(client));
        }
    }

    Буду рад варианту реализации закоменченой части кода :)
    На сервере всё работает

    [​IMG]

    [​IMG]
     
  2. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.977
    Danyas, зачем создавать новые темы? задавай вопросы в одной теме
     
  3. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.977
    PHP:
    new HookType GetConVarInt(g_hHookType);
        if (
    HookType == 0)   HookEvent("player_death"Event_P);
        else if (
    HookType == 1)   HookEvent("player_spawn"Event_P);
        else if (
    HookType == 2)   HookEvent("round_start"Event_R);
        else 
    HookEvent("round_end"Event_R);
    ->
    PHP:
     switch(GetConVarInt(g_hHookType))
    {
        case 
    0HookEvent("player_death"Event_P);
        case 
    1HookEvent("player_spawn"Event_P);
        case 
    2HookEvent("round_start"Event_R);
        case 
    3HookEvent("round_end"Event_R);
    }
    PHP:
    if(g_Type == 1)PrintToChat(client"\x04[RankMe Info]\x01 %N занимает \x04%d\x01 место с \x04%d\x01 очк.",client,rank,RankMe_GetPoints(client));
            else if(
    g_Type == 2)PrintHintText(client"[RankMe Info]\n%N\n%d место\n%d очк.",client,rank,RankMe_GetPoints(client));
            else 
    PrintCenterText(client"[RankMe Info]\n%N\n%d место\n%d очк.",client,rank,RankMe_GetPoints(client));
    Тут так же switch

    PHP:
    new count 0;
            for (new 
    1<= MaxClientsi++)
            {
                if(
    IsClientInGame(i) && !IsFakeClient(i))
                {
                    
    count++;
                    
    RankMe_GetRank(i,RankCallback);
                }
            }
    нафига тут count ?
     
    Danyas нравится это.
  4. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.714
    Симпатии:
    451
    То ведь другой код был.
    Было бы неплохо одну тему для всех сделать

    Списано с старого исходника, он нужен тогда был, забыл убрать.

    За switch - спасибо, мне теперь всё мои плагины переписать :D
    Теперь куда только можно засовывать его буду)
    Он может искать по String'овому значению?
     
  5. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.977
    нет
     
  6. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.506
    Симпатии:
    1.961
    Все квары действенны во время работы сервера (можно вбивать прямо в консоль), а sm_rankinfo_type "0" производит полное отключение плагина:
    PHP:
    #include <rankme>
    public Plugin:myinfo = {
        
    name "RankMe Info",
        
    author "Danyas",
        
    version "1.1",
        
    url "http://hlmod.ru/forum/member.php?u=38940"
    };

    new 
    g_Typeg_HookType;
    public 
    OnPluginStart()
    {
        
    decl Handle:cvar;
        
    HookConVarChange(cvar CreateConVar("sm_rankinfo_type""2""Display a message saying that your rank. 0 - disable 1 - chat 2 - hint 3 - center"FCVAR_PLUGINtrue0.0true3.0), Rehook_msg);
        
    g_Type GetConVarInt(cvar);
        
    HookConVarChange(cvar CreateConVar("sm_rankinfo_event""1""Display a message on event. 0 - player_death 1 - player_spawn 2 - round_start 3 - round_end [PLUGIN MUST BE RESTARTED AFTER EDIT!!!]"FCVAR_PLUGINtrue0.0true3.0), Rehook);
        
    g_HookType GetConVarInt(cvar);
        
    CloseHandle(cvar);
        if(
    g_TypeHookEventType();
        
    AutoExecConfig(true"rankme_info");
    }

    public 
    Rehook_msg(Handle:convarString:oldValue[], String:newValue[])
    {
        if(
    g_Type)
        {
            if((
    g_Type GetConVarInt(convar)) == 0UnhookEventType();
        }
        else if((
    g_Type GetConVarInt(convar))) HookEventType();
    }

    public 
    Rehook(Handle:convarString:oldValue[], String:newValue[])
    {
        if(
    g_Type)
        {
            
    UnhookEventType();
            
    g_HookType GetConVarInt(cvar);
            
    HookEventType();
        }
        else 
    g_HookType GetConVarInt(cvar);
    }

    public 
    Event_P(Handleevent Stringname[] , booldontBroadcastRankMe_GetRank(GetClientOfUserId(GetEventInt(event,"userid")),RankCallback);

    public 
    Event_R(Handleevent Stringname[] , booldontBroadcast) for (new 1<= MaxClientsi++) if(IsClientInGame(i)) RankMe_GetRank(i,RankCallback);

    public 
    RankCallback(clientrankany:data)
    {
        if(
    IsFakeClient(client) == false
        {
            switch(
    g_Type)
            {
                case 
    1PrintToChat(client"\x04[RankMe Info]\x01 %N занимает \x04%d\x01 место с \x04%d\x01 очк.",client,rank,RankMe_GetPoints(client));
                case 
    2PrintHintText(client"[RankMe Info]\n%N\n%d место\n%d очк.",client,rank,RankMe_GetPoints(client));
                default: 
    PrintCenterText(client"[RankMe Info]\n%N\n%d место\n%d очк.",client,rank,RankMe_GetPoints(client));
            }
        }
    }

    HookEventType()
    {
        switch(
    g_HookType)
        {
            case 
    0HookEvent("player_death"Event_P);
            case 
    1HookEvent("player_spawn"Event_P);
            case 
    2HookEvent("round_start"Event_REventHookMode_PostNoCopy);
            default: 
    HookEvent("round_end"Event_REventHookMode_PostNoCopy);
        }
    }
    UnhookEventType()
    {
        switch(
    g_HookType)
        {
            case 
    0UnhookEvent("player_death"Event_P);
            case 
    1UnhookEvent("player_spawn"Event_P);
            case 
    2UnhookEvent("round_start"Event_REventHookMode_PostNoCopy);
            default: 
    UnhookEvent("round_end"Event_REventHookMode_PostNoCopy);
        }
    }
     
    Danyas нравится это.