[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();
}
}
Код за потвърждение: Избери целия код
#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;
}