aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorXTZGZoReX <none@none>2010-08-06 19:23:43 +0200
committerXTZGZoReX <none@none>2010-08-06 19:23:43 +0200
commit946adf469c14deeaf202cba5378fb5edfd792bd6 (patch)
treece27f0aaa34c6cd06fbdf234ec31ff6abc9ce80c /src/server/game/Entities
parent2562a4651f94e2dc40ccce108a2497c2c26bfff6 (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.cpp2
-rw-r--r--src/server/game/Entities/DynamicObject/DynamicObject.cpp3
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp4
-rw-r--r--src/server/game/Entities/Item/Item.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.cpp5
-rw-r--r--src/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/game/Entities/Transport/Transport.cpp16
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp2
-rw-r--r--src/server/game/Entities/Vehicle/Vehicle.cpp20
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)