aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent_Michael <Vincent_Michael@gmx.de>2012-12-31 15:26:57 +0100
committerVincent_Michael <Vincent_Michael@gmx.de>2012-12-31 15:26:57 +0100
commit6317878b6f76fc1b9431520ee6f8cce8d487bd8c (patch)
treedafc4ad48d7327ac816714151751bca50549de5c
parent871f8c800392cdf8739a6bd4808c532ba88e85ea (diff)
parentedb90f957baa9d9bb83f4477954593117e9fa858 (diff)
Merge branch 'master' of github.com:TrinityCore/TrinityCore into mmaps
-rw-r--r--cmake/compiler/msvc/settings.cmake12
-rw-r--r--sql/updates/world/2012_12_31_00_world_sai.sql23
-rw-r--r--sql/updates/world/2012_12_31_01_world_sai.sql13
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp2
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp26
-rw-r--r--src/server/game/Conditions/ConditionMgr.h9
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp8
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp6
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp12
-rw-r--r--src/server/scripts/Outland/hellfire_peninsula.cpp21
10 files changed, 89 insertions, 43 deletions
diff --git a/cmake/compiler/msvc/settings.cmake b/cmake/compiler/msvc/settings.cmake
index 0aa5d93a4b3..d758d466407 100644
--- a/cmake/compiler/msvc/settings.cmake
+++ b/cmake/compiler/msvc/settings.cmake
@@ -51,6 +51,12 @@ if(NOT WITH_WARNINGS)
endif()
endif()
-# Specify Precompiled Header Memory Allocation Limit
-# (Fix a compiler-problem when using PCH - the /Ym flag is adjusted by the compiler in MSVC2012, hence we need to set an upper limit to avoid disrupancies)
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zm500")
+# Specify the maximum PreCompiled Header memory allocation limit
+# Fixes a compiler-problem when using PCH - the /Ym flag is adjusted by the compiler in MSVC2012, hence we need to set an upper limit with /Zm to avoid disrupancies)
+# (And yes, this is a verified , unresolved bug with MSVC... *sigh*)
+string(REPLACE "/Zm1000" "/Zm500" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
+
+# Enable and treat as errors the following warnings to easily detect virtual function signature failures:
+# 'function' : member function does not override any base class virtual member function
+# 'virtual_function' : no override available for virtual member function from base 'class'; function is hidden
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /we4263 /we4264")
diff --git a/sql/updates/world/2012_12_31_00_world_sai.sql b/sql/updates/world/2012_12_31_00_world_sai.sql
new file mode 100644
index 00000000000..9e30c29f784
--- /dev/null
+++ b/sql/updates/world/2012_12_31_00_world_sai.sql
@@ -0,0 +1,23 @@
+-- Myralion Sunblaze
+DELETE FROM `smart_scripts` WHERE `entryorguid`=36642 AND `source_type`=0;
+INSERT INTO `smart_scripts`(`entryorguid`,`id`,`link`,`event_type`,`event_param1`,`action_type`,`action_param1`,`action_param2`,`target_type`,`comment`) VALUES
+(36642,0,1,20,24558,83,2,0,1,'Myralion Sunblaze - Remove gossip and quest giver flag on quest complete'),
+(36642,1,0,61,0,53,0,36642,1,'Myralion Sunblaze - Start WP on quest complete'),
+(36642,2,3,40,1,54,10000,0,1,'Myralion Sunblaze - Stop WP on point reached'), -- SMART_ACTION_WP_STOP would break the following SMART_EVENT_WAYPOINT_REACHED.
+(36642,3,0,61,0,80,3664200,0,1,'Myralion Sunblaze - Start timed event on point reached'),
+(36642,4,0,38,50,43,0,28889,1,'Myralion Sunblaze - Mount on data set'),
+(36642,5,6,40,2,1,3,0,1,'Myralion Sunblaze - Say 3 event on home reached'),
+(36642,6,7,61,0,66,0,0,1,'Myralion Sunblaze - restore orientation event on home reached'),
+(36642,7,0,61,0,81,2,0,1,'Myralion Sunblaze - restore npc flags event on home reached');
+
+-- Caladis Brightspear
+DELETE FROM `smart_scripts` WHERE `entryorguid`=36624 AND `source_type`=0;
+INSERT INTO `smart_scripts`(`entryorguid`,`id`,`link`,`event_type`,`event_param1`,`action_type`,`action_param1`,`action_param2`,`target_type`,`comment`) VALUES
+(36624,0,1,20,24454,83,2,0,1,'Caladis Brightspear - Remove gossip and quest giver flag on quest complete'),
+(36624,1,0,61,0,53,0,36624,1,'Caladis Brightspear - Start WP on quest complete'),
+(36624,2,3,40,1,54,10000,0,1,'Caladis Brightspear - Stop WP on point reached'), -- SMART_ACTION_WP_STOP would break the following SMART_EVENT_WAYPOINT_REACHED.
+(36624,3,0,61,0,80,3662400,0,1,'Caladis Brightspear - Start timed event on point reached'),
+(36624,4,0,38,50,43,0,28888,1,'Caladis Brightspear - Mount on data set'),
+(36624,5,6,40,2,1,3,0,1,'Caladis Brightspear - Say 3 event on home reached'),
+(36624,6,7,61,0,66,0,0,1,'Caladis Brightspear - restore orientation event on home reached'),
+(36624,7,0,61,0,81,2,0,1,'Caladis Brightspear - restore npc flags event on home reached');
diff --git a/sql/updates/world/2012_12_31_01_world_sai.sql b/sql/updates/world/2012_12_31_01_world_sai.sql
new file mode 100644
index 00000000000..96cf4d1e724
--- /dev/null
+++ b/sql/updates/world/2012_12_31_01_world_sai.sql
@@ -0,0 +1,13 @@
+-- Assign SmartGameObjectAI
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI',`ScriptName`='' WHERE `entry`=181606;
+
+-- SmartGameObjectAI for summoning Aeranas at Haaleshi Altar
+DELETE FROM `smart_scripts` WHERE `entryorguid`=181606 AND `source_type`=1;
+INSERT INTO `smart_scripts`(`entryorguid`,`source_type`,`id`,`event_type`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`target_type`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(181606,1,0,64,12,17085,4,60000,8,-1321.79,4043.8,116.24,1.25,'Haaleshi Altar - On gossip hello - Summon Aeranas');
+
+-- Aeranas should only be summonened if there is not already one in range
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=181606 AND `SourceId`=1;
+INSERT INTO `conditions`(`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`NegativeCondition`,`Comment`) VALUES
+(22,1,181606,1,29,1,17085,50,1,'Haaleshi Altar - Only summon Aeranas if there is not already one in range'),
+(22,1,181606,1,28,0,9418,0,0,'Haaleshi Altar - Only summon Aeranas if invoker has completed quest Avruus Orb (Is auto-completed)');
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index 4e2c51e50c8..32c480d7c3c 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -882,7 +882,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_RESET_SCRIPT_BASE_OBJECT:
case SMART_ACTION_ACTIVATE_GOBJECT:
case SMART_ACTION_CALL_SCRIPT_RESET:
- case SMART_ACTION_NONE:
+ case SMART_ACTION_SET_RANGED_MOVEMENT:
case SMART_ACTION_CALL_TIMED_ACTIONLIST:
case SMART_ACTION_SET_NPC_FLAG:
case SMART_ACTION_ADD_NPC_FLAG:
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index 37835618183..f66783fb89a 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -154,11 +154,27 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
case CONDITION_ACTIVE_EVENT:
condMeets = sGameEventMgr->IsActiveEvent(ConditionValue1);
break;
- case CONDITION_INSTANCE_DATA:
+ case CONDITION_INSTANCE_INFO:
{
Map* map = object->GetMap();
- if (map && map->IsDungeon() && ((InstanceMap*)map)->GetInstanceScript())
- condMeets = ((InstanceMap*)map)->GetInstanceScript()->GetData(ConditionValue1) == ConditionValue2;
+ if (map && map->IsDungeon())
+ {
+ if (InstanceScript const* instance = ((InstanceMap*)map)->GetInstanceScript())
+ {
+ switch (ConditionValue3)
+ {
+ case INSTANCE_INFO_DATA:
+ condMeets = instance->GetData(ConditionValue1) == ConditionValue2;
+ break;
+ case INSTANCE_INFO_DATA64:
+ condMeets = instance->GetData64(ConditionValue1) == ConditionValue2;
+ break;
+ case INSTANCE_INFO_BOSS_STATE:
+ condMeets = instance->GetBossState(ConditionValue1) == ConditionValue2;
+ break;
+ }
+ }
+ }
break;
}
case CONDITION_MAPID:
@@ -367,7 +383,7 @@ uint32 Condition::GetSearcherTypeMaskForCondition()
case CONDITION_ACTIVE_EVENT:
mask |= GRID_MAP_TYPE_MASK_ALL;
break;
- case CONDITION_INSTANCE_DATA:
+ case CONDITION_INSTANCE_INFO:
mask |= GRID_MAP_TYPE_MASK_ALL;
break;
case CONDITION_MAPID:
@@ -1899,7 +1915,7 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
break;
}
case CONDITION_AREAID:
- case CONDITION_INSTANCE_DATA:
+ case CONDITION_INSTANCE_INFO:
break;
case CONDITION_WORLD_STATE:
{
diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h
index 807b75c4ee6..520e786a66a 100644
--- a/src/server/game/Conditions/ConditionMgr.h
+++ b/src/server/game/Conditions/ConditionMgr.h
@@ -46,7 +46,7 @@ enum ConditionTypes
CONDITION_DRUNKENSTATE = 10, // DrunkenState 0, 0 true if player is drunk enough
CONDITION_WORLD_STATE = 11, // index value 0 true if world has the value for the index
CONDITION_ACTIVE_EVENT = 12, // event_id 0 0 true if event is active
- CONDITION_INSTANCE_DATA = 13, // entry data 0 true if data is set in current instance
+ CONDITION_INSTANCE_INFO = 13, // entry data type true if the instance info defined by type (enum InstanceInfo) equals data.
CONDITION_QUEST_NONE = 14, // quest_id 0 0 true if doesn't have quest saved
CONDITION_CLASS = 15, // class 0 0 true if player's class is equal to class
CONDITION_RACE = 16, // race 0 0 true if player's race is equal to race
@@ -152,6 +152,13 @@ enum RelationType
RELATION_MAX
};
+enum InstanceInfo
+{
+ INSTANCE_INFO_DATA = 0,
+ INSTANCE_INFO_DATA64,
+ INSTANCE_INFO_BOSS_STATE
+};
+
enum
{
MAX_CONDITION_TARGETS = 3
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 650d904db47..e069f5653c9 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -437,7 +437,7 @@ bool Creature::UpdateEntry(uint32 Entry, uint32 team, const CreatureData* data)
float ground = GetPositionZ();
GetMap()->GetWaterOrGroundLevel(GetPositionX(), GetPositionY(), GetPositionZ(), &ground);
- bool isInAir = G3D::fuzzyGt(GetPositionZ(), ground);
+ bool isInAir = G3D::fuzzyGt(GetPositionZ(), ground + 0.05f) || G3D::fuzzyLt(GetPositionZ(), ground - 0.05f); // Can be underground too, prevent the falling
if (cInfo->InhabitType & INHABIT_AIR && cInfo->InhabitType & INHABIT_GROUND && isInAir)
SetCanFly(true);
@@ -482,7 +482,7 @@ void Creature::Update(uint32 diff)
float ground = GetPositionZ();
GetMap()->GetWaterOrGroundLevel(GetPositionX(), GetPositionY(), GetPositionZ(), &ground);
- bool isInAir = G3D::fuzzyGt(GetPositionZ(), ground + 0.05f);
+ bool isInAir = G3D::fuzzyGt(GetPositionZ(), ground + 0.05f) || G3D::fuzzyLt(GetPositionZ(), ground - 0.05f); // Can be underground too, prevent the falling
CreatureTemplate const* cinfo = GetCreatureTemplate();
if (cinfo->InhabitType & INHABIT_AIR && cinfo->InhabitType & INHABIT_GROUND && isInAir)
@@ -908,7 +908,7 @@ bool Creature::isCanTrainingOf(Player* player, bool msg) const
if (msg)
{
player->PlayerTalkClass->ClearMenus();
- switch (GetCreatureTemplate()->trainer_class)
+ switch (GetCreatureTemplate()->trainer_race)
{
case RACE_DWARF: player->PlayerTalkClass->SendGossipMenu(5865, GetGUID()); break;
case RACE_GNOME: player->PlayerTalkClass->SendGossipMenu(4881, GetGUID()); break;
@@ -1574,7 +1574,7 @@ void Creature::setDeathState(DeathState s)
float ground = GetPositionZ();
GetMap()->GetWaterOrGroundLevel(GetPositionX(), GetPositionY(), GetPositionZ(), &ground);
- bool isInAir = G3D::fuzzyGt(GetPositionZ(), ground);
+ bool isInAir = G3D::fuzzyGt(GetPositionZ(), ground + 0.05f) || G3D::fuzzyLt(GetPositionZ(), ground - 0.05f); // Can be underground too, prevent the falling
if (cinfo->InhabitType & INHABIT_AIR && cinfo->InhabitType & INHABIT_GROUND && isInAir)
SetCanFly(true);
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 4148e3177fe..58a0a38933d 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -17064,7 +17064,7 @@ bool Unit::HandleSpellClick(Unit* clicker, int8 seatId)
}
if (IsInMap(caster))
- caster->CastCustomSpell(itr->second.spellId, SpellValueMod(SPELLVALUE_BASE_POINT0+i), seatId, target, GetVehicleKit() ? TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE : TRIGGERED_NONE, NULL, NULL, origCasterGUID);
+ caster->CastCustomSpell(itr->second.spellId, SpellValueMod(SPELLVALUE_BASE_POINT0+i), seatId + 1, target, GetVehicleKit() ? TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE : TRIGGERED_NONE, NULL, NULL, origCasterGUID);
else // This can happen during Player::_LoadAuras
{
int32 bp0 = seatId;
@@ -17094,7 +17094,7 @@ bool Unit::HandleSpellClick(Unit* clicker, int8 seatId)
void Unit::EnterVehicle(Unit* base, int8 seatId)
{
- CastCustomSpell(VEHICLE_SPELL_RIDE_HARDCODED, SPELLVALUE_BASE_POINT0, seatId, base, TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE);
+ CastCustomSpell(VEHICLE_SPELL_RIDE_HARDCODED, SPELLVALUE_BASE_POINT0, seatId + 1, base, TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE);
}
void Unit::_EnterVehicle(Vehicle* vehicle, int8 seatId, AuraApplication const* aurApp)
@@ -17344,7 +17344,7 @@ void Unit::SendTeleportPacket(Position& pos)
Relocate(&oldPos);
if (GetTypeId() == TYPEID_PLAYER)
Relocate(&pos);
- SendMessageToSet(&data2, true);
+ SendMessageToSet(&data2, false);
}
bool Unit::UpdatePosition(float x, float y, float z, float orientation, bool teleport)
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 131d84c7fc1..dba318610c5 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -454,11 +454,6 @@ int32 AuraEffect::CalculateAmount(Unit* caster)
// custom amount calculations go here
switch (GetAuraType())
{
- // Control vehicle auras should not get m_amount sum out of basepoints and DieSide calculated together,
- // but only from basepoints. Only such aura case fow now so handle it here.
- case SPELL_AURA_CONTROL_VEHICLE:
- m_amount = m_baseAmount;
- break;
// crowd control auras
case SPELL_AURA_MOD_CONFUSE:
case SPELL_AURA_MOD_FEAR:
@@ -3204,7 +3199,12 @@ void AuraEffect::HandleAuraControlVehicle(AuraApplication const* aurApp, uint8 m
if (apply)
{
- caster->_EnterVehicle(target->GetVehicleKit(), m_amount, aurApp);
+ // Currently spells that have base points 0 and DieSides 0 = "0/0" exception are pushed to -1,
+ // however the idea of 0/0 is to ingore flag VEHICLE_SEAT_FLAG_CAN_ENTER_OR_EXIT and -1 checks for it,
+ // so this break such spells or most of them.
+ // Current formula about m_amount: effect base points + dieside - 1
+ // TO DO: Reasearch more about 0/0 and fix it.
+ caster->_EnterVehicle(target->GetVehicleKit(), m_amount - 1, aurApp);
}
else
{
diff --git a/src/server/scripts/Outland/hellfire_peninsula.cpp b/src/server/scripts/Outland/hellfire_peninsula.cpp
index 7ac90320347..24d00235ab8 100644
--- a/src/server/scripts/Outland/hellfire_peninsula.cpp
+++ b/src/server/scripts/Outland/hellfire_peninsula.cpp
@@ -53,9 +53,7 @@ enum eAeranas
FACTION_FRIENDLY = 35,
SPELL_ENVELOPING_WINDS = 15535,
- SPELL_SHOCK = 12553,
-
- C_AERANAS = 17085
+ SPELL_SHOCK = 12553
};
class npc_aeranas : public CreatureScript
@@ -205,22 +203,6 @@ public:
};
/*######
-## go_haaleshi_altar
-######*/
-
-class go_haaleshi_altar : public GameObjectScript
-{
-public:
- go_haaleshi_altar() : GameObjectScript("go_haaleshi_altar") { }
-
- bool OnGossipHello(Player* /*player*/, GameObject* go)
- {
- go->SummonCreature(C_AERANAS, -1321.79f, 4043.80f, 116.24f, 1.25f, TEMPSUMMON_TIMED_DESPAWN, 180000);
- return false;
- }
-};
-
-/*######
## npc_naladu
######*/
@@ -532,7 +514,6 @@ void AddSC_hellfire_peninsula()
{
new npc_aeranas();
new npc_ancestral_wolf();
- new go_haaleshi_altar();
new npc_naladu();
new npc_tracy_proudwell();
new npc_trollbane();