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.ReadBoolean(); bool b = clientMessage.ReadBoolean(); bool c = clientMessage.ReadBoolean(); 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 = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { handler.SaveToDatabase(dbClient); } }
public void Handle(GameClient Session, ClientMessage Event) { Room @class = GoldTree.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId); if (@class != null && @class.CheckRights(Session, true)) { Event.PopWiredInt32(); string text = GoldTree.FilterString(Event.PopFixedString()); string text2 = GoldTree.FilterString(Event.PopFixedString()); if (text2.Length > 255) { text2 = text2.Substring(0, 255); } int num = Event.PopWiredInt32(); string text3 = GoldTree.FilterString(Event.PopFixedString()); int num2 = Event.PopWiredInt32(); int num3 = Event.PopWiredInt32(); int num4 = Event.PopWiredInt32(); List <string> list = new List <string>(); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < num4; i++) { if (i > 0) { stringBuilder.Append(","); } string text4 = GoldTree.FilterString(Event.PopFixedString().ToLower()); if (text4 == ChatCommandHandler.smethod_4(text4)) { list.Add(text4); stringBuilder.Append(text4); } } if (stringBuilder.Length > 100) { stringBuilder.Clear(); stringBuilder.Append(""); } int num5 = 0; int num6 = 0; int num7 = 0; int num8 = 0; string a = Event.PlainReadBytes(1)[0].ToString(); Event.AdvancePointer(1); string a2 = Event.PlainReadBytes(1)[0].ToString(); Event.AdvancePointer(1); string a3 = Event.PlainReadBytes(1)[0].ToString(); Event.AdvancePointer(1); string a4 = Event.PlainReadBytes(1)[0].ToString(); Event.AdvancePointer(1); int num9 = Event.PopWiredInt32(); int num10 = Event.PopWiredInt32(); if (!(text != ChatCommandHandler.smethod_4(text)) && !(text2 != ChatCommandHandler.smethod_4(text2)) && text.Length >= 1 && (num9 >= -2 && num9 <= 1 && num10 >= -2 && num10 <= 1)) { @class.Wallthick = num9; @class.Floorthick = num10; if (num >= 0 && num <= 2 && (num2 == 10 || num2 == 15 || num2 == 20 || num2 == 25 || num2 == 30 || num2 == 35 || num2 == 40 || num2 == 45 || num2 == 50 || num2 == 55 || num2 == 60 || num2 == 65 || num2 == 70 || num2 == 75 || num2 == 80 || num2 == 85 || num2 == 90 || num2 == 95 || num2 == 100)) { FlatCat class2 = GoldTree.GetGame().GetNavigator().method_2(num3); if (class2 != null) { if ((long)class2.MinRank > (long)((ulong)Session.GetHabbo().Rank)) { Session.SendNotification("You are not allowed to use this category. Your room has been moved to no category instead."); num3 = 0; } if (num4 <= 2) { if (a == "65") { num5 = 1; @class.AllowPet = true; } else { @class.AllowPet = false; } if (a2 == "65") { num6 = 1; @class.AllowPetsEating = true; } else { @class.AllowPetsEating = false; } if (a3 == "65") { num7 = 1; @class.AllowWalkthrough = true; } else { @class.AllowWalkthrough = false; } @class.method_22(); if (a4 == "65") { num8 = 1; @class.Hidewall = true; } else { @class.Hidewall = false; } @class.Name = text; @class.State = num; @class.Description = text2; @class.Category = num3; if (text3 != "") { @class.Password = text3; } @class.Tags = list; @class.UsersMax = num2; string text5 = "open"; if (@class.State == 1) { text5 = "locked"; } else { if (@class.State > 1) { text5 = "password"; } } using (DatabaseClient class3 = GoldTree.GetDatabase().GetClient()) { class3.AddParamWithValue("caption", @class.Name); class3.AddParamWithValue("description", @class.Description); class3.AddParamWithValue("password", @class.Password); class3.AddParamWithValue("tags", stringBuilder.ToString()); class3.ExecuteQuery(string.Concat(new object[] { "UPDATE rooms SET caption = @caption, description = @description, password = @password, category = '", num3, "', state = '", text5, "', tags = @tags, users_max = '", num2, "', allow_pets = '", num5, "', allow_pets_eat = '", num6, "', allow_walkthrough = '", num7, "', allow_hidewall = '", num8, "', wallthick = '", num9, "', floorthick = '", num10, "' WHERE Id = '", @class.Id, "' LIMIT 1;" })); } ServerMessage Message = new ServerMessage(467u); Message.AppendUInt(@class.Id); Session.SendMessage(Message); ServerMessage Message2 = new ServerMessage(456u); Message2.AppendUInt(@class.Id); Session.SendMessage(Message2); ServerMessage Message3 = new ServerMessage(472u); Message3.AppendBoolean(@class.Hidewall); Message3.AppendInt32(@class.Wallthick); Message3.AppendInt32(@class.Floorthick); @class.SendMessage(Message3, null); ServerMessage Message4 = new ServerMessage(473u); Message4.AppendBoolean(true); Message4.AppendBoolean(true); @class.SendMessage(Message4, null); RoomData class27_ = @class.RoomData; ServerMessage Message5 = new ServerMessage(454u); Message5.AppendBoolean(false); class27_.method_3(Message5, false, false); Session.SendMessage(Message5); } } } } } }
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; } } }