internal void onTeleportRoomUserEnter(RoomUser User, RoomItem Item) { IEnumerable<RoomItem> items = banzaiTeleports.Inner.Values.Where(p => p.Id != Item.Id); int count = items.Count(); int countID = rnd.Next(0, count); int countAmount = 0; if (count == 0) return; foreach (RoomItem item in items) { if (item == null) continue; if (countAmount == countID) { //room.GetGameMap().GameMap[User.X, User.Y] = User.SqState; //room.GetGameMap().UpdateUserMovement(new Point(User.Coordinate.X, User.Coordinate.Y), new Point(item.Coordinate.X, item.Coordinate.Y), User); //User.X = item.GetX; //User.Y = item.GetY; //User.Z = item.GetZ; //User.SqState = room.GetGameMap().GameMap[User.X, User.X]; //room.GetGameMap().GameMap[User.X, User.X] = 1; //User.RotBody = item.Rot; //User.RotHead = item.Rot; room.GetGameMap().TeleportToItem(User, item); ((StringData)item.data).Data = "1"; item.UpdateNeeded = true; ((StringData)Item.data).Data = "1"; Item.UpdateNeeded = true; item.UpdateState(); Item.UpdateState(); } countAmount++; } }
internal void TeleportToItem(RoomUser user, RoomItem item) { Map[user.X, user.Y] = user.SqState; UpdateUnitMovement(new Point(user.Coordinate.X, user.Coordinate.Y), new Point(item.Coordinate.X, item.Coordinate.Y), user); user.X = item.GetX; user.Y = item.GetY; user.Z = item.GetZ; if (user.IsFlying) user.Z += 4 + 0.5 * Math.Sin(0.7 * user.FlyCounter); user.SqState = Map[item.GetX, item.GetY]; Map[user.X, user.Y] = 1; user.RotBody = item.Rot; user.RotHead = item.Rot; user.GoalX = user.X; user.GoalY = user.Y; user.SetStep = false; user.IsWalking = false; user.UpdateNeeded = true; }
internal void OnUserWalk(RoomUser user) { if (user == null) return; foreach (RoomItem item in pucks.Values) { int differenceX = user.X - item.GetX; int differenceY = user.Y - item.GetY; if (differenceX <= 1 && differenceX >= -1 && differenceY <= 1 && differenceY >= -1) { int NewX = differenceX * -1; int NewY = differenceY * -1; NewX = NewX + item.GetX; NewY = NewY + item.GetY; if (item.interactingBallUser == user.ID && room.GetGameMap().ValidTile(NewX, NewY)) { item.interactingBallUser = 0; MovePuck(item, user.GetClient(), user.Coordinate, item.Coordinate, 6, user.Team); } else if (room.GetGameMap().ValidTile(NewX, NewY)) { MovePuck(item, user.GetClient(), NewX, NewY, user.Team); } } } if (banzaiStarted) { HandleBanzaiTiles(user.Coordinate, user.Team, user); } }
private void FreezeUser(RoomUser user) { if (user.shieldActive || user.Team == Team.none) return; if (user.Freezed) { user.Freezed = false; user.ApplyEffect((int)user.Team + 39); return; } user.Freezed = true; user.FreezeCounter = 0; user.FreezeLives--; if (user.FreezeLives <= 0) { ServerMessage message2 = new ServerMessage(); message2.Init(Outgoing.UpdateFreezeLives); message2.AppendInt32(user.VirtualID); message2.AppendInt32(user.FreezeLives); user.GetClient().SendMessage(message2); user.ApplyEffect(-1); room.GetGameManager().AddPointToTeam(user.Team, -20, user); TeamManager t = room.GetTeamManagerForFreeze(); t.OnUserLeave(user); user.Team = Team.none; if (exitTeleport != null) room.GetGameMap().TeleportToItem(user, exitTeleport); user.Freezed = false; user.SetStep = false; user.IsWalking = false; user.UpdateNeeded = true; if (t.BlueTeam.Count <= 0 && t.RedTeam.Count <= 0 && t.GreenTeam.Count <= 0 && t.YellowTeam.Count > 0) this.StopGame(); // yellow team win else if (t.BlueTeam.Count > 0 && t.RedTeam.Count <= 0 && t.GreenTeam.Count <= 0 && t.YellowTeam.Count <= 0) this.StopGame(); // blue team win else if (t.BlueTeam.Count <= 0 && t.RedTeam.Count > 0 && t.GreenTeam.Count <= 0 && t.YellowTeam.Count <= 0) this.StopGame(); // red team win else if (t.BlueTeam.Count <= 0 && t.RedTeam.Count <= 0 && t.GreenTeam.Count > 0 && t.YellowTeam.Count <= 0) this.StopGame(); // green team win return; } room.GetGameManager().AddPointToTeam(user.Team, -10, user); user.ApplyEffect(12); ServerMessage message = new ServerMessage(); message.Init(Outgoing.UpdateFreezeLives); message.AppendInt32(user.VirtualID); message.AppendInt32(user.FreezeLives); user.GetClient().SendMessage(message); }
private static void ExitGame(RoomUser user) { user.Team = Team.none; }
internal void OnUserWalk(RoomUser user) { if (!gameStarted || user.Team == Team.none) return; if (user.X == user.GoalX && user.GoalY == user.Y && user.throwBallAtGoal) { foreach (RoomItem item in freezeTiles.Values) { if (item.interactionCountHelper == 0) { if (item.GetX == user.X && item.GetY == user.Y) { item.interactionCountHelper = 1; ((StringData)item.data).Data = "1000"; item.UpdateState(); item.InteractingUser = user.ID; item.freezePowerUp = user.banzaiPowerUp; item.ReqUpdate(4, true); switch (user.banzaiPowerUp) { case FreezePowerUp.GreenArrow: case FreezePowerUp.OrangeSnowball: { user.banzaiPowerUp = FreezePowerUp.None; break; } } break; } } } } foreach (RoomItem item in freezeBlocks.Values) { if (user.X == item.GetX && user.Y == item.GetY) { if (item.freezePowerUp != FreezePowerUp.None) { PickUpPowerUp(item, user); } } } }
internal void TryStartTrade(RoomUser UserOne, RoomUser UserTwo) { if (UserOne == null || UserTwo == null || UserOne.IsTrading || UserTwo.IsTrading || HasActiveTrade(UserOne) || HasActiveTrade(UserTwo)) return; ActiveTrades.Add(new Trade(UserOne.GetClient().GetHabbo().Id, UserTwo.GetClient().GetHabbo().Id, RoomId)); }
internal bool HasActiveTrade(RoomUser User) { return HasActiveTrade(User.GetClient().GetHabbo().Id); }
//internal RoomUser DeployBot(RoomAI Bot) //{ // RoomUser BotUser = new RoomUser(0, room.RoomId, primaryPrivateUserID++, room, false); // int PersonalID = secondaryPrivateUserID++; // BotUser.InternalRoomID = PersonalID; // //this.UserList[PersonalID] = BotUser; // userlist.Add(PersonalID, BotUser); // DynamicRoomModel Model = room.GetGameMap().Model; // if ((Bot.X > 0 && Bot.Y > 0) && Bot.X < Model.MapSizeX && Bot.Y < Model.MapSizeY) // { // BotUser.SetPos(Bot.X, Bot.Y, Bot.Z); // BotUser.SetRot(Bot.Rot, false); // } // else // { // Bot.X = Model.DoorX; // Bot.Y = Model.DoorY; // BotUser.SetPos(Model.DoorX, Model.DoorY, Model.DoorZ); // BotUser.SetRot(Model.DoorOrientation, false); // } // BotUser.BotData = Bot; // BotUser.BotAI = Bot.GenerateBotAI(BotUser.VirtualId); // if (BotUser.IsPet) // { // BotUser.BotAI.Init((int)Bot.BotId, BotUser.VirtualId, room.RoomId, BotUser, room); // BotUser.PetData = PetData; // BotUser.PetData.VirtualId = BotUser.VirtualId; // } // else // { // BotUser.BotAI.Init(-1, BotUser.VirtualId, room.RoomId, BotUser, room); // } // UpdateUserStatus(BotUser, false); // BotUser.UpdateNeeded = true; // ServerMessage EnterMessage = new ServerMessage(Outgoing.PlaceBot); // EnterMessage.AppendInt32(1); // BotUser.Serialize(EnterMessage); // room.SendMessage(EnterMessage); // BotUser.BotAI.OnSelfEnterRoom(); // if (BotUser.BotData.AiType == AIType.Guide) // room.guideBotIsCalled = true; // if (BotUser.IsPet) // { // if (pets.ContainsKey(BotUser.PetData.PetId)) //Pet allready placed // pets[BotUser.PetData.PetId] = BotUser; // else // pets.Add(BotUser.PetData.PetId, BotUser); // petCount++; // } // return BotUser; //} //internal void RemoveBot(int VirtualId, bool Kicked) //{ // RoomUser User = GetRoomUserByVirtualId(VirtualId); // if (User == null || !User.IsBot) // { // return; // } // if (User.IsPet) // { // pets.Remove(User.PetData.PetId); // petCount--; // } // User.BotAI.OnSelfLeaveRoom(Kicked); // ServerMessage LeaveMessage = new ServerMessage(Outgoing.UserLeftRoom); // LeaveMessage.AppendRawInt32(User.VirtualId); // room.SendMessage(LeaveMessage); // userlist.Remove(User.InternalRoomID); // //freeIDs[User.InternalRoomID] = null; //} private void UpdateUserEffect(RoomUser User, int x, int y) { byte NewCurrentUserItemEffect = room.GetGameMap().EffectMap[x, y]; if (NewCurrentUserItemEffect > 0) { ItemEffectType Type = ByteToItemEffectEnum.Parse(NewCurrentUserItemEffect); if (Type != User.CurrentItemEffect) { switch (Type) { case ItemEffectType.Iceskates: { if (User.GetClient().GetHabbo().Gender == "M") User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent().ApplyCustomEffect(38); else User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent().ApplyCustomEffect(39); User.CurrentItemEffect = ItemEffectType.Iceskates; break; } case ItemEffectType.Normalskates: { if (User.GetClient().GetHabbo().Gender == "M") { User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent().ApplyCustomEffect(55); } else { User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent().ApplyCustomEffect(56); } //56=girls //55= User.CurrentItemEffect = Type; break; } case ItemEffectType.Swim: { User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent().ApplyCustomEffect(29); User.CurrentItemEffect = Type; break; } case ItemEffectType.SwimLow: { User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent().ApplyCustomEffect(30); User.CurrentItemEffect = Type; break; } case ItemEffectType.SwimHalloween: { User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent().ApplyCustomEffect(37); User.CurrentItemEffect = Type; break; } case ItemEffectType.None: { User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent().ApplyCustomEffect(-1); User.CurrentItemEffect = Type; break; } case ItemEffectType.PublicPool: { User.AddStatus("swim", string.Empty); User.CurrentItemEffect = Type; break; } } } } else if (User.CurrentItemEffect != ItemEffectType.None && NewCurrentUserItemEffect == 0) { User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent().ApplyEffect(-1); User.CurrentItemEffect = ItemEffectType.None; User.RemoveStatus("swim"); } }
internal void AddUserToRoom(GameClient Session) { RoomUser User = new RoomUser(primaryPrivateUserID++, Session, room); Users.Habbo loadingHabbo = User.GetClient().GetHabbo(); if (loadingHabbo.spamProtectionBol == true) { TimeSpan SinceLastMessage = DateTime.Now - loadingHabbo.spamFloodTime; if (SinceLastMessage.TotalSeconds < loadingHabbo.spamProtectionTime) { ServerMessage Packet = new ServerMessage(Outgoing.FloodFilter); int timeToWait = loadingHabbo.spamProtectionTime - SinceLastMessage.Seconds; Packet.AppendInt32(timeToWait); //Blocked for X sec User.GetClient().SendMessage(Packet); } } User.ID = (int)Session.GetHabbo().Id; string username = Session.GetHabbo().Username; uint userID = (uint)User.ID; if (usersByUserID.ContainsKey(userID)) usersByUserID.Remove(userID); usersByUserID.Add(Session.GetHabbo().Id, User); Session.CurrentRoomUserID = User.VirtualID; Session.GetHabbo().CurrentRoomId = room.RoomId; UnitList.Add(User.VirtualID, User); }
internal void AddPointToTeam(Team team, int points, RoomUser user) { int newPoints = TeamPoints[(int)team] += points; if (newPoints < 0) newPoints = 0; TeamPoints[(int)team] = newPoints; if (OnScoreChanged != null) OnScoreChanged(null, new TeamScoreChangedArgs(newPoints, team, user)); foreach (RoomItem item in GetFurniItems(team).Values) { if (!isSoccerGoal(item.GetBaseItem().InteractionType)) { ((StringData)item.data).Data = TeamPoints[(int)team].ToString(); item.UpdateState(); } } }
internal void AddPointToTeam(Team team, RoomUser user) { AddPointToTeam(team, 1, user); }
private void SetTile(RoomItem item, Team team, RoomUser user) { if (item.team == team) { if (item.value < 3) { item.value++; if (item.value == 3) { room.GetGameManager().AddPointToTeam(item.team, user); field.updateLocation(item.GetX, item.GetY, (byte)team); List<PointField> gfield = field.doUpdate(); Team t; foreach (PointField gameField in gfield) { t = (Team)gameField.forValue; foreach (Point p in gameField.getPoints()) { HandleMaxBanzaiTiles(new Point(p.X, p.Y), t, user); floorMap[p.Y, p.X] = gameField.forValue; } } } } } else { if (item.value < 3) { item.team = team; item.value = 1; } } int newColor = item.value + ((int)item.team * 3) - 1; ((StringData)item.data).Data = newColor.ToString(); }
private void HandleMaxBanzaiTiles(Point coord, Team team, RoomUser user) { if (team == Team.none) return; List<RoomItem> items = room.GetGameMap().GetCoordinatedItems(coord); int i = 0; foreach (RoomItem _item in banzaiTiles.Values) { if (_item.GetBaseItem().InteractionType != InteractionType.banzaifloor) continue; if (_item.GetX != coord.X || _item.GetY != coord.Y) continue; SetMaxForTile(_item, team); room.GetGameManager().AddPointToTeam(team, user); _item.UpdateState(false, true); } }
private void HandleBanzaiTiles(Point coord, Team team, RoomUser user) { if (team == Team.none) return; List<RoomItem> items = room.GetGameMap().GetCoordinatedItems(coord); int i = 0; foreach (RoomItem _item in banzaiTiles.Values) { if (_item.GetBaseItem().InteractionType != InteractionType.banzaifloor) continue; if (((StringData)_item.data).Data.Equals("5") || ((StringData)_item.data).Data.Equals("8") || ((StringData)_item.data).Data.Equals("11") || ((StringData)_item.data).Data.Equals("14")) { i++; continue; } if (_item.GetX != coord.X || _item.GetY != coord.Y) continue; SetTile(_item, team, user); if (((StringData)_item.data).Data.Equals("5") || ((StringData)_item.data).Data.Equals("8") || ((StringData)_item.data).Data.Equals("11") || ((StringData)_item.data).Data.Equals("14")) i++; _item.UpdateState(false, true); } if (i == banzaiTiles.Count) this.BanzaiEnd(); }
private bool isValid(RoomUser user) { if (user.GetClient() == null) return false; if (user.GetClient().GetHabbo() == null) return false; if (user.GetClient().GetHabbo().CurrentRoomId != room.RoomId) return false; return true; }
internal bool AllowsShous(RoomUser user, string message) { bool cycled = false; if (OnUserSays != null) OnUserSays(null, new UserSaysArgs(user, message), out cycled); return !cycled; }
internal void OnNewUserEnter(RoomUser user) { if (user.GetClient() == null || mSong == null) return; user.GetClient().SendMessage(JukeboxComposer.ComposePlayingComposer(mSong.SongData.Id, mSongQueuePosition, SongSyncTimestamp)); }
internal void OnUserSay(RoomUser User, string Message, bool Shout) { foreach (RoomUnit unit in roomUserManager.UnitList.Values) { RoomAI bot = unit as RoomAI; if (bot == null) continue; bot.BaseAI.OnUserChat(User, Message, Shout); } }
internal void OnUserWalk(RoomUser User) { if (User == null) return; foreach (RoomItem item in balls.Values) { int differenceX = User.X - item.GetX; int differenceY = User.Y - item.GetY; if (differenceX <= 1 && differenceX >= -1 && differenceY <= 1 && differenceY >= -1) { int NewX = differenceX * -1; int NewY = differenceY * -1; NewX = NewX + item.GetX; NewY = NewY + item.GetY; if (item.GetX == User.X && item.GetY == User.Y) { NewX = NewX * 2; NewY = NewY * 2; } if (item.interactingBallUser == User.ID && item.GetRoom().GetGameMap().ValidTile(NewX, NewY)) { item.interactingBallUser = 0; item.interactionCountHelper = 0; MoveBall(item, User.GetClient(), User.Coordinate, item.Coordinate, 6); } else if (item.GetRoom().GetGameMap().ValidTile(NewX, NewY)) { if (item.interactionCountHelper == 0) { MoveBall(item, User.GetClient(), User.Coordinate, item.Coordinate, new Random().Next(0, 6)); item.interactionCountHelper++; } else MoveBall(item, User.GetClient(), NewX, NewY); } } } }
internal void CycleUser(RoomUser user) { if (user.Freezed) { user.FreezeCounter++; if (user.FreezeCounter > 10) { user.Freezed = false; user.FreezeCounter = 0; //user.ApplyEffect((int)user.Team + 39); ActivateShield(user); } } if (user.shieldActive) { user.shieldCounter++; if (user.shieldCounter > 10) { user.shieldActive = false; user.shieldCounter = 10; user.ApplyEffect((int)user.Team + 39); } } }
private void HandleFootballGameItems(Point ballItemCoord, RoomUser user) { if (user.Team == Team.none) return; foreach (RoomItem item in room.GetGameManager().GetItems(Team.red).Values) { foreach (ThreeDCoord tile in item.GetAffectedTiles.Values) { if (tile.X == ballItemCoord.X && tile.Y == ballItemCoord.Y) { room.GetGameManager().AddPointToTeam(user.Team, user); return; } } } foreach (RoomItem item in room.GetGameManager().GetItems(Team.green).Values) { foreach (ThreeDCoord tile in item.GetAffectedTiles.Values) { if (tile.X == ballItemCoord.X && tile.Y == ballItemCoord.Y) { room.GetGameManager().AddPointToTeam(user.Team, user); return; } } } foreach (RoomItem item in room.GetGameManager().GetItems(Team.blue).Values) { foreach (ThreeDCoord tile in item.GetAffectedTiles.Values) { if (tile.X == ballItemCoord.X && tile.Y == ballItemCoord.Y) { room.GetGameManager().AddPointToTeam(user.Team, user); return; } } } foreach (RoomItem item in room.GetGameManager().GetItems(Team.yellow).Values) { foreach (ThreeDCoord tile in item.GetAffectedTiles.Values) { if (tile.X == ballItemCoord.X && tile.Y == ballItemCoord.Y) { room.GetGameManager().AddPointToTeam(user.Team, user); return; } } } }
private static void ActivateShield(RoomUser user) { user.ApplyEffect((int)user.Team + 48); user.shieldActive = true; user.shieldCounter = 0; }
public TeamScoreChangedArgs(int points, Team team, RoomUser user) { this.Points = points; this.Team = team; this.user = user; }
private static void RemoveUserFromTeam(RoomUser user) { user.Team = Team.none; user.ApplyEffect(-1); }
public UserSaysArgs(RoomUser user, string message) { this.user = user; this.message = message; }
private void PickUpPowerUp(RoomItem item, RoomUser user) { switch (item.freezePowerUp) { case FreezePowerUp.Heart: { if (user.FreezeLives < 3) { user.FreezeLives++; room.GetGameManager().AddPointToTeam(user.Team, 10, user); } ServerMessage message = new ServerMessage(); message.Init(Outgoing.UpdateFreezeLives); message.AppendInt32(user.VirtualID); message.AppendInt32(user.FreezeLives); user.GetClient().SendMessage(message); break; } case FreezePowerUp.Shield: { ActivateShield(user); break; } case FreezePowerUp.BlueArrow: case FreezePowerUp.GreenArrow: case FreezePowerUp.OrangeSnowball: { user.banzaiPowerUp = item.freezePowerUp; break; } } item.freezePowerUp = FreezePowerUp.None; ((StringData)item.data).Data = "1" + ((StringData)item.data).Data; item.UpdateState(false, true); }
public void AddUser(RoomUser user) { //Logging.WriteLine("Add user to team! (" + Game + ")"); if (user.Team.Equals(Team.blue)) this.BlueTeam.Add(user); else if (user.Team.Equals(Team.red)) this.RedTeam.Add(user); else if (user.Team.Equals(Team.yellow)) this.YellowTeam.Add(user); else if (user.Team.Equals(Team.green)) this.GreenTeam.Add(user); switch (Game.ToLower()) { case "banzai": { Room room = user.GetClient().GetHabbo().CurrentRoom; foreach (RoomItem Item in room.GetRoomItemHandler().mFloorItems.Values) { if (Item.GetBaseItem().InteractionType.Equals(InteractionType.banzaigateblue)) { ((StringData)Item.data).Data = BlueTeam.Count.ToString(); Item.UpdateState(); } else if (Item.GetBaseItem().InteractionType.Equals(InteractionType.banzaigatered)) { ((StringData)Item.data).Data = RedTeam.Count.ToString(); Item.UpdateState(); } else if (Item.GetBaseItem().InteractionType.Equals(InteractionType.banzaigategreen)) { ((StringData)Item.data).Data = GreenTeam.Count.ToString(); Item.UpdateState(); } else if (Item.GetBaseItem().InteractionType.Equals(InteractionType.banzaigateyellow)) { ((StringData)Item.data).Data = YellowTeam.Count.ToString(); Item.UpdateState(); } } break; } case "freeze": { Room room = user.GetClient().GetHabbo().CurrentRoom; foreach (RoomItem Item in room.GetRoomItemHandler().mFloorItems.Values) { if (Item.GetBaseItem().InteractionType.Equals(InteractionType.freezebluegate)) { ((StringData)Item.data).Data = BlueTeam.Count.ToString(); Item.UpdateState(); } else if (Item.GetBaseItem().InteractionType.Equals(InteractionType.freezeredgate)) { ((StringData)Item.data).Data = RedTeam.Count.ToString(); Item.UpdateState(); } else if (Item.GetBaseItem().InteractionType.Equals(InteractionType.freezegreengate)) { ((StringData)Item.data).Data = GreenTeam.Count.ToString(); Item.UpdateState(); } else if (Item.GetBaseItem().InteractionType.Equals(InteractionType.freezeyellowgate)) { ((StringData)Item.data).Data = YellowTeam.Count.ToString(); Item.UpdateState(); } } break; } } }