找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 100|回复: 2

[客户端] 发布一个有趣技改--霸气Haki

[复制链接]

5

主题

6

回帖

30

积分

新手上路

积分
30
发表于 7 天前 | 显示全部楼层 |阅读模式
本帖最后由 plshelloworld 于 2025-10-29 20:35 编辑

海盗职业群直接是拉完了,路边一条,那么在不破坏游戏生态情况下该怎么办呢?
既然都已经这样了,那就当个最强单兵


在广袤的冒险岛世界中,海盗们一直以无拘无束的冒险精神与独特技艺而闻名。然而,黑魔法师的对冒险岛世界的影响逐渐加深,一种名为「霸气」的神秘力量逐渐觉醒——那是海洋本身赋予真正自由之人的力量。

  • 霸气,海盗职业群在攻击中有概率触发武装色和见闻色霸气,这使得他们在接下来的战斗中更加得心应手,在攻击中概率获得buff增益:魔法盾,金钱盾,圣甲术,极限防御,神圣之火,轻功,增益持续时间最大不会超过30s
  • 霸王色霸气,海盗职业群在攻击中有概率触霸王色霸气,使得他们在接下来的战斗中战斗技艺极限提高,在攻击中概率获得buff增益:火眼晶晶,泰山压顶,急速领域,斗气集中,致命毒雾,终极无限,圣灵之盾,伺机待发,烟幕弹,增益持续时间最大不会超过20s


服务端改点东西:
  1. public class ToggleBufferHandler1 extends AbstractMaplePacketHandler {
  2.     @Override
  3.     public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
  4.         final MapleCharacter player = c.getPlayer();         
  5.         if (player.getJob().getId() == 512 || player.getJob().getId() == 522) {           
  6.             ArrayList<Integer> arr = new ArrayList<Integer>() {{
  7.                 add(2001002);//魔法盾
  8.                 add(4211005);//金钱盾
  9.                 add(1001003);//圣甲
  10.                 add(1301006);//极限防御
  11.                 add(1301007);//神圣之火
  12.                 add(4201003);//轻功
  13.             }};
  14.             int skid = arr.get((int) (Math.random() * arr.size()));
  15.             int retry = 5;
  16.             while (player.hasBuffById(skid) && retry > 0) {
  17.                 retry--;
  18.                 skid = arr.get((int) (Math.random() * arr.size()));
  19.             }
  20.             MapleStatEffect effect = SkillFactory.getSkill(skid).varEffect;           
  21.             effect.setDuration(20000 + (int) (Math.random() * 10000));
  22.             switch (skid) {
  23.                 default:
  24.                     effect.applyOne(player);
  25.             }

  26.         }
  27.     }
  28. }
复制代码

  1. public class ToggleBufferHandler2 extends AbstractMaplePacketHandler {
  2.     @Override
  3.     public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
  4.         final MapleCharacter player = c.getPlayer();      
  5.         if (player.getJob().getId() == 512 || player.getJob().getId() == 522) {         
  6.             ArrayList<Integer> arr = new ArrayList<Integer>() {{
  7.                 add(3221002);//火眼
  8.                 add(1221002);//泰山
  9.                 add(15111005);//急速
  10.                 add(1111002);//斗气
  11.                 add(2111003);//毒雾
  12.                 add(2221004);//终极无限
  13.                 add(2321005);//圣灵
  14.                 add(5121010);//伺机
  15.                 add(4221006);//烟幕
  16.             }};
  17.             int skid = arr.get((int) (Math.random() * arr.size()));
  18.             int retry = 5;
  19.             while (player.hasBuffById(skid) && retry > 0) {
  20.                 retry--;
  21.                 skid = arr.get((int) (Math.random() * arr.size()));
  22.             }
  23.             MapleStatEffect effect = SkillFactory.getSkill(skid).varEffect;         
  24.             effect.setDuration(10000 + (int) (Math.random() * 10000));
  25.             switch (skid) {
  26.                 default:
  27.                     effect.applyOne(player);
  28.             }

  29.         }
  30.     }
  31. }
复制代码
值得注意的是。也许你应该先想办法学习一下毒雾和烟雾弹,否则你的客户端会爆炸
当然你也需要客户端的一些支持,把他加在我上次发布的有趣dota2技改就行了:
  1.     static void TimerHaki() {
  2.         int currentValue = ReadPointerSignedInt(UserLocalBaseex, OFS_AttackCount);
  3.         if (currentValue != lastValue) {
  4.             // 80%
  5.             if (std::rand() % 100 < 80) {
  6.                 Haki::Triggle_Hiki_1();
  7.             }
  8.             if (std::rand() % 100 < 50) {
  9.                 Haki::Triggle_Hiki_2();
  10.             }         
  11.             // 打印当前值           
  12.             lastValue = currentValue;  
  13.         }   
  14.     }
复制代码
关于Haki类,是一个发包,具体怎么发包,请去看其他大佬的帖子:
  1. void Haki::Triggle_Hiki_1()
  2. {
  3.     ClientSocket* client = ClientSocket::getInstance();
  4.     if (!client) return;

  5.     client->SendPacket("11 02");

  6. }

  7. void Haki::Triggle_Hiki_2()
  8. {
  9.     ClientSocket* client = ClientSocket::getInstance();
  10.     if (!client) return;

  11.     client->SendPacket("12 02");

  12. }
复制代码







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 1蘑菇币 +50 收起 理由
leevccc + 50

查看全部评分

5

主题

6

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 7 天前 | 显示全部楼层
值得注意的是,毒雾和烟雾弹要提前通过某种方式学会,不管是那种方式teachSkill了就行,否则你的客户端会爆炸

1

主题

24

回帖

5

积分

新手上路

积分
5
发表于 7 天前 | 显示全部楼层
沙发,我要了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|蘑菇物语

GMT+8, 2025-11-5 04:48 , Processed in 0.062700 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表