Skocz do zawartości
jigsaw

[Brak rozwiązania] Edycja Kolejka

Rekomendowane odpowiedzi

Spoiler
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>

forward Shavit_OnFinish(client, style, Float:time, jumps, strafes, Float:sync, track);

#define dmg(%1,%2) (GetArraySize(PlayersKol) > 0 && GetArrayCell(PlayersKol, 0) == %2 && GetClientTeam(%1) == 2)
#define dmg2(%1,%2) (GetArraySize(PlayersKol) > 0 && GetArrayCell(PlayersKol, 0) == %1 && GetClientTeam(%2) == 2)

new Handle:PlayersKol;
new Handle:Handle_Tasks_Client[MAXPLAYERS+1];

public Plugin myinfo = 
{
	name = "[DeathRun] Kolejka",
	author = "-_-",
	description = "",
	version = "1.0",
	url = ""
};

public OnPluginStart()
{
	
	PlayersKol = CreateArray(1,64);
	
	HookEvent("player_death", Event_PlayerDeath);
	HookEvent("round_start", Event_RoundStart);
	HookEvent("player_spawned", Event_PlayerSpawned);

}

public bool:IsValidClient(client)
{
	if ( !( 1 <= client <= MaxClients ) || !IsClientInGame(client))
	{
		return false;
	}
	return true;
}

public Format_Color(String:string[], sizeo_f)
{
	ReplaceString(string, sizeo_f, "{tag}", " \x01\x0B\x02");
	ReplaceString(string, sizeo_f, "{white}", " \x01\x0B\x01");
	ReplaceString(string, sizeo_f, "{special}", " \x01\x0B\x03");
	
	ReplaceString(string, sizeo_f, "{red}", " \x0F");
	ReplaceString(string, sizeo_f, "{blue}", " \x0B");
	ReplaceString(string, sizeo_f, "{darkblue}", " \x0C");
	ReplaceString(string, sizeo_f, "{grey}", " \x0A");
	ReplaceString(string, sizeo_f, "{green}", " \x04");
	
}

public OnClientPutInServer(id)
{
	if(!IsValidClient(id))
	return;
	
	SDKHook(id, SDKHook_OnTakeDamage, OnDamage);
	arClear(id);
	Handle_Tasks_Client[id] = CreateTimer(1.0, UpdateHUD, id, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public OnClientDisconnect(id)
{
	if(!IsValidClient(id))
	return;	
	
	SDKUnhook(id, SDKHook_OnTakeDamage, OnDamage);
	arClear(id);
	KillTimer(Handle_Tasks_Client[id]);
}

public Action:OnDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
	return (!IsValidClient(attacker) || dmg(victim, attacker) || dmg2(victim, attacker)) ? Plugin_Continue : Plugin_Stop;
}

public Action:Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{	
	ClearArray(PlayersKol);
}

public Action:Event_PlayerSpawned(Handle:event, const String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	
	if (!IsPlayerAlive(client)) return;
	
	SetEntityRenderColor(client, 255, 255, 255, 255);
}

public Action:Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
	new victim = GetClientOfUserId(GetEventInt(event, "userid"));
	
	new iRet = iFind(victim);
	if (iRet != -1)
	{
		RemoveFromArray(PlayersKol, iRet);
		
		if (iRet == 0 && GetArraySize(PlayersKol) > 0 && GetArrayCell(PlayersKol, 0) != victim)
		{	
			SetEntityRenderMode(GetArrayCell(PlayersKol, 0), RENDER_TRANSCOLOR);
			SetEntityRenderColor(GetArrayCell(PlayersKol, 0), 0, 255, 0, 155);	
		}
	}
	
	return Plugin_Handled;
}

public Shavit_OnFinish(client, style, Float:time, jumps, strafes, Float:sync, track)
{
	if(IsPlayerAlive(client) && GetClientTeam(client) == 3)
	{
		new iRet = iFind(client);
	
		if(iRet == -1)
		{
			PushArrayCell(PlayersKol, client);
			if (IsPlayerAlive(GetArrayCell(PlayersKol, 0)))
			{
				SetEntityRenderMode(GetArrayCell(PlayersKol, 0), RENDER_TRANSCOLOR);
				SetEntityRenderColor(GetArrayCell(PlayersKol, 0), 0, 255, 0, 155);	
			}
			else
				RemoveFromArray(PlayersKol, 0);
		}
	}
}


public Action:UpdateHUD(Handle:timer, any:client)
{	
	if(IsClientInGame(client) && IsValidClient(client))
	{
		new String:format_array[256];
		new String:name[64];
		new bool: bNone = true;
		
		new size = GetArraySize(PlayersKol);
		for(new i=0; i<size; i++)
		{
			if(!IsValidClient(GetArrayCell(PlayersKol, i)) || !IsPlayerAlive(GetArrayCell(PlayersKol, i)))
			{
				RemoveFromArray(PlayersKol, i);
				return;
			}
			
			GetClientName(GetArrayCell(PlayersKol, i), name, 64);
			
			Format(format_array, sizeof(format_array), "%s%d. %s\n", format_array, i+1, name);
			bNone = false;
			
			/*if(GetArrayCell(PlayersKol, i) > 0)
			{
				Format(format_array, sizeof(format_array), "%s%d. %N\n", format_array, i+1, GetArrayCell(PlayersKol, i));
			}*/
		}
		
		if(bNone)	Format(format_array, sizeof(format_array), "Brak");
	
		SetHudTextParams(0.25, 0.125, 10.0, 0, 255, 0, 1, 0, 1.0, 2.0);
		ShowHudText(client, 5, "Kolejka:\n%s\n\n", format_array);
	}
}

arClear(id){
	new iRet = iFind(id);
	
	if(iRet == -1)	return	;
	
	RemoveFromArray(PlayersKol, iRet);
}

public iFind(client)
{
	new size = GetArraySize(PlayersKol);
	for(new i=0; i<size; i++)
	{
		if (GetArrayCell(PlayersKol, i) == client)
		{
			return i;
		}
	}
	return -1;
}

 

Chciałbym przerobić go tak żeby TT mógł zabić wszystkich, a zabić TT mogła tylko osoba 1 w kolejce.

 

Przez Vasto_Lorde,

Hej! Pamiętaj o wstawianiu dużej ilości kodu w tagi [spoiler] ^^

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiadomość wygenerowana automatycznie

 

Brak rozwiązania problemu

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