Вступаем в группу steam через сервер

Данилка

Участник
Сообщения
57
Реакции
15
Лазил в древних форумах у американцев и наткнулся совершенно случайно на не скомпилированный плагин который при написании в чат команды !join выводит окно клиенту с вашей группой =)

У меня появилась идейка для тех кто шарит в написании плагинах =)
Как на щет того чтоб каждый кто присоединился на сервер выводилось меню типа вот так:

Вы хотите вступить в группу сервера | You want join group this server ?

1. Да/yes

2. Нет/no

Клиент жмет на один появляеться окно ссылкой на вашу группу и вступает в нее

если жмет неть то ни чего не происходит)

Вот сам плагин который стоит доработать просто я видел что кто то в запросах искал такой плагин воть решил не много помочь)

PHP:
* Plugin Template generated by Pawn Studio */

 #include <sourcemod>

 public Plugin:myinfo = 
 {
 name = "JoinSteamgroup",
 author = "{7~11} Troll",
 description = "type !join to open steamgrouppage.",
 version = "1.0.1",
 url = "www.711clan.net"
 }

 new Handle:g_href = INVALID_HANDLE;
 public OnPluginStart()
 {
 RegConsoleCmd("join", JoinOn);
 g_href = CreateConVar("sm_join_href", "http://steamcommunity.com/groups/yourgroup", "href link to your steamgroup");
 }
 public Action:JoinOn(client,args)
 {
 decl String:href[255];
 GetConVarString(g_href, href, sizeof(href));
 ShowMOTDPanel(client, "join", href, MOTDPANEL_TYPE_URL);
 return Plugin_Continue;
 }

P.S Также можно использовать ет плагин в качестве показа правил сервера))

Добавлено через 3 часа 46 минут
g_href = CreateConVar("sm_join_href", "http://steamcommunity.com/groups/yourgroup", "href link to your steamgroup");

Сюды вставляем ссыль вашей группы =)
Ну еще можно команду вместо join поменять)

Вот нашел еще кое что интерестное может кто знаком с EventScripts судя по описанию он добовляет людей в группу которые зашли на сервер вот только не хрена не понятно как его переделать в smx и вобще рубит он или не вот ссыль =)

И вот еще что накопал
 
Последнее редактирование:

ggginex

Помог? Жми спасибо
Сообщения
26
Реакции
1
а куда ты выложил та этот плагин ? что то найти его не могу
 

ggginex

Помог? Жми спасибо
Сообщения
26
Реакции
1
так это просто идея или что ?( я не понимаю будь другом обясни
 

fallen1994

Участник
Сообщения
2,357
Реакции
538
Исходный код плагина тут выставлен, голову включаем и внимательно читаем.
Тут и плагин, и идея новой реализации, которая многим по-нраву.
 

МаТрОсКиН

Участник
Сообщения
2
Реакции
1
уважаемые кому не сложно можете пожалуто выложить уже полностью реализованный и рабочий плагин....... просто для многих новичков в етой сфере очень не просто разобратся с етим.
 

Данилка

Участник
Сообщения
57
Реакции
15
Скажем такс...если есть у кого руки и голова на плечах он может сделать из данных идей и исходника плагин конфетку но таких скорее всего нет =)

Я лично использовал ет плагин для показа правил на сервере =)
 

Manian

Участник
Сообщения
14
Реакции
0
Блин,выложите готовый плагин плиз)
Я не сильно в плагинах шарю)
 

w1b3

Участник
Сообщения
84
Реакции
39
готов накинуть 100р создателю готового и полностью рабочего плагина :)

ЗЫ: я понимаю, что мало, но мож еще кто сподобиться проспонсировать, и так человек 10 скинет по 100р - уже норма ;)
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
PHP:
#pragma semicolon 1
#include <sourcemod>

new Handle:g_href = INVALID_HANDLE;

public Plugin:myinfo = 
{
    name = "название плага",
    author = "",
    description = "",
    version = "0.1",
    url = ""
}

public OnPluginStart()
{
    // квар можно изменить на вам нужный
	g_href = CreateConVar("sm_motd_panel_url", "Ссылка", "Ссылка на страницу или картинку. можно вписать в server.cfg");
	
	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, "!команда", false))
	{
		decl String:href[255]; 
		GetConVarString(g_href, href, sizeof(href));
		ShowMOTDPanel(client,"", href, MOTDPANEL_TYPE_URL);
	}
	
	return Plugin_Continue;
}
 

w1b3

Участник
Сообщения
84
Реакции
39
Друг! под словами "полностью рабочий плагин", я имел ввиду:

архив из 3 файлов, smx & sp и cfg, положив которые в нужные папки на серв - человек получит работающий плагин. А в cfg произведет нужные ему настройки и изменения.
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
w1b3, Создай файл с расширением .sp и туда это скопируй, отредактируй малость, сохрани. Скомпилируй, и вот тебе готовый плагин, конфиг не нужен для одного квара.
Видно ты линукс ни когда не видел :-D
 
  • Мне нравится
Реакции: R1KO

Данилка

Участник
Сообщения
57
Реакции
15
PHP:
#pragma semicolon 1
#include <sourcemod>

new Handle:g_href = INVALID_HANDLE;

public Plugin:myinfo = 
{
    name = "название плага",
    author = "",
    description = "",
    version = "0.1",
    url = ""
}

public OnPluginStart()
{
    // квар можно изменить на вам нужный
	g_href = CreateConVar("sm_motd_panel_url", "Ссылка", "Ссылка на страницу или картинку. можно вписать в server.cfg");
	
	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, "!команда", false))
	{
		decl String:href[255]; 
		GetConVarString(g_href, href, sizeof(href));
		ShowMOTDPanel(client,"", href, MOTDPANEL_TYPE_URL);
	}
	
	return Plugin_Continue;
}

На первый взгляд все чудно а теперь вопрос тот кто тестил у игрока авто-авторизация стим клиента работала через окно motd ? =)
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
Данилка, в принципе motd это браузер, должно работать.
 

Данилка

Участник
Сообщения
57
Реакции
15
Неа авто-авторизация не канает но есть другой способ что если всместо мотд окна открывался бы стим браузер вот там то как раз таки авто-авторизация канает без всяких проблем только я хз как ет сделать)
 

w1b3

Участник
Сообщения
84
Реакции
39
w1b3, Создай файл с расширением .sp и туда это скопируй, отредактируй малость, сохрани. Скомпилируй, и вот тебе готовый плагин, конфиг не нужен для одного квара.
Видно ты линукс ни когда не видел :-D

Да друг)) я с линуксом знаком только отдаленно.. Название слышал много раз и знаю как оно пишется без ошибок)))
 

Данилка

Участник
Сообщения
57
Реакции
15
Нашел плагин но исходника неть он приглашает всех людей в группу которые зайдут на сервер может у кого есть мозги исправить ошибки их там около 20 =)

PHP:
new PlVers:__version = 5;
new Float:NULL_VECTOR[3];
new String:NULL_STRING[1];
new Extension:__ext_core = 68;
new MaxClients;
new Extension:__ext_smsock = 184;
new Extension:__ext_clientprefs = 220;
public Plugin:myinfo =
{
    name = "SteamInvite",
    description = "",
    author = "УЕБОК",
    version = "1.0",
    url = "N/A"
};
new Handle:g_Cvar_Host;
new Handle:g_Cvar_Port;
new Handle:g_Cvar_BaseURL;
new String:g_Host[64];
new g_Port;
new String:g_BaseURL[64];
new Handle:g_Socket;
new Handle:g_hClientCookie;
new bool:lateLoaded;
public __ext_core_SetNTVOptional()
{
    MarkNativeAsOptional("GetFeatureStatus");
    MarkNativeAsOptional("RequireFeature");
    MarkNativeAsOptional("AddCommandListener");
    MarkNativeAsOptional("RemoveCommandListener");
    VerifyCoreVersion();
    return 0;
}

bool:StrEqual(String:str1[], String:str2[], bool:caseSensitive)
{
    return strcmp(str1, str2, caseSensitive) == 0;
}

ExplodeString(String:text[], String:split[], String:buffers[][], maxStrings, maxStringLength)
{
    new reloc_idx = 0;
    new idx = 0;
    new total = 0;
    new var1;
    if (maxStrings < 1) {
        return 0;
    }
    new var3 = SplitString(text[reloc_idx], split, buffers[total], maxStringLength);
    idx = var3;
    while (var3 != -1) {
        reloc_idx = idx + reloc_idx;
        if (text[reloc_idx]) {
            total++;
            if (total >= maxStrings) {
                return total;
            }
        }
        new var2;
        if (text[reloc_idx]) {
            total++;
            strcopy(buffers[total], maxStringLength, text[reloc_idx]);
        }
        return total;
    }
    new var2;
    if (text[reloc_idx]) {
        total++;
        strcopy(buffers[total], maxStringLength, text[reloc_idx]);
    }
    return total;
}

public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max)
{
    lateLoaded = late;
    return APLRes:0;
}

public OnPluginStart()
{
    CreateConVar("sm_group_inviter_version", "1.0", "", 393472, false, 0, false, 0);
    g_Cvar_Host = CreateConVar("sm_group_inviter_host", "www.N/A.ru", "", 262144, false, 0, false, 0);
    g_Cvar_Port = CreateConVar("sm_group_inviter_port", "80", "", 262144, true, 1, false, 0);
    g_Cvar_BaseURL = CreateConVar("sm_group_inviter_url", "web/invite_steam.php", "", 262144, false, 0, false, 0);
    g_hClientCookie = RegClientCookie("invite-status", "", CookieAccess:2);
    HookConVarChange(g_Cvar_Host, ConVarChanged:3);
    HookConVarChange(g_Cvar_Port, ConVarChanged:3);
    HookConVarChange(g_Cvar_BaseURL, ConVarChanged:3);
    if (lateLoaded) {
        new i = 1;
        while (i <= MaxClients) {
            new var1;
            if (IsClientInGame(i)) {
                decl String:auth[32];
                GetClientAuthString(i, auth, 32);
                new var2;
                if (IsLegitSteam(auth)) {
                    LoadClientCookie(i);
                    i++;
                }
                i++;
            }
            i++;
        }
    }
    return 0;
}

public OnConfigsExecuted()
{
    GetConVarString(g_Cvar_Host, g_Host, 256);
    g_Port = GetConVarInt(g_Cvar_Port);
    GetConVarString(g_Cvar_BaseURL, g_BaseURL, 256);
    return 0;
}

public OnClientAuthorized(client, String:auth[])
{
    new var1;
    if (!IsFakeClient(client)) {
        if (AreClientCookiesCached(client)) {
            LoadClientCookie(client);
        }
        CreateTimer(1, CookieTimer, GetClientUserId(client), 1);
    }
    return 0;
}

LoadClientCookie(client)
{
    decl String:buffer[8];
    GetClientCookie(client, g_hClientCookie, buffer, 8);
    new var1;
    if (StrEqual(buffer, "", true)) {
        DoGroupInvite(client);
    }
    return 0;
}

public Action:CookieTimer(Handle:timer, userId)
{
    new client = GetClientOfUserId(userId);
    new var1;
    if (!client) {
        return Action:4;
    }
    if (!AreClientCookiesCached(client)) {
        return Action:0;
    }
    LoadClientCookie(client);
    return Action:4;
}

DoGroupInvite(client)
{
    decl String:auth[32];
    GetClientAuthString(client, auth, 32);
    new Handle:headers_pack = CreateDataPack();
    WritePackCell(headers_pack, client);
    WritePackString(headers_pack, auth);
    g_Socket = SocketCreate(SocketType:1, OnSocketError);
    SocketSetArg(g_Socket, headers_pack);
    SocketConnect(g_Socket, OnSocketConnected, OnSocketReceive, OnSocketDisconnected, g_Host, g_Port);
    return 0;
}

public ConVarChange(Handle:convar, String:oldValue[], String:newValue[])
{
    if (g_Cvar_Host == convar) {
        GetConVarString(g_Cvar_Host, g_Host, 256);
    } else {
        if (g_Cvar_Port == convar) {
            g_Port = GetConVarInt(g_Cvar_Port);
        }
        if (g_Cvar_BaseURL == convar) {
            GetConVarString(g_Cvar_BaseURL, g_BaseURL, 256);
        }
    }
    return 0;
}

public OnSocketConnected(Handle:socket, headers_pack)
{
    ResetPack(headers_pack, false);
    ReadPackCell(headers_pack);
    decl String:auth[32];
    ReadPackString(headers_pack, auth, 32);
    decl String:requestStr[1024];
    Format(requestStr, 1024, "GET /%s?i=%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n", g_BaseURL, auth, g_Host);
    SocketSend(socket, requestStr, -1);
    return 0;
}

public OnSocketReceive(Handle:socket, String:receiveData[], dataSize, headers_pack)
{
    ResetPack(headers_pack, false);
    new client = ReadPackCell(headers_pack);
    if (IsClientConnected(client)) {
        new start = StrContains(receiveData, "[Steam Group Inviter]", true);
        new var2;
        if (start) {
            if (AreClientCookiesCached(client)) {
                SetClientCookie(client, g_hClientCookie, "OK");
            }
        }
    }
    return 0;
}

public OnSocketDisconnected(Handle:socket, headers_pack)
{
    CloseHandle(headers_pack);
    CloseHandle(socket);
    return 0;
}

public OnSocketError(Handle:socket, errorType, errorNum, headers_pack)
{
    LogError("[Group Inviter] socket error %d (errno %d)", errorType, errorNum);
    CloseHandle(headers_pack);
    CloseHandle(socket);
    return 0;
}

bool:IsLegitSteam(String:authID[])
{
    decl String:toks[12][16];
    ExplodeString(authID, ":", toks, 3, 16);
    if (StringToInt(toks[8], 10) < 80000000) {
        return true;
    }
    return false;
}
 
Сверху Снизу