aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKingPin <none@none>2008-11-02 16:53:46 -0600
committerKingPin <none@none>2008-11-02 16:53:46 -0600
commitd5beb2bbe97afa0e50df8a2cef49bcac4a607f4a (patch)
tree4ce9fec826220b2476406e38915a15b6d00a4ce1
parent6633d3c680d4f75d743f705e9b26278674f11ee0 (diff)
[svn] *Implement new player conditions CONDITION_NO_AURA, CONDITION_ACTIVE_EVENT
* Default behaviour of pets for creatures changed to REACT_DEFENSIVE * Disallowed sending wrapped items as COD * Prevent loading and saving single target auras for pet in same way as already implemented for player * Correctly limit use some flask types to zones. * Fixed extracting common.MPQ under *nix * Many small xleanups and fixes. ** mangos merge rev. TEST REV so be careful of creepy crawly bugs! --HG-- branch : trunk
-rw-r--r--contrib/extractor/libmpq/mpq.cpp2
-rw-r--r--src/bindings/scripts/ScriptMgr.cpp6
-rw-r--r--src/bindings/scripts/ScriptMgr.h4
-rw-r--r--src/game/CharacterHandler.cpp2
-rw-r--r--src/game/Chat.cpp2
-rw-r--r--src/game/Chat.h2
-rw-r--r--src/game/Language.h4
-rw-r--r--src/game/Level0.cpp12
-rw-r--r--src/game/Level2.cpp9
-rw-r--r--src/game/Level3.cpp2
-rw-r--r--src/game/Mail.cpp7
-rw-r--r--src/game/Map.cpp17
-rw-r--r--src/game/ObjectMgr.cpp28
-rw-r--r--src/game/ObjectMgr.h5
-rw-r--r--src/game/Pet.cpp21
-rw-r--r--src/game/Player.cpp25
-rw-r--r--src/game/ScriptCalls.cpp4
-rw-r--r--src/game/ScriptCalls.h2
-rw-r--r--src/game/SpellEffects.cpp10
-rw-r--r--src/game/SpellMgr.cpp2
-rw-r--r--src/game/Unit.cpp8
-rw-r--r--src/game/Unit.h8
-rw-r--r--src/game/World.cpp14
-rw-r--r--src/game/World.h13
-rw-r--r--src/game/WorldSession.cpp35
-rw-r--r--src/game/WorldSocket.cpp6
-rw-r--r--src/game/WorldSocketMgr.cpp547
-rw-r--r--src/shared/Database/DatabaseEnv.h10
-rw-r--r--src/trinitycore/Master.cpp12
-rw-r--r--src/trinitycore/RASocket.cpp5
30 files changed, 448 insertions, 376 deletions
diff --git a/contrib/extractor/libmpq/mpq.cpp b/contrib/extractor/libmpq/mpq.cpp
index dda89a3b989..0761d81caae 100644
--- a/contrib/extractor/libmpq/mpq.cpp
+++ b/contrib/extractor/libmpq/mpq.cpp
@@ -59,7 +59,7 @@ int libmpq_archive_open(mpq_archive *mpq_a, unsigned char *mpq_filename) {
memset(mpq_a->header, 0, sizeof(mpq_header));
/* Check if file exists and is readable */
- fd = _open((char *)mpq_filename, O_RDONLY | O_BINARY);
+ fd = _open((char *)mpq_filename, O_RDONLY | O_BINARY | O_LARGEFILE);
if (fd == LIBMPQ_EFILE) {
return LIBMPQ_EFILE;
}
diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp
index be711d82a7b..64c49f0f1d2 100644
--- a/src/bindings/scripts/ScriptMgr.cpp
+++ b/src/bindings/scripts/ScriptMgr.cpp
@@ -1838,6 +1838,12 @@ void DoScriptText(int32 textEntry, WorldObject* pSource, Unit* target)
//*********************************
//*** Functions used internally ***
+//Trinity_DLL_EXPORT
+//char const* ScriptsVersion()
+//{
+// return "Default Trinity scripting library";
+//}
+
Script* GetScriptByName(std::string Name)
{
if (Name.empty())
diff --git a/src/bindings/scripts/ScriptMgr.h b/src/bindings/scripts/ScriptMgr.h
index c7a8cea1e0a..83b2c0dd7a0 100644
--- a/src/bindings/scripts/ScriptMgr.h
+++ b/src/bindings/scripts/ScriptMgr.h
@@ -77,9 +77,9 @@ void DoScriptText(int32 textEntry, WorldObject* pSource, Unit* target = NULL);
#ifdef WIN32
#define TRINITY_DLL_EXPORT extern "C" __declspec(dllexport)
#elif defined( __GNUC__ )
- #define TRINITY_DLL_EXPORT extern "C"
+#define TRINITY_DLL_EXPORT extern "C"
#else
- #define TRINITY_DLL_EXPORT extern "C" export
+#define TRINITY_DLL_EXPORT extern "C" export
#endif
#endif
diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cpp
index 2db35fd4cb9..88677cbca07 100644
--- a/src/game/CharacterHandler.cpp
+++ b/src/game/CharacterHandler.cpp
@@ -379,7 +379,7 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )
data << (uint8)CHAR_CREATE_SUCCESS;
SendPacket( &data );
- std::string IP_str = GetRemoteAddress().c_str();
+ std::string IP_str = GetRemoteAddress();
sLog.outBasic("Account: %d (IP: %s) Create Character:[%s]",GetAccountId(),IP_str.c_str(),name.c_str());
sLog.outChar("Account: %d (IP: %s) Create Character:[%s]",GetAccountId(),IP_str.c_str(),name.c_str());
}
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp
index 838dafacdfb..7c149d1c4e7 100644
--- a/src/game/Chat.cpp
+++ b/src/game/Chat.cpp
@@ -69,7 +69,7 @@ ChatCommand * ChatHandler::getCommandTable()
{ "exit", SEC_CONSOLE, true, &ChatHandler::HandleServerExitCommand, "", NULL },
{ "idlerestart", SEC_ADMINISTRATOR, true, &ChatHandler::HandleIdleRestartCommand, "", NULL },
{ "idleshutdown", SEC_ADMINISTRATOR, true, &ChatHandler::HandleIdleShutDownCommand, "", NULL },
- { "info", SEC_PLAYER, true, &ChatHandler::HandleInfoCommand, "", NULL },
+ { "info", SEC_PLAYER, true, &ChatHandler::HandleServerInfoCommand, "", NULL },
{ "motd", SEC_PLAYER, true, &ChatHandler::HandleServerMotdCommand, "", NULL },
{ "restart", SEC_ADMINISTRATOR, true, &ChatHandler::HandleRestartCommand, "", NULL },
{ "shutdown", SEC_ADMINISTRATOR, true, &ChatHandler::HandleShutDownCommand, "", NULL },
diff --git a/src/game/Chat.h b/src/game/Chat.h
index cf254238d0a..01259e23084 100644
--- a/src/game/Chat.h
+++ b/src/game/Chat.h
@@ -99,7 +99,6 @@ class ChatHandler
bool HandleHelpCommand(const char* args);
bool HandleCommandsCommand(const char* args);
bool HandleStartCommand(const char* args);
- bool HandleInfoCommand(const char* args);
bool HandleDismountCommand(const char* args);
bool HandleSaveCommand(const char* args);
bool HandleGMListIngameCommand(const char* args);
@@ -229,6 +228,7 @@ class ChatHandler
bool HandleServerCorpsesCommand(const char* args);
bool HandleServerExitCommand(const char* args);
+ bool HandleServerInfoCommand(const char* args);
bool HandleServerMotdCommand(const char* args);
bool HandleServerSetMotdCommand(const char* args);
bool HandleServerSetLogLevelCommand(const char* args);
diff --git a/src/game/Language.h b/src/game/Language.h
index 5ef5b9c02f1..f4fab0ca384 100644
--- a/src/game/Language.h
+++ b/src/game/Language.h
@@ -82,7 +82,9 @@ enum TrinityStrings
LANG_NEW_PASSWORDS_NOT_MATCH = 54,
LANG_PASSWORD_TOO_LONG = 55,
LANG_MOTD_CURRENT = 56,
- // Room for more level 0 57-99 not used
+ LANG_USING_WORLD_DB = 57,
+ LANG_USING_SCRIPT_LIB = 58,
+ // Room for more level 0 59-99 not used
// level 1 chat
LANG_GLOBAL_NOTIFY = 100,
diff --git a/src/game/Level0.cpp b/src/game/Level0.cpp
index bea6dd1f91c..db319215ded 100644
--- a/src/game/Level0.cpp
+++ b/src/game/Level0.cpp
@@ -86,7 +86,7 @@ bool ChatHandler::HandleStartCommand(const char* /*args*/)
return true;
}
-bool ChatHandler::HandleInfoCommand(const char* /*args*/)
+bool ChatHandler::HandleServerInfoCommand(const char* /*args*/)
{
uint32 activeClientsNum = sWorld.GetActiveSessionCount();
uint32 queuedClientsNum = sWorld.GetQueuedSessionCount();
@@ -94,7 +94,15 @@ bool ChatHandler::HandleInfoCommand(const char* /*args*/)
uint32 maxQueuedClientsNum = sWorld.GetMaxQueuedSessionCount();
std::string str = secsToTimeString(sWorld.GetUptime());
- PSendSysMessage(_FULLVERSION);
+ PSendSysMessage(_FULLVERSION); //char const* full;
+ //if(m_session)
+ // full = _FULLVERSION(REVISION_DATE,REVISION_TIME,"|cffffffff|Hurl:" REVISION_ID "|h" REVISION_ID "|h|r");
+ //else
+ // full = _FULLVERSION(REVISION_DATE,REVISION_TIME,REVISION_ID);
+
+ //SendSysMessage(full);
+ //PSendSysMessage(LANG_USING_SCRIPT_LIB,sWorld.GetScriptsVersion());
+ //PSendSysMessage(LANG_USING_WORLD_DB,sWorld.GetDBVersion());
PSendSysMessage(LANG_CONNECTED_USERS, activeClientsNum, maxActiveClientsNum, queuedClientsNum, maxQueuedClientsNum);
PSendSysMessage(LANG_UPTIME, str.c_str());
diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp
index f60b38b5522..6a78432a2fd 100644
--- a/src/game/Level2.cpp
+++ b/src/game/Level2.cpp
@@ -1954,7 +1954,7 @@ bool ChatHandler::HandleTicketCommand(const char* args)
int num = atoi(px);
if(num > 0)
{
- QueryResult *result = CharacterDatabase.PQuery("SELECT guid,ticket_text,ticket_lastchange FROM character_ticket ORDER BY ticket_id ASC LIMIT %d,1",num-1);
+ QueryResult *result = CharacterDatabase.PQuery("SELECT guid,ticket_text,ticket_lastchange FROM character_ticket ORDER BY ticket_id ASC "_OFFSET_, num-1);
if(!result)
{
@@ -2066,9 +2066,9 @@ bool ChatHandler::HandleDelTicketCommand(const char *args)
// delticket #num
if(num > 0)
{
- QueryResult *result = CharacterDatabase.PQuery("SELECT ticket_id,guid FROM character_ticket LIMIT %i",num);
+ QueryResult *result = CharacterDatabase.PQuery("SELECT ticket_id,guid FROM character_ticket ORDER BY ticket_id ASC "_OFFSET_,num-1);
- if(!result || uint64(num) > result->GetRowCount())
+ if(!result)
{
PSendSysMessage(LANG_COMMAND_TICKENOTEXIST, num);
delete result;
@@ -2076,9 +2076,6 @@ bool ChatHandler::HandleDelTicketCommand(const char *args)
return false;
}
- for(int i = 1; i < num; ++i)
- result->NextRow();
-
Field* fields = result->Fetch();
uint32 id = fields[0].GetUInt32();
diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp
index 74986f217d4..3ff3a3d037a 100644
--- a/src/game/Level3.cpp
+++ b/src/game/Level3.cpp
@@ -5542,7 +5542,7 @@ bool ChatHandler::HandleLoadPDumpCommand(const char *args)
SetSentErrorMessage(true);
return false;
case DUMP_TOO_MANY_CHARS:
- PSendSysMessage(LANG_ACCOUNT_CHARACTER_LIST_FULL,account_name,account_id);
+ PSendSysMessage(LANG_ACCOUNT_CHARACTER_LIST_FULL,account_name.c_str(),account_id);
SetSentErrorMessage(true);
return false;
default:
diff --git a/src/game/Mail.cpp b/src/game/Mail.cpp
index f79a4861b52..de92fdbc936 100644
--- a/src/game/Mail.cpp
+++ b/src/game/Mail.cpp
@@ -187,11 +187,18 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data )
pl->SendMailResult(0, 0, MAIL_ERR_INTERNAL_ERROR);
return;
}
+
if (mailItem.item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_CONJURED) || mailItem.item->GetUInt32Value(ITEM_FIELD_DURATION))
{
pl->SendMailResult(0, 0, MAIL_ERR_INTERNAL_ERROR);
return;
}
+
+ if(COD && mailItem.item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_WRAPPED))
+ {
+ pl->SendMailResult(0, 0, MAIL_ERR_CANT_SEND_WRAPPED_COD);
+ return;
+ }
}
}
pl->SendMailResult(0, 0, MAIL_OK);
diff --git a/src/game/Map.cpp b/src/game/Map.cpp
index 87bd6344c38..dd6ce3ea14e 100644
--- a/src/game/Map.cpp
+++ b/src/game/Map.cpp
@@ -579,15 +579,6 @@ void Map::Update(const uint32 &t_diff)
}
}
-void InstanceMap::Update(const uint32& t_diff)
-{
- Map::Update(t_diff);
-
- if(i_data)
- i_data->Update(t_diff);
-}
-
-
void Map::Remove(Player *player, bool remove)
{
CellPair p = Trinity::ComputeCellPair(player->GetPositionX(), player->GetPositionY());
@@ -1557,6 +1548,14 @@ bool InstanceMap::Add(Player *player)
return true;
}
+void InstanceMap::Update(const uint32& t_diff)
+{
+ Map::Update(t_diff);
+
+ if(i_data)
+ i_data->Update(t_diff);
+}
+
void InstanceMap::Remove(Player *player, bool remove)
{
sLog.outDetail("MAP: Removing player '%s' from instance '%u' of map '%s' before relocating to other map", player->GetName(), GetInstanceId(), GetMapName());
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp
index 916fa6a9a04..5715af51061 100644
--- a/src/game/ObjectMgr.cpp
+++ b/src/game/ObjectMgr.cpp
@@ -6569,6 +6569,10 @@ bool PlayerCondition::Meets(Player const * player) const
return true;
return false;
}
+ case CONDITION_NO_AURA:
+ return !player->HasAura(value1, value2);
+ case CONDITION_ACTIVE_EVENT:
+ return gameeventmgr.IsActiveEvent(value1);
default:
return false;
}
@@ -6689,6 +6693,30 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val
sLog.outErrorDb("Quest condition has useless data in value2 (%u)!", value2);
break;
}
+ case CONDITION_NO_AURA:
+ {
+ if(!sSpellStore.LookupEntry(value1))
+ {
+ sLog.outErrorDb("Aura condition requires to have non existing spell (Id: %d), skipped", value1);
+ return false;
+ }
+ if(value2 > 2)
+ {
+ sLog.outErrorDb("Aura condition requires to have non existing effect index (%u) (must be 0..2), skipped", value2);
+ return false;
+ }
+ break;
+ }
+ case CONDITION_ACTIVE_EVENT:
+ {
+ GameEvent::GameEventDataMap const& events = gameeventmgr.GetEventMap();
+ if(value1 >=events.size() || !events[value1].isValid())
+ {
+ sLog.outErrorDb("Active event condition requires existed event id (%u), skipped", value1);
+ return false;
+ }
+ break;
+ }
}
return true;
}
diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h
index e1bc3dfcfef..43e460ab94a 100644
--- a/src/game/ObjectMgr.h
+++ b/src/game/ObjectMgr.h
@@ -205,9 +205,11 @@ enum ConditionType
CONDITION_QUESTREWARDED = 8, // quest_id 0
CONDITION_QUESTTAKEN = 9, // quest_id 0, for condition true while quest active.
CONDITION_AD_COMMISSION_AURA = 10, // 0 0, for condition true while one from AD ñommission aura active
+ CONDITION_NO_AURA = 11, // spell_id effindex
+ CONDITION_ACTIVE_EVENT = 12, // event_id
};
-#define MAX_CONDITION 11 // maximum value in ConditionType enum
+#define MAX_CONDITION 13 // maximum value in ConditionType enum
//Player's info
typedef struct _tagCachePlayerInfo
@@ -770,6 +772,7 @@ class ObjectMgr
void AddVendorItem(uint32 entry,uint32 item, uint32 maxcount, uint32 incrtime, uint32 ExtendedCost, bool savetodb = true);
bool RemoveVendorItem(uint32 entry,uint32 item, bool savetodb = true);
bool IsVendorItemValid( uint32 vendor_entry, uint32 item, uint32 maxcount, uint32 ptime, uint32 ExtendedCost, Player* pl = NULL, std::set<uint32>* skip_vendors = NULL, uint32 ORnpcflag = 0) const;
+
protected:
uint32 m_auctionid;
uint32 m_mailid;
diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp
index 8505454274a..71f34697c7c 100644
--- a/src/game/Pet.cpp
+++ b/src/game/Pet.cpp
@@ -1366,6 +1366,10 @@ void Pet::_LoadAuras(uint32 timediff)
else
remaincharges = -1;
+ /// do not load single target auras (unless they were cast by the player)
+ if (caster_guid != GetGUID() && IsSingleTargetSpell(spellproto))
+ continue;
+
Aura* aura = CreateAura(spellproto, effindex, NULL, this, NULL);
if(!damage)
@@ -1395,10 +1399,19 @@ void Pet::_SaveAuras()
spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AREA_AURA_PET )
break;
- if (i == 3 && !itr->second->IsPassive())
- CharacterDatabase.PExecute("INSERT INTO pet_aura (guid,caster_guid,spell,effect_index,amount,maxduration,remaintime,remaincharges) "
- "VALUES ('%u', '" I64FMTD "', '%u', '%u', '%d', '%d', '%d', '%d')",
- m_charmInfo->GetPetNumber(), itr->second->GetCasterGUID(),(uint32)(*itr).second->GetId(), (uint32)(*itr).second->GetEffIndex(),(*itr).second->GetModifier()->m_amount,int((*itr).second->GetAuraMaxDuration()),int((*itr).second->GetAuraDuration()),int((*itr).second->m_procCharges));
+ if (i != 3)
+ continue;
+
+ if(itr->second->IsPassive())
+ continue;
+
+ /// do not save single target auras (unless they were cast by the player)
+ if (itr->second->GetCasterGUID() != GetGUID() && IsSingleTargetSpell(spellInfo))
+ continue;
+
+ CharacterDatabase.PExecute("INSERT INTO pet_aura (guid,caster_guid,spell,effect_index,amount,maxduration,remaintime,remaincharges) "
+ "VALUES ('%u', '" I64FMTD "', '%u', '%u', '%d', '%d', '%d', '%d')",
+ m_charmInfo->GetPetNumber(), itr->second->GetCasterGUID(),(uint32)(*itr).second->GetId(), (uint32)(*itr).second->GetEffIndex(),(*itr).second->GetModifier()->m_amount,int((*itr).second->GetAuraMaxDuration()),int((*itr).second->GetAuraDuration()),int((*itr).second->m_procCharges));
}
}
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index c6e7b65249e..8b2edce2895 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -3257,6 +3257,8 @@ void Player::InitVisibleBits()
{
updateVisualBits.SetCount(PLAYER_END);
+ // TODO: really implement OWNER_ONLY and GROUP_ONLY. Flags can be found in UpdateFields.h
+
updateVisualBits.SetBit(OBJECT_FIELD_GUID);
updateVisualBits.SetBit(OBJECT_FIELD_TYPE);
updateVisualBits.SetBit(OBJECT_FIELD_SCALE_X);
@@ -3268,6 +3270,7 @@ void Player::InitVisibleBits()
updateVisualBits.SetBit(UNIT_FIELD_SUMMON+1);
updateVisualBits.SetBit(UNIT_FIELD_CHARMEDBY);
+ updateVisualBits.SetBit(UNIT_FIELD_CHARMEDBY+1);
updateVisualBits.SetBit(UNIT_FIELD_TARGET);
updateVisualBits.SetBit(UNIT_FIELD_TARGET+1);
@@ -3299,12 +3302,10 @@ void Player::InitVisibleBits()
updateVisualBits.SetBit(UNIT_FIELD_AURASTATE);
updateVisualBits.SetBit(UNIT_FIELD_BASEATTACKTIME);
updateVisualBits.SetBit(UNIT_FIELD_BASEATTACKTIME + 1);
- updateVisualBits.SetBit(UNIT_FIELD_RANGEDATTACKTIME);
updateVisualBits.SetBit(UNIT_FIELD_BOUNDINGRADIUS);
updateVisualBits.SetBit(UNIT_FIELD_COMBATREACH);
updateVisualBits.SetBit(UNIT_FIELD_DISPLAYID);
updateVisualBits.SetBit(UNIT_FIELD_NATIVEDISPLAYID);
- updateVisualBits.SetBit(UNIT_FIELD_MOUNTDISPLAYID);
updateVisualBits.SetBit(UNIT_FIELD_BYTES_1);
updateVisualBits.SetBit(UNIT_FIELD_MOUNTDISPLAYID);
updateVisualBits.SetBit(UNIT_FIELD_PETNUMBER);
@@ -3314,16 +3315,16 @@ void Player::InitVisibleBits()
updateVisualBits.SetBit(UNIT_MOD_CAST_SPEED);
updateVisualBits.SetBit(UNIT_FIELD_BYTES_2);
+ updateVisualBits.SetBit(PLAYER_DUEL_ARBITER);
+ updateVisualBits.SetBit(PLAYER_DUEL_ARBITER+1);
updateVisualBits.SetBit(PLAYER_FLAGS);
+ updateVisualBits.SetBit(PLAYER_GUILDID);
+ updateVisualBits.SetBit(PLAYER_GUILDRANK);
updateVisualBits.SetBit(PLAYER_BYTES);
updateVisualBits.SetBit(PLAYER_BYTES_2);
updateVisualBits.SetBit(PLAYER_BYTES_3);
- updateVisualBits.SetBit(PLAYER_GUILDID);
- updateVisualBits.SetBit(PLAYER_GUILDRANK);
- updateVisualBits.SetBit(PLAYER_GUILD_TIMESTAMP);
updateVisualBits.SetBit(PLAYER_DUEL_TEAM);
- updateVisualBits.SetBit(PLAYER_DUEL_ARBITER);
- updateVisualBits.SetBit(PLAYER_DUEL_ARBITER+1);
+ updateVisualBits.SetBit(PLAYER_GUILD_TIMESTAMP);
// PLAYER_QUEST_LOG_x also visible bit on official (but only on party/raid)...
for(uint16 i = PLAYER_QUEST_LOG_1_1; i < PLAYER_QUEST_LOG_25_2; i+=4)
@@ -3352,16 +3353,6 @@ void Player::InitVisibleBits()
}
updateVisualBits.SetBit(PLAYER_CHOSEN_TITLE);
-
- updateVisualBits.SetBit(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY);
- updateVisualBits.SetBit(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY + 1);
- updateVisualBits.SetBit(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY + 2);
- updateVisualBits.SetBit(UNIT_VIRTUAL_ITEM_INFO);
- updateVisualBits.SetBit(UNIT_VIRTUAL_ITEM_INFO + 1);
- updateVisualBits.SetBit(UNIT_VIRTUAL_ITEM_INFO + 2);
- updateVisualBits.SetBit(UNIT_VIRTUAL_ITEM_INFO + 3);
- updateVisualBits.SetBit(UNIT_VIRTUAL_ITEM_INFO + 4);
- updateVisualBits.SetBit(UNIT_VIRTUAL_ITEM_INFO + 5);
}
void Player::BuildCreateUpdateBlockForPlayer( UpdateData *data, Player *target ) const
diff --git a/src/game/ScriptCalls.cpp b/src/game/ScriptCalls.cpp
index b5b5513f569..8c763809f63 100644
--- a/src/game/ScriptCalls.cpp
+++ b/src/game/ScriptCalls.cpp
@@ -24,6 +24,7 @@
#include "Platform/Define.h"
#include "ScriptCalls.h"
+#include "World.h"
ScriptsSet Script=NULL;
@@ -57,6 +58,7 @@ bool LoadScriptingModule(char const* libName)
if( !(testScript->ScriptsInit =(scriptCallScriptsInit )TRINITY_GET_PROC_ADDR(testScript->hScriptsLib,"ScriptsInit" ))
||!(testScript->ScriptsFree =(scriptCallScriptsFree )TRINITY_GET_PROC_ADDR(testScript->hScriptsLib,"ScriptsFree" ))
+ ||!(testScript->ScriptsVersion =(scriptCallScriptsVersion )TRINITY_GET_PROC_ADDR(testScript->hScriptsLib,"ScriptsVersion" ))
||!(testScript->GossipHello =(scriptCallGossipHello )TRINITY_GET_PROC_ADDR(testScript->hScriptsLib,"GossipHello" ))
||!(testScript->GOChooseReward =(scriptCallGOChooseReward )TRINITY_GET_PROC_ADDR(testScript->hScriptsLib,"GOChooseReward" ))
||!(testScript->QuestAccept =(scriptCallQuestAccept )TRINITY_GET_PROC_ADDR(testScript->hScriptsLib,"QuestAccept" ))
@@ -93,5 +95,7 @@ bool LoadScriptingModule(char const* libName)
Script=testScript;
Script->ScriptsInit();
+ sWorld.SetScriptsVersion(Script->ScriptsVersion());
+
return true;
}
diff --git a/src/game/ScriptCalls.h b/src/game/ScriptCalls.h
index 563ea798b9a..eb6cf09fab9 100644
--- a/src/game/ScriptCalls.h
+++ b/src/game/ScriptCalls.h
@@ -39,6 +39,7 @@ void UnloadScriptingModule();
typedef void(TRINITY_IMPORT * scriptCallScriptsInit) ();
typedef void(TRINITY_IMPORT * scriptCallScriptsFree) ();
+typedef char const* (TRINITY_IMPORT * scriptCallScriptsVersion) ();
typedef bool(TRINITY_IMPORT * scriptCallGossipHello) (Player *player, Creature *_Creature );
typedef bool(TRINITY_IMPORT * scriptCallQuestAccept) (Player *player, Creature *_Creature, Quest const *);
@@ -64,6 +65,7 @@ typedef struct
{
scriptCallScriptsInit ScriptsInit;
scriptCallScriptsFree ScriptsFree;
+ scriptCallScriptsVersion ScriptsVersion;
scriptCallGossipHello GossipHello;
scriptCallGOChooseReward GOChooseReward;
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index bfa14d9cebb..9ac2d4f2ded 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -4073,12 +4073,12 @@ void Spell::EffectSummonPet(uint32 i)
NewSummon->setPetType(SUMMON_PET);
uint32 faction = m_caster->getFaction();
- if(m_caster->GetTypeId() == TYPEID_UNIT && ((Creature*)m_caster)->isTotem())
+ if(m_caster->GetTypeId() == TYPEID_UNIT)
{
- Unit* owner = ((Totem*)m_caster)->GetOwner();
- if(owner)
- faction = owner->getFaction();
- NewSummon->GetCharmInfo()->SetReactState(REACT_AGGRESSIVE);
+ if ( ((Creature*)m_caster)->isTotem() )
+ NewSummon->GetCharmInfo()->SetReactState(REACT_AGGRESSIVE);
+ else
+ NewSummon->GetCharmInfo()->SetReactState(REACT_DEFENSIVE);
}
NewSummon->SetUInt64Value(UNIT_FIELD_SUMMONEDBY, m_caster->GetGUID());
diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp
index dec7225e4b5..a7f73ac7e45 100644
--- a/src/game/SpellMgr.cpp
+++ b/src/game/SpellMgr.cpp
@@ -2192,7 +2192,7 @@ bool IsSpellAllowedInLocation(SpellEntry const *spellInfo,uint32 map_id,uint32 z
// in the Blade's Edge Mountains Plateaus and Gruul's Lair.
return zone_id ==3522 || map_id==565;
}
- if(mask & ELIXIR_UNSTABLE_MASK)
+ if(mask & ELIXIR_SHATTRATH_MASK)
{
// in Tempest Keep, Serpentshrine Cavern, Caverns of Time: Mount Hyjal, Black Temple
// TODO: and the Sunwell Plateau
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index 4a618d602f8..f076595c2e5 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -6484,21 +6484,21 @@ bool Unit::HandleOverrideClassScriptAuraProc(Unit *pVictim, int32 scriptId, uint
{
case 836: // Improved Blizzard (Rank 1)
{
- if( !procSpell || procSpell->SpellVisual!=9487 )
+ if( !procSpell || procSpell->SpellVisual!=9487)
return false;
triggered_spell_id = 12484;
break;
}
case 988: // Improved Blizzard (Rank 2)
{
- if( !procSpell || procSpell->SpellVisual!=9487 )
+ if( !procSpell || procSpell->SpellVisual!=9487)
return false;
triggered_spell_id = 12485;
break;
}
case 989: // Improved Blizzard (Rank 3)
{
- if( !procSpell || procSpell->SpellVisual!=9487 )
+ if( !procSpell || procSpell->SpellVisual!=9487)
return false;
triggered_spell_id = 12486;
break;
@@ -9870,7 +9870,7 @@ CharmInfo* Unit::InitCharmInfo(Unit *charm)
}
CharmInfo::CharmInfo(Unit* unit)
-: m_unit(unit), m_CommandState(COMMAND_FOLLOW), m_ReactSate(REACT_PASSIVE), m_petnumber(0)
+: m_unit(unit), m_CommandState(COMMAND_FOLLOW), m_reactState(REACT_PASSIVE), m_petnumber(0)
{
for(int i =0; i<4; ++i)
{
diff --git a/src/game/Unit.h b/src/game/Unit.h
index 8240695cd93..695fcde8e48 100644
--- a/src/game/Unit.h
+++ b/src/game/Unit.h
@@ -646,9 +646,9 @@ struct CharmInfo
void SetCommandState(CommandStates st) { m_CommandState = st; }
CommandStates GetCommandState() { return m_CommandState; }
bool HasCommandState(CommandStates state) { return (m_CommandState == state); }
- void SetReactState(ReactStates st) { m_ReactSate = st; }
- ReactStates GetReactState() { return m_ReactSate; }
- bool HasReactState(ReactStates state) { return (m_ReactSate == state); }
+ void SetReactState(ReactStates st) { m_reactState = st; }
+ ReactStates GetReactState() { return m_reactState; }
+ bool HasReactState(ReactStates state) { return (m_reactState == state); }
void InitPossessCreateSpells();
void InitCharmCreateSpells();
@@ -665,7 +665,7 @@ struct CharmInfo
UnitActionBarEntry PetActionBar[10];
CharmSpellEntry m_charmspells[4];
CommandStates m_CommandState;
- ReactStates m_ReactSate;
+ ReactStates m_reactState;
uint32 m_petnumber;
};
diff --git a/src/game/World.cpp b/src/game/World.cpp
index 6a0da7fc90a..0eefc688789 100644
--- a/src/game/World.cpp
+++ b/src/game/World.cpp
@@ -2612,3 +2612,17 @@ void World::UpdateMaxSessionCounters()
m_maxActiveSessionCount = std::max(m_maxActiveSessionCount,uint32(m_sessions.size()-m_QueuedPlayer.size()));
m_maxQueuedSessionCount = std::max(m_maxQueuedSessionCount,uint32(m_QueuedPlayer.size()));
}
+
+void World::LoadDBVersion()
+{
+ QueryResult* result = WorldDatabase.Query("SELECT version FROM db_version LIMIT 1");
+ if(result)
+ {
+ Field* fields = result->Fetch();
+
+ m_DBVersion = fields[0].GetString();
+ delete result;
+ }
+ else
+ m_DBVersion = "unknown world database";
+}
diff --git a/src/game/World.h b/src/game/World.h
index 26746fa71de..a42aa13d69f 100644
--- a/src/game/World.h
+++ b/src/game/World.h
@@ -480,6 +480,15 @@ class World
void UpdateRealmCharCount(uint32 accid);
LocaleConstant GetAvailableDbcLocale(LocaleConstant locale) const { if(m_availableDbcLocaleMask & (1 << locale)) return locale; else return m_defaultDbcLocale; }
+
+ //used World DB version
+ void LoadDBVersion();
+ char const* GetDBVersion() { return m_DBVersion.c_str(); }
+
+ //used Script version
+ void SetScriptsVersion(char const* version) { m_ScriptsVersion = version ? version : "unknown scripting library"; }
+ char const* GetScriptsVersion() { return m_ScriptsVersion.c_str(); }
+
protected:
void _UpdateGameTime();
void ScriptsProcess();
@@ -540,6 +549,10 @@ class World
//sessions that are added async
void AddSession_(WorldSession* s);
ZThread::LockedQueue<WorldSession*, ZThread::FastMutex> addSessQueue;
+
+ //used versions
+ std::string m_DBVersion;
+ std::string m_ScriptsVersion;
};
extern uint32 realmID;
diff --git a/src/game/WorldSession.cpp b/src/game/WorldSession.cpp
index 129668be5b0..0b37f5252b1 100644
--- a/src/game/WorldSession.cpp
+++ b/src/game/WorldSession.cpp
@@ -51,10 +51,10 @@ m_sessionDbcLocale(sWorld.GetAvailableDbcLocale(locale)), m_sessionDbLocaleIndex
_logoutTime(0), m_playerLoading(false), m_playerLogout(false), m_playerRecentlyLogout(false), m_latency(0)
{
if (sock)
- {
- m_Address = sock->GetRemoteAddress ();
- sock->AddReference ();
- }
+ {
+ m_Address = sock->GetRemoteAddress ();
+ sock->AddReference ();
+ }
}
/// WorldSession destructor
@@ -99,7 +99,9 @@ void WorldSession::SendPacket(WorldPacket const* packet)
{
if (!m_Socket)
return;
+
#ifdef TRINITY_DEBUG
+
// Code for network use statistic
static uint64 sendPacketCount = 0;
static uint64 sendPacketBytes = 0;
@@ -131,12 +133,11 @@ void WorldSession::SendPacket(WorldPacket const* packet)
sendLastPacketCount = 1;
sendLastPacketBytes = packet->wpos(); // wpos is real written size
}
-#endif // !TRINITY_DEBUG
- if (m_Socket->SendPacket (*packet) == -1)
- {
- m_Socket->CloseSocket ();
- }
+ #endif // !TRINITY_DEBUG
+
+ if (m_Socket->SendPacket (*packet) == -1)
+ m_Socket->CloseSocket ();
}
/// Add an incoming packet to the queue
@@ -157,12 +158,11 @@ void WorldSession::logUnexpectedOpcode(WorldPacket* packet, const char *reason)
/// Update the WorldSession (triggered by World update)
bool WorldSession::Update(uint32 /*diff*/)
{
- if (m_Socket)
- if (m_Socket->IsClosed ())
- {
+ if (m_Socket && m_Socket->IsClosed ())
+ {
m_Socket->RemoveReference ();
m_Socket = NULL;
- }
+ }
WorldPacket *packet;
@@ -395,7 +395,8 @@ void WorldSession::LogoutPlayer(bool Save)
///- Since each account can only have one online character at any given time, ensure all characters for active account are marked as offline
//No SQL injection as AccountId is uint32
- CharacterDatabase.PExecute("UPDATE characters SET online = 0 WHERE account = '%u'", GetAccountId());
+ CharacterDatabase.PExecute("UPDATE characters SET online = 0 WHERE account = '%u'",
+ GetAccountId());
sLog.outDebug( "SESSION: Sent SMSG_LOGOUT_COMPLETE Message" );
}
@@ -407,10 +408,8 @@ void WorldSession::LogoutPlayer(bool Save)
/// Kick a player out of the World
void WorldSession::KickPlayer()
{
- if (m_Socket)
- {
- m_Socket->CloseSocket ();
- }
+ if (m_Socket)
+ m_Socket->CloseSocket ();
}
/// Cancel channeling handler
diff --git a/src/game/WorldSocket.cpp b/src/game/WorldSocket.cpp
index 34dea1d9d30..bf9dd0aefb4 100644
--- a/src/game/WorldSocket.cpp
+++ b/src/game/WorldSocket.cpp
@@ -18,9 +18,6 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include "Common.h"
-#include "WorldSocket.h"
-
#include <ace/Message_Block.h>
#include <ace/OS_NS_string.h>
#include <ace/OS_NS_unistd.h>
@@ -32,6 +29,9 @@
#include <ace/Reactor.h>
#include <ace/Auto_Ptr.h>
+#include "WorldSocket.h"
+#include "Common.h"
+
#include "Util.h"
#include "World.h"
#include "WorldPacket.h"
diff --git a/src/game/WorldSocketMgr.cpp b/src/game/WorldSocketMgr.cpp
index bcc58be3109..36203e8fb01 100644
--- a/src/game/WorldSocketMgr.cpp
+++ b/src/game/WorldSocketMgr.cpp
@@ -1,27 +1,27 @@
/*
- * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/>
- *
- * Copyright (C) 2008 Trinity <http://www.trinitycore.org/>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
+* Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/>
+*
+* Copyright (C) 2008 Trinity <http://www.trinitycore.org/>
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
/** \file WorldSocketMgr.cpp
- * \ingroup u2w
- * \author Derex <derex101@gmail.com>
- */
+* \ingroup u2w
+* \author Derex <derex101@gmail.com>
+*/
#include "WorldSocketMgr.h"
@@ -47,172 +47,168 @@
#include "WorldSocket.h"
/**
- * This is a helper class to WorldSocketMgr ,that manages
- * network threads, and assigning connections from acceptor thread
- * to other network threads
- */
+* This is a helper class to WorldSocketMgr ,that manages
+* network threads, and assigning connections from acceptor thread
+* to other network threads
+*/
class ReactorRunnable : protected ACE_Task_Base
{
public:
- ReactorRunnable () :
- m_ThreadId (-1),
- m_Connections (0),
- m_Reactor (0)
- {
- ACE_Reactor_Impl* imp = 0;
+ ReactorRunnable () :
+ m_ThreadId (-1),
+ m_Connections (0),
+ m_Reactor (0)
+ {
+ ACE_Reactor_Impl* imp = 0;
#if defined (ACE_HAS_EVENT_POLL) || defined (ACE_HAS_DEV_POLL)
- imp = new ACE_Dev_Poll_Reactor ();
- imp->max_notify_iterations (128);
- imp->restart (1);
+ imp = new ACE_Dev_Poll_Reactor ();
+
+ imp->max_notify_iterations (128);
+ imp->restart (1);
+
#else
- imp = new ACE_TP_Reactor ();
- imp->max_notify_iterations (128);
+
+ imp = new ACE_TP_Reactor ();
+ imp->max_notify_iterations (128);
+
#endif
- m_Reactor = new ACE_Reactor (imp, 1);
- }
-
- virtual
- ~ReactorRunnable ()
- {
- this->Stop ();
- this->Wait ();
-
- if (m_Reactor)
- delete m_Reactor;
- }
-
- void
- Stop ()
- {
- m_Reactor->end_reactor_event_loop ();
- }
-
- int
- Start ()
- {
- if (m_ThreadId != -1)
- return -1;
-
- return (m_ThreadId = this->activate ());
- }
-
- void
- Wait ()
- {
- ACE_Task_Base::wait ();
- }
-
- long
- Connections ()
- {
- return static_cast<long> (m_Connections.value ());
- }
-
- int
- AddSocket (WorldSocket* sock)
- {
- ACE_GUARD_RETURN (ACE_Thread_Mutex, Guard, m_NewSockets_Lock, -1);
-
- ++m_Connections;
- sock->AddReference();
- sock->reactor (m_Reactor);
- m_NewSockets.insert (sock);
-
- return 0;
- }
-
- ACE_Reactor* GetReactor ()
- {
- return m_Reactor;
- }
-
+ m_Reactor = new ACE_Reactor (imp, 1);
+ }
+
+ virtual ~ReactorRunnable ()
+ {
+ this->Stop ();
+ this->Wait ();
+
+ if (m_Reactor)
+ delete m_Reactor;
+ }
+
+ void Stop ()
+ {
+ m_Reactor->end_reactor_event_loop ();
+ }
+
+ int Start ()
+ {
+ if (m_ThreadId != -1)
+ return -1;
+
+ return (m_ThreadId = this->activate ());
+ }
+
+ void Wait ()
+ {
+ ACE_Task_Base::wait ();
+ }
+
+ long Connections ()
+ {
+ return static_cast<long> (m_Connections.value ());
+ }
+
+ int AddSocket (WorldSocket* sock)
+ {
+ ACE_GUARD_RETURN (ACE_Thread_Mutex, Guard, m_NewSockets_Lock, -1);
+
+ ++m_Connections;
+ sock->AddReference();
+ sock->reactor (m_Reactor);
+ m_NewSockets.insert (sock);
+
+ return 0;
+ }
+
+ ACE_Reactor* GetReactor ()
+ {
+ return m_Reactor;
+ }
+
protected:
-
- void
- AddNewSockets ()
- {
- ACE_GUARD (ACE_Thread_Mutex, Guard, m_NewSockets_Lock);
-
- if (m_NewSockets.empty ())
- return;
-
- for (SocketSet::iterator i = m_NewSockets.begin (); i != m_NewSockets.end (); ++i)
- {
- WorldSocket* sock = (*i);
-
- if (sock->IsClosed ())
- {
- sock->RemoveReference ();
- --m_Connections;
- }
- else
- m_Sockets.insert (sock);
- }
-
- m_NewSockets.clear ();
- }
-
- virtual int
- svc (void)
- {
- DEBUG_LOG ("Network Thread Starting");
-
- WorldDatabase.ThreadStart ();
-
- ACE_ASSERT (m_Reactor);
-
- SocketSet::iterator i, t;
-
- while (!m_Reactor->reactor_event_loop_done ())
- {
- // dont be too smart to move this outside the loop
- // the run_reactor_event_loop will modify interval
- ACE_Time_Value interval (0, 10000);
-
- if (m_Reactor->run_reactor_event_loop (interval) == -1)
- break;
-
- AddNewSockets ();
-
- for (i = m_Sockets.begin (); i != m_Sockets.end ();)
- {
- if ((*i)->Update () == -1)
- {
- t = i;
- i++;
- (*t)->CloseSocket ();
- (*t)->RemoveReference ();
- --m_Connections;
- m_Sockets.erase (t);
- }
- else
- i++;
- }
- }
-
- WorldDatabase.ThreadEnd ();
-
- DEBUG_LOG ("Network Thread Exitting");
-
- return 0;
- }
+
+ void AddNewSockets ()
+ {
+ ACE_GUARD (ACE_Thread_Mutex, Guard, m_NewSockets_Lock);
+
+ if (m_NewSockets.empty ())
+ return;
+
+ for (SocketSet::iterator i = m_NewSockets.begin (); i != m_NewSockets.end (); ++i)
+ {
+ WorldSocket* sock = (*i);
+
+ if (sock->IsClosed ())
+ {
+ sock->RemoveReference ();
+ --m_Connections;
+ }
+ else
+ m_Sockets.insert (sock);
+ }
+
+ m_NewSockets.clear ();
+ }
+
+ virtual int svc (void)
+ {
+ DEBUG_LOG ("Network Thread Starting");
+
+ WorldDatabase.ThreadStart ();
+
+ ACE_ASSERT (m_Reactor);
+
+ SocketSet::iterator i, t;
+
+ while (!m_Reactor->reactor_event_loop_done ())
+ {
+ // dont be too smart to move this outside the loop
+ // the run_reactor_event_loop will modify interval
+ ACE_Time_Value interval (0, 10000);
+
+ if (m_Reactor->run_reactor_event_loop (interval) == -1)
+ break;
+
+ AddNewSockets ();
+
+ for (i = m_Sockets.begin (); i != m_Sockets.end ();)
+ {
+ if ((*i)->Update () == -1)
+ {
+ t = i;
+ i++;
+ (*t)->CloseSocket ();
+ (*t)->RemoveReference ();
+ --m_Connections;
+ m_Sockets.erase (t);
+ }
+ else
+ i++;
+ }
+ }
+
+ WorldDatabase.ThreadEnd ();
+
+ DEBUG_LOG ("Network Thread Exitting");
+
+ return 0;
+ }
private:
- typedef ACE_Atomic_Op<ACE_SYNCH_MUTEX, long> AtomicInt;
- typedef std::set<WorldSocket*> SocketSet;
+ typedef ACE_Atomic_Op<ACE_SYNCH_MUTEX, long> AtomicInt;
+ typedef std::set<WorldSocket*> SocketSet;
- ACE_Reactor* m_Reactor;
- AtomicInt m_Connections;
- int m_ThreadId;
+ ACE_Reactor* m_Reactor;
+ AtomicInt m_Connections;
+ int m_ThreadId;
- SocketSet m_Sockets;
+ SocketSet m_Sockets;
- SocketSet m_NewSockets;
- ACE_Thread_Mutex m_NewSockets_Lock;
+ SocketSet m_NewSockets;
+ ACE_Thread_Mutex m_NewSockets_Lock;
};
@@ -227,145 +223,138 @@ m_Acceptor (0) {}
WorldSocketMgr::~WorldSocketMgr ()
{
- if (m_NetThreads)
- delete [] m_NetThreads;
-
- if(m_Acceptor)
- delete m_Acceptor;
+ if (m_NetThreads)
+ delete [] m_NetThreads;
+
+ if(m_Acceptor)
+ delete m_Acceptor;
}
-int
-WorldSocketMgr::StartReactiveIO (ACE_UINT16 port, const char* address)
+int WorldSocketMgr::StartReactiveIO (ACE_UINT16 port, const char* address)
{
- m_UseNoDelay = sConfig.GetBoolDefault ("Network.TcpNodelay", true);
+ m_UseNoDelay = sConfig.GetBoolDefault ("Network.TcpNodelay", true);
- int num_threads = sConfig.GetIntDefault ("Network.Threads", 1);
+ int num_threads = sConfig.GetIntDefault ("Network.Threads", 1);
- if (num_threads <= 0)
- {
- sLog.outError ("Network.Threads is wrong in your config file");
- return -1;
- }
+ if (num_threads <= 0)
+ {
+ sLog.outError ("Network.Threads is wrong in your config file");
+ return -1;
+ }
- m_NetThreadsCount = static_cast<size_t> (num_threads + 1);
+ m_NetThreadsCount = static_cast<size_t> (num_threads + 1);
- m_NetThreads = new ReactorRunnable[m_NetThreadsCount];
+ m_NetThreads = new ReactorRunnable[m_NetThreadsCount];
- sLog.outBasic ("Max alowed socket connections %d",ACE::max_handles ());
+ sLog.outBasic ("Max alowed socket connections %d",ACE::max_handles ());
- m_SockOutKBuff = sConfig.GetIntDefault ("Network.OutKBuff", -1); // -1 means use default
+ m_SockOutKBuff = sConfig.GetIntDefault ("Network.OutKBuff", -1); // -1 means use default
- m_SockOutUBuff = sConfig.GetIntDefault ("Network.OutUBuff", 65536);
+ m_SockOutUBuff = sConfig.GetIntDefault ("Network.OutUBuff", 65536);
- if ( m_SockOutUBuff <= 0 )
- {
- sLog.outError ("Network.OutUBuff is wrong in your config file");
- return -1;
- }
+ if ( m_SockOutUBuff <= 0 )
+ {
+ sLog.outError ("Network.OutUBuff is wrong in your config file");
+ return -1;
+ }
- WorldSocket::Acceptor *acc = new WorldSocket::Acceptor;
- m_Acceptor = acc;
+ WorldSocket::Acceptor *acc = new WorldSocket::Acceptor;
+ m_Acceptor = acc;
- ACE_INET_Addr listen_addr (port, address);
+ ACE_INET_Addr listen_addr (port, address);
- if (acc->open (listen_addr, m_NetThreads[0].GetReactor (), ACE_NONBLOCK) == -1)
- {
- sLog.outError ("Failed to open acceptor ,check if the port is free");
- return -1;
- }
+ if (acc->open (listen_addr, m_NetThreads[0].GetReactor (), ACE_NONBLOCK) == -1)
+ {
+ sLog.outError ("Failed to open acceptor ,check if the port is free");
+ return -1;
+ }
- for (size_t i = 0; i < m_NetThreadsCount; ++i)
- m_NetThreads[i].Start ();
+ for (size_t i = 0; i < m_NetThreadsCount; ++i)
+ m_NetThreads[i].Start ();
- return 0;
+ return 0;
}
-int
-WorldSocketMgr::StartNetwork (ACE_UINT16 port, const char* address)
+int WorldSocketMgr::StartNetwork (ACE_UINT16 port, const char* address)
{
- if (!sLog.IsOutDebug ())
- ACE_Log_Msg::instance ()->priority_mask (LM_ERROR, ACE_Log_Msg::PROCESS);
+ if (!sLog.IsOutDebug ())
+ ACE_Log_Msg::instance ()->priority_mask (LM_ERROR, ACE_Log_Msg::PROCESS);
- if (this->StartReactiveIO (port, address) == -1)
- return -1;
+ if (this->StartReactiveIO (port, address) == -1)
+ return -1;
- return 0;
+ return 0;
}
-void
-WorldSocketMgr::StopNetwork ()
+void WorldSocketMgr::StopNetwork ()
{
- if (m_Acceptor)
- {
- WorldSocket::Acceptor* acc = dynamic_cast<WorldSocket::Acceptor*> (m_Acceptor);
-
- if (acc)
- acc->close ();
- }
-
- if (m_NetThreadsCount != 0)
- {
- for (size_t i = 0; i < m_NetThreadsCount; ++i)
- m_NetThreads[i].Stop ();
- }
-
- this->Wait ();
+ if (m_Acceptor)
+ {
+ WorldSocket::Acceptor* acc = dynamic_cast<WorldSocket::Acceptor*> (m_Acceptor);
+
+ if (acc)
+ acc->close ();
+ }
+
+ if (m_NetThreadsCount != 0)
+ {
+ for (size_t i = 0; i < m_NetThreadsCount; ++i)
+ m_NetThreads[i].Stop ();
+ }
+
+ this->Wait ();
}
-void
-WorldSocketMgr::Wait ()
+void WorldSocketMgr::Wait ()
{
- if (m_NetThreadsCount != 0)
- {
- for (size_t i = 0; i < m_NetThreadsCount; ++i)
- m_NetThreads[i].Wait ();
- }
+ if (m_NetThreadsCount != 0)
+ {
+ for (size_t i = 0; i < m_NetThreadsCount; ++i)
+ m_NetThreads[i].Wait ();
+ }
}
-int
-WorldSocketMgr::OnSocketOpen (WorldSocket* sock)
+int WorldSocketMgr::OnSocketOpen (WorldSocket* sock)
{
- // set some options here
- if (m_SockOutKBuff >= 0)
- if (sock->peer ().set_option (SOL_SOCKET,
- SO_SNDBUF,
- (void*) & m_SockOutKBuff,
- sizeof (int)) == -1 && errno != ENOTSUP)
- {
- sLog.outError ("WorldSocketMgr::OnSocketOpen set_option SO_SNDBUF");
- return -1;
- }
-
- static const int ndoption = 1;
-
- // Set TCP_NODELAY.
- if (m_UseNoDelay)
- if (sock->peer ().set_option (ACE_IPPROTO_TCP,
- TCP_NODELAY,
- (void*) & ndoption,
- sizeof (int)) == -1)
- {
- sLog.outError ("WorldSocketMgr::OnSocketOpen: peer ().set_option TCP_NODELAY errno = %s", ACE_OS::strerror (errno));
- return -1;
- }
-
- sock->m_OutBufferSize = static_cast<size_t> (m_SockOutUBuff);
-
- // we skip the Acceptor Thread
- size_t min = 1;
-
- ACE_ASSERT (m_NetThreadsCount >= 1);
-
- for (size_t i = 1; i < m_NetThreadsCount; ++i)
- if (m_NetThreads[i].Connections () < m_NetThreads[min].Connections ())
- min = i;
-
- return m_NetThreads[min].AddSocket (sock);
-
+ // set some options here
+ if (m_SockOutKBuff >= 0)
+ if (sock->peer ().set_option (SOL_SOCKET,
+ SO_SNDBUF,
+ (void*) & m_SockOutKBuff,
+ sizeof (int)) == -1 && errno != ENOTSUP)
+ {
+ sLog.outError ("WorldSocketMgr::OnSocketOpen set_option SO_SNDBUF");
+ return -1;
+ }
+
+ static const int ndoption = 1;
+
+ // Set TCP_NODELAY.
+ if (m_UseNoDelay)
+ if (sock->peer ().set_option (ACE_IPPROTO_TCP,
+ TCP_NODELAY,
+ (void*) & ndoption,
+ sizeof (int)) == -1)
+ {
+ sLog.outError ("WorldSocketMgr::OnSocketOpen: peer ().set_option TCP_NODELAY errno = %s", ACE_OS::strerror (errno));
+ return -1;
+ }
+
+ sock->m_OutBufferSize = static_cast<size_t> (m_SockOutUBuff);
+
+ // we skip the Acceptor Thread
+ size_t min = 1;
+
+ ACE_ASSERT (m_NetThreadsCount >= 1);
+
+ for (size_t i = 1; i < m_NetThreadsCount; ++i)
+ if (m_NetThreads[i].Connections () < m_NetThreads[min].Connections ())
+ min = i;
+
+ return m_NetThreads[min].AddSocket (sock);
}
-WorldSocketMgr*
-WorldSocketMgr::Instance ()
+WorldSocketMgr* WorldSocketMgr::Instance ()
{
- return ACE_Singleton<WorldSocketMgr,ACE_Thread_Mutex>::instance();
+ return ACE_Singleton<WorldSocketMgr,ACE_Thread_Mutex>::instance();
}
diff --git a/src/shared/Database/DatabaseEnv.h b/src/shared/Database/DatabaseEnv.h
index 0e6b1607aa5..7491464285d 100644
--- a/src/shared/Database/DatabaseEnv.h
+++ b/src/shared/Database/DatabaseEnv.h
@@ -34,9 +34,10 @@
#include "Database/Database.h"
#include "Database/DatabasePostgre.h"
typedef DatabasePostgre DatabaseType;
-#define _LIKE_ "ILIKE"
-#define _TABLE_SIM_ "\""
+#define _LIKE_ "ILIKE"
+#define _TABLE_SIM_ "\""
#define _CONCAT3_(A,B,C) "( " A " || " B " || " C " )"
+#define _OFFSET_ "LIMIT 1 OFFSET %d"
#else
#include "Database/QueryResultMysql.h"
#include "Database/QueryResultSqlite.h"
@@ -44,9 +45,10 @@ typedef DatabasePostgre DatabaseType;
#include "Database/DatabaseMysql.h"
#include "Database/DatabaseSqlite.h"
typedef DatabaseMysql DatabaseType;
-#define _LIKE_ "LIKE"
-#define _TABLE_SIM_ "`"
+#define _LIKE_ "LIKE"
+#define _TABLE_SIM_ "`"
#define _CONCAT3_(A,B,C) "CONCAT( " A " , " B " , " C " )"
+#define _OFFSET_ "LIMIT %d,1"
#endif
extern DatabaseType WorldDatabase;
diff --git a/src/trinitycore/Master.cpp b/src/trinitycore/Master.cpp
index 7ee10abe35c..9dcdc721f44 100644
--- a/src/trinitycore/Master.cpp
+++ b/src/trinitycore/Master.cpp
@@ -457,17 +457,9 @@ bool Master::_StartDB()
///- Clean the database before starting
clearOnlineAccounts();
- QueryResult* result = WorldDatabase.Query("SELECT version FROM db_version LIMIT 1");
- if(result)
- {
- Field* fields = result->Fetch();
-
- sLog.outString("Using %s", fields[0].GetString());
- delete result;
- }
- else
- sLog.outString("Using unknown world database.");
+ sWorld.LoadDBVersion();
+ sLog.outString("Using %s", sWorld.GetDBVersion());
return true;
}
diff --git a/src/trinitycore/RASocket.cpp b/src/trinitycore/RASocket.cpp
index 69295917d7c..00f91f1a69a 100644
--- a/src/trinitycore/RASocket.cpp
+++ b/src/trinitycore/RASocket.cpp
@@ -196,7 +196,10 @@ void RASocket::OnRead()
loginDatabase.escape_string(login);
loginDatabase.escape_string(pw);
- QueryResult *check = loginDatabase.PQuery("SELECT 1 FROM account WHERE username = '%s' AND sha_pass_hash=SHA1(CONCAT(username,':','%s'))", login.c_str(), pw.c_str());
+ QueryResult *check = loginDatabase.PQuery(
+ "SELECT 1 FROM account WHERE username = '%s' AND sha_pass_hash=SHA1(CONCAT(username,':','%s'))",
+ login.c_str(), pw.c_str());
+
if(check)
{
delete check;