Beispiel #1
0
        private void Cac(RoomUser Bot, Room Room, RoomUser User)
        {
            int Dmg = ButterflyEnvironment.GetRandomNumber(this.WeaponCac.DmgMin, this.WeaponCac.DmgMax);

            if (!User.IsBot)
            {
                RolePlayer Rp = User.Roleplayer;
                if (Rp != null)
                {
                    Rp.Hit(User, Dmg, Room);
                }
            }
            else
            {
                if (User.BotData.RoleBot != null)
                {
                    User.BotData.RoleBot.Hit(User, Dmg, Room, Bot.VirtualId, User.BotData.RoleBot.Config.TeamId);
                }
            }

            int WeaponEanble = this.WeaponCac.Enable;

            Bot.ApplyEffect(WeaponEanble, true);
            Bot.TimerResetEffect = this.WeaponCac.FreezeTime + 1;

            if (Bot.FreezeEndCounter <= this.WeaponCac.FreezeTime + 1)
            {
                Bot.Freeze           = true;
                Bot.FreezeEndCounter = this.WeaponCac.FreezeTime + 1;
            }
        }
Beispiel #2
0
        private void CloseTrade(RPTroc Troc)
        {
            RolePlayerManager RPManager = ButterflyEnvironment.GetGame().GetRoleplayManager().GetRolePlay(Troc.RPId);

            if (RPManager == null)
            {
                return;
            }

            RolePlayer PlayerOne = RPManager.GetPlayer(Troc.UserOne.UserId);

            if (PlayerOne != null)
            {
                PlayerOne.TradeId = 0;
                PlayerOne.SendWebPacket(new RpTrocStopComposer());
            }

            RolePlayer PlayerTwo = RPManager.GetPlayer(Troc.UserTwo.UserId);

            if (PlayerTwo != null)
            {
                PlayerTwo.TradeId = 0;
                PlayerTwo.SendWebPacket(new RpTrocStopComposer());
            }

            this.Troc.TryRemove(Troc.Id, out Troc);
        }
Beispiel #3
0
        private void setJester(PlayerController jester)
        {
            RolePlayer JesterRolePlayer = new RolePlayer(jester, "Jester");

            JesterRolePlayer.RoleEjected.UseRoleEjected = true;

            jester.ClearTasks();
            jester.PlayerTaskObjects = new Il2CppSystem.Collections.Generic.List <PILBGHDHJLH>();

            var intro = JesterRolePlayer.RoleIntro;

            intro.UseRoleIntro    = true;
            intro.RoleNameColor   = new Color(0.74901960784f, 0, 1f);
            intro.BackgroundColor = new Color(127 / 255f, 0 / 255f, 186 / 255f);
            intro.RoleDescription =
                $"Trick the crewmates into thinking\n" +
                $"that you are an {Functions.ColorRed}Impostor[]\n";

            var outro = JesterRolePlayer.RoleOutro;

            outro.WinText         = "Victory";
            outro.WinTextColor    = new Color(175 / 255f, 43 / 255f, 237 / 255f);
            outro.BackgroundColor = new Color(127 / 255f, 0 / 255f, 186 / 255f);

            AllRolePlayers.Add(JesterRolePlayer);

            if (AllRolePlayers.Where(x => x.AmRolePlayer).Count() > 0)
            {
                foreach (var role in AllRolePlayers)
                {
                    role.PlayerController.PlayerControl.nameText.Color = new Color(0.74901960784f, 0, 1f);
                }
            }
        }
Beispiel #4
0
        public void AddTrade(int RPId, int UserOne, int UserTwo, string UserNameOne, string UserNameTwo)
        {
            RolePlayerManager RPManager = ButterflyEnvironment.GetGame().GetRoleplayManager().GetRolePlay(RPId);

            if (RPManager == null)
            {
                return;
            }

            RolePlayer PlayerOne = RPManager.GetPlayer(UserOne);
            RolePlayer PlayerTwo = RPManager.GetPlayer(UserTwo);

            if (PlayerOne == null || PlayerTwo == null || PlayerOne.TradeId != 0 || PlayerTwo.TradeId != 0)
            {
                return;
            }

            TradeId++;
            this.Troc.TryAdd(TradeId, new RPTroc(TradeId, RPId, UserOne, UserTwo));

            PlayerOne.TradeId = TradeId;
            PlayerOne.SendWebPacket(new RpTrocStartComposer(UserTwo, UserNameTwo));

            PlayerTwo.TradeId = TradeId;
            PlayerTwo.SendWebPacket(new RpTrocStartComposer(UserOne, UserNameOne));
        }
 private bool CheckUserTouch(RoomUser UserTouch, ItemTemp Item)
 {
     if (UserTouch != null)
     {
         if (!this._room.RpRoom)
         {
             return(true);
         }
         else
         {
             if (UserTouch.VirtualId != Item.VirtualUserId)
             {
                 if (UserTouch.IsBot)
                 {
                     if (UserTouch.BotData.RoleBot != null && !UserTouch.BotData.RoleBot.Dead)
                     {
                         return(true);
                     }
                 }
                 else
                 {
                     RolePlayer Rp = UserTouch.Roleplayer;
                     if (Rp != null)
                     {
                         if ((Rp.PvpEnable || Rp.AggroTimer > 0) && !Rp.Dead && !Rp.SendPrison)
                         {
                             return(true);
                         }
                     }
                 }
             }
         }
     }
     return(false);
 }
 private void CheckUserHit(RoomUser UserTouch, ItemTemp Item)
 {
     if (UserTouch != null)
     {
         if (_room.RpRoom)
         {
             if (UserTouch.VirtualId != Item.VirtualUserId)
             {
                 if (UserTouch.IsBot)
                 {
                     if (UserTouch.BotData.RoleBot != null)
                     {
                         UserTouch.BotData.RoleBot.Hit(UserTouch, Item.Value, this._room, Item.VirtualUserId, Item.TeamId);
                     }
                 }
                 else
                 {
                     RolePlayer Rp = UserTouch.Roleplayer;
                     if (Rp != null)
                     {
                         if (Rp.PvpEnable || Rp.AggroTimer > 0)
                         {
                             Rp.Hit(UserTouch, Item.Value, this._room, true);
                         }
                     }
                 }
             }
         }
         else
         {
             _room.GetWiredHandler().TriggerCollision(UserTouch, null);
         }
     }
 }
Beispiel #7
0
        public void Parse(WebClient Session, ClientPacket Packet)
        {
            GameClient Client = ButterflyEnvironment.GetGame().GetClientManager().GetClientByUserID(Session.UserId);

            if (Client == null || Client.GetHabbo() == null)
            {
                return;
            }

            Room Room = Client.GetHabbo().CurrentRoom;

            if (Room == null || !Room.RpRoom)
            {
                return;
            }

            RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabboId(Client.GetHabbo().Id);

            if (User == null)
            {
                return;
            }

            RolePlayer Rp = User.Roleplayer;

            if (Rp == null || Rp.TradeId == 0)
            {
                return;
            }

            ButterflyEnvironment.GetGame().GetRoleplayManager().GetTrocManager().Confirme(Rp.TradeId, User.UserId);
        }
        public void AddPlayer(int UserId)
        {
            if (this._player.ContainsKey(UserId))
            {
                return;
            }

            RolePlayer player = null;

            using (IQueryAdapter queryreactor = ButterflyEnvironment.GetDatabaseManager().GetQueryReactor())
            {
                queryreactor.SetQuery("SELECT * FROM user_rp WHERE user_id = '" + UserId + "' AND roleplay_id = '" + this._id + "'");

                DataRow dRow = queryreactor.GetRow();
                if (dRow == null)
                {
                    queryreactor.RunQuery("INSERT INTO `user_rp` (`user_id`, `roleplay_id`) VALUES ('" + UserId + "', '" + this._id + "')");
                    player = new RolePlayer(this._id, UserId, 100, 0, 0, 0, 100, 0, 0);
                }
                else
                {
                    player = new RolePlayer(this._id, UserId, (int)dRow["health"], (int)dRow["money"], (int)dRow["munition"], (int)dRow["exp"], (int)dRow["energy"], (int)dRow["weapon_far"], (int)dRow["weapon_cac"]);
                }
            }

            if (player != null)
            {
                this._player.TryAdd(UserId, player);
                player.SendUpdate(true);
                player.LoadInventory(); //Faire le packet LoadInventoryRP
            }
        }
    private void OnGetPlayerInfosRes(byte[] res)
    {
        ///清除上一次生成的游戏物体
        for (int i = 0; i < caches.Count; i++)
        {
            Destroy(caches[i]);
        }
        caches.Clear();

        ///基于反馈数据生成新的游戏物体
        GetPlayerInfosRes response = ProtoBufUtils.Deserialize <GetPlayerInfosRes>(res);
        int stat = response.code.status;

        if (stat == 0)
        {
            PlayerData.MyPlayers = response.infos;
            PlayerInfo temp;
            for (int i = 0; i < PlayerData.MyPlayers.Count; i++)
            {
                temp = PlayerData.MyPlayers[i];
                var        go   = GameObject.Instantiate <GameObject>(ResourceMgr.Load <GameObject>("GUIs/RolePlayer"));
                RolePlayer role = go.GetComponent <RolePlayer>();
                role.SetUI(temp);
                go.transform.SetParent(layout, false);
                caches.Add(go);
            }

            addCharacter.transform.SetAsLastSibling();
        }
        else
        {
            RequestCharacterInfos();
        }
    }
Beispiel #10
0
        public void AddItem(int TradeId, int UserId, int ItemId)
        {
            RPTroc Troc = GetTroc(TradeId);

            if (Troc == null)
            {
                return;
            }

            if (Troc.AllAccepted || Troc.AllConfirmed)
            {
                return;
            }

            RPTrocUser TrocUser = Troc.GetUser(UserId);

            if (TrocUser == null || TrocUser.Accepted || TrocUser.Confirmed)
            {
                return;
            }

            RPItem RpItem = ButterflyEnvironment.GetGame().GetRoleplayManager().GetItemManager().GetItem(ItemId);

            if (RpItem == null || RpItem.Category == RPItemCategory.QUETE || !RpItem.AllowStack)
            {
                return;
            }

            RolePlayerManager RPManager = ButterflyEnvironment.GetGame().GetRoleplayManager().GetRolePlay(Troc.RPId);

            if (RPManager == null)
            {
                return;
            }

            RolePlayer Player = RPManager.GetPlayer(UserId);

            if (Player == null)
            {
                return;
            }
            RolePlayInventoryItem Item = Player.GetInventoryItem(ItemId);

            if (Item == null)
            {
                return;
            }
            if (TrocUser.GetCountItem(ItemId) >= Item.Count)
            {
                return;
            }

            TrocUser.AddItemId(ItemId);

            this.SendPacketUsers(new RpTrocUpdateItemsComposer(UserId, TrocUser.ItemIds), Troc);
        }
        public RolePlayer GetPlayer(int Id)
        {
            if (!this._player.ContainsKey(Id))
            {
                return(null);
            }

            RolePlayer player = null;

            this._player.TryGetValue(Id, out player);
            return(player);
        }
        public void RemovePlayer(int Id)
        {
            RolePlayer player = this.GetPlayer(Id);

            if (player == null)
            {
                return;
            }

            player.Destroy();
            this._player.TryRemove(Id, out player);
        }
Beispiel #13
0
        private void AggroSearch(RoomUser Bot, Room Room)
        {
            List <RoomUser> Users = Room.GetGameMap().GetNearUsers(new Point(Bot.X, Bot.Y), this.Config.AggroDistance);

            if (Users == null)
            {
                return;
            }

            int BotX = (Bot.SetStep) ? Bot.SetX : Bot.X;
            int BotY = (Bot.SetStep) ? Bot.SetY : Bot.Y;

            foreach (RoomUser User in Users)
            {
                if (User == Bot)
                {
                    continue;
                }

                int RotationDistance = Math.Abs(Rotation.Calculate(BotX, BotY, User.X, User.Y) - Bot.RotBody);
                if (RotationDistance >= 2 && !(User.X == BotX && User.Y == BotY))
                {
                    continue;
                }

                if (!User.IsBot)
                {
                    RolePlayer Rp = User.Roleplayer;
                    if (Rp == null)
                    {
                        continue;
                    }

                    if (Rp.Dead || (!Rp.PvpEnable && Rp.AggroTimer <= 0) || Rp.SendPrison)
                    {
                        continue;
                    }
                }
                else
                {
                    if (User.BotData.RoleBot == null || (User.BotData.RoleBot.Dead || this.Config.TeamId == User.BotData.RoleBot.Config.TeamId))
                    {
                        continue;
                    }
                }

                this.ResetBot       = false;
                this.ResetBotTimer  = 60;
                this.AggroVirtuelId = User.VirtualId;
                this.AggroTimer     = 0;
            }
        }
Beispiel #14
0
            public static void Prefix([HarmonyArgument(0)] ref GameEndReasonEnum reason)
            {
                if (TheJester.GameMode.NumJesters == 0)
                {
                    return;
                }

                if (TheJester.GameMode.JestersWon)
                {
                    reason = GameEndReasonEnum.ImpostorByKill;

                    foreach (var player in PlayerController.AllPlayerControls.Where(x => x.PlayerData.IsImpostor))
                    {
                        player.PlayerData.IsImpostor = false;
                    }

                    foreach (var jester in TheJester.GameMode.AllRolePlayers)
                    {
                        jester.RoleOutro.UseRoleOutro = true;
                        jester.PlayerController.PlayerData.IsImpostor = true;
                    }

                    if (TheJester.GameMode.AllRolePlayers.Where(x => x.AmRolePlayer).Count() == 0)
                    {
                        var DefeatRole = new RolePlayer(PlayerController.LocalPlayer, "Other");
                        DefeatRole.RoleOutro.WinText         = "Defeat";
                        DefeatRole.RoleOutro.WinTextColor    = new Color(175 / 255f, 43 / 255f, 237 / 255f);
                        DefeatRole.RoleOutro.BackgroundColor = new Color(127 / 255f, 0 / 255f, 186 / 255f);
                        DefeatRole.RoleOutro.UseRoleOutro    = true;
                    }
                }
                else
                {
                    if (reason == GameEndReasonEnum.HumansByVote || reason == GameEndReasonEnum.HumansByTask)
                    {
                        foreach (var jester in TheJester.GameMode.AllRolePlayers)
                        {
                            jester.PlayerController.PlayerData.IsImpostor = true;
                        }
                    }
                }
            }
        private void setCleaner(PlayerController ctrl)
        {
            var role = new RolePlayer(ctrl, "Cleaner");

            role.RoleIntro.UseRoleIntro    = true;
            role.RoleIntro.BackgroundColor = new Color(0, 136 / 255f, 255 / 255f);
            role.RoleIntro.RoleNameColor   = new Color(0, 221 / 255f, 255 / 255f);
            role.RoleIntro.RoleDescription = "Help the [ff0000ff]Impostors[] by [0088ffff]cleaning []the [ff0000ff]crime scene[].";

            role.RoleEjected.UseRoleEjected = true;

            role.NameColor = new Color(0, 221 / 255f, 255 / 255f);

            role.NameColorVisible = PlayerController.LocalPlayer.PlayerData.IsImpostor;

            AllRolePlayers.Add(role);

            if (ctrl.IsLocalPlayer)
            {
                CleanStopwatch = new CustomStopwatch(true);
            }
        }
Beispiel #16
0
        private void SendPacketUsers(IServerPacket packet, RPTroc Troc)
        {
            RolePlayerManager RPManager = ButterflyEnvironment.GetGame().GetRoleplayManager().GetRolePlay(Troc.RPId);

            if (RPManager == null)
            {
                return;
            }

            RolePlayer PlayerOne = RPManager.GetPlayer(Troc.UserOne.UserId);

            if (PlayerOne != null)
            {
                PlayerOne.SendWebPacket(packet);
            }

            RolePlayer PlayerTwo = RPManager.GetPlayer(Troc.UserTwo.UserId);

            if (PlayerTwo != null)
            {
                PlayerTwo.SendWebPacket(packet);
            }
        }
Beispiel #17
0
        public void Parse(GameClient Session, ClientPacket Packet)
        {
            Room room = ButterflyEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);

            if (room == null)
            {
                return;
            }

            if (room.RpRoom)
            {
                RoomUser RoomUser       = room.GetRoomUserManager().GetRoomUserByHabboId(Session.GetHabbo().Id);
                RoomUser RoomUserTarget = room.GetRoomUserManager().GetRoomUserByVirtualId(Packet.PopInt());
                if (RoomUser == null || RoomUser.GetClient() == null || RoomUser.GetClient().GetHabbo() == null)
                {
                    return;
                }
                if (RoomUserTarget == null || RoomUserTarget.GetClient() == null || RoomUserTarget.GetClient().GetHabbo() == null)
                {
                    return;
                }

                RolePlayer Rp = RoomUser.Roleplayer;
                if (Rp == null || Rp.TradeId > 0 || Rp.Dead || Rp.SendPrison || (Rp.PvpEnable && room.Pvp) || Rp.AggroTimer > 0)
                {
                    RoomUser.SendWhisperChat("Vous devez être en zone safe pour pouvoir troquer");
                    return;
                }

                RolePlayer RpTarget = RoomUserTarget.Roleplayer;
                if (RpTarget == null || RpTarget.TradeId > 0 || RpTarget.Dead || RpTarget.SendPrison || (RpTarget.PvpEnable && room.Pvp) || RpTarget.AggroTimer > 0)
                {
                    RoomUser.SendWhisperChat("Ce joueur ne peut pas troc");
                    return;
                }

                ButterflyEnvironment.GetGame().GetRoleplayManager().GetTrocManager().AddTrade(room.RoomData.OwnerId, RoomUser.UserId, RoomUserTarget.UserId, RoomUser.GetUsername(), RoomUserTarget.GetUsername());
                return;
            }

            if (room.RoomData.TrocStatus == 0)
            {
                Session.SendNotification(ButterflyEnvironment.GetLanguageManager().TryGetValue("notif.trade.error.1", Session.Langue));
                return;
            }
            else if (room.RoomData.TrocStatus == 1 && !room.CheckRights(Session))
            {
                Session.SendNotification(ButterflyEnvironment.GetLanguageManager().TryGetValue("notif.trade.error.2", Session.Langue));
                return;
            }

            RoomUser roomUserByHabbo     = room.GetRoomUserManager().GetRoomUserByHabboId(Session.GetHabbo().Id);
            RoomUser roomUserByVirtualId = room.GetRoomUserManager().GetRoomUserByVirtualId(Packet.PopInt());

            if (roomUserByVirtualId == null || roomUserByVirtualId.GetClient() == null || roomUserByVirtualId.GetClient().GetHabbo() == null)
            {
                return;
            }

            if (!roomUserByVirtualId.GetClient().GetHabbo().AcceptTrading&& Session.GetHabbo().Rank < 3)
            {
                Session.SendNotification(ButterflyEnvironment.GetLanguageManager().TryGetValue("user.tradedisabled", Session.Langue));
            }
            else if (roomUserByVirtualId.transformation || roomUserByHabbo.transformation || roomUserByHabbo.IsSpectator || roomUserByVirtualId.IsSpectator)
            {
                Session.SendNotification(ButterflyEnvironment.GetLanguageManager().TryGetValue("notif.trade.error.3", Session.Langue));
            }
            else
            {
                room.TryStartTrade(roomUserByHabbo, roomUserByVirtualId);
            }
        }
        private bool RpUserCommand(RoomUser User)
        {
            Room Room = this.item.GetRoom();

            if (Room == null || !Room.RpRoom)
            {
                return(false);
            }

            if (User == null || User.GetClient() == null || User.GetClient().GetHabbo() == null)
            {
                return(false);
            }

            RolePlayer Rp = User.Roleplayer;

            if (Rp == null)
            {
                return(false);
            }

            bool Result = false;

            switch (this.Effet)
            {
            case "inventoryitem":
            case "inventorynotitem":
            {
                int ValueInt = 0;
                if (!int.TryParse(this.Value, out ValueInt))
                {
                    break;
                }

                if (Rp.GetInventoryItem(ValueInt) != null)
                {
                    Result = true;
                }

                break;
            }

            case "energyplus":
            {
                int ValueInt = 0;
                int.TryParse(this.Value, out ValueInt);

                if (Rp.Energy >= ValueInt)
                {
                    Result = true;
                }
                break;
            }

            case "energymoins":
            {
                int ValueInt = 0;
                int.TryParse(this.Value, out ValueInt);

                if (Rp.Energy < ValueInt)
                {
                    Result = true;
                }
                break;
            }

            case "munition":
            {
                int ValueInt = 0;
                int.TryParse(this.Value, out ValueInt);

                if (Rp.Munition == ValueInt)
                {
                    Result = true;
                }
                break;
            }

            case "munitionplus":
            {
                int ValueInt = 0;
                int.TryParse(this.Value, out ValueInt);

                if (Rp.Munition >= ValueInt)
                {
                    Result = true;
                }
                break;
            }

            case "munitionmoins":
            {
                int ValueInt = 0;
                int.TryParse(this.Value, out ValueInt);

                if (Rp.Munition < ValueInt)
                {
                    Result = true;
                }
                break;
            }

            case "moneyplus":
            {
                int ValueInt = 0;
                int.TryParse(this.Value, out ValueInt);
                if (Rp.Money >= ValueInt)
                {
                    Result = true;
                }
                break;
            }

            case "moneymoins":
            {
                int ValueInt = 0;
                int.TryParse(this.Value, out ValueInt);
                if (Rp.Money < ValueInt)
                {
                    Result = true;
                }
                break;
            }

            case "levelplus":
            {
                int.TryParse(this.Value, out int ValueInt);
                if (Rp.Level >= ValueInt)
                {
                    Result = true;
                }
                break;
            }

            case "levelmoins":
            {
                int.TryParse(this.Value, out int ValueInt);
                if (Rp.Level < ValueInt)
                {
                    Result = true;
                }
                break;
            }

            case "healthplus":
            {
                int.TryParse(this.Value, out int ValueInt);
                if (Rp.Health >= ValueInt)
                {
                    Result = true;
                }
                break;
            }

            case "healthmoins":
            {
                int ValueInt = 0;
                int.TryParse(this.Value, out ValueInt);
                if (Rp.Health < ValueInt)
                {
                    Result = true;
                }
                break;
            }

            case "health":
            {
                int ValueInt = 0;
                int.TryParse(this.Value, out ValueInt);
                if (Rp.Health == ValueInt)
                {
                    Result = true;
                }
                break;
            }

            case "dead":
            case "notdead":
            {
                if (Rp.Dead == true)
                {
                    Result = true;
                }
                break;
            }

            case "weaponfarid":
            case "notweaponfarid":
            {
                int ValueInt = 0;
                int.TryParse(this.Value, out ValueInt);

                if (Rp.WeaponGun.Id == ValueInt)
                {
                    Result = true;
                }

                break;
            }

            case "weaponcacid":
            case "notweaponcacid":
            {
                int ValueInt = 0;
                int.TryParse(this.Value, out ValueInt);

                if (Rp.WeaponCac.Id == ValueInt)
                {
                    Result = true;
                }

                break;
            }
            }
            return(Result);
        }
        public override void Loop()
        {
            base.Loop();

            GameModeSettingsAddition = $"\nRandom Start Location: {Functions.ColorPurple}{(RandomStartLocation ? "On" : "Off")}";

            if (!IsInGame)
            {
                return;
            }

            #region ----- Display new task text -----
            string ToDisplay = "----- [ff7b00ff]Battle Royale[] -----\n" +
                               "Be the last man standing!\n" +
                               "\n" +
                               $"Players left: { PlayerController.AllPlayerControls.Where(x => !x.PlayerData.IsDead).Count() }/{ MaxPlayerCount }";

            PlayerHudManager.TaskText = ToDisplay + "\n--------------------"; // Current text
            #endregion

            #region ----- Display Kill Button -----
            PlayerHudManager.HudManager.KillButton.gameObject.SetActive(!PlayerController.LocalPlayer.PlayerData.IsDead);         // Activate Kill Button
            PlayerHudManager.HudManager.KillButton.isActive = !PlayerController.LocalPlayer.PlayerData.IsDead;                    // Activate Kill Button

            PlayerHudManager.HudManager.KillButton.transform.position = PlayerHudManager.HudManager.UseButton.transform.position; // Move the Kill Button

            PlayerHudManager.HudManager.ReportButton.enabled = false;                                                             // Disable report button
            PlayerHudManager.HudManager.ReportButton.gameObject.SetActive(false);                                                 // Disable report button
            PlayerHudManager.HudManager.ReportButton.renderer.color = new Color(1, 1, 1, 0);                                      // Hide report button

            PlayerHudManager.HudManager.UseButton.enabled = false;                                                                // Disable use button
            PlayerHudManager.HudManager.UseButton.gameObject.SetActive(false);                                                    // Disable use button
            PlayerHudManager.HudManager.UseButton.UseButton.color = new Color(1, 1, 1, 0);                                        // Hide use button

            #region --- Update Cooldown ---
            if (GameOptions.KillCooldown - (Functions.GetUnixTime() - LastKilled) <= 0)
            {
                LastKilled = 0;
            }

            if (LastKilled != 0)
            {
                PlayerHudManager.HudManager.KillButton.SetCoolDown(GameOptions.KillCooldown - (Functions.GetUnixTime() - LastKilled), GameOptions.KillCooldown);
            }
            else
            {
                PlayerHudManager.HudManager.KillButton.SetCoolDown(0, GameOptions.KillCooldown);
            }
            #endregion

            #region ----- End Game If Required -----
            if (PlayerController.AllPlayerControls.Where(x => !x.PlayerData.IsDead).Count() == 1 && Started)
            {
                Started = false;

                if (!CheepsAmongUsMod.CheepsAmongUsMod.IsDecidingClient)
                {
                    return;
                }

                Task.Run(async() =>
                {
                    await Task.Delay(2500);
                    Patching.PatchFinishEndGame.CanEndGame = true;
                    ShipStatusClass.PLBGOMIEONF(GameEndReason.ImpostorByKill, false);
                });

                var winner = PlayerController.AllPlayerControls.Where(x => !x.PlayerData.IsDead).First();

                winner.PlayerData.IsImpostor = true;

                RolePlayer MyRole = new RolePlayer(PlayerController.LocalPlayer, "Default");

                MyRole.RoleOutro.UseRoleOutro = true;

                MyRole.RoleOutro.UseRoleOutro = true;

                if (winner.IsLocalPlayer)
                {
                    MyRole.RoleOutro.WinText         = "Victory Royale";
                    MyRole.RoleOutro.WinTextColor    = new Color(255 / 255f, 174 / 255f, 0 / 255f);
                    MyRole.RoleOutro.BackgroundColor = new Color(1f, 0.8f, 0f);
                }
                else
                {
                    MyRole.RoleOutro.WinText         = winner.PlayerData.PlayerName;
                    MyRole.RoleOutro.WinTextColor    = new Color(255 / 255f, 174 / 255f, 0 / 255f);
                    MyRole.RoleOutro.BackgroundColor = new Color(1f, 0f, 0f);
                }

                RpcManager.SendRpc(BattleRoyale.BattleRoyalRpc, new byte[] { (byte)BattleRoyale.CustomRpcCalls.SetWinner, winner.PlayerId });
            }
            #endregion

            if (!Started)
            {
                return;
            }

            #region ----- Get Closest Player -----
            IEnumerable <PlayerController> AvailablePlayers = PlayerController.AllPlayerControls.Where(x => !x.PlayerData.IsDead && !x.IsLocalPlayer);

            PlayerController closest = AvailablePlayers.ToList()[0];

            foreach (var player in AvailablePlayers)
            {
                float DistOld = Vector2.Distance(closest.Position, PlayerController.LocalPlayer.Position);
                float DistNew = Vector2.Distance(player.Position, PlayerController.LocalPlayer.Position);

                if (DistNew < DistOld)
                {
                    closest = player;
                }
            }
            #endregion

            #region --- Update Target ---
            if (Vector2.Distance(closest.Position, PlayerController.LocalPlayer.Position) <= KillDistance)
            {
                PlayerHudManager.HudManager.KillButton.SetTarget(closest.PlayerControl);
                PlayerHudManager.HudManager.KillButton.CurrentTarget = closest.PlayerControl;
                Patching.PatchPerformKill.Target = closest;
            }
            else
            {
                Patching.PatchPerformKill.Target = null;
            }
            #endregion
            #endregion
        }
        private void RpcManager_RpcReceived(object sender, RpcEventArgs e)
        {
            if (e.Command != BattleRoyale.BattleRoyalRpc)
            {
                return;
            }

            var command = e.MessageReader.ReadByte();

            switch (command)
            {
            case (byte)BattleRoyale.CustomRpcCalls.UpdateRandomStartLocation:
            {
                RandomStartLocation = Convert.ToBoolean(e.MessageReader.ReadByte());
                break;
            }

            case (byte)BattleRoyale.CustomRpcCalls.SendStartLocation:
            {
                var   playerId = e.MessageReader.ReadByte();
                float x        = e.MessageReader.ReadSingle();
                float y        = e.MessageReader.ReadSingle();

                var loc = new Vector2(x, y);

                var player = PlayerController.FromPlayerId(playerId);

                if (player.IsLocalPlayer)
                {
                    player.RpcSnapTo(loc);
                }
                break;
            }

            case (byte)BattleRoyale.CustomRpcCalls.SetWinner:
            {
                var winner = PlayerController.FromPlayerId(e.MessageReader.ReadByte());

                RolePlayer MyRole = new RolePlayer(PlayerController.LocalPlayer, "Default");

                MyRole.RoleOutro.UseRoleOutro = true;

                if (winner.IsLocalPlayer)
                {
                    MyRole.RoleOutro.WinText         = "Victory Royale";
                    MyRole.RoleOutro.WinTextColor    = new Color(255 / 255f, 174 / 255f, 0 / 255f);
                    MyRole.RoleOutro.BackgroundColor = new Color(1f, 0.8f, 0f);
                }
                else
                {
                    MyRole.RoleOutro.WinText         = winner.PlayerData.PlayerName;
                    MyRole.RoleOutro.WinTextColor    = new Color(255 / 255f, 174 / 255f, 0 / 255f);
                    MyRole.RoleOutro.BackgroundColor = new Color(1f, 0f, 0f);
                }

                winner.PlayerData.IsImpostor = true;
                break;
            }

            case (byte)BattleRoyale.CustomRpcCalls.KillPlayer:
            {
                var killer = PlayerController.FromPlayerId(e.MessageReader.ReadByte());
                var target = PlayerController.FromPlayerId(e.MessageReader.ReadByte());

                if (!killer.PlayerData.IsDead && !target.PlayerData.IsDead && CheepsAmongUsMod.CheepsAmongUsMod.IsDecidingClient)
                {
                    RpcManager.SendRpc(BattleRoyale.BattleRoyalRpc, new byte[] { (byte)BattleRoyale.CustomRpcCalls.MurderPlayer, killer.PlayerId, target.PlayerId });

                    killer.PlayerControl.MurderPlayer(target.PlayerControl);
                    target.PlayerData.IsDead = true;
                }
                break;
            }

            case (byte)BattleRoyale.CustomRpcCalls.MurderPlayer:
            {
                var killer = PlayerController.FromPlayerId(e.MessageReader.ReadByte());
                var target = PlayerController.FromPlayerId(e.MessageReader.ReadByte());

                killer.PlayerControl.MurderPlayer(target.PlayerControl);
                target.PlayerData.IsDead = true;
                break;
            }
            }
        }
Beispiel #21
0
        public void Execute(GameClient Session, Room Room, RoomUser UserRoom, string[] Params)
        {
            if (Params.Length != 3)
            {
                return;
            }

            if (!Room.RpRoom)
            {
                return;
            }

            RolePlayer Rp = UserRoom.Roleplayer;

            if (Rp == null)
            {
                return;
            }

            if (Rp.Dead || Rp.SendPrison)
            {
                return;
            }

            RoomUser TargetRoomUser = Room.GetRoomUserManager().GetRoomUserByHabbo(Params[1].ToString());

            if (TargetRoomUser == null || TargetRoomUser.GetClient() == null || TargetRoomUser.GetClient().GetHabbo() == null)
            {
                return;
            }

            int NumberMoney = 0;

            if (!int.TryParse(Params[2].ToString(), out NumberMoney))
            {
                return;
            }
            if (NumberMoney <= 0)
            {
                return;
            }

            RolePlayer RpTwo = TargetRoomUser.Roleplayer;

            if (RpTwo == null)
            {
                return;
            }

            if (TargetRoomUser.GetClient().GetHabbo().Id == Session.GetHabbo().Id)
            {
                return;
            }

            if (RpTwo.Dead || RpTwo.SendPrison)
            {
                return;
            }

            if (Rp.Money < NumberMoney)
            {
                return;
            }

            if (!((Math.Abs((TargetRoomUser.X - UserRoom.X)) >= 2) || (Math.Abs((TargetRoomUser.Y - UserRoom.Y)) >= 2)))
            {
                Rp.Money    -= NumberMoney;
                RpTwo.Money += NumberMoney;

                Rp.SendUpdate();
                RpTwo.SendUpdate();

                TargetRoomUser.SendWhisperChat(string.Format(ButterflyEnvironment.GetLanguageManager().TryGetValue("rp.givemoney.receive", TargetRoomUser.GetClient().Langue), NumberMoney, UserRoom.GetUsername()));

                UserRoom.SendWhisperChat(string.Format(ButterflyEnvironment.GetLanguageManager().TryGetValue("rp.givemoney.send", Session.Langue), NumberMoney, TargetRoomUser.GetUsername()));
                UserRoom.OnChat(string.Format(ButterflyEnvironment.GetLanguageManager().TryGetValue("rp.givemoney.send.chat", Session.Langue), TargetRoomUser.GetUsername()), 0, true);
            }
        }
Beispiel #22
0
        public void Parse(WebClient Session, ClientPacket Packet)
        {
            int ItemId   = Packet.PopInt();
            int UseCount = Packet.PopInt();

            GameClient Client = ButterflyEnvironment.GetGame().GetClientManager().GetClientByUserID(Session.UserId);

            if (Client == null || Client.GetHabbo() == null)
            {
                return;
            }

            Room Room = Client.GetHabbo().CurrentRoom;

            if (Room == null || !Room.RpRoom)
            {
                return;
            }

            RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabboId(Client.GetHabbo().Id);

            if (User == null)
            {
                return;
            }

            if (User.Freeze)
            {
                return;
            }

            RolePlayer Rp = User.Roleplayer;

            if (Rp == null || Rp.Dead || Rp.SendPrison || Rp.TradeId > 0)
            {
                return;
            }

            if (Rp.AggroTimer > 0)
            {
                User.SendWhisperChat(string.Format(ButterflyEnvironment.GetLanguageManager().TryGetValue("rp.useitem.notallowed", Client.Langue), Math.Round((double)Rp.AggroTimer / 2)));
                return;
            }

            RPItem RpItem = ButterflyEnvironment.GetGame().GetRoleplayManager().GetItemManager().GetItem(ItemId);

            if (RpItem == null)
            {
                return;
            }

            RolePlayInventoryItem RpItemInventory = Rp.GetInventoryItem(ItemId);

            if (RpItemInventory == null || RpItemInventory.Count <= 0 || RpItem.Type == "none")
            {
                return;
            }

            if (UseCount <= 0 || RpItem.UseType != 2)
            {
                UseCount = 1;
            }

            if (UseCount > RpItemInventory.Count)
            {
                UseCount = RpItemInventory.Count;
            }


            if (User.FreezeEndCounter <= 1)
            {
                User.Freeze           = true;
                User.FreezeEndCounter = 1;
            }

            if (RpItem.Id == 75)
            {
                Rp.AddInventoryItem(45, UseCount);
            }

            switch (RpItem.Type)
            {
            case "openpage":
            {
                User.GetClient().SendPacket(new NuxAlertComposer("habbopages/roleplay/" + RpItem.Value));
                break;
            }

            case "openguide":
            {
                User.GetClient().SendPacket(new NuxAlertComposer("habbopages/westworld/westworld"));
                break;
            }

            case "hit":
            {
                Rp.Hit(User, RpItem.Value * UseCount, Room, false, true, false);
                Rp.RemoveInventoryItem(RpItem.Id, UseCount);
                break;
            }

            case "enable":
            {
                User.ApplyEffect(RpItem.Value);
                break;
            }

            case "showtime":
            {
                User.SendWhisperChat("Il est " + Room.RpHour + " heures et " + Room.RpMinute + " minutes");
                break;
            }

            case "money":
            {
                Rp.Money += RpItem.Value * UseCount;
                Rp.RemoveInventoryItem(RpItem.Id, UseCount);
                Rp.SendUpdate();
                break;
            }

            case "munition":
            {
                Rp.AddMunition(RpItem.Value * UseCount);
                Rp.RemoveInventoryItem(RpItem.Id, UseCount);
                Rp.SendUpdate();
                break;
            }

            case "energytired":
            {
                User.ApplyEffect(4, true);
                User.TimerResetEffect = 2;

                Rp.AddEnergy(RpItem.Value * UseCount);
                Rp.Hit(User, RpItem.Value * UseCount, Room, false, true, false);
                Rp.SendUpdate();
                Rp.RemoveInventoryItem(RpItem.Id, UseCount);

                User.OnChat("*Consomme " + Char.ToLowerInvariant(RpItem.Title[0]) + RpItem.Title.Substring(1) + "*");
                break;
            }

            case "healthtired":
            {
                User.ApplyEffect(4, true);
                User.TimerResetEffect = 2;

                Rp.RemoveEnergy(RpItem.Value * UseCount);
                Rp.AddHealth(RpItem.Value * UseCount);
                Rp.SendUpdate();
                Rp.RemoveInventoryItem(RpItem.Id, UseCount);

                User.OnChat("*Consomme " + Char.ToLowerInvariant(RpItem.Title[0]) + RpItem.Title.Substring(1) + "*");
                break;
            }

            case "healthenergy":
            {
                User.ApplyEffect(4, true);
                User.TimerResetEffect = 2;

                Rp.AddEnergy(RpItem.Value * UseCount);
                Rp.AddHealth(RpItem.Value * UseCount);
                Rp.SendUpdate();
                Rp.RemoveInventoryItem(RpItem.Id, UseCount);

                User.OnChat("*Consomme " + Char.ToLowerInvariant(RpItem.Title[0]) + RpItem.Title.Substring(1) + "*");
                break;
            }

            case "energy":
            {
                User.ApplyEffect(4, true);
                User.TimerResetEffect = 2;

                Rp.AddEnergy(RpItem.Value * UseCount);
                Rp.SendUpdate();
                Rp.RemoveInventoryItem(RpItem.Id, UseCount);

                User.OnChat("*Consomme " + Char.ToLowerInvariant(RpItem.Title[0]) + RpItem.Title.Substring(1) + "*");
                break;
            }

            case "health":
            {
                User.ApplyEffect(737, true);
                User.TimerResetEffect = 4;

                Rp.AddHealth(RpItem.Value * UseCount);
                Rp.SendUpdate();
                Rp.RemoveInventoryItem(RpItem.Id, UseCount);

                User.OnChat("*Consomme " + Char.ToLowerInvariant(RpItem.Title[0]) + RpItem.Title.Substring(1) + "*");
                break;
            }

            case "weapon_cac":
            {
                if (Rp.WeaponCac.Id == RpItem.Value)
                {
                    break;
                }
                Rp.WeaponCac = ButterflyEnvironment.GetGame().GetRoleplayManager().GetWeaponManager().GetWeaponCac(RpItem.Value);
                User.SendWhisperChat(ButterflyEnvironment.GetLanguageManager().TryGetValue("rp.changearmecac", Client.Langue));
                break;
            }

            case "weapon_far":
            {
                if (Rp.WeaponGun.Id == RpItem.Value)
                {
                    break;
                }
                Rp.WeaponGun = ButterflyEnvironment.GetGame().GetRoleplayManager().GetWeaponManager().GetWeaponGun(RpItem.Value);
                User.SendWhisperChat(ButterflyEnvironment.GetLanguageManager().TryGetValue("rp.changearmefar", Client.Langue));
                break;
            }
            }
        }
Beispiel #23
0
        public void OnDisconnect()
        {
            if (this.Disconnected)
            {
                return;
            }

            this.Disconnected = true;

            ButterflyEnvironment.GetGame().GetClientManager().UnregisterClient(this.Id, this.Username);

            if (this.Langue == Language.FRANCAIS)
            {
                ButterflyEnvironment.onlineUsersFr--;
            }
            else if (this.Langue == Language.ANGLAIS)
            {
                ButterflyEnvironment.onlineUsersEn--;
            }
            else if (this.Langue == Language.PORTUGAIS)
            {
                ButterflyEnvironment.onlineUsersBr--;
            }

            if (this.HasFuse("fuse_mod"))
            {
                ButterflyEnvironment.GetGame().GetClientManager().RemoveUserStaff(this.Id);
            }

            Logging.WriteLine(this.Username + " has logged out.");

            if (!this.HabboinfoSaved)
            {
                this.HabboinfoSaved = true;
                TimeSpan TimeOnline    = DateTime.Now - this.OnlineTime;
                int      TimeOnlineSec = (int)TimeOnline.TotalSeconds;
                using (IQueryAdapter queryreactor = ButterflyEnvironment.GetDatabaseManager().GetQueryReactor())
                {
                    queryreactor.RunQuery("UPDATE users SET online = '0', last_online = '" + ButterflyEnvironment.GetUnixTimestamp() + "', activity_points = " + this.Duckets + ", activity_points_lastupdate = '" + this.LastActivityPointsUpdate + "', credits = " + this.Credits + " WHERE id = " + this.Id + " ;");
                    queryreactor.RunQuery("UPDATE user_stats SET groupid = " + this.FavouriteGroupId + ",  OnlineTime = OnlineTime + " + TimeOnlineSec + ", quest_id = '" + this.CurrentQuestId + "', Respect = '" + this.Respect + "', DailyRespectPoints = '" + this.DailyRespectPoints + "', DailyPetRespectPoints = '" + this.DailyPetRespectPoints + "' WHERE id = " + this.Id + " ;");
                }
            }

            if (this.InRoom && this.CurrentRoom != null)
            {
                this.CurrentRoom.GetRoomUserManager().RemoveUserFromRoom(this.mClient, false, false);
            }

            if (this.RolePlayId > 0)
            {
                RolePlayerManager RPManager = ButterflyEnvironment.GetGame().GetRoleplayManager().GetRolePlay(this.RolePlayId);
                if (RPManager != null)
                {
                    RolePlayer Rp = RPManager.GetPlayer(this.Id);
                    if (Rp != null)
                    {
                        RPManager.RemovePlayer(this.Id);
                    }
                }
                this.RolePlayId = 0;
            }

            if (this.GuideOtherUserId != 0)
            {
                GameClient requester = ButterflyEnvironment.GetGame().GetClientManager().GetClientByUserID(this.GuideOtherUserId);
                if (requester != null)
                {
                    ServerPacket message = new ServerPacket(ServerPacketHeader.OnGuideSessionEnded);
                    message.WriteInteger(1);
                    requester.SendPacket(message);

                    requester.GetHabbo().GuideOtherUserId = 0;
                }
            }
            if (this.OnDuty)
            {
                ButterflyEnvironment.GetGame().GetGuideManager().RemoveGuide(this.Id);
            }

            if (this.Messenger != null)
            {
                this.Messenger.AppearOffline = true;
                this.Messenger.Destroy();
            }

            if (this.InventoryComponent != null)
            {
                this.InventoryComponent.Destroy();
                this.InventoryComponent = null;
            }

            if (this.BadgeComponent != null)
            {
                this.BadgeComponent.Destroy();
                this.BadgeComponent = null;
            }

            if (this.UsersRooms != null)
            {
                this.UsersRooms.Clear();
            }

            if (this.RoomRightsList != null)
            {
                this.RoomRightsList.Clear();
            }

            if (this.FavoriteRooms != null)
            {
                this.FavoriteRooms.Clear();
            }

            this.mClient = (GameClient)null;
        }
Beispiel #24
0
        private void AggroCycle(RoomUser Bot, Room Room)
        {
            RoomUser User = Room.GetRoomUserManager().GetRoomUserByVirtualId(this.AggroVirtuelId);

            if (User == null || this.Dead)
            {
                this.ResetAggro();
                return;
            }

            if (this.AggroTimer > 120)
            {
                this.ResetAggro();
                return;
            }
            else
            {
                this.AggroTimer++;
            }

            if (!User.IsBot)
            {
                RolePlayer Rp = User.Roleplayer;
                if (Rp == null)
                {
                    this.ResetAggro();
                    return;
                }

                if (Rp.Dead || (!Rp.PvpEnable && Rp.AggroTimer <= 0) || Rp.SendPrison)
                {
                    this.ResetAggro();
                    return;
                }
            }
            else
            {
                if (User.BotData.RoleBot == null || User.BotData.RoleBot.Dead)
                {
                    this.ResetAggro();
                    return;
                }
            }

            int BotX = (Bot.SetStep) ? Bot.SetX : Bot.X;
            int BotY = (Bot.SetStep) ? Bot.SetY : Bot.Y;

            int UserX = (User.SetStep) ? User.SetX : User.X;
            int UserY = (User.SetStep) ? User.SetY : User.Y;

            int DistanceX = Math.Abs(UserX - BotX);
            int DistanceY = Math.Abs(UserY - BotY);

            if (DistanceX > this.Config.LostAggroDistance || DistanceY > this.Config.LostAggroDistance)
            {
                this.ResetAggro();
                return;
            }

            if (DistanceX > this.Config.LostAggroDistance || DistanceY > this.Config.LostAggroDistance)
            {
                this.ResetAggro();
                return;
            }

            if (DistanceX > this.Config.LostAggroDistance || DistanceY > this.Config.LostAggroDistance)
            {
                this.ResetAggro();
                return;
            }

            if (Math.Abs(BotX - Bot.BotData.X) > this.Config.ZoneDistance + 10 || Math.Abs(BotY - Bot.BotData.Y) > this.Config.ZoneDistance + 10)
            {
                this.ResetAggro();
                return;
            }

            if (Bot.Freeze)
            {
                return;
            }


            if (!this.BotPathFind(Bot, Room, User))
            {
                return;
            }

            int Rot = Rotation.Calculate(BotX, BotY, UserX, UserY);

            Bot.RotHead      = Rot;
            Bot.RotBody      = Rot;
            Bot.UpdateNeeded = true;

            this.AggroTimer = 0;

            if (this.WeaponCac.Id != 0 && (DistanceX < 2 && DistanceY < 2))
            {
                this.Cac(Bot, Room, User);
            }
            else if (this.WeaponGun.Id != 0)
            {
                this.Pan(Bot, Room);
            }
        }
Beispiel #25
0
        private bool EndTrade(RPTroc Troc)
        {
            RolePlayerManager RPManager = ButterflyEnvironment.GetGame().GetRoleplayManager().GetRolePlay(Troc.RPId);

            if (RPManager == null)
            {
                return(false);
            }

            RolePlayer PlayerOne = RPManager.GetPlayer(Troc.UserOne.UserId);

            if (PlayerOne == null)
            {
                return(false);
            }

            RolePlayer PlayerTwo = RPManager.GetPlayer(Troc.UserTwo.UserId);

            if (PlayerTwo == null)
            {
                return(false);
            }

            foreach (KeyValuePair <int, int> entry in Troc.UserOne.ItemIds)
            {
                RolePlayInventoryItem Item = PlayerOne.GetInventoryItem(entry.Key);
                if (Item == null)
                {
                    return(false);
                }
                if (Item.Count < entry.Value)
                {
                    return(false);
                }
            }
            foreach (KeyValuePair <int, int> entry in Troc.UserTwo.ItemIds)
            {
                RolePlayInventoryItem Item = PlayerTwo.GetInventoryItem(entry.Key);
                if (Item == null)
                {
                    return(false);
                }
                if (Item.Count < entry.Value)
                {
                    return(false);
                }
            }

            foreach (KeyValuePair <int, int> entry in Troc.UserOne.ItemIds)
            {
                RolePlayInventoryItem Item = PlayerOne.GetInventoryItem(entry.Key);
                if (Item == null)
                {
                    return(false);
                }

                PlayerOne.RemoveInventoryItem(entry.Key, entry.Value);
                PlayerTwo.AddInventoryItem(entry.Key, entry.Value);
            }

            foreach (KeyValuePair <int, int> entry in Troc.UserTwo.ItemIds)
            {
                PlayerTwo.RemoveInventoryItem(entry.Key, entry.Value);
                PlayerOne.AddInventoryItem(entry.Key, entry.Value);
            }

            return(true);
        }
Beispiel #26
0
        public void Parse(WebClient Session, ClientPacket Packet)
        {
            int ItemId = Packet.PopInt();
            int Count  = Packet.PopInt();

            if (Count > 99)
            {
                Count = 99;
            }
            if (Count < 1)
            {
                Count = 1;
            }

            GameClient Client = ButterflyEnvironment.GetGame().GetClientManager().GetClientByUserID(Session.UserId);

            if (Client == null || Client.GetHabbo() == null)
            {
                return;
            }

            Room Room = Client.GetHabbo().CurrentRoom;

            if (Room == null || !Room.RpRoom)
            {
                return;
            }

            RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabboId(Client.GetHabbo().Id);

            if (User == null)
            {
                return;
            }

            if (!User.AllowBuyItems.Contains(ItemId))
            {
                return;
            }

            RolePlayer Rp = User.Roleplayer;

            if (Rp == null || Rp.Dead || Rp.SendPrison)
            {
                return;
            }

            RPItem RpItem = ButterflyEnvironment.GetGame().GetRoleplayManager().GetItemManager().GetItem(ItemId);

            if (RpItem == null)
            {
                return;
            }

            if (!RpItem.AllowStack && Rp.GetInventoryItem(RpItem.Id) != null)
            {
                User.SendWhisperChat(ButterflyEnvironment.GetLanguageManager().TryGetValue("rp.itemown", Client.Langue));
                return;
            }

            if (!RpItem.AllowStack && Count > 1)
            {
                Count = 1;
            }

            if (Rp.Money < (RpItem.Price * Count))
            {
                return;
            }

            Rp.AddInventoryItem(RpItem.Id, Count);

            if (RpItem.Price == 0)
            {
                User.SendWhisperChat(ButterflyEnvironment.GetLanguageManager().TryGetValue("rp.itempick", Client.Langue));
            }
            else
            {
                User.SendWhisperChat(string.Format(ButterflyEnvironment.GetLanguageManager().TryGetValue("rp.itembuy", Client.Langue), RpItem.Price));
            }

            Rp.Money -= RpItem.Price * Count;
            Rp.SendUpdate();
        }
Beispiel #27
0
        public void Execute(GameClient Session, Room Room, RoomUser UserRoom, string[] Params)
        {
            if (Params.Length != 2)
            {
                return;
            }

            if (!Room.RpRoom || !Room.Pvp)
            {
                return;
            }

            RolePlayer Rp = UserRoom.Roleplayer;

            if (Rp == null)
            {
                return;
            }

            if (Rp.Dead || !Rp.PvpEnable || Rp.SendPrison || UserRoom.Freeze)
            {
                return;
            }

            int WeaponEanble = Rp.WeaponCac.Enable;

            UserRoom.ApplyEffect(WeaponEanble, true);
            UserRoom.TimerResetEffect = Rp.WeaponCac.FreezeTime + 1;

            if (UserRoom.FreezeEndCounter <= Rp.WeaponCac.FreezeTime)
            {
                UserRoom.Freeze           = true;
                UserRoom.FreezeEndCounter = Rp.WeaponCac.FreezeTime;
            }

            RoomUser TargetRoomUser = Room.GetRoomUserManager().GetRoomUserByHabbo(Params[1].ToString());

            if (TargetRoomUser == null)
            {
                RoomUser BotOrPet = Room.GetRoomUserManager().GetBotOrPetByName(Params[1].ToString());
                if (BotOrPet == null || BotOrPet.BotData == null || BotOrPet.BotData.RoleBot == null)
                {
                    return;
                }

                if (BotOrPet.BotData.RoleBot.Dead)
                {
                    return;
                }

                if (Math.Abs(BotOrPet.X - UserRoom.X) >= 2 || Math.Abs(BotOrPet.Y - UserRoom.Y) >= 2)
                {
                    return;
                }

                int Dmg = ButterflyEnvironment.GetRandomNumber(Rp.WeaponCac.DmgMin, Rp.WeaponCac.DmgMax);
                BotOrPet.BotData.RoleBot.Hit(BotOrPet, Dmg, Room, UserRoom.VirtualId, -1);
            }
            else
            {
                RolePlayer RpTwo = TargetRoomUser.Roleplayer;
                if (RpTwo == null || (!RpTwo.PvpEnable && RpTwo.AggroTimer <= 0))
                {
                    return;
                }

                if (TargetRoomUser.GetClient().GetHabbo().Id == Session.GetHabbo().Id)
                {
                    return;
                }

                if (RpTwo.Dead || RpTwo.SendPrison)
                {
                    return;
                }

                if (Math.Abs(TargetRoomUser.X - UserRoom.X) >= 2 || Math.Abs(TargetRoomUser.Y - UserRoom.Y) >= 2)
                {
                    return;
                }

                int Dmg = ButterflyEnvironment.GetRandomNumber(Rp.WeaponCac.DmgMin, Rp.WeaponCac.DmgMax);

                Rp.AggroTimer = 30;
                RpTwo.Hit(TargetRoomUser, Dmg, Room);
            }
        }
Beispiel #28
0
        public void Hit(RoomUser Bot, int Dmg, Room Room, int pAggroVId, int pTeamId)
        {
            if (this.Dead)
            {
                return;
            }

            if (this.Health <= Dmg)
            {
                RoomUser User = Room.GetRoomUserManager().GetRoomUserByVirtualId(this.AggroVirtuelId);
                if (User != null && !User.IsBot)
                {
                    RolePlayer Rp = User.Roleplayer;
                    if (Rp != null)
                    {
                        Rp.AddExp(this.Config.Health);
                    }
                }

                this.Health         = 0;
                this.Dead           = true;
                this.DeadTimer      = this.Config.DeadTimer;
                this.AggroVirtuelId = 0;
                this.AggroTimer     = 0;
                this.ResetBot       = false;
                this.ResetBotTimer  = 0;
                this.HitCount       = 0;
                this.Dodge          = false;
                this.DodgeTimer     = 0;

                Bot.SetStatus("lay", (Bot.IsPet) ? "" : "0.7");
                Bot.Freeze           = true;
                Bot.FreezeEndCounter = 0;
                Bot.IsLay            = true;
                Bot.UpdateNeeded     = true;

                if (this.Config.MoneyDrop > 0)
                {
                    Room.GetRoomItemHandler().AddTempItem(Bot.VirtualId, this.Config.DropScriptId, Bot.SetX, Bot.SetY, Bot.Z, "1", this.Config.MoneyDrop, InteractionTypeTemp.MONEY);
                }
                if (this.Config.LootItemId > 0)
                {
                    RPItem Item = ButterflyEnvironment.GetGame().GetRoleplayManager().GetItemManager().GetItem(this.Config.LootItemId);
                    if (Item != null)
                    {
                        Room.GetRoomItemHandler().AddTempItem(Bot.VirtualId, 3996, Bot.SetX, Bot.SetY, Bot.Z, Item.Name, this.Config.LootItemId, InteractionTypeTemp.RPITEM);
                    }
                }

                Bot.OnChat("A été mis K.O. ! [" + this.Health + "/" + this.Config.Health + "]", (Bot.IsPet) ? 0 : 2, true);
            }
            else
            {
                this.Health   -= Dmg;
                this.SlowTimer = 6;

                this.ResetBot      = false;
                this.ResetBotTimer = 60;

                this.AggroTimer = 0;

                if (pTeamId == -1 || pTeamId != this.Config.TeamId)
                {
                    this.AggroVirtuelId = pAggroVId;
                }

                if (!this.Dodge)
                {
                    this.HitCount += 1;
                    if (this.HitCount % this.DodgeStartCount == 0)
                    {
                        this.Dodge           = true;
                        this.DodgeTimer      = 3;
                        this.DodgeStartCount = ButterflyEnvironment.GetRandomNumber(2, 4);
                    }
                }

                Bot.OnChat(string.Format(ButterflyEnvironment.GetLanguageManager().TryGetValue("rp.hit", Room.RoomData.Langue), this.Health, this.Config.Health, Dmg), (Bot.IsPet) ? 0 : 2, true);
            }
        }
Beispiel #29
0
        public void Execute(GameClient Session, Room Room, RoomUser UserRoom, string[] Params)
        {
            if (!Room.RpRoom || !Room.Pvp || UserRoom.Freeze)
            {
                return;
            }

            RolePlayer Rp = UserRoom.Roleplayer;

            if (Rp == null)
            {
                return;
            }

            if (Rp.Dead || !Rp.PvpEnable || Rp.SendPrison)
            {
                return;
            }

            if (Rp.Munition <= 0)
            {
                UserRoom.SendWhisperChat(ButterflyEnvironment.GetLanguageManager().TryGetValue("rp.munitionnotfound", Session.Langue));
                return;
            }

            if (Rp.GunLoad <= 0)
            {
                UserRoom.SendWhisperChat(ButterflyEnvironment.GetLanguageManager().TryGetValue("rp.reloadweapon", Session.Langue));
                return;
            }

            MovementDirection movement = MovementManagement.GetMovementByDirection(UserRoom.RotBody);

            int WeaponEanble = Rp.WeaponGun.Enable;

            UserRoom.ApplyEffect(WeaponEanble, true);
            UserRoom.TimerResetEffect = Rp.WeaponGun.FreezeTime + 1;

            Rp.AggroTimer = 30;

            if (UserRoom.FreezeEndCounter <= Rp.WeaponGun.FreezeTime)
            {
                UserRoom.Freeze           = true;
                UserRoom.FreezeEndCounter = Rp.WeaponGun.FreezeTime;
            }

            for (int i = 0; i < Rp.WeaponGun.FreezeTime; i++)
            {
                if (Rp.Munition <= 0 || Rp.GunLoad <= 0)
                {
                    break;
                }

                Rp.Munition--;
                Rp.GunLoad--;

                int Dmg = ButterflyEnvironment.GetRandomNumber(Rp.WeaponGun.DmgMin, Rp.WeaponGun.DmgMax);
                Room.GetProjectileManager().AddProjectile(UserRoom.VirtualId, UserRoom.SetX, UserRoom.SetY, UserRoom.SetZ, movement, Dmg, Rp.WeaponGun.Distance);
            }

            Rp.SendUpdate();
        }
Beispiel #30
0
        public void Parse(GameClient Session, ClientPacket Packet)
        {
            if (Session == null || Session.GetHabbo() == null || !Session.GetHabbo().InRoom)
            {
                return;
            }

            Room Room = Session.GetHabbo().CurrentRoom;

            if (Room == null)
            {
                return;
            }

            RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabboId(Session.GetHabbo().Id);

            if (User == null)
            {
                return;
            }

            if (Room.RpRoom)
            {
                RolePlayer Rp = User.Roleplayer;
                if (Rp != null && Rp.Dead)
                {
                    return;
                }
            }

            string Message = StringCharFilter.Escape(Packet.PopString());

            if (Message.Length > 100)
            {
                Message = Message.Substring(0, 100);
            }

            int Colour = Packet.PopInt();

            ChatStyle Style = null;

            if (!ButterflyEnvironment.GetGame().GetChatManager().GetChatStyles().TryGetStyle(Colour, out Style) || (Style.RequiredRight.Length > 0 && !Session.GetHabbo().HasFuse(Style.RequiredRight)))
            {
                Colour = 0;
            }

            User.Unidle();

            if (Session.GetHabbo().Rank < 5U && Room.RoomMuted && !User.IsOwner() && !Session.GetHabbo().CurrentRoom.CheckRights(Session))
            {
                User.SendWhisperChat(ButterflyEnvironment.GetLanguageManager().TryGetValue("room.muted", Session.Langue));
                return;
            }

            if (Room.GetJanken().PlayerStarted(User))
            {
                if (!Room.GetJanken().PickChoix(User, Message))
                {
                    User.SendWhisperChat(ButterflyEnvironment.GetLanguageManager().TryGetValue("janken.choice", Session.Langue));
                }

                return;
            }
            if (Room.UserIsMuted(Session.GetHabbo().Id))
            {
                if (!Room.HasMuteExpired(Session.GetHabbo().Id))
                {
                    User.GetClient().SendNotification(ButterflyEnvironment.GetLanguageManager().TryGetValue("user.muted", Session.Langue));
                    return;
                }
                else
                {
                    Room.RemoveMute(Session.GetHabbo().Id);
                }
            }

            TimeSpan timeSpan = DateTime.Now - Session.GetHabbo().spamFloodTime;

            if (timeSpan.TotalSeconds > (double)Session.GetHabbo().spamProtectionTime&& Session.GetHabbo().spamEnable)
            {
                User.FloodCount = 0;
                Session.GetHabbo().spamEnable = false;
            }
            else if (timeSpan.TotalSeconds > 4.0)
            {
                User.FloodCount = 0;
            }

            if (timeSpan.TotalSeconds < (double)Session.GetHabbo().spamProtectionTime&& Session.GetHabbo().spamEnable)
            {
                int i = Session.GetHabbo().spamProtectionTime - timeSpan.Seconds;
                User.GetClient().SendPacket(new FloodControlComposer(i));
                return;
            }
            else if (timeSpan.TotalSeconds < 4.0 && User.FloodCount > 5 && !Session.GetHabbo().HasFuse("fuse_mod"))
            {
                Session.GetHabbo().spamProtectionTime = (Room.RpRoom) ? 5 : 30;
                Session.GetHabbo().spamEnable         = true;

                User.GetClient().SendPacket(new FloodControlComposer(Session.GetHabbo().spamProtectionTime - timeSpan.Seconds));

                return;
            }
            else if (Message.Length > 40 && Message == User.LastMessage && User.LastMessageCount == 1)
            {
                User.LastMessageCount = 0;
                User.LastMessage      = "";

                Session.GetHabbo().spamProtectionTime = (Room.RpRoom) ? 5 : 30;
                Session.GetHabbo().spamEnable         = true;
                User.GetClient().SendPacket(new FloodControlComposer(Session.GetHabbo().spamProtectionTime - timeSpan.Seconds));
                return;
            }
            else
            {
                if (Message == User.LastMessage && Message.Length > 40)
                {
                    User.LastMessageCount++;
                }

                User.LastMessage = Message;

                Session.GetHabbo().spamFloodTime = DateTime.Now;
                User.FloodCount++;

                if (Session != null)
                {
                    if (Message.StartsWith("@red@") || Message.StartsWith("@rouge@"))
                    {
                        User.ChatTextColor = "@red@";
                    }
                    if (Message.StartsWith("@cyan@"))
                    {
                        User.ChatTextColor = "@cyan@";
                    }
                    if (Message.StartsWith("@blue@") || Message.StartsWith("@bleu@"))
                    {
                        User.ChatTextColor = "@blue@";
                    }
                    if (Message.StartsWith("@green@") || Message.StartsWith("@vert@"))
                    {
                        User.ChatTextColor = "@green@";
                    }
                    if (Message.StartsWith("@purple@") || Message.StartsWith("@violet@"))
                    {
                        User.ChatTextColor = "@purple@";
                    }
                    if (Message.StartsWith("@black@") || Message.StartsWith("@noir@"))
                    {
                        User.ChatTextColor = "";
                    }
                }

                if (Message.StartsWith(":", StringComparison.CurrentCulture) && ButterflyEnvironment.GetGame().GetChatManager().GetCommands().Parse(Session, User, Room, Message))
                {
                    Room.GetChatMessageManager().AddMessage(Session.GetHabbo().Id, Session.GetHabbo().Username, Room.Id, string.Format("{0} a utiliser la commande {1}", Session.GetHabbo().Username, Message));
                    return;
                }

                if (Session != null && !User.IsBot)
                {
                    if (Session.Antipub(Message, "<TCHAT>", Room.Id))
                    {
                        return;
                    }

                    ButterflyEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, QuestType.SOCIAL_CHAT, 0);
                    Session.GetHabbo().GetChatMessageManager().AddMessage(Session.GetHabbo().Id, Session.GetHabbo().Username, Room.Id, Message);
                    Room.GetChatMessageManager().AddMessage(Session.GetHabbo().Id, Session.GetHabbo().Username, Room.Id, Message);

                    if (User.transfbot)
                    {
                        Colour = 2;
                    }
                }
            }

            if (!Session.GetHabbo().HasFuse("word_filter_override"))
            {
                Message = ButterflyEnvironment.GetGame().GetChatManager().GetFilter().CheckMessage(Message);
            }

            if (Room.AllowsShous(User, Message))
            {
                User.SendWhisperChat(Message, false);
                return;
            }
            Room.OnUserSay(User, Message, false);

            if (User.IsSpectator)
            {
                return;
            }

            if (!string.IsNullOrEmpty(User.ChatTextColor))
            {
                Message = User.ChatTextColor + " " + Message;
            }

            User.OnChat(Message, Colour, false);
        }