Admin clan tag

Тема в разделе "Программирование / Скриптинг", создана пользователем zloykif, 23 дек 2012.

  1. zloykif

    zloykif

    Сообщения:
    137
    Симпатии:
    24
    У меня нет никакого опыта в SM плагинах, но хочется кое что сделать, по крайней мере мне кажется что это не сложно.
    Задача: Нужно сделать так что бы название расы из евентскрипт мода WCS, писалось вместо клан тега каждого игрока. В евенте название расы можно выцепить командой es wcs_getinfo <userid> <variable> <info> <player/race/racename> затем эту информацию вставить сюда

    else
    {
    CS_SetClientClanTag(client, "Место для переменной с названием расы");
    }

    За основу берётся выше названный плагин Admin clan tag.
    Халп, возможно ли это и подскажите как сделать если да :)
    #include <sourcemod>
    #include <cstrike>

    public Plugin:myinfo =
    {
    name = "Admin Clan Tag - Russian",
    author = "KeepCalm",
    description = "Private PLugin",
    }

    public OnPluginStart()
    {
    HookEvent("player_team", Event);
    HookEvent("player_spawn", Event);
    }

    public Action:Event(Handle:event, String:name[], bool:dontBroadcast)
    {
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    HandleTag(client);
    }

    public OnClientPostAdminCheck(client)
    {
    HandleTag(client);
    }

    HandleTag(client)
    {
    if (client > 0)
    {
    if (GetUserFlagBits(client) & ADMFLAG_ROOT)
    {
    CS_SetClientClanTag(client, "[владелец]");
    }
    else
    if (GetUserFlagBits(client) & ADMFLAG_GENERIC)
    {
    CS_SetClientClanTag(client, "[админ]");
    }
    else
    if (GetUserFlagBits(client) & ADMFLAG_RESERVATION)
    {
    CS_SetClientClanTag(client, "[VIP]");
    }
    else
    {
    CS_SetClientClanTag(client, "");
    }
    }
    }

    Добавлено через 27 минут
    Главный для меня вопрос, можно ли переменную с инфой из ES как то доставить в см плагин :)
     
    Последнее редактирование: 23 дек 2012
  2. zloykif

    zloykif

    Сообщения:
    137
    Симпатии:
    24
    Грусть печаль ^^
     
  3. FrozDark

    FrozDark Команда сайта HLMod Модератор

    Сообщения:
    1.761
    Симпатии:
    1.916
    конкретнее, как тут получить инфу о расе?
     
    zloykif нравится это.
  4. schmidt

    schmidt wS (skype: ws.css)

    Сообщения:
    188
    Симпатии:
    347
    Пробуй такой вариант:

    PHP:
    #pragma semicolon 1

    #include <sourcemod>
    #include <cstrike>

    new Handle:g_MyCvar;

    public 
    OnPluginStart()
    {
        
    g_MyCvar CreateConVar("wcs_tag_cvar""");
        
    RegServerCmd("set_wcs_tag"set_wcs_tag);
    }

    public 
    Action:set_wcs_tag(args)
    {
        if (
    args != 1)
        {
            
    LogError("Syntax: set_wcs_tag \"userid\"");
            return 
    Plugin_Handled;
        }

        
    decl String:Info[25]; GetCmdArg(1Info25);
        new 
    target GetClientOfUserId(StringToInt(Info));
        if (
    target 0)
        {
            
    Info[0] = '\0'GetConVarString(g_MyCvarInfo25);
            
    CS_SetClientClanTag(targetInfo);
        }

        return 
    Plugin_Handled;
    }

    wS_SetWcsTag(client)
    {
        new 
    id GetClientUserId(client);
        
    ServerCommand("wcs_getinfo %d wcs_tag_cvar name race;set_wcs_tag %d"idid);
    }
    Если не сработает, то попробуй так:

    PHP:
    ServerCommand("wcs_getinfo %d wcs_tag_cvar name race;es_delayed 0.1 set_wcs_tag %d"idid);
    [​IMG]
     
    zloykif нравится это.
  5. zloykif

    zloykif

    Сообщения:
    137
    Симпатии:
    24
    Да, пример я не тот дал не много, расу можно взять так wcs_getinfo event_var(userid) wcs_tmp currace player;es_msg server_var(wcs_tmp)
    http://wikicraft-source.byethost24.com/wikicraft/Wcs_getinfo

    schmidt
    Спасибо, пойду эксперементировать

    upd: пока никак не хочет, изменил на ServerCommand("wcs_getinfo %d wcs_tag_cvar currace player;es_delayed 0.1 set_wcs_tag %d", id, id);
    пишу в чат wcs_getinfo и свой юзерайди, команда ошибку не выдает но таг не ставит, вернее убирает мой и там пустое место

    Пардон, я вообще не шарю конечно, а вот эта часть wS_SetWcsTag(client) когда вообще срабатывает? она нигде не вызывается вроде бы
     
    Последнее редактирование: 26 дек 2012
  6. schmidt

    schmidt wS (skype: ws.css)

    Сообщения:
    188
    Симпатии:
    347
    PHP:
    // Вместо этого (ты давал часть кода, тебе виднее, где это нужно делать):
    CS_SetClientClanTag(client"Место для переменной с названием расы");

    // Вот это:
    wS_SetWcsTag(client);
    Это же серверная команда (rcon), ее вроде нельзя в чате использовать.

    PHP:
    // Ну и для проверки, можешь после этого:
    CS_SetClientClanTag(targetInfo);

    // Добавить это:
    PrintToChat(target"\x04Your tag: \"%s\""Info);
    es_delayed 0.1 set_wcs_tag
    Выполняет команду с задержкой - для увернности, что переменная wcs_tag_cvar успела измениться, если нет - то поставь больше, чем 0.1: 0.2, 0.3 и тд.
     
    zloykif нравится это.
  7. zloykif

    zloykif

    Сообщения:
    137
    Симпатии:
    24
    оговорился, в консоль писал

    Но я думал этот кусок кода будет работать автономно, попробую запихать его в Admin clan tag


    Добавлено через 45 минут
    кучу варнингов выдает при компиляци но вуххууу работает =DD спасибо

    Вот что мы имеем, теперь нужно сделать так что бы клан тег выставлялся всем не в одну секунду, а для каждого человека с задержкой. Иначе получается так что при старте раунда почти у всех одна и та же раса. Ну и к слову на 19,20 строчках дает варнинг, были еще варнинги но их убрал как то)
    PHP:
    #pragma semicolon 1

    #include <sourcemod> 
    #include <cstrike>

    new Handle:g_MyCvar;

    public 
    Plugin:myinfo 
    {
        
    name "wcs_clantag",
        
    author "Автор оригинального плагина KeepCalm",
        
    description "На основе плагина Admin Clan Tag, идея zloykif, помощь в реализации wS",
    }

    public 
    OnPluginStart() 
    {  
        
    HookEvent("player_team"Event); 
        
    HookEvent("player_spawn"Event);
        
    g_MyCvar CreateConVar("wcs_tag_cvar""");
        
    RegServerCmd("set_wcs_tag"set_wcs_tag);    


    public 
    Action:Event(Handle:eventString:name[], bool:dontBroadcast

        new 
    client GetClientOfUserId(GetEventInt(event"userid")); 
        
    HandleTag(client); 
    }

    public 
    Action:set_wcs_tag(args)
    {
        if (
    args != 1)
        {
            
    LogError("Syntax: set_wcs_tag \"userid\"");
            return 
    Plugin_Handled;
        }

        
    decl String:Info[25]; GetCmdArg(1Info25);
        new 
    target GetClientOfUserId(StringToInt(Info));
        if (
    target 0)
        {
            
    Info[0] = '\0'GetConVarString(g_MyCvarInfo25);
            
    CS_SetClientClanTag(targetInfo);
        }

        return 
    Plugin_Handled;
    }

    wS_SetWcsTag(client)
    {
        new 
    id GetClientUserId(client);
        
    ServerCommand("wcs_getinfo %d wcs_tag_cvar name race;set_wcs_tag %d"idid); 


    public 
    OnClientPostAdminCheck(client

        
    HandleTag(client);


    HandleTag(client

      if (
    client 0
      { 
        if (
    GetUserFlagBits(client) & ADMFLAG_ROOT
        { 
            
    CS_SetClientClanTag(client"[Admin] ");
        }
            else
                    if (
    GetUserFlagBits(client) & ADMFLAG_GENERIC
                    { 
                        
    CS_SetClientClanTag(client"[Админ] "); 
                    }
                    else
                        if (
    GetUserFlagBits(client) & ADMFLAG_RESERVATION
                        { 
                            
    CS_SetClientClanTag(client"[Expert] "); 
                        }
                        else
                            if (
    GetUserFlagBits(client) & ADMFLAG_CUSTOM1
                            { 
                                
    CS_SetClientClanTag(client"[VIP] "); 
                            }
                            else
                                if (
    GetUserFlagBits(client) & ADMFLAG_CUSTOM2
                                { 
                                    
    CS_SetClientClanTag(client"[girl] "); 
                                }
                                else
                                    if (
    GetUserFlagBits(client) & ADMFLAG_CUSTOM3
                                    { 
                                        
    CS_SetClientClanTag(client"[0_0] "); 
                                    }                                
                                    else
                                        { 
                                            
    wS_SetWcsTag(client); 
                                        } 
      }
     
    Последнее редактирование: 26 дек 2012
  8. schmidt

    schmidt wS (skype: ws.css)

    Сообщения:
    188
    Симпатии:
    347
    Это мутно очень, тебе просто число нужно подобрать правильное для es_delayed. Будет маленькое - переменная не успеет измениться и ты установишь игроку прошлый тег (прошлое значение переменной wcs_tag_cvar), а если большое, то наоборот, переменная уже изменилась 'x' сколько раз и ты поставишь не тот тег.

    Даже es_delayed 0 имеет эффект, или пробуй 0.01 и тд (кстати es_xdelayed работает быстрее), хотя есть и такой вариант еще:

    PHP:
    ServerCommand("wcs_getinfo %d wcs_tag_cvar name race"id);
    ServerCommand("set_wcs_tag %d"id);
    PHP:
    HandleTag(client)
    {
        if (
    client || IsFakeClient(client))
            return;

        new 
    flags GetUserFlagBits(client);

        if (
    flags ADMFLAG_ROOT)                CS_SetClientClanTag(client"[Admin]");
        else if (
    flags ADMFLAG_GENERIC)        CS_SetClientClanTag(client"[Админ]");
        else if (
    flags ADMFLAG_RESERVATION)    CS_SetClientClanTag(client"[Expert]");
        else if (
    flags ADMFLAG_CUSTOM1)        CS_SetClientClanTag(client"[VIP]");
        else if (
    flags ADMFLAG_CUSTOM2)        CS_SetClientClanTag(client"[girl]");
        else if (
    flags ADMFLAG_CUSTOM3)        CS_SetClientClanTag(client"[0_0]");
        else 
    wS_SetWcsTag(client);
    }
    Ищи правильный вариант. Хотел сам проверить, поставил где-то 3 разные версии wcs'ов, там эта команда вообще не раб (wcs_getinfo).

    [​IMG]
     
    Последнее редактирование: 26 дек 2012
    zloykif нравится это.
  9. zloykif

    zloykif

    Сообщения:
    137
    Симпатии:
    24
    Опять же, я может чего то не понимаю, но предположим на сервере 30 игроков, все они респятся в начале раунда одновременно, разница во времени между респом каждого из них менее 0.1сек о каком подборе "делая" может идти речь? Я пробовал 0.1 делай, 0.2, 0.9 и es_soon

    Лучше уж тогда сделать так что бы раса выставлялась при смерти игрока, хотя на моем сервере не редки случаи когда и по 10 умирает в одну секунду... Нужно всё таки придумать что-то, что бы команда в течении раунда как то раздавала клантеги. Ведь наверняка можно на СМ сделать какой то луп, который каждые 5 сек например выбирает нового игрока и ставит ему клантег и нагрузки от этого не будет особой

    Добавлено через 39 минут
    Да, то что ты предложил подходит вроде бы, по крайней мере сейчас 10 человек на сервере и всё норм :) нужно будет проверить еще когда будет побольше народу
     
    Последнее редактирование: 27 дек 2012
  10. zloykif

    zloykif

    Сообщения:
    137
    Симпатии:
    24
    Всё работает нормально, но помогите внести корректировки небольшие =) Любой кто кодит в см справится.
    добавил отдельный блок wS_SetWcsTaglvl, хочу что бы в нём формировался таг примерно такого формата: [100ур.]
    сейчас же выводит только цифру, как туда втулить символы еще? И возможно ли сделать выравнивание по левому краю?
    #pragma semicolon 1

    #include <sourcemod>
    #include <cstrike>

    new Handle:g_MyCvar;

    public Plugin:myinfo =
    {
    name = "На основе Admin Clan Tag",
    author = "Автор оригинального плагина KeepCalm",
    description = "wcs race tags for players",
    }

    public OnPluginStart()
    {
    HookEvent("player_team", Event);
    HookEvent("player_spawn", Event);
    g_MyCvar = CreateConVar("wcs_tag_cvar", "");
    RegServerCmd("set_wcs_tag", set_wcs_tag);
    }

    public Action:Event(Handle:event, String:name[], bool:dontBroadcast)
    {
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    HandleTag(client);
    }

    public Action:set_wcs_tag(args)
    {
    if (args != 1)
    {
    LogError("Syntax: set_wcs_tag \"userid\"");
    return Plugin_Handled;
    }

    decl String:Info[25]; GetCmdArg(1, Info, 25);
    new target = GetClientOfUserId(StringToInt(Info));
    if (target > 0)
    {
    Info[0] = '\0'; GetConVarString(g_MyCvar, Info, 25);
    CS_SetClientClanTag(target, Info);
    }

    return Plugin_Handled;
    }

    wS_SetWcsTag(client)
    {
    new id = GetClientUserId(client);
    ServerCommand("wcs_getinfo %d wcs_tag_cvar name race", id);
    ServerCommand("set_wcs_tag %d", id);
    }

    wS_SetWcsTaglvl(client)
    {
    new id = GetClientUserId(client);
    ServerCommand("wcs_getinfo %d wcs_tag_cvar totallevel player", id);
    ServerCommand("set_wcs_tag %d", id);
    }

    public OnClientPostAdminCheck(client)
    {
    HandleTag(client);
    }

    HandleTag(client)
    {
    if (client < 1 || IsFakeClient(client))
    return;

    new flags = GetUserFlagBits(client);

    if (flags & ADMFLAG_ROOT) wS_SetWcsTaglvl(client);
    //else if (flags & ADMFLAG_GENERIC) CS_SetClientClanTag(client, "[Админ]");
    else if (flags & ADMFLAG_BAN) CS_SetClientClanTag(client, "[Admin]");
    else if (flags & ADMFLAG_RESERVATION) CS_SetClientClanTag(client, "[Expert]");
    //else if (flags & ADMFLAG_CUSTOM1) CS_SetClientClanTag(client, "[VIP]");
    //else if (flags & ADMFLAG_CUSTOM2) CS_SetClientClanTag(client, "[girl]");
    //else if (flags & ADMFLAG_CUSTOM3) CS_SetClientClanTag(client, "[0_0]");
    else wS_SetWcsTag(client);
    }
     
  11. Impulse72

    Impulse72

    Сообщения:
    246
    Симпатии:
    170
    Я не знаю что это за мод и как там команды работают, но вообще Format(buffer, size, "text", args); - позволяет сфтормировать строку. В твоем случае будет как-то так:
    Format(buffer, sizeof(buffer), "[%i ур.]", lvl);
     
  12. zloykif

    zloykif

    Сообщения:
    137
    Симпатии:
    24
    Да я в этом ничего не понимаю всё равно, откуда это %i берется (вернее берется видимо она из lvl а как туда лвл вставить хз) , что за буфер, что за сайз, куда вообще эту строку вставлять и тд. но спасибо за помощь xD
    На ЕС всё просто и понятно было бы))
    wcs_getinfo event_var(userid) wcs_lvl totallevel player
    es_format wcs_taglvl "%1ур." server_var(wcs_lvl)
    es_msg server_var(wcs_taglvl)