Exemple #1
0
 private static void CommandPets(this Pet[] pets, PetCommand command)
 {
     Network.Send(new PetCommandMessage()
     {
         Command = command
     });
 }
Exemple #2
0
 private void CommandPet(PetCommand command)
 {
     Network.Send(new PetCommandMessage()
     {
         Command = command,
         Pets    = new PetBase[1] {
             this
         }
     });
 }
Exemple #3
0
        public static void F_COMMAND_CONTROLLED(BaseClient client, PacketIn packet)
        {
            GameClient cclient = (GameClient)client;

            if (cclient.Plr?.CrrInterface == null)
            {
                return;
            }

            IPetCareerInterface petInterface = cclient.Plr.CrrInterface as IPetCareerInterface;

            Pet myPet = petInterface?.myPet;

            if (myPet == null)
            {
                return;
            }

            ushort     abilityid = packet.GetUint16();
            PetCommand command   = (PetCommand)packet.GetUint8();

            switch (command)
            {
            case PetCommand.Stay:
                if (cclient.Plr.IsMounted)
                {
                    return;
                }
                myPet.MvtInterface.StopMove();
                myPet.FollowMode = 1;
                myPet.IsHeeling  = false;
                myPet.AiInterface.Debugger?.SendClientMessage("[MR]: Holding position by request.");
                myPet.SendPetUpdate();
                break;     // stay

            case PetCommand.Follow:
                if (cclient.Plr.IsMounted)
                {
                    return;
                }
                myPet.AiInterface.ProcessCombatEnd();
                if (myPet.StsInterface.Speed == 0)
                {
                    break;
                }
                myPet.MvtInterface.ScaleSpeed(myPet.SpeedMult);
                myPet.MvtInterface.Recall(cclient.Plr);
                myPet.FollowMode = 2;
                myPet.AiInterface.Debugger?.SendClientMessage("[MR]: Heeling by request.");
                myPet.SendPetUpdate();
                break;     // heel

            case PetCommand.Passive:
                myPet.AiInterface.SetBrain(new PassiveBrain(myPet));
                petInterface.AIMode = 3;
                myPet.AIMode        = 3;
                myPet.AiInterface.Debugger?.SendClientMessage("[MR]: Passive state.");
                break;     // mode Passive

            case PetCommand.Defensive:
                myPet.AiInterface.SetBrain(new GuardBrain(myPet));
                petInterface.AIMode = 4;
                myPet.AIMode        = 4;
                myPet.AiInterface.Debugger?.SendClientMessage("[MR]: Defensive state.");
                break;     // mode Defensive

            case PetCommand.Aggressive:
                myPet.AiInterface.SetBrain(new AggressiveBrain(myPet));
                petInterface.AIMode = 5;
                myPet.AIMode        = 5;
                myPet.AiInterface.Debugger?.SendClientMessage("[MR]: Aggressive state.");
                break;     // mode Aggressive

            case PetCommand.Attack:
                long now = TCPManager.GetTimeStampMS();
                if (cclient.Plr.IsMounted || now <= myPet.AttackReuseTimer + COMMAND_ATTACK_REUSE)
                {
                    return;
                }
                myPet.AttackReuseTimer = now;
                Unit target = cclient.Plr.CbtInterface.GetTarget(TargetTypes.TARGETTYPES_TARGET_ENEMY);
                if (target == null || !CombatInterface.CanAttack(myPet, target))
                {
                    return;
                }

                if (!cclient.Plr.LOSHit(target))
                {
                    return;
                }

                myPet.AiInterface.Debugger?.SendClientMessage("[MR]: Attacking by request.");
                myPet.IsHeeling  = false;
                myPet.FollowMode = 0;
                myPet.Owner.CbtInterface.RefreshCombatTimer();
                myPet.AiInterface.ProcessCombatStart(target);
                myPet.SendPetUpdate();
                break;     //attack

            case PetCommand.Release:
                myPet.Destroy();
                break;

            case PetCommand.AbilityCast:
                if (cclient.Plr.IsMounted)
                {
                    return;
                }
                foreach (NPCAbility pa in myPet.AbtInterface.NPCAbilities)
                {
                    if (pa.Entry == abilityid)
                    {
                        if (pa.Range > 0)
                        {
                            Unit abTarget = myPet.CbtInterface.GetCurrentTarget();
                            if (abTarget == null || !myPet.LOSHit(abTarget))
                            {
                                return;
                            }
                        }
                        myPet.AbtInterface.StartCast(myPet, abilityid, 1);
                        break;
                    }
                }
                break;

            case PetCommand.Autocast:
                if (cclient.Plr.IsMounted)
                {
                    return;
                }
                foreach (NPCAbility pa in myPet.AbtInterface.NPCAbilities)
                {
                    if (pa.Entry != abilityid)
                    {
                        continue;
                    }

                    pa.AutoUse = !pa.AutoUse;
                    myPet.SendPetUpdate();
                    break;
                }
                break;
            }
        }
Exemple #4
0
        /// <summary>
        ///     Called when [user say].
        /// </summary>
        /// <param name="user">The user.</param>
        /// <param name="msg">The MSG.</param>
        internal override void OnUserSay(RoomUser user, string msg)
        {
            RoomUser roomUser = GetRoomUser();

            if (roomUser.PetData.OwnerId != user.GetClient().GetHabbo().Id)
            {
                return;
            }

            if (string.IsNullOrEmpty(msg))
            {
                msg = " ";
            }

            PetCommand command = PetCommandHandler.GetPetCommandByInput(msg.Substring(1).ToLower());

            if (!command.PetTypes.Contains(roomUser.PetData.Type))
            {
                return;
            }

            if (roomUser.PetData.Level < command.MinLevel)
            {
                return;
            }

            RemovePetStatus();

            _actionTimer = 25;
            _energyTimer = 10;

            if (roomUser.PetData.Energy < command.LostEnergy && roomUser.PetData.Nutrition < 25 ||
                roomUser.PetData.Energy < command.LostEnergy)
            {
                roomUser.UpdateNeeded = true;

                string[] valueLazy   = PetLocale.GetValue("pet.lazy");
                string   messageLazy = valueLazy[new Random().Next(0, valueLazy.Length - 1)];

                roomUser.Chat(null, messageLazy, false, 0);

                return;
            }

            roomUser.UpdateNeeded = true;

            roomUser.PetData.AddExperience(command.GainedExperience);

            roomUser.Statusses.Add(command.PetStatus, string.Empty);
            roomUser.Statusses.Add("gst", command.PetGesture);

            roomUser.FollowingOwner = null;

            SubtractAttributes(command.LostEnergy);

            Random random = new Random();

            string[] value   = PetLocale.GetValue(command.PetSpeech);
            string   message = value[random.Next(0, value.Length - 1)];

            roomUser.Statusses.Clear();
            roomUser.Chat(null, message, false, 0);

            /* other gestures that isnt listed */

            // roomUser.Statusses.Add("jmp", "");
            //roomUser.Statusses.Add("gst", "joy");

            //roomUser.AddStatus("lay", "");
            //roomUser.AddStatus("gst", "eyb");

            //roomUser.Statusses.Add("beg", "");
            //roomUser.Statusses.Add("gst", "sml");

            switch (command.CommandAction)
            {
            case "follow":
                roomUser.FollowingOwner = roomUser;

                RemovePetStatus();

                switch (roomUser.RotBody)
                {
                case 0:
                    roomUser.MoveTo(roomUser.X + 2, roomUser.Y);
                    break;

                case 1:
                    roomUser.MoveTo(roomUser.X - 2, roomUser.Y - 2);
                    break;

                case 2:
                    roomUser.MoveTo(roomUser.X, roomUser.Y + 2);
                    break;

                case 3:
                    roomUser.MoveTo(roomUser.X + 2, roomUser.Y - 2);
                    break;

                case 4:
                    roomUser.MoveTo(roomUser.X - 2, roomUser.Y);
                    break;

                case 5:
                    roomUser.MoveTo(roomUser.X + 2, roomUser.Y + 2);
                    break;

                case 6:
                    roomUser.MoveTo(roomUser.X, roomUser.Y - 2);
                    break;

                case 7:
                    roomUser.MoveTo(roomUser.X - 2, roomUser.Y + 2);
                    break;
                }

                break;

            case "breed":
                Point coord = new Point();

                switch (roomUser.PetData.Type)
                {
                case "pet_terrier":
                    coord = GetRoom().GetRoomItemHandler().GetRandomBreedingTerrier(roomUser.PetData);
                    break;

                case "pet_bear":
                    coord = GetRoom().GetRoomItemHandler().GetRandomBreedingBear(roomUser.PetData);
                    break;
                }

                if (coord == new Point())
                {
                    ServerMessage alert = new ServerMessage(LibraryParser.OutgoingRequest("PetBreedErrorMessageComposer"));

                    alert.AppendInteger(0);

                    user.GetClient().SendMessage(alert);
                }

                roomUser.MoveTo(coord, true);

                break;

            case "sleep":
                string[] valueSleep   = PetLocale.GetValue("tired");
                string   messageSleep = valueSleep[new Random().Next(0, valueSleep.Length - 1)];

                roomUser.Chat(null, messageSleep, false, 0);
                break;

            case "unknown":
                string[] valueUnknown   = PetLocale.GetValue("pet.unknowncommand");
                string   messageUnknown = valueUnknown[new Random().Next(0, valueUnknown.Length - 1)];

                roomUser.Chat(null, messageUnknown, false, 0);
                break;

            case "lazy":
                string[] valueLazy   = PetLocale.GetValue("pet.lazy");
                string   messageLazy = valueLazy[new Random().Next(0, valueLazy.Length - 1)];

                roomUser.Chat(null, messageLazy, false, 0);
                break;

            case "nest":
                RemovePetStatus();

                IEnumerable <RoomItem> petNest =
                    GetRoom()
                    .GetRoomItemHandler()
                    .FloorItems.Values.Where(x => x.GetBaseItem().InteractionType == Interaction.PetNest);

                IEnumerable <RoomItem> enumerable = petNest as RoomItem[] ?? petNest.ToArray();

                // @todo rewrite this to redo actionsss
                if (!enumerable.Any())
                {
                    command.CommandAction = "lazy";
                }

                RoomItem roomItems = enumerable.FirstOrDefault();

                if (roomItems != null)
                {
                    roomUser.MoveTo(roomItems.X, roomItems.Y);
                }

                roomUser.PetData.AddExperience(40);

                break;

            case "default":
                break;
            }
        }