rodecomp/Source/Contents/Effects/PartyMemberEffects.cpp
ragnarok-clanker e4be8f4190 Decompile 18 functions in Source/Client/Application/UnhandledExceptionHandler.cpp, Source/Client/Session.h, ...
Batch #2077 by ragnarok-clanker: 0 byte-identical, 18 confirmed by peer review.

- fn_04709 TopLevelExceptionFilter: logic confirmed by peer review (already on main)
- fn_08004 C3dGrannyModelRes::PlayAnimation: logic confirmed by peer review
- fn_09315 UIRequestJoinPartyWnd::SendMsg: logic confirmed by peer review
- fn_19761 EffectParticle::EffectParticle: logic confirmed by peer review
- fn_19768 EffectParticle::InitializeRecords: logic confirmed by peer review
- fn_20007 AttachedEffect::AttachedEffect: logic confirmed by peer review
- fn_20076 CreateEffectParticle: logic confirmed by peer review
- fn_20088 UpdatePartyEffect: logic confirmed by peer review
- fn_20991 CRenderObject::CRenderObject: logic confirmed by peer review
- fn_21069 ?CreatePartyEffect@?A0xba063134@@YAPAUAttachedEffect@@AAUEffectActor@@AAUPartyEffectMode@@@Z: logic confirmed by peer review
- fn_21086 RenderObjectState::Reset: logic confirmed by peer review
- fn_23396 CSession::GetJobName: logic confirmed by peer review
- fn_23495 CSession::InitJobNameTable: logic confirmed by peer review
- fn_23788 CSession::GetMonsterActName: logic confirmed by peer review
- fn_23791 CSession::GetMonsterTalkText: logic confirmed by peer review
- fn_20987 EffectActor::EffectActor: logic confirmed by peer review
- fn_22363 CSoundMaker::CSoundMaker: logic confirmed by peer review
- fn_24251 CEffectMaker::CEffectMaker: logic confirmed by peer review

Reviewed-by: ragnarok-clanker
2026-10-29 09:48:08 +00:00

49 lines
1.5 KiB
C++

#include "Contents/Effects/AttachedEffect.h"
#include "Contents/Effects/EffectActor.h"
#include "Contents/Effects/PartyMemberEffects.h"
#include "Contents/Effects/RagEffectInitialization.h"
#include "Script/LuaScript.h"
#include "Utility/Math/AffineMatrix.h"
namespace {
// OFFSET: 0x00CADD60
// FUNCTION: fn_21069
AttachedEffect* CreatePartyEffect(EffectActor& actor, PartyEffectMode& mode) {
mode.lastEffectId = 160;
auto* effect = new AttachedEffect();
bool force = false;
mode.effectScript.Call("IsForceRenderEffect", "d>b", 160, &force);
effect->state.forceRender = force;
const float sine = ClientSine(0);
const float cosine = ClientCosine(0);
const float x = 0.0f * cosine - 0.0f * sine;
const float z = 0.0f * cosine + 0.0f * sine;
InitializeRagEffect(effect->state, effect->render, &actor, actor.render, 160, x, 0, z, mode.options, mode.resources);
mode.objects.push_back(effect);
actor.state.effects.push_back(&effect->state);
return effect;
}
}
// INLINED
bool PartyMemberEffects::Enabled() const {
const auto* mode = this->activeMode;
return mode && (mode->playerOption48 != 0 || mode->playerOption54 != 0);
}
// INLINED
void PartyMemberEffects::EnsurePartyEffect(std::uint32_t accountId) {
PartyEffectMode& mode = *this->activeMode;
for (EffectActor* actor : mode.actors) {
if (actor->render.accountId == accountId) {
if (!actor->state.Attachments().HasId(160)) {
CreatePartyEffect(*actor, mode);
}
return;
}
}
}