楼主: e110110eee

【原创】CMS143启动以及配置

 
  • TA的每日心情
    慵懒
    2023-2-3 09:42
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    初级会员

    枫币
    270
    威望
    0
    贡献
    1
    在线时间
    37 小时
    注册时间
    2019-4-1
    QQ
     楼主| 发表于 2022-5-12 22:37:39 | 显示全部楼层
    lqcstyle 发表于 2022-5-12 09:40
    楼主加油,最近在修一个86的端,等这段时间结束了,交流一下

    好呀,我也不是很懂,都是慢慢debug
  • TA的每日心情
    慵懒
    2023-2-3 09:42
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    初级会员

    枫币
    270
    威望
    0
    贡献
    1
    在线时间
    37 小时
    注册时间
    2019-4-1
    QQ
     楼主| 发表于 2022-5-12 22:39:24 | 显示全部楼层
    0512 - 修复五转任务
    这里涉及到脚本任务的完成,但是脚本任务完成原本的代码实际上并没有任何逻辑,所以要完成任务还是需要wz的任务进行支撑。
    一个合理的猜测是脚本任务只能是马上完成的?不能是有过程的?

    格兰蒂斯的神秘石任务
    数据库添加1463任务的数据即可
    ```sql
    INSERT INTO `chms`.`wz_questdata`(`questid`, `name`, `autoStart`, `autoPreComplete`, `viewMedalItem`, `selectedSkillID`, `blocked`, `autoAccept`, `autoComplete`, `selfStart`) VALUES (1463, '格兰蒂斯的神秘石', 0, 0, 0, 0, 0, 0, 0, 0);

    # 我添加的是简单老麦的信息,应该都可以触发。
    INSERT INTO `chms`.`wz_questreqdata`(`id`, `questid`, `name`, `type`, `stringStore`, `intStoresFirst`, `intStoresSecond`) VALUES (22729, 1463, 'mob', 1, '0', '8880010', '1');

    ```

    绯红的神秘石
    次元之镜加一个废弃营地
    脚本是直接完成了任务,说明这个估计不好修复,我也跳过了
    server.maps.MapleSlideMenu.SlideMenu5.TownTeleport
    最后一行加
    bus(24, "万神殿", 400000000, 0),
    but(25, "废弃营地", 105300000, 0);

    ---
    然后就是获取神秘球的任务 questId = 1466 添加信息
    INSERT INTO `chms`.`wz_questreqdata`(`id`, `questid`, `name`, `type`, `stringStore`, `intStoresFirst`, `intStoresSecond`) VALUES (null, 1466, 'mob', 1, '0', '8641000', '10');
    INSERT INTO `chms`.`wz_questdata`(`questid`, `name`, `autoStart`, `autoPreComplete`, `viewMedalItem`, `selectedSkillID`, `blocked`, `autoAccept`, `autoComplete`, `selfStart`) VALUES (1466, '另一种力量,神秘力量', 0, 0, 0, 0, 0, 0, 0, 0);

    总结:不太懂脚本任务是怎么完成的,是否可以像系统任务一样完成,还是只能纯对话完成,不能有打怪或者收集的任务?
  • TA的每日心情
    慵懒
    2023-2-3 09:42
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    初级会员

    枫币
    270
    威望
    0
    贡献
    1
    在线时间
    37 小时
    注册时间
    2019-4-1
    QQ
     楼主| 发表于 2022-5-14 13:03:03 | 显示全部楼层
    本帖最后由 e110110eee 于 2023-2-1 23:33 编辑

    0514

    学习ida,我也不是很会,也是新手,就来简单学习一下:
    在swordie代码中可以看到outbound他都有标注,
    ```java
        // CUserLocal::OnPacket
        EMOTION(685),
    ```
    在我们maplesotry143找到这个包头
    ``
    // handling.opcode.SendPacketOpcode
        USER_EMOTION_LOCAL(0x2d4),
    ``
    02d4换算出来就是724
    然后在143的idb文件找到这个CUserLocal::OnPacket
    1. int __thiscall CUserLocal::OnPacket(_DWORD *this, int a2, LPCWSTR lpWideCharStr)
    2. {
    3.   int result; // eax
    4.   int v4; // ecx
    5.   char v5; // [esp-1Ch] [ebp-20h]
    6.   int v6; // [esp-18h] [ebp-1Ch]
    7.   char v7; // [esp-14h] [ebp-18h]
    8.   int v8; // [esp-10h] [ebp-14h]
    9.   int v9; // [esp-Ch] [ebp-10h]
    10.   int v10; // [esp-8h] [ebp-Ch]
    11.   int v11; // [esp-4h] [ebp-8h]

    12.   result = a2 - 724;
    13.   switch ( a2 )
    14.   {
    15.     case 724:
    16.       // 这里的名字是我改的
    17.       result = USER_EMOTION_LOCAL(this, lpWideCharStr);
    复制代码

    点进这个USER_EMOTION_LOCAL

    1. int __thiscall USER_EMOTION_LOCAL(_DWORD *this, _DWORD *a1)
    2. {
    3.   _DWORD *v2; // ST18_4
    4.   int *v3; // eax
    5.   int *v4; // ebx
    6.   int v5; // eax
    7.   int v6; // esi
    8.   unsigned __int8 v7; // al

    9.   v2 = this;
    10.   CInPacket:: Decode4(a1);  //解析四个字节 一个int
    11.   v4 = v3;
    12.   CInPacket:: Decode4(a1);  //解析四个字节 一个int
    13.   v6 = v5;
    14.   CInPacket:: Decode1(a1);  //解析1个字节 一个byte
    15.   sub_1B27EB0(v2, v4, v6, v7);
    16.   return sub_C2D3B0(1);
    17. }
    复制代码
    可以看到ida需要两个int 一个 byte,
    我们143服务端也是这样封包的,这个包应该是控制用户表情的
    1. public static byte[] getDirectionFacialExpression(int expression, int duration) {
    2.     log.trace("调用");
    3.     MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
    4.     mplew.writeShort(SendPacketOpcode.USER_EMOTION_LOCAL.getValue());
    5.     mplew.writeInt(expression);
    6.     mplew.writeInt(duration);
    7.     mplew.write(0);
    8.     return mplew.getPacket();
    9.     }
    复制代码

    这样就对应上了,这就是一个简单的例子,具体什么意思我也不懂,需要再研究研究。同理可以把maplestory143代码里的包头也按照Onpacket区分一下

  • TA的每日心情
    慵懒
    2023-2-3 09:42
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    初级会员

    枫币
    270
    威望
    0
    贡献
    1
    在线时间
    37 小时
    注册时间
    2019-4-1
    QQ
     楼主| 发表于 2022-5-15 21:42:56 | 显示全部楼层
    时间0515
    今天弄了一天的抓包,没人教自己摸索是真的很艰难。都说使用mapleshark抓,github上拉源码下来,用vscode搞了半天都没启动起来。换成vs2017 就好了。千万不要用vscode启动。然后就是我也看不懂c#的源码,瞎搞了大半天,实在不行就强行开始debug ,看了一会发现代码并不难,

    但是有一个问题:已经改了秘钥却一直抓包都报错,十分的奇怪。后来换了snowsniffer也不行,以为snowsniffer用Java写的 改起来会容易一点。谁知道我把mapelstroy的代码复制进去都不行,最后还是回来使用mapleshark,实在不行自己开始用vscode开始debug,最终发现他默认用的网上的密钥进行解密的所以不行,把那一段代码改了就好了

    1. github上下载mapleshark
    2. 看maplestory143的代码,找到143的密钥
    3. 修改mapleshark的源码,去掉加载网络密钥的一段直接加载本地的秘钥,很简单就不放代码了。

    就能对应上了




    主要是一开始很慌不会c#就不敢去debug,后面发现实在不行只能自己上了。感觉还是不错的
  • TA的每日心情

    2022-5-20 17:17
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    初级会员

    枫币
    438
    威望
    0
    贡献
    1
    在线时间
    13 小时
    注册时间
    2017-6-7
    发表于 2022-5-15 23:35:21 | 显示全部楼层
    支持!!!
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2023-2-3 09:42
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    初级会员

    枫币
    270
    威望
    0
    贡献
    1
    在线时间
    37 小时
    注册时间
    2019-4-1
    QQ
     楼主| 发表于 2022-5-16 09:35:09 | 显示全部楼层
    下一步打算重构一下技能相关的代码,这部分代码太冗杂了,感觉有几百个switch条件,一般都很多bug。当前初步考虑主要是这几点
    1. 封包的每一部分具体的意思
    2. 响应的封包需要包装成什么样的数据:是伤害还是debuff还是什么七七八八的,感觉这一部分可以责任链来包装
    3. 每个职业尽量区分开,技能id区分出职业?然后每个职业走自己的逻辑?
    4. 想想swordie会怎么做


    这游戏的核心就是打怪,技能放完就到文件末尾,玩个锤子。这一部分还有很多可以做的,只是好不好修复罢了,毕竟143已经不能抓包了?先慢慢来把
  • TA的每日心情

    2022-5-20 17:17
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    初级会员

    枫币
    438
    威望
    0
    贡献
    1
    在线时间
    13 小时
    注册时间
    2017-6-7
    发表于 2022-5-21 20:04:53 | 显示全部楼层
    能不能出个详细的idea  源码导入然后启动运行的视频,小白没看懂
  • TA的每日心情
    慵懒
    2023-2-3 09:42
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    初级会员

    枫币
    270
    威望
    0
    贡献
    1
    在线时间
    37 小时
    注册时间
    2019-4-1
    QQ
     楼主| 发表于 2022-5-23 15:13:21 | 显示全部楼层
    www2109 发表于 2022-5-21 20:04
    能不能出个详细的idea  源码导入然后启动运行的视频,小白没看懂

    我都寫的很清楚啦,就是圖片加載不出來我也沒辦法咯。導入源碼之後把wz和腳本放到配置的目錄就好了
  • TA的每日心情
    慵懒
    2023-2-3 09:42
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    初级会员

    枫币
    270
    威望
    0
    贡献
    1
    在线时间
    37 小时
    注册时间
    2019-4-1
    QQ
     楼主| 发表于 2022-5-23 17:10:26 | 显示全部楼层
    本帖最后由 e110110eee 于 2022-5-24 14:20 编辑

    0520
    1. 重构攻击的发现里面有079的技能判定删掉了,侠盗的金钱攻击
    2. 主要拆分攻击不同的攻击类型 近战、远程、魔法攻击,不同的职业需要单独实现的功能



    1. 解析包体
    2. 是否显示暴击
    3. 控制被动攻击、例如斗气掉点数(原来代码就是写在近战攻击的处理里面)
    4. 攻击类
       1. 判断攻击怪物数
       2. 判断攻击段数
       3. beforeAttack(计算实际数值,比如是否对已经有刺客标记的怪物做出响应,或者其他)
       4. 判断是否无视反伤
       5. onAttack判断攻击应该角色的状态,包括怪物的状态等、
       6. afterAttack  (攻击完后的状态,比如是否无敌等等)



    总结:

    1. 主要解耦成以上这几个方面,远程和魔法攻击也是类似,先把所有职业都解耦出来,然后打算再一个一个的修复。后面这几个attack的不同状态,会麻烦一些,而且看完代码发现好多都没有实现的。所以还是慢慢来咯。
    2. 还要把状态相关的部分也了解,不然技能感觉也不好修复3.主要就三个维度:1.伤害  ,2.不同职业、职业群的效果 3.不同的状态。  职业和状态可能是多对多?

    该用户从未签到

    新人上路

    枫币
    33
    威望
    0
    贡献
    0
    在线时间
    5 小时
    注册时间
    2019-11-1
    发表于 2022-6-6 14:54:26 | 显示全部楼层
    楼主搞个群一起交流交流哈
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    枫叶物语即使倒闭也绝对不会变质
    Copyright © 2001-2013 Discuz Team. Powered by Discuz! X3.5 |网站地图 | 本站已运行: