发布一个有趣技改--霸气Haki
本帖最后由 plshelloworld 于 2025-10-29 20:35 编辑海盗职业群直接是拉完了,路边一条,那么在不破坏游戏生态情况下该怎么办呢?{:3_49:}
既然都已经这样了,那就当个最强单兵吧{:3_52:}
在广袤的冒险岛世界中,海盗们一直以无拘无束的冒险精神与独特技艺而闻名。然而,黑魔法师的对冒险岛世界的影响逐渐加深,一种名为「霸气」的神秘力量逐渐觉醒——那是海洋本身赋予真正自由之人的力量。
[*]霸气,海盗职业群在攻击中有概率触发武装色和见闻色霸气,这使得他们在接下来的战斗中更加得心应手,在攻击中概率获得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");
}
值得注意的是,毒雾和烟雾弹要提前通过某种方式学会,不管是那种方式teachSkill了就行,否则你的客户端会爆炸 沙发,我要了
页:
[1]