Merge branch 'master' into 303

Conflicts:
	src/game/Corpse.cpp
	src/game/DynamicObject.cpp
	src/game/GameObject.cpp
	src/game/Object.h
	src/game/Unit.cpp
	src/game/Unit.h
This commit is contained in:
tomrus88 2008-12-05 18:16:31 +03:00
commit af1e1d7794
13 changed files with 34 additions and 27 deletions

View file

@ -21,7 +21,7 @@
DROP TABLE IF EXISTS `character_db_version`; DROP TABLE IF EXISTS `character_db_version`;
CREATE TABLE `character_db_version` ( CREATE TABLE `character_db_version` (
`required_2008_11_12_01_character_character_aura` bit(1) default NULL `required_2008_12_03_01_character_guild_member` bit(1) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Last applied sql update to DB'; ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Last applied sql update to DB';
-- --
@ -938,7 +938,7 @@ CREATE TABLE `guild_member` (
`BankRemSlotsTab5` int(11) unsigned NOT NULL default '0', `BankRemSlotsTab5` int(11) unsigned NOT NULL default '0',
KEY `guildid_key` (`guildid`), KEY `guildid_key` (`guildid`),
KEY `guildid_rank_key` (`guildid`,`rank`), KEY `guildid_rank_key` (`guildid`,`rank`),
KEY `guid_key` (`guid`) UNIQUE KEY `guid_key` (`guid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Guild System'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Guild System';
-- --

View file

@ -0,0 +1,3 @@
ALTER TABLE character_db_version CHANGE COLUMN required_2008_11_12_01_character_character_aura required_2008_12_03_01_character_guild_member bit;
ALTER TABLE `guild_member` DROP INDEX `guid_key` ,
ADD UNIQUE `guid_key` ( `guid` );

View file

@ -140,6 +140,7 @@ pkgdata_DATA = \
2008_11_27_01_mangos_playercreateinfo_item.sql \ 2008_11_27_01_mangos_playercreateinfo_item.sql \
2008_11_29_01_mangos_spell_proc_event.sql \ 2008_11_29_01_mangos_spell_proc_event.sql \
2008_11_29_02_mangos_spell_elixir.sql \ 2008_11_29_02_mangos_spell_elixir.sql \
2008_12_03_01_character_guild_member.sql \
README README
## Additional files to include when running 'make dist' ## Additional files to include when running 'make dist'
@ -261,4 +262,5 @@ EXTRA_DIST = \
2008_11_27_01_mangos_playercreateinfo_item.sql \ 2008_11_27_01_mangos_playercreateinfo_item.sql \
2008_11_29_01_mangos_spell_proc_event.sql \ 2008_11_29_01_mangos_spell_proc_event.sql \
2008_11_29_02_mangos_spell_elixir.sql \ 2008_11_29_02_mangos_spell_elixir.sql \
2008_12_03_01_character_guild_member.sql \
README README

View file

@ -103,13 +103,13 @@ void BattleGroundQueue::AddPlayer(Player *plr, uint32 bgTypeId)
if(sWorld.getConfig(CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY)) if(sWorld.getConfig(CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY))
{ {
ChatHandler(plr).PSendSysMessage(LANG_BG_QUEUE_ANNOUNCE_SELF, ChatHandler(plr).PSendSysMessage(LANG_BG_QUEUE_ANNOUNCE_SELF,
bgName, q_min_level, q_max_level, qAlliance, MinPlayers - qAlliance, qHorde, MinPlayers - qHorde); bgName, q_min_level, q_max_level, qAlliance, (MinPlayers > qAlliance) ? (MinPlayers - qAlliance) : 0, qHorde, (MinPlayers > qHorde) ? (MinPlayers - qHorde) : 0);
} }
// System message // System message
else else
{ {
sWorld.SendWorldText(LANG_BG_QUEUE_ANNOUNCE_WORLD, sWorld.SendWorldText(LANG_BG_QUEUE_ANNOUNCE_WORLD,
bgName, q_min_level, q_max_level, qAlliance, MinPlayers - qAlliance, qHorde, MinPlayers - qHorde); bgName, q_min_level, q_max_level, qAlliance, (MinPlayers > qAlliance) ? (MinPlayers - qAlliance) : 0, qHorde, (MinPlayers > qHorde) ? (MinPlayers - qHorde) : 0);
} }
} }
} }

View file

@ -209,5 +209,5 @@ bool Corpse::LoadFromDB(uint32 guid, Field *fields)
bool Corpse::isVisibleForInState(Player const* u, bool inVisibleList) const bool Corpse::isVisibleForInState(Player const* u, bool inVisibleList) const
{ {
return IsInWorld() && u->IsInWorld() && IsWithinDistInMap2d(u,World::GetMaxVisibleDistanceForObject()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f)); return IsInWorld() && u->IsInWorld() && IsWithinDistInMap(u,World::GetMaxVisibleDistanceForObject()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), false);
} }

View file

@ -148,5 +148,5 @@ void DynamicObject::Delay(int32 delaytime)
bool DynamicObject::isVisibleForInState(Player const* u, bool inVisibleList) const bool DynamicObject::isVisibleForInState(Player const* u, bool inVisibleList) const
{ {
return IsInWorld() && u->IsInWorld() && IsWithinDistInMap2d(u,World::GetMaxVisibleDistanceForObject()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f)); return IsInWorld() && u->IsInWorld() && IsWithinDistInMap(u,World::GetMaxVisibleDistanceForObject()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), false);
} }

View file

@ -739,7 +739,7 @@ bool GameObject::isVisibleForInState(Player const* u, bool inVisibleList) const
// check distance // check distance
return IsWithinDistInMap2d(u,World::GetMaxVisibleDistanceForObject() + return IsWithinDistInMap2d(u,World::GetMaxVisibleDistanceForObject() +
(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f) ); (inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), false);
} }
void GameObject::Respawn() void GameObject::Respawn()

View file

@ -1105,14 +1105,18 @@ float WorldObject::GetDistanceZ(const WorldObject* obj) const
return ( dist > 0 ? dist : 0); return ( dist > 0 ? dist : 0);
} }
bool WorldObject::IsWithinDistInMap(const WorldObject* obj, const float dist2compare) const bool WorldObject::IsWithinDistInMap(const WorldObject* obj, const float dist2compare, const bool is3D) const
{ {
if (!obj || !IsInMap(obj)) return false; if (!obj || !IsInMap(obj)) return false;
float dx = GetPositionX() - obj->GetPositionX(); float dx = GetPositionX() - obj->GetPositionX();
float dy = GetPositionY() - obj->GetPositionY(); float dy = GetPositionY() - obj->GetPositionY();
float dz = GetPositionZ() - obj->GetPositionZ(); float distsq = dx*dx + dy*dy;
float distsq = dx*dx + dy*dy + dz*dz; if(is3D)
{
float dz = GetPositionZ() - obj->GetPositionZ();
distsq += dz*dz;
}
float sizefactor = GetObjectSize() + obj->GetObjectSize(); float sizefactor = GetObjectSize() + obj->GetObjectSize();
float maxdist = dist2compare + sizefactor; float maxdist = dist2compare + sizefactor;

View file

@ -417,7 +417,7 @@ class MANGOS_DLL_SPEC WorldObject : public Object
float GetDistance2d(const float x, const float y) const; float GetDistance2d(const float x, const float y) const;
float GetDistanceZ(const WorldObject* obj) const; float GetDistanceZ(const WorldObject* obj) const;
bool IsInMap(const WorldObject* obj) const { return GetMapId()==obj->GetMapId() && GetInstanceId()==obj->GetInstanceId(); } bool IsInMap(const WorldObject* obj) const { return GetMapId()==obj->GetMapId() && GetInstanceId()==obj->GetInstanceId(); }
bool IsWithinDistInMap(const WorldObject* obj, const float dist2compare) const; bool IsWithinDistInMap(const WorldObject* obj, const float dist2compare, const bool is3D = true) const;
bool IsWithinDistInMap2d(const WorldObject* obj, const float dist2compare) const; bool IsWithinDistInMap2d(const WorldObject* obj, const float dist2compare) const;
bool IsWithinLOS(const float x, const float y, const float z ) const; bool IsWithinLOS(const float x, const float y, const float z ) const;
bool IsWithinLOSInMap(const WorldObject* obj) const; bool IsWithinLOSInMap(const WorldObject* obj) const;

View file

@ -53,6 +53,7 @@
#include "SocialMgr.h" #include "SocialMgr.h"
#include "Util.h" #include "Util.h"
#include "TemporarySummon.h" #include "TemporarySummon.h"
#include "ScriptCalls.h"
pEffect SpellEffects[TOTAL_SPELL_EFFECTS]= pEffect SpellEffects[TOTAL_SPELL_EFFECTS]=
{ {
@ -2800,6 +2801,9 @@ void Spell::SendLoot(uint64 guid, LootType loottype)
if (gameObjTarget) if (gameObjTarget)
{ {
if (Script->GOHello(player, gameObjTarget))
return;
switch (gameObjTarget->GetGoType()) switch (gameObjTarget->GetGoType())
{ {
case GAMEOBJECT_TYPE_DOOR: case GAMEOBJECT_TYPE_DOOR:

View file

@ -8547,7 +8547,7 @@ int32 Unit::ModifyPower(Powers power, int32 dVal)
return gain; return gain;
} }
bool Unit::isVisibleForOrDetect(Unit const* u, bool detect, bool inVisibleList, bool is2dDistance) const bool Unit::isVisibleForOrDetect(Unit const* u, bool detect, bool inVisibleList, bool is3dDistance) const
{ {
if(!u) if(!u)
return false; return false;
@ -8598,27 +8598,25 @@ bool Unit::isVisibleForOrDetect(Unit const* u, bool detect, bool inVisibleList,
if(u->isInFlight()) // what see player in flight if(u->isInFlight()) // what see player in flight
{ {
// use object grey distance for all (only see objects any way) // use object grey distance for all (only see objects any way)
if(is2dDistance) if (!IsWithinDistInMap(u,World::GetMaxVisibleDistanceInFlight()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), is3dDistance))
{ {
if (!IsWithinDistInMap2d(u,World::GetMaxVisibleDistanceInFlight()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f))) if (!IsWithinDistInMap2d(u,World::GetMaxVisibleDistanceInFlight()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f)))
return false; return false;
} }
else else
{ {
if (!IsWithinDistInMap(u,World::GetMaxVisibleDistanceInFlight()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f)))
return false; return false;
} }
} }
else if(!isAlive()) // distance for show body else if(!isAlive()) // distance for show body
{ {
if(is2dDistance) if (!IsWithinDistInMap(u,World::GetMaxVisibleDistanceForObject()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), is3dDistance))
{ {
if (!IsWithinDistInMap2d(u,World::GetMaxVisibleDistanceForObject()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f))) if (!IsWithinDistInMap2d(u,World::GetMaxVisibleDistanceForObject()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f)))
return false; return false;
} }
else else
{ {
if (!IsWithinDistInMap(u,World::GetMaxVisibleDistanceForObject()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f)))
return false; return false;
} }
} }
@ -8627,28 +8625,26 @@ bool Unit::isVisibleForOrDetect(Unit const* u, bool detect, bool inVisibleList,
if(u->GetTypeId()==TYPEID_PLAYER) if(u->GetTypeId()==TYPEID_PLAYER)
{ {
// Players far than max visible distance for player or not in our map are not visible too // Players far than max visible distance for player or not in our map are not visible too
if(is2dDistance) if (!at_same_transport && !IsWithinDistInMap(u,World::GetMaxVisibleDistanceForPlayer()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f), is3dDistance))
{ {
if (!at_same_transport && !IsWithinDistInMap2d(u,World::GetMaxVisibleDistanceForPlayer()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f))) if (!at_same_transport && !IsWithinDistInMap2d(u,World::GetMaxVisibleDistanceForPlayer()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f)))
return false; return false;
} }
else else
{ {
if (!at_same_transport && !IsWithinDistInMap(u,World::GetMaxVisibleDistanceForPlayer()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f)))
return false; return false;
} }
} }
else else
{ {
// Units far than max visible distance for creature or not in our map are not visible too // Units far than max visible distance for creature or not in our map are not visible too
if(is2dDistance) if (!IsWithinDistInMap(u,World::GetMaxVisibleDistanceForCreature()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f), is3dDistance))
{ {
if (!IsWithinDistInMap2d(u,World::GetMaxVisibleDistanceForCreature()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f))) if (!IsWithinDistInMap2d(u,World::GetMaxVisibleDistanceForCreature()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f)))
return false; return false;
} }
else else
{ {
if (!IsWithinDistInMap(u,World::GetMaxVisibleDistanceForCreature()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f)))
return false; return false;
} }
} }
@ -8656,28 +8652,26 @@ bool Unit::isVisibleForOrDetect(Unit const* u, bool detect, bool inVisibleList,
else if(GetCharmerOrOwnerGUID()) // distance for show pet/charmed else if(GetCharmerOrOwnerGUID()) // distance for show pet/charmed
{ {
// Pet/charmed far than max visible distance for player or not in our map are not visible too // Pet/charmed far than max visible distance for player or not in our map are not visible too
if(is2dDistance) if (!IsWithinDistInMap(u,World::GetMaxVisibleDistanceForPlayer()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f), is3dDistance))
{ {
if (!IsWithinDistInMap2d(u,World::GetMaxVisibleDistanceForPlayer()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f))) if (!IsWithinDistInMap2d(u,World::GetMaxVisibleDistanceForPlayer()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f)))
return false; return false;
} }
else else
{ {
if (!IsWithinDistInMap(u,World::GetMaxVisibleDistanceForPlayer()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f)))
return false; return false;
} }
} }
else // distance for show creature else // distance for show creature
{ {
// Units far than max visible distance for creature or not in our map are not visible too // Units far than max visible distance for creature or not in our map are not visible too
if(is2dDistance) if (!IsWithinDistInMap(u,World::GetMaxVisibleDistanceForCreature()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f), is3dDistance))
{ {
if (!IsWithinDistInMap2d(u,World::GetMaxVisibleDistanceForCreature()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f))) if (!IsWithinDistInMap2d(u,World::GetMaxVisibleDistanceForCreature()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f)))
return false; return false;
} }
else else
{ {
if (!IsWithinDistInMap(u,World::GetMaxVisibleDistanceForCreature()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f)))
return false; return false;
} }
} }
@ -9492,7 +9486,7 @@ Unit* Unit::GetUnit(WorldObject& object, uint64 guid)
bool Unit::isVisibleForInState( Player const* u, bool inVisibleList ) const bool Unit::isVisibleForInState( Player const* u, bool inVisibleList ) const
{ {
return isVisibleForOrDetect(u, false, inVisibleList, true); return isVisibleForOrDetect(u, false, inVisibleList, false);
} }
uint32 Unit::GetCreatureType() const uint32 Unit::GetCreatureType() const

View file

@ -1139,7 +1139,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
void SetVisibility(UnitVisibility x); void SetVisibility(UnitVisibility x);
// common function for visibility checks for player/creatures with detection code // common function for visibility checks for player/creatures with detection code
bool isVisibleForOrDetect(Unit const* u, bool detect, bool inVisibleList = false, bool is2dDistance = false) const; bool isVisibleForOrDetect(Unit const* u, bool detect, bool inVisibleList = false, bool is3dDistance = true) const;
bool canDetectInvisibilityOf(Unit const* u) const; bool canDetectInvisibilityOf(Unit const* u) const;
// virtual functions for all world objects types // virtual functions for all world objects types

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "6870" #define REVISION_NR "6873"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__