Decompile 13 functions in Source/Contents/Skills/SkillActionShinkiroShiranui.cpp, Source/Contents/Skills/SkillActionSkyEmperor.cpp, ...
Batch #3312 by youko: 0 byte-identical, 13 confirmed by peer review. - fn_08785 CSkillAction_SS_REIKETSUHOU::Slot12: logic confirmed by peer review - fn_08788 CSkillAction_SS_RAIDENPOU::Slot08: logic confirmed by peer review - fn_08789 CSkillAction_SS_RAIDENPOU::Slot11: logic confirmed by peer review - fn_08790 CSkillAction_SS_RAIDENPOU::Slot16: logic confirmed by peer review - fn_08795 CSkillAction_SS_KINRYUUHOU::Slot16: logic confirmed by peer review - fn_08803 CSkillAction_SS_KAGEAKUMU::Slot15: logic confirmed by peer review - fn_08807 CSkillAction_SS_HITOUAKUMU::Slot11: logic confirmed by peer review - fn_08811 CSkillAction_SS_ANKOKURYUUAKUMU::Slot11: logic confirmed by peer review - fn_08812 CSkillAction_SS_ANKOKURYUUAKUMU::Slot15: logic confirmed by peer review - fn_08813 CSkillAction_SS_FOUR_CHARM::Slot11: logic confirmed by peer review - fn_08814 ??RShuffledSequence@?A0x3aba9267@@QBE?AV?$vector@HV?$allocator@H@std@@@std@@H@Z: logic confirmed by peer review - fn_08815 CSkillObjectAction_SKE_STAR_CANNON::Slot00: logic confirmed by peer review - fn_08820 CEfstAction_SKY_ENCHANT::Slot00: logic confirmed by peer review Peer-reviewed-by: eAthena, meitogi Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes).
This commit is contained in:
parent
c77bf2f4d8
commit
a1105b5ec9
2 changed files with 134 additions and 0 deletions
|
|
@ -75,6 +75,21 @@ public:
|
|||
};
|
||||
|
||||
// OFFSET: 0x007950C0
|
||||
// FUNCTION: fn_08785
|
||||
void CSkillAction_SS_REIKETSUHOU::Slot12(vector3d position, int level, int argument3) {
|
||||
g_effectMgr->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId("reiketsuhou_bottom"), position.x, position.y, position.z, 0, -1, 0, 0);
|
||||
|
||||
const int counts[] = {5, 5, 5, 5, 5, 6, 6, 6, 7, 7};
|
||||
const int count = counts[std::min<unsigned int>(level, 10) - 1];
|
||||
for (int index = 0; index < count; ++index) {
|
||||
vector3d spot = position;
|
||||
spot.x += (std::max(0, std::rand() % (count * 50 + 1)) - count * 50 * 0.5f) * 0.1f;
|
||||
spot.z += (std::max(0, std::rand() % (count * 50 + 1)) - count * 50 * 0.5f) * 0.1f;
|
||||
if (CEffect* effect = g_effectMgr->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId("reiketsuhou"), spot.x, spot.y, spot.z, 0, -1, 0, 0)) {
|
||||
effect->Slot16(index * 80);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: 0x00795450
|
||||
// FUNCTION: fn_08786
|
||||
|
|
@ -89,10 +104,30 @@ int CSkillAction_SS_RAIDENPOU::Slot02() {
|
|||
}
|
||||
|
||||
// OFFSET: 0x00795470
|
||||
// FUNCTION: fn_08788
|
||||
void CSkillAction_SS_RAIDENPOU::Slot08(int level, CGameActor* source) {
|
||||
if (CEffect* effect = g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("new_raidenpou_cast"),
|
||||
0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) {
|
||||
effect->Slot14(level);
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: 0x007955F0
|
||||
// FUNCTION: fn_08789
|
||||
void CSkillAction_SS_RAIDENPOU::Slot11(int level, CGameActor* source, CGameActor* target) {
|
||||
if (target) {
|
||||
g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("new_raidenpou_bottom"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("new_raidenpou"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: 0x00795860
|
||||
// FUNCTION: fn_08790
|
||||
void CSkillAction_SS_RAIDENPOU::Slot16(int level, CGameActor* source, CGameActor* target) {
|
||||
if (source) {
|
||||
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("new_raidenpou_hit"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: 0x007959E0
|
||||
// FUNCTION: fn_08791
|
||||
|
|
@ -107,6 +142,12 @@ int CSkillAction_SS_KINRYUUHOU::Slot02() {
|
|||
}
|
||||
|
||||
// OFFSET: 0x00795BD0
|
||||
// FUNCTION: fn_08795
|
||||
void CSkillAction_SS_KINRYUUHOU::Slot16(int level, CGameActor* source, CGameActor* target) {
|
||||
if (source) {
|
||||
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("kinryuuhou_hit"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: 0x00795D40
|
||||
// FUNCTION: fn_08796
|
||||
|
|
@ -133,6 +174,12 @@ int CSkillAction_SS_KAGEAKUMU::Slot02() {
|
|||
}
|
||||
|
||||
// OFFSET: 0x00795F60
|
||||
// FUNCTION: fn_08803
|
||||
void CSkillAction_SS_KAGEAKUMU::Slot15(int level, CGameActor* source, CGameActor* target) {
|
||||
if (source) {
|
||||
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("kageakumu"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: 0x007960C0
|
||||
// FUNCTION: fn_08804
|
||||
|
|
@ -147,6 +194,31 @@ int CSkillAction_SS_HITOUAKUMU::Slot02() {
|
|||
}
|
||||
|
||||
// OFFSET: 0x00796140
|
||||
// FUNCTION: fn_08807
|
||||
void CSkillAction_SS_HITOUAKUMU::Slot11(int level, CGameActor* source, CGameActor* target) {
|
||||
if (!source) {
|
||||
return;
|
||||
}
|
||||
|
||||
g_effectMgr->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId("hitouakumu"), source->render.position.x, source->render.position.y,
|
||||
source->render.position.z, 0, -1, 0, 0);
|
||||
|
||||
ShuffledSequence shuffle;
|
||||
for (int ring = 0; ring < 3; ++ring) {
|
||||
const int count = std::max(0, std::rand() % 5) + 15;
|
||||
const float step = 360.0f / count;
|
||||
const std::vector<int> order = shuffle(count);
|
||||
for (int index = 0; index < count; ++index) {
|
||||
CEffect* effect = g_effectMgr->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId(FormatOwnedString("hitouakumu_%02d", ring)), source->render.position.x,
|
||||
source->render.position.y, source->render.position.z, 0, -1, 0, 0);
|
||||
if (effect) {
|
||||
const int spread = static_cast<int>(step);
|
||||
effect->Slot17(index * step + (spread ? std::max(0, std::rand() % spread) : 0));
|
||||
effect->Slot16((order[index] + ring * 10) * 32);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: 0x00796490
|
||||
// FUNCTION: fn_08808
|
||||
|
|
@ -161,9 +233,58 @@ int CSkillAction_SS_ANKOKURYUUAKUMU::Slot02() {
|
|||
}
|
||||
|
||||
// OFFSET: 0x00796510
|
||||
// FUNCTION: fn_08811
|
||||
void CSkillAction_SS_ANKOKURYUUAKUMU::Slot11(int level, CGameActor* source, CGameActor* target) {
|
||||
if (source) {
|
||||
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ankokuryuuakumu_00"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: 0x00796690
|
||||
// FUNCTION: fn_08812
|
||||
void CSkillAction_SS_ANKOKURYUUAKUMU::Slot15(int level, CGameActor* source, CGameActor* target) {
|
||||
if (source) {
|
||||
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("ankokuryuuakumu_01"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: 0x00796810
|
||||
// FUNCTION: fn_08813
|
||||
void CSkillAction_SS_FOUR_CHARM::Slot11(int level, CGameActor* source, CGameActor* target) {
|
||||
if (!source) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (source->charmType) {
|
||||
case 1:
|
||||
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("four_charm_ice_bottom"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("four_charm_ice"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
break;
|
||||
case 2:
|
||||
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("four_charm_earth_bottom"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("four_charm_earth"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
break;
|
||||
case 3:
|
||||
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("four_charm_fire_bottom"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("four_charm_fire"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
break;
|
||||
case 4:
|
||||
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("four_charm_wind_bottom"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId("four_charm_wind"), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: 0x00796EF0
|
||||
// FUNCTION: fn_08814
|
||||
std::vector<int> ShuffledSequence::operator()(int count) const {
|
||||
std::vector<int> sequence;
|
||||
for (int index = 0; index < count; ++index) {
|
||||
sequence.push_back(index);
|
||||
}
|
||||
|
||||
std::random_device device;
|
||||
std::mt19937 engine(device());
|
||||
std::shuffle(sequence.begin(), sequence.end(), engine);
|
||||
return sequence;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -120,6 +120,12 @@ public:
|
|||
};
|
||||
|
||||
// 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
|
||||
|
|
@ -128,6 +134,13 @@ int CSkillAction_SKE_ALL_IN_THE_SKY::Slot02() {
|
|||
}
|
||||
|
||||
// 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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue