diff --git a/RaceTimer/scripting/unloze_racetimer_redux.sp b/RaceTimer/scripting/unloze_racetimer_redux.sp index 61d8dbc0..4e8b16f4 100644 --- a/RaceTimer/scripting/unloze_racetimer_redux.sp +++ b/RaceTimer/scripting/unloze_racetimer_redux.sp @@ -74,6 +74,7 @@ public void OnPluginStart() continue; OnClientCookiesCached(i); } + g_bDisplaySpecial = unloze_gBSpecialMapDisplay(); } public void trigger_teleport(const char[] output, int entity_index, int client, float delay) @@ -214,23 +215,25 @@ public void SQL_FinishedQuery(Database db, DBResultSet results, const char[] err public void OnMapStart() { - if (!g_dDatabase) - Database.Connect(SQL_OnDatabaseConnect, "racetimercss"); - else - { - static Handle hHostName; - if((hHostName = FindConVar("hostname")) == INVALID_HANDLE) - return; - char line[g_dLength]; - GetConVarString(hHostName, line, sizeof(line)); - if (StrContains(line, "EVENT", false) > -1) - g_bEventBool = true; - else - g_bEventBool = false; - g_bDisplaySpecial = unloze_gBSpecialMapDisplay(); - GetCurrentMap(g_cMapname, sizeof(g_cMapname)); - startTimer(); - } + if (!g_dDatabase) + Database.Connect(SQL_OnDatabaseConnect, "racetimercss"); + else + { + static Handle hHostName; + if((hHostName = FindConVar("hostname")) == INVALID_HANDLE) + return; + char line[g_dLength]; + GetConVarString(hHostName, line, sizeof(line)); + if (StrContains(line, "EVENT", false) > -1) + g_bEventBool = true; + else + g_bEventBool = false; + g_bDisplaySpecial = unloze_gBSpecialMapDisplay(); + GetCurrentMap(g_cMapname, sizeof(g_cMapname)); + startTimer(); + } + Format(g_cSpecialMapStart, sizeof(g_cSpecialMapStart), ""); + Format(g_cSpecialMapEnd, sizeof(g_cSpecialMapEnd), ""); } //---------------------------------------------------------------------------------------------------- @@ -267,6 +270,8 @@ public void startTimer() //---------------------------------------------------------------------------------------------------- public void Event_RoundStart(Handle event, const char[] name, bool dontBroadcast) { + Format(g_cSpecialMapStart, sizeof(g_cSpecialMapStart), ""); + Format(g_cSpecialMapEnd, sizeof(g_cSpecialMapEnd), ""); int race_zone_count = GetTotalRaceZones(); if (!race_zone_count) return; @@ -478,11 +483,11 @@ public void unloze_zoneEntry(int client, char[] zone) { int zoneIndex = RetrieveZoneIndex(zone); int race_zone_count = GetTotalRaceZones(); - if (!race_zone_count) + if (!(StrEqual(zone, g_cSpecialMapEnd)) && !race_zone_count) return; int l_iZoneCount = unloze_zoneCount(); - if (GetClientTeam(client) == CS_TEAM_CT && g_bHumansAllowedTime[client]) + if (GetClientTeam(client) == CS_TEAM_CT && (g_bHumansAllowedTime[client] || StrEqual(zone, g_cSpecialMapEnd))) { if ((StrContains(zone, "ZONE_PREFIX_RACE") > -1) || StrEqual(zone, g_cSpecialMapEnd)) { @@ -523,7 +528,8 @@ public void unloze_zoneLeave(int client, char[] zone) { //only maps with multiple zones need ZONE_PREFIX_START int race_zone_count = GetTotalRaceZones(); - if (!race_zone_count || g_bAllowToLeave[client]) + //if zone has special name like in mako dont return despite g_bAllowToLeave being false or there being no normally named zone + if (!(StrEqual(zone, g_cSpecialMapStart)) && (!race_zone_count || g_bAllowToLeave[client])) return; if (GetClientTeam(client) == CS_TEAM_CT) @@ -560,8 +566,8 @@ public void unloze_zoneCreated() //---------------------------------------------------------------------------------------------------- public void CheckIfSpecialRoundZones(char[] resultstart, char[] resultend) { - Format(g_cSpecialMapStart, sizeof(g_cSpecialMapStart), resultstart); - Format(g_cSpecialMapEnd, sizeof(g_cSpecialMapEnd), resultend); + Format(g_cSpecialMapStart, sizeof(g_cSpecialMapStart), resultstart); + Format(g_cSpecialMapEnd, sizeof(g_cSpecialMapEnd), resultend); } //---------------------------------------------------------------------------------------------------- // Purpose: diff --git a/RaceTimer/scripting/unloze_racetimer_specialmaps.sp b/RaceTimer/scripting/unloze_racetimer_specialmaps.sp index e110a81e..6a00d194 100644 --- a/RaceTimer/scripting/unloze_racetimer_specialmaps.sp +++ b/RaceTimer/scripting/unloze_racetimer_specialmaps.sp @@ -9,7 +9,7 @@ #include #pragma newdecls required static Handle g_hSpecialRoundCheck; -bool g_bSpecialMap; +Handle g_hTimer_check_stage = null; bool g_bCheckedRound; char g_cMapname[g_dIndex]; public Plugin myinfo = @@ -34,23 +34,15 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char [] error, int err_ma //---------------------------------------------------------------------------------------------------- public int Native_Isspecialmap(Handle handler, int numParams) { - CreateTimer(10.0, Timer_CheckStage, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); - GetCurrentMap(g_cMapname, sizeof(g_cMapname)); - if (StrEqual(g_cMapname, "ze_FFVII_Mako_Reactor_v5_3", false)) - { - g_bSpecialMap = true; - return view_as(1); - } - else - g_bSpecialMap = false; - return view_as(0); + GetCurrentMap(g_cMapname, sizeof(g_cMapname)); + return view_as(StrEqual(g_cMapname, "ze_FFVII_Mako_Reactor_v5_3", false)); } //---------------------------------------------------------------------------------------------------- // Purpose: http://git.unloze.com/UNLOZE/sm-plugins/src/master/MakoVote/scripting/MakoVote.sp //---------------------------------------------------------------------------------------------------- public int GetCurrentStage() { - int iLevelCounterEnt = FindEntityByTargetname(INVALID_ENT_REFERENCE, "Level_Counter", "math_counter"); + int iLevelCounterEnt = FindEntityByTargetname(INVALID_ENT_REFERENCE, "LevelCounter", "math_counter"); if (iLevelCounterEnt == -1) return 0; int offset = FindDataMapInfo(iLevelCounterEnt, "m_OutValue"); @@ -93,49 +85,48 @@ public int FindEntityByTargetname(int entity, const char[] sTargetname, const ch //---------------------------------------------------------------------------------------------------- public void OnPluginEnd() { - CloseHandle(g_hSpecialRoundCheck); + if (g_hSpecialRoundCheck != null) + delete g_hSpecialRoundCheck; + if (g_hTimer_check_stage != null) + delete g_hTimer_check_stage; } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public void OnPluginStart() { - //hooks - HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy); + g_hTimer_check_stage = CreateTimer(10.0, Timer_CheckStage, _, TIMER_REPEAT); + + //hooks + HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy); } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public Action Timer_CheckStage(Handle timer, any userid) { - if (g_bCheckedRound) - { - g_bCheckedRound = false; - if (!g_bSpecialMap || GetCurrentStage() != 11) - { - Call_StartForward(g_hSpecialRoundCheck); - Call_PushString(""); - Call_PushString(""); - Call_Finish(); - return; - } - int l_iZoneCount = unloze_zoneCount(); - char l_cIndexName[g_dIndex][g_dLength]; - int i; - Call_StartForward(g_hSpecialRoundCheck); - while (i < l_iZoneCount) - { - ZoneNameBasedOnIndex(i, l_cIndexName[i]); - if (StrContains(l_cIndexName[i], "ZZ") > -1) - { - Call_PushString(l_cIndexName[i +1]); - } - else - Call_PushString(l_cIndexName[i]); - i++; - } - Call_Finish(); - } + GetCurrentMap(g_cMapname, sizeof(g_cMapname)); + if (StrEqual(g_cMapname, "ze_FFVII_Mako_Reactor_v5_3", false) && g_bCheckedRound) + { + g_bCheckedRound = false; + // == 11 means its racemode on mako + if (GetCurrentStage() == 11) + { + int l_iZoneCount = unloze_zoneCount(); + char l_cIndexName[g_dIndex][g_dLength]; + int i; + //ZONE_PREFIX_MAKO_START_1 + //ZONE_PREFIX_MAKO_RACE_2 + Call_StartForward(g_hSpecialRoundCheck); + while (i < l_iZoneCount) + { + ZoneNameBasedOnIndex(i, l_cIndexName[i]); + Call_PushString(l_cIndexName[i]); + i++; + } + Call_Finish(); + } + } } //---------------------------------------------------------------------------------------------------- // Purpose: @@ -143,4 +134,4 @@ public Action Timer_CheckStage(Handle timer, any userid) public void Event_RoundStart(Handle event, const char[] name, bool dontBroadcast) { g_bCheckedRound = true; -} \ No newline at end of file +}