// 远距离使用冰咆哮 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); }
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); }
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); }
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), ""); } }
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(); }
// 物理攻击 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); }
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(); }
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++; } }
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++;// 攻击计数 } }
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); }
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()); }
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); }
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(); }
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, ""); } }
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); } } } }
/// <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; } } }
/// <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); }
/// <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); }
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; } }
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; } } }
/**************************************************************** ** 函 数 名: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 { } }
// 刷新属性 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); }
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, "------------------------------------"); }
/// <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); }