Skocz do zawartości
Paweł

[CS:GO] Kody na kredyty

Rekomendowane odpowiedzi

 

O Pluginie:

  • Plugin umożliwia administratorowi generowanie kodów na kreydyty.

 

Jak działa plugin? :

 

 

Wymagania:

 

Konfiguracja MySQL:

Spoiler
"Pawel_Codes"
{
	"driver"			"mysql"
	"host"				"Host"
	"database"			"Baza"
	"user"				"Login"
	"pass"				"Hasło"
	"port"				"3306"
}

 

 

Kod pluginu:

Spoiler
/* [ Includes ] */
#include <sourcemod>
#include <sdktools>
#include <multicolors>
#include <credits>

/* [ Compiler Options ] */
#pragma newdecls required
#pragma semicolon 1

/* [ Defines ] */
#define Table_Codes				"Pawel_Codes"
#define LoopClients(%1)			for(int %1 = 1; %1 < MaxClients; %1++) if(IsValidClient(%1))
#define PluginTag_Info			"★ {lightred}[ Kody{darkred} -> {lightred} Informacja ]{default}"
#define PluginTag_Error			"★ {lightred}[ Kody{darkred} -> {lightred} Błąd ]{default}"

/* [ Handles ] */
Handle g_hDatabase;

/* [ Integers ] */
int g_iDatabase = 0;

/* [ Chars ] */
char g_sCode[32][MAXPLAYERS + 1];

/* [ Plugin Author and Informations ] */
public Plugin myinfo =  {
	name = "[CS:GO] Pawel - [ Codes ]", 
	author = "Pawel", 
	description = "Kody na kredyty na serwer.", 
	version = "1.0", 
	url = "https://steamcommunity.com/id/pawelsteam"
};

/* [ Plugin Startup ] */
public void OnPluginStart() {
	/* [ Admin Commands ] */
	RegAdminCmd("sm_generatecode", GenerateCode_Command, ADMFLAG_ROOT, "Dodawnie kodu");
	RegAdminCmd("sm_codes", Codes_Command, ADMFLAG_ROOT, "Lista kodów");
	RegAdminCmd("sm_kody", Codes_Command, ADMFLAG_ROOT, "Lista kodów");
	
	/* [ Commands ] */
	RegConsoleCmd("sm_use", UseCode_Command, "Użycie kodu");
	RegConsoleCmd("sm_uzyj", UseCode_Command, "Użycie kodu");
	
	/* [ Database Connect ] */
	SQL_Connecting();
}

/* [ Commands ] */
public Action GenerateCode_Command(int client, int args) {
	char sArg[16], sCode[32], sAuthId[64], sArg2[32];
	GetClientAuthId(client, AuthId_Steam2, sAuthId, sizeof(sAuthId));
	GetCmdArg(1, sArg, sizeof(sArg));
	GetCmdArg(2, sArg2, sizeof(sArg2));
	int value = StringToInt(sArg);
	
	if (args == 0) {
		CPrintToChat(client, "%s Poprawne użycie komendy: {lime}sm_generatecode <wartość> <opcjonalnie_kod>", PluginTag_Error);
		return Plugin_Handled;
	}
	if (value <= 0) {
		CPrintToChat(client, "%s Wartość kodu musi być większa od 0.", PluginTag_Error);
		return Plugin_Handled;
	}
	if (args == 1) {
		GenerateCode(sCode, sizeof(sCode), 8);
		SQL_InsertCode(sCode, value);
		if (client == 0)
			PrintToServer("[ pCodes ] Wygenerowany kod: %s", sCode);
		else {
			PrintToConsole(client, "[ pCodes ] Wygenerowany kod: %s", sCode);
			CPrintToChat(client, "%s Wygenerowany kod: {lime}%s", PluginTag_Info, sCode);
		}
	}
	else if (args == 2) {
		SQL_InsertCode(sArg2, value);
		if (client == 0) {
			PrintToServer("[ pCodes ] Wygenerowany kod: %s", sArg2);
		}
		else {
			PrintToConsole(client, "[ pCodes ] Wygenerowany kod: %s", sArg2);
			CPrintToChat(client, "%s Wygenerowany kod: {lime}%s", PluginTag_Info, sArg2);
		}
	}
	return Plugin_Handled;
}

public Action Codes_Command(int client, int args) {
	char sQuery[1024];
	Format(sQuery, sizeof(sQuery), "SELECT `Code`, `Value` FROM `%s` WHERE `Value` > 0;", Table_Codes);
	SQL_TQuery(g_hDatabase, SQL_CodesList, sQuery, client);
	return Plugin_Handled;
}

public void SQL_CodesList(Handle owner, Handle query, const char[] sError, any client) {
	if (query == INVALID_HANDLE) {
		LogError("[ X Codes X ] Error podczas wyświetlania kodów: %s", sError);
		return;
	}
	char sCode[32], sBuffer[256], sMenuItem[64];
	Menu menu = new Menu(List_Handler);
	int i;
	menu.SetTitle("[ # Kody :: Lista # ]\n \n★ Aby wyświetlić kod graczom kliknij na niego.\n ");
	while (SQL_HasResultSet(query) && SQL_FetchRow(query)) {
		i++;
		SQL_FetchString(query, 0, sCode, sizeof(sCode));
		int value = SQL_FetchInt(query, 1);
		Format(sBuffer, sizeof(sBuffer), "#%d. Kod: %s  | Wartość: %d kredytów.", i, sCode, value);
		Format(sMenuItem, sizeof(sMenuItem), "%s", sCode);
		menu.AddItem(sMenuItem, sBuffer);
	}
	if (menu.ItemCount == 0)
		menu.AddItem("", "Brak wygenerowanych kodów", ITEMDRAW_DISABLED);
	
	menu.Display(client, MENU_TIME_FOREVER);
}

public int List_Handler(Menu menu, MenuAction action, int client, int position) {
	switch (action) {
		case MenuAction_Select: {
			char sItem[32], sBuffer[512];
			menu.GetItem(position, sItem, sizeof(sItem));
			Format(sBuffer, sizeof(sBuffer), "[ # Kody :: Giveaway # ]\n \n★ Kod na kredyty od administratora.\n★ Kod: %s\n★ Pamiętaj, że wielkość liter ma znaczenie!\n★ Aby uzyc kodu wpisz !uzyj <kod>\n ", sItem);
			Panel panel = new Panel();
			panel.SetTitle(sBuffer);
			panel.DrawItem("Zamknij");
			LoopClients(i)
			panel.Send(i, Panel_Handler, 15);
		}
		case MenuAction_End:delete menu;
	}
}

public int Panel_Handler(Menu menu, MenuAction action, int client, int position) {
	switch (action) {
		case MenuAction_Select:delete menu;
		case MenuAction_End:delete menu;
	}
}

public Action UseCode_Command(int client, int args) {
	char sQuery[1024];
	GetCmdArgString(g_sCode[client], sizeof(g_sCode));
	CPrintToChat(client, "%s Jeżeli na czacie nic się nie pojawi oznacza to, że kod nie został przepisany {lightred}nieprawidłowo{default}.", PluginTag_Info);
	Format(sQuery, sizeof(sQuery), "SELECT `Code`, `Value` FROM `%s` WHERE `Value` > 0;", Table_Codes);
	SQL_TQuery(g_hDatabase, SQL_CheckCode, sQuery, client);
	return Plugin_Handled;
}

public void SQL_CheckCode(Handle owner, Handle query, const char[] sError, any client) {
	if (query == INVALID_HANDLE) {
		LogError("[ X Codes X ] Error podczas wczytywania kodów: %s", sError);
		return;
	}
	char sCode[32];
	while (SQL_FetchRow(query)) {
		SQL_FetchString(query, 0, sCode, sizeof(sCode));
		int value = SQL_FetchInt(query, 1);
		if (StrEqual(g_sCode[client], sCode)) {
			shop_add_credits(client, value);
			CPrintToChatAll("%s Gracz {lime}%N{default} zrealizował kod na {lime}%d{default} kredytów.", PluginTag_Info, client, value);
			CPrintToChat(client, "%s Kod był {lime}prawidłowy{default} !", PluginTag_Info);
			CPrintToChat(client, "%s Na twoje konto wpłynęło: {lime}%d{default} kredytów.", PluginTag_Info, value);
			SQL_DeleteCode(g_sCode[client]);
		}
	}
}

/* [ Database Connect ] */
void SQL_Connecting() {
	char sError[256];
	g_hDatabase = SQL_Connect("Pawel_Codes", true, sError, sizeof(sError));
	if (g_hDatabase == INVALID_HANDLE) {
		LogError("[ X Codes X ] Error podczas połączenia z bazą: %s", sError);
		g_iDatabase = 0;
	}
	else if (g_iDatabase < 1) {
		g_iDatabase++;
		char sQuery[1024];
		Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `%s` (`Id` INT NOT NULL AUTO_INCREMENT, `Code` VARCHAR(64) NOT NULL, `Value` INT NOT NULL, PRIMARY KEY (`Id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;", Table_Codes);
		SQL_LockDatabase(g_hDatabase);
		SQL_FastQuery(g_hDatabase, sQuery);
		SQL_UnlockDatabase(g_hDatabase);
		SQL_Connecting();
	}
}

void SQL_InsertCode(char[] sBuffer, int value) {
	if (!g_iDatabase)
		return;
	
	char sQuery[1024];
	Format(sQuery, sizeof(sQuery), "INSERT INTO `%s` (`Code`, `Value`) VALUES ('%s', '%d')", Table_Codes, sBuffer, value);
	SQL_TQuery(g_hDatabase, SQL_Codes_Handler, sQuery, _);
}

public void SQL_Codes_Handler(Handle owner, Handle query, const char[] sError, any client) {
	if (query == INVALID_HANDLE) {
		LogError("[ X Codes X ] Error podczas zapisywania kodu: %s", sError);
		return;
	}
}

void SQL_DeleteCode(char[] sBuffer) {
	if (!g_iDatabase)
		return;
	
	char sQuery[1024];
	Format(sQuery, sizeof(sQuery), "DELETE FROM `%s` WHERE `Code`='%s'", Table_Codes, sBuffer);
	SQL_TQuery(g_hDatabase, SQL_Delete_Handler, sQuery, _);
}

public void SQL_Delete_Handler(Handle owner, Handle query, const char[] sError, any client) {
	if (query == INVALID_HANDLE) {
		LogError("[ X Codes X ] Error podczas usuwania kodu: %s", sError);
		return;
	}
}

/* [ Helpers ] */ // Przerobione funckje z smlib
int GenerateCode(char[] sBuffer, int size, int length, const char[] sCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") {
	int leng, random;
	size--;
	
	if (sCharacters[0] != '\0') {
		leng = strlen(sCharacters) - 1;
	}
	
	for (int i = 0; i < length && i < size; i++) {
		if (sCharacters[0] == '\0') {
			random = GetRandomInteger(33, 126);
			sBuffer[i] = random;
		}
		else {
			random = GetRandomInteger(0, leng);
			sBuffer[i] = sCharacters[random];
		}
	}
	
	sBuffer[length] = '\0';
}

int GetRandomInteger(int minimum, int maximum) {
	int random = GetURandomInt();
	if (random == 0)
		random++;
	
	return RoundToCeil(float(random) / (float(2147483647) / float(maximum - minimum + 1))) + minimum - 1;
} 

stock bool IsValidClient(int client) {
	if (client <= 0)return false;
	if (client > MaxClients)return false;
	if (!IsClientConnected(client))return false;
	if (IsFakeClient(client))return false;
	if (IsClientSourceTV(client))return false;
	return IsClientInGame(client);
}

 

 

 

Download:

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ę...