Exemplo n.º 1
0
        /// <summary>
        /// 取内功技能掉内力值
        /// </summary>
        /// <param name="BaseObject"></param>
        /// <param name="UserMagic"></param>
        /// <param name="Power"></param>
        /// <returns></returns>
        public unsafe static int GetNGPow(TBaseObject BaseObject, TUserMagic *UserMagic, int Power)
        {
            int result = 0;
            int nNHPoint;

            if ((UserMagic != null) && (BaseObject != null))
            {
                if ((BaseObject.m_btRaceServer == Grobal2.RC_PLAYOBJECT))
                {
                    nNHPoint = ((TPlayObject)(BaseObject)).GetSpellPoint(UserMagic);
                    if (((TPlayObject)(BaseObject)).m_Skill69NH >= nNHPoint)
                    {
                        ((TPlayObject)(BaseObject)).m_Skill69NH = (uint)HUtil32._MAX(0, ((TPlayObject)(BaseObject)).m_Skill69NH - nNHPoint);
                        ((TPlayObject)(BaseObject)).SendRefMsg(Grobal2.RM_MAGIC69SKILLNH, 0, ((TPlayObject)(BaseObject)).m_Skill69NH, ((TPlayObject)(BaseObject)).m_Skill69MaxNH, 0, "");
                        result = (int)HUtil32.Round((double)Power * ((UserMagic->btLevel + 1) * (M2Share.g_Config.nNGSkillRate / 100))); // 计算攻击力
                        ((TPlayObject)(BaseObject)).NGMagic_Lvexp(UserMagic);                                                            // 内功技能升级
                    }
                }
                else if ((BaseObject.m_btRaceServer == Grobal2.RC_HEROOBJECT))
                {
                    nNHPoint = ((THeroObject)(BaseObject)).GetSpellPoint(UserMagic);
                    if (((THeroObject)(BaseObject)).m_Skill69NH >= nNHPoint)
                    {
                        ((THeroObject)(BaseObject)).m_Skill69NH = (uint)HUtil32._MAX(0, ((THeroObject)(BaseObject)).m_Skill69NH - nNHPoint);
                        ((THeroObject)(BaseObject)).SendRefMsg(Grobal2.RM_MAGIC69SKILLNH, 0, ((THeroObject)(BaseObject)).m_Skill69NH, ((THeroObject)(BaseObject)).m_Skill69MaxNH, 0, "");
                        result = (int)HUtil32.Round((double)Power * ((UserMagic->btLevel + 1) * (M2Share.g_Config.nNGSkillRate / 100))); // 计算攻击力
                        ((THeroObject)(BaseObject)).NGMAGIC_LVEXP(UserMagic);                                                            // 内功技能升级
                    }
                }
            }
            return(result);
        }
Exemplo n.º 2
0
        public override void Run()
        {
            int         nAbs;
            int         nRage = 9999;
            TBaseObject BaseObject;
            TBaseObject TargeTBaseObject = null;

            if (!this.m_boDeath && !this.m_boGhost && (this.m_wStatusTimeArr[Grobal2.POISON_STONE] == 0))
            {
                if ((HUtil32.GetTickCount() - this.m_dwSearchEnemyTick) >= 5000)
                {
                    this.m_dwSearchEnemyTick = HUtil32.GetTickCount();
                    if (this.m_VisibleActors.Count > 0)
                    {
                        for (int I = 0; I < this.m_VisibleActors.Count; I++)
                        {
                            BaseObject = this.m_VisibleActors[I].BaseObject;
                            if (BaseObject.m_boDeath)
                            {
                                continue;
                            }
                            if (this.IsProperTarget(BaseObject))
                            {
                                if (!BaseObject.m_boHideMode || this.m_boCoolEye)
                                {
                                    nAbs = Math.Abs(this.m_nCurrX - BaseObject.m_nCurrX) + Math.Abs(this.m_nCurrY - BaseObject.m_nCurrY);
                                    if (nAbs < nRage)
                                    {
                                        nRage            = nAbs;
                                        TargeTBaseObject = BaseObject;
                                    }
                                }
                            }
                        }
                    }
                    if (TargeTBaseObject != null)
                    {
                        this.SetTargetCreat(TargeTBaseObject);
                    }
                }
                if (((0 - this.m_dwWalkTick) > this.m_nWalkSpeed) && (this.m_TargetCret != null))
                {
                    if ((Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 4) && (Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 4))
                    {
                        if ((Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 2) && (Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 2))
                        {
                            if (HUtil32.Random(5) == 0)
                            {
                                this.GetBackPosition(ref this.m_nTargetX, ref this.m_nTargetY);
                            }
                        }
                        else
                        {
                            this.GetBackPosition(ref this.m_nTargetX, ref this.m_nTargetY);
                        }
                    }
                }
            }
            base.Run();
        }
Exemplo n.º 3
0
 public TEvent(TEnvirnoment tEnvir, int nTX, int nTY, int nType, uint dwETime, bool boVisible)
 {
     m_dwOpenStartTick = HUtil32.GetTickCount();
     m_nEventType      = nType;
     m_nEventParam     = 0;
     m_dwContinueTime  = dwETime;
     m_boVisible       = boVisible;
     m_boClosed        = false;
     m_Envir           = tEnvir;
     m_nX            = nTX;
     m_nY            = nTY;
     m_boActive      = true;
     m_nDamage       = 0;
     m_OwnBaseObject = null;
     m_dwRunStart    = HUtil32.GetTickCount();
     m_dwRunTick     = 500;
     if ((m_Envir != null) && m_boVisible)
     {
         m_Envir.AddToMap(m_nX, m_nY, Grobal2.OS_EVENTOBJECT, this);
     }
     else
     {
         m_boVisible = false;
     }
 }
Exemplo n.º 4
0
        /// <summary>
        /// 被击中
        /// </summary>
        /// <param name="hiter"></param>
        public virtual void Struck(TBaseObject hiter)
        {
            byte btDir = 0;

            this.m_dwStruckTick = HUtil32.GetTickCount();
            if (hiter != null)
            {
                if ((this.m_TargetCret == null) || this.GetAttackDir(this.m_TargetCret, ref btDir) || (HUtil32.Random(6) == 0))
                {
                    if (this.IsProperTarget(hiter))
                    {
                        this.SetTargetCreat(hiter);
                    }
                }
            }
            if (this.m_boAnimal) // 是动物
            {
                this.m_nMeatQuality = this.m_nMeatQuality - HUtil32.Random(300);
                if (this.m_nMeatQuality < 0)
                {
                    this.m_nMeatQuality = 0;
                }
            }
            this.m_dwHitTick = Convert.ToUInt32(this.m_dwHitTick + (150 - HUtil32._MIN(130, this.m_Abil.Level * 4)));
        }
Exemplo n.º 5
0
        public void HeroLoyal(TPlayObject PlayObject, string[] @Params)
        {
            string sHumanName = @Params.Length > 0 ? @Params[0] : "";
            int    nHeroLoyal = @Params.Length > 1 ? int.Parse(@Params[1]) : 0;


            if ((sHumanName == "") || (nHeroLoyal < 0) || (nHeroLoyal > 10000) || ((sHumanName != "") && (sHumanName[0] == '?')))
            {
                if (GameConfig.boGMShowFailMsg)
                {
                    PlayObject.SysMsg(string.Format(GameMsgDef.g_sGameCommandParamUnKnow, base.Attributes.Name, GameMsgDef.g_sGameCommandHeroLoyalHelpMsg), TMsgColor.c_Red, TMsgType.t_Hint);
                }
                return;
            }
            TBaseObject m_PlayObject = UserEngine.GetHeroObject(sHumanName);

            if (m_PlayObject != null)
            {
                ((THeroObject)(m_PlayObject)).m_nLoyal = nHeroLoyal;
                PlayObject.m_DefMsg = EncryptUnit.MakeDefaultMsg(Grobal2.SM_HEROABILITY, ((THeroObject)(m_PlayObject)).m_btGender, 0, ((THeroObject)(m_PlayObject)).m_btJob, ((THeroObject)(m_PlayObject)).m_nLoyal, 0);
                //替换上面一句
                //SendSocket(this.m_DefMsg, EncryptUnit.EncodeBuffer(((THeroObject)(PlayObject)).m_WAbil, sizeof(TAbility)));
                PlayObject.SysMsg("[英雄忠诚度调整] " + sHumanName + " -> (" + (((THeroObject)(m_PlayObject)).m_nLoyal / 100).ToString() + "%)", TMsgColor.BB_Fuchsia, TMsgType.t_Hint);
                if (GameConfig.boShowMakeItemMsg)
                {
                    M2Share.MainOutMessage("[英雄忠诚度调整] " + sHumanName + " -> (" + (((THeroObject)(m_PlayObject)).m_nLoyal).ToString() + ")");
                }
            }
            else
            {
                PlayObject.SysMsg("英雄" + sHumanName + "现在不在线。", TMsgColor.c_Red, TMsgType.t_Hint);
            }
        }
Exemplo n.º 6
0
        public override void Attack(TBaseObject TargeTBaseObject, int nDir)
        {
            TAbility WAbil  = m_WAbil;
            int      nPower = GetAttackPower(HUtil32.LoWord(WAbil.DC), ((short)HUtil32.HiWord(WAbil.DC) - HUtil32.LoWord(WAbil.DC)));

            HitMagAttackTarget(TargeTBaseObject, nPower / 2, nPower / 2, true);
        }
Exemplo n.º 7
0
        /// <summary>
        /// 物理攻击
        /// </summary>
        /// <param name="TargeTBaseObject">目标</param>
        /// <param name="nHitPower">物理伤害值</param>
        /// <param name="nMagPower">魔法伤害值</param>
        /// <param name="boFlag"></param>
        public void HitMagAttackTarget(TBaseObject TargeTBaseObject, int nHitPower, int nMagPower, bool boFlag)
        {
            int nDamage;

            this.m_btDirection = M2Share.GetNextDirection(this.m_nCurrX, this.m_nCurrY, TargeTBaseObject.m_nCurrX, TargeTBaseObject.m_nCurrY);
            IList <TPlayObject> BaseObjectList = new List <TPlayObject>();

            try
            {
                this.m_PEnvir.GeTBaseObjects(TargeTBaseObject.m_nCurrX, TargeTBaseObject.m_nCurrY, false, BaseObjectList);
                foreach (var BaseObject in BaseObjectList)
                {
                    if (this.IsProperTarget(BaseObject))
                    {
                        nDamage  = 0;
                        nDamage += BaseObject.GetHitStruckDamage(this, nHitPower);
                        nDamage += BaseObject.GetMagStruckDamage(this, nMagPower);
                        if (nDamage > 0)
                        {
                            BaseObject.StruckDamage(nDamage);
                            BaseObject.SendDelayMsg(Grobal2.RM_STRUCK, Grobal2.RM_10101, nDamage, BaseObject.m_WAbil.HP, BaseObject.m_WAbil.MaxHP, Parse(this), "", 200);
                        }
                    }
                }
            }
            finally
            {
                Dispose(BaseObjectList);
                BaseObjectList = null;
            }
            this.SendRefMsg(Grobal2.RM_HIT, this.m_btDirection, this.m_nCurrX, this.m_nCurrY, 0, "");
        }
Exemplo n.º 8
0
 /// <summary>
 /// 破护体神盾
 /// </summary>
 /// <param name="PlayObject"></param>
 public static void FinancialsDefence(TBaseObject PlayObject)
 {
     if (PlayObject.m_boProtectionDefence)                                 // 如果目标正使用护体神盾
     {
         PlayObject.m_wStatusTimeArr[Grobal2.STATE_ProtectionDEFENCE] = 1; // 触发破盾的动画
     }
 }
Exemplo n.º 9
0
        /// <summary>
        /// 攻击怪物会执行此方法
        /// </summary>
        /// <param name="ProcessMsg"></param>
        /// <returns></returns>
        public override bool Operate(TProcessMessage ProcessMsg)
        {
            bool result = false;
            byte nCode  = 0;

            try
            {
                if (ProcessMsg.wIdent == Grobal2.RM_STRUCK) // 打击
                {
                    nCode = 1;
                    TBaseObject BaseObject = HUtil32.IntToObject <TBaseObject>(ProcessMsg.nParam3);
                    if ((HUtil32.IntToObject <TBaseObject>(ProcessMsg.BaseObject) == this) &&
                        (BaseObject != null))
                    {
                        nCode = 2;
                        this.SetLastHiter(BaseObject);
                        nCode = 3;
                        this.Struck(BaseObject);
                        nCode = 4;
                        this.BreakHolySeizeMode();
                        nCode = 10;
                        if ((this.m_Master != null) && (!BaseObject.m_boDeath))
                        {
                            nCode = 9;
                            if (((BaseObject != this.m_Master) && (((BaseObject.m_btRaceServer == Grobal2.RC_PLAYOBJECT) || ((BaseObject.m_btRaceServer == Grobal2.RC_HEROOBJECT))))))
                            {
                                nCode = 6;
                                if (this.m_Master.m_Master != null)
                                {
                                    nCode = 7;
                                    if (this.m_Master.m_Master != BaseObject)
                                    {
                                        this.m_Master.SetPKFlag(BaseObject);
                                    }
                                }
                                else
                                {
                                    this.m_Master.SetPKFlag(BaseObject);
                                }
                            }
                        }
                        nCode = 8;
                        if (GameConfig.boMonSayMsg)
                        {
                            this.MonsterSayMsg(BaseObject, TMonStatus.s_UnderFire);
                        }
                    }
                    result = true;
                }
                else
                {
                    result = base.Operate(ProcessMsg);
                }
            }
            catch
            {
                M2Share.MainOutMessage("{异常} TAnimalObject.Operate Code:" + nCode);
            }
            return(result);
        }
Exemplo n.º 10
0
 public int GetRangeEvent(TEnvirnoment Envir, TBaseObject OwnBaseObject, int nX, int nY, int nRange, int nType)
 {
     return(m_EventList.FindAll(__Event =>
     {
         return (__Event.m_OwnBaseObject == OwnBaseObject) && (Math.Abs(__Event.m_nX - nX) <= nRange) &&
         (Math.Abs(__Event.m_nY - nY) <= nRange) && (__Event.m_nEventType == nType);
     }).Count);
 }
Exemplo n.º 11
0
 public TFireBurnEvent(TBaseObject Creat, int nX, int nY, int nType, uint nTime, int nDamage)
     : base(Creat.m_PEnvir, nX, nY, nType, nTime, true)
 {
     this.m_nDamage       = nDamage;
     this.m_OwnBaseObject = Creat;
     m_nType     = (byte)nType;
     nTwoPwr     = 0;
     boReadSkill = false;
 }
Exemplo n.º 12
0
        private void FlyAxeAttack(TBaseObject Target)
        {
            TAbility WAbil;
            int      nDamage;

            // 重击几率,目标等级不高于自己,才使用重击
            if (((HUtil32.Random(M2Share.g_Config.nFairyDuntRate) == 0) && (Target.m_Abil.Level <= m_Abil.Level)) ||
                (nHitCount >= HUtil32._MIN((3 + M2Share.g_Config.nFairyDuntRateBelow),
                                           (m_btSlaveExpLevel + M2Share.g_Config.nFairyDuntRateBelow))))
            {
                // 月灵重击次数,达到次数时按等级出重击
                m_btDirection = M2Share.GetNextDirection(m_nCurrX, m_nCurrY, Target.m_nCurrX, Target.m_nCurrY);
                WAbil         = m_WAbil;// 重击倍数
                nDamage       = (int)HUtil32._MAX(0, (int)HUtil32.Round((double)((HUtil32.Random(((short)HUtil32.HiWord(WAbil.DC) - HUtil32.LoWord(WAbil.DC)) + 1))
                                                                                 + HUtil32.LoWord(WAbil.DC)) * M2Share.g_Config.nFairyAttackRate / 100));
                if (nDamage > 0)
                {
                    nDamage = Target.GetHitStruckDamage(this, nDamage);
                }
                if (nDamage > 0)
                {
                    Target.StruckDamage(nDamage);
                }
                Target.SetLastHiter(this);
                Target.SendDelayMsg(Grobal2.RM_STRUCK, Grobal2.RM_10101, nDamage, Target.m_WAbil.HP, Target.m_WAbil.MaxHP, Parse(this), "",
                                    (uint)HUtil32._MAX(Math.Abs(m_nCurrX - Target.m_nCurrX), Math.Abs(m_nCurrY - Target.m_nCurrY)) * 50 + 600);
                SendRefMsg(Grobal2.RM_FAIRYATTACKRATE, 1, m_nCurrX, m_nCurrY, Parse(Target), "");
                m_dwActionTick = HUtil32.GetTickCount();
                nHitCount      = 0;// 攻击计数
            }
            else
            {
                m_btDirection = M2Share.GetNextDirection(m_nCurrX, m_nCurrY, Target.m_nCurrX, Target.m_nCurrY);
                WAbil         = m_WAbil;
                nDamage       = HUtil32._MAX(0, HUtil32.Random(((short)HUtil32.HiWord(WAbil.DC) - HUtil32.LoWord(WAbil.DC)) + 1)
                                             + HUtil32.LoWord(WAbil.DC));
                if (nDamage > 0)
                {
                    nDamage = Target.GetHitStruckDamage(this, nDamage);
                }
                if (nDamage > 0)
                {
                    Target.StruckDamage(nDamage);
                }
                Target.SetLastHiter(this);
                Target.SendDelayMsg(Grobal2.RM_STRUCK, Grobal2.RM_10101, nDamage, Target.m_WAbil.HP,
                                    Target.m_WAbil.MaxHP, Parse(this), "", (uint)HUtil32._MAX(Math.Abs(m_nCurrX - Target.m_nCurrX), Math.Abs(m_nCurrY - Target.m_nCurrY)) * 50 + 600);
                SendRefMsg(Grobal2.RM_LIGHTING, 1, m_nCurrX, m_nCurrY, Parse(Target), "");
                m_dwActionTick = HUtil32.GetTickCount();
                nHitCount++;// 攻击计数
            }
        }
Exemplo n.º 13
0
        /// <summary>
        /// 搜索目标
        /// </summary>
        public void SearchTarget()
        {
            TBaseObject BaseObject;
            TBaseObject BaseObject18 = null;
            int         nC;
            int         n10;

            try
            {
                n10 = 11;
                if (this.m_VisibleActors.Count > 0)
                {
                    for (int I = 0; I < this.m_VisibleActors.Count; I++)
                    {
                        BaseObject = this.m_VisibleActors[I].BaseObject;
                        if (BaseObject != null)
                        {
                            // 目标为英雄,且等级不超过22级,跟随状态,则不攻击英雄
                            if ((BaseObject.m_btRaceServer == Grobal2.RC_HEROOBJECT) && (BaseObject.m_Abil.Level <= 22) && (((THeroObject)(BaseObject)).m_btStatus == 1))
                            {
                                continue;
                            }
                            if (!BaseObject.m_boDeath)
                            {
                                if (this.IsProperTarget(BaseObject) && (!BaseObject.m_boHideMode || this.m_boCoolEye))
                                {
                                    nC = Math.Abs(this.m_nCurrX - BaseObject.m_nCurrX) + Math.Abs(this.m_nCurrY - BaseObject.m_nCurrY);
                                    if (nC <= n10)
                                    {
                                        n10          = nC;
                                        BaseObject18 = BaseObject;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
                if (BaseObject18 != null)
                {
                    this.SetTargetCreat(BaseObject18);
                }
            }
            catch
            {
                M2Share.MainOutMessage("{异常} TAnimalObject.SearchTarget");
            }
        }
Exemplo n.º 14
0
        public void Mob(TPlayObject PlayObject, string[] @Params)
        {
            if (@Params == null)
            {
                return;
            }
            int         nX       = 0;
            int         nY       = 0;
            TBaseObject Monster  = null;
            string      sMonName = @Params.Length > 0 ? @Params[0] : "";                      //名称
            byte        nCount   = @Params.Length > 1 ? Convert.ToByte(@Params[1]) : (byte)1; //数量
            byte        nLevel   = @Params.Length > 2 ? Convert.ToByte(@Params[2]) : (byte)1; //怪物等级

            if (sMonName == "")
            {
                return;
            }
            if (nCount <= 0)
            {
                nCount = 1;
            }
            if (!(nLevel >= 0 && nLevel <= 10))
            {
                nLevel = 0;
            }
            nCount = (byte)HUtil32._MIN(64, nCount);
            PlayObject.GetFrontPosition(ref nX, ref nY);//刷在当前X,Y坐标
            for (int I = 0; I < nCount; I++)
            {
                Monster = UserEngine.RegenMonsterByName(PlayObject.m_PEnvir.sMapName, nX, nY, sMonName);
                if (Monster != null)
                {
                    Monster.m_btSlaveMakeLevel = nLevel;
                    Monster.m_btSlaveExpLevel  = nLevel;
                    Monster.RecalcAbilitys();
                    Monster.RefNameColor();
                }
                else
                {
                    PlayObject.SysMsg(GameMsgDef.g_sGameCommandMobMsg, TMsgColor.c_Red, TMsgType.t_Hint);
                    break;
                }
            }
        }
Exemplo n.º 15
0
        // 取得角色所在座标的城堡
        public TUserCastle InCastleWarArea(TBaseObject BaseObject)
        {
            TUserCastle result = null;
            TUserCastle Castle;

            if (m_CastleList.Count > 0)
            {
                for (int I = 0; I < m_CastleList.Count; I++)
                {
                    Castle = m_CastleList[I];
                    if (Castle.InCastleWarArea(BaseObject.m_PEnvir, BaseObject.m_nCurrX, BaseObject.m_nCurrY))
                    {
                        result = Castle;
                        break;
                    }
                }
            }
            return(result);
        }
Exemplo n.º 16
0
 public virtual void Run()
 {
     if ((HUtil32.GetTickCount() - m_dwOpenStartTick) > m_dwContinueTime)
     {
         m_boClosed = true;
         Close();
     }
     if (!m_boClosed && (m_OwnBaseObject != null) && (m_OwnBaseObject.m_btRaceServer == Grobal2.RC_PLAYOBJECT) && (m_nEventType == Grobal2.ET_FIRE) && M2Share.g_Config.boChangeMapFireExtinguish && !m_OwnBaseObject.m_boSuperMan)
     {
         if ((m_OwnBaseObject.m_PEnvir != m_Envir) || (m_OwnBaseObject.m_PEnvir.sMapName != m_Envir.sMapName))//火墙换地图消失
         {
             m_OwnBaseObject = null;
             m_boClosed      = true;
             Close();
             return;
         }
     }
     if ((m_OwnBaseObject != null) && (m_OwnBaseObject.m_boGhost || (m_OwnBaseObject.m_boDeath)))
     {
         m_OwnBaseObject = null;
     }
 }
Exemplo n.º 17
0
        /// <summary>
        /// 是城堡成员
        /// </summary>
        /// <param name="BaseObject"></param>
        /// <returns></returns>
        public TUserCastle IsCastleMember(TBaseObject BaseObject)
        {
            TUserCastle result = null;
            TUserCastle Castle;

            if (m_CastleList.Count > 0)
            {
                for (int I = 0; I < m_CastleList.Count; I++)
                {
                    Castle = m_CastleList[I];
                    if (Castle != null)
                    {
                        if (Castle.IsMember(BaseObject))
                        {
                            result = Castle;
                            break;
                        }
                    }
                }
            }
            return(result);
        }
Exemplo n.º 18
0
        private void FlyAxeAttack(TBaseObject Target)
        {
            TAbility WAbil;
            int      nDamage;

            if (this.m_PEnvir.CanFly(this.m_nCurrX, this.m_nCurrY, Target.m_nCurrX, Target.m_nCurrY))
            {
                this.m_btDirection = M2Share.GetNextDirection(this.m_nCurrX, this.m_nCurrY, Target.m_nCurrX, Target.m_nCurrY);
                WAbil   = this.m_WAbil;
                nDamage = (HUtil32.Random(((short)HUtil32.HiWord(WAbil.DC) - HUtil32.LoWord(WAbil.DC)) + 1) + HUtil32.LoWord(WAbil.DC));
                if (nDamage > 0)
                {
                    nDamage = Target.GetHitStruckDamage(this, nDamage);
                }
                if (nDamage > 0)
                {
                    Target.StruckDamage(nDamage);
                    Target.SendDelayMsg(Grobal2.RM_STRUCK, Grobal2.RM_10101, nDamage, Target.m_WAbil.HP, Target.m_WAbil.MaxHP, 0, "", (uint)HUtil32._MAX(Math.Abs(this.m_nCurrX - Target.m_nCurrX), Math.Abs(this.m_nCurrY - Target.m_nCurrY)) * 50 + 600);
                }
                this.SendRefMsg(Grobal2.RM_FLYAXE, this.m_btDirection, this.m_nCurrX, this.m_nCurrY, 0, "");
            }
        }
Exemplo n.º 19
0
        public void HeroLevel(TPlayObject PlayObject, string[] @Params)
        {
            string sHeroName = @Params.Length > 0 ? @Params[0] : "";
            int    nLevel    = @Params.Length > 1 ? int.Parse(@Params[1]) : 0;

            int nOLevel;

            if (sHeroName == "")
            {
                if (GameConfig.boGMShowFailMsg)
                {
                    PlayObject.SysMsg("命令格式: @" + base.Attributes.Name + " 英雄名称 等级", TMsgColor.c_Red, TMsgType.t_Hint);
                }
                return;
            }
            TBaseObject m_PlayObject = UserEngine.GetHeroObject(sHeroName);

            if (m_PlayObject != null)
            {
                nOLevel = m_PlayObject.m_Abil.Level;
                //PlayObject.m_Abil.Level = HUtil32._MAX(1, HUtil32._MIN(M2Share.MAXUPLEVEL, nLevel));
                m_PlayObject.HasLevelUp(1);
                // 等级调整记录日志
                M2Share.AddGameDataLog("17" + "\09" + m_PlayObject.m_sMapName + "\09" + (m_PlayObject.m_nCurrX).ToString() + "\09" + (m_PlayObject.m_nCurrY).ToString() + "\09"
                                       + m_PlayObject.m_sCharName + "\09" + (m_PlayObject.m_Abil.Level).ToString() + "\09" + m_PlayObject.m_sCharName + "\09" + "+(" + (nLevel).ToString() + ")" + "\09" + "(英雄)");
                PlayObject.SysMsg("英雄 " + sHeroName + " 等级调整完成。", TMsgColor.BB_Fuchsia, TMsgType.t_Hint);
                if (GameConfig.boShowMakeItemMsg)
                {
                    M2Share.MainOutMessage("[英雄等级调整] " + sHeroName + "(" + (nOLevel).ToString() + " -> " + (m_PlayObject.m_Abil.Level).ToString() + ")");
                }
            }
            else
            {
                PlayObject.SysMsg("英雄" + sHeroName + "现在不在线。", TMsgColor.c_Red, TMsgType.t_Hint);
            }
        }
Exemplo n.º 20
0
        public TBaseObject MakeClone(string sMonName, TBaseObject OldMon)
        {
            TBaseObject result = null;
            TBaseObject ElfMon;

            try
            {
                ElfMon = UserEngine.RegenMonsterByName(m_PEnvir.sMapName, m_nCurrX, m_nCurrY, sMonName);
                if ((ElfMon != null) && (OldMon != null))
                {
                    ElfMon.m_Master = OldMon.m_Master;
                    ElfMon.m_dwMasterRoyaltyTick = OldMon.m_dwMasterRoyaltyTick;
                    ElfMon.m_dwMasterRoyaltyTime = OldMon.m_dwMasterRoyaltyTime;// 怪物叛变计时
                    ElfMon.m_btSlaveMakeLevel    = OldMon.m_btSlaveMakeLevel;
                    ElfMon.m_btSlaveExpLevel     = OldMon.m_btSlaveExpLevel;
                    ElfMon.RecalcAbilitys();
                    ElfMon.RefNameColor();
                    if (OldMon.m_Master != null)
                    {
                        OldMon.m_Master.m_SlaveList.Add(ElfMon);
                    }
                    ElfMon.m_WAbil             = OldMon.m_WAbil;
                    ElfMon.m_wStatusTimeArr    = OldMon.m_wStatusTimeArr;
                    ElfMon.m_TargetCret        = OldMon.m_TargetCret;
                    ElfMon.m_dwTargetFocusTick = OldMon.m_dwTargetFocusTick;
                    ElfMon.m_LastHiter         = OldMon.m_LastHiter;
                    ElfMon.m_LastHiterTick     = OldMon.m_LastHiterTick;
                    ElfMon.m_btDirection       = OldMon.m_btDirection;
                    result = ElfMon;
                }
            }
            catch
            {
            }
            return(result);
        }
Exemplo n.º 21
0
        public void MobPlace(string[] @Params, TPlayObject PlayObject)
        {
            if (@Params == null)
            {
                return;
            }
            string       sX       = @Params.Length > 0 ? @Params[0] : "";
            string       sY       = @Params.Length > 1 ? @Params[1] : "";
            string       sMonName = @Params.Length > 2 ? @Params[2] : "";
            string       sCount   = @Params.Length > 3 ? @Params[3] : "";
            string       sNGMon   = @Params.Length > 4 ? @Params[4] : "";
            int          nCount   = HUtil32._MIN(500, HUtil32.Str_ToInt(sCount, 0));
            int          nX       = HUtil32.Str_ToInt(sX, 0);
            int          nY       = HUtil32.Str_ToInt(sY, 0);
            TEnvirnoment MEnvir;
            TBaseObject  mon = null;
            bool         boIsNGMon;
            byte         nCode;

            nCode = 0;
            try
            {
                nCount    = HUtil32._MIN(500, HUtil32.Str_ToInt(sCount, 0));
                nX        = HUtil32.Str_ToInt(sX, 0);
                nY        = HUtil32.Str_ToInt(sY, 0);
                boIsNGMon = HUtil32.Str_ToInt(sNGMon, 0) != 0;
                if ((nX <= 0) || (nY <= 0) || (sMonName == "") || (nCount <= 0))
                {
                    if (M2Share.g_Config.boGMShowFailMsg)
                    {
                        PlayObject.SysMsg("命令格式: @" + this.Attributes.Name + " X  Y 怪物名称 怪物数量 内功怪(0/1)", TMsgColor.c_Red, TMsgType.t_Hint);
                    }
                    return;
                }
                nCode  = 1;
                MEnvir = M2Share.g_MapManager.FindMap(M2Share.g_sMissionMap);
                if (!M2Share.g_boMission || (MEnvir == null))
                {
                    PlayObject.SysMsg("还没有设定怪物集中点!!!", TMsgColor.c_Red, TMsgType.t_Hint);
                    PlayObject.SysMsg("请先用命令" + M2Share.g_GameCommand.Mission.sCmd + "设置怪物的集中点。", TMsgColor.c_Red, TMsgType.t_Hint);
                    return;
                }
                nCode = 2;
                for (int I = 0; I < nCount; I++)
                {
                    nCode = 3;
                    mon   = UserEngine.RegenMonsterByName(M2Share.g_sMissionMap, nX, nY, sMonName);
                    nCode = 4;
                    if (mon != null)
                    {
                        nCode = 5;
                        mon.m_boIsNGMonster = boIsNGMon;
                        mon.m_boMission     = true;
                        mon.m_nMissionX     = M2Share.g_nMissionX;
                        mon.m_nMissionY     = M2Share.g_nMissionY;
                    }
                    else
                    {
                        break;
                    }
                }
                nCode = 6;
                if (mon.m_btRaceServer != 136)
                {
                    PlayObject.SysMsg((nCount).ToString() + " 只 " + sMonName + " 已正在往地图 " + M2Share.g_sMissionMap + " " +
                                      M2Share.g_nMissionX + ":" + M2Share.g_nMissionY + " 集中。", TMsgColor.c_Green, TMsgType.t_Hint);
                }
            }
            catch
            {
                M2Share.MainOutMessage("{异常} TPlayObject.CmdMobPlace Code:" + (nCode).ToString());
            }
        }
Exemplo n.º 22
0
        // 火墙 4*4
        private int MagMakeFireCross(TBaseObject PlayObject, int nDamage, int nHTime, int nX, int nY)
        {
            int            result = 0;
            TFireBurnEvent FireBurnEvent;

            if (PlayObject.m_PEnvir.GetEvent(nX, nY) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX, nY, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX, nY - 1) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX, nY - 1, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX, nY - 2) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX, nY - 2, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX, nY + 1) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX, nY + 1, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX, nY + 2) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX, nY + 2, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX - 1, nY) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX - 1, nY, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX - 1, nY - 1) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX - 1, nY - 1, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX - 1, nY - 2) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX - 1, nY - 2, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX - 1, nY + 1) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX - 1, nY + 1, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX - 1, nY + 2) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX - 1, nY + 2, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX - 2, nY) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX - 2, nY, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX - 2, nY - 1) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX - 2, nY - 1, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX - 2, nY + 1) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX - 2, nY + 1, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX + 1, nY) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX + 1, nY, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX + 1, nY - 1) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX + 1, nY - 1, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX + 1, nY - 2) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX + 1, nY - 2, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX + 1, nY + 1) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX + 1, nY + 1, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX + 1, nY + 2) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX + 1, nY + 2, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX + 2, nY) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX + 2, nY, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX + 2, nY - 1) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX + 2, nY - 1, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            if (PlayObject.m_PEnvir.GetEvent(nX + 2, nY + 1) == null)
            {
                FireBurnEvent = new TFireBurnEvent(PlayObject, nX + 2, nY + 1, Grobal2.ET_FIRE, Convert.ToUInt32(nHTime * 1000), nDamage);
                M2Share.g_EventManager.AddEvent(FireBurnEvent);
            }
            result = 1;
            return(result);
        }
Exemplo n.º 23
0
 public virtual void Attack(TBaseObject TargeTBaseObject, int nDir)
 {
     base.AttackDir(TargeTBaseObject, 0, nDir);
 }
Exemplo n.º 24
0
        // -------------------------------------------------------------------------------
        // 使用护身符 nType 为指定类型 1 为护身符 2 为毒药
        // 修改,使包裹中的毒,护身符可以直接使用,如装备中没有放上护身符或毒,
        // 包裹中有此类物品,则直接使用包裹中有此类物品
        // --------------------------------------------------------------------------------
        public unsafe static void UseAmulet(TBaseObject PlayObject, int nCount, int nType, ref int Idx)
        {
            TUserItem *UserItem;// 毒,护身符直接使用
            TStdItem * AmuletStdItem;
            byte       nCode = 1;

            try
            {
                nCode = 0;
                if (PlayObject.m_boGhost)
                {
                    return;
                }
                nCode = 1;
                if (((PlayObject.m_UseItems[TPosition.U_BUJUK]->wIndex > 0) || (PlayObject.m_UseItems[TPosition.U_ARMRINGL]->wIndex > 0)) && ((TPosition.U_BUJUK == Idx) ||
                                                                                                                                              (TPosition.U_ARMRINGL == Idx)) && (PlayObject.m_UseItems[Idx]->Dura >= nCount * 100))//判断装备里没有所需的物品
                {
                    nCode = 2;
                    PlayObject.m_UseItems[Idx]->Dura -= (ushort)(nCount * 100);
                    if ((PlayObject.m_btRaceServer == Grobal2.RC_PLAYOBJECT))
                    {
                        nCode = 3;
                        PlayObject.SendMsg(PlayObject, Grobal2.RM_DURACHANGE, Idx, PlayObject.m_UseItems[Idx]->Dura, PlayObject.m_UseItems[Idx]->DuraMax, 0, "");
                        nCode = 4;
                        ((TPlayObject)(PlayObject)).SendUpdateItem(PlayObject.m_UseItems[Idx]);//更新物品
                        if (PlayObject.m_UseItems[Idx]->Dura <= 0)
                        {
                            nCode = 5;
                            ((TPlayObject)(PlayObject)).SendDelItems(PlayObject.m_UseItems[Idx]);
                            PlayObject.m_UseItems[Idx]->wIndex = 0;
                        }
                    }
                    else if ((PlayObject.m_btRaceServer == Grobal2.RC_HEROOBJECT))
                    {
                        nCode = 6;
                        PlayObject.SendMsg(PlayObject, Grobal2.RM_HERODURACHANGE, Idx, PlayObject.m_UseItems[Idx]->Dura, PlayObject.m_UseItems[Idx]->DuraMax, 0, "");
                        nCode = 7;
                        ((THeroObject)(PlayObject)).SendUpdateItem(PlayObject.m_UseItems[Idx]);//更新物品
                        if (PlayObject.m_UseItems[Idx]->Dura <= 0)
                        {
                            nCode = 8;
                            ((THeroObject)(PlayObject)).SendUpdateItem(PlayObject.m_UseItems[Idx]);
                            PlayObject.m_UseItems[Idx]->wIndex = 0;
                        }
                    }
                }
                else
                {
                    nCode = 9;
                    for (int I = PlayObject.m_ItemList.Count - 1; I >= 0; I--)
                    {
                        if (PlayObject.m_ItemList.Count <= 0)
                        {
                            break;
                        }
                        nCode    = 10;
                        UserItem = (TUserItem *)PlayObject.m_ItemList[I];
                        if (UserItem->wIndex == Idx)
                        {
                            nCode         = 11;
                            AmuletStdItem = M2Share.UserEngine.GetStdItem(UserItem->wIndex);
                            if ((AmuletStdItem != null))
                            {
                                nCode = 12;
                                if ((AmuletStdItem->StdMode == 25))
                                {
                                    switch (nType)
                                    {
                                    case 1:    // 护身符
                                        if ((AmuletStdItem->Shape == 5) && (UserItem->Dura >= nCount * 100))
                                        {
                                            UserItem->Dura -= (ushort)(nCount * 100);
                                        }
                                        break;

                                    case 2:    // 毒药
                                        if ((AmuletStdItem->Shape <= 2) && (UserItem->Dura >= nCount * 100))
                                        {
                                            UserItem->Dura -= (ushort)(nCount * 100);
                                        }
                                        break;
                                    }
                                    if ((PlayObject.m_btRaceServer == Grobal2.RC_PLAYOBJECT))
                                    {
                                        nCode = 13;
                                        PlayObject.SendMsg(PlayObject, Grobal2.RM_DURACHANGE, UserItem->wIndex, UserItem->Dura, UserItem->DuraMax, 0, "");
                                        nCode = 14;
                                        ((TPlayObject)(PlayObject)).SendUpdateItem(UserItem);// 更新物品
                                        if (UserItem->Dura <= 0)
                                        {
                                            nCode = 15;
                                            PlayObject.m_ItemList.RemoveAt(I);
                                            nCode = 16;
                                            ((TPlayObject)(PlayObject)).SendDelItems(UserItem);
                                        }
                                    }
                                    else if ((PlayObject.m_btRaceServer == Grobal2.RC_HEROOBJECT))
                                    {
                                        nCode = 17;
                                        PlayObject.SendMsg(PlayObject, Grobal2.RM_HERODURACHANGE, UserItem->wIndex, UserItem->Dura, UserItem->DuraMax, 0, "");
                                        nCode = 18;
                                        ((THeroObject)(PlayObject)).SendUpdateItem(UserItem);// 更新物品
                                        if (UserItem->Dura <= 0)
                                        {
                                            nCode = 19;
                                            PlayObject.m_ItemList.RemoveAt(I);
                                            nCode = 20;
                                            ((THeroObject)(PlayObject)).SendDelItems(UserItem);
                                        }
                                    }
                                    return;
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception E)
            {
                M2Share.MainOutMessage("{异常} TMagic.UseAmulet Code:" + nCode);
            }
        }
Exemplo n.º 25
0
        // ----------------------------------------------------------------------
        // 函数功能:检查护身符或毒 是否存在
        // 参数 nType 为指定类型 1 为护身符 2 为毒药
        // 先判断装备栏中是否放有此类物品,如没有,则检查包裹中是否放有此类物品
        // -----------------------------------------------------------------------
        public unsafe static bool CheckAmulet(TBaseObject PlayObject, int nCount, int nType, ref int Idx)
        {
            bool       result = false;
            TUserItem *UserItem;// 毒,护身符直接使用
            TStdItem * AmuletStdItem;

            try
            {
                if (PlayObject.m_boGhost)
                {
                    return(result);
                }
                Idx = 0;
                if (PlayObject.m_UseItems[TPosition.U_ARMRINGL]->wIndex > 0)
                {
                    AmuletStdItem = M2Share.UserEngine.GetStdItem(PlayObject.m_UseItems[TPosition.U_ARMRINGL]->wIndex);
                    if ((AmuletStdItem != null))
                    {
                        if ((AmuletStdItem->StdMode == 25))
                        {
                            switch (nType)
                            {
                            case 1:
                                if ((AmuletStdItem->Shape == 5) && (HUtil32.Round((double)PlayObject.m_UseItems[TPosition.U_ARMRINGL]->Dura / 100) >= nCount))
                                {
                                    Idx    = TPosition.U_ARMRINGL;
                                    result = true;
                                    return(result);
                                }
                                break;

                            case 2:
                                if (PlayObject.m_btRaceServer == Grobal2.RC_PLAYOBJECT)
                                {
                                    if ((AmuletStdItem->Shape <= 2) && (HUtil32.Round((double)PlayObject.m_UseItems[TPosition.U_ARMRINGL]->Dura / 100) >= nCount))
                                    {
                                        Idx    = TPosition.U_ARMRINGL;
                                        result = true;
                                        return(result);
                                    }
                                }
                                else if (PlayObject.m_btRaceServer == Grobal2.RC_HEROOBJECT)
                                {
                                    switch (((THeroObject)(PlayObject)).n_AmuletIndx)
                                    {
                                    case 1:        // 绿毒
                                        if ((AmuletStdItem->Shape == 1) && (HUtil32.Round((double)PlayObject.m_UseItems[TPosition.U_ARMRINGL]->Dura / 100) >= nCount))
                                        {
                                            Idx    = TPosition.U_ARMRINGL;
                                            result = true;
                                            return(result);
                                        }
                                        break;

                                    case 2:        // 红毒
                                        if ((AmuletStdItem->Shape == 2) && (HUtil32.Round((double)PlayObject.m_UseItems[TPosition.U_ARMRINGL]->Dura / 100) >= nCount))
                                        {
                                            Idx    = TPosition.U_ARMRINGL;
                                            result = true;
                                            return(result);
                                        }
                                        break;
                                    }
                                }
                                break;
                            }
                        }
                    }

                    if (PlayObject.m_UseItems[TPosition.U_BUJUK]->wIndex > 0)
                    {
                        AmuletStdItem = M2Share.UserEngine.GetStdItem(PlayObject.m_UseItems[TPosition.U_BUJUK]->wIndex);
                        if ((AmuletStdItem != null))
                        {
                            if ((AmuletStdItem->StdMode == 25))
                            {
                                switch (nType)
                                {
                                case 1:    // 符
                                    if ((AmuletStdItem->Shape == 5) && (HUtil32.Round((double)PlayObject.m_UseItems[TPosition.U_BUJUK]->Dura / 100) >= nCount))
                                    {
                                        Idx    = TPosition.U_BUJUK;
                                        result = true;
                                        return(result);
                                    }
                                    break;

                                case 2:    // 毒
                                    if ((PlayObject.m_btRaceServer == Grobal2.RC_PLAYOBJECT) || (PlayObject.m_btRaceServer == Grobal2.RC_PLAYMOSTER))
                                    {
                                        if ((AmuletStdItem->Shape <= 2) && (HUtil32.Round((double)PlayObject.m_UseItems[TPosition.U_BUJUK]->Dura / 100) >= nCount))
                                        {
                                            Idx    = TPosition.U_BUJUK;
                                            result = true;
                                            return(result);
                                        }
                                    }
                                    else if (PlayObject.m_btRaceServer == Grobal2.RC_HEROOBJECT)
                                    {
                                        switch (((THeroObject)(PlayObject)).n_AmuletIndx)
                                        {
                                        case 1:        // 绿毒
                                            if ((AmuletStdItem->Shape == 1) && (HUtil32.Round((double)PlayObject.m_UseItems[TPosition.U_BUJUK]->Dura / 100) >= nCount))
                                            {
                                                Idx    = TPosition.U_BUJUK;
                                                result = true;
                                                return(result);
                                            }
                                            break;

                                        case 2:        // 红毒
                                            if ((AmuletStdItem->Shape == 2) && (HUtil32.Round((double)PlayObject.m_UseItems[TPosition.U_BUJUK]->Dura / 100) >= nCount))
                                            {
                                                Idx    = TPosition.U_BUJUK;
                                                result = true;
                                                return(result);
                                            }
                                            break;
                                        }
                                    }
                                    break;
                                }
                            }
                        }
                    }
                    //毒,护身符直接使用(检测人物包裹是否存在毒,护身符)
                    if (PlayObject.m_ItemList.Count > 0)
                    {
                        for (int I = 0; I < PlayObject.m_ItemList.Count; I++)// 人物包裹不为空
                        {
                            UserItem      = (TUserItem *)PlayObject.m_ItemList[I];
                            AmuletStdItem = M2Share.UserEngine.GetStdItem(UserItem->wIndex);
                            if ((AmuletStdItem != null))
                            {
                                if ((AmuletStdItem->StdMode == 25))
                                {
                                    switch (nType)
                                    {
                                    case 1:
                                        if ((AmuletStdItem->Shape == 5) && (HUtil32.Round((double)UserItem->Dura / 100) >= nCount))
                                        {
                                            Idx    = UserItem->wIndex;
                                            result = true;
                                            return(result);
                                        }
                                        break;

                                    case 2:
                                        if (PlayObject.m_btRaceServer == Grobal2.RC_PLAYOBJECT)
                                        {
                                            if ((AmuletStdItem->Shape <= 2) && (HUtil32.Round((double)UserItem->Dura / 100) >= nCount))
                                            {
                                                Idx    = UserItem->wIndex;
                                                result = true;
                                                return(result);
                                            }
                                        }
                                        else if (PlayObject.m_btRaceServer == Grobal2.RC_HEROOBJECT)
                                        {
                                            switch (((THeroObject)(PlayObject)).n_AmuletIndx)
                                            {
                                            case 1:        // 绿毒
                                                if ((AmuletStdItem->Shape == 1) && (HUtil32.Round((double)UserItem->Dura / 100) >= nCount))
                                                {
                                                    Idx    = UserItem->wIndex;
                                                    result = true;
                                                    return(result);
                                                }
                                                break;

                                            case 2:        // 红毒
                                                if ((AmuletStdItem->Shape == 2) && (HUtil32.Round((double)UserItem->Dura / 100) >= nCount))
                                                {
                                                    Idx    = UserItem->wIndex;
                                                    result = true;
                                                    return(result);
                                                }
                                                break;
                                            }
                                        }
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch
            {
                M2Share.MainOutMessage("{异常} TMagic.CheckAmulet");
            }
            return(result);
        }
Exemplo n.º 26
0
        public static void MakeFireball(TBaseObject PlayObject, TMagicMessage MagicMsg, ref TBaseObject TargeTBaseObject, ref bool Result)
        {
            TUserMagic *UserMagic = MagicMsg.UserMagic;
            int         nTargetY  = MagicMsg.nTargetY;

            Result = false;
            int nPower = 0;
            int NGSecPwr;

            if (PlayObject.MagCanHitTarget(PlayObject.m_nCurrX, PlayObject.m_nCurrY, TargeTBaseObject) || M2Share.g_Config.boAutoCanHit)
            {
                if (PlayObject.IsProperTarget(TargeTBaseObject))
                {
                    if ((TargeTBaseObject.m_nAntiMagic <= HUtil32.Random(10)) && (Math.Abs(TargeTBaseObject.m_nCurrX - MagicMsg.nTargetX) <= 1) && (Math.Abs(TargeTBaseObject.m_nCurrY - nTargetY) <= 1))
                    {
                        nPower = PlayObject.GetAttackPower(MagMakeFireball_GetPower(UserMagic, MagMakeFireball_MPow(UserMagic))
                                                           + HUtil32.LoWord(PlayObject.m_WAbil.MC), ((short)HUtil32.HiWord(PlayObject.m_WAbil.MC) - HUtil32.LoWord(PlayObject.m_WAbil.MC)) + 1);
                        switch (UserMagic->MagicInfo.wMagicId)
                        {
                        case MagicConst.SKILL_FIREBALL:
                            if ((PlayObject.m_btRaceServer == Grobal2.RC_PLAYOBJECT))
                            {
                                if (((TPlayObject)(PlayObject)).m_MagicSkill_208 != null)
                                {
                                    NGSecPwr = GetNGPow(PlayObject, ((TPlayObject)(PlayObject)).m_MagicSkill_208, nPower);    // 怒之火球
                                    if (TargeTBaseObject != null)
                                    {
                                        if (TargeTBaseObject.m_btRaceServer == Grobal2.RC_PLAYOBJECT)
                                        {
                                            NGSecPwr = NGSecPwr - GetNGPow(TargeTBaseObject, ((TPlayObject)(TargeTBaseObject)).m_MagicSkill_209, nPower);    // 静之火球
                                        }
                                        else if (TargeTBaseObject.m_btRaceServer == Grobal2.RC_HEROOBJECT)
                                        {
                                            NGSecPwr = NGSecPwr - GetNGPow(TargeTBaseObject, ((THeroObject)(TargeTBaseObject)).m_MagicSkill_209, nPower);    // 静之火球
                                        }
                                    }
                                    nPower = HUtil32._MAX(0, nPower + NGSecPwr);
                                }
                            }
                            else if ((PlayObject.m_btRaceServer == Grobal2.RC_HEROOBJECT))
                            {
                                if (((THeroObject)(PlayObject)).m_MagicSkill_208 != null)
                                {
                                    NGSecPwr = GetNGPow(PlayObject, ((THeroObject)(PlayObject)).m_MagicSkill_208, nPower);    // 怒之火球
                                    if (TargeTBaseObject != null)
                                    {
                                        if (TargeTBaseObject.m_btRaceServer == Grobal2.RC_PLAYOBJECT)
                                        {
                                            NGSecPwr = NGSecPwr - GetNGPow(TargeTBaseObject, ((TPlayObject)(TargeTBaseObject)).m_MagicSkill_209, nPower);    // 静之火球
                                        }
                                        else if (TargeTBaseObject.m_btRaceServer == Grobal2.RC_HEROOBJECT)
                                        {
                                            NGSecPwr = NGSecPwr - GetNGPow(TargeTBaseObject, ((THeroObject)(TargeTBaseObject)).m_MagicSkill_209, nPower);    // 静之火球
                                        }
                                    }
                                    nPower = HUtil32._MAX(0, nPower + NGSecPwr);
                                }
                            }
                            break;

                        case MagicConst.SKILL_FIREBALL2:
                            if ((PlayObject.m_btRaceServer == Grobal2.RC_PLAYOBJECT))
                            {
                                if (((TPlayObject)(PlayObject)).m_MagicSkill_210 != null)
                                {
                                    NGSecPwr = GetNGPow(PlayObject, ((TPlayObject)(PlayObject)).m_MagicSkill_210, nPower);    // 怒之大火球
                                    if (TargeTBaseObject != null)
                                    {
                                        if (TargeTBaseObject.m_btRaceServer == Grobal2.RC_PLAYOBJECT)
                                        {
                                            NGSecPwr = NGSecPwr - GetNGPow(TargeTBaseObject, ((TPlayObject)(TargeTBaseObject)).m_MagicSkill_211, nPower);    // 静之大火球
                                        }
                                        else if (TargeTBaseObject.m_btRaceServer == Grobal2.RC_HEROOBJECT)
                                        {
                                            NGSecPwr = NGSecPwr - GetNGPow(TargeTBaseObject, ((THeroObject)(TargeTBaseObject)).m_MagicSkill_211, nPower);    // 静之大火球
                                        }
                                    }
                                    nPower = HUtil32._MAX(0, nPower + NGSecPwr);
                                }
                            }
                            else if ((PlayObject.m_btRaceServer == Grobal2.RC_HEROOBJECT))
                            {
                                if (((THeroObject)(PlayObject)).m_MagicSkill_210 != null)
                                {
                                    NGSecPwr = GetNGPow(PlayObject, ((THeroObject)(PlayObject)).m_MagicSkill_210, nPower);    // 怒之大火球
                                    if (TargeTBaseObject != null)
                                    {
                                        if (TargeTBaseObject.m_btRaceServer == Grobal2.RC_PLAYOBJECT)
                                        {
                                            NGSecPwr = NGSecPwr - GetNGPow(TargeTBaseObject, ((TPlayObject)(TargeTBaseObject)).m_MagicSkill_211, nPower);    // 静之大火球
                                        }
                                        else if (TargeTBaseObject.m_btRaceServer == Grobal2.RC_HEROOBJECT)
                                        {
                                            NGSecPwr = NGSecPwr - GetNGPow(TargeTBaseObject, ((THeroObject)(TargeTBaseObject)).m_MagicSkill_211, nPower);    // 静之火球
                                        }
                                    }
                                    nPower = HUtil32._MAX(0, nPower + NGSecPwr);
                                }
                            }
                            break;
                        }
                        PlayObject.SendDelayMsg(PlayObject, Grobal2.RM_DELAYMAGIC, nPower, HUtil32.MakeLong(MagicMsg.nTargetX, nTargetY), 2, 0, "", 600);
                        if ((TargeTBaseObject.m_btRaceServer >= Grobal2.RC_ANIMAL))
                        {
                            Result = true;
                        }
                    }
                    else
                    {
                        TargeTBaseObject = null;
                    }
                }
                else
                {
                    TargeTBaseObject = null;
                }
            }
            else
            {
                TargeTBaseObject = null;
            }
        }