Jump to content
  • Chmurka
  • Boróweczka
  • Jabłuszko
  • Limonka
  • Czekoladka
  • Węgielek
Sqower

[Rozwiązane] Dodanie broni niestandardowej

Recommended Posts

Witam mam pytanie jak dodać broń niestandardowa 

do tego pluginu

 

Spoiler

#pragma semicolon 1
#include <sourcemod>
#include <sdkhooks>
#include <sdktools>
#include <cstrike>
#include <smrpg>
#include <clientprefs>


public Plugin myinfo = 
{
	name = "RPG_SPAWN_WEAPONS",
	author = "Avgariat",
	description = "Gives player weapons on respawn",
	version = "1.0",
	url = "http://arenaskilla.pl/index.php"
}

bool b_sec_guns[65],
	b_pri_guns[65];
	
int n_sec_guns[65],
	n_pri_guns[65],
	g_WeaponParent;

char weapon_code[41][] = {
	"weapon_glock", "weapon_usp_silencer", "weapon_hkp2000", "weapon_p250", "weapon_fiveseven", 
	"weapon_tec9", "weapon_deagle", "weapon_elite", "weapon_cz75a", "weapon_revolver", 
	"weapon_mp5sd", "weapon_mac10", "weapon_mp9", "weapon_mp7", "weapon_ump45", 
	"weapon_bizon", "weapon_p90", "weapon_galilar", "weapon_nova", "weapon_famas", 
	"weapon_sawedoff", "weapon_mag7", "weapon_ak47", "weapon_m4a1_silencer", "weapon_xm1014", 
	"weapon_m4a1", "weapon_aug", "weapon_sg556", "weapon_g3sg1", "weapon_scar20", 
	"weapon_ssg08", "weapon_awp", "weapon_m249", "weapon_negev", "weapon_taser", 
	"weapon_flashbang", "weapon_decoy", "weapon_hegrenade", "weapon_incgrenade", "weapon_smokegrenade", "weapon_molotov"
};

char weapon_name[41][] = {
	"Glock", "USP", "P2000", "P250", "FiveSeven",
	"Tec9",	"Desert Eagle", "Dual Elites", "Cz75a", "Revolver",
	"MP5", "Mac10", "Mp9", "Mp7", "Ump45", "Bizon",
	"P90", "Galil", "Nova",	"Famas", "Sawed off",
	"Mag7", "Ak47", "M4a1-s", "Xm1014",
	"M4a4", "Aug", "Sg556", "G3sg1",
	"Scar20", "Ssg08", "Awp", "M249", "Negev", "Taser", "Flash",
	"Decoy", "He grenade", "Inc grenade", "Smoke grenade", "Molotov"
};

//Handle Cookies_secondary;
//Handle Cookies_primary;

public void OnPluginStart()
{
	HookEventEx("player_spawn", Event_OnPlayerSpawn);
	HookEventEx("player_death", Cleanup, EventHookMode_Post);
	HookEventEx("round_start", Cleanup, EventHookMode_Post);
	g_WeaponParent = FindSendPropOffs("CBaseCombatWeapon", "m_hOwnerEntity");
	
	for(int i=0; i<65; i++)
	{
		b_sec_guns[i] = false;
		b_pri_guns[i] = false;
	}
	RegConsoleCmd("guns", GunsCommand);
	RegConsoleCmd("gun", GunsCommand);
	
//	Cookies_secondary = RegClientCookie("Secondary", "", CookieAccess_Private);
//	SetCookieMenuItem(CookieHandler1, 0, "Secondary");	
//	Cookies_primary = RegClientCookie("Primary", "", CookieAccess_Private);
//	SetCookieMenuItem(CookieHandler2, 0, "Primary");
	
//	AddCommandListener(Command_Drop, "drop");
	for(int i=1; i<65; i++)
	{
		if(IsClientInGame(i))
			SDKHook(i, SDKHook_OnTakeDamage, FallDMG);
	}
}

public void OnMapStart()
{
	CreateTimer(15.0, Timer_MapLoadDelay, _);
}

public void OnClientPutInServer(int client)
{
	b_sec_guns[client] = false;
	b_pri_guns[client] = false;
//	n_sec_guns[client] = GetIntCookie(client, Cookies_secondary);
//	n_pri_guns[client] = GetIntCookie(client, Cookies_primary);
	SDKHook(client, SDKHook_OnTakeDamage, FallDMG);
	
//	if(n_sec_guns[client] > 0)
//		b_sec_guns[client] = true;
//	if(n_pri_guns[client] > 0)
//		b_pri_guns[client] = true;
}

public void OnClientDisconnect(int client)
{
	SDKUnhook(client, SDKHook_OnTakeDamage, FallDMG);
}

public Action FallDMG(int victim, int &attacker, int &inflictor, float &damage, int &damagetype)
{
	if(damagetype & DMG_FALL)
		return Plugin_Handled;
	return Plugin_Continue;
}

public void Event_OnPlayerSpawn(Event event, const char[] error, bool dontBroadcast)
{
	int client = GetClientOfUserId(event.GetInt("userid"));
	if(client <= 0)
		return;
	if(!IsClientInGame(client) || !IsPlayerAlive(client))
		return;
	
	StripWeapons(client);
	
//	GivePlayerItem(client, weapon_knife);
	
	//Dajemy bron
	if(b_sec_guns[client])
	{
		GiveGuns(client);
		return;
	}
	
	if(SMRPG_GetClientLevel(client) < 5)
	{
		GivePlayerItem(client, weapon_code[0]);
	}
	else
	{
		GunsMenuSecondary(client);
	}
}

public void GunsMenuSecondary(int client)
{
	Handle MenuHandle = CreateMenu(GunsMenuSecondary_Handler);
	SetMenuTitle(MenuHandle, "Infintycore.pl - Menu broni\n- Wybierz pistolet\n ");
	char numerek[10], text[32];
	int przywileje_gracza = 1;
	
	
//	if(SMRPG_GetClientLevel(client) >= 60)
//	{
//		przywileje_gracza = 10;
//		CreateTimer(2.0, GunsMenuPrimary_timer, client);
//		PrintToChat(client,"\x03Masz >=60 lvl\x01");
//	}
	if(SMRPG_GetClientLevel(client) >= 45)
	{
		przywileje_gracza = 10;
	}
	else
	{
		przywileje_gracza = SMRPG_GetClientLevel(client)/5 + 1;
	}
	
	
	for(int i = 0; i < przywileje_gracza; i++)
	{
		IntToString(i, numerek, sizeof(numerek));
		Format(text, sizeof(text), "> %s", weapon_name[i]);
		AddMenuItem(MenuHandle, numerek, text);
	}
	DisplayMenu(MenuHandle, client, 60);
}

public int GunsMenuSecondary_Handler(Handle menu, MenuAction action, int client, int itemNum)
{
	if(action == MenuAction_Select)
	{
		StripWeapons(client);
		char info[16];
		GetMenuItem(menu, itemNum, info, sizeof(info));
		int numer_broni = StringToInt(info);
		GivePlayerItem(client, weapon_code[numer_broni]);
		b_sec_guns[client] = true;
		n_sec_guns[client] = numer_broni;
//		SetClientCookie(client, Cookies_secondary, info);
		if(SMRPG_GetClientLevel(client) >= 60)
			GunsMenuPrimary(client);
	}
		
	if(action == MenuAction_End)
		CloseHandle(menu);	
}

public void GunsMenuPrimary(int client)
{
	Handle MenuHandle = CreateMenu(GunsMenuPrimary_Handler);
	SetMenuTitle(MenuHandle, "Infintycore.pl - Menu broni\n- Wybierz bron\n ");
	char numerek[10], text[32];
	int przywileje_gracza = 1;
	StripWeapons(client, true, false);
	
	
	if(SMRPG_GetClientLevel(client) >= 280)
	{
		przywileje_gracza = 33;
	}
	else
	{
		przywileje_gracza = SMRPG_GetClientLevel(client)/10 + 5;
	}
	
	
	for(int i = 10; i < przywileje_gracza; i++)
	{
		IntToString(i, numerek, sizeof(numerek));
		Format(text, sizeof(text), "> %s", weapon_name[i]);
		AddMenuItem(MenuHandle, numerek, text);
	}
	DisplayMenu(MenuHandle, client, 60);
}

public int GunsMenuPrimary_Handler(Handle menu, MenuAction action, int client, int itemNum)
{
	if(action == MenuAction_Select)
	{
		StripWeapons(client, true, false);
		char info[16];
		GetMenuItem(menu, itemNum, info, sizeof(info));
		int numer_broni = StringToInt(info);
		GivePlayerItem(client, weapon_code[numer_broni]);
		b_pri_guns[client] = true;
		n_pri_guns[client] = numer_broni;
//		SetClientCookie(client, Cookies_primary, info);
	}
		
	if(action == MenuAction_End)
		CloseHandle(menu);	
}

public void GiveGuns(int client)
{
	if(client <= 0)
		return;
	if(!IsClientInGame(client) || !IsPlayerAlive(client))
		return;
	
	StripWeapons(client);
	
	if(b_pri_guns[client])
		GivePlayerItem(client, weapon_code[n_pri_guns[client]]);
	
	GivePlayerItem(client, weapon_code[n_sec_guns[client]]);
}

public Action GunsCommand(int client, int args)
{
	b_pri_guns[client] = false;
	b_sec_guns[client] = false;
	PrintToChat(client,"\x03Menu broni zostanie wyswietlone przy nastepnym spawnie\x01");
}
/*
stock int GetIntCookie(int client, Handle handle)
{
	char sCookieValue[11];
	GetClientCookie(client, handle, sCookieValue, sizeof(sCookieValue));
	return StringToInt(sCookieValue);
}
public void CookieHandler1(int client, CookieMenuAction action, any info, char[] buffer, int maxlen)
{
	GunsMenuSecondary(client);
}
public void CookieHandler2(int client, CookieMenuAction action, any info, char[] buffer, int maxlen)
{
	GunsMenuPrimary(client);
}
*/

/*public Action Command_Drop(int client, const char[] command, int argc)
{
	if(!IsClientInGame(client))
		return Plugin_Continue;
	
	int weapon = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
	if(!IsValidEdict(weapon))
		return Plugin_Stop;
	
	CS_DropWeapon(client, weapon, true, true);
	return Plugin_Handled;
}*/

public Action Timer_MapLoadDelay(Handle timer)
{
	SetCvar("mp_roundtime", "20");
	SetCvar("mp_maxmoney", "0");
	SetCvar("mp_startmoney", "0");
	SetCvar("mp_teamcashawards", "1");
	SetCvar("mp_playercashawards", "1");
	SetCvar("cash_player_killed_enemy_default", "300");
	SetCvar("mp_roundtime_defuse", "20");
	SetCvar("mp_roundtime_defuse", "20");
	SetCvar("mp_buytime", "0");
	SetCvar("mp_weapons_allow_map_placed", "0");
	SetCvar("mp_death_drop_gun", "1");
	SetCvar("mp_death_drop_grenade", "1");
	SetCvar("ammo_grenade_limit_flashbang", "2");
	SetCvar("ammo_grenade_limit_total", "4");
	SetCvar("mp_warmuptime", "15");
	SetCvar("mp_restartgame", "1");
	ServerCommand("mp_warmup_start");
}

public Action Cleanup(Handle event, const char[] name, bool dontBroadcast)
{
	int maxent = GetMaxEntities();
	char weapon[64];
	for (int i=GetMaxClients(); i<maxent; i++)
	{
		if ( IsValidEdict(i) && IsValidEntity(i) )
		{
			GetEdictClassname(i, weapon, sizeof(weapon));
			if ( ( StrContains(weapon, "weapon_") != -1 || StrContains(weapon, "item_") != -1 ) && GetEntDataEnt2(i, g_WeaponParent) == -1 )
					RemoveEdict(i);
		}
	}	
	return Plugin_Continue;
}

public Action Cleanup_action()
{
	int maxent = GetMaxEntities();
	char weapon[64];
	for (int i=GetMaxClients(); i<maxent; i++)
	{
		if ( IsValidEdict(i) && IsValidEntity(i) )
		{
			GetEdictClassname(i, weapon, sizeof(weapon));
			if ( ( StrContains(weapon, "weapon_") != -1 || StrContains(weapon, "item_") != -1 ) && GetEntDataEnt2(i, g_WeaponParent) == -1 )
					RemoveEdict(i);
		}
	}	
	return Plugin_Continue;
}

public Action CS_OnCSWeaponDrop(int client, int weaponIndex)
{
	Cleanup_action();
}

stock void SetCvar(char[] scvar, char[] svalue)
{
	Handle cvar=FindConVar(scvar);
	SetConVarString(cvar, svalue, true);
}

stock void StripWeapons(int client, bool b_primary=true, bool b_secondary=true, bool b_grenade=false)
{
	bool b_c4 = true;
	if(IsClientInGame(client))
	{
		if(!IsPlayerAlive(client))
		{
			b_secondary = false;
			b_primary = false;
			b_grenade = false;
			b_c4 = false;
		}
	}
	//Usuwamy bronie
	int slot = -1;
	
	
	if(b_secondary)
	{
		slot = GetPlayerWeaponSlot(client, CS_SLOT_SECONDARY);
		if(slot != -1)
			RemovePlayerItem(client, slot);
	}
	
	if(b_primary)
	{
		slot = GetPlayerWeaponSlot(client, CS_SLOT_PRIMARY);
		if(slot != -1)
			RemovePlayerItem(client, slot);
	}
	
	if(b_c4)
	{
		slot = GetPlayerWeaponSlot(client, CS_SLOT_C4);
		if(slot != -1)
			RemovePlayerItem(client, slot);
	}
	
	if(b_grenade)
	{
		slot = GetPlayerWeaponSlot(client, CS_SLOT_GRENADE);
		while(slot != -1)
		{
			RemovePlayerItem(client, slot);
			slot = GetPlayerWeaponSlot(client, CS_SLOT_GRENADE);
		}
	}
}

 

Mp5 udało mi się dodać bez problemu ale z bazooka juz nie było tak łatwo umiał by ktoś mnie nakierwać albo pokazać jak ?

 

https://forums.alliedmods.net/showthread.php?t=290657
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! - do bazooki

Share this post


Link to post
Share on other sites

Teoretycznie, jeśli plugin używa wszystkich standardowych broni z gry to nie dodasz nowej broni która w grze nie istnieje. Nowa broń z pluginu musi zastępować jedną z istniejących już w grze

Share this post


Link to post
Share on other sites

Wiadomość wygenerowana automatycznie

 

Temat został zamknięty. Powodem jest całkowite rozwiązanie problemu zawartego w temacie.

 

Jeśli się z tym nie zgadzasz, zaraportuj ten post z prośbą o ponowne otwarcie i kontynuację dyskusji.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

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