General > Developers Corner

Help With Respawn Command

(1/1)

Valor:
I'm attempting to create a respawn command for Chessnut Jailbreak, but I have had no luck. I've spent hours searching for tutorials and pieces of code with no success. The code I'm trying to spawn the player with is this:


function ulx.respawn( calling_ply, target_ply )
   if (target_ply:Team() == TEAM_GUARD_DEAD) then
      target_ply:SetTeam(TEAM_GUARD)
      target_ply:Spawn()
      ulx.fancyLogAdmin( calling_ply, true, "#A respawned #T", target_ply )
   elseif (target_ply:Team() == TEAM_PRISONER_DEAD) then
      target_ply:SetTeam(TEAM_PRISONER)
      target_ply:Spawn()
      ulx.fancyLogAdmin( calling_ply, true, "#A respawned #T", target_ply )
   end
end
 
local respawn = ulx.command( "RespawnMe", "ulx respawn", ulx.respawn, "!respawn", false )
respawn:addParam{ type=ULib.cmds.PlayerArg }
respawn:defaultAccess( ULib.ACCESS_ADMIN )
respawn:help( "Respawns a player" )


There were many respawn commands I found, but this one seemed to almost work. Credit for it goes to the people in this thread: http://forums.ulyssesmod.net/index.php/topic,7675.msg39074.html#msg39074

The problem with this command is it teleports the player to a spawn point, but it does not change their team to an alive guard or an alive prisoner. When I removed the target_ply:Spawn(), it changed the player's team to an alive guard/prisoner, but it did not spawn the player or teleport the player to a spawn point. I searched through the gamemode files and found nothing that could help me with this problem except  this:

function GM:ShouldPlayerSpectate()
   return JB_ROUND_STATE == ROUND_ACTIVE or JB_ROUND_STATE == ROUND_DEAD or JB_ROUND_STATE == ROUND_END;
end;

Could this be blocking the player from spawning in? If so how would I fix it? Also, this was found in sv_rounds.lua.

I'm not sure if a respawn command is possible for this gamemode, but I would really appreciate it if someone could help me.

Neku:
Spawn first, then set team.

Valor:
I changed it to this.

function ulx.respawn( calling_ply, target_ply )
   if (target_ply:Team() == TEAM_GUARD_DEAD) then
      target_ply:Spawn()
      target_ply:SetTeam(TEAM_GUARD)
            ulx.fancyLogAdmin( calling_ply, true, "#A respawned #T", target_ply )
   elseif (target_ply:Team() == TEAM_PRISONER_DEAD) then
      target_ply:Spawn()
      target_ply:SetTeam(TEAM_PRISONER)
      ulx.fancyLogAdmin( calling_ply, true, "#A respawned #T", target_ply )
   end
end

Now it sets the team to alive and teleports the player to a spawn point, but it does not spawn them.

An Error Has Occurred!

array_keys(): Argument #1 ($array) must be of type array, null given

[0] Board index

Go to full version