Batch #4395 by youko: 15 byte-identical, 65 confirmed by peer review. - fn_08860 CSkillAction_SKE_DAWN_BREAK::Slot08: logic confirmed by peer review - fn_08861 CSkillAction_SKE_DAWN_BREAK::Slot11: logic confirmed by peer review - fn_08862 CSkillAction_SKE_TWINKLING_GALAXY::Slot03: byte-identical - fn_08863 CSkillAction_SKE_TWINKLING_GALAXY::Slot05: byte-identical - fn_08864 CSkillAction_SKE_TWINKLING_GALAXY::Slot08: logic confirmed by peer review - fn_08865 CSkillObjectAction_SKE_TWINKLING_GALAXY::Slot00: logic confirmed by peer review - fn_08866 CSkillAction_SKE_STAR_BURST::Slot03: byte-identical - fn_08867 CSkillAction_SKE_STAR_BURST::Slot08: logic confirmed by peer review - fn_08868 CEfstAction_STAR_BURST::Slot00: logic confirmed by peer review - fn_08869 CEfstAction_STAR_BURST::Slot01: logic confirmed by peer review - fn_08870 CEfstAction_STAR_BURST::Slot02: logic confirmed by peer review - fn_08871 CSkillAction_SKE_STAR_CANNON::Slot03: byte-identical - fn_08872 CSkillAction_SKE_STAR_CANNON::Slot05: byte-identical - fn_08873 CSkillAction_SKE_STAR_CANNON::Slot08: logic confirmed by peer review - fn_08874 CSkillAction_SOA_TALISMAN_OF_FIVE_ELEMENTS::Slot00: byte-identical - fn_08875 CSkillAction_SOA_TALISMAN_OF_FIVE_ELEMENTS::Slot08: logic confirmed by peer review - fn_08876 CSkillAction_SOA_TALISMAN_OF_FIVE_ELEMENTS::Slot11: logic confirmed by peer review - fn_08877 CSkillAction_SOA_TALISMAN_OF_SOUL_STEALING::Slot08: logic confirmed by peer review - fn_08878 CSkillAction_SOA_TALISMAN_OF_SOUL_STEALING::Slot11: logic confirmed by peer review - fn_08879 CSkillAction_SOA_TALISMAN_OF_SOUL_STEALING::Slot15: logic confirmed by peer review - fn_08880 CSkillAction_SOA_EXORCISM_OF_MALICIOUS_SOUL::Slot08: logic confirmed by peer review - fn_08881 CSkillAction_SOA_EXORCISM_OF_MALICIOUS_SOUL::Slot11: logic confirmed by peer review - fn_08882 CSkillAction_SOA_TALISMAN_OF_BLUE_DRAGON::Slot08: logic confirmed by peer review - fn_08883 CSkillAction_SOA_TALISMAN_OF_BLUE_DRAGON::Slot11: logic confirmed by peer review - fn_08884 CEfstAction_T_FIRST_GOD::Slot00: logic confirmed by peer review - fn_08885 CEfstAction_T_FIRST_GOD::Slot01: logic confirmed by peer review - fn_08886 CEfstAction_T_FIRST_GOD::Slot02: logic confirmed by peer review - fn_08887 CSkillAction_SOA_TALISMAN_OF_WHITE_TIGER::Slot08: logic confirmed by peer review - fn_08888 CSkillAction_SOA_TALISMAN_OF_WHITE_TIGER::Slot11: logic confirmed by peer review - fn_08889 CEfstAction_T_SECOND_GOD::Slot00: logic confirmed by peer review - fn_08890 CEfstAction_T_SECOND_GOD::Slot01: logic confirmed by peer review - fn_08891 CEfstAction_T_SECOND_GOD::Slot02: logic confirmed by peer review - fn_08892 CSkillAction_SOA_TALISMAN_OF_RED_PHOENIX::Slot08: logic confirmed by peer review - fn_08893 CSkillAction_SOA_TALISMAN_OF_RED_PHOENIX::Slot11: logic confirmed by peer review - fn_08894 CEfstAction_T_THIRD_GOD::Slot00: logic confirmed by peer review - fn_08895 CEfstAction_T_THIRD_GOD::Slot01: logic confirmed by peer review - fn_08896 CEfstAction_T_THIRD_GOD::Slot02: logic confirmed by peer review - fn_08897 CSkillAction_SOA_TALISMAN_OF_BLACK_TORTOISE::Slot08: logic confirmed by peer review - fn_08898 CSkillAction_SOA_TALISMAN_OF_BLACK_TORTOISE::Slot12: logic confirmed by peer review - fn_08899 CSkillAction_SOA_TALISMAN_OF_BLACK_TORTOISE::Slot14: byte-identical - fn_08900 CEfstAction_T_FOURTH_GOD::Slot00: logic confirmed by peer review - fn_08901 CEfstAction_T_FOURTH_GOD::Slot01: logic confirmed by peer review - fn_08902 CEfstAction_T_FOURTH_GOD::Slot02: logic confirmed by peer review - fn_08903 CSkillAction_SOA_TALISMAN_OF_FOUR_BEARING_GOD::Slot08: logic confirmed by peer review - fn_08904 CSkillAction_SOA_TALISMAN_OF_FOUR_BEARING_GOD::Slot11: logic confirmed by peer review - fn_08905 CSkillAction_SOA_CIRCLE_OF_DIRECTIONS_AND_ELEMENTALS::Slot08: logic confirmed by peer review - fn_08906 CSkillAction_SOA_CIRCLE_OF_DIRECTIONS_AND_ELEMENTALS::Slot11: logic confirmed by peer review - fn_08907 CEfstAction_T_FIVETH_GOD::Slot00: logic confirmed by peer review - fn_08908 CEfstAction_T_FIVETH_GOD::Slot01: logic confirmed by peer review - fn_08909 CEfstAction_T_FIVETH_GOD::Slot02: logic confirmed by peer review - fn_08910 CSkillAction_SOA_SOUL_OF_HEAVEN_AND_EARTH::Slot00: byte-identical - fn_08911 CSkillAction_SOA_SOUL_OF_HEAVEN_AND_EARTH::Slot08: logic confirmed by peer review - fn_08912 CSkillAction_SOA_SOUL_OF_HEAVEN_AND_EARTH::Slot11: logic confirmed by peer review - fn_08913 CEfstAction_HEAVEN_AND_EARTH::Slot00: logic confirmed by peer review - fn_08914 CEfstAction_HEAVEN_AND_EARTH::Slot01: logic confirmed by peer review - fn_08915 CEfstAction_HEAVEN_AND_EARTH::Slot02: logic confirmed by peer review - fn_08916 CSkillAction_SOA_TALISMAN_OF_PROTECTION::Slot00: byte-identical - fn_08917 CSkillAction_SOA_TALISMAN_OF_PROTECTION::Slot08: logic confirmed by peer review - fn_08918 CSkillAction_SOA_TALISMAN_OF_PROTECTION::Slot11: logic confirmed by peer review - fn_08919 CSkillAction_SOA_TALISMAN_OF_WARRIOR::Slot00: byte-identical - fn_08920 CSkillAction_SOA_TALISMAN_OF_WARRIOR::Slot08: logic confirmed by peer review - fn_08921 CSkillAction_SOA_TALISMAN_OF_WARRIOR::Slot11: logic confirmed by peer review - fn_08922 CSkillAction_SOA_TALISMAN_OF_MAGICIAN::Slot00: byte-identical - fn_08923 CSkillAction_SOA_TALISMAN_OF_MAGICIAN::Slot08: logic confirmed by peer review - fn_08924 CSkillAction_SOA_TALISMAN_OF_MAGICIAN::Slot11: logic confirmed by peer review - fn_08925 CSkillAction_SOA_SOUL_GATHERING::Slot08: logic confirmed by peer review - fn_08926 CSkillAction_SOA_SOUL_GATHERING::Slot11: logic confirmed by peer review - fn_08927 CSkillAction_SOA_TOTEM_OF_TUTELARY::Slot08: logic confirmed by peer review - fn_08928 CSkillAction_SOA_TOTEM_OF_TUTELARY::Slot14: byte-identical - fn_08929 CSkillObjectAction_SOA_TOTEM_OF_TUTELARY::Slot00: logic confirmed by peer review - fn_08930 CSkillObjectAction_SOA_TOTEM_OF_TUTELARY::Slot01: logic confirmed by peer review - fn_08931 CSkillAction_SH_CHUL_HO_SONIC_CLAW::Slot02: byte-identical - fn_08932 CSkillAction_SH_CHUL_HO_SONIC_CLAW::Slot11: logic confirmed by peer review - fn_08933 CSkillAction_SH_HOWLING_OF_CHUL_HO::Slot02: byte-identical - fn_08934 CSkillAction_SH_HOWLING_OF_CHUL_HO::Slot08: logic confirmed by peer review - fn_08935 CSkillAction_SH_HOWLING_OF_CHUL_HO::Slot11: logic confirmed by peer review - fn_08936 CEfstAction_HOGOGONG::Slot00: logic confirmed by peer review - fn_08937 CEfstAction_HOGOGONG::Slot01: logic confirmed by peer review - fn_08938 CEfstAction_HOGOGONG::Slot02: logic confirmed by peer review - fn_08939 CSkillAction_SH_HOGOGONG_STRIKE::Slot02: byte-identical Peer-reviewed-by: eAthena, willerthal, KWDev Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). Adds to the build: Source/Contents/Skills/SkillActionSoulAscetic.cpp
654 lines
24 KiB
C++
654 lines
24 KiB
C++
#include "Contents/Actors/GameActor.h"
|
|
#include "Contents/EffectResourceSwitcher.h"
|
|
#include "Contents/Effects/Effect.h"
|
|
#include "Contents/Effects/EffectActor.h"
|
|
#include "Contents/Effects/EffectLists.h"
|
|
#include "Contents/Skills/SkillInfo.h"
|
|
#include "Utility/Math/Vector3d.h"
|
|
|
|
#include <algorithm>
|
|
#include <cstdlib>
|
|
|
|
class CSkillObjectAction_SKE_STAR_CANNON : public CSkillObjectAction {
|
|
public:
|
|
void Slot00(int argument, CRenderObject* object, CGameActor* source) override;
|
|
};
|
|
|
|
class CSkillAction_SKE_ALL_IN_THE_SKY : public CSkillAction {
|
|
public:
|
|
int Slot02() override;
|
|
void Slot08(int level, CGameActor* source) override;
|
|
void Slot09(int argument1, int argument2, int argument3) override;
|
|
};
|
|
|
|
class CSkillAction_SKE_ENCHANTING_SKY : public CSkillAction {
|
|
public:
|
|
void Slot08(int level, CGameActor* source) override;
|
|
};
|
|
|
|
class CEfstAction_SKY_ENCHANT : public CEfstAction {
|
|
public:
|
|
void Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) override;
|
|
void Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) override;
|
|
void Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) override;
|
|
};
|
|
|
|
class CSkillAction_SKE_SKY_SUN : public CSkillAction {
|
|
public:
|
|
void Slot11(int level, CGameActor* source, CGameActor* target) override;
|
|
void Slot16(int level, CGameActor* source, CGameActor* target) override;
|
|
};
|
|
|
|
class CSkillAction_SKE_SKY_MOON : public CSkillAction {
|
|
public:
|
|
void Slot08(int level, CGameActor* source) override;
|
|
void Slot11(int level, CGameActor* source, CGameActor* target) override;
|
|
void Slot16(int level, CGameActor* source, CGameActor* target) override;
|
|
};
|
|
|
|
class CSkillAction_SKE_STAR_LIGHT_KICK : public CSkillAction {
|
|
public:
|
|
void Slot11(int level, CGameActor* source, CGameActor* target) override;
|
|
void Slot16(int level, CGameActor* source, CGameActor* target) override;
|
|
};
|
|
|
|
class CSkillAction_SKE_RISING_SUN : public CSkillAction {
|
|
public:
|
|
int Slot02() override;
|
|
};
|
|
|
|
class CEfstAction_RISING_SUN : public CEfstAction {
|
|
public:
|
|
void Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) override;
|
|
void Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) override;
|
|
void Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) override;
|
|
};
|
|
|
|
class CEfstAction_NOON_SUN : public CEfstAction {
|
|
public:
|
|
void Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) override;
|
|
void Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) override;
|
|
void Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) override;
|
|
};
|
|
|
|
class CEfstAction_SUNSET_SUN : public CEfstAction {
|
|
public:
|
|
void Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) override;
|
|
void Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) override;
|
|
void Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) override;
|
|
};
|
|
|
|
class CSkillAction_SKE_NOON_BLAST : public CSkillAction {
|
|
public:
|
|
int Slot02() override;
|
|
void Slot11(int level, CGameActor* source, CGameActor* target) override;
|
|
};
|
|
|
|
class CSkillAction_SKE_SUNSET_BLAST : public CSkillAction {
|
|
public:
|
|
int Slot02() override;
|
|
void Slot11(int level, CGameActor* source, CGameActor* target) override;
|
|
};
|
|
|
|
class CSkillAction_SKE_RISING_MOON : public CSkillAction {
|
|
public:
|
|
int Slot02() override;
|
|
};
|
|
|
|
class CEfstAction_RISING_MOON : public CEfstAction {
|
|
public:
|
|
void Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) override;
|
|
void Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) override;
|
|
void Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) override;
|
|
};
|
|
|
|
class CEfstAction_MIDNIGHT_MOON : public CEfstAction {
|
|
public:
|
|
void Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) override;
|
|
void Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) override;
|
|
void Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) override;
|
|
};
|
|
|
|
class CEfstAction_DAWN_MOON : public CEfstAction {
|
|
public:
|
|
void Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) override;
|
|
void Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) override;
|
|
void Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) override;
|
|
};
|
|
|
|
class CSkillAction_SKE_MIDNIGHT_KICK : public CSkillAction {
|
|
public:
|
|
int Slot02() override;
|
|
void Slot08(int level, CGameActor* source) override;
|
|
void Slot11(int level, CGameActor* source, CGameActor* target) override;
|
|
};
|
|
|
|
class CSkillAction_SKE_DAWN_BREAK : public CSkillAction {
|
|
public:
|
|
int Slot02() override;
|
|
void Slot08(int level, CGameActor* source) override;
|
|
void Slot11(int level, CGameActor* source, CGameActor* target) override;
|
|
};
|
|
|
|
class CSkillAction_SKE_TWINKLING_GALAXY : public CSkillAction {
|
|
public:
|
|
bool Slot03(int argument) override;
|
|
bool Slot05() override;
|
|
void Slot08(int level, CGameActor* source) override;
|
|
};
|
|
|
|
class CSkillObjectAction_SKE_TWINKLING_GALAXY : public CSkillObjectAction {
|
|
public:
|
|
void Slot00(int argument, CRenderObject* object, CGameActor* source) override;
|
|
};
|
|
|
|
class CSkillAction_SKE_STAR_BURST : public CSkillAction {
|
|
public:
|
|
bool Slot03(int argument) override;
|
|
void Slot08(int level, CGameActor* source) override;
|
|
};
|
|
|
|
class CEfstAction_STAR_BURST : public CEfstAction {
|
|
public:
|
|
void Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) override;
|
|
void Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) override;
|
|
void Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) override;
|
|
};
|
|
|
|
class CSkillAction_SKE_STAR_CANNON : public CSkillAction {
|
|
public:
|
|
bool Slot03(int argument) override;
|
|
bool Slot05() override;
|
|
void Slot08(int level, CGameActor* source) override;
|
|
};
|
|
|
|
// OFFSET: 0x007975A0
|
|
// FUNCTION: fn_08815
|
|
void CSkillObjectAction_SKE_STAR_CANNON::Slot00(int argument, CRenderObject* object, CGameActor* source) {
|
|
if (object) {
|
|
g_effectMgr->Spawn(object->render.accountId, 2350, object->render.position.x, object->render.position.y, object->render.position.z, 0, argument, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x007975F0
|
|
// FUNCTION: fn_08816
|
|
int CSkillAction_SKE_ALL_IN_THE_SKY::Slot02() {
|
|
return 53;
|
|
}
|
|
|
|
// OFFSET: 0x00797600
|
|
// FUNCTION: fn_08817
|
|
void CSkillAction_SKE_ALL_IN_THE_SKY::Slot08(int level, CGameActor* source) {
|
|
if (source) {
|
|
static_cast<EffectActor*>(source)->LaunchEffect(845, level / 16);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00797630
|
|
// FUNCTION: fn_08818
|
|
void CSkillAction_SKE_ALL_IN_THE_SKY::Slot09(int argument1, int argument2, int argument3) {
|
|
if (CGameActor* source = reinterpret_cast<CGameActor*>(argument2)) {
|
|
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_all_in_the_sky"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x007977B0
|
|
// FUNCTION: fn_08819
|
|
void CSkillAction_SKE_ENCHANTING_SKY::Slot08(int level, CGameActor* source) {
|
|
if (source) {
|
|
static_cast<EffectActor*>(source)->LaunchEffect(831, level / 16);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x007977E0
|
|
// FUNCTION: fn_08820
|
|
void CEfstAction_SKY_ENCHANT::Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) {
|
|
if (actor) {
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_enchanting_sky_00"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_enchanting_sky_01"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00797A70
|
|
// FUNCTION: fn_08821
|
|
void CEfstAction_SKY_ENCHANT::Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) {
|
|
if (actor) {
|
|
g_effectMgr->Retire(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_enchanting_sky_01"));
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00797BB0
|
|
// FUNCTION: fn_08822
|
|
void CEfstAction_SKY_ENCHANT::Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) {
|
|
if (actor) {
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_enchanting_sky_01"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00797D40
|
|
// FUNCTION: fn_08824
|
|
void CSkillAction_SKE_SKY_SUN::Slot11(int level, CGameActor* source, CGameActor* target) {
|
|
if (!source || !target) {
|
|
return;
|
|
}
|
|
|
|
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("sky_sun"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
|
|
for (int index = 0; index < 6; ++index) {
|
|
CEffect* effect = g_effectMgr->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId("sky_sun_small"), target->render.position.x, target->render.position.y,
|
|
target->render.position.z, 0, -1, 0, 0);
|
|
if (!effect) {
|
|
return;
|
|
}
|
|
|
|
const int offsetZ = 15 - std::max(0, std::rand() % 30);
|
|
const int offsetX = 15 - std::max(0, std::rand() % 30);
|
|
effect->position[0] = target->render.position.x + offsetX;
|
|
effect->position[1] = target->render.position.y + 0.0f;
|
|
effect->position[2] = target->render.position.z + offsetZ;
|
|
effect->Slot16(index * 32);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x007980C0
|
|
// FUNCTION: fn_08825
|
|
void CSkillAction_SKE_SKY_SUN::Slot16(int level, CGameActor* source, CGameActor* target) {
|
|
if (source) {
|
|
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("sky_sun_hit"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00798240
|
|
// FUNCTION: fn_08827
|
|
void CSkillAction_SKE_SKY_MOON::Slot08(int level, CGameActor* source) {
|
|
if (source) {
|
|
if (CEffect* effect = g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("sky_moon_cast"),
|
|
0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) {
|
|
effect->Slot14(level);
|
|
}
|
|
if (CEffect* effect = g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("sky_moon_cast_bottom"),
|
|
0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) {
|
|
effect->Slot14(level);
|
|
}
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x007984D0
|
|
// FUNCTION: fn_08828
|
|
void CSkillAction_SKE_SKY_MOON::Slot11(int level, CGameActor* source, CGameActor* target) {
|
|
if (!target) {
|
|
return;
|
|
}
|
|
|
|
const float scale = source->unknown_0378 * source->render.speed * 16.0f;
|
|
if (CEffect* effect = g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("sky_moon"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) {
|
|
effect->Slot16(static_cast<int>(scale));
|
|
}
|
|
if (CEffect* effect = g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("sky_moon_bottom"),
|
|
0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) {
|
|
effect->Slot16(static_cast<int>(scale));
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00798770
|
|
// FUNCTION: fn_08829
|
|
void CSkillAction_SKE_SKY_MOON::Slot16(int level, CGameActor* source, CGameActor* target) {
|
|
if (source) {
|
|
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("sky_moon_hit"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x007988D0
|
|
// FUNCTION: fn_08830
|
|
void CSkillAction_SKE_STAR_LIGHT_KICK::Slot11(int level, CGameActor* source, CGameActor* target) {
|
|
if (!source || !target) {
|
|
return;
|
|
}
|
|
|
|
source->LaunchEffect(2426, vector3d{0.0f, 0.0f, 0.0f}, 0.0f);
|
|
g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("star_light_kick"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("star_light_kick_bottom"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
|
|
// OFFSET: 0x00798B90
|
|
// FUNCTION: fn_08831
|
|
void CSkillAction_SKE_STAR_LIGHT_KICK::Slot16(int level, CGameActor* source, CGameActor* target) {
|
|
if (source) {
|
|
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("star_light_kick_hit"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00798D10
|
|
// FUNCTION: fn_08832
|
|
int CSkillAction_SKE_RISING_SUN::Slot02() {
|
|
return 52;
|
|
}
|
|
|
|
// OFFSET: 0x00798D20
|
|
// FUNCTION: fn_08833
|
|
void CEfstAction_RISING_SUN::Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) {
|
|
if (actor) {
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_sun_00"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_sun_01"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00798FA0
|
|
// FUNCTION: fn_08834
|
|
void CEfstAction_RISING_SUN::Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) {
|
|
if (actor) {
|
|
g_effectMgr->Retire(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_sun_01"));
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x007990D0
|
|
// FUNCTION: fn_08835
|
|
void CEfstAction_RISING_SUN::Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) {
|
|
if (actor) {
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_sun_01"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00799250
|
|
// FUNCTION: fn_08836
|
|
void CEfstAction_NOON_SUN::Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) {
|
|
if (actor) {
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_sun_02"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_sun_03"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x007994D0
|
|
// FUNCTION: fn_08837
|
|
void CEfstAction_NOON_SUN::Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) {
|
|
if (actor) {
|
|
g_effectMgr->Retire(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_sun_03"));
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00799600
|
|
// FUNCTION: fn_08838
|
|
void CEfstAction_NOON_SUN::Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) {
|
|
if (actor) {
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_sun_03"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00799780
|
|
// FUNCTION: fn_08839
|
|
void CEfstAction_SUNSET_SUN::Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) {
|
|
if (actor) {
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_sun_04"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_sun_05"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00799A00
|
|
// FUNCTION: fn_08840
|
|
void CEfstAction_SUNSET_SUN::Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) {
|
|
if (actor) {
|
|
g_effectMgr->Retire(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_sun_05"));
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00799B30
|
|
// FUNCTION: fn_08841
|
|
void CEfstAction_SUNSET_SUN::Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) {
|
|
if (actor) {
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_sun_05"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00799CB0
|
|
// FUNCTION: fn_08842
|
|
int CSkillAction_SKE_NOON_BLAST::Slot02() {
|
|
return 52;
|
|
}
|
|
|
|
// OFFSET: 0x00799CC0
|
|
// FUNCTION: fn_08843
|
|
void CSkillAction_SKE_NOON_BLAST::Slot11(int level, CGameActor* source, CGameActor* target) {
|
|
if (target) {
|
|
g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_noon_blast"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00799E30
|
|
// FUNCTION: fn_08844
|
|
int CSkillAction_SKE_SUNSET_BLAST::Slot02() {
|
|
return 52;
|
|
}
|
|
|
|
// OFFSET: 0x00799E40
|
|
// FUNCTION: fn_08845
|
|
void CSkillAction_SKE_SUNSET_BLAST::Slot11(int level, CGameActor* source, CGameActor* target) {
|
|
if (!target) {
|
|
return;
|
|
}
|
|
|
|
g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("sunset_blast"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
|
|
for (int index = 0; index < 6; ++index) {
|
|
CEffect* effect = g_effectMgr->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId("sunset_blast_small"), target->render.position.x,
|
|
target->render.position.y, target->render.position.z, 0, -1, 0, 0);
|
|
if (!effect) {
|
|
return;
|
|
}
|
|
|
|
const int offsetZ = 15 - std::max(0, std::rand() % 30);
|
|
const int offsetX = 15 - std::max(0, std::rand() % 30);
|
|
effect->position[0] = target->render.position.x + offsetX;
|
|
effect->position[1] = target->render.position.y + 0.0f;
|
|
effect->position[2] = target->render.position.z + offsetZ;
|
|
effect->Slot16(index * 32);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079A1C0
|
|
// FUNCTION: fn_08846
|
|
int CSkillAction_SKE_RISING_MOON::Slot02() {
|
|
return 53;
|
|
}
|
|
|
|
// OFFSET: 0x0079A1D0
|
|
// FUNCTION: fn_08847
|
|
void CEfstAction_RISING_MOON::Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) {
|
|
if (actor) {
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_moon_00"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_moon_01"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079A450
|
|
// FUNCTION: fn_08848
|
|
void CEfstAction_RISING_MOON::Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) {
|
|
if (actor) {
|
|
g_effectMgr->Retire(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_moon_01"));
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079A580
|
|
// FUNCTION: fn_08849
|
|
void CEfstAction_RISING_MOON::Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) {
|
|
if (actor) {
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_moon_01"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079A700
|
|
// FUNCTION: fn_08850
|
|
void CEfstAction_MIDNIGHT_MOON::Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) {
|
|
if (actor) {
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_moon_02"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_moon_03"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079A980
|
|
// FUNCTION: fn_08851
|
|
void CEfstAction_MIDNIGHT_MOON::Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) {
|
|
if (actor) {
|
|
g_effectMgr->Retire(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_moon_03"));
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079AAB0
|
|
// FUNCTION: fn_08852
|
|
void CEfstAction_MIDNIGHT_MOON::Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) {
|
|
if (actor) {
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_moon_03"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079AC30
|
|
// FUNCTION: fn_08853
|
|
void CEfstAction_DAWN_MOON::Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) {
|
|
if (actor) {
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_moon_04"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_moon_05"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079AEB0
|
|
// FUNCTION: fn_08854
|
|
void CEfstAction_DAWN_MOON::Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) {
|
|
if (actor) {
|
|
g_effectMgr->Retire(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_moon_05"));
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079AFE0
|
|
// FUNCTION: fn_08855
|
|
void CEfstAction_DAWN_MOON::Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) {
|
|
if (actor) {
|
|
g_effectMgr->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_rising_moon_05"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079B160
|
|
// FUNCTION: fn_08856
|
|
int CSkillAction_SKE_MIDNIGHT_KICK::Slot02() {
|
|
return 53;
|
|
}
|
|
|
|
// OFFSET: 0x0079B170
|
|
// FUNCTION: fn_08857
|
|
void CSkillAction_SKE_MIDNIGHT_KICK::Slot08(int level, CGameActor* source) {
|
|
if (source) {
|
|
static_cast<EffectActor*>(source)->LaunchEffect(58, level / 16);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079B1A0
|
|
// FUNCTION: fn_08858
|
|
void CSkillAction_SKE_MIDNIGHT_KICK::Slot11(int level, CGameActor* source, CGameActor* target) {
|
|
if (source) {
|
|
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_midnight_kick"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079B320
|
|
// FUNCTION: fn_08859
|
|
int CSkillAction_SKE_DAWN_BREAK::Slot02() {
|
|
return 53;
|
|
}
|
|
|
|
// OFFSET: 0x0079B330
|
|
// FUNCTION: fn_08860
|
|
void CSkillAction_SKE_DAWN_BREAK::Slot08(int level, CGameActor* source) {
|
|
if (source) {
|
|
static_cast<EffectActor*>(source)->LaunchEffect(58, level / 16);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079B360
|
|
// FUNCTION: fn_08861
|
|
void CSkillAction_SKE_DAWN_BREAK::Slot11(int level, CGameActor* source, CGameActor* target) {
|
|
if (source) {
|
|
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ske_dawn_break"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079B4D0
|
|
// FUNCTION: fn_08862
|
|
bool CSkillAction_SKE_TWINKLING_GALAXY::Slot03(int argument) {
|
|
return true;
|
|
}
|
|
|
|
// OFFSET: 0x0079B4E0
|
|
// FUNCTION: fn_08863
|
|
bool CSkillAction_SKE_TWINKLING_GALAXY::Slot05() {
|
|
return true;
|
|
}
|
|
|
|
// OFFSET: 0x0079B4F0
|
|
// FUNCTION: fn_08864
|
|
void CSkillAction_SKE_TWINKLING_GALAXY::Slot08(int level, CGameActor* source) {
|
|
if (source) {
|
|
static_cast<EffectActor*>(source)->LaunchEffect(441, level / 16);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079B520
|
|
// FUNCTION: fn_08865
|
|
void CSkillObjectAction_SKE_TWINKLING_GALAXY::Slot00(int argument, CRenderObject* object, CGameActor* source) {
|
|
if (object) {
|
|
g_effectMgr->Spawn(object->render.accountId, 2349, object->render.position.x, object->render.position.y, object->render.position.z, 0, argument, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079B570
|
|
// FUNCTION: fn_08866
|
|
bool CSkillAction_SKE_STAR_BURST::Slot03(int argument) {
|
|
return true;
|
|
}
|
|
|
|
// OFFSET: 0x0079B580
|
|
// FUNCTION: fn_08867
|
|
void CSkillAction_SKE_STAR_BURST::Slot08(int level, CGameActor* source) {
|
|
if (source) {
|
|
static_cast<EffectActor*>(source)->LaunchEffect(441, level / 16);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079B5B0
|
|
// FUNCTION: fn_08868
|
|
void CEfstAction_STAR_BURST::Slot00(int efstId, int value, int argument3, int argument4, CRenderObject* actor, bool argument6) {
|
|
if (actor) {
|
|
g_effectMgr->Spawn(actor->render.accountId, 2348, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079B600
|
|
// FUNCTION: fn_08869
|
|
void CEfstAction_STAR_BURST::Slot01(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) {
|
|
if (actor) {
|
|
g_effectMgr->Retire(actor->render.accountId, 2348);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0079B630
|
|
// FUNCTION: fn_08870
|
|
void CEfstAction_STAR_BURST::Slot02(int efstId, int value, int argument3, int argument4, CRenderObject* actor) {
|
|
this->Slot00(efstId, value, 0, 0, actor, false);
|
|
}
|
|
|
|
// OFFSET: 0x0079B650
|
|
// FUNCTION: fn_08871
|
|
bool CSkillAction_SKE_STAR_CANNON::Slot03(int argument) {
|
|
return true;
|
|
}
|
|
|
|
// OFFSET: 0x0079B660
|
|
// FUNCTION: fn_08872
|
|
bool CSkillAction_SKE_STAR_CANNON::Slot05() {
|
|
return true;
|
|
}
|
|
|
|
// OFFSET: 0x0079B670
|
|
// FUNCTION: fn_08873
|
|
void CSkillAction_SKE_STAR_CANNON::Slot08(int level, CGameActor* source) {
|
|
if (source) {
|
|
static_cast<EffectActor*>(source)->LaunchEffect(441, level / 16);
|
|
}
|
|
}
|