mirror of
https://github.com/shavitush/bhoptimer.git
synced 2025-12-07 10:28:26 +00:00
fix some kz button restarting things & add track param to Shavit_MarkKZMap() & Shavit_IsKZMap()
This commit is contained in:
parent
f02ac94bbf
commit
86b23b33a2
@ -1164,20 +1164,20 @@ native void Shavit_LoadSnapshot(int client, any[] snapshot, int size = sizeof(ti
|
||||
native void Shavit_StopChatSound();
|
||||
|
||||
/**
|
||||
* Marks a map as if it has built-in zones/buttons.
|
||||
* Marks a map track as if it has built-in zones/buttons.
|
||||
*
|
||||
* @noreturn
|
||||
*/
|
||||
native void Shavit_MarkKZMap();
|
||||
native void Shavit_MarkKZMap(int track);
|
||||
|
||||
/**
|
||||
* Lets us know if the map was marked as a KZ map.
|
||||
* Lets us know if the map track was marked as a KZ map.
|
||||
* KZ map: a map with built-in zones/buttons.
|
||||
* Does not necessarily mean that the map was designed for KZ gameplay.
|
||||
*
|
||||
* @return Boolean value.
|
||||
*/
|
||||
native bool Shavit_IsKZMap();
|
||||
native bool Shavit_IsKZMap(int track);
|
||||
|
||||
/**
|
||||
* Retrieves style access for a player.
|
||||
|
||||
@ -154,7 +154,7 @@ float gF_ZoneAiraccelerate[MAXPLAYERS+1];
|
||||
float gF_ZoneSpeedLimit[MAXPLAYERS+1];
|
||||
|
||||
// kz support
|
||||
bool gB_KZMap = false;
|
||||
bool gB_KZMap[TRACKS_SIZE];
|
||||
|
||||
public Plugin myinfo =
|
||||
{
|
||||
@ -560,7 +560,8 @@ public void OnConfigsExecuted()
|
||||
|
||||
public void OnMapEnd()
|
||||
{
|
||||
gB_KZMap = false;
|
||||
bool empty[TRACKS_SIZE];
|
||||
gB_KZMap = empty;
|
||||
}
|
||||
|
||||
public Action Command_StartTimer(int client, int args)
|
||||
@ -624,7 +625,7 @@ public Action Command_StartTimer(int client, int args)
|
||||
}
|
||||
}
|
||||
|
||||
if (gB_Zones && (Shavit_ZoneExists(Zone_Start, track) || gB_KZMap))
|
||||
if (gB_Zones && (Shavit_ZoneExists(Zone_Start, track) || gB_KZMap[track]))
|
||||
{
|
||||
if(!Shavit_StopTimer(client, false))
|
||||
{
|
||||
@ -635,11 +636,6 @@ public Action Command_StartTimer(int client, int args)
|
||||
Call_PushCell(client);
|
||||
Call_PushCell(track);
|
||||
Call_Finish();
|
||||
|
||||
if (!gB_Zones)
|
||||
{
|
||||
StartTimer(client, track);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -704,7 +700,7 @@ public Action Command_TeleportEnd(int client, int args)
|
||||
}
|
||||
}
|
||||
|
||||
if(gB_Zones && (Shavit_ZoneExists(Zone_End, track) || gB_KZMap))
|
||||
if(gB_Zones && (Shavit_ZoneExists(Zone_End, track) || gB_KZMap[track]))
|
||||
{
|
||||
if(Shavit_StopTimer(client, false))
|
||||
{
|
||||
@ -1292,7 +1288,7 @@ void ChangeClientStyle(int client, int style, bool manual)
|
||||
|
||||
CallOnStyleChanged(client, gA_Timers[client].bsStyle, style, manual);
|
||||
|
||||
if (gB_Zones && (Shavit_ZoneExists(Zone_Start, gA_Timers[client].iTimerTrack) || gB_KZMap))
|
||||
if (gB_Zones && (Shavit_ZoneExists(Zone_Start, gA_Timers[client].iTimerTrack) || gB_KZMap[gA_Timers[client].iTimerTrack]))
|
||||
{
|
||||
Shavit_StopTimer(client, true);
|
||||
Call_StartForward(gH_Forwards_OnRestart);
|
||||
@ -1461,7 +1457,12 @@ public int Native_GetTimerStatus(Handle handler, int numParams)
|
||||
|
||||
public int Native_IsKZMap(Handle handler, int numParams)
|
||||
{
|
||||
return view_as<bool>(gB_KZMap);
|
||||
if (numParams < 1)
|
||||
{
|
||||
return ThrowNativeError(SP_ERROR_NATIVE, "Missing track parameter.");
|
||||
}
|
||||
|
||||
return gB_KZMap[GetNativeCell(1)];
|
||||
}
|
||||
|
||||
public int Native_StartTimer(Handle handler, int numParams)
|
||||
@ -1984,7 +1985,13 @@ public int Native_LogMessage(Handle plugin, int numParams)
|
||||
|
||||
public int Native_MarkKZMap(Handle handler, int numParams)
|
||||
{
|
||||
gB_KZMap = true;
|
||||
if (numParams < 1)
|
||||
{
|
||||
return ThrowNativeError(SP_ERROR_NATIVE, "Missing track parameter.");
|
||||
}
|
||||
|
||||
gB_KZMap[GetNativeCell(1)] = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int Native_GetClientTimescale(Handle handler, int numParams)
|
||||
|
||||
@ -2108,7 +2108,7 @@ public Action Respawn(Handle timer, any data)
|
||||
|
||||
void RestartTimer(int client, int track)
|
||||
{
|
||||
if((gB_Zones && Shavit_ZoneExists(Zone_Start, track)) || Shavit_IsKZMap())
|
||||
if ((gB_Zones && Shavit_ZoneExists(Zone_Start, track)) || Shavit_IsKZMap(track))
|
||||
{
|
||||
Shavit_RestartTimer(client, track);
|
||||
}
|
||||
|
||||
@ -969,7 +969,7 @@ public void Frame_HookButton(any data)
|
||||
if(zone != -1)
|
||||
{
|
||||
gI_KZButtons[track][zone] = entity;
|
||||
Shavit_MarkKZMap();
|
||||
Shavit_MarkKZMap(track);
|
||||
|
||||
SDKHook(entity, SDKHook_UsePost, UsePost);
|
||||
}
|
||||
@ -1118,7 +1118,7 @@ public void Frame_HookTrigger(any data)
|
||||
if (zone == Zone_Start || zone == Zone_End)
|
||||
{
|
||||
gI_KZButtons[track][zone] = entity;
|
||||
Shavit_MarkKZMap();
|
||||
Shavit_MarkKZMap(track);
|
||||
}
|
||||
|
||||
int iZoneIndex = gI_MapZones;
|
||||
@ -1824,6 +1824,18 @@ void ReloadPrebuiltZones()
|
||||
Frame_HookTrigger(EntIndexToEntRef(iEntity));
|
||||
}
|
||||
}
|
||||
|
||||
iEntity = INVALID_ENT_REFERENCE;
|
||||
|
||||
while ((iEntity = FindEntityByClassname(iEntity, "func_button")) != INVALID_ENT_REFERENCE)
|
||||
{
|
||||
GetEntPropString(iEntity, Prop_Data, "m_iName", sTargetname, sizeof(sTargetname));
|
||||
|
||||
if (StrContains(sTargetname, "climb_") != -1)
|
||||
{
|
||||
Frame_HookButton(EntIndexToEntRef(iEntity));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Action Command_TpToZone(int client, int args)
|
||||
@ -3628,8 +3640,15 @@ public void Shavit_OnRestart(int client, int track)
|
||||
}
|
||||
|
||||
// kz buttons
|
||||
else if(Shavit_IsKZMap() && !EmptyVector(gF_ClimbButtonCache[client][track][0]) && !EmptyVector(gF_ClimbButtonCache[client][track][1]))
|
||||
else if (Shavit_IsKZMap(track))
|
||||
{
|
||||
Shavit_StopTimer(client);
|
||||
|
||||
if (EmptyVector(gF_ClimbButtonCache[client][track][0]) || EmptyVector(gF_ClimbButtonCache[client][track][1]))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
TeleportEntity(client, gF_ClimbButtonCache[client][track][0], gF_ClimbButtonCache[client][track][1], view_as<float>({0.0, 0.0, 0.0}));
|
||||
|
||||
return;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user