Написание плагинов

dead_soul

Участник
Сообщения
69
Реакции
7
Re: Join Server Admin v1.1 по SteamID

Строка
C-подобный:
new const String:SteamID[][] = {"[B]Steam ID[/B]", "[B]SteamID 2[/B]"};
где Steam ID и SteamID 2 - вписать SteamID админов. Ограничения по количеству нет, просто продолжать перечислять их через запятую.


Спасибо)
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
Помню, делал return через переменную - продолжался. Без переменной что-то меняется или так должен оборваться? Не знаю тогда, как я там пробовал тогда в то время...

PHP:
stock bool:CheckSteamID(const String:steam[])
{
	for (new i = 0; i < iSteam; i++)
	{
		if (strcmp(steam, SteamID[i], false) == 0)
		{
			return true;
		}
	}
	return false;
}

return false;
Выйдет из функции CheckSteamID и вернет true;

break;
Выйдет только из цикла, следовательно ф-я вернет false;

Может ты недоглядел тогда у себя. Но тут верно.
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
The End Is Near...,
Не нужен он тут, мы же не собираемся делать эту функцию для общего применения ещё где-либо или не использовать вовсе.
new по умолчанию всегда инициализируется нулём, нет смысла это обязательно приписывать.
Этим ты повышаешь нагрузку, заставляя проверять оба регистра (в данном случае, это вообще не имеет смысла, если сразу прописывать правильно).
Ты избавился от переменной, но минус в том, что цикл продолжит длиться.

Это мой стиль написания, ага? Самое главное, что хотел донести, это false/true
 

meladzevalerii

Участник
Сообщения
45
Реакции
4
1. Название плагина - Кровавое помутнение при смерти

2. Детальное описание
Играл сегодня на оф сервере Гонки вооружений. При смерти экран по углам кроваво мутнел. Можно ли сделать подобное при смерти любых игроков на паблик сервере.

Добавлено через 21 час 28 минут
Вот этот эффект. Хотелось бы такой эффект добавить для умирающего игрока - например, если 1 хп то появляется этот эффект. Если умираешь, то появляется этот эффект.

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

★$$StOk$$★

Участник
Сообщения
629
Реакции
187
Приветствую, требуется написать небольшой плагин для открытие MOTD окон в CS:GO, достаточно 4-5 команд вызова в стандартом виде, дальше если понадобиться по аналогии добавлю больше. Благодарю.
 

★$$StOk$$★

Участник
Сообщения
629
Реакции
187
Это? 2 раза пропиши команду, если что.
Я как понял в CSGO какая то другая система, на source юзал такой код
C-подобный:
#pragma semicolon 1 
#include <sourcemod> 

new Handle:g_href = INVALID_HANDLE; 

public OnPluginStart() 
{ 
   
    g_href = CreateConVar("sm_motd_rules", "ссылка", ""); 
     
    RegConsoleCmd("say", CommandSay); 
    RegConsoleCmd("say_team", CommandSay); 
} 

public  Action:CommandSay(client, args ) 
{ 
    decl String:ClSay[16]; 
    GetCmdArgString(ClSay, sizeof(ClSay)-1); 
    StripQuotes(ClSay); 
    TrimString(ClSay); 
    if( StrEqual(ClSay, "!rules", false) || (ClSay, "!правила", false))  
    { 
        decl String:href[255];  
        GetConVarString(g_href, href, sizeof(href)); 
        ShowMOTDPanel(client,"", href, MOTDPANEL_TYPE_URL); 
    } 
     
    return Plugin_Continue; 
}
На CSGO он не хочет работать, как вариант можно выразть часть кода из notifyMotd, но я не соображу какой именно.
 

★$$StOk$$★

Участник
Сообщения
629
Реакции
187
Да то же самое...
PHP:
public Action:admin(client, args)
{
    new String:CONURL[128];
    GetConVarString(ContactURL, CONURL, sizeof(CONURL));
    
    ShowMOTDPanel(client, "Contact", CONURL, MOTDPANEL_TYPE_URL);
    return Plugin_Handled;
}

public Action:rules(client, args)
{
    new String:MOTDURL[128];
    GetConVarString(RulesURL, MOTDURL, sizeof(MOTDURL));
    
    ShowMOTDPanel(client, "Rules", MOTDURL, MOTDPANEL_TYPE_URL);
    return Plugin_Handled;
}
Вот 2 примера для 2 команд.

Без лишних файлов, код только в исходнике, получается так ?
C-подобный:
[COLOR=#000000][COLOR=#007700]public [/COLOR][COLOR=#0000BB]Action[/COLOR][COLOR=#007700]:[/COLOR][COLOR=#0000BB]admin[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]client[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]args[/COLOR][COLOR=#007700]) 
{ 
    new [/COLOR][COLOR=#0000BB]String[/COLOR][COLOR=#007700]:[/COLOR][COLOR=#0000BB]CONURL[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000BB]128[/COLOR][COLOR=#007700]]; 
    [/COLOR][COLOR=#0000BB]GetConVarString[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]ContactURL[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]CONURL[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]sizeof[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]CONURL[/COLOR][COLOR=#007700])); 
     
    [/COLOR][COLOR=#0000BB]ShowMOTDPanel[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]client[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"Команда (допустим rules)"[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]"Ссылка"[/COLOR][COLOR=#007700], "Title Motd окна"[/COLOR][COLOR=#007700]); 
    return [/COLOR][COLOR=#0000BB]Plugin_Handled[/COLOR][COLOR=#007700]; 
} 
[/COLOR][/COLOR]

и теперь когда я пишу rules(Желательно как то сделать, чтобы можно было писать без воскл знака.), должно открываться motd окно ?
 

Monroe

Участник
Сообщения
25
Реакции
35
Без восклицательного знака
PHP:
public OnPluginStart() HookEvent("player_say", OnPlayerSay);

public OnPlayerSay(Handle:event, const String:name[], bool:dontBroadcast)
{
    decl String:text[256];
	GetEventString(event, "text", text, sizeof(text));
	
	if(StrEqual(text, "rules"))
	{
		decl String:url[128];
		GetConVarString(RulesURL, url, sizeof(url));
		
		ShowMOTDPanel(client, "Motd Title", url, MOTDPANEL_TYPE_URL);
	}
}
 

★$$StOk$$★

Участник
Сообщения
629
Реакции
187
Без восклицательного знака
PHP:
public OnPluginStart() HookEvent("player_say", OnPlayerSay);

public OnPlayerSay(Handle:event, const String:name[], bool:dontBroadcast)
{
    decl String:text[256];
    GetEventString(event, "text", text, sizeof(text));
    
    if(StrEqual(text, "rules"))
    {
        decl String:url[128];
        GetConVarString(RulesURL, url, sizeof(url));
        
        ShowMOTDPanel(client, "Motd Title", url, MOTDPANEL_TYPE_URL);
    }
}
Благодарю.
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Show MOTD Rules v0.1.0

Оффтоп Надо так:
PHP:
new Handle:hKV;
public OnPluginStart()
{
	if(AddCommandListener(Say, "say")==false) SetFailState("AddCommandListener is not available on the current game!");
	KvSetString(hKV=CreateKeyValues("data"), "title", "Правила сервера");
	KvSetString(hKV, "type", "2");
	KvSetString(hKV, "msg", "http://hlmod.ru/");
	AddCommandListener(Say, "say_team");
}

public Action:Say(client, String:command[], argc)
{
    decl String:Command[7];
    if(GetCmdArg(1, Command, 7) && strcmp(Command, "rules", false)==0 && client)
    {
        ShowVGUIPanel(client, "info", hKV);
        return Plugin_Handled;
    }return Plugin_Continue;
}
Оффтоп
Использование:
"Правила сервера" - заголовок окна;
"http://hlmod.ru/" - сайт для открытия;
"rules" - команда в чате для вызова.
Кавычки не убирать, писать в них!
 
Последнее редактирование:

Monroe

Участник
Сообщения
25
Реакции
35
Тогда так.
PHP:
public Action:OnClientSayCommand(client, const String:command[], const String:args[])
{
	if(client && StrEqual(args, "rules", false))
	{
		ShowMOTDPanel(client, "Motd Title", "http://hlmod.ru/", MOTDPANEL_TYPE_URL);
		return Plugin_Handled;
	}
	return Plugin_Continue;
}
Нет смысла держать Handle открытым. Нет смысла проводить дополнительные махинации "available on the current game", ибо не зачем использовать плагин там, где он не предполагался быть использован. IsClientInGame? :) клиент в игре.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
AlmazON, сколько раз проверял, в AddCommandListener достаточно if(client > 0)
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
в AddCommandListener достаточно if(client > 0)
Если в её обратном вызове имеется что-то, вроде GetClientDeaths(client) или GetClientTeam, то необходимо. 2 раза убирал и жаловались.
Может и не откроют вообще
Тебе жалко несколько байт памяти?) А если флудер появится?!
 

meladzevalerii

Участник
Сообщения
45
Реакции
4
1. Пост выше все еще актуально.

2. Реально выводить в таблице (TAB) рядом с количеством денег, символ настоящего звания в мм каждого игрока?
 
В

Виталий Капелька

Нужен человек который хорошо делает скрипты для кс го !
в деньги не упираеться ! главное хорошая работа!
скайп gold.keys
 

Anokian

Участник
Сообщения
12
Реакции
3
Не могу совладать с такой дилеммой. Скрипт для джаила, когда КТ убивает Т, КТ вылезает меню где он должен выбрать причину кила, после чего в чат выбрасываются сообщение типа "КТ(ник) наказал Т(ник): причина". Суть беды в том что никак не получается сделать это в одну строку, причина не отображается, работает только в две строки. Уже часа 4 сижу, всё перепробовал, один хрен - никак.

Вот часть скрипта отвечающего за выдачу в чат. Заранее благодарю за помощь.
PHP:
public SM(Handle:M, MenuAction:A, C, O) switch(A)
{
    case MenuAction_Select:
    {
        decl String:t[192];
        if((iSD[C]=GetClientOfUserId(iSD[C])))
        {
            decl String:r[10];
            if(GetMenuItem(M, O, r, 10))
            {
                decl String:p[MAX_NAME_LENGTH];
                if(GetClientName(C, p, MAX_NAME_LENGTH))
                {
                    decl String:n[MAX_NAME_LENGTH];
                    GetClientName(iSD[C], n, MAX_NAME_LENGTH);
                    for(C=1; C<=MaxClients; C++) if(IsClientInGame(C))
                    {
                        //SetGlobalTransTarget(C);
                        FormatEx(t, 192, "\x01\04%t\x01%t\x01:", "Title", "Verdict", p, n);
                        ReplaceString(t, 192, "#", "\x07");
                        CGOPrintToChat(C, t,); // <<<<<< Выдаёт "КТ наказал Т, причина"
                        CGOPrintToChat(C, "\03%t", r); // < Выдаёт второй строкой саму причину кила
                    }
                }
            }
        }else
        {
            //SetGlobalTransTarget(C);
            FormatEx(t, 192, "\x01\04%t\x01%t", "Title", "Disconnect");
            ReplaceString(t, 192, "#", "\x07");
            CGOPrintToChat(C, t);
        }
    }case MenuAction_End:CloseHandle(M);
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
не получается сделать это в одну строку
Если сделать в одну, то весь текст должен быть сокращён до минимума, иначе не влезет в чат! Ясно, зачем это всё? Оффтоп
 
Сверху Снизу