public void UserKickPuck(RoomUnit user, RoomItemBattleBanzaiPuck puck) { if (user is RoomUnitUser user_) { puck.LastUserHitPuck = user; puck.ExtraData = ((int)user_.GameTeam).ToString(); puck.UpdateState(false, true); if (user_.GameType == GameType.BattleBanzai) //we have change user is on game { (this.Room.RoomGamemapManager.GetTile(puck.X, puck.Y).HigestRoomItem as RoomItemBattleBanzaiPatch)?.TileWalkOnLogic(puck.LastUserHitPuck); } } else { puck.LastUserHitPuck = null; } if (user.TargetX == puck.X && user.TargetY == puck.Y) { this.DoPuckMath(puck, user.BodyRotation, 6); } else { this.DoPuckMath(puck, user.BodyRotation, 1); } }
public override void OnWalkOff(RoomUnit user) { if (user is RoomPet pet && pet.Rider is RoomUnitUser user_) { if (this.IsMiddlePart(pet.X, pet.Y)) { if (pet.JumpStatus == HorseJumpStatus.JUMPING) { if (pet.PetData.Energy >= 3) { this.Room.EquestrianTrackHost(1); user_.Session.GetHabbo().GetUserStats().HorseJumper++; user_.Session.GetHabbo().GetUserAchievements().CheckAchievement("HorseJumper"); if (pet.LastJump == 4) { user_.Session.GetHabbo().GetUserStats().Equestrian++; } else { user_.Session.GetHabbo().GetUserStats().Equestrian = 0; } user_.Session.GetHabbo().GetUserAchievements().CheckAchievement("Equestrian"); pet.PetData.Energy -= 3; pet.AddExpirience(3, false); } } } } }
public override void OnWalkOff(RoomUnit user) { if (user.IsRealUser && user is RoomUnitUser user_) { user_.Rollerskate = false; } }
public override void OnWalkOn(RoomUnit user) { if (this.ExtraData == "2000" || this.ExtraData == "3000" || this.ExtraData == "4000" || this.ExtraData == "5000" || this.ExtraData == "6000" || this.ExtraData == "7000") { if (user.IsRealUser && user is RoomUnitUser user_) { FreezePlayer player = this.Room.RoomFreezeManager.TryGetFreezePlayer(user_.Session.GetHabbo().ID); if (player != null) { switch (this.ExtraData) { case "2000": player.Range++; break; case "3000": player.Balls++; break; case "4000": player.BallType = FreezeBallType.Diagonal; break; case "5000": player.BallType = FreezeBallType.Mega; break; case "6000": if (player.Lives < 4) { player.Lives++; this.Room.RoomFreezeManager.UpdateScoreboards(); } player.ShowLives(); break; case "7000": player.ActiveShield(); break; default: return; } } user_.Session.GetHabbo().GetUserStats().FreezePowerUpCollector++; user_.Session.GetHabbo().GetUserAchievements().CheckAchievement("FreezePowerUpCollector"); } this.ExtraData = "1" + this.ExtraData; this.UpdateState(true, true); } }
public override void OnWalkOff(RoomUnit user) { RoomTile nextTile = this.Room.RoomGamemapManager.GetTile(user.NextStepX, user.NextStepY); if (!(nextTile.HigestRoomItem is RoomItemIceSkatingPatch)) { if (user.IsRealUser && user is RoomUnitUser user_) { this.Room.RoomGameManager.LeaveTag(user_); } } }
public void UserKickFootball(RoomUnit user, RoomItemBall football) { football.LastUserHitFootball = (user as RoomUnitUser)?.Session?.GetHabbo() != null ? (RoomUnitUser)user: null; if (user.TargetX == football.X && user.TargetY == football.Y) { this.DoFootballMath(football, user.BodyRotation, 16); } else { this.DoFootballMath(football, user.BodyRotation, 11); } }
public void UserWalkOn(RoomUnit user) { if (user.IsRealUser && user is RoomUnitUser user_) { RoomTile tile = user.CurrentTile; if (tile?.HigestRoomItem != null) { foreach (RoomItemWiredTrigger item in this.Room.RoomItemManager.FloorItems.Get(typeof(RoomItemWiredOnFurni))) { this.WiredTrigger(item, user_, new HashSet <uint>(), tile.HigestRoomItem.ID); } } } }
public override void OnWalkOn(RoomUnit user) { if (user.IsRealUser && user is RoomUnitUser user_) { if (user_.GameTeam == GameTeam.Blue && user_.GameType == GameType.Freeze) { this.Room.RoomGameManager.LeaveTeam(user_); } else { this.Room.RoomGameManager.JoinTeam(user_, GameTeam.Blue, GameType.Freeze); } this.Room.RoomGameManager.GiveEffect(user_); } }
public override void OnWalkOn(RoomUnit user) { if (user.IsRealUser && user is RoomUnitUser user_) { if (user_.GameTeam == GameTeam.Green && user_.GameType == GameType.BattleBanzai) { this.Room.RoomGameManager.LeaveTeam(user_); } else { this.Room.RoomGameManager.JoinTeam(user_, GameTeam.Green, GameType.BattleBanzai); } this.Room.RoomGameManager.GiveEffect(user_); } }
public override void OnWalkOn(RoomUnit user) { if (user.IsRealUser && user is RoomUnitUser user_) { if (user_.IceSkateStatus == IceSkateStatus.None) { this.Room.RoomGameManager.JoinTag(user_); } else if (user_.IceSkateStatus == IceSkateStatus.Tagged) { RoomUnitUser nextTaggedUser = this.GetTaggedUser(user.X + 1, user.Y); if (nextTaggedUser == null) //try get next tagged user { nextTaggedUser = this.GetTaggedUser(user.X - 1, user.Y); if (nextTaggedUser == null) { nextTaggedUser = this.GetTaggedUser(user.X, user.Y + 1); if (nextTaggedUser == null) { nextTaggedUser = this.GetTaggedUser(user.X, user.Y - 1); } } } if (nextTaggedUser != null) { user_.IceSkateStatus = IceSkateStatus.Playing; nextTaggedUser.IceSkateStatus = IceSkateStatus.Tagged; foreach (RoomItemTagPole tagPole in this.Room.RoomItemManager.FloorItems.Get(typeof(RoomItemTagPole))) { if (tagPole.Tagged == user) { tagPole.Tagged = nextTaggedUser; } } this.Room.RoomGameManager.GiveEffect(user_); this.Room.RoomGameManager.GiveEffect(nextTaggedUser); nextTaggedUser.Session.GetHabbo().GetUserStats().CaughtOnIceTag++; nextTaggedUser.Session.GetHabbo().GetUserAchievements().CheckAchievement("CaughtOnIceTag"); } } } }
public void LeaveRoom(RoomUnit roomUnit) { roomUnit.StopMoving(); roomUnit.CurrentTile.UsersOnTile.Remove(roomUnit.VirtualID); this.Room.SendToAll(new MultiRevisionServerMessage(OutgoingPacketsEnum.UserLeaved, new ValueHolder("VirtualID", roomUnit.VirtualID))); this.RoomUsers.Remove(roomUnit.VirtualID, roomUnit.GetType()); this.MovingUsers.TryRemove(roomUnit.VirtualID, out RoomUnit trash); this.Room.UpdateUsersCount(); if (roomUnit.IsRealUser && roomUnit is RoomUnitUser realUser) { foreach (BotAI bot in this.GetBots()) { bot.OnUserLeaveRoom(realUser); } FreezePlayer player = this.Room.RoomFreezeManager.TryGetFreezePlayer(realUser.UserID); if (player != null) { this.Room.RoomFreezeManager.LeaveGame(player, false); } this.Room.RoomGameManager.LeaveTeam(realUser); this.Room.RoomGameManager.LeaveTag(realUser); this.Room.GetTradeByUserId(realUser.UserID)?.Cancel(realUser.Session); if (this.Room.RoomData.IsPublicRoom) { this.Room.RoomGameManager.RoomWobbleSquabbleManager.Leave(realUser); foreach (RoomGameboard board in this.Room.RoomGameManager.Gameboards.Values) { board.Leave(realUser); } } } if (roomUnit is BotAI bot_) { bot_.OnSelfLeaveRoom(false); } }
public override void OnWalkOn(RoomUnit user) { this.ExtraData = "1"; this.UpdateState(false, true); this.DoUpdate(1); IEnumerable <RoomItem> battleBanzaiTeleports = this.Room.RoomItemManager.FloorItems.Get(typeof(RoomItemBattleBanzaiRandomTeleport)).Where(i => i.ID != this.ID); if (battleBanzaiTeleports.Count() > 0) { RoomItem item = battleBanzaiTeleports.ElementAt(RandomUtilies.GetRandom(0, battleBanzaiTeleports.Count() - 1)); item.ExtraData = "1"; item.UpdateState(false, true); item.DoUpdate(1); user.StopMoving(); user.SetLocation(item.X, item.Y, item.Z); //set new location user.UpdateState(); } }
public void TileWalkOnLogic(RoomUnit user) { if (this.Room.RoomGameManager.RoomBattleBanzaiManager.GameStarted) { if (user.IsRealUser && user is RoomUnitUser user_ && user_.GameType == GameType.BattleBanzai) { if (user_.GameTeam != GameTeam.None) { int team = (int)user_.GameTeam; int teamBBColor = team * 3; if (this.ExtraData != "5" && this.ExtraData != "8" && this.ExtraData != "11" && this.ExtraData != "14") //locked tile { if (this.ExtraData == "1") { this.ExtraData = teamBBColor.ToString(); this.UpdateState(true, true); } else if (this.ExtraData == teamBBColor.ToString()) { this.ExtraData = (teamBBColor + 1).ToString(); this.UpdateState(true, true); } else if (this.ExtraData == (teamBBColor + 1).ToString()) { this.ExtraData = (teamBBColor + 2).ToString(); this.UpdateState(true, true); this.LockedTile(user_); } else { this.ExtraData = teamBBColor.ToString(); this.UpdateState(true, true); } } } } } }
public override void OnWalkOn(RoomUnit user) { RoomPet pet = user as RoomPet; if (pet != null && pet.Rider != null) { if (this.IsMiddlePart(pet.X, pet.Y)) { pet.JumpStatus = HorseJumpStatus.JUMPING; pet.LastJump = RandomUtilies.GetRandom(1, 4); this.ExtraData = pet.LastJump.ToString(); this.UpdateState(false, true); this.DoUpdate(2); } else { pet.JumpStatus = HorseJumpStatus.ABOUT_TO_JUMP; this.ExtraData = "5"; this.UpdateState(false, true); } } }
public void AboutToWalkOn(RoomUnit unit) { this.RoomItemManager.AboutToWalkOn(unit); }
public void UserWalkOn(RoomUnit unit) { this.Model.Triggers?[unit.X, unit.Y]?.UserWalkOn(unit); }
public override void OnWalkOn(RoomUnit user) { this.Room.RoomGameManager.RoomBattleBanzaiManager.UserKickPuck(user, this); }
public void UserWalkOff(RoomUnit unit) { unit.CurrentTile?.HigestRoomItem?.OnWalkOff(unit); }
public virtual void AboutToWalkOn(RoomUnit user) { }
public void OnCycle() { this.RollerTimer++; if (this.RollerTimer >= this.Room.RollerSpeed) { this.RollerTimer = 0; List <int> rollerUsers = new List <int>(); List <uint> rollerItems = new List <uint>(); foreach (RoomItem item in this.FloorItems.Get(typeof(RoomItemRoller)).OrderBy(i => i.Z)) { this.Room.ThrowIfRoomCycleCancalled("Cycle rollers", item); //Have room cycle cancalled? ThreeDCoord way = item.TDC; if (way.x >= this.Room.RoomGamemapManager.Model.MaxX || way.y >= this.Room.RoomGamemapManager.Model.MaxY || way.x < 0 || way.y < 0) //dont roll it out of room { continue; } else { RoomTile to = this.Room.RoomGamemapManager.GetTile(way.x, way.y); if (!to.IsHole && !to.IsDoor && !to.IsInUse) { RoomTile from = this.Room.RoomGamemapManager.GetTile(item.X, item.Y); List <RoomItem> itemsFrom = from.ItemsOnTile.Values.Where(i => i.Z >= item.ActiveHeight && !rollerItems.Contains(i.ID) && this.FitsInsideRoom(i, way.x, way.y, i.Rot)).ToList(); List <RoomItem> itemsTo = to.ItemsOnTile.Values.OrderByDescending(i => i.Z).ToList(); itemsTo.RemoveAll(t => itemsFrom.Contains(t)); RoomItem higestItem = null; foreach (RoomItem item_ in itemsTo) { if (higestItem == null) { higestItem = item_; } else { if (higestItem.Z == item_.Z) { if (item_.ActiveHeight > higestItem.ActiveHeight) { higestItem = item_; } } else //not even on same height { break; } } } if (!(higestItem is RoomItemRoller)) //the top item isint roller { if (itemsTo.Any(i => i is RoomItemRoller)) { continue; } } RoomUnit user = to.CanUserMoveToTile ? this.Room.RoomGamemapManager.GetTile(item.X, item.Y).UsersOnTile.Values.FirstOrDefault(u => u.Moving == false && !rollerUsers.Contains(u.VirtualID)) : null; if (itemsFrom.Count > 0 || user != null) //we have some work to do { double baseZ = 0; if (higestItem is RoomItemRoller) { baseZ = to.GetZ(true); } else { baseZ = to.ModelZ; } foreach (RoomItem item_ in itemsFrom) { rollerItems.Add(item_.ID); foreach (AffectedTile tile in new HashSet <AffectedTile>(item_.AffectedTiles) { new AffectedTile(item_.X, item_.Y, item_.Rot) }) { this.Room.RoomGamemapManager.GetTile(tile.X, tile.Y).RemoveItemFromTile(item_); } foreach (AffectedTile tile in new HashSet <AffectedTile>(ItemUtilies.AffectedTiles(item_.GetBaseItem().Lenght, item_.GetBaseItem().Width, to.X, to.Y, item_.Rot).Values) { new AffectedTile(to.X, to.Y, item_.Rot) }) { this.Room.RoomGamemapManager.GetTile(tile.X, tile.Y).AddItemToTile(item_); } double oldZ = item_.Z; item_.SetLocation(to.X, to.Y, baseZ + item_.Z - (item.Z + item.GetBaseItem().Height)); this.Room.RoomItemManager.MoveAnimation[item.ID] = new RoomItemRollerMovement(item_.ID, item.X, item.Y, oldZ, item.ID, to.X, to.Y, item_.Z); } if (user != null) { this.Room.UserWalkOff(user); if (user.X == item.X && user.Y == item.Y) //did walkoff prevent this? { rollerUsers.Add(user.VirtualID); double newZ = to.GetZ(true); this.Room.SendToAll(new MultiRevisionServerMessage(OutgoingPacketsEnum.RollerMovement, new ValueHolder("User", new RoomUserRollerMovement(user.VirtualID, item.X, item.Y, user.Z, item.ID, to.X, to.Y, newZ)))); user.SetLocation(to.X, to.Y, newZ, false); user.UpdateUserStateTimer = 2; //update user state somehow respecting the movement packet this.Room.UserWalkOn(user); } } } } } } } if (this.FloorItems.Count > 0) { foreach (RoomItem item in this.FloorItems.Values) { this.Room.ThrowIfRoomCycleCancalled("Cycle floor items", item); //Have room cycle cancalled? item.OnCycle(); } } if (this.WallItems.Count > 0) { foreach (RoomItem item in this.WallItems.Values) { this.Room.ThrowIfRoomCycleCancalled("Cycle wall items", item); //Have room cycle cancalled? item.OnCycle(); } } //AUTO SAVE if (this.Room.LastAutoSave.Elapsed.TotalMinutes >= 5) //Every 5min :) { this.Room.LastAutoSave.Restart(); this.SaveAll(); } }
public void AboutToWalkOn(RoomUnit unit) { this.Room.RoomGamemapManager.GetTile(unit.NextStepX, unit.NextStepY)?.HigestRoomItem?.AboutToWalkOn(unit); }
public virtual void OnWalkOff(RoomUnit user) { }
public override void AboutToWalkOn(RoomUnit user) { if (user.IsRealUser && user is RoomUnitUser user_ && user_.ActiveEffect == 71) //are we even skateboarding?!? { RoomTile lastTile = this.Room.RoomGamemapManager.GetTile(user.X, user.Y); RoomTile nextTile = this.Room.RoomGamemapManager.GetTile(user.NextStepX, user.NextStepY); if (nextTile.HigestRoomItem is RoomItemSkateboardRail) //next tile aka this is skateboard rail.. yeah { if (lastTile.HigestRoomItem is RoomItemSkateboardRail) //if the LAST tile was skateboard rail too { if (nextTile.HigestRoomItem.Rot != lastTile.HigestRoomItem.Rot) //are we performing jump? { if (nextTile.HigestRoomItem.Rot == 0) { if (user.HeadRotation != 0 && user.HeadRotation != 4) { user_.Session.GetHabbo().GetUserStats().SkateboardJumper++; user_.Session.GetHabbo().GetUserAchievements().CheckAchievement("SkateboardJumper"); } else { user_.Session.GetHabbo().GetUserStats().SkateboardSlider++; user_.Session.GetHabbo().GetUserAchievements().CheckAchievement("SkateboardSlider"); } } else if (nextTile.HigestRoomItem.Rot == 2) { if (user.HeadRotation != 2 && user.HeadRotation != 6) { user_.Session.GetHabbo().GetUserStats().SkateboardJumper++; user_.Session.GetHabbo().GetUserAchievements().CheckAchievement("SkateboardJumper"); } else { user_.Session.GetHabbo().GetUserStats().SkateboardSlider++; user_.Session.GetHabbo().GetUserAchievements().CheckAchievement("SkateboardSlider"); } } } else //we are performing slide, its same item rotation as last tile! { if (user.HeadRotation != 2 && user.HeadRotation != 6) { user_.Session.GetHabbo().GetUserStats().SkateboardSlider++; user_.Session.GetHabbo().GetUserAchievements().CheckAchievement("SkateboardSlider"); } } } else { if (nextTile.HigestRoomItem.Rot == 0) { if (user.HeadRotation != 0 && user.HeadRotation != 4) { user_.Session.GetHabbo().GetUserStats().SkateboardJumper++; user_.Session.GetHabbo().GetUserAchievements().CheckAchievement("SkateboardJumper"); } else { user_.Session.GetHabbo().GetUserStats().SkateboardSlider++; user_.Session.GetHabbo().GetUserAchievements().CheckAchievement("SkateboardSlider"); } } else if (nextTile.HigestRoomItem.Rot == 2) { if (user.HeadRotation != 2 && user.HeadRotation != 6) { user_.Session.GetHabbo().GetUserStats().SkateboardJumper++; user_.Session.GetHabbo().GetUserAchievements().CheckAchievement("SkateboardJumper"); } else { user_.Session.GetHabbo().GetUserStats().SkateboardSlider++; user_.Session.GetHabbo().GetUserAchievements().CheckAchievement("SkateboardSlider"); } } } //move user to next tile if (nextTile.HigestRoomItem.Rot == 0) { if (user.HeadRotation == 0) { if (user.TargetX == nextTile.HigestRoomItem.X && user.TargetY == nextTile.HigestRoomItem.Y) { user.MoveTo(nextTile.HigestRoomItem.X, nextTile.HigestRoomItem.Y - 1); } user_.SkateboardRotation = 6; } else if (user.HeadRotation == 4) { if (user.TargetX == nextTile.HigestRoomItem.X && user.TargetY == nextTile.HigestRoomItem.Y) { user.MoveTo(nextTile.HigestRoomItem.X, nextTile.HigestRoomItem.Y + 1); } user_.SkateboardRotation = 2; } else { user_.SkateboardRotation = null; } } else if (nextTile.HigestRoomItem.Rot == 2) { if (user.HeadRotation == 2) { if (user.TargetX == nextTile.HigestRoomItem.X && user.TargetY == nextTile.HigestRoomItem.Y) { user.MoveTo(nextTile.HigestRoomItem.X + 1, nextTile.HigestRoomItem.Y); } user_.SkateboardRotation = 0; } else if (user.HeadRotation == 6) { if (user.TargetX == nextTile.HigestRoomItem.X && user.TargetY == nextTile.HigestRoomItem.Y) { user.MoveTo(nextTile.HigestRoomItem.X - 1, nextTile.HigestRoomItem.Y); } user_.SkateboardRotation = 4; } else { user_.SkateboardRotation = null; } } else { user_.SkateboardRotation = null; } user.NeedUpdate = true; } else { user_.SkateboardRotation = null; } } }
public override void OnWalkOn(RoomUnit user) { this.TileWalkOnLogic(user); }
public override void OnWalkOn(RoomUnit user) { this.Room.RoomGameManager.RoomFootballManager.UserKickFootball(user, this); }
public void UserWalkOff(RoomUnit unit) { this.RoomGamemapManager.UserWalkOff(unit); this.RoomItemManager.UserWalkOff(unit); this.RoomWiredManager.UserWalkOff(unit); }