本帖最后由 plshelloworld 于 2025-10-29 20:35 编辑
海盗职业群直接是拉完了,路边一条,那么在不破坏游戏生态情况下该怎么办呢?
既然都已经这样了,那就当个最强单兵吧
在广袤的冒险岛世界中,海盗们一直以无拘无束的冒险精神与独特技艺而闻名。然而,黑魔法师的对冒险岛世界的影响逐渐加深,一种名为「霸气」的神秘力量逐渐觉醒——那是海洋本身赋予真正自由之人的力量。
- 霸气,海盗职业群在攻击中有概率触发武装色和见闻色霸气,这使得他们在接下来的战斗中更加得心应手,在攻击中概率获得buff增益:魔法盾,金钱盾,圣甲术,极限防御,神圣之火,轻功,增益持续时间最大不会超过30s
- 霸王色霸气,海盗职业群在攻击中有概率触霸王色霸气,使得他们在接下来的战斗中战斗技艺极限提高,在攻击中概率获得buff增益:火眼晶晶,泰山压顶,急速领域,斗气集中,致命毒雾,终极无限,圣灵之盾,伺机待发,烟幕弹,增益持续时间最大不会超过20s
服务端改点东西:
- public class ToggleBufferHandler1 extends AbstractMaplePacketHandler {
- @Override
- public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
- final MapleCharacter player = c.getPlayer();
- if (player.getJob().getId() == 512 || player.getJob().getId() == 522) {
- ArrayList<Integer> arr = new ArrayList<Integer>() {{
- add(2001002);//魔法盾
- add(4211005);//金钱盾
- add(1001003);//圣甲
- add(1301006);//极限防御
- add(1301007);//神圣之火
- add(4201003);//轻功
- }};
- int skid = arr.get((int) (Math.random() * arr.size()));
- int retry = 5;
- while (player.hasBuffById(skid) && retry > 0) {
- retry--;
- skid = arr.get((int) (Math.random() * arr.size()));
- }
- MapleStatEffect effect = SkillFactory.getSkill(skid).varEffect;
- effect.setDuration(20000 + (int) (Math.random() * 10000));
- switch (skid) {
- default:
- effect.applyOne(player);
- }
- }
- }
- }
复制代码
- public class ToggleBufferHandler2 extends AbstractMaplePacketHandler {
- @Override
- public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
- final MapleCharacter player = c.getPlayer();
- if (player.getJob().getId() == 512 || player.getJob().getId() == 522) {
- ArrayList<Integer> arr = new ArrayList<Integer>() {{
- add(3221002);//火眼
- add(1221002);//泰山
- add(15111005);//急速
- add(1111002);//斗气
- add(2111003);//毒雾
- add(2221004);//终极无限
- add(2321005);//圣灵
- add(5121010);//伺机
- add(4221006);//烟幕
- }};
- int skid = arr.get((int) (Math.random() * arr.size()));
- int retry = 5;
- while (player.hasBuffById(skid) && retry > 0) {
- retry--;
- skid = arr.get((int) (Math.random() * arr.size()));
- }
- MapleStatEffect effect = SkillFactory.getSkill(skid).varEffect;
- effect.setDuration(10000 + (int) (Math.random() * 10000));
- switch (skid) {
- default:
- effect.applyOne(player);
- }
- }
- }
- }
复制代码值得注意的是。也许你应该先想办法学习一下毒雾和烟雾弹,否则你的客户端会爆炸 当然你也需要客户端的一些支持,把他加在我上次发布的有趣dota2技改就行了: - static void TimerHaki() {
- int currentValue = ReadPointerSignedInt(UserLocalBaseex, OFS_AttackCount);
- if (currentValue != lastValue) {
- // 80%
- if (std::rand() % 100 < 80) {
- Haki::Triggle_Hiki_1();
- }
- if (std::rand() % 100 < 50) {
- Haki::Triggle_Hiki_2();
- }
- // 打印当前值
- lastValue = currentValue;
- }
- }
复制代码关于Haki类,是一个发包,具体怎么发包,请去看其他大佬的帖子: - void Haki::Triggle_Hiki_1()
- {
- ClientSocket* client = ClientSocket::getInstance();
- if (!client) return;
- client->SendPacket("11 02");
- }
- void Haki::Triggle_Hiki_2()
- {
- ClientSocket* client = ClientSocket::getInstance();
- if (!client) return;
- client->SendPacket("12 02");
- }
复制代码
|