PandasWS / Pandas

熊猫模拟器 - 基于 rAthena 构建的中文仙境传说模拟器(欢迎加入QQ交流群:928171346)
https://pandas.ws
GNU General Public License v3.0
154 stars 79 forks source link

修正 setunitdata 对魔物的部分属性调整会继承到魔物下一次重生的问题 (感谢 "差记性的小北" 反馈) #671

Closed CairoLee closed 1 year ago

CairoLee commented 1 year ago

操作方法

现在的表现

预期表现

重现脚本

prontera,156,132    monster PoPoring    1031,1,5,0

-   script  OnPCAttackFilter#CrazyBoss  -1,{
end;

OnPCAttackExpress:
    .@Gid = @attack_target_gid;

    // 被攻击的不是魔物则无需处理
    if(@attack_target_mobid == 0) end;

    // 被一击必杀则无需处理
    if(!unitexists(.@Gid, 1)) end;

    // 检查被攻击魔物是否已被处理过
    .@is2 = inarray($@crazy_mob_gid, .@Gid);

    // 若没有被处理过
    if(.@is2 == -1){

        // 记录魔物的 gid 到数组中, 表示它被处理过
        .@size = getarraysize($@crazy_mob_gid);
        $@crazy_mob_gid[.@size] = .@Gid;

        // 随机提升倍率
        .@bonus_tmp = rand(2, 10);

        // 获取魔物现在的名称
        .@mob_name$ = getunitname(.@Gid);

        // 在他的名称前添加个前缀
        setunitname .@Gid, "["+.@bonus_tmp+"倍]"+.@mob_name$;

        // 被处理过的魔物添加个光环
        unitaura .@Gid, 1063;
    }
end;

OnUnitKillExpress:
    //击杀者若不是玩家,死亡对象不是魔物,则结束程序
    if(getunittype($@killer_gid) != BL_PC && getunittype($@killed_gid) != BL_MOB) end;      

    // 判断是否为处理过的魔物
    .@idx = inarray($@crazy_mob_gid, $@killed_gid);

    // 若处理过, 则将魔物的 gid 从数组中移除 (因为它死了)
    if(.@idx != -1) {
        deletearray $@crazy_mob_gid[.@idx], 1;
    }   
end;
}
CairoLee commented 1 year ago

上一次提交同时还重置了:

// UMOB_LEVEL
// UMOB_AI
// UMOB_CLASS
// UMOB_CANMOVETICK
// UMOB_DMGIMMUNE
// UMOB_GROUP_ID
// UMOB_IGNORE_CELL_STACK_LIMIT

还有两个暂时不知道应该怎么处理更合适,没有人反馈的话,暂时就先不管了:

// UMOB_SLAVECPYMSTRMD
// UMOB_SEX