- UID
- 38919
- 阅读权限
- 60
- 回帖
- 143
- 喵币
- 0
- 有爱
- 286
- DKP
- 3144
- 金币
- 196740
- 在线时间
- 864 小时
- 注册时间
- 2023-3-26
- 最后登录
- 2026-2-15
声望: 7793   虚弱: 0

Lv.6(觉醒者)
|
发表于 2023-11-1 10:20:57
|
显示全部楼层
enum SpecType
{
FLAG_SPEC_HEALER = 0x00000001,
FLAG_SPEC_DPS = 0x00000002,
FLAG_SPEC_TANK = 0x00000004
};
if (itr->GetSource()->HasTankSpec() && RewardSpec & FLAG_SPEC_TANK)
HasTankSpec()就是获取玩家的天赋树,也就是玩家增加的天赋点,比如死亡骑士的鲜血天赋,那这个函数就返回了真,也就是说这个职业现在加了这个天赋,就默认为T了
而RewardSpec & FLAG_SPEC_TANK 是一个位运算
AZ确实没有随机本完成后的脚本钩子,想实现在随机本完成后获得奖励,只能按照楼主这种修改内核源码的形式来完成,但是奖励封装为一个函数的话,更加整洁和模块化,如果未来有任何关于奖励逻辑的更改,只需要修改RewardBasedOnRole函数,在需要的地方调用即可,无需在多个地方进行修改。
void Player::RewardBasedOnRole(Quest const* quest)
{
if (this->CanRewardQuest(quest, false))
{
if (this->roles == PLAYER_ROLE_TANK || this->roles == PLAYER_ROLE_HEALER)
this->AddItem(25, 1);
this->RewardQuest(quest, 0, nullptr, false, true);
}
else
{
if (this->roles == PLAYER_ROLE_TANK || this->roles == PLAYER_ROLE_HEALER)
this->AddItem(35, 1);
this->RewardQuest(quest, 0, nullptr, false, true);
}
}
|
|