Exemple #1
0
        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);//不允许传送
            }
        }
Exemple #2
0
        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();
            }
        }
Exemple #3
0
        /// <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);
                    }
                }
            }
        }
Exemple #4
0
        /// <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, "");
        }
Exemple #8
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);
        }
Exemple #9
0
        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);
        }
Exemple #14
0
 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");
     }
 }
Exemple #15
0
        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));
                }
            }
        }
Exemple #16
0
 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("城堡列表文件未找到!!!");
            }
        }
Exemple #21
0
        // 增加检查两动作的间隔
        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);
        }
Exemple #22
0
        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);
        }
Exemple #23
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);
        }
        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);
        }
Exemple #26
0
 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");
     }
 }
Exemple #29
0
        /// <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");
            }
        }