public void MapMove(string[] @Params, TPlayObject PlayObject) { string sMapName = @Params.Length > 0 ? @Params[0] : ""; if ((sMapName == "") || ((sMapName != "") && (sMapName[0] == '?'))) { PlayObject.SysMsg(String.Format(GameMsgDef.g_sGameCommandParamUnKnow, this.Attributes.Name, GameMsgDef.g_sGameCommandMoveHelpMsg), TMsgColor.c_Red, TMsgType.t_Hint); return; } TEnvirnoment Envir = M2Share.g_MapManager.FindMap(sMapName); if ((Envir == null)) { PlayObject.SysMsg(String.Format(GameMsgDef.g_sTheMapNotFound, sMapName), TMsgColor.c_Red, TMsgType.t_Hint); return; } if ((PlayObject.m_btPermission >= this.Attributes.nPermissionMin) || M2Share.CanMoveMap(sMapName)) { PlayObject.SendRefMsg(Grobal2.RM_SPACEMOVE_FIRE, 0, 0, 0, 0, ""); PlayObject.MapRandomMove(sMapName, 0); } else { PlayObject.SysMsg(String.Format(GameMsgDef.g_sTheMapDisableMove, sMapName, Envir.sMapDesc), TMsgColor.c_Red, TMsgType.t_Hint);//不允许传送 } }
public void DenyIPaddrLogon(TPlayObject PlayObject, string[] @Params) { string sIPaddr = @Params.Length > 0 ? @Params[0] : ""; string sFixDeny = @Params.Length > 1 ? @Params[3] : ""; if (sIPaddr == "") { PlayObject.SysMsg("命令格式: @" + this.Attributes.Name + " IP地址 是否永久封(0,1)", TMsgColor.c_Red, TMsgType.t_Hint); return; } M2Share.g_DenyIPAddrList.__Lock(); try { if ((sFixDeny != "") && (sFixDeny[0] == '1')) { //M2Share.g_DenyIPAddrList.Add(sIPaddr, ((1) as Object)); M2Share.SaveDenyIPAddrList(); PlayObject.SysMsg(sIPaddr + "已加入禁止登录IP列表", TMsgColor.c_Green, TMsgType.t_Hint); } else { //M2Share.g_DenyIPAddrList.Add(sIPaddr, ((0) as Object)); PlayObject.SysMsg(sIPaddr + "已加入临时禁止登录IP列表", TMsgColor.c_Green, TMsgType.t_Hint); } } finally { M2Share.g_DenyIPAddrList.UnLock(); } }
/// <summary> /// 加载公告 /// </summary> public void LoadingNotice() { string sFileName; for (int I = NoticeList.GetLowerBound(0); I <= NoticeList.GetUpperBound(0); I++) { if (NoticeList[I].sMsg == "") { continue; } sFileName = M2Share.g_Config.sNoticeDir + NoticeList[I].sMsg + ".txt"; if (File.Exists(sFileName)) { try { if (NoticeList[I].sList == null) { NoticeList[I].sList = new TStringList(); } NoticeList[I].sList.LoadFromFile(sFileName); } catch { M2Share.MainOutMessage("读取文本内容错误,文件名:" + sFileName); } } } }
/// <summary> /// 申请开启行会战 /// </summary> /// <param name="PlayObject"></param> /// <param name="sGuildName"></param> /// <returns></returns> private int ReQuestGuildWar(TPlayObject PlayObject, string sGuildName) { int result = 0; try { if (GuildManager.FindGuild(sGuildName) != null) { if (PlayObject.m_nGold >= M2Share.g_Config.nGuildWarPrice) { PlayObject.DecGold(M2Share.g_Config.nGuildWarPrice); PlayObject.GoldChanged(); PlayObject.ReQuestGuildWar(sGuildName); } else { PlayObject.SysMsg("您没有足够的金币!!!", TMsgColor.c_Red, TMsgType.t_Hint); } } else { PlayObject.SysMsg("行会 " + sGuildName + " 不存在!!!", TMsgColor.c_Red, TMsgType.t_Hint); } result = 1; } catch { M2Share.MainOutMessage("{异常} TGuildOfficial.ReQuestGuildWar"); } return(result); }
public void Run() { TUserCastle UserCastle; //__Lock(); try { try { if (m_CastleList.Count > 0) { for (int I = 0; I < m_CastleList.Count; I++) { UserCastle = m_CastleList[I]; UserCastle.Run(); } } } catch { M2Share.MainOutMessage("{异常} TCastleManager.Run"); } } finally { // UnLock(); } }
public void SaveCastleList() { TStringList LoadList; try { if (!Directory.Exists(M2Share.g_Config.sCastleDir)) { Directory.CreateDirectory(M2Share.g_Config.sCastleDir); } if (m_CastleList.Count > 0) { LoadList = new TStringList(); for (int I = 0; I < m_CastleList.Count; I++) { LoadList.Add(Convert.ToString(I)); } LoadList.SaveToFile(M2Share.g_Config.sCastleFile); } } catch { M2Share.MainOutMessage("{异常} CastleManager.SaveCastleList..." + M2Share.g_Config.sCastleFile); } }
/// <summary> /// 物理攻击 /// </summary> /// <param name="TargeTBaseObject">目标</param> /// <param name="nHitPower">物理伤害值</param> /// <param name="nMagPower">魔法伤害值</param> /// <param name="boFlag"></param> public void HitMagAttackTarget(TBaseObject TargeTBaseObject, int nHitPower, int nMagPower, bool boFlag) { int nDamage; this.m_btDirection = M2Share.GetNextDirection(this.m_nCurrX, this.m_nCurrY, TargeTBaseObject.m_nCurrX, TargeTBaseObject.m_nCurrY); IList <TPlayObject> BaseObjectList = new List <TPlayObject>(); try { this.m_PEnvir.GeTBaseObjects(TargeTBaseObject.m_nCurrX, TargeTBaseObject.m_nCurrY, false, BaseObjectList); foreach (var BaseObject in BaseObjectList) { if (this.IsProperTarget(BaseObject)) { nDamage = 0; nDamage += BaseObject.GetHitStruckDamage(this, nHitPower); nDamage += BaseObject.GetMagStruckDamage(this, nMagPower); if (nDamage > 0) { BaseObject.StruckDamage(nDamage); BaseObject.SendDelayMsg(Grobal2.RM_STRUCK, Grobal2.RM_10101, nDamage, BaseObject.m_WAbil.HP, BaseObject.m_WAbil.MaxHP, Parse(this), "", 200); } } } } finally { Dispose(BaseObjectList); BaseObjectList = null; } this.SendRefMsg(Grobal2.RM_HIT, this.m_btDirection, this.m_nCurrX, this.m_nCurrY, 0, ""); }
public unsafe void RefineWeapon(TPlayObject PlayObject, string[] @Params) { int nDc = @Params.Length > 0 ? Convert.ToInt32(@Params[0]) : 0; int nMc = @Params.Length > 1 ? Convert.ToInt32(@Params[1]) : 0; int nSc = @Params.Length > 2 ? Convert.ToInt32(@Params[2]) : 0; int nHit = @Params.Length > 3 ? Convert.ToInt32(@Params[3]) : 0; if ((nDc + nMc + nSc) > 10) { return; } if (PlayObject.m_UseItems[TPosition.U_WEAPON]->wIndex <= 0) { return; } PlayObject.m_UseItems[TPosition.U_WEAPON]->btValue[0] = (byte)nDc; PlayObject.m_UseItems[TPosition.U_WEAPON]->btValue[1] = (byte)nMc; PlayObject.m_UseItems[TPosition.U_WEAPON]->btValue[2] = (byte)nSc; PlayObject.m_UseItems[TPosition.U_WEAPON]->btValue[5] = (byte)nHit; PlayObject.SendUpdateItem(PlayObject.m_UseItems[TPosition.U_WEAPON]); PlayObject.RecalcAbilitys(); PlayObject.SendMsg(PlayObject, Grobal2.RM_ABILITY, 0, 0, 0, 0, ""); PlayObject.SendMsg(PlayObject, Grobal2.RM_SUBABILITY, 0, 0, 0, 0, ""); M2Share.MainOutMessage("[武器调整]" + PlayObject.m_sCharName + " DC:" + nDc + " MC" + nMc + " SC" + nSc + " HIT:" + nHit); }
public void ChangeLevel(TPlayObject PlayObject, string[] @Params) { if (@Params == null) { return; } string sParam1 = @Params.Length > 0 ? @Params[0] : ""; int nOLevel; int nLevel; if (((sParam1 != "") && (sParam1[0] == '?'))) { if (GameConfig.boGMShowFailMsg) { PlayObject.SysMsg(string.Format(GameMsgDef.g_sGameCommandParamUnKnow, this.Attributes.Name, ""), TMsgColor.c_Red, TMsgType.t_Hint); } return; } nLevel = HUtil32.Str_ToInt(sParam1, 1); nOLevel = PlayObject.m_Abil.Level; PlayObject.m_Abil.Level = (ushort)HUtil32._MIN(M2Share.MAXUPLEVEL, nLevel); PlayObject.HasLevelUp(1);// 等级调整记录日志 M2Share.AddGameDataLog("17" + "\09" + PlayObject.m_sMapName + "\09" + (PlayObject.m_nCurrX).ToString() + "\09" + (PlayObject.m_nCurrY).ToString() + "\09" + PlayObject.m_sCharName + "\09" + (PlayObject.m_Abil.Level).ToString() + "\09" + "0" + "\09" + "=(" + (nLevel).ToString() + ")" + "\09" + "0"); if (GameConfig.boShowMakeItemMsg) { M2Share.MainOutMessage(string.Format(GameMsgDef.g_sGameCommandLevelConsoleMsg, PlayObject.m_sCharName, nOLevel, PlayObject.m_Abil.Level)); } }
public void SetPermission(TPlayObject PlayObject, string[] @Params) { string sHumanName = @Params.Length > 0 ? @Params[0] : ""; string sPermission = @Params.Length > 1 ? @Params[1] : ""; int nPerission = HUtil32.Str_ToInt(sPermission, 0); const string sOutFormatMsg = "[权限调整] {0} [{1} {2} -> {3}]"; if ((sHumanName == "") || !(nPerission >= 0 && nPerission <= 10)) { PlayObject.SysMsg("命令格式: @" + this.Attributes.Name + " 人物名称 权限等级(0 - 10)", TMsgColor.c_Red, TMsgType.t_Hint); return; } TPlayObject m_PlayObject = UserEngine.GetPlayObject(sHumanName); if (m_PlayObject == null) { PlayObject.SysMsg(String.Format(GameMsgDef.g_sNowNotOnLineOrOnOtherServer, sHumanName), TMsgColor.c_Red, TMsgType.t_Hint); return; } if (M2Share.g_Config.boShowMakeItemMsg) { M2Share.MainOutMessage(String.Format(sOutFormatMsg, PlayObject.m_sCharName, m_PlayObject.m_sCharName, m_PlayObject.m_btPermission, nPerission)); } m_PlayObject.m_btPermission = (byte)nPerission; PlayObject.SysMsg(sHumanName + " 当前权限为: " + m_PlayObject.m_btPermission, TMsgColor.c_Red, TMsgType.t_Hint); }
public void DenyCharNameLogon(string[] @Params, TPlayObject PlayObject) { string sCharName = @Params.Length > 0 ? @Params[0] : ""; string sFixDeny = @Params.Length > 1 ? @Params[1] : ""; if (sCharName == "") { PlayObject.SysMsg("命令格式: @" + this.Attributes.Name + " 人物名称 是否永久封(0,1)", TMsgColor.c_Red, TMsgType.t_Hint); return; } M2Share.g_DenyChrNameList.__Lock(); try { if ((sFixDeny != "") && (sFixDeny[0] == '1')) { //M2Share.g_DenyChrNameList.Add(sCharName, ((1) as Object)); M2Share.SaveDenyChrNameList(); PlayObject.SysMsg(sCharName + "已加入禁止人物列表", TMsgColor.c_Green, TMsgType.t_Hint); } else { //M2Share.g_DenyChrNameList.Add(sCharName, ((0) as Object)); PlayObject.SysMsg(sCharName + "已加入临时禁止人物列表", TMsgColor.c_Green, TMsgType.t_Hint); } } finally { M2Share.g_DenyChrNameList.UnLock(); } }
public void AdjuestExp(string[] @Params, TPlayObject PlayObject) { string sHumanName = @Params.Length > 0 ? @Params[0] : ""; string sExp = @Params.Length > 1 ? @Params[1] : ""; uint dwExp = 0; uint dwOExp = 0; if ((sHumanName == "")) { PlayObject.SysMsg("命令格式: @" + this.Attributes.Name + " 人物名称 经验值", TMsgColor.c_Red, TMsgType.t_Hint); return; } dwExp = (uint)HUtil32.Str_ToInt(sExp, 0); TPlayObject m_PlayObject = UserEngine.GetPlayObject(sHumanName); if (m_PlayObject != null) { dwOExp = PlayObject.m_Abil.Exp; m_PlayObject.m_Abil.Exp = dwExp; m_PlayObject.HasLevelUp(m_PlayObject.m_Abil.Level - 1); PlayObject.SysMsg(sHumanName + " 经验调整完成。", TMsgColor.c_Green, TMsgType.t_Hint); if (M2Share.g_Config.boShowMakeItemMsg) { M2Share.MainOutMessage("[经验调整] " + PlayObject.m_sCharName + '(' + m_PlayObject.m_sCharName + ' ' + dwOExp + " -> " + m_PlayObject.m_Abil.Exp + ')'); } } else { PlayObject.SysMsg(String.Format(GameMsgDef.g_sNowNotOnLineOrOnOtherServer, sHumanName), TMsgColor.c_Red, TMsgType.t_Hint); } }
public void SaveGuildList() { TStringList SaveList; if (M2Share.nServerIndex != 0) { return; } SaveList = new TStringList(); if (GuildList.Count > 0) { for (int I = 0; I < GuildList.Count; I++) { // SaveList.Add(((GuildList[I]) as TGUild).sGuildName); } } try { SaveList.SaveToFile(M2Share.g_Config.sGuildFile); } catch { M2Share.MainOutMessage("行会信息保存失败!!!"); } SaveList.Dispose(); Dispose(SaveList); }
public void Button1Click(object sender, EventArgs e) { try { if (CurGuild == null) { return; } if (EditGuildName.Text != "") { if ((CurGuild.sGuildName).ToLower().CompareTo((EditGuildName.Text).ToLower()) == 0) { CurGuild.nBuildPoint = (int)EditBuildPoint.Value; // 建筑度 CurGuild.nAurae = (int)EditAurae.Value; // 人气度 CurGuild.nStability = (int)EditStability.Value; // 安定度 CurGuild.nFlourishing = (int)EditFlourishing.Value; // 繁荣度 CurGuild.nChiefItemCount = (int)EditChiefItemCount.Value; // 行会领取装备数量 CurGuild.m_nGuildFountain = (int)EditGuildFountain.Value; // 行会泉水仓库 CurGuild.m_nGuildMemberCount = (ushort)SpinEditGuildMemberCount.Value; // 行会成员数量 CurGuild.SaveGuildInfoFile(); } } Button1.Enabled = false; } catch { M2Share.MainOutMessage("{异常} TfrmGuildManage.Button1Click"); } }
private void RegisterCommands() { foreach (var method in this.GetType().GetMethods()) { object[] attributes = method.GetCustomAttributes(typeof(CommandAttribute), true); if (attributes.Length == 0) { continue; } var attribute = (CommandAttribute)attributes[0]; if (attribute is DefaultCommand) { continue; } if (!this._commands.ContainsKey(attribute)) { this._commands.Add(attribute, method); } else { M2Share.MainOutMessage(string.Format("命令名称重复: {0}", attribute.Name)); } } }
public override void Run() { try { if (!this.m_boGhost && !this.m_boDeath && (this.m_wStatusTimeArr[Grobal2.POISON_STONE] == 0)) { if ((HUtil32.GetTickCount() - this.m_dwWalkTick) > this.m_nWalkSpeed) { this.m_dwWalkTick = HUtil32.GetTickCount(); if (m_boLight)// 发亮 { if ((HUtil32.GetTickCount() - this.m_dwSearchEnemyTick) > m_dwLightTime) { this.m_dwSearchEnemyTick = HUtil32.GetTickCount(); m_dwLightTime = 2500;// 发光时长 m_boLight = false; } } if (m_boAttick && !m_boLight && (s_AttickXY != "")) { if (AttackTarget()) // 可以攻击 { m_boAttick = false; // 处理攻击代码 } } } } base.Run(); } catch { M2Share.MainOutMessage("{异常} TFireDragonGuard.Run"); } }
public void HeroLoyal(TPlayObject PlayObject, string[] @Params) { string sHumanName = @Params.Length > 0 ? @Params[0] : ""; int nHeroLoyal = @Params.Length > 1 ? int.Parse(@Params[1]) : 0; if ((sHumanName == "") || (nHeroLoyal < 0) || (nHeroLoyal > 10000) || ((sHumanName != "") && (sHumanName[0] == '?'))) { if (GameConfig.boGMShowFailMsg) { PlayObject.SysMsg(string.Format(GameMsgDef.g_sGameCommandParamUnKnow, base.Attributes.Name, GameMsgDef.g_sGameCommandHeroLoyalHelpMsg), TMsgColor.c_Red, TMsgType.t_Hint); } return; } TBaseObject m_PlayObject = UserEngine.GetHeroObject(sHumanName); if (m_PlayObject != null) { ((THeroObject)(m_PlayObject)).m_nLoyal = nHeroLoyal; PlayObject.m_DefMsg = EncryptUnit.MakeDefaultMsg(Grobal2.SM_HEROABILITY, ((THeroObject)(m_PlayObject)).m_btGender, 0, ((THeroObject)(m_PlayObject)).m_btJob, ((THeroObject)(m_PlayObject)).m_nLoyal, 0); //替换上面一句 //SendSocket(this.m_DefMsg, EncryptUnit.EncodeBuffer(((THeroObject)(PlayObject)).m_WAbil, sizeof(TAbility))); PlayObject.SysMsg("[英雄忠诚度调整] " + sHumanName + " -> (" + (((THeroObject)(m_PlayObject)).m_nLoyal / 100).ToString() + "%)", TMsgColor.BB_Fuchsia, TMsgType.t_Hint); if (GameConfig.boShowMakeItemMsg) { M2Share.MainOutMessage("[英雄忠诚度调整] " + sHumanName + " -> (" + (((THeroObject)(m_PlayObject)).m_nLoyal).ToString() + ")"); } } else { PlayObject.SysMsg("英雄" + sHumanName + "现在不在线。", TMsgColor.c_Red, TMsgType.t_Hint); } }
public void EnableSendMsg(string[] @params, TPlayObject PlayObject) { string sHumanName = @params.Length > 0 ? @params[0] : ""; TPlayObject m_PlayObject; if (sHumanName == "") { PlayObject.SysMsg("命令格式: @" + this.Attributes.Name + " 人物名称", TMsgColor.c_Red, TMsgType.t_Hint); return; } for (int I = M2Share.g_DisableSendMsgList.Count - 1; I >= 0; I--) { if (M2Share.g_DisableSendMsgList.Count <= 0) { break; } if ((sHumanName).ToLower().CompareTo((M2Share.g_DisableSendMsgList[I]).ToLower()) == 0) { m_PlayObject = UserEngine.GetPlayObject(sHumanName); if (m_PlayObject != null) { m_PlayObject.m_boFilterSendMsg = false; } M2Share.g_DisableSendMsgList.RemoveAt(I); M2Share.SaveDisableSendMsgList(); PlayObject.SysMsg(sHumanName + " 已从禁言列表中删除。", TMsgColor.c_Green, TMsgType.t_Hint); return; } } PlayObject.SysMsg(sHumanName + " 没有被禁言!!!", TMsgColor.c_Red, TMsgType.t_Hint); }
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(); }
public void LoadCastleList() { TStringList LoadList; TUserCastle Castle; string sCastleDir; if (File.Exists(M2Share.g_Config.sCastleFile)) { LoadList = new TStringList(); LoadList.LoadFromFile(M2Share.g_Config.sCastleFile); if (LoadList.Count > 0) { for (int I = 0; I < LoadList.Count; I++) { sCastleDir = LoadList[I].Trim(); if (sCastleDir != "") { Castle = new TUserCastle(sCastleDir); m_CastleList.Add(Castle); } } } Dispose(LoadList); M2Share.MainOutMessage("已读取 [" + m_CastleList.Count + "] 个城堡信息..."); } else { M2Share.MainOutMessage("城堡列表文件未找到!!!"); } }
// 增加检查两动作的间隔 private bool AutoAvoid() { bool result = true; int nTargetX = 0; int nTargetY = 0; byte nDir; if ((m_TargetCret != null) && (!m_TargetCret.m_boDeath)) { if (AutoAvoid_GotoMasterXY(ref nTargetX, ref nTargetY)) { result = GotoTargetXY(nTargetX, nTargetY); } else { nTargetX = m_TargetCret.m_nCurrX; nTargetY = m_TargetCret.m_nCurrY; nDir = M2Share.GetNextDirection(m_nCurrX, m_nCurrY, nTargetX, nTargetY); nDir = GetBackDir(nDir); m_PEnvir.GetNextPosition(nTargetX, nTargetY, nDir, 3, ref m_nTargetX, ref m_nTargetY); result = GotoTargetXY(m_nTargetX, m_nTargetY); } } return(result); }
public override bool Operate(TProcessMessage ProcessMsg) { bool result = false; try { result = false; if ((ProcessMsg.wIdent == Grobal2.RM_STRUCK) || (ProcessMsg.wIdent == Grobal2.RM_MAGSTRUCK)) { if (GetObject <TTrainer>(ProcessMsg.BaseObject) == this) { n56C += ProcessMsg.wParam; m_dw568 = HUtil32.GetTickCount(); n570++; this.ProcessSayMsg("破坏力为 " + ProcessMsg.wParam + ",平均值为 " + (n56C / n570).ToString()); } } if (ProcessMsg.wIdent == Grobal2.RM_MAGSTRUCK) { result = base.Operate(ProcessMsg); } } catch { M2Share.MainOutMessage("{异常} TTrainer.Operate"); } return(result); }
// 远距离使用冰咆哮 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 unsafe void ShowUseItem(string[] @Params, TPlayObject PlayObject) { string sHumanName = @Params.Length > 0 ? @Params[0] : ""; TUserItem *UserItem = null; if ((sHumanName == "") || ((sHumanName != "") && (sHumanName[1] == '?'))) { PlayObject.SysMsg(String.Format(GameMsgDef.g_sGameCommandParamUnKnow, this.Attributes.Name, GameMsgDef.g_sGameCommandShowUseItemInfoHelpMsg), TMsgColor.c_Red, TMsgType.t_Hint); return; } TPlayObject m_PlayObject = UserEngine.GetPlayObject(sHumanName); if (m_PlayObject == null) { PlayObject.SysMsg(String.Format(GameMsgDef.g_sNowNotOnLineOrOnOtherServer, sHumanName), TMsgColor.c_Red, TMsgType.t_Hint); return; } for (int I = m_PlayObject.m_UseItems.GetLowerBound(0); I <= m_PlayObject.m_UseItems.GetUpperBound(0); I++) { UserItem = m_PlayObject.m_UseItems[I]; if (UserItem->wIndex == 0) { continue; } PlayObject.SysMsg(String.Format("%s[%s]IDX[%d]系列号[%d]持久[%d-%d]", M2Share.GetUseItemName(I), UserEngine.GetStdItemName(UserItem->wIndex), UserItem->wIndex, UserItem->MakeIndex, UserItem->Dura, UserItem->DuraMax), TMsgColor.c_Blue, TMsgType.t_Hint); } }
/// <summary> /// 攻击怪物会执行此方法 /// </summary> /// <param name="ProcessMsg"></param> /// <returns></returns> public override bool Operate(TProcessMessage ProcessMsg) { bool result = false; byte nCode = 0; try { if (ProcessMsg.wIdent == Grobal2.RM_STRUCK) // 打击 { nCode = 1; TBaseObject BaseObject = HUtil32.IntToObject <TBaseObject>(ProcessMsg.nParam3); if ((HUtil32.IntToObject <TBaseObject>(ProcessMsg.BaseObject) == this) && (BaseObject != null)) { nCode = 2; this.SetLastHiter(BaseObject); nCode = 3; this.Struck(BaseObject); nCode = 4; this.BreakHolySeizeMode(); nCode = 10; if ((this.m_Master != null) && (!BaseObject.m_boDeath)) { nCode = 9; if (((BaseObject != this.m_Master) && (((BaseObject.m_btRaceServer == Grobal2.RC_PLAYOBJECT) || ((BaseObject.m_btRaceServer == Grobal2.RC_HEROOBJECT)))))) { nCode = 6; if (this.m_Master.m_Master != null) { nCode = 7; if (this.m_Master.m_Master != BaseObject) { this.m_Master.SetPKFlag(BaseObject); } } else { this.m_Master.SetPKFlag(BaseObject); } } } nCode = 8; if (GameConfig.boMonSayMsg) { this.MonsterSayMsg(BaseObject, TMonStatus.s_UnderFire); } } result = true; } else { result = base.Operate(ProcessMsg); } } catch { M2Share.MainOutMessage("{异常} TAnimalObject.Operate Code:" + nCode); } return(result); }
public void SignMapMove(string[] @Params, TPlayObject PlayObject) { try { TEnvirnoment Envir = null; if ((PlayObject.m_btPermission >= this.Attributes.nPermissionMin) || M2Share.CanMoveMap(PlayObject.m_sLastMapName)) { Envir = M2Share.g_MapManager.FindMap(PlayObject.m_sLastMapName); if (Envir != null) { if (Envir.CanWalk(PlayObject.m_nLastCurrX, PlayObject.m_nLastCurrY, true)) { PlayObject.SpaceMove(PlayObject.m_sLastMapName, PlayObject.m_nLastCurrX, PlayObject.m_nLastCurrY, 0); } else { PlayObject.SysMsg(String.Format(GameMsgDef.g_sGameCommandPositionMoveCanotMoveToMap1, PlayObject.m_sLastMapName, PlayObject.m_nLastCurrX, PlayObject.m_nLastCurrY), TMsgColor.c_Green, TMsgType.t_Hint); } } } else { PlayObject.SysMsg(String.Format(GameMsgDef.g_sTheMapDisableMove, PlayObject.m_sLastMapName, Envir.sMapDesc), TMsgColor.c_Red, TMsgType.t_Hint); } } catch (Exception E) { M2Share.MainOutMessage("[Exceptioin] TPlayObject.CmdPositionMove"); M2Share.MainOutMessage(E.Message); } }
public void ChangeSabukLord(TPlayObject PlayObject, string[] @Params) { string sCASTLENAME = @Params.Length > 0 ? @Params[0] : ""; string sGuildName = @Params.Length > 1 ? @Params[1] : ""; bool boFlag = @Params.Length > 2 ? bool.Parse(@Params[2]) : false; if ((sCASTLENAME == "") || (sGuildName == "")) { PlayObject.SysMsg("命令格式: @" + this.Attributes.Name + " 城堡名称 行会名称", TMsgColor.c_Red, TMsgType.t_Hint); return; } TUserCastle Castle = M2Share.g_CastleManager.Find(sCASTLENAME); if (Castle == null) { PlayObject.SysMsg(String.Format(GameMsgDef.g_sGameCommandSbkGoldCastleNotFoundMsg, sCASTLENAME), TMsgColor.c_Red, TMsgType.t_Hint); return; } TGUild Guild = GuildManager.FindGuild(sGuildName); if (Guild != null) { M2Share.AddGameDataLog("27" + "\09" + Castle.m_sOwnGuild + "\09" + '0' + "\09" + '1' + "\09" + "sGuildName" + "\09" + PlayObject.m_sCharName + "\09" + '0' + "\09" + '1' + "\09" + '0'); Castle.GetCastle(Guild); UserEngine.SendServerGroupMsg(Grobal2.SS_211, M2Share.nServerIndex, sGuildName); PlayObject.SysMsg(Castle.m_sName + " 所属行会已经更改为 " + sGuildName, TMsgColor.c_Green, TMsgType.t_Hint); } else { PlayObject.SysMsg("行会 " + sGuildName + "还没建立!!!", TMsgColor.c_Red, TMsgType.t_Hint); } }
private void RepairWallNow(int nWallIndex, TPlayObject PlayObject) { try { if (this.m_Castle == null) { PlayObject.SysMsg("NPC不属于城堡!!!", TMsgColor.c_Red, TMsgType.t_Hint); return; } if (this.m_Castle.m_nTotalGold >= M2Share.g_Config.nRepairWallPrice) { if (this.m_Castle.RepairWall(nWallIndex)) { this.m_Castle.m_nTotalGold -= M2Share.g_Config.nRepairWallPrice; PlayObject.SysMsg("修理成功。", TMsgColor.c_Green, TMsgType.t_Hint); } else { PlayObject.SysMsg("城门不需要修理!!!", TMsgColor.c_Green, TMsgType.t_Hint); } } else { PlayObject.SysMsg("城内资金不足!!!", TMsgColor.c_Red, TMsgType.t_Hint); } } catch { M2Share.MainOutMessage("{异常} TGuildOfficial.RepairWallNow"); } }
/// <summary> /// 大火圈攻击 /// </summary> /// <param name="nPower">伤害值</param> /// <param name="nX">坐标X</param> /// <param name="nY">坐标Y</param> /// <param name="nRage">攻击范围</param> /// <returns></returns> internal bool MagBigExplosion(int nPower, int nX, int nY, int nRage) { bool result = false; List <TBaseObject> BaseObjectList = new List <TBaseObject>(); this.m_btDirection = M2Share.GetNextDirection(this.m_nCurrX, this.m_nCurrY, this.m_TargetCret.m_nCurrX, this.m_TargetCret.m_nCurrY);// 调整火龙的方向 try { BaseObjectList = this.GetMapBaseObjects(this.m_PEnvir, nX, nY, nRage); foreach (var TargeTBaseObject in BaseObjectList) { if (TargeTBaseObject != null) { if (TargeTBaseObject.m_boDeath || (TargeTBaseObject.m_boGhost)) { continue; } if (this.IsProperTarget(TargeTBaseObject)) { this.SetTargetCreat(TargeTBaseObject); TargeTBaseObject.SendMsg(this, Grobal2.RM_MAGSTRUCK, 0, nPower, 0, 0, ""); result = true; } } } } finally { Dispose(BaseObjectList); } return(result); }
private void HireArcher(string sIndex, TPlayObject PlayObject) { int n10; TObjUnit ObjUnit; try { if (this.m_Castle == null) { PlayObject.SysMsg("NPC不属于城堡!!!", TMsgColor.c_Red, TMsgType.t_Hint); return; } if (this.m_Castle.m_nTotalGold >= M2Share.g_Config.nHireArcherPrice) { n10 = HUtil32.Str_ToInt(sIndex, 0) - 1; if (n10 <= Castle.MAXCASTLEARCHER) { if (this.m_Castle.m_Archer[n10].BaseObject == null) { if (!this.m_Castle.m_boUnderWar) { ObjUnit = this.m_Castle.m_Archer[n10]; ObjUnit.BaseObject = UserEngine.RegenMonsterByName(((TUserCastle)(this.m_Castle)).m_sMapName, ObjUnit.nX, ObjUnit.nY, ObjUnit.sName); if (ObjUnit.BaseObject != null) { this.m_Castle.m_nTotalGold -= M2Share.g_Config.nHireArcherPrice; ObjUnit.BaseObject.m_Castle = ((TUserCastle)(this.m_Castle)); ((TGuardUnit)(ObjUnit.BaseObject)).m_nX550 = ObjUnit.nX; ((TGuardUnit)(ObjUnit.BaseObject)).m_nY554 = ObjUnit.nY; ((TGuardUnit)(ObjUnit.BaseObject)).m_nDirection = 3; PlayObject.SysMsg("雇佣成功.", TMsgColor.c_Green, TMsgType.t_Hint); } } else { PlayObject.SysMsg("现在无法雇佣!!!", TMsgColor.c_Red, TMsgType.t_Hint); } } else { PlayObject.SysMsg("早已雇佣!!!", TMsgColor.c_Red, TMsgType.t_Hint); } } else { PlayObject.SysMsg("指令错误!!!", TMsgColor.c_Red, TMsgType.t_Hint); } } else { PlayObject.SysMsg("城内资金不足!!!", TMsgColor.c_Red, TMsgType.t_Hint); } } catch { M2Share.MainOutMessage("{异常} TCastleOfficial.HireArcher"); } }