Skip to content

Commit 732a807

Browse files
authored
Add new convar to spawn player inside start zone
Add new convar to spawn player inside start zone and create new function to handle that (because i does same thing as shavit_zones_teleporttostart).
1 parent 0ebfa90 commit 732a807

File tree

1 file changed

+71
-55
lines changed

1 file changed

+71
-55
lines changed

addons/sourcemod/scripting/shavit-zones.sp

Lines changed: 71 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ Convar gCV_PrebuiltZones = null;
131131
Convar gCV_ClimbButtons = null;
132132
Convar gCV_Interval = null;
133133
Convar gCV_TeleportToStart = null;
134+
Convar gCV_TeleportToStartOnSpawn = null;
134135
Convar gCV_TeleportToEnd = null;
135136
Convar gCV_AllowDrawAllZones = null;
136137
Convar gCV_UseCustomSprite = null;
@@ -334,6 +335,7 @@ public void OnPluginStart()
334335
gCV_ClimbButtons = new Convar("shavit_zones_usebuttons", "1", "Whether to automatically hook climb_* buttons.", 0, true, 0.0, true, 1.0);
335336
gCV_Interval = new Convar("shavit_zones_interval", "1.0", "Interval between each time a mapzone is being drawn to the players.", 0, true, 0.25, true, 5.0);
336337
gCV_TeleportToStart = new Convar("shavit_zones_teleporttostart", "1", "Teleport players to the start zone on timer restart?\n0 - Disabled\n1 - Enabled", 0, true, 0.0, true, 1.0);
338+
gCV_TeleportToStartOnSpawn = new Convar("shavit_zones_teleporttostart_onspawn", "1", "Teleport players to the start zone on player spawn?\n0 - Disabled\n1 - Enabled", 0, true, 0.0, true, 1.0);
337339
gCV_TeleportToEnd = new Convar("shavit_zones_teleporttoend", "1", "Teleport players to the end zone on sm_end?\n0 - Disabled\n1 - Enabled", 0, true, 0.0, true, 1.0);
338340
gCV_AllowDrawAllZones = new Convar("shavit_zones_allowdrawallzones", "1", "Allow players to use !drawallzones to see all zones regardless of zone visibility settings.\n0 - nobody can use !drawallzones\n1 - admins (sm_zones access) can use !drawallzones\n2 - anyone can use !drawallzones", 0, true, 0.0, true, 2.0);
339341
gCV_UseCustomSprite = new Convar("shavit_zones_usecustomsprite", "1", "Use custom sprite for zone drawing?\nSee `configs/shavit-zones.cfg`.\n0 - Disabled\n1 - Enabled", 0, true, 0.0, true, 1.0);
@@ -5071,60 +5073,7 @@ public void Shavit_OnRestart(int client, int track)
50715073

50725074
if(gCV_TeleportToStart.BoolValue)
50735075
{
5074-
bool bCustomStart = gB_HasSetStart[client][track] && !gB_StartAnglesOnly[client][track];
5075-
bool use_CustomStart_over_CustomSpawn = (iIndex != -1) && bCustomStart;
5076-
5077-
// custom spawns
5078-
if (!use_CustomStart_over_CustomSpawn && !EmptyVector(gF_CustomSpawn[track]))
5079-
{
5080-
float pos[3]; pos = gF_CustomSpawn[track]; pos[2] += 1.0;
5081-
TeleportEntity(client, pos, NULL_VECTOR, ZERO_VECTOR);
5082-
}
5083-
// standard zoning
5084-
else if (bCustomStart || iIndex != -1)
5085-
{
5086-
float fCenter[3];
5087-
5088-
if (bCustomStart)
5089-
{
5090-
fCenter = gF_StartPos[client][track];
5091-
}
5092-
else
5093-
{
5094-
fCenter[0] = gV_ZoneCenter[iIndex][0];
5095-
fCenter[1] = gV_ZoneCenter[iIndex][1];
5096-
fCenter[2] = gA_ZoneCache[iIndex].fCorner1[2] + gCV_ExtraSpawnHeight.FloatValue;
5097-
}
5098-
5099-
fCenter[2] += 1.0;
5100-
5101-
TeleportEntity(client, fCenter, gB_HasSetStart[client][track] ? gF_StartAng[client][track] : NULL_VECTOR, view_as<float>({0.0, 0.0, 0.0}));
5102-
5103-
if (gB_ReplayRecorder && gB_HasSetStart[client][track])
5104-
{
5105-
Shavit_HijackAngles(client, gF_StartAng[client][track][0], gF_StartAng[client][track][1], -1, true);
5106-
}
5107-
5108-
if (!gB_HasSetStart[client][track] || gB_StartAnglesOnly[client][track])
5109-
{
5110-
ResetClientTargetNameAndClassName(client, track);
5111-
// normally StartTimer will happen on zone-touch BUT we have this here for zones that are in the air
5112-
bool skipGroundCheck = true;
5113-
Shavit_StartTimer(client, track, skipGroundCheck);
5114-
}
5115-
}
5116-
// kz buttons
5117-
else if (Shavit_IsKZMap(track))
5118-
{
5119-
if (EmptyVector(gF_ClimbButtonCache[client][track][0]) || EmptyVector(gF_ClimbButtonCache[client][track][1]))
5120-
{
5121-
return;
5122-
}
5123-
5124-
TeleportEntity(client, gF_ClimbButtonCache[client][track][0], gF_ClimbButtonCache[client][track][1], view_as<float>({0.0, 0.0, 0.0}));
5125-
5126-
return;
5127-
}
5076+
TeleportToStart(client, iIndex, track);
51285077
}
51295078

51305079
if (iIndex != -1)
@@ -5214,7 +5163,74 @@ int GetZoneIndex(int type, int track, int start = 0)
52145163

52155164
public void Player_Spawn(Event event, const char[] name, bool dontBroadcast)
52165165
{
5217-
Reset(GetClientOfUserId(event.GetInt("userid")));
5166+
int client = GetClientOfUserId(event.GetInt("userid"));
5167+
int track = Shavit_GetClientTrack(client);
5168+
int iIndex = GetZoneIndex(Zone_Start, track);
5169+
5170+
Reset(client);
5171+
5172+
if(GetConVarBool(gCV_TeleportToStartOnSpawn) && (Shavit_ZoneExists(Zone_Start, track) || Shavit_IsKZMap(track)))
5173+
{
5174+
TeleportToStart(client, iIndex, track);
5175+
}
5176+
}
5177+
5178+
public void TeleportToStart(int client, int iIndex, int track)
5179+
{
5180+
bool bCustomStart = gB_HasSetStart[client][track] && !gB_StartAnglesOnly[client][track];
5181+
bool use_CustomStart_over_CustomSpawn = (iIndex != -1) && bCustomStart;
5182+
5183+
// custom spawns
5184+
if (!use_CustomStart_over_CustomSpawn && !EmptyVector(gF_CustomSpawn[track]))
5185+
{
5186+
float pos[3]; pos = gF_CustomSpawn[track]; pos[2] += 1.0;
5187+
TeleportEntity(client, pos, NULL_VECTOR, ZERO_VECTOR);
5188+
}
5189+
// standard zoning
5190+
else if (bCustomStart || iIndex != -1)
5191+
{
5192+
float fCenter[3];
5193+
5194+
if (bCustomStart)
5195+
{
5196+
fCenter = gF_StartPos[client][track];
5197+
}
5198+
else
5199+
{
5200+
fCenter[0] = gV_ZoneCenter[iIndex][0];
5201+
fCenter[1] = gV_ZoneCenter[iIndex][1];
5202+
fCenter[2] = gA_ZoneCache[iIndex].fCorner1[2] + gCV_ExtraSpawnHeight.FloatValue;
5203+
}
5204+
5205+
fCenter[2] += 1.0;
5206+
5207+
TeleportEntity(client, fCenter, gB_HasSetStart[client][track] ? gF_StartAng[client][track] : NULL_VECTOR, view_as<float>({0.0, 0.0, 0.0}));
5208+
5209+
if (gB_ReplayRecorder && gB_HasSetStart[client][track])
5210+
{
5211+
Shavit_HijackAngles(client, gF_StartAng[client][track][0], gF_StartAng[client][track][1], -1, true);
5212+
}
5213+
5214+
if (!gB_HasSetStart[client][track] || gB_StartAnglesOnly[client][track])
5215+
{
5216+
ResetClientTargetNameAndClassName(client, track);
5217+
// normally StartTimer will happen on zone-touch BUT we have this here for zones that are in the air
5218+
bool skipGroundCheck = true;
5219+
Shavit_StartTimer(client, track, skipGroundCheck);
5220+
}
5221+
}
5222+
// kz buttons
5223+
else if (Shavit_IsKZMap(track))
5224+
{
5225+
if (EmptyVector(gF_ClimbButtonCache[client][track][0]) || EmptyVector(gF_ClimbButtonCache[client][track][1]))
5226+
{
5227+
return;
5228+
}
5229+
5230+
TeleportEntity(client, gF_ClimbButtonCache[client][track][0], gF_ClimbButtonCache[client][track][1], view_as<float>({0.0, 0.0, 0.0}));
5231+
5232+
return;
5233+
}
52185234
}
52195235

52205236
public void Round_Start(Event event, const char[] name, bool dontBroadcast)

0 commit comments

Comments
 (0)