private static void AddToPlaylist(GameClient Session, ClientMessage Message) { Room Instance = Session.GetHabbo().CurrentRoom; if (Instance == null || !Instance.CheckRights(Session, true) || !Instance.GotMusicController() || Instance.GetRoomMusicController().PlaylistSize >= Instance.GetRoomMusicController().PlaylistCapacity) { return; } UserItem DiskUserItem = Session.GetHabbo().GetInventoryComponent().GetItem(Message.PopWiredUInt()); if (DiskUserItem == null || DiskUserItem.GetBaseItem().InteractionType != InteractionType.musicdisc) { return; } SongItem item = new SongItem(DiskUserItem); int NewOrder = Instance.GetRoomMusicController().AddDisk(item); if (NewOrder < 0) { return; } Session.GetHabbo().GetInventoryComponent().RemoveItem(item.itemID, true); Session.SendMessage(JukeboxComposer.Compose(Instance.GetRoomMusicController().PlaylistCapacity, Instance.GetRoomMusicController().Playlist.Values.ToList())); }
void parser_onNewPacket(ClientMessage Message, int messageID) { try { MessageHandler.HandleRequest(Message, messageID); } catch (Exception e) { Logging.LogPacketException("clap", e.ToString()); } }
internal void HandleRequest(ClientMessage request) { if (ButterflyEnvironment.diagPackets) { DateTime start = DateTime.Now; this.Request = request; StaticClientMessageHandler.HandlePacket(this, request); TimeSpan spent = DateTime.Now - start; if (spent.TotalMilliseconds > ButterflyEnvironment.timeout) { Console.WriteLine("Packet " + request.Id + " took " + spent.Milliseconds + "ms to run. Packetdata: " + request.ToString()); } } else { this.Request = request; StaticClientMessageHandler.HandlePacket(this, request); } //RequestHandler handler; //if (RequestHandlers.TryGetValue(pRequest.Id, out handler)) //{ // //Console.ForegroundColor = ConsoleColor.Green; // //Console.WriteLine(string.Format("Processing packetID => [{0}]", pRequest.Id)); // //DateTime start = DateTime.Now; // handler.Invoke(); // //TimeSpan spent = DateTime.Now - start; // //int msSpent = (int)spent.TotalMilliseconds; // //if (msSpent > timeOut) // //{ // // Logging.LogCriticalException(start.ToString() + " PacketID: " + pRequest.Id + ", total time: " + msSpent); // //} // //Console.WriteLine(string.Format("[{0}] => Invoked [{1} ticks]", pRequest.Id, spent.Ticks)); //} //else //{ // //Console.ForegroundColor = ConsoleColor.Red; //Console.WriteLine(string.Format("Unknown packetID => [{0}] data: [{1}]", pRequest.Id, pRequest.Header)); //} //TimeSpan TimeUsed = DateTime.Now - start; //if (TimeUsed.Milliseconds > 0 || TimeUsed.Seconds > 0) // Console.WriteLine("Total used time: " + TimeUsed.Seconds + "s, " + TimeUsed.Milliseconds + "ms"); }
private static void GetSongData(GameClient Session, ClientMessage Message) { int Amount = Message.ReadInt(); List<SongData> Songs = new List<SongData>(); for (int i = 0; i < Amount; i++) { SongData Song = GetSong(Message.ReadUInt()); if (Song == null) continue; Songs.Add(Song); } //Session.SendMessage(JukeboxComposer.Compose(Songs)); }
internal void HandleRequest(ClientMessage request, int messageID) { //Console.WriteLine("In -> {0}", messageID); if (ButterflyEnvironment.diagPackets) { DateTime start = DateTime.Now; this.Request = request; StaticClientMessageHandler.HandlePacket(this, request, messageID); TimeSpan spent = DateTime.Now - start; if (spent.TotalMilliseconds > ButterflyEnvironment.timeout) { Console.WriteLine("Packet " + messageID + " took " + spent.Milliseconds + "ms to run. Packetdata: " + request.ToString()); } } else { this.Request = request; StaticClientMessageHandler.HandlePacket(this, request, messageID); } }
internal void ActivateQuest(GameClient Session, ClientMessage Message) { Quest Quest = GetQuest(Message.PopWiredUInt()); if (Quest == null) { return; } using (IQueryAdapter dbClient = ButterflyEnvironment.GetDatabaseManager().getQueryreactor()) { if (dbClient.dbType == Database_Manager.Database.DatabaseType.MySQL) dbClient.runFastQuery("REPLACE INTO user_quests VALUES (" + Session.GetHabbo().Id + ", " + Quest.Id + ", 0)"); else dbClient.runFastQuery("IF NOT EXISTS (SELECT user_id FROM user_quests WHERE user_id = " + Session.GetHabbo().Id + " AND quest_id = " + Quest.Id + ") " + "INSERT INTO user_quests VALUES (" + Session.GetHabbo().Id + ", " + Quest.Id + ", 0)"); dbClient.runFastQuery("UPDATE users SET currentquestid = " + Quest.Id + " WHERE id = " + Session.GetHabbo().Id); } Session.GetHabbo().CurrentQuestId = Quest.Id; GetList(Session, null); Session.SendMessage(QuestStartedComposer.Compose(Session, Quest)); }
internal void HandleConnectionData(ref byte[] data) { if (data[0] == 64) { int pos = 0; while (pos < data.Length) { try { int MessageLength = Base64Encoding.DecodeInt32(new byte[] { data[pos++], data[pos++], data[pos++] }); int MessageId = Base64Encoding.DecodeInt32(new byte[] { data[pos++], data[pos++] }); byte[] Content = new byte[MessageLength - 2]; for (int i = 0; i < Content.Length; i++) { Content[i] = data[pos++]; } ClientMessage Message = new ClientMessage(MessageId, Content); if (MessageHandler == null) { InitHandler(); //Never ever register the packets BEFORE you receive any data. } //DateTime PacketMsgStart = DateTime.Now; } catch (Exception e) { Logging.HandleException(e, "packet handling"); Disconnect(); } } } else { Connection.SendData(ButterflyEnvironment.GetDefaultEncoding().GetBytes(CrossdomainPolicy.GetXmlPolicy())); } }
void parser_onNewPacket(ClientMessage Message) { try { MessageHandler.HandleRequest(Message); } catch (Exception e) { Logging.LogPacketException(Message.ToString(), e.ToString()); } }
internal void GetList(GameClient Session, ClientMessage Message) { Session.SendMessage(AchievementListComposer.Compose(Session, Achievements.Values.ToList())); }
private static void RemoveFromPlaylist(GameClient Session, ClientMessage Message) { Room Instance = Session.GetHabbo().CurrentRoom; if (Instance == null || !Instance.GotMusicController() || !Instance.CheckRights(Session, true)) { return; } SongItem TakenItem = Instance.GetRoomMusicController().RemoveDisk(Message.ReadInt()); // playlist will skip to the next item automatically if it has to if (TakenItem == null) { return; } Session.GetHabboDataContainer().GetInventoryComponent().AddNewItem(TakenItem.itemID, TakenItem.baseItem.ItemId, TakenItem.songID.ToString(), true, true); //Session.SendMessage(JukeboxComposer.Compose(Session)); //Session.SendMessage(JukeboxComposer.Compose(Instance.GetRoomMusicController().PlaylistCapacity, // Instance.GetRoomMusicController().Playlist.Values.ToList())); }
private static List<RoomItem> GetItems(ClientMessage message, Room room, out int itemCount) { List<RoomItem> items = new List<RoomItem>(); itemCount = message.PopWiredInt32(); uint itemID; RoomItem item; for (int i = 0; i < itemCount; i++) { itemID = message.PopWiredUInt(); item = room.GetRoomItemHandler().GetItem(itemID); if (item != null && !WiredUtillity.TypeIsWired(item.GetBaseItem().InteractionType)) items.Add(item); } return items; }
internal static void HandleSave(uint itemID, Room room, ClientMessage clientMessage) { RoomItem item = room.GetRoomItemHandler().GetItem(itemID); if (item == null) return; if (item.wiredHandler != null) { item.wiredHandler.Dispose(); item.wiredHandler = null; } InteractionType type = item.GetBaseItem().InteractionType; switch (type) { case InteractionType.actiongivescore: { clientMessage.AdvancePointer(1); int points = clientMessage.PopWiredInt32(); int games = clientMessage.PopWiredInt32(); IWiredTrigger action = new GiveScore(games, points, room.GetGameManager(), itemID); HandleTriggerSave(action, room.GetWiredHandler(), room, itemID); break; } case InteractionType.actionmoverotate: { clientMessage.AdvancePointer(1); MovementState movement = (MovementState)clientMessage.PopWiredInt32(); RotationState rotation = (RotationState)clientMessage.PopWiredInt32(); clientMessage.AdvancePointer(2); int furniCount; List<RoomItem> items = GetItems(clientMessage, room, out furniCount); int delay = clientMessage.PopWiredInt32(); IWiredTrigger action = new MoveRotate(movement, rotation, items, delay, room, room.GetWiredHandler(), itemID); HandleTriggerSave(action, room.GetWiredHandler(), room, itemID); break; } case InteractionType.actionposreset: { clientMessage.AdvancePointer(3); int furniCount; List<RoomItem> items = GetItems(clientMessage, room, out furniCount); int delay = clientMessage.PopWiredInt32(); IWiredTrigger action = new PositionReset(items, delay, room.GetRoomItemHandler(), room.GetWiredHandler(), itemID); HandleTriggerSave(action, room.GetWiredHandler(), room, itemID); break; } case InteractionType.actionresettimer: { clientMessage.AdvancePointer(3); int furniCount; List<RoomItem> items = GetItems(clientMessage, room, out furniCount); int delay = clientMessage.PopWiredInt32(); IWiredTrigger action = new TimerReset(room, room.GetWiredHandler(), items, delay, itemID); HandleTriggerSave(action, room.GetWiredHandler(), room, itemID); break; } case InteractionType.actionshowmessage: { clientMessage.AdvancePointer(1); string message = clientMessage.PopFixedString(); IWiredTrigger action = new ShowMessage(message, room.GetWiredHandler(), itemID); HandleTriggerSave(action, room.GetWiredHandler(), room, itemID); break; } case InteractionType.actionteleportto: { clientMessage.AdvancePointer(3); int furniCount; List<RoomItem> items = GetItems(clientMessage, room, out furniCount); int delay = clientMessage.PopWiredInt32(); IWiredTrigger action = new TeleportToItem(room.GetGameMap(), room.GetWiredHandler(), items, delay, itemID); HandleTriggerSave(action, room.GetWiredHandler(), room, itemID); break; } case InteractionType.actiontogglestate: { clientMessage.AdvancePointer(3); int furniCount; List<RoomItem> items = GetItems(clientMessage, room, out furniCount); int delay = clientMessage.PopWiredInt32(); IWiredTrigger action = new ToggleItemState(room.GetGameMap(), room.GetWiredHandler(), items, delay, itemID); HandleTriggerSave(action, room.GetWiredHandler(), room, itemID); break; } case InteractionType.conditionfurnishaveusers: { clientMessage.AdvancePointer(1); bool a = clientMessage.PopWiredBoolean(); bool b = clientMessage.PopWiredBoolean(); bool c = clientMessage.PopWiredBoolean(); clientMessage.AdvancePointer(2); int furniCount; List<RoomItem> items = GetItems(clientMessage, room, out furniCount); // WTF? //if (a) //{ // int a1 = 2; //} break; } case InteractionType.conditionstatepos: { break; } case InteractionType.conditiontimelessthan: { break; } case InteractionType.conditiontimemorethan: { break; } case InteractionType.conditiontriggeronfurni: { break; } case InteractionType.specialrandom: { break; } case InteractionType.specialunseen: { break; } case InteractionType.triggergameend: { IWiredTrigger handler = new GameEnds(item, room.GetWiredHandler(), room.GetGameManager()); HandleTriggerSave(handler, room.GetWiredHandler(), room, itemID); break; } case InteractionType.triggergamestart: { IWiredTrigger handler = new GameStarts(item, room.GetWiredHandler(), room.GetGameManager()); HandleTriggerSave(handler, room.GetWiredHandler(), room, itemID); break; } case InteractionType.triggeronusersay: { clientMessage.AdvancePointer(1); bool isOnlyOwner = clientMessage.PopWiredBoolean(); clientMessage.AdvancePointer(0); string message = clientMessage.PopFixedString(); string stuff = clientMessage.ToString(); IWiredTrigger handler = new UserSays(item, room.GetWiredHandler(), isOnlyOwner, message, room); HandleTriggerSave(handler, room.GetWiredHandler(), room, itemID); break; } case InteractionType.triggerrepeater: { clientMessage.AdvancePointer(1); int cycleTimes = clientMessage.PopWiredInt32(); IWiredTrigger handler = new Repeater(room.GetWiredHandler(), item, cycleTimes); HandleTriggerSave(handler, room.GetWiredHandler(), room, itemID); break; } case InteractionType.triggerroomenter: { clientMessage.AdvancePointer(1); string users = clientMessage.PopFixedString(); IWiredTrigger handler = new EntersRoom(item, room.GetWiredHandler(), room.GetRoomUserManager(), !string.IsNullOrEmpty(users), users); HandleTriggerSave(handler, room.GetWiredHandler(), room, itemID); break; } case InteractionType.triggerscoreachieved: { clientMessage.AdvancePointer(1); int score = clientMessage.PopWiredInt32(); IWiredTrigger handler = new ScoreAchieved(item, room.GetWiredHandler(), score, room.GetGameManager()); HandleTriggerSave(handler, room.GetWiredHandler(), room, itemID); break; } case InteractionType.triggertimer: { clientMessage.AdvancePointer(1); int cycles = clientMessage.PopWiredInt32(); IWiredTrigger handler = new Timer(item, room.GetWiredHandler(), cycles, room.GetGameManager()); HandleTriggerSave(handler, room.GetWiredHandler(), room, itemID); break; } case InteractionType.triggerstatechanged: { clientMessage.AdvancePointer(3); int furniAmount; List<RoomItem> items = GetItems(clientMessage, room, out furniAmount); int delay = clientMessage.PopWiredInt32(); IWiredTrigger handler = new SateChanged(room.GetWiredHandler(), item, items, delay); HandleTriggerSave(handler, room.GetWiredHandler(), room, itemID); break; } case InteractionType.triggerwalkofffurni: { clientMessage.AdvancePointer(3); int furniAmount; List<RoomItem> items = GetItems(clientMessage, room, out furniAmount); int delay = clientMessage.PopWiredInt32(); IWiredTrigger handler = new WalksOffFurni(item, room.GetWiredHandler(), items, delay); HandleTriggerSave(handler, room.GetWiredHandler(), room, itemID); break; } case InteractionType.triggerwalkonfurni: { clientMessage.AdvancePointer(3); int furniAmount; List<RoomItem> items = GetItems(clientMessage, room, out furniAmount); int delay = clientMessage.PopWiredInt32(); IWiredTrigger handler = new WalksOnFurni(item, room.GetWiredHandler(), items, delay); HandleTriggerSave(handler, room.GetWiredHandler(), room, itemID); break; } } }
private static void GetPlaylist(GameClient Session, ClientMessage Message) { Room Instance = Session.GetHabbo().CurrentRoom; if (Instance == null || !Instance.CheckRights(Session, true)) { return; } //Session.SendMessage(JukeboxComposer.Compose(Instance.GetRoomMusicController().PlaylistCapacity, // Instance.GetRoomMusicController().Playlist.Values.ToList())); }
internal void GetCurrentQuest(GameClient Session, ClientMessage Message) { if (!Session.GetHabbo().InRoom) return; Quest UserQuest = GetQuest(Session.GetHabbo().LastCompleted); Quest NextQuest = GetNextQuestInSeries(UserQuest.Category, UserQuest.Number + 1); if (NextQuest == null) return; using (IQueryAdapter dbClient = ButterflyEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("REPLACE INTO user_quests VALUES (" + Session.GetHabbo().Id + ", " + NextQuest.Id + ", 0)"); dbClient.runFastQuery("UPDATE users SET currentquestid = " + NextQuest.Id + " WHERE id = " + Session.GetHabbo().Id); } Session.GetHabbo().CurrentQuestId = NextQuest.Id; GetList(Session, null); Session.SendMessage(QuestStartedComposer.Compose(Session, NextQuest)); }
private static List<RoomItem> GetItems(ClientMessage message, Room room) { List<RoomItem> items = new List<RoomItem>(); int itemCount = message.ReadInt(); if (itemCount > BaseWiredInteractor.MAX_FURNI_SELECTION) { return items; } uint itemID; RoomItem item; for (int i = 0; i < itemCount; i++) { itemID = message.ReadUInt(); item = room.GetRoomItemHandler().GetItem(itemID); if (item != null /*&& !WiredUtillity.TypeIsWired(item.GetBaseItem().InteractionType)*/) items.Add(item); } return items; }
internal static void HandleConditionSave(uint itemID, Room room, ClientMessage clientMessage) { RoomItem item = room.GetRoomItemHandler().GetItem(itemID); if (item == null) return; if (item.wiredHandler != null) { item.wiredHandler.Dispose(); item.wiredHandler = null; } InteractionType type = item.GetBaseItem().InteractionType; if (type != InteractionType.conditionfurnishaveusers && type != InteractionType.conditionstatepos && type != InteractionType.conditiontimelessthan && type != InteractionType.conditiontimemorethan && type != InteractionType.conditiontriggeronfurni && type != InteractionType.conditionhasfurnionfurni) return; int amountOfBooleanSettings = clientMessage.ReadInt(); if (amountOfBooleanSettings > 3) return; int[] booleans = new int[amountOfBooleanSettings]; for (int i = 0; i < amountOfBooleanSettings; i++) { booleans[i] = clientMessage.ReadInt(); } string someString = clientMessage.ReadString(); List<RoomItem> items = null; if (ConditionPacketBuilder.NeedsFurni(type)) { items = GetItems(clientMessage, room); } else { items = new List<RoomItem>(); } //int furniCount; IWiredCondition handler = null; switch (type) { case InteractionType.conditionfurnishaveusers: { handler = new FurniHasUser(item, items, room.GetWiredHandler()); break; } case InteractionType.conditionstatepos: { handler = new FurniStatePosMatch(item, items, room.GetWiredHandler(), booleans[0] == 1, booleans[1] == 1, booleans[2] == 1); break; } case InteractionType.conditiontimelessthan: { handler = new LessThanTimer(500, room, item, room.GetWiredHandler()); break; } case InteractionType.conditiontimemorethan: { handler = new MoreThanTimer(500, room, item, room.GetWiredHandler()); break; } case InteractionType.conditiontriggeronfurni: { handler = new TriggerUserIsOnFurni(item, items, room.GetWiredHandler()); break; } case InteractionType.conditionhasfurnionfurni: { handler = new FurniHasFurni(item, items, room.GetWiredHandler(), booleans[0] == 1); break; } default: return; } item.wiredCondition = handler; room.GetWiredHandler().conditionHandler.AddOrIgnoreRefferance(item); using (IQueryAdapter dbClient = ButterflyEnvironment.GetDatabaseManager().getQueryreactor()) { WiredSaverHandler.UpdateInDatabase(handler, dbClient); } }
internal void GetCurrentQuest(GameClient Session, ClientMessage Message) { if (!Session.GetHabbo().InRoom) { return; } Quest UserQuest = GetQuest(Session.GetHabbo().LastCompleted); Quest NextQuest = GetNextQuestInSeries(UserQuest.Category, UserQuest.Number + 1); if (NextQuest == null) { return; } using (IQueryAdapter dbClient = ButterflyEnvironment.GetDatabaseManager().getQueryreactor()) { if (dbClient.dbType == Database_Manager.Database.DatabaseType.MySQL) dbClient.runFastQuery("REPLACE INTO user_quests VALUES (" + Session.GetHabbo().Id + ", " + NextQuest.Id + ", 0)"); else dbClient.runFastQuery("IF NOT EXISTS (SELECT user_id FROM user_quests WHERE user_id = " + Session.GetHabbo().Id + " AND quest_id = " + NextQuest.Id + ") " + "INSERT INTO user_quests VALUES (" + Session.GetHabbo().Id + ", " + NextQuest.Id + ", 0)"); dbClient.runFastQuery("UPDATE users SET currentquestid = " + NextQuest.Id + " WHERE id = " + Session.GetHabbo().Id); } Session.GetHabbo().CurrentQuestId = NextQuest.Id; GetList(Session, null); Session.SendMessage(QuestStartedComposer.Compose(Session, NextQuest)); //Session.SendMessage(QuestStartedComposer.Compose(Session, NextQuest)); }
internal void GetList(GameClient Session, ClientMessage Message) { Session.SendMessage(QuestListComposer.Compose(Session, quests.Values.ToList(), (Message != null))); }
internal void ActivateQuest(GameClient Session, ClientMessage Message) { Quest Quest = GetQuest(Message.ReadUInt()); if (Quest == null) return; using (IQueryAdapter dbClient = ButterflyEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("REPLACE INTO user_quests VALUES (" + Session.GetHabbo().Id + ", " + Quest.Id + ", 0)"); dbClient.runFastQuery("UPDATE users SET currentquestid = " + Quest.Id + " WHERE id = " + Session.GetHabbo().Id); } Session.GetHabbo().CurrentQuestId = Quest.Id; GetList(Session, null); Session.SendMessage(QuestStartedComposer.Compose(Session, Quest)); }
private static void GetDisks(GameClient Session, ClientMessage Message) { //Session.SendMessage(JukeboxComposer.Compose(Session)); }
internal void CancelQuest(GameClient Session, ClientMessage Message) { Quest Quest = GetQuest(Session.GetHabbo().CurrentQuestId); if (Quest == null) return; Session.GetHabbo().CurrentQuestId = 0; using (IQueryAdapter dbClient = ButterflyEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("DELETE FROM user_quests WHERE user_id = " + Session.GetHabbo().Id + " AND quest_id = " + Quest.Id); dbClient.runFastQuery("UPDATE users SET currentquestid = " + Session.GetHabbo().CurrentQuestId + " WHERE id = " + Session.GetHabbo().Id); } GetList(Session, null); Session.SendMessage(QuestAbortedComposer.Compose()); }
internal static void HandleConditionSave(uint itemID, Room room, ClientMessage clientMessage) { RoomItem item = room.GetRoomItemHandler().GetItem(itemID); if (item == null) return; if (item.wiredHandler != null) { item.wiredHandler.Dispose(); item.wiredHandler = null; } InteractionType type = item.GetBaseItem().InteractionType; if (type != InteractionType.conditionfurnishaveusers && type != InteractionType.conditionstatepos && type != InteractionType.conditiontimelessthan && type != InteractionType.conditiontimemorethan && type != InteractionType.conditiontriggeronfurni) return; clientMessage.AdvancePointer(1); bool a = clientMessage.PopWiredBoolean(); bool b = clientMessage.PopWiredBoolean(); bool c = clientMessage.PopWiredBoolean(); clientMessage.AdvancePointer(2); int furniCount; List<RoomItem> items = GetItems(clientMessage, room, out furniCount); IWiredCondition handler = null; switch (type) { case InteractionType.conditionfurnishaveusers: { handler = new FurniHasUser(item, items); break; } case InteractionType.conditionstatepos: { handler = new FurniStatePosMatch(item, items); break; } case InteractionType.conditiontimelessthan: { handler = new LessThanTimer(500, room, item); break; } case InteractionType.conditiontimemorethan: { handler = new MoreThanTimer(500, room, item); break; } case InteractionType.conditiontriggeronfurni: { handler = new TriggerUserIsOnFurni(item, items); break; } default: return; } item.wiredCondition = handler; room.GetWiredHandler().conditionHandler.AddOrIgnoreRefferance(item); using (IQueryAdapter dbClient = ButterflyEnvironment.GetDatabaseManager().getQueryreactor()) { handler.SaveToDatabase(dbClient); } }