Skocz do zawartości
  • Chmurka
  • Boróweczka
  • Jabłuszko
  • Limonka
  • Czekoladka
  • Węgielek
Zaloguj się, aby obserwować  
Akeno|AdvancedNet

Klasa - DR

Polecane posty

Napisano (edytowany)

Witam, mam problem z klasami w DR od NOX niestety sam autor nie wie co jest problemem więc sięgam po pomoc tutaj.

 

Poniżej daję wam kod przykładowej klasy która nie działa.

Spoiler

#include <sourcemod>
#include <sdktools>
#include <deathrun>
#include <cstrike>
#include <sdkhooks>

char Nazwa[]		= 	"[MP] Smierc";
char Opis[]     	= 	"* 1/1 z noza [PPM],\n * Dodatkowe 40HP,\n * Lung Jump,\n Posiada strzykawke,\n * 20% szans na zrespienie sie po smierci." 

const int Damage 				= 	50;
const int Zdrowie 				= 	40;
const int Reinkarnacja 			= 	35;
const int Kondycja 				= 	30;
const int Grawitacja			=	60;

int MaKlase					[MAXPLAYERS+1];

public OnPluginStart()
{
	DR_ZarejestrujKlase(Nazwa, Opis, Damage, Zdrowie, Reinkarnacja, Kondycja, Grawitacja);
	HookEvent("player_death",	EventPlayerDeath);
	HookEvent("player_spawn",	OnPlayerSpawn);
}

public DR_OnClassEnabled(client, ClassID:id)
{	
	if(!GetAdminFlag(GetUserAdmin(client), Admin_Custom6))
	{
		PrintToChat(client, " %s \x06Klasa jest dostępna tylko dla posiadaczy \x02Mega Premium \x06!", PREFIX_NORMAL);
		return DR_DISABLE;
	}
	
	PrintToChat(client, "\x02[DR]\x04 Wybrales klase \x03[MP] Smierc");
	MaKlase[client] = 1;
	
	GivePlayerItem(client, "weapon_healthshot");
	
	return DR_CONTINUE;
}

public DR_OnClassDiabled(client, ClassID:id)
{	
	MaKlase[client] = 0;
}

public OnClientPutInServer(client)
{
	SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public Action EventPlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
	int attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
	int victim = GetClientOfUserId(GetEventInt(event, "userid"));
	if(GameRules_GetProp("m_bWarmupPeriod") == 0)
	{
		if(IsValidClient(attacker) && !IsFakeClient(attacker) && (attacker != victim))
		{	
			if(MaKlase[attacker])
			{
				if(!GetRandomInt(0, 4))
				{
					CreateTimer(0.01, Timer_Respawn, GetClientUserId(victim), TIMER_FLAG_NO_MAPCHANGE);
				}
			}
		}
	}
}

public Action Timer_Respawn(Handle:timer, any:index)
{
	int client = GetClientOfUserId(index);
	
	if(client)
	{
		CS_RespawnPlayer(client);
		PrintToChat(client, "%s \x06Odrodziłeś się.", PREFIX_NORMAL);
	}
}

public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{	
	if(!IsValidClient(attacker))
		return Plugin_Continue;
	
	if(!MaKlase[attacker])
		return Plugin_Continue;
	
	if(MaKlase[attacker] && GetClientButtons(attacker) & IN_ATTACK2)
	{
		char sWeapon[32];
		GetClientWeapon(attacker, sWeapon, sizeof(sWeapon));
		if(StrEqual(sWeapon, "weapon_knife"))
		{
			SetEntProp(victim, Prop_Data, "m_ArmorValue", 0, 1);
			damage = float(GetClientHealth(victim) + 1);
			return Plugin_Changed;	
		}	
	}
	return Plugin_Continue;
}

public Action OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(MaKlase[client])
	{
		GivePlayerItem(client, "weapon_healthshot");
		GivePlayerItem(client, "weapon_healthshot");
	}
}

stock bool IsValidClient(client)
{
	if(client >= 1 && client <= MaxClients && IsClientInGame(client))
		return true;

	return false;
}

 

 

Problem polega na tym że mimo posiadania danej flagi, niema dostępu do klasy. Nawet z flagą "z" nie mogę wybrać klasy Premium/MegaPremium.

 

A tutaj kod jedynej klasy która działa:

 

Spoiler

#include <sourcemod>
#include <deathrun>
#include <sdktools>
#include <cstrike>
#include <sdkhooks>
#include <nox_mbhop>

char Nazwa[]		= 	"[P] Hunter";
char Opis[]     	= 	" * Dodatkowe 50hp na start\n * Dodatkowy skok\n * AutoRespawn przez 25 sekund";

const int Damage 				= 	30;
const int Zdrowie 				= 	40;
const int Reinkarnacja 			= 	15;
const int Kondycja 				=  	10;
const int Grawitacja			=	25;

int MaKlase					[MAXPLAYERS+1];
int roundTime;

public OnPluginStart()
{
	DR_ZarejestrujKlase(Nazwa, Opis, Damage, Zdrowie, Reinkarnacja, Kondycja, Grawitacja);
	HookEvent("player_death", Event_PlayerDeath);
	HookEvent("round_start", Event_RoundStart);
}
public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{	
	roundTime = GetTime();
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(MaKlase[client])
	{
		CreateTimer(3.0, HP, client);
	}
}
public Action HP(Handle:timer, any:client)
{
	if(MaKlase[client])
	{
		SetEntityHealth(client, GetEntProp(client, Prop_Send, "m_iHealth") + 50);
	}
} 
public DR_OnClassEnabled(client, ClassID:id)
{
	if(!GetAdminFlag(GetUserAdmin(client), Admin_Custom5))
	{
		PrintToChat(client, "╔══════════════════════════════════════════╗");
		PrintToChat(client, " %s \x06Klasa jest dostępna tylko dla posiadaczy \x02Premium \x06!", PREFIX_NORMAL);
		PrintToChat(client, "╚══════════════════════════════════════════╝");
		return DR_DISABLE;
	}
	
	PrintToChat(client, "\x04╔════════════════════════╗");
	PrintToChat(client, "\%s \x01Wybrałeś Klase \x04[P] Hunter", PREFIX_NORMAL);
	PrintToChat(client, "\x04╚════════════════════════╝");
	
	MaKlase[client] = 1;
	MBHOP_AddClientJumps(client, 1);
	
	return DR_CONTINUE;
}
public DR_OnClassDisabled(client, ClassID:id)
{
	MaKlase[client] = 0;
	MBHOP_AddClientJumps(client, -1);

}
public Event_PlayerDeath(Handle event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	
	if(MaKlase[client])
	{
		int currentTime = GetTime();
		if (currentTime-roundTime > 25)
			return;
		CreateTimer(0.1, ExecRespawn, client);
	}
}
public Action ExecRespawn(Handle:timer, any:client)
{
	if ( client && (!IsPlayerAlive(client)) && (MaKlase[client]))
		CS_RespawnPlayer(client);
	return Plugin_Stop;
}

 

 

Edytowano przez Akeno|AdvancedNet

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Kod pierwszy który twoim zdaniem nie działa ma ustawioną flagę na admin_custom6 natomiast kod w którym napisałeś, że działa jest custom5

  • Lubię to! 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Napisano (edytowany)
Spoiler

#include <sourcemod>
#include <sdktools>
#include <deathrun>
#include <cstrike>
#include <sdkhooks>

char Nazwa[] = "[MP] Smierc";
char Opis[] = "* 1/1 z noza [PPM],\n * Dodatkowe 40HP,\n * Lung Jump,\n Posiada strzykawke,\n * 20% szans na zrespienie sie po smierci." 

const int Damage = 50;
const int Zdrowie = 40;
const int Reinkarnacja = 35;
const int Kondycja = 30;
const int Grawitacja = 60;

bool ma_klase[65];
public void OnPluginStart()
{
	DR_ZarejestrujKlase(Nazwa, Opis, Damage, Zdrowie, Reinkarnacja, Kondycja, Grawitacja);
	HookEvent("player_death", EventPlayerDeath);
	HookEvent("player_spawn", OnPlayerSpawn);
}

public int DR_OnClassEnabled(int client, int ClassID:id)
{	
	if(!GetUserFlagBits(client, Admin_Custom6))
	{
		PrintToChat(client, " %s \x06Klasa jest dostępna tylko dla posiadaczy \x02Mega Premium \x06!", PREFIX_NORMAL);
		return DR_DISABLE;
	}
	
	PrintToChat(client, "\x02[DR]\x04 Wybrales klase \x03[MP] Smierc");
	ma_klase[client] = true;
	
	GivePlayerItem(client, "weapon_healthshot");
	return DR_CONTINUE;
}

public int DR_OnClassDiabled(int client, int ClassID:id)
{	
	ma_klase[client] = false;
}

public void OnClientPutInServer(intclient)
{
	SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public Action EventPlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
	int attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
	int victim = GetClientOfUserId(GetEventInt(event, "userid"));
	if(GameRules_GetProp("m_bWarmupPeriod") == 0)
	{
		if(IsValidClient(attacker) && !IsFakeClient(attacker) && (attacker != victim))
		{	
			if(ma_klase[attacker])
			{
				if(!GetRandomInt(0, 4))
				{
					CreateTimer(0.01, Timer_Respawn, GetClientUserId(victim), TIMER_FLAG_NO_MAPCHANGE);
				}
			}
		}
	}
}

public Action Timer_Respawn(Handle timer, any index)
{
	int client = GetClientOfUserId(index);
	
	if(client)
	{
		CS_RespawnPlayer(client);
		PrintToChat(client, "%s \x06Odrodziłeś się.", PREFIX_NORMAL);
	}
}

public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype)
{	
	if(!IsValidClient(attacker))
		return Plugin_Continue;
	
	if(!ma_klase[attacker])
		return Plugin_Continue;
	
	if(ma_klase[attacker] && GetClientButtons(attacker) & IN_ATTACK2)
	{
		char weapon[32];
		GetClientWeapon(attacker, weapon, sizeof(weapon));
		if(StrEqual(weapon, "weapon_knife"))
		{
			SetEntProp(victim, Prop_Data, "m_ArmorValue", 0, 1);
			damage = float(GetClientHealth(victim) + 1);
			return Plugin_Changed;	
		}	
	}
	return Plugin_Continue;
}

public Action OnPlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(ma_klase[client])
	{
		GivePlayerItem(client, "weapon_healthshot");
		GivePlayerItem(client, "weapon_healthshot");
	}
}

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

Spróbuj tego

 

Edytowano przez Yamakashi

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
2 godziny temu, Brum Brum napisał:

Kod pierwszy który twoim zdaniem nie działa ma ustawioną flagę na admin_custom6 natomiast kod w którym napisałeś, że działa jest custom5

To akurat niema nic do znaczenia bo sprawdzałem już to.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
2 godziny temu, Yamakashi napisał:
 
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Odkryj ukrytą treść


#include <sourcemod>
#include <sdktools>
#include <deathrun>
#include <cstrike>
#include <sdkhooks>

char Nazwa[] = "[MP] Smierc";
char Opis[] = "* 1/1 z noza [PPM],\n * Dodatkowe 40HP,\n * Lung Jump,\n Posiada strzykawke,\n * 20% szans na zrespienie sie po smierci." 

const int Damage = 50;
const int Zdrowie = 40;
const int Reinkarnacja = 35;
const int Kondycja = 30;
const int Grawitacja = 60;

bool ma_klase[65];
public void OnPluginStart()
{
	DR_ZarejestrujKlase(Nazwa, Opis, Damage, Zdrowie, Reinkarnacja, Kondycja, Grawitacja);
	HookEvent("player_death", EventPlayerDeath);
	HookEvent("player_spawn", OnPlayerSpawn);
}

public int DR_OnClassEnabled(int client, int ClassID:id)
{	
	if(!GetUserFlagBits(client, Admin_Custom6))
	{
		PrintToChat(client, " %s \x06Klasa jest dostępna tylko dla posiadaczy \x02Mega Premium \x06!", PREFIX_NORMAL);
		return DR_DISABLE;
	}
	
	PrintToChat(client, "\x02[DR]\x04 Wybrales klase \x03[MP] Smierc");
	ma_klase[client] = true;
	
	GivePlayerItem(client, "weapon_healthshot");
	return DR_CONTINUE;
}

public int DR_OnClassDiabled(int client, int ClassID:id)
{	
	ma_klase[client] = false;
}

public void OnClientPutInServer(intclient)
{
	SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public Action EventPlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
	int attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
	int victim = GetClientOfUserId(GetEventInt(event, "userid"));
	if(GameRules_GetProp("m_bWarmupPeriod") == 0)
	{
		if(IsValidClient(attacker) && !IsFakeClient(attacker) && (attacker != victim))
		{	
			if(ma_klase[attacker])
			{
				if(!GetRandomInt(0, 4))
				{
					CreateTimer(0.01, Timer_Respawn, GetClientUserId(victim), TIMER_FLAG_NO_MAPCHANGE);
				}
			}
		}
	}
}

public Action Timer_Respawn(Handle timer, any index)
{
	int client = GetClientOfUserId(index);
	
	if(client)
	{
		CS_RespawnPlayer(client);
		PrintToChat(client, "%s \x06Odrodziłeś się.", PREFIX_NORMAL);
	}
}

public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype)
{	
	if(!IsValidClient(attacker))
		return Plugin_Continue;
	
	if(!ma_klase[attacker])
		return Plugin_Continue;
	
	if(ma_klase[attacker] && GetClientButtons(attacker) & IN_ATTACK2)
	{
		char weapon[32];
		GetClientWeapon(attacker, weapon, sizeof(weapon));
		if(StrEqual(weapon, "weapon_knife"))
		{
			SetEntProp(victim, Prop_Data, "m_ArmorValue", 0, 1);
			damage = float(GetClientHealth(victim) + 1);
			return Plugin_Changed;	
		}	
	}
	return Plugin_Continue;
}

public Action OnPlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(ma_klase[client])
	{
		GivePlayerItem(client, "weapon_healthshot");
		GivePlayerItem(client, "weapon_healthshot");
	}
}

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

Spróbuj tego

 

Niestety również nie działa 😕

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
3 godziny temu, Yamakashi napisał:
 
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Odkryj ukrytą treść


#include <sourcemod>
#include <sdktools>
#include <deathrun>
#include <cstrike>
#include <sdkhooks>

char Nazwa[] = "[MP] Smierc";
char Opis[] = "* 1/1 z noza [PPM],\n * Dodatkowe 40HP,\n * Lung Jump,\n Posiada strzykawke,\n * 20% szans na zrespienie sie po smierci." 

const int Damage = 50;
const int Zdrowie = 40;
const int Reinkarnacja = 35;
const int Kondycja = 30;
const int Grawitacja = 60;

bool ma_klase[65];
public void OnPluginStart()
{
	DR_ZarejestrujKlase(Nazwa, Opis, Damage, Zdrowie, Reinkarnacja, Kondycja, Grawitacja);
	HookEvent("player_death", EventPlayerDeath);
	HookEvent("player_spawn", OnPlayerSpawn);
}

public int DR_OnClassEnabled(int client, int ClassID:id)
{	
	if(!GetUserFlagBits(client, Admin_Custom6))
	{
		PrintToChat(client, " %s \x06Klasa jest dostępna tylko dla posiadaczy \x02Mega Premium \x06!", PREFIX_NORMAL);
		return DR_DISABLE;
	}
	
	PrintToChat(client, "\x02[DR]\x04 Wybrales klase \x03[MP] Smierc");
	ma_klase[client] = true;
	
	GivePlayerItem(client, "weapon_healthshot");
	return DR_CONTINUE;
}

public int DR_OnClassDiabled(int client, int ClassID:id)
{	
	ma_klase[client] = false;
}

public void OnClientPutInServer(intclient)
{
	SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public Action EventPlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
	int attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
	int victim = GetClientOfUserId(GetEventInt(event, "userid"));
	if(GameRules_GetProp("m_bWarmupPeriod") == 0)
	{
		if(IsValidClient(attacker) && !IsFakeClient(attacker) && (attacker != victim))
		{	
			if(ma_klase[attacker])
			{
				if(!GetRandomInt(0, 4))
				{
					CreateTimer(0.01, Timer_Respawn, GetClientUserId(victim), TIMER_FLAG_NO_MAPCHANGE);
				}
			}
		}
	}
}

public Action Timer_Respawn(Handle timer, any index)
{
	int client = GetClientOfUserId(index);
	
	if(client)
	{
		CS_RespawnPlayer(client);
		PrintToChat(client, "%s \x06Odrodziłeś się.", PREFIX_NORMAL);
	}
}

public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype)
{	
	if(!IsValidClient(attacker))
		return Plugin_Continue;
	
	if(!ma_klase[attacker])
		return Plugin_Continue;
	
	if(ma_klase[attacker] && GetClientButtons(attacker) & IN_ATTACK2)
	{
		char weapon[32];
		GetClientWeapon(attacker, weapon, sizeof(weapon));
		if(StrEqual(weapon, "weapon_knife"))
		{
			SetEntProp(victim, Prop_Data, "m_ArmorValue", 0, 1);
			damage = float(GetClientHealth(victim) + 1);
			return Plugin_Changed;	
		}	
	}
	return Plugin_Continue;
}

public Action OnPlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(ma_klase[client])
	{
		GivePlayerItem(client, "weapon_healthshot");
		GivePlayerItem(client, "weapon_healthshot");
	}
}

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

Spróbuj tego

 

do używania GetUserFlagBits używamy wartości typu ADMFLAG_ROOT a nie Admin_Root 🙂 tak na przyszłość

Spoiler

#include <sourcemod>
#include <sdktools>
#include <deathrun>
#include <cstrike>
#include <sdkhooks>

char Nazwa[] = "[MP] Smierc";
char Opis[] = "* 1/1 z noza [PPM],\n * Dodatkowe 40HP,\n * Lung Jump,\n Posiada strzykawke,\n * 20% szans na zrespienie sie po smierci." 

const int Damage = 50;
const int Zdrowie = 40;
const int Reinkarnacja = 35;
const int Kondycja = 30;
const int Grawitacja = 60;

bool ma_klase[65];
public void OnPluginStart()
{
	DR_ZarejestrujKlase(Nazwa, Opis, Damage, Zdrowie, Reinkarnacja, Kondycja, Grawitacja);
	HookEvent("player_death", EventPlayerDeath);
	HookEvent("player_spawn", OnPlayerSpawn);
}

public int DR_OnClassEnabled(int client, int ClassID:id)
{	
	if(!(GetUserFlagBits(client) & ADMFLAG_CUSTOM6))
	{
		PrintToChat(client, " %s \x06Klasa jest dostępna tylko dla posiadaczy \x02Mega Premium \x06!", PREFIX_NORMAL);
		return DR_DISABLE;
	}
	
	PrintToChat(client, "\x02[DR]\x04 Wybrales klase \x03[MP] Smierc");
	ma_klase[client] = true;
	
	GivePlayerItem(client, "weapon_healthshot");
	return DR_CONTINUE;
}

public int DR_OnClassDiabled(int client, int ClassID:id)
{	
	ma_klase[client] = false;
}

public void OnClientPutInServer(intclient)
{
	SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public Action EventPlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
	int attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
	int victim = GetClientOfUserId(GetEventInt(event, "userid"));
	if(GameRules_GetProp("m_bWarmupPeriod") == 0)
	{
		if(IsValidClient(attacker) && !IsFakeClient(attacker) && (attacker != victim))
		{	
			if(ma_klase[attacker])
			{
				if(!GetRandomInt(0, 4))
				{
					CreateTimer(0.01, Timer_Respawn, GetClientUserId(victim), TIMER_FLAG_NO_MAPCHANGE);
				}
			}
		}
	}
}

public Action Timer_Respawn(Handle timer, any index)
{
	int client = GetClientOfUserId(index);
	
	if(client)
	{
		CS_RespawnPlayer(client);
		PrintToChat(client, "%s \x06Odrodziłeś się.", PREFIX_NORMAL);
	}
}

public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype)
{	
	if(!IsValidClient(attacker))
		return Plugin_Continue;
	
	if(!ma_klase[attacker])
		return Plugin_Continue;
	
	if(ma_klase[attacker] && GetClientButtons(attacker) & IN_ATTACK2)
	{
		char weapon[32];
		GetClientWeapon(attacker, weapon, sizeof(weapon));
		if(StrEqual(weapon, "weapon_knife"))
		{
			SetEntProp(victim, Prop_Data, "m_ArmorValue", 0, 1);
			damage = float(GetClientHealth(victim) + 1);
			return Plugin_Changed;	
		}	
	}
	return Plugin_Continue;
}

public Action OnPlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(ma_klase[client])
	{
		GivePlayerItem(client, "weapon_healthshot");
		GivePlayerItem(client, "weapon_healthshot");
	}
}

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

 

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
32 minuty temu, Roberrt napisał:

do używania GetUserFlagBits używamy wartości typu ADMFLAG_ROOT a nie Admin_Root 🙂 tak na przyszłość

 
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Odkryj ukrytą treść


#include <sourcemod>
#include <sdktools>
#include <deathrun>
#include <cstrike>
#include <sdkhooks>

char Nazwa[] = "[MP] Smierc";
char Opis[] = "* 1/1 z noza [PPM],\n * Dodatkowe 40HP,\n * Lung Jump,\n Posiada strzykawke,\n * 20% szans na zrespienie sie po smierci." 

const int Damage = 50;
const int Zdrowie = 40;
const int Reinkarnacja = 35;
const int Kondycja = 30;
const int Grawitacja = 60;

bool ma_klase[65];
public void OnPluginStart()
{
	DR_ZarejestrujKlase(Nazwa, Opis, Damage, Zdrowie, Reinkarnacja, Kondycja, Grawitacja);
	HookEvent("player_death", EventPlayerDeath);
	HookEvent("player_spawn", OnPlayerSpawn);
}

public int DR_OnClassEnabled(int client, int ClassID:id)
{	
	if(!(GetUserFlagBits(client) & ADMFLAG_CUSTOM6))
	{
		PrintToChat(client, " %s \x06Klasa jest dostępna tylko dla posiadaczy \x02Mega Premium \x06!", PREFIX_NORMAL);
		return DR_DISABLE;
	}
	
	PrintToChat(client, "\x02[DR]\x04 Wybrales klase \x03[MP] Smierc");
	ma_klase[client] = true;
	
	GivePlayerItem(client, "weapon_healthshot");
	return DR_CONTINUE;
}

public int DR_OnClassDiabled(int client, int ClassID:id)
{	
	ma_klase[client] = false;
}

public void OnClientPutInServer(intclient)
{
	SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public Action EventPlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
	int attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
	int victim = GetClientOfUserId(GetEventInt(event, "userid"));
	if(GameRules_GetProp("m_bWarmupPeriod") == 0)
	{
		if(IsValidClient(attacker) && !IsFakeClient(attacker) && (attacker != victim))
		{	
			if(ma_klase[attacker])
			{
				if(!GetRandomInt(0, 4))
				{
					CreateTimer(0.01, Timer_Respawn, GetClientUserId(victim), TIMER_FLAG_NO_MAPCHANGE);
				}
			}
		}
	}
}

public Action Timer_Respawn(Handle timer, any index)
{
	int client = GetClientOfUserId(index);
	
	if(client)
	{
		CS_RespawnPlayer(client);
		PrintToChat(client, "%s \x06Odrodziłeś się.", PREFIX_NORMAL);
	}
}

public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype)
{	
	if(!IsValidClient(attacker))
		return Plugin_Continue;
	
	if(!ma_klase[attacker])
		return Plugin_Continue;
	
	if(ma_klase[attacker] && GetClientButtons(attacker) & IN_ATTACK2)
	{
		char weapon[32];
		GetClientWeapon(attacker, weapon, sizeof(weapon));
		if(StrEqual(weapon, "weapon_knife"))
		{
			SetEntProp(victim, Prop_Data, "m_ArmorValue", 0, 1);
			damage = float(GetClientHealth(victim) + 1);
			return Plugin_Changed;	
		}	
	}
	return Plugin_Continue;
}

public Action OnPlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(ma_klase[client])
	{
		GivePlayerItem(client, "weapon_healthshot");
		GivePlayerItem(client, "weapon_healthshot");
	}
}

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

 

 

 

// C:\Users\akeno\Desktop\kompilator nowy\include\clients.inc(374) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\usermessages.inc(250) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\halflife.inc(612) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\halflife.inc(633) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\commandfilters.inc(96) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\helpers.inc(46) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\helpers.inc(155) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\entity_prop_stocks.inc(574) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\deathrun.inc(207) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\deathrun.inc(215) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\sdktools_sound.inc(414) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\sdktools_sound.inc(641) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\sdktools_tempents.inc(208) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\dr_class_MP_SMIERC.sp(31) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\dr_class_MP_SMIERC.sp(31) : error 001: expected token: "-identifier-", but found "-label-"
// C:\Users\akeno\Desktop\kompilator nowy\dr_class_MP_SMIERC.sp(31) : error 001: expected token: "{", but found "-label-"
// C:\Users\akeno\Desktop\kompilator nowy\dr_class_MP_SMIERC.sp(31) : error 017: undefined symbol "id"
// C:\Users\akeno\Desktop\kompilator nowy\dr_class_MP_SMIERC.sp(31) : fatal error 190: too many error messages on one line

Przy kompilacji gdy użyłem kodu który podałeś

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
1 minutę temu, Akeno|AdvancedNet napisał:

 


// C:\Users\akeno\Desktop\kompilator nowy\include\clients.inc(374) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\usermessages.inc(250) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\halflife.inc(612) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\halflife.inc(633) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\commandfilters.inc(96) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\helpers.inc(46) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\helpers.inc(155) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\entity_prop_stocks.inc(574) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\deathrun.inc(207) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\deathrun.inc(215) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\sdktools_sound.inc(414) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\sdktools_sound.inc(641) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\include\sdktools_tempents.inc(208) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\dr_class_MP_SMIERC.sp(31) : warning 219: local variable "client" shadows a variable at a preceding level
// C:\Users\akeno\Desktop\kompilator nowy\dr_class_MP_SMIERC.sp(31) : error 001: expected token: "-identifier-", but found "-label-"
// C:\Users\akeno\Desktop\kompilator nowy\dr_class_MP_SMIERC.sp(31) : error 001: expected token: "{", but found "-label-"
// C:\Users\akeno\Desktop\kompilator nowy\dr_class_MP_SMIERC.sp(31) : error 017: undefined symbol "id"
// C:\Users\akeno\Desktop\kompilator nowy\dr_class_MP_SMIERC.sp(31) : fatal error 190: too many error messages on one line

Przy kompilacji gdy użyłem kodu który podałeś

spróbuj zmienić w DR_OnClassEnabled(int client, int ClassID:id)

na DR_OnClassEnabled(int client, int id)

zostawiając na swoim miejscu public int

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

a i jeszcze DR_OnClassDiabled(int client, int ClassID:id)

na DR_OnClassDisabled(int client, int id)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
6 minut temu, Roberrt napisał:

a i jeszcze DR_OnClassDiabled(int client, int ClassID:id)

na DR_OnClassDisabled(int client, int id)

 

Tutaj masz kod przykładowej klasy na której testuje:

 

Spoiler

#include <sourcemod>
#include <deathrun>
#include <sdktools>
#include <cstrike>
#include <nox_mbhop>

char Nazwa[]		= 	"[MP] Cichociemny";
char Opis[]     	= 	" * 2 Dodatkowe Skoki\n * 30 Sekund AutoRespawn\n * Zmniejszona Grawitacja\n * Bonus EXPa 30%";

const int Damage 				= 	35;
const int Zdrowie 				= 	40;
const int Reinkarnacja 			= 	30;
const int Kondycja 				= 	35;
const int Grawitacja			=	35;

int MaKlase					[MAXPLAYERS+1];
int roundTime;

public OnPluginStart()
{
	DR_ZarejestrujKlase(Nazwa, Opis, Damage, Zdrowie, Reinkarnacja, Kondycja, Grawitacja);
	HookEvent("player_spawn", OnPlayerSpawn);
	HookEvent("round_start", Event_RoundStart);
	HookEvent("player_death", Event_PlayerDeath);

}
public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{	
	roundTime = GetTime();
}
public DR_OnClassEnabled(client, ClassID:id)
{	
	if(!(GetUserFlagBits(client) & ADMFLAG_CUSTOM4))
	{
		PrintToChat(client, "╔══════════════════════════════════════════╗");
		PrintToChat(client, " %s \x06Klasa jest dostępna tylko dla posiadaczy \x02MegaPremium \x06!", PREFIX_NORMAL);
		PrintToChat(client, "╚══════════════════════════════════════════╝");
		return DR_DISABLE;
	}
	
	PrintToChat(client, "\x04╔═══════════════════════════╗");
	PrintToChat(client, "\%s \x01Wybrałeś Klase \x04[MP] Cichociemny", PREFIX_NORMAL);
	PrintToChat(client, "\x04╚═══════════════════════════╝");
	MaKlase[client] = 1;
	
	MBHOP_AddClientJumps(client, 2);// Dodawanie skoku dla indexu 'client'
	
	SetEntityGravity(client, 0.75);
	DR_DodajBonusExp(client, 150);
	return DR_CONTINUE;
}

public DR_OnClassDisabled(client, ClassID:id)
{
	MaKlase[client] = 0;
	DR_DodajBonusExp(client, -150);
	MBHOP_AddClientJumps(client, -2);// Odejmowanie skoku z indexu client.

	SetEntityGravity(client, 1.0);
}
public Action OnPlayerSpawn(Handle event, const char[] name, bool dontBroadcast)
{
	
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(MaKlase[client])
		SetEntityGravity(client, 0.75);
}
public Event_PlayerDeath(Handle event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	
	if(MaKlase[client])
	{
		int currentTime = GetTime();
		if (currentTime-roundTime > 30)
			return;
		CreateTimer(0.1, ExecRespawn, client);
	}
}
public Action ExecRespawn(Handle:timer, any:client)
{
	if ( client && (!IsPlayerAlive(client)) && (MaKlase[client]))
		CS_RespawnPlayer(client);
	return Plugin_Stop;
} 

 

 

Po dodaniu: if(!(GetUserFlagBits(client) & ADMFLAG_CUSTOM4)) niby klasę wybiera ale nie nadaje jej graczowi.

Za to przy: if(!GetAdminFlag(GetUserAdmin(client), Admin_Custom4)) pokazuje że nie masz uprawnień do klasy.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
] sm_who 
    Nazwa                    Nazwa użytkow     Dostęp admini
 1. somebody                                    none
 2. lucid20.PL                                  none
 3. HoTTeR                                      none
 5. Tomas                                    res, admin, kick, ban, unban, slay, map, chat, vote, custom(4,5)
 6. Akeno ❤️ Dominika                       root

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
2 minuty temu, Akeno|AdvancedNet napisał:

] sm_who 
    Nazwa                    Nazwa użytkow     Dostęp admini
 1. somebody                                    none
 2. lucid20.PL                                  none
 3. HoTTeR                                      none
 5. Tomas                                    res, admin, kick, ban, unban, slay, map, chat, vote, custom(4,5)
 6. Akeno ❤️ Dominika                       root

 

kieruj się do autora to on powinien wiedzieć czemu jego plugin/klasa nie działa do jego silnika xD 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

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

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się
Zaloguj się, aby obserwować  

  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

×