///////////////////////////////////////// // CheckPlayerExpireTime(BasePlayer player) // One function to take care of the timer, calls himself. ///////////////////////////////////////// void CheckPlayerExpireTime(BasePlayer player) { if (TimersList[player] != null) { TimersList[player].Destroy(); TimersList[player] = null; } if (!player.IsConnected()) { return; } if (player.IsDead()) { return; } if (jailinmates[player.userID.ToString()] == null) { return; } cachedJail = jailinmates[player.userID.ToString()]; if (cachedJail.GetExpireTime() < 0) { return; } cachedInterval = cachedJail.GetExpireTime() - CurrentTime(); if (cachedInterval < 1) { SendPlayerOutOfJail(player); RemovePlayerFromJail(player); } else { TimersList[player] = timer.Once((float)(cachedInterval + 1), () => CheckPlayerExpireTime(player)); } }
///////////////////////////////////////// // Jail functions ///////////////////////////////////////// ///////////////////////////////////////// // AddPlayerToJail(BasePlayer player, int expiretime) // Adds a player to the jail, and saves him in the database ///////////////////////////////////////// void AddPlayerToJail(BasePlayer player, int expiretime) { var tempPoint = FindCell(player.userID.ToString()); if (tempPoint == null) { return; } JailInmate newjailmate; if (jailinmates[player.userID.ToString()] != null) { newjailmate = jailinmates[player.userID.ToString()]; newjailmate.UpdateJail((Vector3)tempPoint, expiretime); } else { newjailmate = new JailInmate(player, (Vector3)tempPoint, expiretime); } if (jailinmates[player.userID.ToString()] != null) { storedData.JailInmates.Remove(jailinmates[player.userID.ToString()]); } jailinmates[player.userID.ToString()] = newjailmate; storedData.JailInmates.Add(jailinmates[player.userID.ToString()]); SaveData(); }
///////////////////////////////////////// // CheckPlayerExpireTime(BasePlayer player) // One function to take care of the timer, calls himself. ///////////////////////////////////////// void CheckPlayerExpireTime(NetUser player) { if (TimersList[player] != null) { TimersList[player].Destroy(); TimersList[player] = null; } if (player.playerClient == null) { return; } if (player.playerClient.controllable == null) { return; } if (jailinmates[player.playerClient.userID.ToString()] == null) { return; } cachedJail = jailinmates[player.playerClient.userID.ToString()]; if (cachedJail.GetExpireTime() == -1) { return; } cachedInterval = cachedJail.GetExpireTime() - CurrentTime(); if (cachedInterval < 1) { SendPlayerOutOfJail(player); RemovePlayerFromJail(player); } else { TimersList[player] = timer.Once((float)(cachedInterval + 1), () => CheckPlayerExpireTime(player)); } }
///////////////////////////////////////// // Jail functions ///////////////////////////////////////// ///////////////////////////////////////// // AddPlayerToJail(BasePlayer player, int expiretime) // Adds a player to the jail, and saves him in the database ///////////////////////////////////////// void AddPlayerToJail(NetUser player, int expiretime) { string userid = player.playerClient.userID.ToString(); var tempPoint = FindCell(userid); if (tempPoint == null) { return; } JailInmate newjailmate; if (jailinmates[userid] != null) { newjailmate = jailinmates[userid]; newjailmate.UpdateJail((Vector3)tempPoint, expiretime); } else { newjailmate = new JailInmate(player, (Vector3)tempPoint, expiretime); } if (jailinmates[userid] != null) { storedData.JailInmates.Remove(jailinmates[userid]); } jailinmates[userid] = newjailmate; storedData.JailInmates.Add(jailinmates[userid]); SaveData(); }
///////////////////////////////////////// // SendPlayerOutOfJail(BasePlayer player) // Send player out of the jail ///////////////////////////////////////// void SendPlayerOutOfJail(BasePlayer player) { if (jailinmates[player.userID.ToString()] == null) { return; } cachedJail = jailinmates[player.userID.ToString()]; ZoneManager.Call("RemovePlayerFromZoneKeepinlist", "Jail", player); ForcePlayerPosition(player, cachedJail.GetFreePosition()); SendReply(player, YouAreFree); }
///////////////////////////////////////// // SendPlayerOutOfJail(Player player) // Send player out of the jail ///////////////////////////////////////// void SendPlayerOutOfJail(Player player) { if (jailinmates[player.Id.ToString()] == null) { return; } cachedJail = jailinmates[player.Id.ToString()]; EventManager.CallEvent((BaseEvent) new TeleportEvent(player.Entity, new Vector3(ReleaseX, ReleaseY, ReleaseZ))); PrintToChat(player, "[" + MessagePrefixColor + "]" + MessagePrefix + " [" + MessageTextColor + "]: " + ReleasedFromJail); if (DisplayInmateNickname) { player.DisplayNameFormat = "%name%"; } }