Skip to content

Commit befcac8

Browse files
committed
Changes requested in code review.
1 parent 28aa711 commit befcac8

File tree

4 files changed

+30
-32
lines changed

4 files changed

+30
-32
lines changed

Code/client/Games/Skyrim/Actor.cpp

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <Events/MountEvent.h>
1818
#include <Events/DialogueEvent.h>
1919
#include <Events/HitEvent.h>
20+
#include <Events/RemoveSpellEvent.h>
2021

2122
#include <Games/TES.h>
2223
#include <World.h>
@@ -103,6 +104,7 @@ void Actor::Save_Reversed(const uint32_t aChangeFlags, Buffer::Writer& aWriter)
103104

104105
#endif
105106

107+
TP_THIS_FUNCTION(TRemoveSpell, bool, Actor, MagicItem*);
106108
TP_THIS_FUNCTION(TCharacterConstructor, Actor*, Actor);
107109
TP_THIS_FUNCTION(TCharacterConstructor2, Actor*, Actor, uint8_t aUnk);
108110
TP_THIS_FUNCTION(TCharacterDestructor, Actor*, Actor);
@@ -119,6 +121,7 @@ TCharacterConstructor* RealCharacterConstructor;
119121
TCharacterConstructor2* RealCharacterConstructor2;
120122
TCharacterDestructor* RealCharacterDestructor;
121123

124+
static TRemoveSpell* RealRemoveSpell = nullptr;
122125
static TAddInventoryItem* RealAddInventoryItem = nullptr;
123126
static TPickUpObject* RealPickUpObject = nullptr;
124127
static TDropObject* RealDropObject = nullptr;
@@ -352,17 +355,15 @@ void Actor::StopCombat() noexcept
352355
s_pStopCombat(this);
353356
}
354357

355-
void Actor::RemoveSpell(MagicItem* apSpell) noexcept
358+
bool Actor::RemoveSpell(MagicItem* apSpell) noexcept
356359
{
357-
TP_THIS_FUNCTION(TRemoveSpell, void, Actor, MagicItem*);
358-
POINTER_SKYRIMSE(TRemoveSpell, removeSpell, 38717);
359360
if (!apSpell)
360361
{
361-
spdlog::error("Actor::RemoveSpell: apSpell is null");
362-
return;
362+
spdlog::error(__FUNCTION__ ": apSpell is null");
363+
return FALSE;
363364
}
364-
// spdlog::info("Removing spell: {} from actor: {}", apSpell->formID, formID);
365-
TiltedPhoques::ThisCall(removeSpell, this, apSpell);
365+
// spdlog::info(__FUNCTION__ ": removing: {} from actor: {}", apSpell->formID, formID);
366+
return TiltedPhoques::ThisCall(RealRemoveSpell, this, apSpell);
366367
}
367368

368369
bool Actor::HasPerk(uint32_t aPerkFormId) const noexcept
@@ -382,6 +383,23 @@ uint8_t Actor::GetPerkRank(uint32_t aPerkFormId) const noexcept
382383
return TiltedPhoques::ThisCall(getPerkRank, this, pPerk);
383384
}
384385

386+
bool TP_MAKE_THISCALL(HookRemoveSpell, Actor, MagicItem* apSpell)
387+
{
388+
bool result = TiltedPhoques::ThisCall(RealRemoveSpell, apThis, apSpell);
389+
if (apThis->GetExtension()->IsLocalPlayer() && result)
390+
{
391+
// Log spell info
392+
// spdlog::info("Removing spell {}, ID: {} from local player", apSpell->GetName() , apSpell->formID);
393+
RemoveSpellEvent removalEvent;
394+
395+
removalEvent.TargetId = apThis->formID;
396+
removalEvent.SpellId = apSpell->formID;
397+
World::Get().GetRunner().Trigger(removalEvent);
398+
}
399+
400+
return result;
401+
}
402+
385403
Actor* TP_MAKE_THISCALL(HookCharacterConstructor, Actor)
386404
{
387405
TP_EMPTY_HOOK_PLACEHOLDER;
@@ -1246,6 +1264,7 @@ static TiltedPhoques::Initializer s_actorHooks(
12461264
{
12471265
POINTER_SKYRIMSE(TActorProcess, s_actorProcess, 37356);
12481266
POINTER_SKYRIMSE(TSetPosition, s_setPosition, 19790);
1267+
POINTER_SKYRIMSE(TRemoveSpell, s_removeSpell, 38717);
12491268
POINTER_SKYRIMSE(TCharacterConstructor, s_characterCtor, 40245);
12501269
POINTER_SKYRIMSE(TCharacterConstructor2, s_characterCtor2, 40246);
12511270
POINTER_SKYRIMSE(TCharacterDestructor, s_characterDtor, 37175);
@@ -1268,6 +1287,7 @@ static TiltedPhoques::Initializer s_actorHooks(
12681287

12691288
RealActorProcess = s_actorProcess.Get();
12701289
RealSetPosition = s_setPosition.Get();
1290+
RealRemoveSpell = s_removeSpell.Get();
12711291
FUNC_GetActorLocation = s_GetActorLocation.Get();
12721292
RealCharacterConstructor = s_characterCtor.Get();
12731293
RealCharacterConstructor2 = s_characterCtor2.Get();
@@ -1289,6 +1309,7 @@ static TiltedPhoques::Initializer s_actorHooks(
12891309

12901310
TP_HOOK(&RealActorProcess, HookActorProcess);
12911311
TP_HOOK(&RealSetPosition, HookSetPosition);
1312+
TP_HOOK(&RealRemoveSpell, HookRemoveSpell);
12921313
TP_HOOK(&RealCharacterConstructor, HookCharacterConstructor);
12931314
TP_HOOK(&RealCharacterConstructor2, HookCharacterConstructor2);
12941315
TP_HOOK(&RealForceState, HookForceState);

Code/client/Games/Skyrim/Actor.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ struct Actor : TESObjectREFR
250250
void StopCombat() noexcept;
251251
bool PlayIdle(TESIdleForm* apIdle) noexcept;
252252
void FixVampireLordModel() noexcept;
253-
void RemoveSpell(MagicItem* apSpell) noexcept;
253+
bool RemoveSpell(MagicItem* apSpell) noexcept;
254254

255255
enum ActorFlags
256256
{

Code/client/Games/Skyrim/Magic/MagicTarget.cpp

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717

1818
#include <Effects/ActiveEffect.h>
1919

20-
#include <Events/RemoveSpellEvent.h>
21-
2220
TP_THIS_FUNCTION(TAddTarget, bool, MagicTarget, MagicTarget::AddTargetData& arData);
2321
TP_THIS_FUNCTION(TRemoveSpell, bool, Actor, MagicItem* apSpell);
2422
TP_THIS_FUNCTION(TCheckAddEffectTargetData, bool, MagicTarget::AddTargetData, void* arArgs, float afResistance);
@@ -185,26 +183,6 @@ bool TP_MAKE_THISCALL(HookAddTarget, MagicTarget, MagicTarget::AddTargetData& ar
185183
}
186184
}
187185

188-
// Designed to run when we hook removespell (AddressLib ID is 38717)
189-
// Sends a message to the server to remove the spell from this player on other clients
190-
bool TP_MAKE_THISCALL(HookRemoveSpell, Actor, MagicItem* apSpell)
191-
{
192-
bool result = TiltedPhoques::ThisCall(RealRemoveSpell, apThis, apSpell);
193-
if (apThis->GetExtension()->IsLocalPlayer() && result)
194-
{
195-
// Log spell info
196-
//spdlog::info("Removing spell {}, ID: {} from local player", apSpell->GetName() , apSpell->formID);
197-
RemoveSpellEvent removalEvent;
198-
199-
removalEvent.TargetId = apThis->formID;
200-
removalEvent.SpellId = apSpell->formID;
201-
World::Get().GetRunner().Trigger(removalEvent);
202-
}
203-
204-
return result;
205-
}
206-
207-
208186
bool TP_MAKE_THISCALL(HookCheckAddEffectTargetData, MagicTarget::AddTargetData, void* arArgs, float afResistance)
209187
{
210188
if (s_autoSucceedEffectCheck)
@@ -267,7 +245,6 @@ static TiltedPhoques::Initializer s_magicTargetHooks([]() {
267245
RealGetPerkRank = getPerkRank.Get();
268246

269247
TP_HOOK(&RealAddTarget, HookAddTarget);
270-
TP_HOOK(&RealRemoveSpell, HookRemoveSpell);
271248
TP_HOOK(&RealCheckAddEffectTargetData, HookCheckAddEffectTargetData);
272249
TP_HOOK(&RealFindTargets, HookFindTargets);
273250
TP_HOOK(&RealAdjustForPerks, HookAdjustForPerks);

Code/encoding/Messages/RemoveSpellRequest.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ struct RemoveSpellRequest final: ClientMessage
99
virtual ~RemoveSpellRequest() = default;
1010
void SerializeRaw(TiltedPhoques::Buffer::Writer& aWriter) const noexcept override;
1111
void DeserializeRaw(TiltedPhoques::Buffer::Reader& aReader) noexcept override;
12-
bool operator==(const RemoveSpellRequest& achRhs) const noexcept { return TargetId == achRhs.TargetId && SpellId == achRhs.SpellId && Opcode == achRhs.Opcode; }
12+
bool operator==(const RemoveSpellRequest& achRhs) const noexcept { return Opcode == achRhs.Opcode && TargetId == achRhs.TargetId && SpellId == achRhs.SpellId; }
1313

1414
uint32_t TargetId{};
1515
GameId SpellId{};

0 commit comments

Comments
 (0)