Skip to content

Commit b6d18a5

Browse files
committed
Reduce internal counter for magic projectile when switching from a non Player caster to player caster
1 parent 98c7c5a commit b6d18a5

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

obse/obse/Commands_MiscReference.cpp

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1437,6 +1437,29 @@ static bool Cmd_GetProjectileSource_Execute(COMMAND_ARGS)
14371437
return true;
14381438
}
14391439

1440+
1441+
static float* fWeightedNumberOfMagicProjectiles = (float*)0x00B3C0D0;
1442+
static float* fMagicTrackingMultBall = (float*)0x00B38108;
1443+
static float* fMagicTrackingMultBolt = (float*)0x00B3810C;
1444+
static float* fMagicTrackingMultFog = (float*)0x00B38110;
1445+
1446+
static void ReduceMagicProjectileCounterFor(MagicProjectile* proj) {
1447+
_MESSAGE("%f %f %f %f ", *fWeightedNumberOfMagicProjectiles, *fMagicTrackingMultBall, *fMagicTrackingMultBolt, *fMagicTrackingMultFog);
1448+
if (Oblivion_DynamicCast(proj, 0, RTTI_MagicProjectile, RTTI_MagicBallProjectile, 0)) {
1449+
*fWeightedNumberOfMagicProjectiles -= *fMagicTrackingMultBall;
1450+
}
1451+
else if (Oblivion_DynamicCast(proj, 0, RTTI_MagicProjectile, RTTI_MagicBoltProjectile, 0)) {
1452+
*fWeightedNumberOfMagicProjectiles -= *fMagicTrackingMultBolt;
1453+
}
1454+
else if (Oblivion_DynamicCast(proj, 0, RTTI_MagicProjectile, RTTI_MagicFogProjectile, 0)) {
1455+
*fWeightedNumberOfMagicProjectiles -= *fMagicTrackingMultFog;
1456+
1457+
}
1458+
else {
1459+
_MESSAGE("[ERROR] Unknow pojectile type");
1460+
}
1461+
}
1462+
14401463
static bool Cmd_SetMagicProjectileSpell_Execute(COMMAND_ARGS)
14411464
{
14421465
if (!thisObj)
@@ -1466,6 +1489,7 @@ static bool Cmd_SetPlayerProjectile_Execute(COMMAND_ARGS)
14661489
if (caster && mag->caster != caster) {
14671490
// mag->RemoveCaster(mag->caster);
14681491
mag->caster = caster;
1492+
ReduceMagicProjectileCounterFor(mag);
14691493
}
14701494
}
14711495
else
@@ -1924,8 +1948,13 @@ static bool SetProjectileValue(COMMAND_ARGS, UInt32 whichValue)
19241948
{
19251949
if (projType == kProjectileType_Arrow)
19261950
arrow->shooter = actor;
1927-
else
1928-
data->caster = (MagicCaster*)Oblivion_DynamicCast(actor, 0, RTTI_Actor, RTTI_MagicCaster, 0);
1951+
else {
1952+
MagicCaster* newCaster = (MagicCaster*)Oblivion_DynamicCast(actor, 0, RTTI_Actor, RTTI_MagicCaster, 0);
1953+
if (data->caster != newCaster) {
1954+
data->caster = newCaster;
1955+
if (newCaster == &(*g_thePlayer)->magicCaster) ReduceMagicProjectileCounterFor(data);
1956+
}
1957+
}
19291958
}
19301959
break;
19311960
}

0 commit comments

Comments
 (0)