Merge commit 'origin/master' into 320

This commit is contained in:
tomrus88 2009-08-24 00:58:11 +04:00
commit 33149b8f04
7 changed files with 54 additions and 30 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_8402_02_characters_guild_bank_eventlog` bit(1) default NULL `required_8409_01_characters_guild` 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';
-- --
@ -915,7 +915,7 @@ CREATE TABLE `guild` (
`BackgroundColor` int(5) NOT NULL default '0', `BackgroundColor` int(5) NOT NULL default '0',
`info` text NOT NULL, `info` text NOT NULL,
`motd` varchar(255) NOT NULL default '', `motd` varchar(255) NOT NULL default '',
`createdate` datetime default NULL, `createdate` bigint(20) NOT NULL default '0',
`BankMoney` bigint(20) NOT NULL default '0', `BankMoney` bigint(20) NOT NULL default '0',
PRIMARY KEY (`guildid`) PRIMARY KEY (`guildid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Guild System'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Guild System';

View file

@ -0,0 +1,17 @@
ALTER TABLE character_db_version CHANGE COLUMN required_8402_02_characters_guild_bank_eventlog required_8409_01_characters_guild bit;
-- Change createdate column type from datetime to bigint(20)
-- add temporary column
ALTER TABLE guild ADD COLUMN created_temp bigint(20) default '0';
-- update temporary columns data
UPDATE guild SET created_temp = UNIX_TIMESTAMP(createdate);
-- drop current column
ALTER TABLE guild DROP COLUMN createdate;
-- create new column with correct type
ALTER TABLE guild ADD COLUMN createdate bigint(20) NOT NULL default '0' AFTER motd;
-- copy data to new column
UPDATE guild set createdate = created_temp;
-- remove old column
ALTER TABLE guild DROP COLUMN created_temp;

View file

@ -92,6 +92,7 @@ pkgdata_DATA = \
8399_01_mangos_spell_elixir.sql \ 8399_01_mangos_spell_elixir.sql \
8402_01_characters_guild_eventlog.sql \ 8402_01_characters_guild_eventlog.sql \
8402_02_characters_guild_bank_eventlog.sql \ 8402_02_characters_guild_bank_eventlog.sql \
8409_01_characters_guild.sql \
README README
## Additional files to include when running 'make dist' ## Additional files to include when running 'make dist'
@ -164,4 +165,5 @@ EXTRA_DIST = \
8399_01_mangos_spell_elixir.sql \ 8399_01_mangos_spell_elixir.sql \
8402_01_characters_guild_eventlog.sql \ 8402_01_characters_guild_eventlog.sql \
8402_02_characters_guild_bank_eventlog.sql \ 8402_02_characters_guild_bank_eventlog.sql \
8409_01_characters_guild.sql \
README README

View file

@ -93,7 +93,7 @@ bool Guild::Create(Player* leader, std::string gname)
// CharacterDatabase.PExecute("DELETE FROM guild WHERE guildid='%u'", Id); - MAX(guildid)+1 not exist // CharacterDatabase.PExecute("DELETE FROM guild WHERE guildid='%u'", Id); - MAX(guildid)+1 not exist
CharacterDatabase.PExecute("DELETE FROM guild_member WHERE guildid='%u'", m_Id); CharacterDatabase.PExecute("DELETE FROM guild_member WHERE guildid='%u'", m_Id);
CharacterDatabase.PExecute("INSERT INTO guild (guildid,name,leaderguid,info,motd,createdate,EmblemStyle,EmblemColor,BorderStyle,BorderColor,BackgroundColor,BankMoney) " CharacterDatabase.PExecute("INSERT INTO guild (guildid,name,leaderguid,info,motd,createdate,EmblemStyle,EmblemColor,BorderStyle,BorderColor,BackgroundColor,BankMoney) "
"VALUES('%u','%s','%u', '%s', '%s', NOW(),'%u','%u','%u','%u','%u','" UI64FMTD "')", "VALUES('%u','%s','%u', '%s', '%s', UNIX_TIMESTAMP(NOW()),'%u','%u','%u','%u','%u','" UI64FMTD "')",
m_Id, gname.c_str(), GUID_LOPART(m_LeaderGuid), dbGINFO.c_str(), dbMOTD.c_str(), m_EmblemStyle, m_EmblemColor, m_BorderStyle, m_BorderColor, m_BackgroundColor, m_GuildBankMoney); m_Id, gname.c_str(), GUID_LOPART(m_LeaderGuid), dbGINFO.c_str(), dbMOTD.c_str(), m_EmblemStyle, m_EmblemColor, m_BorderStyle, m_BorderColor, m_BackgroundColor, m_GuildBankMoney);
CharacterDatabase.CommitTransaction(); CharacterDatabase.CommitTransaction();
@ -155,7 +155,6 @@ bool Guild::AddMember(uint64 plGuid, uint32 plRank)
newmember.Class = fields[3].GetUInt32(); newmember.Class = fields[3].GetUInt32();
delete result; delete result;
if(newmember.level < 1 || newmember.level > STRONG_MAX_LEVEL if(newmember.level < 1 || newmember.level > STRONG_MAX_LEVEL
|| !newmember.zoneId
|| newmember.Class < CLASS_WARRIOR || newmember.Class >= MAX_CLASSES) || newmember.Class < CLASS_WARRIOR || newmember.Class >= MAX_CLASSES)
{ {
sLog.outError("Player (GUID: %u) has a broken data in field `characters` table, cannot add him to guild.",GUID_LOPART(plGuid)); sLog.outError("Player (GUID: %u) has a broken data in field `characters` table, cannot add him to guild.",GUID_LOPART(plGuid));
@ -213,11 +212,11 @@ bool Guild::LoadGuildFromDB(uint32 GuildId)
//set m_Id in case guild data are broken in DB and Guild will be Disbanded (deleted from DB) //set m_Id in case guild data are broken in DB and Guild will be Disbanded (deleted from DB)
m_Id = GuildId; m_Id = GuildId;
QueryResult *result = CharacterDatabase.PQuery("SELECT MAX(TabId) FROM guild_bank_tab WHERE guildid='%u'", GuildId); QueryResult *result = CharacterDatabase.PQuery("SELECT COUNT(TabId) FROM guild_bank_tab WHERE guildid='%u'", GuildId);
if(result) if(result)
{ {
Field *fields = result->Fetch(); Field *fields = result->Fetch();
m_PurchasedTabs = fields[0].GetUInt8() + 1; // Because TabId begins at 0 m_PurchasedTabs = fields[0].GetUInt32();
if (m_PurchasedTabs > GUILD_BANK_MAX_TABS) if (m_PurchasedTabs > GUILD_BANK_MAX_TABS)
m_PurchasedTabs = GUILD_BANK_MAX_TABS; m_PurchasedTabs = GUILD_BANK_MAX_TABS;
delete result; delete result;
@ -231,9 +230,9 @@ bool Guild::LoadGuildFromDB(uint32 GuildId)
LoadBankRightsFromDB(GuildId); // Must be after LoadRanksFromDB because it populates rank struct LoadBankRightsFromDB(GuildId); // Must be after LoadRanksFromDB because it populates rank struct
// 0 1 2 3 4 5 6 // 0 1 2 3 4 5
result = CharacterDatabase.PQuery("SELECT guildid, name, leaderguid, EmblemStyle, EmblemColor, BorderStyle, BorderColor," result = CharacterDatabase.PQuery("SELECT name, leaderguid, EmblemStyle, EmblemColor, BorderStyle, BorderColor,"
// 7 8 9 10 11 // 6 7 8 9 10
"BackgroundColor, info, motd, createdate, BankMoney FROM guild WHERE guildid = '%u'", GuildId); "BackgroundColor, info, motd, createdate, BankMoney FROM guild WHERE guildid = '%u'", GuildId);
if(!result) if(!result)
@ -241,32 +240,34 @@ bool Guild::LoadGuildFromDB(uint32 GuildId)
Field *fields = result->Fetch(); Field *fields = result->Fetch();
m_Id = fields[0].GetUInt32(); m_Name = fields[0].GetCppString();
m_Name = fields[1].GetCppString(); m_LeaderGuid = MAKE_NEW_GUID(fields[1].GetUInt32(), 0, HIGHGUID_PLAYER);
m_LeaderGuid = MAKE_NEW_GUID(fields[2].GetUInt32(), 0, HIGHGUID_PLAYER);
m_EmblemStyle = fields[3].GetUInt32(); m_EmblemStyle = fields[2].GetUInt32();
m_EmblemColor = fields[4].GetUInt32(); m_EmblemColor = fields[3].GetUInt32();
m_BorderStyle = fields[5].GetUInt32(); m_BorderStyle = fields[4].GetUInt32();
m_BorderColor = fields[6].GetUInt32(); m_BorderColor = fields[5].GetUInt32();
m_BackgroundColor = fields[7].GetUInt32(); m_BackgroundColor = fields[6].GetUInt32();
GINFO = fields[8].GetCppString(); GINFO = fields[7].GetCppString();
MOTD = fields[9].GetCppString(); MOTD = fields[8].GetCppString();
uint64 time = fields[10].GetUInt64(); //datetime is uint64 type ... YYYYmmdd:hh:mm:ss time_t time = fields[9].GetUInt64();
m_GuildBankMoney = fields[11].GetUInt64(); m_GuildBankMoney = fields[10].GetUInt64();
delete result; delete result;
uint64 dTime = time /1000000; if (time > 0)
m_CreatedDay = dTime%100; {
m_CreatedMonth = (dTime/100)%100; tm local = *(localtime(&time)); // dereference and assign
m_CreatedYear = (dTime/10000)%10000; m_CreatedDay = local.tm_mday;
m_CreatedMonth = local.tm_mon + 1;
m_CreatedYear = local.tm_year + 1900;
}
// Repair the structure of guild // Repair the structure of guild
// If the guildmaster does not exist attempt to promote another member // If the guildmaster doesn't exist or isn't the member of guild
// or guildmaster isn't present in guild // attempt to promote another member
int32 GM_rights = GetRank(GUID_LOPART(m_LeaderGuid)); int32 GM_rights = GetRank(GUID_LOPART(m_LeaderGuid));
if(!objmgr.GetPlayerAccountIdByGUID(m_LeaderGuid) || GM_rights == -1) if(GM_rights == -1)
{ {
DelMember(m_LeaderGuid); DelMember(m_LeaderGuid);
// check no members case (disbanded) // check no members case (disbanded)
@ -393,6 +394,7 @@ bool Guild::LoadMembersFromDB(uint32 GuildId)
newmember.Class = fields[21].GetUInt32(); newmember.Class = fields[21].GetUInt32();
newmember.logout_time = fields[22].GetUInt64(); newmember.logout_time = fields[22].GetUInt64();
//this code will remove unexisting character guids from guild
if(newmember.level < 1 || newmember.level > STRONG_MAX_LEVEL) // can be at broken `data` field if(newmember.level < 1 || newmember.level > STRONG_MAX_LEVEL) // can be at broken `data` field
{ {
sLog.outError("Player (GUID: %u) has a broken data in field `characters`.`data`, deleting him from guild!",GUID_LOPART(guid)); sLog.outError("Player (GUID: %u) has a broken data in field `characters`.`data`, deleting him from guild!",GUID_LOPART(guid));

View file

@ -6191,7 +6191,8 @@ uint32 Player::GetZoneIdFromDB(uint64 guid)
zone = MapManager::Instance().GetZoneId(map,posx,posy,posz); zone = MapManager::Instance().GetZoneId(map,posx,posy,posz);
CharacterDatabase.PExecute("UPDATE characters SET zone='%u' WHERE guid='%u'", zone, guidLow); if (zone > 0)
CharacterDatabase.PExecute("UPDATE characters SET zone='%u' WHERE guid='%u'", zone, guidLow);
} }
return zone; return zone;

View file

@ -175,6 +175,7 @@ SpellSpecific GetSpellSpecific(uint32 spellId)
if ((spellInfo->AttributesEx2 & SPELL_ATTR_EX2_FOOD_BUFF) || spellInfo->SpellIconID == 2560) if ((spellInfo->AttributesEx2 & SPELL_ATTR_EX2_FOOD_BUFF) || spellInfo->SpellIconID == 2560)
return SPELL_WELL_FED; return SPELL_WELL_FED;
} }
break;
} }
case SPELLFAMILY_MAGE: case SPELLFAMILY_MAGE:
{ {
@ -295,6 +296,7 @@ bool IsSingleFromSpellSpecificPerCaster(SpellSpecific spellSpec1,SpellSpecific s
case SPELL_PRESENCE: case SPELL_PRESENCE:
case SPELL_HAND: case SPELL_HAND:
case SPELL_WELL_FED: case SPELL_WELL_FED:
return spellSpec1==spellSpec2;
case SPELL_FOOD: case SPELL_FOOD:
return spellSpec2==SPELL_FOOD return spellSpec2==SPELL_FOOD
|| spellSpec2==SPELL_FOOD_AND_DRINK; || spellSpec2==SPELL_FOOD_AND_DRINK;

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 "8408" #define REVISION_NR "8411"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__