private static void CommandPets(this Pet[] pets, PetCommand command) { Network.Send(new PetCommandMessage() { Command = command }); }
private void CommandPet(PetCommand command) { Network.Send(new PetCommandMessage() { Command = command, Pets = new PetBase[1] { this } }); }
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; } }
/// <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; } }