コード例 #1
0
ファイル: ModifyCommands.cs プロジェクト: spadd/CypherCore
        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 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);
        }
コード例 #3
0
ファイル: PetCommands.cs プロジェクト: aufbau1/CypherCore
        static bool HandlePetCreateCommand(CommandHandler handler, StringArguments args)
        {
            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(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.SetCreatorGUID(player.GetGUID());
            pet.SetFaction(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.SetLevel(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.SetLevel(creatureTarget.GetLevel());

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

            return(true);
        }