e110110eee 发表于 2022-5-12 22:37:39

lqcstyle 发表于 2022-5-12 09:40
楼主加油,最近在修一个86的端,等这段时间结束了,交流一下

好呀,我也不是很懂,都是慢慢debug

e110110eee 发表于 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);

总结:不太懂脚本任务是怎么完成的,是否可以像系统任务一样完成,还是只能纯对话完成,不能有打怪或者收集的任务?

e110110eee 发表于 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
int __thiscall CUserLocal::OnPacket(_DWORD *this, int a2, LPCWSTR lpWideCharStr)
{
int result; // eax
int v4; // ecx
char v5; //
int v6; //
char v7; //
int v8; //
int v9; //
int v10; //
int v11; //

result = a2 - 724;
switch ( a2 )
{
    case 724:
      // 这里的名字是我改的
      result = USER_EMOTION_LOCAL(this, lpWideCharStr);
点进这个USER_EMOTION_LOCAL

int __thiscall USER_EMOTION_LOCAL(_DWORD *this, _DWORD *a1)
{
_DWORD *v2; // ST18_4
int *v3; // eax
int *v4; // ebx
int v5; // eax
int v6; // esi
unsigned __int8 v7; // al

v2 = this;
CInPacket:: Decode4(a1);//解析四个字节 一个int
v4 = v3;
CInPacket:: Decode4(a1);//解析四个字节 一个int
v6 = v5;
CInPacket:: Decode1(a1);//解析1个字节 一个byte
sub_1B27EB0(v2, v4, v6, v7);
return sub_C2D3B0(1);
}可以看到ida需要两个int 一个 byte,
我们143服务端也是这样封包的,这个包应该是控制用户表情的
public static byte[] getDirectionFacialExpression(int expression, int duration) {
    log.trace("调用");
    MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
    mplew.writeShort(SendPacketOpcode.USER_EMOTION_LOCAL.getValue());
    mplew.writeInt(expression);
    mplew.writeInt(duration);
    mplew.write(0);
    return mplew.getPacket();
    }
这样就对应上了,这就是一个简单的例子,具体什么意思我也不懂,需要再研究研究。同理可以把maplestory143代码里的包头也按照Onpacket区分一下

e110110eee 发表于 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的源码,去掉加载网络密钥的一段直接加载本地的秘钥,很简单就不放代码了。

就能对应上了
https://gitee.com/wangdiCoding/pic/raw/master/2021/image-20220515213324516.png



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

www2109 发表于 2022-5-15 23:35:21

支持!!!

e110110eee 发表于 2022-5-16 09:35:09

下一步打算重构一下技能相关的代码,这部分代码太冗杂了,感觉有几百个switch条件,一般都很多bug。当前初步考虑主要是这几点
1. 封包的每一部分具体的意思
2. 响应的封包需要包装成什么样的数据:是伤害还是debuff还是什么七七八八的,感觉这一部分可以责任链来包装
3. 每个职业尽量区分开,技能id区分出职业?然后每个职业走自己的逻辑?
4. 想想swordie会怎么做


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

www2109 发表于 2022-5-21 20:04:53

能不能出个详细的idea源码导入然后启动运行的视频:'(:'(,小白没看懂

e110110eee 发表于 2022-5-23 15:13:21

www2109 发表于 2022-5-21 20:04
能不能出个详细的idea源码导入然后启动运行的视频,小白没看懂

我都寫的很清楚啦,就是圖片加載不出來我也沒辦法咯。導入源碼之後把wz和腳本放到配置的目錄就好了

e110110eee 发表于 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.不同的状态。职业和状态可能是多对多?

xlsfs 发表于 2022-6-6 14:54:26

楼主搞个群一起交流交流哈
页: 1 [2] 3 4
查看完整版本: 【原创】CMS143启动以及配置