Skocz do zawartości

Nowy szablon forum

mygo.pl

Stworzyliśmy dla Was nowy wygląd forum. Z pewnością znajdziesz rzeczy, które wg Ciebie mogą zostać zmienione - wspomnij o tym w specjalnym wątku.

Czytaj więcej

Jak założyć własną sieć

serwerów CS

Zastanawiasz się nad prowadzeniem własnej sieci serwerów? Przeczytaj podstawowe informacje, na które należy zwrócić uwagę, przy takim projekcie.

Czytaj więcej

Tworzymy spis sieci

dodaj swoją

Dodaj sieć do której należysz, pozwoli to na promocję i budowę ogólnopolskiej bazy sieci CS.

Czytaj więcej

Brak możliwości użycia komendy jeśli zostały 2 minuty do końca mapy (kpn)


Chumi
 Udostępnij

1 Attachment

Rekomendowane odpowiedzi

Siemka, ostatnio miałem chęć dodania pluginu ADEPT_KPN na serwer, jednak napotkałem jeden problem. Jeżeli ktoś da kilka sekund przed końcem mapy prośbę o zagranie w KPN, to kredyty giną. Czy jest jakaś możliwość, aby nie można było użyć tej komendy przez 2 minuty przed końcem mapy? W załączniku daję sp pluginu.

 

Spoiler

#include <store>
#include <clientprefs>

#pragma semicolon 1
#pragma newdecls required

#define MOD_TAG "\x01\x0B\x0E★ \x07[ADEPT-Kamień, Papier, Nożyce]\x04 "

Handle g_hAllowInvite;

bool g_bInGame[MAXPLAYERS + 1], Selected[MAXPLAYERS + 1], g_bAllowInvites[MAXPLAYERS + 1];
int g_iBetAmount[MAXPLAYERS + 1], g_iOponent[MAXPLAYERS + 1];

enum KPN
{
	None = 0, 
	Kamien, 
	Papier, 
	Nozyce, 
};

KPN kpn[MAXPLAYERS + 1];

public Plugin myinfo = 
{
	name = "ADEPT --> Kamień papier nożyce", 
	description = "Autorski Plugin StudioADEPT.net", 
	author = "Brum Brum", 
	version = "1.0", 
	url = "http://www.StudioADEPT.net/forum", 
};

public void OnPluginStart()
{
	g_hAllowInvite = RegClientCookie("sm_kpn_allowinvite", "Zezwala/Nie zezwala na zaproszenia do KPN", CookieAccess_Protected);
	RegConsoleCmd("sm_kpn", CMD_KPN);
}

public void OnClientCookiesCached(int client)
{
	char Value[11];
	GetClientCookie(client, g_hAllowInvite, Value, sizeof(Value));
	g_bAllowInvites[client] = StringToInt(Value);
}

public void OnClientDisconnect(int client)
{
	if (g_bInGame[client])
	{
		int client2 = GetClientOfUserId(g_iOponent[client]);
		
		Store_SetClientCredits(client2, Store_GetClientCredits(client) + g_iBetAmount[client]);
		Store_SetClientCredits(client, Store_GetClientCredits(client) - g_iBetAmount[client]);
		PrintToChat(client2, "%s Twój przeciwnik wyszedł z gry! Wygrałeś jego \x02%d kredytów", MOD_TAG, g_iBetAmount[client]);
		ResetAllVariables(client2);
	}
	if (AreClientCookiesCached(client))
	{
		char Value[11];
		Format(Value, sizeof(Value), "%d", g_bAllowInvites[client]);
		SetClientCookie(client, g_hAllowInvite, Value);
	}
	ResetAllVariables(client);
	g_bAllowInvites[client] = true;
}

public Action CMD_KPN(int client, int args)
{
	
	if (g_bInGame[client]) {
		PrintToChat(client, "%s Nie możesz wyzwać innego gracze w trakcie gry!", MOD_TAG);
		return Plugin_Handled;
	}
	
	if (args == 0)
	{
		OpenKPNMenu(client);
		return Plugin_Handled;
	}
	
	if (args < 2) {
		ReplyToCommand(client, "%s Użyj !kpn <nick> <suma>", MOD_TAG);
		return Plugin_Handled;
	}
	
	if (args > 2) {
		ReplyToCommand(client, "%s Użyj !kpn <nick> <suma>", MOD_TAG);
		return Plugin_Handled;
	}
	
	char arg[65], arg2[11];
	GetCmdArg(1, arg, sizeof(arg));
	GetCmdArg(2, arg2, sizeof(arg2));
	int count = StringToInt(arg2);
	
	if (count > Store_GetClientCredits(client))
	{
		PrintToChat(client, "%s Nie masz wystarczająco kredytów!", MOD_TAG);
		return Plugin_Handled;
	}
	if (count <= 0) {
		PrintToChat(client, "%s Kwota musi być większa od zera!", MOD_TAG);
		return Plugin_Handled;
	}
	
	int target = FindTarget(client, arg, false, false);
	if (target == -1)
	{
		return Plugin_Handled;
	}
	if (target == client)
	{
		PrintToChat(client, "%s Nie możesz wyzwać samego siebie XD", MOD_TAG);
		return Plugin_Handled;
	}
	if (!g_bAllowInvites[target])
	{
		PrintToChat(client, "%s Wskazany gracz nie akceptuje zaproszeń!", MOD_TAG);
		return Plugin_Handled;
	}
	if (g_bInGame[target]) {
		PrintToChat(client, "%s Nie możesz wyzwać innego gracze w trakcie jego gry!", MOD_TAG);
		return Plugin_Handled;
	}
	if (count > Store_GetClientCredits(target))
	{
		PrintToChat(client, "%s Osoba z którą chcesz grać nie ma tyle pieniędzy!", MOD_TAG);
		return Plugin_Handled;
	}
	KPN_Invite(client, target, count);
	return Plugin_Handled;
}

public void KPN_Invite(int client, int target, int count)
{
	char title[256], option[32];
	Menu menu = new Menu(Menu_Handler);
	Format(title, sizeof(title), "ADEPT -> Kamień, Papier, Nożyce\n%N wyzwał Ciebie na pojedynek w Kamień, Papier, Nożyce\nZawalczycie o %d kredytów", client, count);
	menu.SetTitle(title);
	Format(option, sizeof(option), "yes;%d;%d", GetClientUserId(client), count);
	menu.AddItem(option, "Akceptuję");
	Format(option, sizeof(option), "no;%d;%d", GetClientUserId(client), count);
	menu.AddItem(option, "Rezygnuję");
	menu.ExitButton = true;
	menu.Display(target, 15);
}

public int Menu_Handler(Menu menu, MenuAction action, int client, int item)
{
	if (!IsValidClient(client))return;
	
	switch (action)
	{
		case MenuAction_Select:
		{
			char info[128], TempArray[3][128];
			menu.GetItem(item, info, sizeof(info));
			ExplodeString(info, ";", TempArray, 3, sizeof(TempArray[]));
			int sender = GetClientOfUserId(StringToInt(TempArray[1]));
			int count = StringToInt(TempArray[2]);
			if (StrEqual(TempArray[0], "yes"))
			{
				g_iBetAmount[client] = count;
				g_iBetAmount[sender] = count;
				g_bInGame[client] = true;
				g_bInGame[sender] = true;
				g_iOponent[client] = GetClientUserId(sender);
				g_iOponent[sender] = GetClientUserId(client);
				StartKPN(client);
				StartKPN(sender);
			}
			else {
				PrintToChat(sender, "%s \x02%N\x04 odrzucił twoją propozycję gry!", MOD_TAG, client);
			}
		}
		case MenuAction_End:delete menu;
	}
}

void StartKPN(int client)
{
	if (!IsValidClient(client))return;
	
	Menu menu = new Menu(KPN_Handler);
	menu.SetTitle("ADEPT -> Co chcesz wystawić");
	menu.AddItem("", "Kamień");
	menu.AddItem("", "Papier");
	menu.AddItem("", "Nożyce");
	menu.ExitButton = false;
	menu.Display(client, MENU_TIME_FOREVER);
}

public int KPN_Handler(Menu menu, MenuAction action, int client, int item)
{
	if (!IsValidClient(client))return;
	
	if (action == MenuAction_Select)
	{
		switch (item)
		{
			case 0:kpn[client] = Kamien;
			case 1:kpn[client] = Papier;
			case 2:kpn[client] = Nozyce;
		}
		CheckGame(client);
	}
	else if (action == MenuAction_End)delete menu;
}

void CheckGame(int client)
{
	int client2 = GetClientOfUserId(g_iOponent[client]);
	//REMISY
	if (kpn[client] == Kamien && kpn[client2] == Kamien)
	{
		EndGame(true, client, client2);
	}
	if (kpn[client] == Papier && kpn[client2] == Papier)
	{
		EndGame(true, client, client2);
	}
	if (kpn[client] == Nozyce && kpn[client2] == Nozyce)
	{
		EndGame(true, client, client2);
	}
	//WYGRANE C1
	if (kpn[client] == Kamien && kpn[client2] == Nozyce)
	{
		EndGame(false, client, client2);
	}
	if (kpn[client] == Papier && kpn[client2] == Kamien)
	{
		EndGame(false, client, client2);
	}
	if (kpn[client] == Nozyce && kpn[client2] == Papier)
	{
		EndGame(false, client, client2);
	}
	//WYGRANE C2
	if (kpn[client] == Nozyce && kpn[client2] == Kamien)
	{
		EndGame(false, client2, client);
	}
	if (kpn[client] == Kamien && kpn[client2] == Papier)
	{
		EndGame(false, client2, client);
	}
	if (kpn[client] == Papier && kpn[client2] == Nozyce)
	{
		EndGame(false, client2, client);
	}
}

void EndGame(bool remis, int winner, int looser)
{
	char KPNStringWinner[16], KPNStringLooser[16];
	switch (kpn[winner])
	{
		case Kamien:Format(KPNStringWinner, sizeof(KPNStringWinner), "Kamień");
		case Papier:Format(KPNStringWinner, sizeof(KPNStringWinner), "Papier");
		case Nozyce:Format(KPNStringWinner, sizeof(KPNStringWinner), "Nożyce");
	}
	switch (kpn[looser])
	{
		case Kamien:Format(KPNStringLooser, sizeof(KPNStringLooser), "Kamień");
		case Papier:Format(KPNStringLooser, sizeof(KPNStringLooser), "Papier");
		case Nozyce:Format(KPNStringLooser, sizeof(KPNStringLooser), "Nożyce");
	}
	if (remis) {
		PrintToChat(winner, "%s \x02REMIS\x04 Gracz \x02%N\x04 postawił \x02%s", MOD_TAG, looser, KPNStringLooser);
		PrintToChat(looser, "%s \x02REMIS\x04 Gracz \x02%N\x04 postawił \x02%s", MOD_TAG, winner, KPNStringWinner);
		ResetAllVariables(winner);
		ResetAllVariables(looser);
		return;
	}
	else
	{
		Store_SetClientCredits(winner, Store_GetClientCredits(winner) + g_iBetAmount[winner]);
		Store_SetClientCredits(looser, Store_GetClientCredits(looser) - g_iBetAmount[winner]);
		PrintToChat(winner, "%s Wygrałeś \x02%d kredytów\x04 Twój przeciwnik postawił \x02%s", MOD_TAG, g_iBetAmount[winner], KPNStringLooser);
		PrintToChat(looser, "%s Przegrałeś \x02%d kredytów\x04 Twój przeciwnik postawił \x02%s", MOD_TAG, g_iBetAmount[winner], KPNStringWinner);
		ResetAllVariables(winner);
		ResetAllVariables(looser);
		return;
	}
}

void OpenKPNMenu(int client)
{
	Menu menu = new Menu(KPN_Menu);
	menu.SetTitle("ADEPT -> Kamień Papier Nożyce");
	menu.AddItem("", "Ustawienia");
	menu.ExitButton = true;
	menu.Display(client, 60);
}

public int KPN_Menu(Menu menu, MenuAction action, int client, int item)
{
	if (!IsValidClient(client))return;
	
	switch (action)
	{
		case MenuAction_Select:
		{
			switch (item)
			{
				case 0:
				{
					Menu nmenu = new Menu(KPNSetting_Handler);
					nmenu.AddItem("", "Zezwalaj na zaproszenia do gry");
					nmenu.AddItem("", "Odrzucaj zaproszenia do gry");
					nmenu.ExitButton = true;
					nmenu.Display(client, 30);
				}
			}
		}
		case MenuAction_End:delete menu;
	}
}

public int KPNSetting_Handler(Menu menu, MenuAction action, int client, int item)
{
	if (!IsValidClient(client))return;
	
	switch (action)
	{
		case MenuAction_Select:
		{
			switch (item)
			{
				case 0:
				{
					g_bAllowInvites[client] = true;
					PrintToChat(client, "%s Zezwalasz na zaproszenia do gry w KPN!", MOD_TAG);
				}
				case 1:
				{
					g_bAllowInvites[client] = false;
					PrintToChat(client, "%s Nie zezwalasz na zaproszenia do gry w KPN!", MOD_TAG);
				}
			}
		}
	}
}

void ResetAllVariables(int client)
{
	g_iBetAmount[client] = -1;
	g_bInGame[client] = false;
	g_iOponent[client] = -1;
	kpn[client] = None;
	Selected[client] = false;
} 

public bool IsValidClient(int client)
{
	if (!(1 <= client <= MaxClients) || !IsClientInGame(client) || !IsClientConnected(client) || IsFakeClient(client) || IsClientSourceTV(client))
		return false;
	
	return true;
} 

 

 

 

 

ADEPT_KPN.sp

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
 Udostępnij

×
×
  • Dodaj nową pozycję...