Jump to content
  • Chmurka
  • Boróweczka
  • Jabłuszko
  • Limonka
  • Czekoladka
  • Węgielek
Sign in to follow this  
Thommen

Przerobienie pluginów na tarczę i exo na bonus dla graczy

Recommended Posts

*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!

  • Lubię to! 1

Share this post


Link to post
Share on other sites
Posted (edited)
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;
	}

 

Edited by Master
  • Kocham to! 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Posted (edited)
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;
}

 

 

Edited by Master
  • Kocham to! 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

Nasza historia

Na początku byliśmy małą grupą internetowych znajomych, którzy stwierdzili, że potrzebne jest solidne forum, na którym znajdą się ludzie z dużą wiedzą programistyczną ukierunkowaną na CS:GO. Pomysł powstał na początku 2018 roku, a parę miesięcy później, 19 kwietnia, powstała ta strona internetowa. Jako alternatywna odpowiedź na inne tego typu miejsca, poważnie podeszliśmy do tematu, najpierw tłumacząc angielską dokumentację SourceMod'a na język polski, a potem pisząc rozległe poradniki i wypełniając forum najpotrzebniejszymi rzeczami dla właścicieli serwerów i programistów. Cała nasza Ekipa jest dumna z pracy jaką w to włożyliśmy i cieszymy się że zbierają się wokół nas zarówno ludzie znający tematy sourcepawn'a i konfiguracji, jak i również nowe twarze w tym "biznesie", którym z chęcią niesiemy wiedzę oraz pomoc w rozwiązywaniu problemów.

Największe modyfikacje serwerowe

×
×
  • Create New...