예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
                            }
                        }
                    }
                }
            }
        }
예제 #3
0
        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;
            }
            }
        }