@@ -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+
14401463static 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