mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Vehicles: Set proper power type using PowerDisplay.dbc
Original commit by Xfurry - cmangos/mangos-wotlk/bef8c99cc07c96d4e2f45e0ff6bc107068555ffb
This commit is contained in:
@@ -139,6 +139,7 @@ DBCStorage <MovieEntry> sMovieStore(MovieEntryfmt);
|
||||
|
||||
DBCStorage <OverrideSpellDataEntry> sOverrideSpellDataStore(OverrideSpellDatafmt);
|
||||
|
||||
DBCStorage <PowerDisplayEntry> sPowerDisplayStore(PowerDisplayfmt);
|
||||
DBCStorage <PvPDifficultyEntry> sPvPDifficultyStore(PvPDifficultyfmt);
|
||||
|
||||
DBCStorage <QuestSortEntry> sQuestSortStore(QuestSortEntryfmt);
|
||||
@@ -391,6 +392,7 @@ void LoadDBCStores(const std::string& dataPath)
|
||||
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sOverrideSpellDataStore, dbcPath, "OverrideSpellData.dbc");
|
||||
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sPowerDisplayStore, dbcPath, "PowerDisplay.dbc");
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sPvPDifficultyStore, dbcPath, "PvpDifficulty.dbc");
|
||||
for (uint32 i = 0; i < sPvPDifficultyStore.GetNumRows(); ++i)
|
||||
if (PvPDifficultyEntry const* entry = sPvPDifficultyStore.LookupEntry(i))
|
||||
|
||||
@@ -141,6 +141,7 @@ extern DBCStorage <MapEntry> sMapStore;
|
||||
extern MapDifficultyMap sMapDifficultyMap;
|
||||
extern DBCStorage <MovieEntry> sMovieStore;
|
||||
extern DBCStorage <OverrideSpellDataEntry> sOverrideSpellDataStore;
|
||||
extern DBCStorage <PowerDisplayEntry> sPowerDisplayStore;
|
||||
extern DBCStorage <QuestSortEntry> sQuestSortStore;
|
||||
extern DBCStorage <QuestXPEntry> sQuestXPStore;
|
||||
extern DBCStorage <QuestFactionRewEntry> sQuestFactionRewardStore;
|
||||
|
||||
@@ -1398,6 +1398,16 @@ struct OverrideSpellDataEntry
|
||||
//uint32 unk0; // 11
|
||||
};
|
||||
|
||||
struct PowerDisplayEntry
|
||||
{
|
||||
uint32 Id; // 0
|
||||
uint32 PowerType; // 1
|
||||
//char* Name; // 2
|
||||
//uint32 R; // 3
|
||||
//uint32 G; // 4
|
||||
//uint32 B; // 5
|
||||
};
|
||||
|
||||
struct PvPDifficultyEntry
|
||||
{
|
||||
//uint32 id; // 0 m_ID
|
||||
@@ -1982,7 +1992,7 @@ struct VehicleEntry
|
||||
uint32 m_uiLocomotionType; // 34
|
||||
float m_msslTrgtImpactTexRadius; // 35
|
||||
uint32 m_uiSeatIndicatorType; // 36
|
||||
uint32 m_powerType; // 37, new in 3.1
|
||||
uint32 m_powerDisplayId; // 37, new in 3.1
|
||||
// 38, new in 3.1
|
||||
// 39, new in 3.1
|
||||
};
|
||||
|
||||
@@ -91,6 +91,7 @@ char const OverrideSpellDatafmt[] = "niiiiiiiiiix";
|
||||
char const QuestFactionRewardfmt[] = "niiiiiiiiii";
|
||||
char const QuestSortEntryfmt[] = "nxxxxxxxxxxxxxxxxx";
|
||||
char const QuestXPfmt[] = "niiiiiiiiii";
|
||||
char const PowerDisplayfmt[] = "nixxxx";
|
||||
char const PvPDifficultyfmt[] = "diiiii";
|
||||
char const RandomPropertiesPointsfmt[] = "niiiiiiiiiiiiiii";
|
||||
char const ScalingStatDistributionfmt[] = "niiiiiiiiiiiiiiiiiiiii";
|
||||
|
||||
@@ -569,7 +569,7 @@ void Creature::Update(uint32 diff)
|
||||
|
||||
if (getPowerType() == POWER_ENERGY)
|
||||
{
|
||||
if (!IsVehicle() || GetVehicleKit()->GetVehicleInfo()->m_powerType != POWER_PYRITE)
|
||||
if (!IsVehicle() || GetVehicleKit()->GetVehicleInfo()->m_powerDisplayId != POWER_PYRITE)
|
||||
Regenerate(POWER_ENERGY);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -76,42 +76,9 @@ Vehicle::~Vehicle()
|
||||
|
||||
void Vehicle::Install()
|
||||
{
|
||||
if (Creature* creature = _me->ToCreature())
|
||||
{
|
||||
switch (_vehicleInfo->m_powerType)
|
||||
{
|
||||
case POWER_STEAM:
|
||||
case POWER_HEAT:
|
||||
case POWER_BLOOD:
|
||||
case POWER_OOZE:
|
||||
case POWER_WRATH:
|
||||
_me->setPowerType(POWER_ENERGY);
|
||||
_me->SetMaxPower(POWER_ENERGY, 100);
|
||||
break;
|
||||
case POWER_PYRITE:
|
||||
_me->setPowerType(POWER_ENERGY);
|
||||
_me->SetMaxPower(POWER_ENERGY, 50);
|
||||
break;
|
||||
default:
|
||||
for (uint32 i = 0; i < MAX_SPELL_VEHICLE; ++i)
|
||||
{
|
||||
if (!creature->m_spells[i])
|
||||
continue;
|
||||
|
||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(creature->m_spells[i]);
|
||||
if (!spellInfo)
|
||||
continue;
|
||||
|
||||
if (spellInfo->PowerType == POWER_ENERGY && spellInfo->CalcPowerCost(_me, spellInfo->GetSchoolMask()) > 0)
|
||||
{
|
||||
_me->setPowerType(POWER_ENERGY);
|
||||
_me->SetMaxPower(POWER_ENERGY, 100);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (_me->GetTypeId() == TYPEID_UNIT)
|
||||
if (PowerDisplayEntry const* powerDisplay = sPowerDisplayStore.LookupEntry(_vehicleInfo->m_powerDisplayId))
|
||||
_me->setPowerType(Powers(powerDisplay->PowerType));
|
||||
|
||||
_status = STATUS_INSTALLED;
|
||||
if (GetBase()->GetTypeId() == TYPEID_UNIT)
|
||||
|
||||
Reference in New Issue
Block a user