Преработка на ZE Escape Button

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
SkandaU
Извън линия
Потребител
Потребител
Мнения: 213
Регистриран на: 09 Яну 2017, 12:37
Се отблагодари: 45 пъти
Получена благодарност: 22 пъти

Преработка на ZE Escape Button

Мнение от SkandaU » 09 Юли 2018, 00:43

Здравейте, дали е възможно този плъгин по-долу да се навърже някак така, че в началото на рунда да започне таймер и когато бъде натиснат бутона накрая на мапа да показва първия който го е натиснал и времето за което го е натиснал, също така ако може да запазва само този рекорд. Този плъгин ппц @Nikolov го беше нагласил за деатрън. Демек да се пусне таймер в началото на рунда и да се направи проверка, когато изкочи съобщението от плъгина по-долу да го спира и да показва първия го достигнал.

[Zombie Escape] Igracha SkandaU izpolzva butona za bqgstvo. Toi dostigna do kraq za 3:27 sekundi.

[Zombie Escape] Igracha SkandaU ne uspq da podobri recorda na mapa [3:10 sekundi]. или
[Zombie Escape] Igracha SkandaU postavi nov record [3:02 sekundi].

Ако е възможно да се постави команда за проверка на рекорда :

[Zombie Escape] Tekushtiq record na mapa e [3:02 sekundi] ot SkandaU.

Плъгина със съобщението от натискането на бутона:

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

new RequiredEnt;
new bool:HasUsedButton;

public plugin_init()
{
	register_plugin( "[ZE] Heli Button Info", "1.0", "r0ck" );
	new iEnt1 = -1, iEnt2 = -1, Float:fspeed, Float:origin[3], Float:origin2[3], Float:fdistance, Float:ShortDistance = 99999.9, bool:FoundEnt;
	while ( (iEnt1 = engfunc( EngFunc_FindEntityByString, iEnt1, "classname", "path_track" ) ) != 0 )
	{
		pev( iEnt1, pev_speed, fspeed );
		if ( 2.0 < fspeed < 40.0 )
		{
			pev( iEnt1, pev_origin, origin );
			/* log_amx("track origin %f %f %f", origin[0], origin[1], origin[2]) */
			while ( (iEnt2 = engfunc( EngFunc_FindEntityByString, iEnt2, "classname", "func_button" ) ) != 0 )
			{
				fm_get_brush_entity_origin( iEnt2, origin2 );
				fdistance = get_distance_f( origin, origin2 );
				if ( fdistance < ShortDistance )
				{
					RequiredEnt   = iEnt2;
					ShortDistance = fdistance;
					/* log_amx("ent %i distance %f", iEnt2, fdistance) */
				}
				FoundEnt = true;
			}
			break;
		}
	}
	if ( !FoundEnt )
	{
		while ( (iEnt1 = engfunc( EngFunc_FindEntityByString, iEnt1, "classname", "trigger_multiple" ) ) != 0 )
		{
			fm_get_brush_entity_origin( iEnt1, origin );
			/* log_amx("trigger origin %f %f %f", origin[0], origin[1], origin[2]) */
			while ( (iEnt2 = engfunc( EngFunc_FindEntityByString, iEnt2, "classname", "func_button" ) ) != 0 )
			{
				fm_get_brush_entity_origin( iEnt2, origin2 );
				fdistance = get_distance_f( origin, origin2 );
				if ( fdistance < ShortDistance )
				{
					RequiredEnt   = iEnt2;
					ShortDistance = fdistance;
					/* log_amx("ent %i distance %f", iEnt2, fdistance) */
				}
				FoundEnt = true;
			}
			break;
		}
	}
	if ( FoundEnt )
	{
		register_logevent( "Event_RoundStart", 2, "0=World triggered", "1=Round_Start" );
		RegisterHam( Ham_Use, "func_button", "fwButtonUsed" );
	} else
		set_fail_state( "[ZE] Zombie Escape Button not found." );
}
public Event_RoundStart()
{
	HasUsedButton = false;
}
public fwButtonUsed( ent, idcaller )
{
	if ( !HasUsedButton && ent == RequiredEnt )
	{
		new szName[33]; get_user_name( idcaller, szName, charsmax( szName ) );
		print_colored( 0, "!y[!gZombie Escape!y]!t %s !gused the escape button!y!", szName );
		HasUsedButton = true;
	}
}
stock fm_get_brush_entity_origin( index, Float:origin[3] )
{
	new Float:mins[3], Float:maxs[3];
	pev( index, pev_origin, origin );
	pev( index, pev_mins, mins );
	pev( index, pev_maxs, maxs );
	origin[0] += (mins[0] + maxs[0]) * 0.5;
	origin[1] += (mins[1] + maxs[1]) * 0.5;
	origin[2] += (mins[2] + maxs[2]) * 0.5;
	return(1);
}
/* Color Stocks */
stock print_colored( const id, const input[], any: ... )
{
	new count = 1, players[32], i, player;
	static msg[191];
	if ( numargs() == 2 )
		copy( msg, 190, input );
	else
		vformat( msg, 190, input, 3 );
	replace_all( msg, 190, "!g", "^4" );
	replace_all( msg, 190, "!y", "^1" );
	replace_all( msg, 190, "!t", "^3" );
	if ( id )
	{
		if ( !is_user_connected( id ) ) return;
		players[0] = id;
	} else get_players( players, count, "ch" );
	for ( i = 0; i < count; i++ )
	{
		player = players[i];
		message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "SayText" ), _, player );
		write_byte( player );
		write_string( msg );
		message_end();
	}
}
Плъгина с таймера и рекордите на @Nikolov

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <engine>
#include <hamsandwich>
#include <nvault>
#include <CromChat>

new h_vault;

#define TaskID 3456
#define DeadID 3356
new sMap[35];
new HudObj;
new TimerS[33] = 0; 
new iBest, sBest[64] = "";
new g_iMaxPlayers;
new g_iTimerObj;

public plugin_init()
{
	register_plugin("DeathRun Timer + Save Records", "2.1", "Knopers");//Edited by (Owner123) and Nikolow;
	get_mapname(sMap, 34);
	
	RegisterHam(Ham_Spawn, "player", "EvSpawn", 1);
	RegisterHam(Ham_Killed, "player", "EvPlayerKilled", 1);
	register_logevent("eventResetTime", 2, "1=Round_Start");

	register_concmd("say /best", "ShowBest");
	
	HudObj = CreateHudSyncObj();
	
	h_vault = nvault_open("dr_records");
	LoadRecord();
	
	g_iMaxPlayers = get_maxplayers();
	g_iTimerObj = CreateHudSyncObj();
}

public plugin_end()
		nvault_close(h_vault);

public client_disconnect(id)
{
	if(task_exists(id + TaskID))
		remove_task(id + TaskID);

	if(task_exists(id + DeadID))
		remove_task(id + DeadID);
}

public EvSpawn(id)
{
	TimerS[id] = 0;
	
	if(task_exists(TaskID + id))
		remove_task(TaskID + id);
		
	if(task_exists(id + DeadID))
		remove_task(id + DeadID);
		
	if(get_user_team(id) == 2)
		Start(id);
}

public EvPlayerKilled(iVictim, iAttacker)
{
	if(task_exists(TaskID + iVictim))
		remove_task(TaskID + iVictim);
		
	set_task(1.0, "DeadTask", iVictim + DeadID, _, _, "b");
	
	if(get_user_team(iVictim) == 1 && get_user_team(iAttacker) == 2)
		Finish(iAttacker, iVictim);
}

public Start(id)
{
	TimerS[id] = 0;
	if(get_user_team(id) == 2)
	{
		if(task_exists(id + TaskID))
			remove_task(id + TaskID);
			
		fnShowTimer(id + TaskID);
		
		set_task(1.0, "fnShowTimer", id + TaskID, _, _, "b");
	}
}

public Finish(id, idTT)
{
	if(TimerS[id] <= 10 || !task_exists(TaskID + id))
		return PLUGIN_CONTINUE;
	
	if(idTT > 0 && idTT < 33)
	{
		remove_task(TaskID + id);
		new skName[32];
		get_user_name(id, skName, 31);
		new sMsg[128];
		format(sMsg, 127, "&x01[&x04Timer&x01]&x03 %s&x01 finished the map in&x04 %02d:%02d", skName, TimerS[id] / 60, TimerS[id] % 60);
		ColorChat(0, sMsg);
		if(TimerS[id] < iBest || iBest < 1)
		{
			iBest = TimerS[id];
			sBest = skName;
			
			format(sMsg, 127, "&x01[&x04Timer&x01]&x03 %s&x01 made a new&x04 record&x01 on the map. His time:&x04 %02d:%02d", skName, TimerS[id] / 60, TimerS[id] % 60);
			ColorChat(0, sMsg);
			
			replace_all(sBest, 63, "^"", "''");
			SaveRecord();
		}
		else
		{
			format(sMsg, 127, "&x01[&x04Timer&x01]&x03 %s&x01 didn't beat the best record. Best Record is:&x04 %02d:%02d", skName, iBest / 60, iBest % 60);
			ColorChat(0, sMsg);
		}
	}
	else
	{
		remove_task(TaskID + id);
		new sName[32];
		get_user_name(id, sName, 31);
		new sMsg[128];
		format(sMsg, 127, "&x01[&x04Timer&x01]&x03 %s&x01 finished the map in&x04 %02d:%02d", sName, TimerS[id] / 60, TimerS[id] % 60);
		ColorChat(0, sMsg);
		if(TimerS[id] < iBest || iBest < 1)
		{
			iBest = TimerS[id];
			sBest = sName;
			
			format(sMsg, 127, "&x01[&x04Timer&x01]&x03 %s&x01 made a new&x04 record&x01 on the map. His time:&x04 %02d:%02d", sName, TimerS[id] / 60, TimerS[id] % 60);
			ColorChat(0, sMsg);
			
			replace_all(sBest, 63, "^"", "''");
			SaveRecord();
		}
		else
		{
			format(sMsg, 127, "&x01[&x04Timer&x01]&x03 %s&x01 didn't beat the best record. Best Record is:&x04 %02d:%02d", sName, iBest / 60, iBest % 60);
			ColorChat(0, sMsg);
		}
	}
	return PLUGIN_CONTINUE;
}

public fnShowTimer(idTask)
{
	new id = idTask - TaskID;
	TimerS[id] ++;
	set_hudmessage(255, 255, 255, -1.0, 0.14, 0, 0.1, 1.0, 0.1, 0.1, -1);
	ShowSyncHudMsg(id, g_iTimerObj, "Timer: %02d:%02d", TimerS[id] / 60, TimerS[id] % 60);
}

public eventResetTime()
{
	for(new id = 1; id < g_iMaxPlayers; id++)
	{
		if(!is_user_connected(id) || !is_user_alive(id))
			continue;
		
		if(!task_exists(id + TaskID))
			continue;
		
		remove_task(id + TaskID);
		TimerS[id] = 0;
		set_task(1.0, "fnShowTimer", id + TaskID, _, _, "b");
	}
}

public ShowBest(id)
{
	new sMsg[128];
	
	if(!sBest[0])
		format(sMsg, 127, "&x01[&x04Timer&x01] There is no map record on this map.");
	else
		format(sMsg, 127, "&x01[&x04Timer&x01] Map Record:&x04 %02d:%02d^x01 -&x03 %s", iBest / 60, iBest % 60, sBest);
	
	ColorChat(0, sMsg);
}
public DeadTask(Spect)
{
	Spect -= DeadID;
	if(!is_user_connected(Spect) || is_user_alive(Spect))
	{
		remove_task(Spect + DeadID);
		return PLUGIN_CONTINUE;
	}
	new id = entity_get_int(Spect, EV_INT_iuser2);
	if(id <= 0 || id >= 33 || !is_user_alive(id))
		return PLUGIN_CONTINUE;
	new Name[32];
	get_user_name(id, Name, 31);
	
	set_hudmessage(255, 255, 255, -1.0, 0.2, 2, 0.05, 1.0, 0.1, 3.0, -1);
	ShowSyncHudMsg(Spect, HudObj, "%s^nPlayer time: %02d:%02d", Name, TimerS[id] / 60, TimerS[id] % 60);
	
	return PLUGIN_CONTINUE;
}

public SaveRecord()
{
	new sData[128];

	format(sData, 127,"^"%s^" ^"%02d^"", sBest, iBest);
	nvault_set(h_vault, sMap, sData);
	
	return PLUGIN_CONTINUE
}

public LoadRecord()
{
	new sData[128];
 
	format(sData, 127,"^"%s^" ^"%02d^"", sBest, iBest);
	nvault_get(h_vault, sMap, sData, 127);
	
	new RecordName[64], RecordS[3];
	parse(sData, RecordName, 63, RecordS, 2);
	
	sBest = RecordName;
	iBest = str_to_num(RecordS);
	
	return PLUGIN_CONTINUE;
}  
Изображение

  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 15 госта