Skocz do zawartości
Thommen

[Rozwiązane] Przerobienie pluginów na tarczę i exo na bonus dla graczy

Rekomendowane odpowiedzi

*Z góry przepraszam za tytuł, jakoś nie miałem innego pomysłu :/

 

Witajcie!

Mam do was ogromną prośbę - posiadam na serwerze dwa pluginy - jeden na tarczę balistyczną, drugi na exobuty, można te przedmioty normalnie sobie kupić za pomocą komendy (odpowiednio !tarcza i !exobutki). Chciałem to przerobic w taki sposób, aby sprawdzało czy gracz posiada nazwę serwera w nicku (jak coś napiszę pv żeby nie reklamować). Jeśli posiada - żeby miał po prostu taniej te przedmioty do kupienia.

 

Podrzucam pliki .sp, może ktoś to da radę przerobić, będę bardzo wdzięczny :)

 

Pozdrawiam,

Thommen 

 

 

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Lubię to! 1
Napisano (edytowane)
Spoiler
#include <sourcemod>
#include <sdktools>

public Plugin:myinfo =
{
	name = "BuyShield",
	author = "backwards",
	description = "Allows players to buy shields by typing !buyshield.",
	version = SOURCEMOD_VERSION,
	url = "http://www.steamcommunity.com/id/mypassword"
}

new ShieldCost = 4000;
new bool:RequireBuyZone = true;
Handle BuyStartRoundTimer;

public OnPluginStart()
{
	RegConsoleCmd("sm_tarcza", BuyShieldCMD);
	HookEvent("round_prestart", Event_RoundPreStart);
}

public Action BuyShieldCMD(int client, int args) 
{
	char sName[MAX_NAME_LENGTH];
	GetClientName(client, sName, sizeof(sName));

	if(StrContains(sName, "Nazwa sieci", false) == -1)
	{
		PrintToChat(client, "Ustaw xxx w nicku!");
		return Plugin_Handled;
	}

	if(RequireBuyZone)
	{
		new bool:InBuyZone = view_as<bool>(GetEntProp(client, Prop_Send, "m_bInBuyZone"));
		if(!InBuyZone)
		{
			PrintToChat(client, "Przepraszamy, nie jesteś w strefie zakupu.");
			return Plugin_Handled;
		}
		if (BuyStartRoundTimer == null)
		{
			PrintToChat(client, "Minął czas na kupno tego przedmiotu.")
			return Plugin_Handled;
		}
	}
	
	new account = GetEntProp(client, Prop_Send, "m_iAccount");
	if(account < ShieldCost)
	{
		PrintToChat(client, "Przepraszamy, nie masz 6500$ żeby kupić tarczę.");
		return Plugin_Handled;
	}
	
	new weaponIdx = GetPlayerWeaponSlot(client, 11);
	if(weaponIdx != -1)
	{
		if(IsValidEdict(weaponIdx) && IsValidEntity(weaponIdx))
		{
			decl String:className[128];
			GetEntityClassname(weaponIdx, className, sizeof(className));
			
			if(StrEqual("weapon_shield", className))
			{
				PrintToChat(client, "Posiadasz już tarczę.");
				return Plugin_Handled;
			}
		}
	}
	
	SetEntProp(client, Prop_Send, "m_iAccount", account - ShieldCost);
	GivePlayerItem(client, "weapon_shield");
	PrintToChat(client, "Kupiłeś tarczę.");
	
	return Plugin_Handled;
}

public Event_RoundPreStart(Handle:event, const String:name[], bool:dontBroadcast)
{
	new Float:BuyTime = 45.0;
	ConVar cvarBuyTime = FindConVar("mp_buytime");
	
	if(cvarBuyTime != null)
		BuyTime = float(cvarBuyTime.IntValue);
		
	if (BuyStartRoundTimer != null)
	{
		KillTimer(BuyStartRoundTimer);
		BuyStartRoundTimer = null;
	}
	
	BuyStartRoundTimer = CreateTimer(BuyTime, StopBuying);
}


public Action StopBuying(Handle timer, any client)
{
	BuyStartRoundTimer = null;
	
	return Plugin_Stop;
}

 

 

Analogicznie do drugiego pluginu dodajesz następujące linijki

	char sName[MAX_NAME_LENGTH];
	GetClientName(client, sName, sizeof(sName));

	if(StrContains(sName, "Nazwa sieci", false) == -1)
	{
		PrintToChat(client, "Ustaw xxx w nicku!");
		return Plugin_Handled;
	}

 

Edytowane przez Master

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tylko że ta wstawka chyba blokuje możliwość kupienia tarczy jeśli dobrze zrozumiałem ten kod, ja nie chce blokować możliwości zakupu tylko żeby ci co mają w nicku co trzeba mieli ją taniej, powiedzmy o tysiac $ taniej. Ale i tak dziękuję :D

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Lubię to! 1
Napisano (edytowane)
Spoiler
#include <sourcemod>
#include <sdktools>

public Plugin:myinfo =
{
	name = "BuyShield",
	author = "backwards",
	description = "Allows players to buy shields by typing !buyshield.",
	version = SOURCEMOD_VERSION,
	url = "http://www.steamcommunity.com/id/mypassword"
}

new ShieldCost = 4000;
new bool:RequireBuyZone = true;
Handle BuyStartRoundTimer;

public OnPluginStart()
{
	RegConsoleCmd("sm_tarcza", BuyShieldCMD);
	HookEvent("round_prestart", Event_RoundPreStart);
}

public Action BuyShieldCMD(int client, int args) 
{
    char sName[MAX_NAME_LENGTH];
    GetClientName(client, sName, sizeof(sName));

    ShieldCost = 4000;

    if(StrContains(sName, "Nazwa sieci", false) == -1)
    {
        ShieldCost = 3000;
    }

	if(RequireBuyZone)
	{
		new bool:InBuyZone = view_as<bool>(GetEntProp(client, Prop_Send, "m_bInBuyZone"));
		if(!InBuyZone)
		{
			PrintToChat(client, "Przepraszamy, nie jesteś w strefie zakupu.");
			return Plugin_Handled;
		}
		if (BuyStartRoundTimer == null)
		{
			PrintToChat(client, "Minął czas na kupno tego przedmiotu.")
			return Plugin_Handled;
		}
	}
	
	new account = GetEntProp(client, Prop_Send, "m_iAccount");
	if(account < ShieldCost)
	{
		PrintToChat(client, "Przepraszamy, nie masz 6500$ żeby kupić tarczę.");
		return Plugin_Handled;
	}
	
	new weaponIdx = GetPlayerWeaponSlot(client, 11);
	if(weaponIdx != -1)
	{
		if(IsValidEdict(weaponIdx) && IsValidEntity(weaponIdx))
		{
			decl String:className[128];
			GetEntityClassname(weaponIdx, className, sizeof(className));
			
			if(StrEqual("weapon_shield", className))
			{
				PrintToChat(client, "Posiadasz już tarczę.");
				return Plugin_Handled;
			}
		}
	}

	
	SetEntProp(client, Prop_Send, "m_iAccount", account - ShieldCost);
	GivePlayerItem(client, "weapon_shield");
	PrintToChat(client, "Kupiłeś tarczę.");
	
	return Plugin_Handled;
}

public Event_RoundPreStart(Handle:event, const String:name[], bool:dontBroadcast)
{
	new Float:BuyTime = 45.0;
	ConVar cvarBuyTime = FindConVar("mp_buytime");
	
	if(cvarBuyTime != null)
		BuyTime = float(cvarBuyTime.IntValue);
		
	if (BuyStartRoundTimer != null)
	{
		KillTimer(BuyStartRoundTimer);
		BuyStartRoundTimer = null;
	}
	
	BuyStartRoundTimer = CreateTimer(BuyTime, StopBuying);
}


public Action StopBuying(Handle timer, any client)
{
	BuyStartRoundTimer = null;
	
	return Plugin_Stop;
}

 

 

Edytowane przez Master

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiadomość wygenerowana automatycznie

 

Problem został rozwiązany

Jeżeli się z tym nie zgadzasz, raportuj ten post

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

×
×
  • Dodaj nową pozycję...