diff options
| author | XTZGZoReX <none@none> | 2010-08-06 19:23:43 +0200 |
|---|---|---|
| committer | XTZGZoReX <none@none> | 2010-08-06 19:23:43 +0200 |
| commit | 946adf469c14deeaf202cba5378fb5edfd792bd6 (patch) | |
| tree | ce27f0aaa34c6cd06fbdf234ec31ff6abc9ce80c /src/server/game/Entities | |
| parent | 2562a4651f94e2dc40ccce108a2497c2c26bfff6 (diff) | |
*** New core <-> script library interface - complete rewrite of the old one.
* Removed the misdesigned on_events script/hooks.
* Lots of related cleanups and assertions.
* The interface is now fully object-oriented.
** Scripts no longer use function pointers.
** Scripts no longer use the general-purpose Script struct for everything.
** Script types are split into separate classes which must be inherited depending on what functionality is desired.
* Several script types have been added to allow extending functionality in a code-only manner (some script types require
assignment in the recently added ScriptName columns in the database, though).
** SpellHandlerScript: Wrapper around spell scripts (returns new SpellScript objects (`spell_script_names`.`ScriptName`)).
** ServerScript: Allows scripting events that occur in the network layer.
** WorldScript: Allows scripting certain world-global events.
** FormulaScript: Allows hooking and interfering with core formulas.
** *MapScript: Allows hooking different map types (including world, instance, and battleground maps (`instance_template`.`ScriptName`)).
** ItemScript: Allows scripting of items (like the old interface (`item_template`.`ScriptName`)).
** CreatureScript: Allows scripting of creatures/AI (like the old interface (`creature_template`.`ScriptName`)).
** GameObjectScript: Allows scripting of gameobjects (like the old interface (`gameobject_template`.`ScriptName`)).
** AreaTriggerScript: Allows scripting triggered area triggers (like the old interface (`areatrigger_scripts`.`ScriptName`)).
** OutdoorPvPScript: Script which should return OutdoorPvP objects for use by OutdoorPvPMgr (`outdoorpvp_template`.`ScriptName`).
** CommandScript: Allows extending the in-core command table.
** WeatherScript: Allows scripting of weather changes (`game_weather`.`ScriptName`).
** AuctionHouseScript: Allows scripting of auction events.
** ConditionScript: Allows scripting of conditions (`conditions`.`ScriptName`).
** DynamicObjectScript: Allows scripting of dynamicobjects.
** TransportScript: Allows scripting of transport events (`transports`.`ScriptName`).
* OutdoorPvP objects are now created through scripts. This effectively means that they'll need to be moved to scripts
before the they're functional again.
* The whole idea with this new interface is to allow expanding core functionality without touching core code. If further
hooks are needed to expand functionality of the core, let us know; we'll add them, if we agree that it is appropriate
to do so.
*** NOTE: The scripts project will _not_ build before it has been adapted to the new interface.
*** Thanks to everyone who helped out with related preparations and suggestions!
--HG--
branch : trunk
Diffstat (limited to 'src/server/game/Entities')
| -rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/DynamicObject/DynamicObject.cpp | 3 | ||||
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Entities/Item/Item.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 5 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 | ||||
| -rw-r--r-- | src/server/game/Entities/Transport/Transport.cpp | 16 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Vehicle/Vehicle.cpp | 20 |
9 files changed, 37 insertions, 18 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 57802f058c4..0d0542b37aa 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -588,6 +588,8 @@ void Creature::Update(uint32 diff) default: break; } + + sScriptMgr.OnCreatureUpdate(this, diff); } void Creature::RegenerateMana() diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp index 529710eda90..f83b3e5ecc7 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp +++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp @@ -27,6 +27,7 @@ #include "GridNotifiers.h" #include "CellImpl.h" #include "GridNotifiersImpl.h" +#include "ScriptMgr.h" DynamicObject::DynamicObject() : WorldObject() { @@ -143,6 +144,8 @@ void DynamicObject::Update(uint32 p_time) caster->RemoveDynObjectWithGUID(GetGUID()); Delete(); } + else + sScriptMgr.OnDynamicObjectUpdate(this, p_time); } void DynamicObject::Delete() diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 026dd8b1a32..32f26a3dc52 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -526,6 +526,8 @@ void GameObject::Update(uint32 diff) break; } } + + sScriptMgr.OnGameObjectUpdate(this, diff); } void GameObject::Refresh() @@ -1602,7 +1604,7 @@ void GameObject::TakenDamage(uint32 damage, Unit *who) if (BattleGround* bg = pwho->GetBattleGround()) bg->DestroyGate(pwho, this, m_goInfo->building.destroyedEvent); hitType = BG_OBJECT_DMG_HIT_TYPE_JUST_DESTROYED; - sScriptMgr.GODestroyed(pwho, this, m_goInfo->building.destroyedEvent); + sScriptMgr.OnGameObjectDestroyed(pwho, this, m_goInfo->building.destroyedEvent); } if (pwho) if (BattleGround* bg = pwho->GetBattleGround()) diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 6efc320d3d2..2b4e751b80a 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -292,7 +292,7 @@ void Item::UpdateDuration(Player* owner, uint32 diff) if (GetUInt32Value(ITEM_FIELD_DURATION) <= diff) { - sScriptMgr.ItemExpire(owner, GetProto()); + sScriptMgr.OnItemExpire(owner, GetProto()); owner->DestroyItem(GetBagSlot(), GetSlot(), true); return; } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index d4e7196a16e..7abb307bd33 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2642,7 +2642,7 @@ void Player::GiveXP(uint32 xp, Unit* victim) level = getLevel(); nextLvlXP = GetUInt32Value(PLAYER_NEXT_LEVEL_XP); } - newXP = GetSession()->HandleOnGetXP(newXP); + SetUInt32Value(PLAYER_XP, newXP); } @@ -6363,10 +6363,7 @@ void Player::CheckAreaExploreAndOutdoor() if (!m_AreaID) m_AreaID = GetAreaId(); if (m_AreaID != GetAreaId()) - { m_AreaID = GetAreaId(); - GetSession()->HandleOnAreaChange(GetAreaEntryByAreaID(m_AreaID)); - } bool isOutdoor; uint16 areaFlag = GetBaseMap()->GetAreaFlag(GetPositionX(),GetPositionY(),GetPositionZ(), &isOutdoor); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 2d6690bd817..e8dd8f8fc0c 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1443,7 +1443,6 @@ class Player : public Unit, public GridObject<Player> uint32 GetMoney() { return GetUInt32Value (PLAYER_FIELD_COINAGE); } void ModifyMoney(int32 d) { - d = GetSession()->HandleOnGetMoney(d); if (d < 0) SetMoney (GetMoney() > uint32(-d) ? GetMoney() + d : 0); else diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index d4bccbc2979..5e5eecea068 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -19,16 +19,14 @@ */ #include "Common.h" - #include "Transport.h" #include "MapManager.h" #include "ObjectMgr.h" #include "Path.h" - +#include "ScriptMgr.h" #include "WorldPacket.h" #include "DBCStores.h" #include "ProgressBar.h" - #include "World.h" void MapManager::LoadTransports() @@ -115,7 +113,8 @@ void MapManager::LoadTransports() } ++count; - } while (result->NextRow()); + } + while (result->NextRow()); sLog.outString(); sLog.outString(">> Loaded %u transports", count); @@ -529,6 +528,8 @@ bool Transport::AddPassenger(Player* passenger) { if (m_passengers.insert(passenger).second) sLog.outDetail("Player %s boarded transport %s.", passenger->GetName(), GetName()); + + sScriptMgr.OnAddPassenger(this, passenger); return true; } @@ -536,10 +537,12 @@ bool Transport::RemovePassenger(Player* passenger) { if (m_passengers.erase(passenger)) sLog.outDetail("Player %s removed from transport %s.", passenger->GetName(), GetName()); + + sScriptMgr.OnRemovePassenger(this, passenger); return true; } -void Transport::Update(uint32 /*p_time*/) +void Transport::Update(uint32 p_diff) { if (m_WayPoints.size() <= 1) return; @@ -572,6 +575,8 @@ void Transport::Update(uint32 /*p_time*/) if ((sLog.getLogFilter() & LOG_FILTER_TRANSPORT_MOVES) == 0) sLog.outDetail("%s moved to %d %f %f %f %d", this->m_name.c_str(), m_curr->second.id, m_curr->second.x, m_curr->second.y, m_curr->second.z, m_curr->second.mapid); + + sScriptMgr.OnTransportUpdate(this, p_diff); } } @@ -676,6 +681,7 @@ uint32 Transport::AddNPCPassenger(uint32 tguid, uint32 entry, float x, float y, currenttguid = std::max(tguid,currenttguid); pCreature->SetGUIDTransport(tguid); + sScriptMgr.OnAddCreaturePassenger(this, pCreature); return tguid; } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f361d1ba95a..002f456bb77 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -724,13 +724,11 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa { Player *killer = this->ToPlayer(); Player *killed = pVictim->ToPlayer(); - killer->GetSession()->HandleOnPVPKill(killed); } if (pVictim->GetTypeId() == TYPEID_UNIT && this->GetTypeId() == TYPEID_PLAYER) { Player *killer = this->ToPlayer(); Creature *pCreature = (pVictim->ToCreature()); - killer->GetSession()->HandleOnCreatureKill(pCreature); } } else // if (health <= damage) diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 818cbd67904..e92e488de3d 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -23,7 +23,7 @@ #include "Unit.h" #include "Util.h" #include "WorldPacket.h" - +#include "ScriptMgr.h" #include "CreatureAI.h" #include "ZoneScript.h" @@ -108,6 +108,8 @@ void Vehicle::Install() } Reset(); + + sScriptMgr.OnInstall(this); } void Vehicle::InstallAllAccessories() @@ -127,7 +129,10 @@ void Vehicle::Uninstall() if (Unit *passenger = itr->second.passenger) if (passenger->HasUnitTypeMask(UNIT_MASK_ACCESSORY)) passenger->ToTempSummon()->UnSummon(); + RemoveAllPassengers(); + + sScriptMgr.OnUninstall(this); } void Vehicle::Die() @@ -137,7 +142,10 @@ void Vehicle::Die() if (Unit *passenger = itr->second.passenger) if (passenger->HasUnitTypeMask(UNIT_MASK_ACCESSORY)) passenger->setDeathState(JUST_DIED); + RemoveAllPassengers(); + + sScriptMgr.OnDie(this); } void Vehicle::Reset() @@ -154,6 +162,8 @@ void Vehicle::Reset() if (m_usableSeatNum) me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); } + + sScriptMgr.OnReset(this); } void Vehicle::RemoveAllPassengers() @@ -237,6 +247,8 @@ void Vehicle::InstallAccessory(uint32 entry, int8 seatId, bool minion) accessory->EnterVehicle(this, seatId); // This is not good, we have to send update twice accessory->SendMovementFlagUpdate(); + + sScriptMgr.OnInstallAccessory(this, accessory); } } @@ -317,9 +329,7 @@ bool Vehicle::AddPassenger(Unit *unit, int8 seatId) } } - //if (unit->GetTypeId() == TYPEID_PLAYER) - // unit->ToPlayer()->SendTeleportAckPacket(); - //unit->SendMovementFlagUpdate(); + sScriptMgr.OnAddPassenger(this, unit, seatId); return true; } @@ -366,6 +376,8 @@ void Vehicle::RemovePassenger(Unit *unit) // only for flyable vehicles if (unit->HasUnitMovementFlag(MOVEMENTFLAG_FLYING)) me->CastSpell(unit, 45472, true); // Parachute + + sScriptMgr.OnRemovePassenger(this, unit); } void Vehicle::RelocatePassengers(float x, float y, float z, float ang) |
