Admin clan tag

zloykif

Участник
Сообщения
156
Реакции
21
У меня нет никакого опыта в 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 как то доставить в см плагин :)
 
Последнее редактирование:

_wS_

Участник
Сообщения
383
Реакции
760
Пробуй такой вариант:

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(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;set_wcs_tag %d", id, id);
}
Если не сработает, то попробуй так:

PHP:
ServerCommand("wcs_getinfo %d wcs_tag_cvar name race;es_delayed 0.1 set_wcs_tag %d", id, id);

vlcsnap_2012_12_14_07h43m12s157.jpg
 

zloykif

Участник
Сообщения
156
Реакции
21
конкретнее, как тут получить инфу о расе?
Да, пример я не тот дал не много, расу можно взять так 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) когда вообще срабатывает? она нигде не вызывается вроде бы
 
Последнее редактирование:

_wS_

Участник
Сообщения
383
Реакции
760
Пардон, я вообще не шарю конечно, а вот эта часть wS_SetWcsTag(client) когда вообще срабатывает? она нигде не вызывается вроде бы

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

// Вот это:
wS_SetWcsTag(client);

пишу в чат wcs_getinfo
Это же серверная команда (rcon), ее вроде нельзя в чате использовать.

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

// Добавить это:
PrintToChat(target, "\x04Your tag: \"%s\"", Info);

es_delayed 0.1 set_wcs_tag
Выполняет команду с задержкой - для увернности, что переменная wcs_tag_cvar успела измениться, если нет - то поставь больше, чем 0.1: 0.2, 0.3 и тд.
 

zloykif

Участник
Сообщения
156
Реакции
21
Это же серверная команда (rcon), ее вроде нельзя в чате использовать
оговорился, в консоль писал

Но я думал этот кусок кода будет работать автономно, попробую запихать его в 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: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;set_wcs_tag %d", id, id); 
} 

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); 
                                    } 
  }
}
 
Последнее редактирование:

_wS_

Участник
Сообщения
383
Реакции
760
Иначе получается так что при старте раунда почти у всех одна и та же раса
Это мутно очень, тебе просто число нужно подобрать правильное для 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 < 1 || 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).

vlcsnap_2012_12_14_07h44m26s137.jpg
 
Последнее редактирование:

zloykif

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

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

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

zloykif

Участник
Сообщения
156
Реакции
21
Всё работает нормально, но помогите внести корректировки небольшие =) Любой кто кодит в см справится.
добавил отдельный блок 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);
}
 

Impulse72

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

zloykif

Участник
Сообщения
156
Реакции
21
Да я в этом ничего не понимаю всё равно, откуда это %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)
 
Сверху Снизу