Skocz do zawartości

Rekomendowane odpowiedzi

O pluginie

 

Jeżeli gracz jest w danej grupie Steam może on aktywować darmowego vipa na daną ilość czasu, wszystko konfigurujemy poprzez cvary.

 

Cvary
 

  • iIDGrupy = SteamIDGroup (Możesz go znaleźć tutaj)

    image.png.6d2fa3834e64d48ce06d97b092dd5444.png
      
  • LinkDoGrupy = Link do twojej grupy steam
  • CzasVipa = Czas vipa, podany w minutach np. 120,60,240

 

Wymagania

Rozszerzenie SteamWorks - KLIKNIJ BY POBRAĆ
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Dodatkowe informacje
 

Plugin generuje plik DarmowyVip.txt w folderze csgo, informując kto użył DarmowegoVipa (data wraz z dokładnym czasem aktywacji, nick, SteamID, ilość minut)

 

Również przepraszam za ten mierny kod, pisałem ten plugin rok temu i kompletnie nie miałem potrzeby go zmieniać, za niedługo mam zamiar wrzucić wersję pod MYSQL oraz rozbudowana ilość cvarów, aktualnie czas nie pozwala mi na żadną z tych rzeczy

 

Kod źródłowy

 

Spoiler
/*	Copyright (C) 2019 Mesharsky
	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.
	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.
	
	You should have received a copy of the GNU General Public License
	along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

/*================ Aktualizacje ================

~ Wersja "0.1" >> Pierwsze wydanie pluginu.
~ Wersja "0.2" >> Rewrite.


TODO

~ Zjeść coś i dupnąć monsterka.
~ Uga buga
~ Buga uga

==============================================*/

#pragma semicolon 1

#include <sourcemod>
#include <clientprefs>
#include <SteamWorks>
#include <multicolors>

#pragma newdecls required
#define LoopValidClients(%1) for(int %1 = 1; %1 <= MaxClients; %1++) if(IsValidClient(%1))

/* << Define >> */
#define NAZWA_PLUGINU "[CSGO] Vip za to ze jestes w grupie Steam"
#define OPIS_PLUGINU "[CSGO] Vip za to ze jestes w grupie Steam"
#define AUTOR_PLUGINU "Mesharsky"
#define WERSJA_PLUGINU "0.2"
	
int iVipTime[MAXPLAYERS+1];
Handle HTimer_SubstractMinutes;
Handle Ciasteczko_CzasVipa;

ConVar iIDGrupy;
ConVar LinkDoGrupy;

bool b_JestWGrupie[MAXPLAYERS + 1];

/* << Informacje o pluginie >> */
public Plugin myinfo =
{
	name = NAZWA_PLUGINU,
	author = AUTOR_PLUGINU,
	description = OPIS_PLUGINU,
	version = WERSJA_PLUGINU,
	url = "http://steamcommunity.com/id/MesharskyH2K"
}

public void OnPluginStart()
{
	RegConsoleCmd("sm_freevip", CMD_DarmowyVIP);
	
	Ciasteczko_CzasVipa = RegClientCookie("h2k_freevip", "Check whether player have trial vip access", CookieAccess_Private);
	
	iIDGrupy = CreateConVar("sm_groupid_add", "000000", "Steam Group ID (Podmień na swój)");
	LinkDoGrupy = CreateConVar("sm_group_link", "https://steamcommunity.com/groups/TwojaGrupa", "Link do twojej grupy Steam.");
	
	LoopValidClients(i)
		OnClientCookiesCached(i);
		
	AutoExecConfig(true, "Darmowy_VipConfig");	
}

public void OnMapStart()
{
	HTimer_SubstractMinutes = CreateTimer(60.0, Timer_UsunMinute, _, TIMER_REPEAT);
}

public void OnMapEnd()
{
	KillTimer(HTimer_SubstractMinutes, false);
	HTimer_SubstractMinutes = INVALID_HANDLE;
}

public void OnClientPostAdminCheck(int client)
{
	b_JestWGrupie[client] = false;
	SteamWorks_GetUserGroupStatus(client, iIDGrupy.IntValue);
}

public int SteamWorks_OnClientGroupStatus(int authid, int groupAccountID, bool isMember, bool isOfficer)
{
	int client = UserAuthGrab(authid);
	if (client != -1 && isMember)b_JestWGrupie[client] = true;
	return;
}

int UserAuthGrab(int authid)
{
	for (int i = 1; i <= MaxClients; i++)
	{
		if (IsValidClient(i))
		{
			char charauth[64], authchar[64];
			GetClientAuthId(i, AuthId_Steam3, charauth, sizeof(charauth));
			IntToString(authid, authchar, sizeof(authchar));
			if (StrContains(charauth, authchar) != -1)return i;
		}
	}
	
	return -1;
}

public void OnClientPutInServer(int client)
{
	if (0 < iVipTime[client])
	{
		SetUserFlagBits(client, ADMFLAG_RESERVATION + ADMFLAG_CUSTOM1);
	}
	else if (GetAdminFlag(GetUserAdmin(client), Admin_Root))
	{
		CPrintToChat(client, "★ {lightred}[FreeVIP]{yellow} Posiadasz flagę {darkred}Z {yellow}flaga VIPA nie zostanie ci przyznana");
	}
}

public void OnClientDisconnect(int client)
{
	if(IsClientInGame(client))
	{
		if(AreClientCookiesCached(client))
		{
			char PozostalyCzas[4];
			Format(PozostalyCzas, 3, "%i", iVipTime[client]);
			SetClientCookie(client, Ciasteczko_CzasVipa, PozostalyCzas);
		}
	}
}

public void OnClientCookiesCached(int client)
{
	char PozostalyCzas[4];
	GetClientCookie(client, Ciasteczko_CzasVipa, PozostalyCzas, 3);
	iVipTime[client] = StringToInt(PozostalyCzas, 10);
}

public Action CMD_DarmowyVIP(int client, int args)
{
	if(GetAdminFlag(GetUserAdmin(client), Admin_Custom6) && iVipTime[client] < 1)
	{
		PrintToChat(client, "\x04[~FreeVip] \x02Nie możesz użyć tej komendy ponieważ posiadasz juz VIP'a !");
		return Plugin_Handled;
	}
	else if(iVipTime[client] == -1)
	{
		PrintToChat(client, "\x04[~FreeVip] \x02Nie możesz użyć tej komendy ponieważ wykorzystałeś już darmowego VIP'a !");
		return Plugin_Handled;
	}
	else if (0 < iVipTime[client])
	{
		PrintToChat(client, "\x04[~FreeVip] \x02Już posiadasz darmowego VIP'a ! Pozostało ci \x04%i \x02minut !", iVipTime[client]);
		return Plugin_Handled;
	}
	else
	{
		if (IsClientInGame(client) && b_JestWGrupie[client])
		{
			char SteamID[32];
			GetClientAuthId(client, AuthId_Steam2, SteamID, 32, true);
			iVipTime[client] = 60;
			LogToFile("DarmowyVip.txt", "Gracz %N (%s) aktywował Darmowego Vipa!", client, SteamID);
			SetUserFlagBits(client, ADMFLAG_RESERVATION);
			SetUserFlagBits(client, ADMFLAG_CUSTOM1);
			CPrintToChat(client, "★ {lightred}[FreeVIP]{yellow} Właśnie aktywowałeś Vipa! {yellow}Miłego testowania usługi!");
			return Plugin_Handled;
		}
		else
		{
			Wiadomosc(client);
			return Plugin_Handled;
		}
	}
}

void Wiadomosc(int client)
{
	char LinkSteam[128];
	LinkDoGrupy.GetString(LinkSteam, sizeof(LinkSteam));
	CPrintToChat(client, "★ {lightred}[FreeVIP]{yellow} Dołącz do naszej grupy {green}Steam {yellow}by móc odebrać vipa");
	CPrintToChat(client, "★ {lightred}[FreeVIP]{yellow} {green}PO DOŁĄCZENIU DO GRUPY MUSISZ POCZEKAĆ NA ZMIANĘ MAPY BY ODEBRAĆ VIPA!");
	CPrintToChat(client, "★ {lightred}[FreeVIP]{yellow} {darkred}Sprawdź konsolę żeby uzyskać link do grupy steam!.");
	PrintToConsole(client, "Dołącz do grupy/n%s", LinkSteam);
	PrintToConsole(client, "Dołącz do grupy/n%s", LinkSteam);
	PrintToConsole(client, "Dołącz do grupy/n%s", LinkSteam);
}

public Action Timer_UsunMinute(Handle timer)
{
	if (timer == HTimer_SubstractMinutes)
	{
		LoopValidClients(i)
		{
			if(0 < iVipTime[i])
			{
				iVipTime[i] -= 1;
				if(iVipTime[i] == 0)
				{
					iVipTime[i] = -1;
					SetUserFlagBits(i, 0);
					PrintToChatAll(" \x04Graczowi \x02%N \x04właśnie skończył się się \x02DARMOWY VIP ! \x04Aby odebrać \x02darmowego VIP'a \x04wpisz \x02!freevip", i);
				}
			}
		}
	}
}

stock bool IsValidClient(int client)
{
	if (client > 0 && client <= MaxClients && IsClientInGame(client))
		return true;
	return false;
}

 

 

 

 

H2K_DarmowyVIP.sp
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

H2K_DarmowyVIP.smx
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Przez Mesharsky,

BRAKUJE RÓWNIEŻ TUTAJ ZABEZPIECZENIA KTÓRE DODAM JUTRO ŻE JAK KTOŚ ODEJDZIE Z GRUPY STEAM VIP ZOSTANIE MU ODEBRANY JAK JEST AKTYWNY!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Vipy same się aktywują od razu bez komend. 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Szybki rewrite/update wszystko w pierwszym poście ? 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić obrazków. Dodaj lub załącz obrazki z adresu URL.


×
×
  • Dodaj nową pozycję...