Skocz do zawartości
wiktor000

[Rozwiązane] [CSGO] Szukam pluginu, dozwolona tylko jedna broń

Rekomendowane odpowiedzi

Cześć, szukam pluginu który daje na respie m4a4 za darmo i żeby nie można było kupić innych broni i żeby aktywował się on tylko na jedenej mapie np.mirage. Czy istenieje coś takiego?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Hey, zgodnie z opisem jaki podesłałeś.
 

/*	Copyright (C) 2020 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/>.
*/

#pragma semicolon 1
#pragma newdecls required
	
#include <cstrike>
#include <sourcemod>
#include <sdktools>

public Plugin myinfo = 
{
	name = "[CSGO] GoCode", 
	author = "Mesharsky", 
	description = "Tylko jedna broń na mape", 
	version = "0.1", 
	url = "https://go-code.pl"
};

public void OnPluginStart()
{
	HookEvent("player_spawn", PlayerSpawn_Callback);
}

public Action PlayerSpawn_Callback(Event event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(event.GetInt("userid"));

	if (!IsValidClient(client))
		return;

	char NazwaMapy[128];
	GetCurrentMap(NazwaMapy, sizeof(NazwaMapy));
	
	if (!StrEqual(NazwaMapy, "de_mirage", false))
		return;

	StripAllWeapons(client);
	GivePlayerItem(client, "weapon_m4a1");
	GivePlayerItem(client, "weapon_knife");

	PrintToChat(client, "Jako iż gramy na mapie de_mirage, kupowanie broni jest zablokowane, otrzymałeś bronie którymi możesz sobie postrzelać, Powodzenia!");

}

public Action CS_OnBuyCommand(int client, const char[] weapon)
{
	if (!IsValidClient(client))
		return Plugin_Handled;
	
	char NazwaMapy[128];
	GetCurrentMap(NazwaMapy, sizeof(NazwaMapy));
	
	if (StrEqual(NazwaMapy, "de_mirage", false))
	{
		PrintToChat(client, "Nie można kupywać broni na tej mapie.");
		return Plugin_Handled;
	}
	
	return Plugin_Continue;
}

stock void StripAllWeapons(int client)
{
	int iEnt;
	for (int i = 0; i <= 2; i++)
	{
		while ((iEnt = GetPlayerWeaponSlot(client, i)) != -1)
		{
			RemovePlayerItem(client, iEnt);
			AcceptEntityInput(iEnt, "Kill");
		}
	}
}

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

 

Jak nie chcesz kompilować, pobierz sobie z załącznika.

Pozdrawiam

 

GoCode_WeaponPerMap.sp
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! GoCode_WeaponPerMap.smx
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

Zamiast dwa razy pobierać nazwę mapy w dwóch różnych eventach możesz stworzyć zmienną globalną char i w niej przechowywać nazwę mapy.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
42 minuty temu, Paweł napisał:

Zamiast dwa razy pobierać nazwę mapy w dwóch różnych eventach możesz stworzyć zmienną globalną char i w niej przechowywać nazwę mapy.

Słuszna uwaga. 

Nie myślałem o tym tworząc ten plugin na szybko.

 

Jak chcesz możesz mi edytować post 🙂

 

Dziękuję. 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@Mesharsky Dziękuje ci bardzo, mam jeszcze jedno pytanko czy jest możliwość żeby ten plugin "działał" tylko w pistoletówkach (1 runda i po zmianie połowy bodajże 16)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
7 minut temu, wiktor000 napisał:

@Mesharsky Dziękuje ci bardzo, mam jeszcze jedno pytanko czy jest możliwość żeby ten plugin "działał" tylko w pistoletówkach (1 runda i po zmianie połowy bodajże 16)

Po pracy ci to zrobię. Chyba że ktoś inny znajdzie czas przed 22:00

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie wiem czy za działa tak na szybko

 

/*	Copyright (C) 2020 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/>.
*/

#pragma semicolon 1
#pragma newdecls required
	
#include <cstrike>
#include <sourcemod>
#include <sdktools>

public Plugin myinfo = 
{
	name = "[CSGO] GoCode", 
	author = "Mesharsky", 
	description = "Tylko jedna broń na mape", 
	version = "0.1", 
	url = "https://go-code.pl"
};

public void OnPluginStart()
{
	HookEvent("player_spawn", PlayerSpawn_Callback);
}

public Action PlayerSpawn_Callback(Event event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(event.GetInt("userid"));

	if (!IsValidClient(client))
		return;

	char NazwaMapy[128];
	GetCurrentMap(NazwaMapy, sizeof(NazwaMapy));
	
	if (!StrEqual(NazwaMapy, "de_mirage", false))
		return;

	StripAllWeapons(client);
	if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0 && GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 15) {
	GivePlayerItem(client, "weapon_m4a1");
	GivePlayerItem(client, "weapon_knife");

	PrintToChat(client, "Jako iż gramy na mapie de_mirage, kupowanie broni jest zablokowane na rundzie pistoletowej, otrzymałeś bronie którymi możesz sobie postrzelać, Powodzenia!");
	}
}

public Action CS_OnBuyCommand(int client, const char[] weapon)
{
	if (!IsValidClient(client))
		return Plugin_Handled;
	
	char NazwaMapy[128];
	GetCurrentMap(NazwaMapy, sizeof(NazwaMapy));
	
	if (StrEqual(NazwaMapy, "de_mirage", false))
	{
	    if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0 && GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 15) {
		PrintToChat(client, "Nie można kupywać broni podczas rundy pistoletowej.");
		return Plugin_Handled;
	    }
	}
	
	return Plugin_Continue;
}

stock void StripAllWeapons(int client)
{
	int iEnt;
	for (int i = 0; i <= 2; i++)
	{
		while ((iEnt = GetPlayerWeaponSlot(client, i)) != -1)
		{
			RemovePlayerItem(client, iEnt);
			AcceptEntityInput(iEnt, "Kill");
		}
	}
}

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

 

plugin.smx
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

@szogun Mam rozgrzewkę na początku przed pierwszą rundą zapomniałem dopisać 🙃. Wiem że to było coś GameRules_GetProp("m_bWarmupPeriod") ale nie wiem dokładnie co -.-

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@wiktor000 Prosze poprawiona wersja, działająca wydaje mi się tak jak chcesz

 

/*	Copyright (C) 2020 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/>.
*/

#pragma semicolon 1
#pragma newdecls required

char NazwaMapy[128];

int GC_RoundCount = 0;
	
#include <cstrike>
#include <sourcemod>
#include <sdktools>

public Plugin myinfo = 
{
	name = "[CSGO] GoCode brak broni w mapie", 
	author = "Mesharsky", 
	description = "Brak broni na mapie w pierwszej rundzie", 
	version = "0.2", 
	url = "https://go-code.pl"
};

public void OnPluginStart()
{
	HookEvent("player_spawn", PlayerSpawn_Callback);
	HookEvent("round_start", RoundStart_Callback);
	HookEvent("announce_phase_end", ResetAfterTeamChange);
	HookEvent("cs_intermission", ResetAfterTeamChange);
}

public void OnMapStart()
{
	GC_RoundCount = 0;
	
	GetCurrentMap(NazwaMapy, sizeof(NazwaMapy));
}

public Action RoundStart_Callback(Event event, const char[] name, bool dontBroadcast)
{
	if (GameRules_GetProp("m_bWarmupPeriod") != 1)
		GC_RoundCount = GC_RoundCount + 1;	
}

public Action ResetAfterTeamChange(Event event, const char[] name, bool dontBroadcast)
{
	GC_RoundCount = 0;
}

public Action PlayerSpawn_Callback(Event event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(event.GetInt("userid"));

	if (!IsValidClient(client))
		return;
	
	if (!StrEqual(NazwaMapy, "de_mirage", false))
		return;

	if(GC_RoundCount >= 1)
	{
		StripAllWeapons(client);
		GivePlayerItem(client, "weapon_m4a1");
		GivePlayerItem(client, "weapon_knife");

		PrintToChat(client, "Jako iż gramy na mapie de_mirage, kupowanie broni jest zablokowane, otrzymałeś bronie którymi możesz sobie postrzelać, Powodzenia!");
	}
}

public Action CS_OnBuyCommand(int client, const char[] weapon)
{
	if (!IsValidClient(client))
		return Plugin_Handled;
	
	if (StrEqual(NazwaMapy, "de_mirage", false) && GC_RoundCount >= 1)
	{
		PrintToChat(client, "Nie można kupywać broni na tej mapie.");
		return Plugin_Handled;
	}
	
	return Plugin_Continue;
}

stock void StripAllWeapons(int client)
{
	int iEnt;
	for (int i = 0; i <= 2; i++)
	{
		while ((iEnt = GetPlayerWeaponSlot(client, i)) != -1)
		{
			RemovePlayerItem(client, iEnt);
			AcceptEntityInput(iEnt, "Kill");
		}
	}
}

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

Pozdrawiam

 

 

 

GoCode_WeaponPerMap.sp
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! GoCode_WeaponPerMap.smx
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

 

@Mesharsky pobierz nazwę mapy w OnMapStart

Przez Mesharsky,

Poprawione, dzięki

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