/// <summary> /// Called when an unit is removed from UnitList dictionary. /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void UnitList_onRemove(object sender, EventArgs args) { try { KeyValuePair <int, RoomUnit> removedPair = (KeyValuePair <int, RoomUnit>)sender; RoomUnit unit = removedPair.Value; RoomUser user = unit as RoomUser; if (user == null) { return; } GameClient session = user.GetClient(); int key = removedPair.Key; //freeIDs[key] = null; // make sure to bring any pets the user might have left List <PetBot> petsToRemove = new List <PetBot>(); foreach (RoomUnit unit2 in UnitList.Values) { RoomAI bot = unit2 as RoomAI; if (bot == null) { continue; } bot.BaseAI.OnUserLeaveRoom(session); PetBot pet = bot as PetBot; if (pet != null && pet.OwnerID == user.ID) { petsToRemove.Add(pet); } } foreach (PetBot toRemove in petsToRemove) { if (user.GetClient() == null || user.GetClient().GetHabbo() == null || user.GetClient().GetHabbo().GetInventoryComponent() == null) { continue; } user.GetClient().GetHabbo().GetInventoryComponent().AddPet(toRemove.PetData); RemoveRoomUnit(toRemove); } } catch (Exception e) { Logging.LogCriticalException(e.ToString()); } }
//internal void AddUnitToRoom(RoomUnit unit) //{ // UnitList.Add(unit.VirtualID, unit); //} internal void AddBotToRoom(RoomAI unit) { unit.VirtualID = primaryPrivateUserID++; unit.BaseAI = new BartenderAI(unit); UnitList.Add(unit.VirtualID, unit); //ServerMessage message = new ServerMessage(Outgoing.PlaceBot); //message.AppendInt32(1); //unit.Serialize(message); //room.SendMessage(message); //TODO }
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 SpyAI(RoomAI unit) : base(unit) { }
internal AIBase(RoomAI unit) { this._unit = unit; }
internal GenericAI(RoomAI unit) : base(unit) { }
internal BartenderAI(RoomAI unit) : base(unit) { _customers = new List<int>(); }
private void UnitList_onAdd(object sender, EventArgs args) { try { KeyValuePair <int, RoomUnit> userPair = (KeyValuePair <int, RoomUnit>)sender; RoomUser user = userPair.Value as RoomUser; if (user == null || user.GetClient() == null || user.GetClient().GetHabbo() == null) { return; } GameClient session = user.GetClient(); if (session == null || session.GetHabbo() == null) { return; } DynamicRoomModel Model = room.GetGameMap().Model; user.SetPos(Model.DoorX, Model.DoorY, Model.DoorZ); user.SetRot(Model.DoorOrientation, false); user.CurrentItemEffect = ItemEffectType.None; if (user.GetClient().GetHabbo().IsTeleporting) { RoomItem Item = room.GetRoomItemHandler().GetItem(user.GetClient().GetHabbo().TeleporterId); if (Item != null) { user.SetPos(Item.GetX, Item.GetY, Item.GetZ); user.SetRot(Item.Rot, false); Item.InteractingUser2 = session.GetHabbo().Id; ((StringData)Item.data).Data = "2"; Item.UpdateState(false, true); } } user.GetClient().GetHabbo().IsTeleporting = false; user.GetClient().GetHabbo().TeleporterId = 0; ServerMessage EnterMessage = new ServerMessage(Outgoing.SetRoomUser); EnterMessage.AppendInt32(1); user.Serialize(EnterMessage); room.SendMessage(EnterMessage); if (room.Owner != session.GetHabbo().Username) { FirewindEnvironment.GetGame().GetQuestManager().ProgressUserQuest(user.GetClient(), HabboHotel.Quests.QuestType.SOCIAL_VISIT); } if (session.GetHabbo().GetMessenger() != null) { session.GetHabbo().GetMessenger().OnStatusChanged(true); } foreach (RoomUnit unit in UnitList.Values) { RoomAI ai = unit as RoomAI; if (ai == null) { continue; } ai.BaseAI.OnUserEnterRoom(user); } user.GetClient().GetMessageHandler().OnRoomUserAdd(); if (OnUserEnter != null) { OnUserEnter(user, null); } if (room.GotMusicController()) { room.GetRoomMusicController().OnNewUserEnter(user); } } catch (Exception e) { Logging.LogCriticalException(e.ToString()); } }
internal PetAI(RoomAI unit) : base(unit) { }
internal BartenderAI(RoomAI unit) : base(unit) { _customers = new List <int>(); }