aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSarjuuk <Sarjuuk@trinitycore.contrib>2011-06-27 14:20:20 +0200
committerMachiavelli <machiavelli.trinity@gmail.com>2011-06-27 14:23:58 +0200
commit249692b54b61a7260673c8c1f50ab6630af9615a (patch)
treebca2151575a7fd18f4eafad791c620717bef8a70 /src
parent8fd3c912c1a297bc32c7df8e7117e8e589777f64 (diff)
Core/Vehicles: Remove vehicle stat scaling hack and implement it properly trough the spell system. NOTE: This does need some further research on coefficients for different vehicles.
Signed-off-by: Machiavelli <machiavelli.trinity@gmail.com>
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Entities/Vehicle/Vehicle.cpp15
-rwxr-xr-xsrc/server/game/Entities/Vehicle/Vehicle.h8
-rwxr-xr-xsrc/server/game/Globals/ObjectMgr.cpp42
-rwxr-xr-xsrc/server/game/Globals/ObjectMgr.h10
-rwxr-xr-xsrc/server/game/World/World.cpp3
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp53
6 files changed, 53 insertions, 78 deletions
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp
index 05da6f15c12..52a625e872d 100755
--- a/src/server/game/Entities/Vehicle/Vehicle.cpp
+++ b/src/server/game/Entities/Vehicle/Vehicle.cpp
@@ -361,21 +361,6 @@ bool Vehicle::AddPassenger(Unit* unit, int8 seatId)
{
if (!me->SetCharmedBy(unit, CHARM_TYPE_VEHICLE))
ASSERT(false);
-
- // hack: should be done by aura system
- if (VehicleScalingInfo const* scalingInfo = sObjectMgr->GetVehicleScalingInfo(m_vehicleInfo->m_ID))
- {
- Player* player = unit->ToPlayer();
- float averageItemLevel = player->GetAverageItemLevel();
- if (averageItemLevel < scalingInfo->baseItemLevel)
- averageItemLevel = scalingInfo->baseItemLevel;
- averageItemLevel -= scalingInfo->baseItemLevel;
-
- float currentHealthPct = float(me->GetHealth() / me->GetMaxHealth());
- m_bonusHP = uint32(me->GetMaxHealth() * (averageItemLevel * scalingInfo->scalingFactor));
- me->SetMaxHealth(me->GetMaxHealth() + m_bonusHP);
- me->SetHealth(uint32((me->GetHealth() + m_bonusHP) * currentHealthPct));
- }
}
if (me->IsInWorld())
diff --git a/src/server/game/Entities/Vehicle/Vehicle.h b/src/server/game/Entities/Vehicle/Vehicle.h
index 06b009ddc4d..5158d5d29b4 100755
--- a/src/server/game/Entities/Vehicle/Vehicle.h
+++ b/src/server/game/Entities/Vehicle/Vehicle.h
@@ -95,16 +95,8 @@ struct VehicleAccessory
uint32 SummonTime;
};
-struct VehicleScalingInfo
-{
- uint32 ID;
- float baseItemLevel;
- float scalingFactor;
-};
-
typedef std::vector<VehicleAccessory> VehicleAccessoryList;
typedef std::map<uint32, VehicleAccessoryList> VehicleAccessoryMap;
-typedef std::map<uint32, VehicleScalingInfo> VehicleScalingMap;
typedef std::map<int8, VehicleSeat> SeatMap;
class Vehicle
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 2640af253d4..80fdc3060f4 100755
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -2935,48 +2935,6 @@ void ObjectMgr::LoadVehicleAccessories()
sLog->outString();
}
-void ObjectMgr::LoadVehicleScaling()
-{
- uint32 oldMSTime = getMSTime();
-
- m_VehicleScalingMap.clear(); // needed for reload case
-
- uint32 count = 0;
-
- QueryResult result = WorldDatabase.Query("SELECT `entry`, `baseItemLevel`, `scalingFactor` FROM `vehicle_scaling_info`");
-
- if (!result)
- {
- sLog->outString(">> Loaded 0 vehicle scaling entries. DB table `vehicle_scaling_info` is empty.");
- sLog->outString();
- return;
- }
-
- do
- {
- Field *fields = result->Fetch();
-
- uint32 vehicleEntry = fields[0].GetUInt32();
- float baseItemLevel = fields[1].GetFloat();
- float scalingFactor = fields[2].GetFloat();
-
- if (!sVehicleStore.LookupEntry(vehicleEntry))
- {
- sLog->outErrorDb("Table `vehicle_scaling_info`: vehicle entry %u does not exist.", vehicleEntry);
- continue;
- }
-
- m_VehicleScalingMap[vehicleEntry].ID = vehicleEntry;
- m_VehicleScalingMap[vehicleEntry].baseItemLevel = baseItemLevel;
- m_VehicleScalingMap[vehicleEntry].scalingFactor = scalingFactor;
-
- ++count;
- } while (result->NextRow());
-
- sLog->outString(">> Loaded %u vehicle scaling entries in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
- sLog->outString();
-}
-
void ObjectMgr::LoadPetLevelInfo()
{
uint32 oldMSTime = getMSTime();
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index f7468f19755..e309809ef22 100755
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -791,14 +791,6 @@ class ObjectMgr
return NULL;
}
- VehicleScalingInfo const* GetVehicleScalingInfo(uint32 vehicleEntry) const
- {
- VehicleScalingMap::const_iterator itr = m_VehicleScalingMap.find(vehicleEntry);
- if (itr != m_VehicleScalingMap.end())
- return &itr->second;
- return NULL;
- }
-
DungeonEncounterList const* GetDungeonEncounterList(uint32 mapId, Difficulty difficulty)
{
UNORDERED_MAP<uint32, DungeonEncounterList>::const_iterator itr = mDungeonEncounters.find(MAKE_PAIR32(mapId, difficulty));
@@ -896,7 +888,6 @@ class ObjectMgr
void LoadMailLevelRewards();
void LoadVehicleTemplateAccessories();
void LoadVehicleAccessories();
- void LoadVehicleScaling();
void LoadGossipText();
@@ -1280,7 +1271,6 @@ class ObjectMgr
VehicleAccessoryMap m_VehicleTemplateAccessoryMap;
VehicleAccessoryMap m_VehicleAccessoryMap;
- VehicleScalingMap m_VehicleScalingMap;
typedef std::vector<LocaleConstant> LocalForIndex;
LocalForIndex m_LocalForIndex;
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 976e8ba660e..15cc7c9abaf 100755
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1349,9 +1349,6 @@ void World::SetInitialWorldSettings()
sLog->outString("Loading Creature template addons...");
sObjectMgr->LoadCreatureTemplateAddons();
- sLog->outString("Loading Vehicle scaling information...");
- sObjectMgr->LoadVehicleScaling();
-
sLog->outString("Loading Reputation Reward Rates...");
sObjectMgr->LoadReputationRewardRate();
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index e7b6b146197..75102b9f856 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -1213,6 +1213,58 @@ class spell_gen_launch : public SpellScriptLoader
}
};
+class spell_gen_vehicle_scaling : public SpellScriptLoader
+{
+ public:
+ spell_gen_vehicle_scaling() : SpellScriptLoader("spell_gen_vehicle_scaling") { }
+
+ class spell_gen_vehicle_scaling_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_gen_vehicle_scaling_AuraScript);
+
+ void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
+ {
+ Unit* caster = GetCaster();
+ if (!caster || !caster->ToPlayer())
+ return;
+
+ float factor;
+ uint16 baseItemLevel;
+
+ // TODO: Reserach coeffs for different vehicles
+ switch (GetId())
+ {
+ case 66668:
+ factor = 0.01;
+ baseItemLevel = 205;
+ break;
+ default:
+ factor = 0.01f;
+ baseItemLevel = 170;
+ break;
+ }
+
+ float avgILvl = caster->ToPlayer()->GetAverageItemLevel();
+ if (avgILvl < baseItemLevel)
+ return;
+
+ amount = 100 - uint16(100.0f * avgILvl / baseItemLevel);
+ }
+
+ void Register()
+ {
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_vehicle_scaling_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_HEALING_PCT);
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_vehicle_scaling_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_vehicle_scaling_AuraScript::CalculateAmount, EFFECT_2, SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT);
+ }
+ };
+
+ AuraScript* GetAuraScript() const
+ {
+ return new spell_gen_vehicle_scaling_AuraScript();
+ }
+};
+
void AddSC_generic_spell_scripts()
{
new spell_gen_absorb0_hitlimit1();
@@ -1241,4 +1293,5 @@ void AddSC_generic_spell_scripts()
new spell_gen_magic_rooster();
new spell_gen_allow_cast_from_item_only();
new spell_gen_launch();
+ new spell_gen_vehicle_scaling();
}