diff --git a/Source/Contents/Skills/SkillActionSkyEmperor.cpp b/Source/Contents/Skills/SkillActionSkyEmperor.cpp index 7a24a3a1..331eaa8a 100644 --- a/Source/Contents/Skills/SkillActionSkyEmperor.cpp +++ b/Source/Contents/Skills/SkillActionSkyEmperor.cpp @@ -143,22 +143,113 @@ void CEfstAction_SKY_ENCHANT::Slot00(int efstId, int value, int argument3, int a } // 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(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(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 @@ -167,22 +258,79 @@ int CSkillAction_SKE_RISING_SUN::Slot02() { } // 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 @@ -191,6 +339,12 @@ int CSkillAction_SKE_NOON_BLAST::Slot02() { } // 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 @@ -199,6 +353,29 @@ int CSkillAction_SKE_SUNSET_BLAST::Slot02() { } // 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 @@ -207,18 +384,63 @@ int CSkillAction_SKE_RISING_MOON::Slot02() { } // 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