mirror of
https://github.com/OpenFusionProject/OpenFusion.git
synced 2024-11-24 22:11:04 +00:00
Compare commits
No commits in common. "f2447cd94089b3cb194278f0fa73f5f7878df4ed" and "0eff236512f8549a5ed50b3be2f61f1d99dd6487" have entirely different histories.
f2447cd940
...
0eff236512
54
src/Eggs.cpp
54
src/Eggs.cpp
@ -26,7 +26,6 @@ void Eggs::eggBuffPlayer(CNSocket* sock, int skillId, int eggId, int duration) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SkillResult result = SkillResult();
|
|
||||||
SkillData* skill = &Abilities::SkillTable[skillId];
|
SkillData* skill = &Abilities::SkillTable[skillId];
|
||||||
if(skill->drainType == SkillDrainType::PASSIVE) {
|
if(skill->drainType == SkillDrainType::PASSIVE) {
|
||||||
// apply buff
|
// apply buff
|
||||||
@ -51,57 +50,12 @@ void Eggs::eggBuffPlayer(CNSocket* sock, int skillId, int eggId, int duration) {
|
|||||||
// no-op
|
// no-op
|
||||||
},
|
},
|
||||||
&eggBuff);
|
&eggBuff);
|
||||||
|
|
||||||
sSkillResult_Buff resultBuff{};
|
|
||||||
resultBuff.eCT = plr->getCharType();
|
|
||||||
resultBuff.iID = plr->getID();
|
|
||||||
resultBuff.bProtected = false;
|
|
||||||
resultBuff.iConditionBitFlag = plr->getCompositeCondition();
|
|
||||||
result = SkillResult(sizeof(sSkillResult_Buff), &resultBuff);
|
|
||||||
} else {
|
|
||||||
int value = plr->getMaxHP() * skill->values[0][0] / 1000;
|
|
||||||
sSkillResult_Damage resultDamage{};
|
|
||||||
sSkillResult_Heal_HP resultHeal{};
|
|
||||||
switch(skill->skillType)
|
|
||||||
{
|
|
||||||
case SkillType::DAMAGE:
|
|
||||||
resultDamage.bProtected = false;
|
|
||||||
resultDamage.eCT = plr->getCharType();
|
|
||||||
resultDamage.iID = plr->getID();
|
|
||||||
resultDamage.iDamage = plr->takeDamage(src, value);
|
|
||||||
resultDamage.iHP = plr->getCurrentHP();
|
|
||||||
result = SkillResult(sizeof(sSkillResult_Damage), &resultDamage);
|
|
||||||
break;
|
|
||||||
case SkillType::HEAL_HP:
|
|
||||||
resultHeal.eCT = plr->getCharType();
|
|
||||||
resultHeal.iID = plr->getID();
|
|
||||||
resultHeal.iHealHP = plr->heal(src, value);
|
|
||||||
resultHeal.iHP = plr->getCurrentHP();
|
|
||||||
result = SkillResult(sizeof(sSkillResult_Heal_HP), &resultHeal);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
std::cout << "[WARN] oops, egg with active skill type " << (int)skill->skillType << " unhandled";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// initialize response struct
|
// use skill
|
||||||
size_t resplen = sizeof(sP_FE2CL_NPC_SKILL_HIT) + result.size;
|
std::vector<ICombatant*> targets;
|
||||||
uint8_t respbuf[CN_PACKET_BUFFER_SIZE];
|
targets.push_back(dynamic_cast<ICombatant*>(plr));
|
||||||
memset(respbuf, 0, resplen);
|
Abilities::useNPCSkill(src, skillId, targets);
|
||||||
|
|
||||||
sP_FE2CL_NPC_SKILL_HIT* pkt = (sP_FE2CL_NPC_SKILL_HIT*)respbuf;
|
|
||||||
pkt->iNPC_ID = eggId;
|
|
||||||
pkt->iSkillID = skillId;
|
|
||||||
pkt->eST = (int32_t)skill->skillType;
|
|
||||||
pkt->iTargetCnt = 1;
|
|
||||||
|
|
||||||
if(result.size > 0) {
|
|
||||||
void* attached = (void*)(pkt + 1);
|
|
||||||
memcpy(attached, result.payload, result.size);
|
|
||||||
}
|
|
||||||
|
|
||||||
NPCManager::sendToViewable(src.getEntity(), pkt, P_FE2CL_NPC_SKILL_HIT, resplen);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void eggStep(CNServer* serv, time_t currTime) {
|
static void eggStep(CNServer* serv, time_t currTime) {
|
||||||
|
@ -416,7 +416,6 @@ static void revivePlayer(CNSocket* sock, CNPacketData* data) {
|
|||||||
|
|
||||||
default: // plain respawn
|
default: // plain respawn
|
||||||
plr->HP = PC_MAXHEALTH(plr->level) / 2;
|
plr->HP = PC_MAXHEALTH(plr->level) / 2;
|
||||||
plr->clearBuffs(false);
|
|
||||||
// fallthrough
|
// fallthrough
|
||||||
case ePCRegenType::Unstick: // warp away
|
case ePCRegenType::Unstick: // warp away
|
||||||
move = true;
|
move = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user