示例#1
0
        static bool HandleModifyFactionCommand(StringArguments args, CommandHandler handler)
        {
            string pfactionid = handler.extractKeyFromLink(args, "Hfaction");

            Creature target = handler.getSelectedCreature();

            if (!target)
            {
                handler.SendSysMessage(CypherStrings.SelectCreature);
                return(false);
            }

            if (!uint.TryParse(pfactionid, out uint factionid))
            {
                uint  _factionid = target.GetFaction();
                uint  _flag      = target.m_unitData.Flags;
                ulong _npcflag   = (ulong)target.m_unitData.NpcFlags[0] << 32 | target.m_unitData.NpcFlags[1];
                uint  _dyflag    = target.m_objectData.DynamicFlags;
                handler.SendSysMessage(CypherStrings.CurrentFaction, target.GetGUID().ToString(), _factionid, _flag, _npcflag, _dyflag);
                return(true);
            }

            if (!uint.TryParse(args.NextString(), out uint flag))
            {
                flag = target.m_unitData.Flags;
            }

            if (!ulong.TryParse(args.NextString(), out ulong npcflag))
            {
                npcflag = (ulong)target.m_unitData.NpcFlags[0] << 32 | target.m_unitData.NpcFlags[1];
            }

            if (!uint.TryParse(args.NextString(), out uint dyflag))
            {
                dyflag = target.m_objectData.DynamicFlags;
            }

            if (!CliDB.FactionTemplateStorage.ContainsKey(factionid))
            {
                handler.SendSysMessage(CypherStrings.WrongFaction, factionid);
                return(false);
            }

            handler.SendSysMessage(CypherStrings.YouChangeFaction, target.GetGUID().ToString(), factionid, flag, npcflag, dyflag);

            target.SetFaction(factionid);
            target.SetUnitFlags((UnitFlags)flag);
            target.SetNpcFlags((NPCFlags)(npcflag & 0xFFFFFFFF));
            target.SetNpcFlags2((NPCFlags2)(npcflag >> 32));
            target.SetDynamicFlags((UnitDynFlags)dyflag);

            return(true);
        }
示例#2
0
        static bool HandleModifyFactionCommand(StringArguments args, CommandHandler handler)
        {
            string pfactionid = handler.extractKeyFromLink(args, "Hfaction");

            Creature target = handler.getSelectedCreature();

            if (!target)
            {
                handler.SendSysMessage(CypherStrings.SelectCreature);
                return(false);
            }

            if (!uint.TryParse(pfactionid, out uint factionid))
            {
                uint  _factionid = target.getFaction();
                uint  _flag      = target.GetUInt32Value(UnitFields.Flags);
                ulong _npcflag   = target.GetUInt64Value(UnitFields.NpcFlags);
                uint  _dyflag    = target.GetUInt32Value(ObjectFields.DynamicFlags);
                handler.SendSysMessage(CypherStrings.CurrentFaction, target.GetGUID().ToString(), _factionid, _flag, _npcflag, _dyflag);
                return(true);
            }

            if (!uint.TryParse(args.NextString(), out uint flag))
            {
                flag = target.GetUInt32Value(UnitFields.Flags);
            }

            if (!ulong.TryParse(args.NextString(), out ulong npcflag))
            {
                npcflag = target.GetUInt64Value(UnitFields.NpcFlags);
            }

            if (!uint.TryParse(args.NextString(), out uint dyflag))
            {
                dyflag = target.GetUInt32Value(ObjectFields.DynamicFlags);
            }

            if (!CliDB.FactionTemplateStorage.ContainsKey(factionid))
            {
                handler.SendSysMessage(CypherStrings.WrongFaction, factionid);
                return(false);
            }

            handler.SendSysMessage(CypherStrings.YouChangeFaction, target.GetGUID().ToString(), factionid, flag, npcflag, dyflag);

            target.SetFaction(factionid);
            target.SetUInt32Value(UnitFields.Flags, flag);
            target.SetUInt64Value(UnitFields.NpcFlags, npcflag);
            target.SetUInt32Value(ObjectFields.DynamicFlags, dyflag);

            return(true);
        }
示例#3
0
        static bool HandleCastTargetCommad(StringArguments args, CommandHandler handler)
        {
            Creature caster = handler.getSelectedCreature();

            if (!caster)
            {
                handler.SendSysMessage(CypherStrings.SelectCharOrCreature);
                return(false);
            }

            if (!caster.GetVictim())
            {
                handler.SendSysMessage(CypherStrings.SelectedTargetNotHaveVictim);
                return(false);
            }

            // number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form
            uint spellId = handler.extractSpellIdFromLink(args);

            if (spellId == 0)
            {
                return(false);
            }

            if (CheckSpellExistsAndIsValid(handler, spellId))
            {
                return(false);
            }

            string triggeredStr = args.NextString();

            if (!string.IsNullOrEmpty(triggeredStr))
            {
                if (triggeredStr != "triggered")
                {
                    return(false);
                }
            }

            bool triggered = (triggeredStr != null);

            caster.CastSpell(caster.GetVictim(), spellId, triggered);

            return(true);
        }
示例#4
0
        static bool HandlePetCreateCommand(StringArguments args, CommandHandler handler)
        {
            Player   player         = handler.GetSession().GetPlayer();
            Creature creatureTarget = handler.getSelectedCreature();

            if (!creatureTarget || creatureTarget.IsPet() || creatureTarget.IsTypeId(TypeId.Player))
            {
                handler.SendSysMessage(CypherStrings.SelectCreature);
                return(false);
            }

            CreatureTemplate creatureTemplate = creatureTarget.GetCreatureTemplate();

            // Creatures with family CreatureFamily.None crashes the server
            if (creatureTemplate.Family == CreatureFamily.None)
            {
                handler.SendSysMessage("This creature cannot be tamed. (Family id: 0).");
                return(false);
            }

            if (!player.GetPetGUID().IsEmpty())
            {
                handler.SendSysMessage("You already have a pet");
                return(false);
            }

            // Everything looks OK, create new pet
            Pet pet = new Pet(player, PetType.Hunter);

            if (!pet.CreateBaseAtCreature(creatureTarget))
            {
                handler.SendSysMessage("Error 1");
                return(false);
            }

            creatureTarget.setDeathState(DeathState.JustDied);
            creatureTarget.RemoveCorpse();
            creatureTarget.SetHealth(0); // just for nice GM-mode view

            pet.SetGuidValue(UnitFields.CreatedBy, player.GetGUID());
            pet.SetUInt32Value(UnitFields.FactionTemplate, player.getFaction());

            if (!pet.InitStatsForLevel(creatureTarget.getLevel()))
            {
                Log.outError(LogFilter.ChatSystem, "InitStatsForLevel() in EffectTameCreature failed! Pet deleted.");
                handler.SendSysMessage("Error 2");
                return(false);
            }

            // prepare visual effect for levelup
            pet.SetUInt32Value(UnitFields.Level, creatureTarget.getLevel() - 1);

            pet.GetCharmInfo().SetPetNumber(Global.ObjectMgr.GeneratePetNumber(), true);
            // this enables pet details window (Shift+P)
            pet.InitPetCreateSpells();
            pet.SetFullHealth();

            pet.GetMap().AddToMap(pet.ToCreature());

            // visual effect for levelup
            pet.SetUInt32Value(UnitFields.Level, creatureTarget.getLevel());

            player.SetMinion(pet, true);
            pet.SavePetToDB(PetSaveMode.AsCurrent);
            player.PetSpellInitialize();

            return(true);
        }