Ejemplo n.º 1
0
        // 远距离使用冰咆哮 5*5范围
        public override bool AttackTarget()
        {
            bool result = false;

            if (m_TargetCret == null)
            {
                return(result);
            }
            if (HUtil32.GetTickCount() - m_dwHitTick > m_nNextHitTime)
            {
                m_dwHitTick = HUtil32.GetTickCount();
                if ((Math.Abs(m_nCurrX - m_TargetCret.m_nCurrX) <= 5) && (Math.Abs(m_nCurrX - m_TargetCret.m_nCurrX) <= 5))
                {
                    m_dwTargetFocusTick = HUtil32.GetTickCount();
                    m_btDirection       = M2Share.GetNextDirection(m_nCurrX, m_nCurrY, m_TargetCret.m_nCurrX, m_TargetCret.m_nCurrY);
                    M2Share.MagicManager.MagBigExplosion(this, GetAttackPower(HUtil32.LoWord(m_WAbil.DC), ((short)HUtil32.HiWord(m_WAbil.DC) - HUtil32.LoWord(m_WAbil.DC))),
                                                         m_TargetCret.m_nCurrX, m_TargetCret.m_nCurrY, M2Share.g_Config.nSnowWindRange, MagicConst.SKILL_SNOWWIND);
                    SendRefMsg(Grobal2.RM_LIGHTING, 1, m_nCurrX, m_nCurrY, Parse(m_TargetCret), "");
                    result = true;
                    return(result);
                }
                if (m_TargetCret.m_PEnvir == m_PEnvir)
                {
                    if ((Math.Abs(m_nCurrX - m_TargetCret.m_nCurrX) <= 11) && (Math.Abs(m_nCurrX - m_TargetCret.m_nCurrX) <= 11))
                    {
                        SetTargetXY(m_TargetCret.m_nCurrX, m_TargetCret.m_nCurrY);
                    }
                }
                else
                {
                    DelTargetCreat();
                }
            }
            return(result);
        }
Ejemplo n.º 2
0
        public virtual TBaseObject sub_4A9C78(byte bt05)
        {
            TBaseObject result;
            TAbility    WAbil;
            int         n10;
            TBaseObject BaseObject;

            result        = null;
            m_btDirection = bt05;
            WAbil         = m_WAbil;
            n10           = HUtil32.Random(((short)HUtil32.HiWord(WAbil.DC) - HUtil32.LoWord(WAbil.DC)) + 1) + HUtil32.LoWord(WAbil.DC);
            if (n10 > 0)
            {
                SendRefMsg(Grobal2.RM_HIT, m_btDirection, m_nCurrX, m_nCurrY, 0, "");
                BaseObject = GetPoseCreate();
                if ((BaseObject != null) && IsProperTarget(BaseObject) && (HUtil32.Random(BaseObject.m_btSpeedPoint) < m_btHitPoint))
                {
                    n10 = BaseObject.GetMagStruckDamage(this, n10);
                    if (n10 > 0)
                    {
                        BaseObject.StruckDamage(n10);
                        BaseObject.SendDelayMsg(Grobal2.RM_STRUCK, Grobal2.RM_10101, n10,
                                                BaseObject.m_WAbil.HP, BaseObject.m_WAbil.MaxHP, Parse(this), "", 300);
                        if (HUtil32.Random(BaseObject.m_btAntiPoison + 20) == 0)
                        {
                            BaseObject.MakePosion(Grobal2.POISON_STONE, 5, 0);
                        }
                        result = BaseObject;
                    }
                }
            }
            return(result);
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
0
        private void LightingAttack(int nDir)
        {
            TAbility WAbil;
            int      nPower;
            int      nDamage;
            int      btGetBackHP;

            if (m_TargetCret != null)
            {
                m_btDirection = (byte)nDir;
                WAbil         = m_WAbil;
                nPower        = GetAttackPower(HUtil32.LoWord(WAbil.MC), ((short)HUtil32.HiWord(WAbil.MC) - HUtil32.LoWord(WAbil.MC)));
                nDamage       = m_TargetCret.GetMagStruckDamage(this, nPower);
                if (nDamage > 0)
                {
                    btGetBackHP = (byte)m_WAbil.MP;
                    if (btGetBackHP != 0)
                    {
                        m_WAbil.HP += nDamage / btGetBackHP;
                    }
                    m_TargetCret.StruckDamage(nDamage);
                    m_TargetCret.SendDelayMsg(Grobal2.RM_STRUCK, Grobal2.RM_10101, nDamage, m_TargetCret.m_WAbil.HP, m_TargetCret.m_WAbil.MaxHP, Parse(this), "", 200);
                }
                SendRefMsg(Grobal2.RM_LIGHTING, 1, m_nCurrX, m_nCurrY, Parse(m_TargetCret), "");
            }
        }
Ejemplo n.º 5
0
        public override void Run()
        {
            int nPower;

            try
            {
                if (!m_boDeath && !m_boGhost && (m_wStatusTimeArr[Grobal2.POISON_STONE] == 0))
                {
                    if ((m_TargetCret != null) && (HUtil32.GetTickCount() - m_dwHitTick > m_nNextHitTime) && (Math.Abs(m_nCurrX - m_TargetCret.m_nCurrX) <= 2) && (Math.Abs(m_nCurrY - m_TargetCret.m_nCurrY) <= 2))
                    {
                        m_dwHitTick = HUtil32.GetTickCount();
                        if ((HUtil32.Random(4) == 0))// 癫狂状态
                        {
                            if ((M2Share.g_EventManager.GetEvent(m_PEnvir, m_TargetCret.m_nCurrX, m_TargetCret.m_nCurrY, Grobal2.ET_FIRE) == null))
                            {
                                MagMakeFireCross(this, GetAttackPower(HUtil32.LoWord(m_WAbil.DC), ((short)HUtil32.HiWord(m_WAbil.DC) - HUtil32.LoWord(m_WAbil.DC))), 4, m_TargetCret.m_nCurrX, m_TargetCret.m_nCurrY);// 火墙
                            }
                            else if ((HUtil32.Random(4) == 0))
                            {
                                if (IsProperTarget(m_TargetCret))
                                {
                                    if (HUtil32.Random(m_TargetCret.m_btAntiPoison + 7) <= 6)                                                                  // 施毒
                                    {
                                        nPower = GetAttackPower(HUtil32.LoWord(m_WAbil.DC), ((short)HUtil32.HiWord(m_WAbil.DC) - HUtil32.LoWord(m_WAbil.DC))); // 中毒类型 - 绿毒
                                        m_TargetCret.SendDelayMsg(this, Grobal2.RM_POISON, Grobal2.POISON_DECHEALTH, nPower, Parse(this), 4, "", 150);
                                    }
                                }
                            }
                            else
                            {
                                AttackTarget();// 物理攻击
                            }
                        }
                        else
                        {
                            if (HUtil32.Random(4) == 0)
                            {
                                if (IsProperTarget(m_TargetCret))
                                {
                                    if (HUtil32.Random(m_TargetCret.m_btAntiPoison + 7) <= 6)                                                                  // 施毒
                                    {
                                        nPower = GetAttackPower(HUtil32.LoWord(m_WAbil.DC), ((short)HUtil32.HiWord(m_WAbil.DC) - HUtil32.LoWord(m_WAbil.DC))); // 中毒类型 - 绿毒
                                        m_TargetCret.SendDelayMsg(this, Grobal2.RM_POISON, Grobal2.POISON_DECHEALTH, nPower, Parse(this), 4, "", 150);
                                    }
                                }
                            }
                            else if ((Math.Abs(m_nCurrX - m_TargetCret.m_nCurrX) <= 2) && (Math.Abs(m_nCurrY - m_TargetCret.m_nCurrY) <= 2))
                            {
                                AttackTarget();// 物理攻击
                            }
                        }
                    }
                }
            }
            catch
            {
                M2Share.MainOutMessage("{异常} TSalamanderATMonster.Run");
            }
            base.Run();
        }
Ejemplo n.º 6
0
        // 物理攻击
        new public virtual bool AttackTarget()
        {
            bool result;
            int  nPower;

            result = false;
            if (m_TargetCret == null)
            {
                return(result);
            }
            if (HUtil32.GetTickCount() - m_dwHitTick > m_nNextHitTime)
            {
                m_dwHitTick = HUtil32.GetTickCount();
                if ((Math.Abs(m_nCurrX - m_TargetCret.m_nCurrX) <= 2) && (Math.Abs(m_nCurrX - m_TargetCret.m_nCurrX) <= 2))
                {
                    m_dwTargetFocusTick = HUtil32.GetTickCount();
                    nPower = GetAttackPower(HUtil32.LoWord(m_WAbil.DC), ((short)HUtil32.HiWord(m_WAbil.DC) - HUtil32.LoWord(m_WAbil.DC)));
                    HitMagAttackTarget(m_TargetCret, nPower / 2, nPower / 2, true);
                    result = true;
                    return(result);
                }
                if (m_TargetCret.m_PEnvir == m_PEnvir)
                {
                    if ((Math.Abs(m_nCurrX - m_TargetCret.m_nCurrX) <= 11) && (Math.Abs(m_nCurrX - m_TargetCret.m_nCurrX) <= 11))
                    {
                        SetTargetXY(m_TargetCret.m_nCurrX, m_TargetCret.m_nCurrY);
                    }
                }
                else
                {
                    DelTargetCreat();
                }
            }
            return(result);
        }
Ejemplo n.º 7
0
        public override void Run()
        {
            int nPower = 0;

            try
            {
                if (!m_boDeath && !m_boGhost && (m_wStatusTimeArr[Grobal2.POISON_STONE] == 0))
                {
                    // 走路间隔
                    if ((HUtil32.GetTickCount() - m_dwWalkTick > m_nWalkSpeed) && (m_TargetCret != null) && (!m_TargetCret.m_boDeath))
                    {
                        // 目标不为空
                        if (boIsSpiderMagic)
                        {
                            // 喷出网后,延时1100毫秒显示目标的效果
                            if (HUtil32.GetTickCount() - m_dwSpiderMagicTick > 1100)
                            {
                                boIsSpiderMagic = false;// 是否喷出蜘蛛网
                                SpiderMagicAttack(nPower / 2, m_TargetCret.m_nCurrX, m_TargetCret.m_nCurrY, 3);
                                base.Run();
                                return;
                            }
                        }
                        if ((Math.Abs(m_nCurrX - m_TargetCret.m_nCurrX) <= 2) && (Math.Abs(m_nCurrX - m_TargetCret.m_nCurrX) <= 2))
                        {
                            if ((HUtil32.Random(4) == 0) && (m_TargetCret.m_wStatusTimeArr[Grobal2.STATE_LOCKRUN] == 0))
                            {
                                // 喷出蜘蛛网
                                if (HUtil32.GetTickCount() - m_dwHitTick > m_nNextHitTime)
                                {
                                    m_dwHitTick = HUtil32.GetTickCount();
                                    nPower      = GetAttackPower(HUtil32.LoWord(m_WAbil.DC), ((short)HUtil32.HiWord(m_WAbil.DC) - HUtil32.LoWord(m_WAbil.DC)));
                                    SendRefMsg(Grobal2.RM_LIGHTING, 1, m_nCurrX, m_nCurrY, Parse(m_TargetCret), "");
                                    m_dwSpiderMagicTick = HUtil32.GetTickCount(); // 喷出蜘蛛网计时,用于延时处理目标身上的小网显示
                                    boIsSpiderMagic     = true;                   // 是否喷出蜘蛛网
                                }
                            }
                            else
                            {
                                AttackTarget();
                            }
                        }
                        else
                        {
                            this.GotoTargetXY();
                        }
                    }
                }
            }
            catch
            {
                M2Share.MainOutMessage("{异常} TYanLeiWangSpider.Run");
            }
            base.Run();
        }
Ejemplo n.º 8
0
        private void SpitAttack(byte btDir)
        {
            TAbility    WAbil;
            int         nC;
            int         n10;
            int         n14;
            int         n18;
            int         n1C;
            TBaseObject BaseObject;

            this.m_btDirection = btDir;
            WAbil = this.m_WAbil;
            n1C   = HUtil32.Random((short)HUtil32.HiWord(WAbil.DC) - HUtil32.LoWord(WAbil.DC)) + 1 + HUtil32.LoWord(WAbil.DC);
            if (n1C <= 0)
            {
                return;
            }
            SendRefMsg(Grobal2.RM_HIT, m_btDirection, m_nCurrX, m_nCurrY, 0, "");
            nC = 0;
            while ((nC < 5))
            {
                n10 = 0;
                while ((n10 < 5))
                {
                    if (M2Share.g_Config.SpitMap[btDir, nC, n10] == 1)
                    {
                        n14        = m_nCurrX - 2 + n10;
                        n18        = m_nCurrY - 2 + nC;
                        BaseObject = m_PEnvir.GetMovingObject(n14, n18, true);
                        if ((BaseObject != null) && (BaseObject != this) && (IsProperTarget(BaseObject)) &&
                            (HUtil32.Random(BaseObject.m_btSpeedPoint) < m_btHitPoint))
                        {
                            n1C = BaseObject.GetMagStruckDamage(this, n1C);
                            if (n1C > 0)
                            {
                                BaseObject.StruckDamage(n1C);
                                BaseObject.SetLastHiter(this);
                                BaseObject.SendDelayMsg(Grobal2.RM_STRUCK, Grobal2.RM_10101, n1C, m_WAbil.HP, m_WAbil.MaxHP, Parse(this), "", 300);
                                if (m_boUsePoison)
                                {
                                    if (HUtil32.Random(m_btAntiPoison + 20) == 0)
                                    {
                                        BaseObject.MakePosion(Grobal2.POISON_DECHEALTH, 30, 1);
                                    }
                                }
                            }
                        }
                    }
                    n10++;
                }
                nC++;
            }
        }
Ejemplo n.º 9
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++;// 攻击计数
            }
        }
Ejemplo n.º 10
0
        public static int GetRPow(int wInt)
        {
            int result = 0;

            if (HUtil32.HiWord(wInt) > HUtil32.LoWord(wInt))
            {
                result = HUtil32.Random(HUtil32.HiWord(wInt) - HUtil32.LoWord(wInt) + 1) + HUtil32.LoWord(wInt);
            }
            else
            {
                result = HUtil32.LoWord(wInt);
            }
            return(result);
        }
Ejemplo n.º 11
0
        private void RefView()
        {
            GridHumanInfo.Items.Clear();
            RecalcHuman();
            ListViewItem lvItem = GridHumanInfo.Items.Add(PlayObject.m_Abil.MaxExp.ToString());

            lvItem.SubItems.Add((HUtil32.LoWord(PlayObject.m_WAbil.AC)).ToString() + "/" + (HUtil32.HiWord(PlayObject.m_WAbil.AC)).ToString());
            lvItem.SubItems.Add((HUtil32.LoWord(PlayObject.m_WAbil.MAC)).ToString() + "/" + (HUtil32.HiWord(PlayObject.m_WAbil.MAC)).ToString());
            lvItem.SubItems.Add((HUtil32.LoWord(PlayObject.m_WAbil.DC)).ToString() + "/" + (HUtil32.HiWord(PlayObject.m_WAbil.DC)).ToString());
            lvItem.SubItems.Add((HUtil32.LoWord(PlayObject.m_WAbil.MC)).ToString() + "/" + (HUtil32.HiWord(PlayObject.m_WAbil.MC)).ToString());
            lvItem.SubItems.Add((HUtil32.LoWord(PlayObject.m_WAbil.SC)).ToString() + "/" + (HUtil32.HiWord(PlayObject.m_WAbil.SC)).ToString());
            lvItem.SubItems.Add((PlayObject.m_WAbil.HP).ToString() + "/" + (PlayObject.m_WAbil.MaxHP).ToString());
            lvItem.SubItems.Add((PlayObject.m_WAbil.MP).ToString() + "/" + (PlayObject.m_WAbil.MaxMP).ToString());
            lvItem.SubItems.Add((PlayObject.m_WAbil.Weight).ToString() + "/" + (PlayObject.m_WAbil.MaxWeight).ToString());
            lvItem.SubItems.Add((PlayObject.m_WAbil.WearWeight).ToString() + "/" + (PlayObject.m_WAbil.MaxWearWeight).ToString());
            lvItem.SubItems.Add((PlayObject.m_WAbil.HandWeight).ToString() + "/" + (PlayObject.m_WAbil.MaxHandWeight).ToString());
        }
Ejemplo n.º 12
0
        public bool AttackTarget()
        {
            bool     result = false;
            int      nX;
            int      nY;
            int      nPower;
            string   str;
            string   Str1 = "";
            string   s30  = "";
            string   s2C  = "";
            TAbility WAbil;

            try
            {
                if ((HUtil32.GetTickCount() - this.m_dwHitTick) > this.m_nNextHitTime)
                {
                    this.m_dwHitTick = HUtil32.GetTickCount();
                    if (s_AttickXY.IndexOf("|") > 0) // 根据配置文件的攻击坐标,发消息显示场景
                    {
                        WAbil  = this.m_WAbil;
                        nPower = (HUtil32.Random(((short)HUtil32.HiWord(WAbil.DC) - HUtil32.LoWord(WAbil.DC)) + 1) + HUtil32.LoWord(WAbil.DC));
                        str    = s_AttickXY;
                        for (int I = 0; I <= AttackTarget_IsChar(s_AttickXY); I++)
                        {
                            str = HUtil32.GetValidStr3(str, ref Str1, new string[] { "|" });
                            if (Str1 != "")
                            {
                                s30 = HUtil32.GetValidStr3(Str1, ref s2C, new string[] { ",", "\09" });// X,Y
                                nX  = HUtil32.Str_ToInt(s2C, 0);
                                nY  = HUtil32.Str_ToInt(s30, 0);
                                MagBigExplosion(nPower, nX, nY, 1);
                            }
                        }
                    }
                    result = true;
                }
            }
            catch
            {
                M2Share.MainOutMessage("{异常} TFireDragonGuard.AttackTarget");
            }
            return(result);
        }
Ejemplo n.º 13
0
        private void LightingAttack(int nDir)
        {
            int      nSX = 0;
            int      nSY = 0;
            int      nTX = 0;
            int      nTY = 0;
            int      nPwr;
            TAbility WAbil;

            m_btDirection = (byte)nDir;
            SendRefMsg(Grobal2.RM_LIGHTING, 1, m_nCurrX, m_nCurrY, Parse(m_TargetCret), "");
            if (m_PEnvir.GetNextPosition(m_nCurrX, m_nCurrY, nDir, 1, ref nSX, ref nSY))
            {
                m_PEnvir.GetNextPosition(m_nCurrX, m_nCurrY, nDir, 9, ref nTX, ref nTY);
                WAbil = m_WAbil;
                nPwr  = HUtil32.Random((short)HUtil32.HiWord(WAbil.DC) - HUtil32.LoWord(WAbil.DC)) + 1 + HUtil32.LoWord(WAbil.DC);
                MagPassThroughMagic(nSX, nSY, nTX, nTY, nDir, nPwr, nPwr, true, 0);
            }
            BreakHolySeizeMode();
        }
Ejemplo n.º 14
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, "");
            }
        }
Ejemplo n.º 15
0
        private void sub_4A9F6C(byte btDir)
        {
            TAbility    WAbil;
            int         n10;
            TBaseObject BaseObject;

            m_btDirection = btDir;
            WAbil         = m_WAbil;
            n10           = HUtil32.Random((short)HUtil32.HiWord(WAbil.DC) - HUtil32.LoWord(WAbil.DC)) + 1 + HUtil32.LoWord(WAbil.DC);
            if (n10 > 0)
            {
                SendRefMsg(Grobal2.RM_HIT, m_btDirection, m_nCurrX, m_nCurrY, 0, "");
                BaseObject = GetPoseCreate();
                if ((BaseObject != null) && IsProperTarget(BaseObject) && (m_nAntiMagic >= 0))
                {
                    n10 = BaseObject.GetMagStruckDamage(this, n10);
                    if (n10 > 0)
                    {
                        BaseObject.StruckDamage(n10);
                        BaseObject.SendDelayMsg(Grobal2.RM_STRUCK, Grobal2.RM_10101, n10, BaseObject.m_WAbil.HP, BaseObject.m_WAbil.MaxHP, Parse(this), "", 300);
                    }
                }
            }
        }
Ejemplo n.º 16
0
        /// <summary>
        /// 取物品的附属属性
        /// </summary>
        /// <param name="UserItem"></param>
        /// <param name="StdItem"></param>
        public unsafe void GetItemAddValue(TUserItem *UserItem, TStdItem *StdItem)
        {
            switch (StdItem->StdMode)
            {
            case 5:
            case 6:
                StdItem->DC  = HUtil32.MakeLong(HUtil32.LoWord(StdItem->DC), HUtil32.HiWord(StdItem->DC) + UserItem->btValue[0]);
                StdItem->MC  = HUtil32.MakeLong(HUtil32.LoWord(StdItem->MC), HUtil32.HiWord(StdItem->MC) + UserItem->btValue[1]);
                StdItem->SC  = HUtil32.MakeLong(HUtil32.LoWord(StdItem->SC), HUtil32.HiWord(StdItem->SC) + UserItem->btValue[2]);
                StdItem->AC  = HUtil32.MakeLong(HUtil32.LoWord(StdItem->AC) + UserItem->btValue[3], HUtil32.HiWord(StdItem->AC) + UserItem->btValue[5]);
                StdItem->MAC = HUtil32.MakeLong(HUtil32.LoWord(StdItem->MAC) + UserItem->btValue[4], HUtil32.HiWord(StdItem->MAC) + UserItem->btValue[6]);
                if (((byte)UserItem->btValue[7] - 1) < 10)     // 神圣
                {
                    StdItem->Source = (sbyte)UserItem->btValue[7];
                }
                if (UserItem->btValue[10] != 0)
                {
                    StdItem->Reserved = Convert.ToByte(StdItem->Reserved | 1);
                }
                break;

            case 10:
            case 11:
                StdItem->AC  = HUtil32.MakeLong(HUtil32.LoWord(StdItem->AC), HUtil32.HiWord(StdItem->AC) + UserItem->btValue[0]);
                StdItem->MAC = HUtil32.MakeLong(HUtil32.LoWord(StdItem->MAC), HUtil32.HiWord(StdItem->MAC) + UserItem->btValue[1]);
                StdItem->DC  = HUtil32.MakeLong(HUtil32.LoWord(StdItem->DC), HUtil32.HiWord(StdItem->DC) + UserItem->btValue[2]);
                StdItem->MC  = HUtil32.MakeLong(HUtil32.LoWord(StdItem->MC), HUtil32.HiWord(StdItem->MC) + UserItem->btValue[3]);
                StdItem->SC  = HUtil32.MakeLong(HUtil32.LoWord(StdItem->SC), HUtil32.HiWord(StdItem->SC) + UserItem->btValue[4]);
                break;

            case 15:
            case 16:
            case 19:
            case 20:
            case 21:
            case 22:
            case 23:
            case 24:
            case 26:
            case 51:
            case 52:
            case 53:
            case 54:
            case 62:
            case 63:
            case 64:
            case 30:     // 加入勋章分类
                StdItem->AC  = HUtil32.MakeLong(HUtil32.LoWord(StdItem->AC), HUtil32.HiWord(StdItem->AC) + UserItem->btValue[0]);
                StdItem->MAC = HUtil32.MakeLong(HUtil32.LoWord(StdItem->MAC), HUtil32.HiWord(StdItem->MAC) + UserItem->btValue[1]);
                StdItem->DC  = HUtil32.MakeLong(HUtil32.LoWord(StdItem->DC), HUtil32.HiWord(StdItem->DC) + UserItem->btValue[2]);
                StdItem->MC  = HUtil32.MakeLong(HUtil32.LoWord(StdItem->MC), HUtil32.HiWord(StdItem->MC) + UserItem->btValue[3]);
                StdItem->SC  = HUtil32.MakeLong(HUtil32.LoWord(StdItem->SC), HUtil32.HiWord(StdItem->SC) + UserItem->btValue[4]);
                if (UserItem->btValue[5] > 0)
                {
                    StdItem->Need = UserItem->btValue[5];
                }
                if (UserItem->btValue[6] > 0)
                {
                    StdItem->NeedLevel = UserItem->btValue[6];
                }
                break;
            }
            if ((UserItem->btValue[20] > 0) || (StdItem->Source > 0))
            {
                switch (StdItem->StdMode) // 吸伤属性
                {
                case 15:
                case 16:
                case 19:
                case 21:
                case 20:
                case 22:
                case 23:
                case 24:
                case 26:
                case 30:
                case 52:
                case 54:
                case 62:
                case 64:
                    // 头盔,项链,戒指,手镯,鞋子,腰带,勋章
                    // 140
                    if (StdItem->Shape == 188)
                    {
                        StdItem->Source = Convert.ToSByte(StdItem->Source + UserItem->btValue[20]);
                        if (StdItem->Source > 100)
                        {
                            StdItem->Source = 100;
                        }
                        StdItem->Reserved = Convert.ToByte(StdItem->Reserved + UserItem->btValue[9]);
                        if (StdItem->Reserved > 5)
                        {
                            StdItem->Reserved = 5;    // 吸伤装备等级
                        }
                    }
                    break;
                }
            }
        }
Ejemplo n.º 17
0
        /// <summary>
        /// 寒冰掌,治疗术 攻击
        /// </summary>
        /// <returns></returns>
        public override bool AttackTarget()
        {
            bool result = false;
            int  nPower;
            int  nDir;
            int  push;

            if (this.m_TargetCret == null)
            {
                return(result);
            }
            if (HUtil32.GetTickCount() - this.m_dwHitTick > this.m_nNextHitTime)
            {
                this.m_dwHitTick = (uint)HUtil32.GetTickCount();
                if (!this.m_TargetCret.m_boDeath)
                {
                    if ((Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 5) && (Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 5))
                    {
                        this.m_dwTargetFocusTick = (uint)HUtil32.GetTickCount();
                        if ((this.m_WAbil.HP < HUtil32.Round(this.m_WAbil.MaxHP * 0.6)) && (HUtil32.Random(2) == 0))
                        {
                            // 使用治疗术
                            this.SendRefMsg(Grobal2.RM_FAIRYATTACKRATE, 1, this.m_nCurrX, this.m_nCurrY, 0, ""); // 治愈术
                            this.SendDelayMsg(this, Grobal2.RM_MAGHEALING, 0, 50, 0, 0, "", 800);                // 发消息给客户端,显示治愈术效果
                            result = true;
                            return(result);
                        }
                        else
                        {
                            // 寒冰掌
                            nPower = this.GetAttackPower(HUtil32.LoWord(this.m_WAbil.DC), ((short)HUtil32.HiWord(this.m_WAbil.DC) - HUtil32.LoWord(this.m_WAbil.DC)));
                            this.SendDelayMsg(this, Grobal2.RM_DELAYMAGIC, nPower, HUtil32.MakeLong(this.m_TargetCret.m_nCurrX, this.m_TargetCret.m_nCurrY), 2, 0, "", 600);
                            if ((!this.m_TargetCret.m_boStickMode) && (HUtil32.Random(2) == 0))
                            {
                                push = HUtil32.Random(3) - 1;
                                if (push > 0)
                                {
                                    nDir = M2Share.GetNextDirection(this.m_nCurrX, this.m_nCurrY, this.m_TargetCret.m_nCurrX, this.m_TargetCret.m_nCurrY);
                                    this.SendDelayMsg(this, Grobal2.RM_DELAYPUSHED, nDir, HUtil32.MakeLong(this.m_TargetCret.m_nCurrX, this.m_TargetCret.m_nCurrY), push, 0, "", 600);
                                }
                            }
                            // 发消息给客户端,显示寒冰掌效果
                            this.SendRefMsg(Grobal2.RM_LIGHTING, 1, this.m_nCurrX, this.m_nCurrY, 0, "");
                            result = true;
                            return(result);
                        }
                    }
                    if (this.m_TargetCret.m_PEnvir == this.m_PEnvir)
                    {
                        if ((Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 11) && (Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 11))
                        {
                            this.SetTargetXY(this.m_TargetCret.m_nCurrX, this.m_TargetCret.m_nCurrY);
                        }
                    }
                    else
                    {
                        this.DelTargetCreat();
                    }
                }
            }
            return(result);
        }
Ejemplo n.º 18
0
        /// <summary>
        /// 使用灭天火攻击
        /// </summary>
        /// <returns></returns>
        public override bool AttackTarget()
        {
            bool result;
            int  nPower = -1;

            result = false;
            if ((this.m_TargetCret == null))
            {
                return(result);
            }
            if (HUtil32.GetTickCount() - this.m_dwHitTick > this.m_nNextHitTime)
            {
                this.m_dwHitTick = (uint)HUtil32.GetTickCount();
                if ((Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 5) && (Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 5))
                {
                    this.m_dwTargetFocusTick = (uint)HUtil32.GetTickCount();
                    if (!this.m_TargetCret.m_boDeath)
                    {
                        if ((this.m_TargetCret.m_wStatusTimeArr[Grobal2.POISON_DAMAGEARMOR] == 0))
                        {
                            // 目标红毒时间到,才重新使用施毒术
                            if (this.IsProperTarget(this.m_TargetCret))
                            {
                                if (HUtil32.Random(this.m_TargetCret.m_btAntiPoison + 7) <= 6)
                                {
                                    // 施毒
                                    nPower = this.GetAttackPower(HUtil32.LoWord(this.m_WAbil.DC), ((short)HUtil32.HiWord(this.m_WAbil.DC) - HUtil32.LoWord(this.m_WAbil.DC))); // 中毒类型:红毒
                                    this.m_TargetCret.SendDelayMsg(this, Grobal2.RM_POISON, Grobal2.POISON_DAMAGEARMOR, nPower, this.ToInt(), 4, "", 150);                     // 发消息给客户端,显示施毒效果
                                    this.SendRefMsg(Grobal2.RM_FAIRYATTACKRATE, 1, this.m_nCurrX, this.m_nCurrY, m_TargetCret.ToInt(), "");
                                    result = true;
                                    return(result);
                                }
                            }
                        }
                        else
                        {
                            // 灭天火
                            if ((HUtil32.Random(10) >= this.m_TargetCret.m_nAntiMagic))
                            {
                                nPower = this.GetAttackPower(HUtil32.LoWord(this.m_WAbil.DC), ((short)HUtil32.HiWord(this.m_WAbil.DC) - HUtil32.LoWord(this.m_WAbil.DC)));
                                if (this.m_TargetCret.m_btLifeAttrib == Grobal2.LA_UNDEAD)
                                {
                                    nPower = (int)HUtil32.Round(nPower * 1.5);
                                }
                                // 如果为不死系
                                this.SendDelayMsg(this, Grobal2.RM_DELAYMAGIC, nPower, HUtil32.MakeLong(this.m_TargetCret.m_nCurrX, this.m_TargetCret.m_nCurrY),
                                                  2, m_TargetCret.ToInt(), "", 600);// 发消息给客户端,显示灭天火效果
                                this.SendRefMsg(Grobal2.RM_LIGHTING, 1, this.m_nCurrX, this.m_nCurrY, m_TargetCret.ToInt(), "");
                                if (M2Share.g_Config.boPlayObjectReduceMP)
                                {
                                    this.m_TargetCret.DamageSpell((int)Math.Abs(HUtil32.Round(nPower * 0.35)));// 击中减MP值,减35%
                                }
                                result = true;
                                return(result);
                            }
                            else
                            {
                                // 物理攻击
                                if ((Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 2) && (Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 2))
                                {
                                    nPower = this.GetAttackPower(HUtil32.LoWord(this.m_WAbil.DC), ((short)HUtil32.HiWord(this.m_WAbil.DC) - HUtil32.LoWord(this.m_WAbil.DC)));
                                    this.HitMagAttackTarget(this.m_TargetCret, nPower / 2, nPower / 2, true);
                                    result = true;
                                    return(result);
                                }
                            }
                        }
                    }
                    if (this.m_TargetCret.m_PEnvir == this.m_PEnvir)
                    {
                        if ((Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 11) && (Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 11))
                        {
                            this.SetTargetXY(this.m_TargetCret.m_nCurrX, this.m_TargetCret.m_nCurrY);
                        }
                    }
                    else
                    {
                        this.DelTargetCreat();
                    }
                }
            }
            return(result);
        }
Ejemplo n.º 19
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;
            }
        }
Ejemplo n.º 20
0
        public unsafe void CmdMakeItem(string[] @Params, TPlayObject PlayObject)
        {
            if (@Params == null)
            {
                return;
            }
            TUserItem *UserItem;
            TStdItem * StdItem;
            string     sItemName = @Params.Length > 0 ? @Params[0] : "";                 //物品名称
            int        nCount    = @Params.Length > 1 ? Convert.ToInt32(@Params[1]) : 1; //数量
            string     sParam    = @Params.Length > 2 ? @Params[2] : "";                 //可选参数(持久力)

            if ((sItemName == ""))
            {
                if (M2Share.g_Config.boGMShowFailMsg)
                {
                    PlayObject.SysMsg(string.Format(GameMsgDef.g_sGameCommandParamUnKnow, this.Attributes.Name, GameMsgDef.g_sGamecommandMakeHelpMsg), TMsgColor.c_Red, TMsgType.t_Hint);
                }
                return;
            }
            if ((nCount <= 0))
            {
                nCount = 1;
            }
            if ((nCount > 10))
            {
                nCount = 10;
            }
            if ((PlayObject.m_btPermission < this.Attributes.nPermissionMax))
            {
                if (!M2Share.CanMakeItem(sItemName))
                {
                    PlayObject.SysMsg(GameMsgDef.g_sGamecommandMakeItemNameOrPerMissionNot, TMsgColor.c_Red, TMsgType.t_Hint);
                    return;
                }
                if (M2Share.g_CastleManager.InCastleWarArea(PlayObject) != null) // 攻城区域,禁止使用此功能
                {
                    PlayObject.SysMsg(GameMsgDef.g_sGamecommandMakeInCastleWarRange, TMsgColor.c_Red, TMsgType.t_Hint);
                    return;
                }
                if (!PlayObject.InSafeZone())
                {
                    PlayObject.SysMsg(GameMsgDef.g_sGamecommandMakeInSafeZoneRange, TMsgColor.c_Red, TMsgType.t_Hint);
                    return;
                }
                nCount = 1;
            }
            for (int I = 0; I < nCount; I++)
            {
                if (PlayObject.m_ItemList.Count >= Grobal2.MAXBAGITEM)
                {
                    return;
                }
                UserItem = (TUserItem *)Marshal.AllocHGlobal(sizeof(TUserItem));
                if (UserEngine.CopyToUserItemFromName(sItemName, UserItem))
                {
                    StdItem = UserEngine.GetStdItem(UserItem->wIndex);
                    if ((StdItem->Price >= 15000) && !M2Share.g_Config.boTestServer && (PlayObject.m_btPermission < 5))
                    {
                        Marshal.FreeHGlobal((IntPtr)UserItem);
                        UserItem = null;
                    }
                    else
                    {
                        if (HUtil32.Random(M2Share.g_Config.nMakeRandomAddValue) == 0)
                        {
                            UserEngine.RandomUpgradeItem(UserItem);
                        }
                    }
                    if (PlayObject.m_btPermission >= this.Attributes.nPermissionMax)
                    {
                        UserItem->MakeIndex = M2Share.GetItemNumberEx();// 制造的物品另行取得物品ID
                    }
                    PlayObject.m_ItemList.Add((IntPtr)UserItem);
                    PlayObject.SendAddItem(UserItem);
                    if ((PlayObject.m_btPermission >= 6))
                    {
                        M2Share.MainOutMessage("[制造物品] " + PlayObject.m_sCharName + " " + sItemName + "(" + (UserItem->MakeIndex).ToString() + ")");
                    }
                    if (StdItem->NeedIdentify == 1)
                    {
                        M2Share.AddGameDataLog("5" + "\09" + PlayObject.m_sMapName + "\09" + (PlayObject.m_nCurrX).ToString() + "\09" + (PlayObject.m_nCurrY).ToString()
                                               + "\09" + PlayObject.m_sCharName + "\09" + HUtil32.SBytePtrToString(StdItem->Name, StdItem->NameLen) + "\09" + (UserItem->MakeIndex).ToString() + "\09" + "(" +
                                               (HUtil32.LoWord(StdItem->DC)).ToString() + "/" + (HUtil32.HiWord(StdItem->DC)).ToString() + ")" + "(" + (HUtil32.LoWord(StdItem->MC)).ToString()
                                               + "/" + (HUtil32.HiWord(StdItem->MC)).ToString() + ")" + "(" + (HUtil32.LoWord(StdItem->SC)).ToString() + "/" + (HUtil32.HiWord(StdItem->SC)).ToString()
                                               + ")" + "(" + (HUtil32.LoWord(StdItem->AC)).ToString() + "/" + (HUtil32.HiWord(StdItem->AC)).ToString() + ")" + "(" + (HUtil32.LoWord(StdItem->MAC))
                                               .ToString() + "/" + (HUtil32.HiWord(StdItem->MAC)).ToString() + ")" + (UserItem->btValue[0]).ToString()
                                               + "/" + (UserItem->btValue[1]).ToString() + "/" + (UserItem->btValue[2]).ToString() + "/" + (UserItem->btValue[3]).ToString()
                                               + "/" + (UserItem->btValue[4]).ToString() + "/" + (UserItem->btValue[5]).ToString() + "/" + (UserItem->btValue[6]).ToString()
                                               + "/" + (UserItem->btValue[7]).ToString() + "/" + (UserItem->btValue[8]).ToString() + "/" + (UserItem->btValue[14]).ToString()
                                               + "\09" + PlayObject.m_sCharName);
                    }
                }
                else
                {
                    Marshal.FreeHGlobal((IntPtr)UserItem);
                    UserItem = null;
                    PlayObject.SysMsg(string.Format(GameMsgDef.g_sGamecommandMakeItemNameNotFound, sItemName), TMsgColor.c_Red, TMsgType.t_Hint);
                    break;
                }
            }
        }
Ejemplo n.º 21
0
        /****************************************************************
        ** 函 数 名:RefHumanInfo
        ** 功能描述:刷新表格
        ** 输入参数:无
        ** 输出参数:无
        ** 返 回 值:无
        ** 创 建 人:陶志强
        ** 日    期:2013-4-22
        ** 修 改 人:
        ** 日    期:
        ****************************************************************/
        private unsafe void RefHumanInfo()
        {
            int        i;
            int        nTotleUsePoint;
            TStdItem   StdItem;
            TStdItem * Item;
            TUserItem *UserItem;

            if ((PlayObject == null))
            {
                return;
            }
            if (PlayObject.m_boNotOnlineAddExp)
            {
                EditSayMsg.Enabled = true;
            }
            else
            {
                EditSayMsg.Enabled = false;
            }
            EditSayMsg.Text    = PlayObject.m_sAutoSendMsg;
            EditName.Text      = PlayObject.m_sCharName;
            EditMap.Text       = PlayObject.m_sMapName + "(" + PlayObject.m_PEnvir.sMapDesc + ")";
            EditXY.Text        = (PlayObject.m_nCurrX).ToString() + ":" + (PlayObject.m_nCurrY).ToString();
            EditAccount.Text   = PlayObject.m_sUserID;
            EditIPaddr.Text    = PlayObject.m_sIPaddr;
            EditLogonTime.Text = (PlayObject.m_dLogonTime).ToString();
            EditLogonLong.Text = ((HUtil32.GetTickCount() - PlayObject.m_dwLogonTick) / 60000).ToString() + " 分钟";//登陆时间(分)// (60 * 1000)
            EditLevel.Value    = PlayObject.m_Abil.Level;
            EditGold.Value     = PlayObject.m_nGold;
            EditPKPoint.Value  = PlayObject.m_nPkPoint;
            EditExp.Value      = PlayObject.m_Abil.Exp;
            EditMaxExp.Value   = PlayObject.m_Abil.MaxExp;
            if (PlayObject.m_boTrainingNG)
            {
                EditNGLevel.Enabled    = true;
                EditExpSkill69.Enabled = true;
                EditNGLevel.Value      = PlayObject.m_NGLevel;
                // 20081005 内功等级
                EditExpSkill69.Value = PlayObject.m_ExpSkill69;
                // 20081005 内功心法当前经验
            }


            EditAC.Text = (HUtil32.LoWord(PlayObject.m_WAbil.AC)).ToString() + "/" + (HUtil32.HiWord(PlayObject.m_WAbil.AC)).ToString();
            // 防御


            EditMAC.Text = (HUtil32.LoWord(PlayObject.m_WAbil.MAC)).ToString() + "/" + (HUtil32.HiWord(PlayObject.m_WAbil.MAC)).ToString();
            // 魔防


            EditDC.Text = (HUtil32.LoWord(PlayObject.m_WAbil.DC)).ToString() + "/" + (HUtil32.HiWord(PlayObject.m_WAbil.DC)).ToString();
            // 攻击力


            EditMC.Text = (HUtil32.LoWord(PlayObject.m_WAbil.MC)).ToString() + "/" + (HUtil32.HiWord(PlayObject.m_WAbil.MC)).ToString();
            // 魔法


            EditSC.Text = (HUtil32.LoWord(PlayObject.m_WAbil.SC)).ToString() + "/" + (HUtil32.HiWord(PlayObject.m_WAbil.SC)).ToString();
            // 道术
            EditHP.Text           = (PlayObject.m_WAbil.HP).ToString() + "/" + (PlayObject.m_WAbil.MaxHP).ToString();
            EditMP.Text           = (PlayObject.m_WAbil.MP).ToString() + "/" + (PlayObject.m_WAbil.MaxMP).ToString();
            EditGameGold.Value    = PlayObject.m_nGameGold;
            EditGameDiaMond.Value = PlayObject.m_nGAMEDIAMOND;
            // 金刚石
            EditGameGird.Value = PlayObject.m_nGAMEGIRD;
            // 灵符
            EditGamePoint.Value          = PlayObject.m_nGamePoint;
            EditCreditPoint.Value        = PlayObject.m_btCreditPoint;
            EditBonusPoint.Value         = PlayObject.m_nBonusPoint;
            nTotleUsePoint               = PlayObject.m_BonusAbil.DC + PlayObject.m_BonusAbil.MC + PlayObject.m_BonusAbil.SC + PlayObject.m_BonusAbil.AC + PlayObject.m_BonusAbil.MAC + PlayObject.m_BonusAbil.HP + PlayObject.m_BonusAbil.MP + PlayObject.m_BonusAbil.Hit + PlayObject.m_BonusAbil.Speed + PlayObject.m_BonusAbil.X2;
            EditEditBonusPointUsed.Value = nTotleUsePoint;
            CheckBoxGameMaster.Checked   = PlayObject.m_boAdminMode;
            CheckBoxSuperMan.Checked     = PlayObject.m_boSuperMan;
            CheckBoxObserver.Checked     = PlayObject.m_boObMode;
            if (PlayObject.m_boDeath)
            {
                EditHumanStatus.Text = "死亡";
            }
            else if (PlayObject.m_boGhost)
            {
                EditHumanStatus.Text = "下线";
                PlayObject           = null;
            }
            else
            {
                EditHumanStatus.Text = "在线";
            }

            //身上物品
            for (i = PlayObject.m_UseItems.GetLowerBound(0); i <= PlayObject.m_UseItems.GetUpperBound(0); i++)
            {
                UserItem = PlayObject.m_UseItems[i];
                if (UserItem->wIndex == 0)
                {
                    continue;
                }
                StdItem = *M2Share.UserEngine.GetStdItem(UserItem->wIndex);
                if (StdItem.Name == null)
                {
                    GridUserItem.Items[i].SubItems[1].Text = "";
                    GridUserItem.Items[i].SubItems[2].Text = "";
                    GridUserItem.Items[i].SubItems[3].Text = "";
                    GridUserItem.Items[i].SubItems[4].Text = "";
                    GridUserItem.Items[i].SubItems[5].Text = "";
                    GridUserItem.Items[i].SubItems[6].Text = "";
                    GridUserItem.Items[i].SubItems[7].Text = "";
                    GridUserItem.Items[i].SubItems[8].Text = "";
                    GridUserItem.Items[i].SubItems[9].Text = "";
                    continue;
                }
                Item = &StdItem;
                M2Share.ItemUnit.GetItemAddValue(UserItem, Item);
                GridUserItem.Items[i].SubItems[1].Text = (HUtil32.SBytePtrToString(Item->Name, (int)Item->NameLen));
                GridUserItem.Items[i].SubItems[2].Text = (UserItem->MakeIndex.ToString());
                GridUserItem.Items[i].SubItems[3].Text = (string.Format("{0}/{1}", UserItem->Dura, UserItem->DuraMax));
                GridUserItem.Items[i].SubItems[4].Text = (string.Format("{0}/{1}", HUtil32.LoWord(Item->DC), HUtil32.HiWord(Item->DC)));
                GridUserItem.Items[i].SubItems[5].Text = (string.Format("{0}/{1}", HUtil32.LoWord(Item->MC), HUtil32.HiWord(Item->MC)));
                GridUserItem.Items[i].SubItems[6].Text = (string.Format("{0}/{1}", HUtil32.LoWord(Item->SC), HUtil32.HiWord(Item->SC)));
                GridUserItem.Items[i].SubItems[7].Text = (string.Format("{0}/{1}", HUtil32.LoWord(Item->AC), HUtil32.HiWord(Item->AC)));
                GridUserItem.Items[i].SubItems[8].Text = (string.Format("{0}/{1}", HUtil32.LoWord(Item->MAC), HUtil32.HiWord(Item->MAC)));
                GridUserItem.Items[i].SubItems[9].Text = (string.Format("{0}/{1}/{2}/{3}/{4}/{5}/{6}", UserItem->btValue[0], UserItem->btValue[1], UserItem->btValue[2], UserItem->btValue[3], UserItem->btValue[4], UserItem->btValue[5], UserItem->btValue[6]));
            }

            //背包
            i = 0;
            GridBagItem.Items.Clear();
            foreach (IntPtr pItem in PlayObject.m_ItemList)
            {
                UserItem = (TUserItem *)pItem;
                StdItem  = *M2Share.UserEngine.GetStdItem(UserItem->wIndex);
                if (StdItem.Name == null)
                {
                    GridBagItem.Items[i].SubItems[1].Text = "";
                    GridBagItem.Items[i].SubItems[2].Text = "";
                    GridBagItem.Items[i].SubItems[3].Text = "";
                    GridBagItem.Items[i].SubItems[4].Text = "";
                    GridBagItem.Items[i].SubItems[5].Text = "";
                    GridBagItem.Items[i].SubItems[6].Text = "";
                    GridBagItem.Items[i].SubItems[7].Text = "";
                    GridBagItem.Items[i].SubItems[8].Text = "";
                    GridBagItem.Items[i].SubItems[9].Text = "";
                    continue;
                }
                Item = &StdItem;
                M2Share.ItemUnit.GetItemAddValue(UserItem, Item);
                ListViewItem lvItem = GridBagItem.Items.Add(i.ToString());
                lvItem.SubItems.Add(HUtil32.SBytePtrToString(Item->Name, Item->NameLen));
                lvItem.SubItems.Add(UserItem->MakeIndex.ToString());
                lvItem.SubItems.Add(string.Format("{0}/{1}", UserItem->Dura, UserItem->DuraMax));
                lvItem.SubItems.Add(string.Format("{0}/{1}", HUtil32.LoWord(Item->DC), HUtil32.HiWord(Item->DC)));
                lvItem.SubItems.Add(string.Format("{0}/{1}", HUtil32.LoWord(Item->MC), HUtil32.HiWord(Item->MC)));
                lvItem.SubItems.Add(string.Format("{0}/{1}", HUtil32.LoWord(Item->SC), HUtil32.HiWord(Item->SC)));
                lvItem.SubItems.Add(string.Format("{0}/{1}", HUtil32.LoWord(Item->AC), HUtil32.HiWord(Item->AC)));
                lvItem.SubItems.Add(string.Format("{0}/{1}", HUtil32.LoWord(Item->MAC), HUtil32.HiWord(Item->MAC)));
                lvItem.SubItems.Add(string.Format("{0}/{1}/{2}/{3}/{4}/{5}/{6}", UserItem->btValue[0], UserItem->btValue[1], UserItem->btValue[2], UserItem->btValue[3], UserItem->btValue[4], UserItem->btValue[5], UserItem->btValue[6]));
                i++;
            }

            //仓库
            i = 0;
            GridStorageItem.Items.Clear();
            foreach (IntPtr pItem in PlayObject.m_StorageItemList)
            {
                UserItem = (TUserItem *)pItem;
                StdItem  = *M2Share.UserEngine.GetStdItem(UserItem->wIndex);
                if (StdItem.Name == null)
                {
                    GridStorageItem.Items[i].SubItems[1].Text = "";
                    GridStorageItem.Items[i].SubItems[2].Text = "";
                    GridStorageItem.Items[i].SubItems[3].Text = "";
                    GridStorageItem.Items[i].SubItems[4].Text = "";
                    GridStorageItem.Items[i].SubItems[5].Text = "";
                    GridStorageItem.Items[i].SubItems[6].Text = "";
                    GridStorageItem.Items[i].SubItems[7].Text = "";
                    GridStorageItem.Items[i].SubItems[8].Text = "";
                    GridStorageItem.Items[i].SubItems[9].Text = "";
                    continue;
                }
                Item = &StdItem;
                M2Share.ItemUnit.GetItemAddValue(UserItem, Item);
                ListViewItem lvItem = GridStorageItem.Items.Add(i.ToString());
                lvItem.SubItems.Add(HUtil32.SBytePtrToString(Item->Name, Item->NameLen));
                lvItem.SubItems.Add(UserItem->MakeIndex.ToString());
                lvItem.SubItems.Add(string.Format("{0}/{1}", UserItem->Dura, UserItem->DuraMax));
                lvItem.SubItems.Add(string.Format("{0}/{1}", HUtil32.LoWord(Item->DC), HUtil32.HiWord(Item->DC)));
                lvItem.SubItems.Add(string.Format("{0}/{1}", HUtil32.LoWord(Item->MC), HUtil32.HiWord(Item->MC)));
                lvItem.SubItems.Add(string.Format("{0}/{1}", HUtil32.LoWord(Item->SC), HUtil32.HiWord(Item->SC)));
                lvItem.SubItems.Add(string.Format("{0}/{1}", HUtil32.LoWord(Item->AC), HUtil32.HiWord(Item->AC)));
                lvItem.SubItems.Add(string.Format("{0}/{1}", HUtil32.LoWord(Item->MAC), HUtil32.HiWord(Item->MAC)));
                lvItem.SubItems.Add(string.Format("{0}/{1}/{2}/{3}/{4}/{5}/{6}", UserItem->btValue[0], UserItem->btValue[1], UserItem->btValue[2], UserItem->btValue[3], UserItem->btValue[4], UserItem->btValue[5], UserItem->btValue[6]));
                i++;
            }

//#if HEROVERSION = 1 //判断是否为英雄版本的M2

            try
            {
                if (PlayObject.m_MyHero == null)
                {
                    return;
                }
                EditHeroName.Text     = PlayObject.m_MyHero.m_sCharName;
                EditHeroMap.Text      = PlayObject.m_MyHero.m_sMapName + "(" + PlayObject.m_PEnvir.sMapDesc + ")";
                EditHeroXY.Text       = (PlayObject.m_MyHero.m_nCurrX).ToString() + ":" + (PlayObject.m_MyHero.m_nCurrY).ToString();
                EditHeroLevel.Value   = PlayObject.m_MyHero.m_Abil.Level;
                EditHeroPKPoint.Value = PlayObject.m_MyHero.m_nPkPoint;
                EditHeroExp.Value     = PlayObject.m_MyHero.m_Abil.Exp;
                EditHeroMaxExp.Value  = PlayObject.m_MyHero.m_Abil.MaxExp;
                EditHeroLoyal.Value   = ((THeroObject)(PlayObject.m_MyHero)).m_nLoyal;
                // 英雄的忠诚度(20080110)
                if (((THeroObject)(PlayObject.m_MyHero)).m_boTrainingNG)
                {
                    EditHeroNGLevel.Enabled    = true;
                    EditHeroExpSkill69.Enabled = true;
                    EditHeroNGLevel.Value      = ((THeroObject)(PlayObject.m_MyHero)).m_NGLevel;
                    // 20081005 内功等级
                    EditHeroExpSkill69.Value = ((THeroObject)(PlayObject.m_MyHero)).m_ExpSkill69;
                    // 20081005 内功心法当前经验
                }


                //身上物品
                for (i = PlayObject.m_MyHero.m_UseItems.GetLowerBound(0); i <= PlayObject.m_UseItems.GetUpperBound(0); i++)
                {
                    UserItem = PlayObject.m_UseItems[i];
                    if (UserItem->wIndex == 0)
                    {
                        continue;
                    }
                    StdItem = *M2Share.UserEngine.GetStdItem(UserItem->wIndex);
                    if (StdItem.Name == null)
                    {
                        GridHeroUserItem.Items[i].SubItems[1].Text = "";
                        GridHeroUserItem.Items[i].SubItems[2].Text = "";
                        GridHeroUserItem.Items[i].SubItems[3].Text = "";
                        GridHeroUserItem.Items[i].SubItems[4].Text = "";
                        GridHeroUserItem.Items[i].SubItems[5].Text = "";
                        GridHeroUserItem.Items[i].SubItems[6].Text = "";
                        GridHeroUserItem.Items[i].SubItems[7].Text = "";
                        GridHeroUserItem.Items[i].SubItems[8].Text = "";
                        GridHeroUserItem.Items[i].SubItems[9].Text = "";
                        continue;
                    }
                    Item = &StdItem;
                    M2Share.ItemUnit.GetItemAddValue(UserItem, Item);
                    GridHeroUserItem.Items[i].SubItems[1].Text = (HUtil32.SBytePtrToString(Item->Name, (int)Item->NameLen));
                    GridHeroUserItem.Items[i].SubItems[2].Text = (UserItem->MakeIndex.ToString());
                    GridHeroUserItem.Items[i].SubItems[3].Text = (string.Format("{0}/{1}", UserItem->Dura, UserItem->DuraMax));
                    GridHeroUserItem.Items[i].SubItems[4].Text = (string.Format("{0}/{1}", HUtil32.LoWord(Item->DC), HUtil32.HiWord(Item->DC)));
                    GridHeroUserItem.Items[i].SubItems[5].Text = (string.Format("{0}/{1}", HUtil32.LoWord(Item->MC), HUtil32.HiWord(Item->MC)));
                    GridHeroUserItem.Items[i].SubItems[6].Text = (string.Format("{0}/{1}", HUtil32.LoWord(Item->SC), HUtil32.HiWord(Item->SC)));
                    GridHeroUserItem.Items[i].SubItems[7].Text = (string.Format("{0}/{1}", HUtil32.LoWord(Item->AC), HUtil32.HiWord(Item->AC)));
                    GridHeroUserItem.Items[i].SubItems[8].Text = (string.Format("{0}/{1}", HUtil32.LoWord(Item->MAC), HUtil32.HiWord(Item->MAC)));
                    GridHeroUserItem.Items[i].SubItems[9].Text = (string.Format("{0}/{1}/{2}/{3}/{4}/{5}/{6}", UserItem->btValue[0], UserItem->btValue[1], UserItem->btValue[2], UserItem->btValue[3], UserItem->btValue[4], UserItem->btValue[5], UserItem->btValue[6]));
                }

                //背包
                i = 0;
                GridHeroBagItem.Items.Clear();
                foreach (IntPtr pItem in PlayObject.m_MyHero.m_ItemList)
                {
                    UserItem = (TUserItem *)pItem;
                    StdItem  = *M2Share.UserEngine.GetStdItem(UserItem->wIndex);
                    if (StdItem.Name == null)
                    {
                        GridHeroBagItem.Items[i].SubItems[1].Text = "";
                        GridHeroBagItem.Items[i].SubItems[2].Text = "";
                        GridHeroBagItem.Items[i].SubItems[3].Text = "";
                        GridHeroBagItem.Items[i].SubItems[4].Text = "";
                        GridHeroBagItem.Items[i].SubItems[5].Text = "";
                        GridHeroBagItem.Items[i].SubItems[6].Text = "";
                        GridHeroBagItem.Items[i].SubItems[7].Text = "";
                        GridHeroBagItem.Items[i].SubItems[8].Text = "";
                        GridHeroBagItem.Items[i].SubItems[9].Text = "";
                        continue;
                    }
                    Item = &StdItem;
                    M2Share.ItemUnit.GetItemAddValue(UserItem, Item);
                    ListViewItem lvItem = GridHeroBagItem.Items.Add(i.ToString());
                    lvItem.SubItems.Add(HUtil32.SBytePtrToString(Item->Name, Item->NameLen));
                    lvItem.SubItems.Add(UserItem->MakeIndex.ToString());
                    lvItem.SubItems.Add(string.Format("{0}/{1}", UserItem->Dura, UserItem->DuraMax));
                    lvItem.SubItems.Add(string.Format("{0}/{1}", HUtil32.LoWord(Item->DC), HUtil32.HiWord(Item->DC)));
                    lvItem.SubItems.Add(string.Format("{0}/{1}", HUtil32.LoWord(Item->MC), HUtil32.HiWord(Item->MC)));
                    lvItem.SubItems.Add(string.Format("{0}/{1}", HUtil32.LoWord(Item->SC), HUtil32.HiWord(Item->SC)));
                    lvItem.SubItems.Add(string.Format("{0}/{1}", HUtil32.LoWord(Item->AC), HUtil32.HiWord(Item->AC)));
                    lvItem.SubItems.Add(string.Format("{0}/{1}", HUtil32.LoWord(Item->MAC), HUtil32.HiWord(Item->MAC)));
                    lvItem.SubItems.Add(string.Format("{0}/{1}/{2}/{3}/{4}/{5}/{6}", UserItem->btValue[0], UserItem->btValue[1], UserItem->btValue[2], UserItem->btValue[3], UserItem->btValue[4], UserItem->btValue[5], UserItem->btValue[6]));
                    i++;
                }
            }
            catch {
            }
        }
Ejemplo n.º 22
0
        // 刷新属性
        public override bool AttackTarget()
        {
            bool        result;
            TAbility    WAbil;
            int         nPower;
            int         K;
            int         J;
            TBaseObject BaseObject;

            result = false;
            try
            {
                if (!sub_4A5B0C(this.m_nViewRange))  // 守护兽15格开始发亮,没有目标则退出
                {
                    return(result);
                }
                if ((HUtil32.GetTickCount() - m_dwLightTick > 10000))
                {
                    // 通知守护兽发光
                    m_dwLightTick = HUtil32.GetTickCount();
                    if (UserEngine.m_MonObjectList.Count > 0) // 循环列表,找出同个地图的守护兽,
                    {
                        K = HUtil32.Random(6);                // 随机一个守护兽攻击
                        J = 0;
                        for (int I = 0; I < UserEngine.m_MonObjectList.Count; I++)
                        {
                            BaseObject = ((TBaseObject)(UserEngine.m_MonObjectList[I]));
                            if (BaseObject != null)
                            {
                                if (BaseObject.m_PEnvir == this.m_PEnvir)
                                {
                                    // 同个地图内
                                    if (((BaseObject) as TFireDragonGuard).m_boLight || ((BaseObject) as TFireDragonGuard).m_boAttick)
                                    {
                                        break;  // 上次没有处理完就退出循环
                                    }
                                    if (J == K) // 最后熄灭的怪,即攻击怪
                                    {
                                        ((BaseObject) as TFireDragonGuard).m_boAttick    = true;
                                        ((BaseObject) as TFireDragonGuard).m_dwLightTime = 3000;                                               // 发光时长比其它怪多
                                        BaseObject.SendRefMsg(Grobal2.RM_FAIRYATTACKRATE, 1, BaseObject.m_nCurrX, BaseObject.m_nCurrY, 0, ""); // 发送最后熄灭的特殊消息(发亮)
                                    }
                                    else
                                    {
                                        // 发送同时熄灭的消息(发亮)
                                        BaseObject.SendRefMsg(Grobal2.RM_LIGHTING, 1, BaseObject.m_nCurrX, BaseObject.m_nCurrY, 0, "");
                                    }
                                    ((BaseObject) as TFireDragonGuard).m_boLight           = true;
                                    ((BaseObject) as TFireDragonGuard).m_dwSearchEnemyTick = HUtil32.GetTickCount();
                                    J++;
                                    if (J >= 6)
                                    {
                                        break;// 6个怪就退出循环
                                    }
                                }
                            }
                        }
                    }
                }
                if (!sub_4A5B0C(this.m_nViewRange - 2))
                {
                    return(result);// 火龙魔兽11格,没有目标则退出
                }
                if (((int)HUtil32.GetTickCount() - this.m_dwHitTick) > this.m_nNextHitTime)
                {
                    this.m_dwHitTick = HUtil32.GetTickCount();
                    if (HUtil32.Random(3) == 0)
                    {
                        // 群雷攻击
                        this.SendAttackMsg(Grobal2.RM_HIT, this.m_btDirection, this.m_nCurrX, this.m_nCurrY);
                        WAbil  = this.m_WAbil;
                        nPower = (HUtil32.Random(((short)HUtil32.HiWord(WAbil.DC) - HUtil32.LoWord(WAbil.DC)) + 1) + HUtil32.LoWord(WAbil.DC));
                        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)
                                {
                                    continue;
                                }
                                if (BaseObject.m_boDeath)
                                {
                                    continue;
                                }
                                if (this.IsProperTarget(BaseObject))
                                {
                                    if ((Math.Abs(this.m_nCurrX - BaseObject.m_nCurrX) < this.m_nViewRange) && (Math.Abs(this.m_nCurrY - BaseObject.m_nCurrY) < this.m_nViewRange))
                                    {
                                        this.m_dwTargetFocusTick = HUtil32.GetTickCount();
                                        this.SendDelayMsg(this, Grobal2.RM_DELAYMAGIC, nPower, HUtil32.MakeLong(BaseObject.m_nCurrX, BaseObject.m_nCurrY), 2, 0, "", 600);
                                        if (HUtil32.Random(4) == 0)
                                        {
                                            this.m_TargetCret = BaseObject;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        // 大火圈攻击
                        if (this.m_TargetCret != null)
                        {
                            WAbil  = this.m_WAbil;
                            nPower = (HUtil32.Random(((short)HUtil32.HiWord(WAbil.DC) - HUtil32.LoWord(WAbil.DC)) + 1) + HUtil32.LoWord(WAbil.DC));
                            MagBigExplosion(nPower, this.m_TargetCret.m_nCurrX, this.m_TargetCret.m_nCurrY, 3);
                            this.SendRefMsg(Grobal2.RM_LIGHTING, 1, this.m_nCurrX, this.m_nCurrY, 0, "");
                        }
                    }
                }
                result = true;
            }
            catch
            {
                M2Share.MainOutMessage("{异常} TFireDragon.AttackTarget");
            }
            return(result);
        }
Ejemplo n.º 23
0
        public void Announcement(TPlayObject PlayObject, string[] @Params)
        {
            string sGuildName = @Params.Length > 0 ? @Params[0] : "";
            TGUild Guild;
            string sHumanName;
            int    nPoint;

            if ((sGuildName == "") || ((sGuildName != "") && (sGuildName[0] == '?')))
            {
                PlayObject.SysMsg("查看行会争霸赛结果。", TMsgColor.c_Red, TMsgType.t_Hint);
                PlayObject.SysMsg(String.Format("命令格式: @{0} 行会名称", this.Attributes.Name), TMsgColor.c_Red, TMsgType.t_Hint);
                return;
            }
            if (!PlayObject.m_PEnvir.m_boFight3Zone)
            {
                PlayObject.SysMsg("此命令不能在当前地图中使用!!!", TMsgColor.c_Red, TMsgType.t_Hint);
                return;
            }
            Guild = GuildManager.FindGuild(sGuildName);
            if (Guild != null)
            {
                UserEngine.CryCry(Grobal2.RM_CRY, PlayObject.m_PEnvir, PlayObject.m_nCurrX, PlayObject.m_nCurrY, 1000, M2Share.g_Config.btCryMsgFColor,
                                  M2Share.g_Config.btCryMsgBColor, String.Format(" - {0} 行会争霸赛结果: ", Guild.sGuildName));
                for (int I = 0; I < Guild.TeamFightDeadList.Count; I++)
                {
                    nPoint     = Parse(Guild.TeamFightDeadList[I]);
                    sHumanName = Guild.TeamFightDeadList[I];
                    UserEngine.CryCry(Grobal2.RM_CRY, PlayObject.m_PEnvir, PlayObject.m_nCurrX, PlayObject.m_nCurrY, 1000,
                                      M2Share.g_Config.btCryMsgFColor, M2Share.g_Config.btCryMsgBColor, String.Format(" - {0}  : {1} 分/死亡{2}次。 ",
                                                                                                                      sHumanName, HUtil32.HiWord(nPoint), HUtil32.LoWord(nPoint)));
                }
            }
            UserEngine.CryCry(Grobal2.RM_CRY, PlayObject.m_PEnvir, PlayObject.m_nCurrX, PlayObject.m_nCurrY, 1000,
                              M2Share.g_Config.btCryMsgFColor, M2Share.g_Config.btCryMsgBColor, String.Format(" - [{0}] : {1} 分。", Guild.sGuildName, Guild.nContestPoint));
            UserEngine.CryCry(Grobal2.RM_CRY, PlayObject.m_PEnvir, PlayObject.m_nCurrX, PlayObject.m_nCurrY, 1000,
                              M2Share.g_Config.btCryMsgFColor, M2Share.g_Config.btCryMsgBColor, "------------------------------------");
        }
Ejemplo n.º 24
0
        /// <summary>
        /// 使用冰咆哮攻击
        /// </summary>
        /// <returns></returns>
        public override bool AttackTarget()
        {
            bool result;
            int  nPower;

            result = false;
            if ((this.m_TargetCret == null))
            {
                return(result);
            }
            if (HUtil32.GetTickCount() - this.m_dwHitTick > this.m_nNextHitTime)
            {
                this.m_dwHitTick = HUtil32.GetTickCount();
                if (!this.m_TargetCret.m_boDeath)
                {
                    if ((Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 5) && (Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 5))
                    {
                        this.m_dwTargetFocusTick = (uint)HUtil32.GetTickCount();
                        if ((this.m_TargetCret.m_wStatusTimeArr[Grobal2.POISON_DECHEALTH] == 0))// 目标绿毒时间到,才重新使用施毒术
                        {
                            if (this.IsProperTarget(this.m_TargetCret))
                            {
                                if (HUtil32.Random(this.m_TargetCret.m_btAntiPoison + 7) <= 6)                                                                                 // 施毒
                                {
                                    nPower = this.GetAttackPower(HUtil32.LoWord(this.m_WAbil.DC), ((short)HUtil32.HiWord(this.m_WAbil.DC) - HUtil32.LoWord(this.m_WAbil.DC))); // 中毒类型:绿毒
                                    this.m_TargetCret.SendDelayMsg(this, Grobal2.RM_POISON, Grobal2.POISON_DECHEALTH, nPower, 0, 4, "", 150);
                                    this.SendRefMsg(Grobal2.RM_FAIRYATTACKRATE, 1, this.m_nCurrX, this.m_nCurrY, 0, "");                                                       // 发给客户端毒的消息
                                    result = true;
                                    return(result);
                                }
                            }
                        }
                        else
                        {
                            // 冰咆哮
                            if ((HUtil32.Random(10) >= this.m_TargetCret.m_nAntiMagic))
                            {
                                // 魔法躲避
                                this.m_dwTargetFocusTick = (uint)HUtil32.GetTickCount();
                                this.m_btDirection       = M2Share.GetNextDirection(this.m_nCurrX, this.m_nCurrY, this.m_TargetCret.m_nCurrX, this.m_TargetCret.m_nCurrY);
                                nPower = this.GetAttackPower(HUtil32.LoWord(this.m_WAbil.DC), ((short)HUtil32.HiWord(this.m_WAbil.DC) - HUtil32.LoWord(this.m_WAbil.DC)));
                                M2Share.MagicManager.MagBigExplosion(this, nPower, this.m_TargetCret.m_nCurrX,
                                                                     this.m_TargetCret.m_nCurrY, M2Share.g_Config.nSnowWindRange, MagicConst.SKILL_SNOWWIND);// 发消息给客户端,显示冰咆哮效果
                                this.SendRefMsg(Grobal2.RM_LIGHTING, 1, this.m_nCurrX, this.m_nCurrY, 0, "");
                                result = true;
                                return(result);
                            }
                            else
                            {
                                // 物理攻击
                                if ((Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 2) && (Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 2))
                                {
                                    nPower = this.GetAttackPower(HUtil32.LoWord(this.m_WAbil.DC), ((short)HUtil32.HiWord(this.m_WAbil.DC) - HUtil32.LoWord(this.m_WAbil.DC)));
                                    this.HitMagAttackTarget(this.m_TargetCret, nPower / 2, nPower / 2, true);
                                    result = true;
                                    return(result);
                                }
                            }
                        }
                    }
                    if (this.m_TargetCret.m_PEnvir == this.m_PEnvir)
                    {
                        if ((Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 11) && (Math.Abs(this.m_nCurrX - this.m_TargetCret.m_nCurrX) <= 11))
                        {
                            this.SetTargetXY(this.m_TargetCret.m_nCurrX, this.m_TargetCret.m_nCurrY);
                        }
                    }
                    else
                    {
                        this.DelTargetCreat();
                    }
                }
            }
            return(result);
        }