您还没登陆呢
 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 500|回复: 15
收起左侧

【原创】CMS143启动以及配置

[复制链接]

该用户从未签到

新人上路

Rank: 1

枫币
116
威望
0
贡献
1
在线时间
23 小时
注册时间
2019-4-1
QQ
发表于 2022-3-24 21:08:02 | 显示全部楼层 |阅读模式
本帖最后由 e110110eee 于 2022-3-24 21:16 编辑

目的
这个项目的目的不只是分享如何启动一个143的服务器。而是希望找到志同道合的朋友,一起玩好143服务器!!!。我也不懂,就懂一些java的东西。很多东西还得摸索和学习。目的搞懂到底是如何交互以及如何修复后台的。比如职业技能修复、活动修复boss修复等等那些脚本、Wz修改的都比较简单,不是我的目的。所以希望有大佬或者感兴趣的朋友带带我或者一起学习。我是真的觉得这个很有趣!!!当然大佬都比较高冷,觉得我就像个菜鸡

项目所有的东西都是我在论坛找的,而且我亲手操作过一遍。就好像别人搭好的台子,玩出自己想玩的东西,这篇文章只是分享一下怎么启动143的服务器。使用的资源论坛都有!!!

为什么选择143?
看到论坛上面143服务器的介绍太少了,所以我自己也想尝试一下启动143
听说同步的一些服都是143修复过去的,所以我也想试试,从这里开始。
我也什么都不懂,应该不会被别人利用吧?以下理解都是我从0开始实际操作的

进入正题
只需要三个东西:

具体实现步骤
  • 下载源码,idea导包。直接在gitee上搜索 maplestory143就有,这个就是fork过来的。

  • 下载这些项目里面介绍的静态文件
    只需要用到框出来的文件夹
  • 按照里面的介绍把wz文件配置了, 把里面的config文件夹、script文件夹放到当前项目文件夹下。一个是配置,一个是脚本。都可以热更新的。

  • wz读的是systemProperties,找到项目启动入口直接加入本地放wz文件夹的地方
    在启动的main方法下添加

System.setProperty("wzpath","H:\\play\\source\\wz");
或者配置启动参数也可以 -D,但是换个电脑要重新配麻烦。
  • config/ scripts我直接拉到项目的根目录了 如下

4.修改路径配置,主要是Mysql配置
  • 启动一个数据库,本地没有数据库就用里面phpstudy启动。有数据库直接导入项目的数据库sql文件。
    数据库文件在哪搞?启动一次phpstudy把里面的数据库导出来就行。
  • 下载一个143的客户端,论坛很多
  • idea启动项目,有启动问题就解决问题,反正我是直接起来了,这里分配给idea启动项目的内存多一点,我给了3g。
    -Xms3072m -Xmx3072m

idea启动后会有一个ui界面,点击一下
我嫌太麻烦了直接把这个启动服务端按钮的逻辑添加在main函数后面的代码里面,idea启动就不用再点一次启动服务端了,但是这里有bug不要再点这个按钮就行。

  • 设置环形网卡,我一开始也不懂网上搜一下。其实就是虚拟网卡。目的是给冒险岛Online连接用的。注意和你配的项目里面的ip地址相同,我这里设置的是默认的


  • 找一个万能登陆器跳过143的账号登录。论坛、各种qq群也有很多,发放在mapstory.exe同级目录就行。目的是跳过盛大的登陆进入游戏。

  • 点击万能登录器直接启动服务。
  • 进入到账号密码登陆页面再用登录器登陆!!!,不然后续会出问题。我之前就是提前点了导致进入大区就直接闪退了。感觉是网络出问题了或者是ip被ban之类的我也不清楚。

账号密码随便填,不存在的自动会创建账户,点击登陆后续就进入游戏了。
第一次操作成功还有点小激动!!!!!
后面就进入游戏,有手就行了。但是有一个问题必会出现。详见下面问题2
最后
我还是坚持我的目的,希望把这个端玩好。当然前路漫漫,用爱发电!里面的东西太多了慢慢来吧。真希望有人可以相互交流交流!!

接下来呢?
接下来会一边玩一边修复代码,顺便熟悉代码,会经常更新,我的qq 996057150。希望大家能交流交流


工具
代码查询 https://mxdweb.com/



问题解决汇总
日期:2022 03- 24
2.java.lang.NumberFormatException: For input string: "2203232321"
时间大于int表示的最大值2147483647 也就是21年47月48日36:47 实际并不存在修复:先转成long,然后强转成int
方法地址:tools.DateUtil#getTime(long)改成我下面这样就行了,原理应该是只用到四个字节而已,所以不会有影响
3.修复新手转职飞侠脚本里面是+敏捷

该用户从未签到

新人上路

Rank: 1

枫币
116
威望
0
贡献
1
在线时间
23 小时
注册时间
2019-4-1
QQ
 楼主| 发表于 2022-3-24 23:10:02 | 显示全部楼层
本帖最后由 e110110eee 于 2022-3-24 23:11 编辑

2022-03-24
修复一个bug:飞镖和弓箭不会被消耗的问题,解析被消耗的栏位找错了,debug试错发现是字段错了,修改解析的字段即可








该用户从未签到

新人上路

Rank: 1

枫币
116
威望
0
贡献
1
在线时间
23 小时
注册时间
2019-4-1
QQ
 楼主| 发表于 2022-4-1 21:51:12 | 显示全部楼层
第一步,看接收到封包结构
Recv RANGED_ATTACK[00D0] (123) From : player
D0 00 00 08 12 40 0E 3D 00 14 00 D7 BF 53 0D 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 33 80 2B EE C3 B9 07 04 4B 1B 1A 00 00 00 00 00 00 00 00 DB FC 40 00 6B FE 41 00 2C A1 07 00 07 00 00 81 06 C5 C6 2D 00 01 AA FD 84 00 AA FD 84 00 CF 02 92 78 00 00 00 00 00 00 60 77 00 00 00 00 00 00 00 00 00 00 DE 18 5F 09 00 01 79 FD 69 00 B0 FD 84 00 6B FE 5C 00

D0 00 包头标识远程攻击
00 是否 == 1
08  跳过了
12  attack adn damage => 攻击信息    怪物数 和攻击次数
40 0E 3D 00 技能id
14  技能等级 = 十进制是20
00 D7 BF 53 0D 00  跳过六个字节
01 00          消耗物品栏位
00 00 00 00 跳过四个字节
如果前面为1跳过四个字节,这里没有
又跳过11个字节
01   unk
33  display
80 direaction
00 00 00 00跳过四
00 跳过1
04 攻击速度 4
4B 1B 1A 00      四个字节 lastAttackTickCount
DB FC 40 00 6B FE 41 00  跳过

2C A1 07 00  Oid 四个字节  (投掷物id)
07  Attack ie ?
00 00 81 06 C5 C6 2D 00 01 AA FD 84 00 AA FD 84 00 CF 02 跳过19个字节
然后根据前面算的攻击次数计算伤害,释放的是双飞斩所以是2
伤害1: 92 78 00 00 00 00 00 00,换算10进制就是  long 8个字节

伤害2 :60 77 00 00 00 00 00 00
00 00 00 00 DE 18 5F 09 00 01 79 FD 69 00 B0 FD 84  然后跳过18个字节
最后四个字节表示怪物坐标
X = 6B FE   (-405)
Y = 5C 00   (92)

除了lastAttackTickCount 其他都了解了。


响应
F6 01 01 02 00 00 00 79 A1 07 00 0B 00 00 00 01 02 00 00 00 7A A1 07 00 87 A1 07 00 AC 8F 3E 00 01 1C 00 00 00 01 00 00 00 29 00 00 00 03 00 00 00 BB 00 00 00 C8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 1D 00 00 00 01 00 00 00 22 00 00 00 04 00 00 00 A5 00 00 00 C8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FE 00 00 00 1F 00 00 00 EE 01 00 00 E7 00 00 00 00 96 1F 00
F6 01  GAIN_FORCE
01     未知
02 00 00 00  角色id
79 A1 07 00  怪物工作id  每次都不同,应该是命中的怪物id吧
0B 00 00 00  刺客标记,固定
01  固定
02 00 00 00 怪物数


7A A1 07 00   怪物工作id
87 A1 07 00     怪物工作id
AC 8F 3E 00    十进制4100012  (刺客标记id)
接下来是怪物数据, 因为有两只所以循环两次
1  1F 00 00 00  略过
01  刺客标记| 02隐式标记
00 00 00 29随机数
00 00 00 03 随机数
00 00 00 BB 随机数
00 00 00 C8 写入200
写入 16个字节0
写入   4个字节0

01 开始新的 1D 00 00 00
01  刺客标记 | 02隐式标记
00 00 00 29随机数
00 00 00 03 随机数
00 00 00 BB 随机数
00 00 00 C8 写入200
写入 16个字节0
写入   4个字节0

下一部分
写入0
写入4个int  表示四个角

mplew.writeInt(posFrom.x - 120);
mplew.writeInt(posFrom.y - 100);
mplew.writeInt(posFrom.x + 120);
mplew.writeInt(posFrom.y + 100);

00 96 1F 00 最后写入一个int飞镖显示道具

该用户从未签到

新人上路

Rank: 1

枫币
32
威望
0
贡献
0
在线时间
6 小时
注册时间
2022-4-3
发表于 2022-4-4 16:54:11 | 显示全部楼层
关注,顶一下
  • TA的每日心情
    奋斗
    2020-12-27 22:05
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    初级会员

    Rank: 2

    枫币
    179
    威望
    0
    贡献
    2
    在线时间
    15 小时
    注册时间
    2020-11-6
    发表于 2022-4-5 16:04:22 | 显示全部楼层
    我在執行一個台服189 的 可是沒有開源的代碼 所以要自己更新包頭 結構等等 有沒有興趣一起,還沒有五轉應該會比較好改
  • TA的每日心情
    开心
    2018-4-23 14:53
  • 签到天数: 1 天

    [LV.1]初来乍到

    服务端开发者

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    枫币
    667
    威望
    9
    贡献
    30
    在线时间
    93 小时
    注册时间
    2016-8-27
    发表于 2022-4-8 10:20:59 | 显示全部楼层
    蛮好
    回复

    使用道具 举报

    该用户从未签到

    新人上路

    Rank: 1

    枫币
    116
    威望
    0
    贡献
    1
    在线时间
    23 小时
    注册时间
    2019-4-1
    QQ
     楼主| 发表于 7 天前 | 显示全部楼层
    0510
    想修复打怪任务增加怪物

    最终找到了是任务没有初始化,导致任务的怪物没有被添加到任务状态中
    server.quest.MapleQuest.initQuests

    ```
    PreparedStatement ps = con.prepareStatement("SELECT * FROM wz_questdata");
                PreparedStatement psr = con.prepareStatement("SELECT * FROM wz_questreqdata WHERE questid = ?");
                PreparedStatement psa = con.prepareStatement("SELECT * FROM wz_questactdata WHERE questid = ?");
                PreparedStatement pss = con.prepareStatement("SELECT * FROM wz_questactskilldata WHERE uniqueid = ?");//需要的技能
                PreparedStatement psq = con.prepareStatement("SELECT * FROM wz_questactquestdata WHERE uniqueid = ?"); //应该是自己写的补丁数据库
                PreparedStatement psi = con.prepareStatement("SELECT * FROM wz_questactitemdata WHERE uniqueid = ?");//通过uniqueid来找需要的item
                PreparedStatement psp = con.prepareStatement("SELECT * FROM wz_questpartydata WHERE questid = ?");//组队任务
    ```

    这些表都没有,只能从079那边拿过来,但是数据需要自己填充的。。。怪不得除了id全是空的。

    ![image-20220510224515620]()

    navicat同步结构和数据

    ![image-20220510224907620]()



    需要单独添加一个灯泡字段

    ![image-20220510232929176]()

    ![image-20220510234345287]()





    ```
    2022-05-11 00:17:59.242
    Send SHOW_STATUS_INFO [0061] (11) Recv to : 飞飞
    61 00 01 8D 0A 01 03 00 30 30 34


    ```

    已经可以正常的发送了,但是客户端确实没有更新到数据,可能是这个封包和079的已经不一样了,需要修复这个

    该用户从未签到

    新人上路

    Rank: 1

    枫币
    116
    威望
    0
    贡献
    1
    在线时间
    23 小时
    注册时间
    2019-4-1
    QQ
     楼主| 发表于 7 天前 | 显示全部楼层
    比较了swordie176的源码发现任务id从short改成了int,改了之后发现就可以了,任务可以正常完成了
    1.     public static byte[] updateQuestMobKills(MapleQuestStatus status) {
    2.         if (ServerConfig.DEBUG_MODE) {
    3.             log.trace("调用");
    4.         }
    5.         MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();

    6.         mplew.writeShort(SendPacketOpcode.SHOW_STATUS_INFO.getValue());
    7.         mplew.write(MapleStatusInfo.更新任务状态.getType());
    8.         // todo 改成int 类型的任务id
    9. //        mplew.writeShort(status.getQuest().getId());
    10.         mplew.writeInt(status.getQuest().getId());
    复制代码





    任务相关表信息

    ```
    # 任务信息
    select * from wz_questactdata where questid = 2701

    # 任务需要和获取的东西
    select * from wz_questactdata where questid = 2089

    # 和actdata uniqueid 关联 物品信息
    select * from wz_questactitemdata where uniqueid in (select uniqueid from wz_questactdata where questid = 2089 and name = 'item')

    # 和任务关联的任务
    select * from wz_questactquestdata where QUEST = 2100

    # 和任务关联的技能
    select * from wz_questactskilldata where uniqueid = 218

    # 任务的状态
    SELECT * FROM queststatus  WHERE QUEST = 2701

    # 任务信息
    select * from questinfo where quest = 2701

    # 任务怪物状态
    select * from queststatusmobs
    ```

    绿蘑菇任务是2701,相关联的信息为

    ```sql
    # request info
    INSERT INTO `chms`.`wz_questdata`(`questid`, `name`, `autoStart`, `autoPreComplete`, `viewMedalItem`, `selectedSkillID`, `blocked`, `autoAccept`, `autoComplete`, `selfStart`) VALUES (2701, '绿蘑菇通缉牌', 0, 0, 0, 0, 0, 0, 0, 0);

    # request
    INSERT INTO `chms`.`wz_questreqdata`(`id`, `questid`, `name`, `type`, `stringStore`, `intStoresFirst`, `intStoresSecond`) VALUES (22728, 2701, 'mob', 1, '0', '1110100', '20');

    #act data
    INSERT INTO `chms`.`wz_questactdata`(`id`, `questid`, `name`, `type`, `intStore`, `applicableJobs`, `uniqueid`) VALUES (7757, 2701, 'exp', 1, 434, '', -1);
    INSERT INTO `chms`.`wz_questactdata`(`id`, `questid`, `name`, `type`, `intStore`, `applicableJobs`, `uniqueid`) VALUES (7758, 2701, 'item', 1, 0, '', 2001);

    # item data
    INSERT INTO `chms`.`wz_questactitemdata`(`id`, `itemid`, `count`, `period`, `gender`, `job`, `jobEx`, `prop`, `uniqueid`) VALUES (9101, 1032003, 1, 0, 2, -1, -1, -2, 2001);


    ```

    对应的就是这个



    最后完成任务的奖励获取



    总结:

    其实就是把questid 改成int传就好了。剩下和079的一样。修复任务绝对是吃力不讨好的事情
  • TA的每日心情
    无聊
    7 天前
  • 签到天数: 2 天

    [LV.1]初来乍到

    新人上路

    Rank: 1

    枫币
    74
    威望
    0
    贡献
    0
    在线时间
    7 小时
    注册时间
    2020-2-23
    发表于 7 天前 | 显示全部楼层
    加油,精神鼓励你,帮助你坚持下去。

    该用户从未签到

    新人上路

    Rank: 1

    枫币
    32
    威望
    0
    贡献
    0
    在线时间
    6 小时
    注册时间
    2022-4-3
    发表于 6 天前 | 显示全部楼层
    楼主加油,最近在修一个86的端,等这段时间结束了,交流一下
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则