コード例 #1
0
 public override void OnUse(GameClient session, RoomItem item, int request, bool userHasRights)
 {
     if (session != null)
     {
         RoomUnitUser user = session.GetHabbo().GetRoomSession().GetRoomUser();
         if (user != null)
         {
             if (ThreeDCoord.smethod_0(new ThreeDCoord(user.X, user.Y), new ThreeDCoord(item.X, item.Y)) || ThreeDCoord.smethod_0(new ThreeDCoord(user.X, user.Y), item.TDC))
             {
                 RoomItemTeleport teleport = (RoomItemTeleport)item;
                 if (teleport.Interactor == null && user.Interacting == null)
                 {
                     teleport.Interactor = user;
                     teleport.Way        = 1;
                     user.Interacting    = item;
                 }
             }
             else
             {
                 if (user.Interacting == null)
                 {
                     user.MoveTo(item.TDC.x, item.TDC.y);
                 }
             }
         }
     }
 }
コード例 #2
0
        public override void OnCycle()
        {
            bool open = false;
            bool tele = false;

            if (this.Interactor != null && this.Interactor.Interacting == this)
            {
                if (this.Way == 0) //none
                {
                    this.Interactor.Interacting = null;
                    this.Interactor             = null;
                }
                else if (this.Way == 1) //going in
                {
                    if (ThreeDCoord.smethod_0(new ThreeDCoord(this.Interactor.X, this.Interactor.Y), new ThreeDCoord(this.X, this.Y)))
                    {
                        KeyValuePair <uint, uint> teleDate = TeleHandler.GetTeleDestiny(this.ID);
                        if (teleDate.Key != 0 && teleDate.Value != 0)
                        {
                            tele = true;
                            if (teleDate.Value == this.Room.ID)
                            {
                                RoomItemTeleport item = (RoomItemTeleport)this.Room.RoomItemManager.TryGetRoomItem(teleDate.Key);
                                if (item != null)
                                {
                                    this.Interactor.SetLocation(item.X, item.Y, item.Z);
                                    this.Interactor.SetRotation(item.Rot, true);
                                    this.Interactor.Interacting = item;

                                    this.Interactor.Interacting = item;
                                    item.Interactor             = this.Interactor;
                                    item.Way = 2;
                                }
                                else
                                {
                                    this.Interactor.RestrictMovementType &= ~RestrictMovementType.Client;
                                    this.Interactor.Override              = false;
                                    this.Interactor.Moving = true;
                                    this.Interactor.MoveTo(this.TDC.x, this.TDC.y);
                                }
                            }
                            else
                            {
                                Room room = Skylight.GetGame().GetRoomManager().TryGetAndLoadRoom(teleDate.Value);
                                if (room != null)
                                {
                                    this.Interactor.Session.GetHabbo().GetRoomSession().HandleTeleport(room, teleDate.Key);
                                }
                                else
                                {
                                    this.Interactor.RestrictMovementType &= ~RestrictMovementType.Client;
                                    this.Interactor.Override              = false;
                                    this.Interactor.Moving = true;
                                    this.Interactor.MoveTo(this.TDC.x, this.TDC.y);
                                }
                            }
                        }
                        else
                        {
                            this.Interactor.RestrictMovementType &= RestrictMovementType.Client;
                            this.Interactor.Override              = false;
                            this.Interactor.Moving = true;
                            this.Interactor.MoveTo(this.TDC.x, this.TDC.y);
                        }
                        this.Way = 0;
                    }
                    else
                    {
                        if (ThreeDCoord.smethod_0(new ThreeDCoord(this.Interactor.X, this.Interactor.Y), this.TDC))
                        {
                            open = true;

                            this.Interactor.RestrictMovementType |= RestrictMovementType.Client;
                            this.Interactor.Override              = true;
                            this.Interactor.Moving = true;
                            this.Interactor.MoveTo(this.TDC.x, this.TDC.y);
                        }
                        else
                        {
                            this.Way = 0;
                        }
                    }
                }
                else if (this.Way == 2) //going out
                {
                    if (this.ExtraData == "2")
                    {
                        open = true;

                        this.Interactor.RestrictMovementType &= ~RestrictMovementType.Client;
                        this.Interactor.Override              = false;
                        this.Interactor.MoveTo(this.TDC.x, this.TDC.y);
                        this.Way = 0;
                    }
                    else
                    {
                        tele = true;
                    }
                }
            }
            else
            {
                if (this.Interactor != null)
                {
                    this.Interactor = null;
                }
                this.Way = 0;
            }

            if (open)
            {
                if (this.ExtraData != "1")
                {
                    this.ExtraData = "1";
                    this.UpdateState(false, true);
                }
            }
            else if (tele)
            {
                if (this.ExtraData != "2")
                {
                    this.ExtraData = "2";
                    this.UpdateState(false, true);
                }
            }
            else
            {
                if (this.ExtraData != "0")
                {
                    this.ExtraData = "0";
                    this.UpdateState(false, true);
                }
            }
        }
コード例 #3
0
        //public void UpdateUserStateOnTile(RoomUser user)
        //{
        //    if (user != null)
        //    {
        //        RoomTile tile = user.CurrentTile;
        //        if (tile != null)
        //        {
        //            user.RemoveStatus("sit");
        //            user.RemoveStatus("lay");

        //            if (tile.IsSeat)
        //            {
        //                user.SetLocation(user.X, user.Y, tile.GetZ(false), true, false);

        //                if (tile.HigestRoomItem != null)
        //                {
        //                    user.AddStatus("sit", TextUtilies.DoubleWithDotDecimal(tile.HigestRoomItem.BaseItem.Height));
        //                    user.SetRotation(tile.HigestRoomItem.Rot, true);
        //                }
        //                else
        //                {
        //                    user.AddStatus("sit", TextUtilies.DoubleWithDotDecimal(1.0));
        //                    user.SetRotation(this.Room.RoomGamemapManager.Model.Rotation[user.X, user.Y], true);
        //                }
        //            }
        //            else if (tile.IsBed)
        //            {
        //                user.AddStatus("lay", TextUtilies.DoubleWithDotDecimal(tile.HigestRoomItem.BaseItem.Height));
        //                user.SetLocation(user.X, user.Y, tile.GetZ(false), true, false);
        //                user.SetRotation(tile.HigestRoomItem.Rot, true);
        //            }
        //            else
        //            {
        //                user.SetLocation(user.X, user.Y, tile.GetZ(true), true, false);
        //            }

        //            if (!(user is RoomPet))
        //            {
        //                RoomItem higestRoomItem = tile.HigestRoomItem;
        //                if (higestRoomItem != null)
        //                {
        //                    string gender = user.IsRealUser ? user.GetClient().GetHabbo().Gender : "M";
        //                    int effectId = gender == "M" ? higestRoomItem.GetBaseItem().EffectM : higestRoomItem.GetBaseItem().EffectF;
        //                    if (effectId > 0)
        //                    {
        //                        if (user.ActiveEffect != effectId)
        //                        {
        //                            user.ApplyEffect(effectId);
        //                            user.EffectGaveByItem = effectId;
        //                        }
        //                    }
        //                    else
        //                    {
        //                        if (user.EffectGaveByItem > 0)
        //                        {
        //                            if (user.ActiveEffect != -1)
        //                            {
        //                                user.ApplyEffect(-1);
        //                                user.EffectGaveByItem = -1;
        //                            }
        //                        }
        //                    }
        //                }
        //                else
        //                {
        //                    if (user.EffectGaveByItem > 0)
        //                    {
        //                        if (user.ActiveEffect != -1)
        //                        {
        //                            user.ApplyEffect(-1);
        //                            user.EffectGaveByItem = -1;
        //                        }
        //                    }
        //                }

        //                if (higestRoomItem is RoomItemFootballGate)
        //                {
        //                    RoomItemFootballGate gate = (RoomItemFootballGate)higestRoomItem;

        //                    FigureParts gateFigureParts = new FigureParts(user.IsRealUser ? (user.GetClient().GetHabbo().Gender.ToLower() == "m" ? gate.Data[0] : gate.Data[1]) : gate.Data[0]);
        //                    FigureParts userCurrentFigureParts = new FigureParts(user.IsRealUser ? user.GetClient().GetHabbo().Look : (user as RoomBot).Data.Look);

        //                    bool changedSomething = false;
        //                    foreach (KeyValuePair<string, Dictionary<string, object>> data in gateFigureParts.GetParts())
        //                    {
        //                        bool changePart = false;

        //                        Dictionary<string, object> data_ = userCurrentFigureParts.GetPart(data.Key);
        //                        if (data_ != null)
        //                        {
        //                            if (data_["setid"] != data.Value["setid"])
        //                            {
        //                                changePart = true;
        //                            }
        //                            else
        //                            {
        //                                List<string> userColors = data_["colorids"] as List<string>;
        //                                List<string> gateColors = data.Value["colorids"] as List<string>;
        //                                if (userColors != null && gateColors != null && userColors.Count == gateColors.Count)
        //                                {
        //                                    for(int i = 0; i < userColors.Count; i++)
        //                                    {
        //                                        if (userColors[i] != gateColors[i])
        //                                        {
        //                                            changePart = true;
        //                                            break;
        //                                        }
        //                                    }
        //                                }
        //                                else
        //                                {
        //                                    changePart = true;
        //                                }
        //                            }
        //                        }
        //                        else
        //                        {
        //                            changePart = true;
        //                        }

        //                        if (changePart)
        //                        {
        //                            changedSomething = true;

        //                            userCurrentFigureParts.ReplacePart(data.Value);
        //                        }
        //                    }

        //                    if (!user.FootballGateFigureActive)
        //                    {
        //                        if (changedSomething)
        //                        {
        //                            user.FootballGateFigureActive = true;

        //                            string figure = userCurrentFigureParts.GetPartString();
        //                            if (user.IsRealUser)
        //                            {
        //                                ServerMessage message_ = BasicUtilies.GetRevisionServerMessage(Revision.RELEASE63_35255_34886_201108111108);
        //                                message_.Init(r63aOutgoing.UpdateUser);
        //                                message_.AppendInt32(-1);
        //                                message_.AppendString(figure);
        //                                message_.AppendString(user.GetClient().GetHabbo().Gender.ToLower());
        //                                message_.AppendString(user.GetClient().GetHabbo().Motto);
        //                                message_.AppendInt32(user.GetClient().GetHabbo().GetUserStats().AchievementPoints);
        //                                user.GetClient().SendMessage(message_);
        //                            }

        //                            ServerMessage message_2 = BasicUtilies.GetRevisionServerMessage(Revision.RELEASE63_35255_34886_201108111108);
        //                            message_2.Init(r63aOutgoing.UpdateUser);
        //                            message_2.AppendInt32(user.VirtualID);
        //                            message_2.AppendString(figure);
        //                            message_2.AppendString(user.IsRealUser ? user.GetClient().GetHabbo().Gender.ToLower() : "m");
        //                            message_2.AppendString(user.IsRealUser ? user.GetClient().GetHabbo().Motto : (user as RoomBot).Data.Motto);
        //                            message_2.AppendInt32(0);
        //                            this.Room.SendToAll(message_2);
        //                        }
        //                    }
        //                    else
        //                    {
        //                        if (user.FootballGateFigureActive)
        //                        {
        //                            user.FootballGateFigureActive = false;

        //                            if (user.IsRealUser)
        //                            {
        //                                ServerMessage message_ = BasicUtilies.GetRevisionServerMessage(Revision.RELEASE63_35255_34886_201108111108);
        //                                message_.Init(r63aOutgoing.UpdateUser);
        //                                message_.AppendInt32(-1);
        //                                message_.AppendString(user.GetClient().GetHabbo().Look);
        //                                message_.AppendString(user.GetClient().GetHabbo().Gender.ToLower());
        //                                message_.AppendString(user.GetClient().GetHabbo().Motto);
        //                                message_.AppendInt32(user.GetClient().GetHabbo().GetUserStats().AchievementPoints);
        //                                user.GetClient().SendMessage(message_);
        //                            }

        //                            ServerMessage message_2 = BasicUtilies.GetRevisionServerMessage(Revision.RELEASE63_35255_34886_201108111108);
        //                            message_2.Init(r63aOutgoing.UpdateUser);
        //                            message_2.AppendInt32(user.VirtualID);
        //                            message_2.AppendString(user.IsRealUser ? user.GetClient().GetHabbo().Look : (user as RoomBot).Data.Look);
        //                            message_2.AppendString(user.IsRealUser ? user.GetClient().GetHabbo().Gender.ToLower() : "m");
        //                            message_2.AppendString(user.IsRealUser ? user.GetClient().GetHabbo().Motto : (user as RoomBot).Data.Motto);
        //                            message_2.AppendInt32(0);
        //                            this.Room.SendToAll(message_2);
        //                        }
        //                    }
        //                }
        //            }
        //        }
        //    }
        //}

        public void EnterRoom(GameClient gameClient)
        {
            RoomUnitUser roomUser = new RoomUnitUser(gameClient, this.Room, this.GetNextVirtualID());

            if (roomUser.Session.GetHabbo() != null)
            {
                this.RoomUsers.Add(roomUser.VirtualID, roomUser.GetType(), roomUser);

                if (gameClient.GetHabbo().GetRoomSession().TargetTeleportID == 0)
                {
                    roomUser.SetLocation(this.Room.RoomGamemapManager.Model.DoorX, this.Room.RoomGamemapManager.Model.DoorY, this.Room.RoomGamemapManager.Model.DoorZ);
                    roomUser.SetRotation(this.Room.RoomGamemapManager.Model.DoorDir, true);
                }
                else
                {
                    RoomItemTeleport item = (RoomItemTeleport)this.Room.RoomItemManager.TryGetRoomItem(gameClient.GetHabbo().GetRoomSession().TargetTeleportID);
                    if (item != null)
                    {
                        roomUser.SetLocation(item.X, item.Y, item.Z);
                        roomUser.SetRotation(item.Rot, true);

                        roomUser.Interacting = item;
                        item.Interactor      = roomUser;
                        item.Way             = 2;
                    }
                    else
                    {
                        roomUser.SetLocation(this.Room.RoomGamemapManager.Model.DoorX, this.Room.RoomGamemapManager.Model.DoorY, this.Room.RoomGamemapManager.Model.DoorZ);
                        roomUser.SetRotation(this.Room.RoomGamemapManager.Model.DoorDir, true);
                    }
                }
                gameClient.GetHabbo().GetRoomSession().TargetTeleportID = 0;

                if (this.Room.HaveOwnerRights(gameClient))
                {
                    roomUser.AddStatus("flatctrl", "useradmin");
                }
                else if (this.Room.GaveRoomRights(gameClient))
                {
                    roomUser.AddStatus("flatctrl", "");
                }

                this.Room.SendToAll(new MultiRevisionServerMessage(OutgoingPacketsEnum.SetRoomUser, new ValueHolder().AddValue("RoomUser", new List <RoomUnit>()
                {
                    roomUser
                })));

                roomUser.Session.GetHabbo().GetRoomSession().EnteredRoom(this.Room.ID, roomUser);
                roomUser.Session.GetHabbo().GetMessenger().UpdateAllFriends(false);
                this.Room.UpdateUsersCount();

                gameClient.GetHabbo().GetMessenger().UpdateAllFriends(false);

                if (this.Room.RoomData.OwnerID == gameClient.GetHabbo().ID) //room owner enters
                {
                    if (gameClient.GetHabbo().NewbieStatus != 2)
                    {
                        if (gameClient.GetHabbo().NewbieRoom == this.Room.RoomData.ID)
                        {
                            foreach (RoomUnit user in this.RoomUsers.Values)
                            {
                                if (user is RoomBotNewbieGuide)
                                {
                                    return;
                                }
                            }

                            this.AddNewbieGuideTimer = 10;
                        }
                    }
                }

                gameClient.GetHabbo().GetUserStats().RoomRaider++;
                gameClient.GetHabbo().GetUserAchievements().CheckAchievement("RoomRaider");

                if (this.Room.RoomData.ExtraData.SellRoomPrice != null && this.Room.RoomData.ExtraData.SellRoomPrice.Count > 0)
                {
                    string message = "Looks like this room is on sale for the price of:\n";
                    foreach (KeyValuePair <string, int> price in this.Room.RoomData.ExtraData.SellRoomPrice)
                    {
                        message += price.Key.First().ToString().ToUpper() + price.Key.Substring(1) + " => " + price.Value + "\n";
                    }
                    gameClient.SendNotif(message);
                }

                if (this.Room.RoomData.ExtraData.RoleplayEnabled)
                {
                    gameClient.SendNotif("RP is enabled on this room!");
                }
            }
        }