mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-16 21:20:01 -04:00
*Update to Trinity 748.
--HG-- branch : trunk
This commit is contained in:
@@ -2,5 +2,4 @@ ALTER TABLE `character_ticket` RENAME TO `gm_tickets`;
|
||||
ALTER TABLE gm_tickets CHANGE `guid` `playerGuid` int(11) unsigned NOT NULL default '0';
|
||||
ALTER TABLE gm_tickets CHANGE `ticket_id` `guid` int(11) unsigned NOT NULL default '0';
|
||||
ALTER TABLE gm_tickets CHANGE `ticket_text` `message` text(0) NOT NULL;
|
||||
ALTER TABLE gm_tickets CHANGE `ticket_lastchange` `timestamp` int(10) NOT NULL default '0';
|
||||
ALTER TABLE gm_tickets ADD( `closed` bit(1) NOT NULL, `assignedto` int(10) NOT NULL default '0', `comment` text(0) NOT NULL default '');
|
||||
ALTER TABLE gm_tickets CHANGE `ticket_lastchange` `timestamp` int(10) NOT NULL default '0';
|
||||
1
sql/updates/739_characters.sql
Normal file
1
sql/updates/739_characters.sql
Normal file
@@ -0,0 +1 @@
|
||||
ALTER TABLE gm_tickets ADD `comment` text(0) NOT NULL;
|
||||
4
sql/updates/741_characters.sql
Normal file
4
sql/updates/741_characters.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
ALTER TABLE `gm_tickets` CHANGE `closed` `closed` tinyint(1) NOT NULL default '0';
|
||||
ALTER TABLE `gm_tickets` ADD `closed` bit(1) NOT NULL AFTER `timestamp`;
|
||||
ALTER TABLE `gm_tickets` ADD `assignedto` int(10) NOT NULL default '0' AFTER `timestamp`;
|
||||
|
||||
10
sql/updates/741_world.sql
Normal file
10
sql/updates/741_world.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
REPLACE INTO `command` (`name`,`security`,`help`) VALUES ('ticket list','1','Displays a list of open GM tickets.');
|
||||
REPLACE INTO `command` (`name`,`security`,`help`) VALUES ('ticket onlinelist','1','Displays a list of open GM tickets whose owner is online.');
|
||||
REPLACE INTO `command` (`name`,`security`,`help`) VALUES ('ticket viewname','1','Usage: .ticket viewname $creatorname. \r\nReturns details about specified ticket. Ticket must be open and not deleted.');
|
||||
REPLACE INTO `command` (`name`,`security`,`help`) VALUES ('ticket viewid','1','Usage: .ticket viewid $ticketid.\r\nReturns details about specified ticket. Ticket must be open and not deleted.');
|
||||
REPLACE INTO `command` (`name`,`security`,`help`) VALUES ('ticket close','2','Usage: .ticket close $ticketid.\r\nCloses the specified ticket. Does not delete permanently.');
|
||||
REPLACE INTO `command` (`name`,`security`,`help`) VALUES ('ticket delete','3','Usage: .ticket delete $ticketid.\r\nDeletes the specified ticket permanently. Ticket must be closed first.');
|
||||
REPLACE INTO `command` (`name`,`security`,`help`) VALUES ('ticket assign','3','Usage: .ticket assign $ticketid $gmname.\r\nAssigns the specified ticket to the specified Game Master.');
|
||||
REPLACE INTO `command` (`name`,`security`,`help`) VALUES ('ticket unassign','3','Usage: .ticket unassign $ticketid.\r\nUnassigns the specified ticket from the current assigned Game Master.');
|
||||
REPLACE INTO `command` (`name`,`security`,`help`) VALUES ('ticket comment','2','Usage: .ticket comment $ticketid $comment.\r\nAllows the adding or modifying of a comment to the specified ticket.');
|
||||
REPLACE INTO `command` (`name`,`security`,`help`) VALUES ('reload tickets','4','Usage: .reload tickets.\r\nReloads GM Tickets from the database and re-caches them into memory.');
|
||||
1
sql/updates/747_world.sql
Normal file
1
sql/updates/747_world.sql
Normal file
@@ -0,0 +1 @@
|
||||
UPDATE `trinity_string` SET `content_default`='Ticket %d is already assigned.' WHERE (`entry`='2008');
|
||||
3
sql/updates/748_world_scripts.sql
Normal file
3
sql/updates/748_world_scripts.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
update creature_template set scriptname='npc_infused_crystal', flags_extra=0 where entry=16364;
|
||||
update quest_template set specialflags=2, reqcreatureorgoid1=1, reqcreatureorgocount1=1 where entry=8490;
|
||||
delete from creature where id=17086;
|
||||
@@ -604,8 +604,9 @@ struct TRINITY_DLL_DECL npc_apprentice_mirvedaAI : public ScriptedAI
|
||||
{
|
||||
if (PlayerGUID)
|
||||
{
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
((Player*)player)->GroupEventHappens(QUEST_UNEXPECTED_RESULT, m_creature);
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
if(player)
|
||||
((Player*)player)->CompleteQuest(QUEST_UNEXPECTED_RESULT);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -672,28 +673,20 @@ struct TRINITY_DLL_DECL npc_infused_crystalAI : public Scripted_NoMovementAI
|
||||
void Reset()
|
||||
{
|
||||
EndTimer = 0;
|
||||
WaveTimer = 0;
|
||||
PlayerGUID = 0;
|
||||
Completed = false;
|
||||
Progress = false;
|
||||
PlayerGUID = 0;
|
||||
WaveTimer = 0;
|
||||
}
|
||||
|
||||
void Aggro(Unit* who){}
|
||||
|
||||
void JustSummoned(Creature *summoned)
|
||||
{
|
||||
summoned->AI()->AttackStart(m_creature);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
error_log("MoveLos");
|
||||
if( who->GetTypeId() == TYPEID_PLAYER && !m_creature->canStartAttack(who) )
|
||||
if( who->GetTypeId() == TYPEID_PLAYER && !m_creature->canStartAttack(who) && !Progress)
|
||||
{
|
||||
error_log("TypeId check");
|
||||
if( ((Player*)who)->GetQuestStatus(QUEST_POWERING_OUR_DEFENSES) == QUEST_STATUS_INCOMPLETE )
|
||||
{
|
||||
error_log("Queststaus");
|
||||
float Radius = 10.0;
|
||||
if( m_creature->IsWithinDistInMap(who, Radius) )
|
||||
{
|
||||
@@ -701,10 +694,14 @@ struct TRINITY_DLL_DECL npc_infused_crystalAI : public Scripted_NoMovementAI
|
||||
WaveTimer = 1000;
|
||||
EndTimer = 60000;
|
||||
Progress = true;
|
||||
error_log("Event started");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JustSummoned(Creature *summoned)
|
||||
{
|
||||
summoned->AI()->AttackStart(m_creature);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
@@ -726,26 +723,26 @@ struct TRINITY_DLL_DECL npc_infused_crystalAI : public Scripted_NoMovementAI
|
||||
if (PlayerGUID)
|
||||
{
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
((Player*)player)->GroupEventHappens(QUEST_POWERING_OUR_DEFENSES, m_creature);
|
||||
if(player)
|
||||
((Player*)player)->CompleteQuest(QUEST_POWERING_OUR_DEFENSES);
|
||||
}
|
||||
m_creature->DealDamage(m_creature,m_creature->GetHealth(),NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
m_creature->RemoveCorpse();
|
||||
error_log("EndTimer done");
|
||||
}else EndTimer -= diff;
|
||||
|
||||
if(WaveTimer < diff && !Completed && Progress)
|
||||
{
|
||||
uint32 ran = rand()%8;
|
||||
DoSpawnCreature(MOB_ENRAGED_WRAITH, SpawnLocations[ran].x, SpawnLocations[ran].y, SpawnLocations[ran].z, 0, TEMPSUMMON_CORPSE_DESPAWN, 4000);
|
||||
DoSpawnCreature(MOB_ENRAGED_WRAITH, SpawnLocations[ran].x, SpawnLocations[ran].y, SpawnLocations[ran].z, 0, TEMPSUMMON_CORPSE_DESPAWN, 4000);
|
||||
DoSpawnCreature(MOB_ENRAGED_WRAITH, SpawnLocations[ran].x, SpawnLocations[ran].y, SpawnLocations[ran].z, 0, TEMPSUMMON_CORPSE_DESPAWN, 4000);
|
||||
uint32 ran1 = rand()%8;
|
||||
uint32 ran2 = rand()%8;
|
||||
uint32 ran3 = rand()%8;
|
||||
m_creature->SummonCreature(MOB_ENRAGED_WRAITH, SpawnLocations[ran1].x, SpawnLocations[ran1].y, SpawnLocations[ran1].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
|
||||
m_creature->SummonCreature(MOB_ENRAGED_WRAITH, SpawnLocations[ran2].x, SpawnLocations[ran2].y, SpawnLocations[ran2].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
|
||||
m_creature->SummonCreature(MOB_ENRAGED_WRAITH, SpawnLocations[ran3].x, SpawnLocations[ran3].y, SpawnLocations[ran3].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
|
||||
WaveTimer = 30000;
|
||||
error_log("Wave summon");
|
||||
}else WaveTimer -= diff;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
CreatureAI* GetAI_npc_infused_crystalAI(Creature *_Creature)
|
||||
{
|
||||
return new npc_infused_crystalAI (_Creature);
|
||||
|
||||
@@ -275,7 +275,7 @@ bool ChatHandler::HandleGMTicketListCommand(const char* args)
|
||||
SendSysMessage(LANG_COMMAND_TICKETSHOWLIST);
|
||||
for(GmTicketList::iterator itr = ticketmgr.GM_TicketList.begin(); itr != ticketmgr.GM_TicketList.end(); ++itr)
|
||||
{
|
||||
if((*itr)->closed)
|
||||
if((*itr)->closed == 1)
|
||||
continue;
|
||||
|
||||
std::stringstream message;
|
||||
@@ -298,7 +298,7 @@ bool ChatHandler::HandleGMTicketListOnlineCommand(const char* args)
|
||||
SendSysMessage(LANG_COMMAND_TICKETSHOWONLINELIST);
|
||||
for(GmTicketList::iterator itr = ticketmgr.GM_TicketList.begin(); itr != ticketmgr.GM_TicketList.end(); ++itr)
|
||||
{
|
||||
if((*itr)->closed || !objmgr.GetPlayer((*itr)->playerGuid))
|
||||
if((*itr)->closed == 1 || !objmgr.GetPlayer((*itr)->playerGuid))
|
||||
continue;
|
||||
|
||||
std::stringstream message;
|
||||
@@ -383,22 +383,22 @@ bool ChatHandler::HandleGMTicketCloseByIdCommand(const char* args)
|
||||
|
||||
uint64 tguid = atoi(args);
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicket(tguid);
|
||||
if(!ticket || ticket->closed)
|
||||
if(!ticket || ticket->closed == 1)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
if(ticket && ticket->assignedToGM != m_session->GetPlayer()->GetGUID())
|
||||
if(ticket && ticket->assignedToGM != 0 && ticket->assignedToGM != m_session->GetPlayer()->GetGUID())
|
||||
{
|
||||
PSendSysMessage(LANG_COMMAND_TICKETCANNOTCLOSE, ticket->guid);
|
||||
|
||||
return false;
|
||||
}
|
||||
sWorld.SendGMText(LANG_COMMAND_TICKETCLOSED, ticket->name, ticket->guid);
|
||||
sWorld.SendGMText(LANG_COMMAND_TICKETCLOSED, ticket->name.c_str(), ticket->guid);
|
||||
ticketmgr.RemoveGMTicket(ticket->guid);
|
||||
Player *plr = objmgr.GetPlayer(ticket->playerGuid);
|
||||
|
||||
if(!plr || !plr->IsInWorld())
|
||||
return true;
|
||||
return false;
|
||||
|
||||
// send abandon ticket
|
||||
WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4);
|
||||
@@ -422,13 +422,13 @@ bool ChatHandler::HandleGMTicketAssignToCommand(const char* args)
|
||||
std::string targm = targetgm;
|
||||
|
||||
if(!normalizePlayerName(targm))
|
||||
return false;
|
||||
return true;
|
||||
|
||||
Player *cplr = m_session->GetPlayer();
|
||||
std::string gmname;
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
|
||||
|
||||
if(!ticket || ticket->closed)
|
||||
if(!ticket || ticket->closed == 1)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
@@ -506,7 +506,7 @@ bool ChatHandler::HandleGMTicketUnAssignCommand(const char* args)
|
||||
|
||||
bool ChatHandler::HandleGMTicketCommentCommand(const char* args)
|
||||
{
|
||||
if(!args)
|
||||
if(!*args)
|
||||
return false;
|
||||
|
||||
char* tguid = strtok((char*)args, " ");
|
||||
@@ -516,19 +516,17 @@ bool ChatHandler::HandleGMTicketCommentCommand(const char* args)
|
||||
if(!comment)
|
||||
return false;
|
||||
|
||||
std::string gmname;
|
||||
Player *cplr = m_session->GetPlayer();
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
|
||||
|
||||
if(!ticket || ticket->closed)
|
||||
if(!ticket || ticket->closed == 1)
|
||||
{
|
||||
PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
}
|
||||
if(ticket->assignedToGM = 0 && ticket->assignedToGM != cplr->GetGUID())
|
||||
if(ticket->assignedToGM != 0 && ticket->assignedToGM != cplr->GetGUID())
|
||||
{
|
||||
gmname = objmgr.GetPlayer(ticket->assignedToGM)->GetName();
|
||||
PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->guid, gmname.c_str());
|
||||
PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->guid);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -552,10 +550,10 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args)
|
||||
|
||||
if(!ticket)
|
||||
{
|
||||
PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST, ticketGuid);
|
||||
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
}
|
||||
if(!ticket->closed)
|
||||
if(!ticket->closed == 1)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETCLOSEFIRST);
|
||||
return true;
|
||||
@@ -563,8 +561,8 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args)
|
||||
|
||||
std::string gmname = m_session->GetPlayer()->GetName();
|
||||
sWorld.SendGMText(LANG_COMMAND_TICKETDELETED, ticket->guid, gmname.c_str());
|
||||
ticketmgr.DeleteGMTicketPermanently(ticket->guid);
|
||||
Player *plr = objmgr.GetPlayer(ticket->playerGuid);
|
||||
ticketmgr.DeleteGMTicketPermanently(ticket->guid);
|
||||
if(plr && plr->IsInWorld())
|
||||
{
|
||||
// Force abandon ticket
|
||||
|
||||
@@ -3742,7 +3742,7 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC
|
||||
CharacterDatabase.PExecute("DELETE FROM character_reputation WHERE guid = '%u'",guid);
|
||||
CharacterDatabase.PExecute("DELETE FROM character_spell WHERE guid = '%u'",guid);
|
||||
CharacterDatabase.PExecute("DELETE FROM character_spell_cooldown WHERE guid = '%u'",guid);
|
||||
CharacterDatabase.PExecute("DELETE FROM gm_ticket WHERE playerGuid = '%u'", guid);
|
||||
CharacterDatabase.PExecute("DELETE FROM gm_tickets WHERE playerGuid = '%u'", guid);
|
||||
CharacterDatabase.PExecute("DELETE FROM item_instance WHERE owner_guid = '%u'",guid);
|
||||
CharacterDatabase.PExecute("DELETE FROM character_social WHERE guid = '%u' OR friend='%u'",guid,guid);
|
||||
CharacterDatabase.PExecute("DELETE FROM mail WHERE receiver = '%u'",guid);
|
||||
|
||||
@@ -1473,6 +1473,19 @@ void SpellMgr::LoadSpellChains()
|
||||
{
|
||||
mSpellChains.clear(); // need for reload case
|
||||
|
||||
std::vector<uint32> ChainedSpells;
|
||||
for (uint32 ability_id=0;ability_id<sSkillLineAbilityStore.GetNumRows();ability_id++)
|
||||
{
|
||||
SkillLineAbilityEntry const *AbilityInfo=sSkillLineAbilityStore.LookupEntry(ability_id);
|
||||
if (!AbilityInfo)
|
||||
continue;
|
||||
if (AbilityInfo->spellId==20154) //exception to these rules (not needed in 3.0.3)
|
||||
continue;
|
||||
if (!AbilityInfo->forward_spellid)
|
||||
continue;
|
||||
ChainedSpells.push_back(AbilityInfo->forward_spellid);
|
||||
}
|
||||
|
||||
std::multimap<SpellRankEntry, SpellRankValue,SpellRankEntry> RankMap;
|
||||
|
||||
for (uint32 ability_id=0;ability_id<sSkillLineAbilityStore.GetNumRows();ability_id++)
|
||||
@@ -1483,6 +1496,17 @@ void SpellMgr::LoadSpellChains()
|
||||
|
||||
//get only spell with lowest ability_id to prevent doubles
|
||||
uint32 spell_id=AbilityInfo->spellId;
|
||||
if (spell_id==20154) //exception to these rules (not needed in 3.0.3)
|
||||
continue;
|
||||
bool found=false;
|
||||
for (uint32 i=0; i<ChainedSpells.size(); i++)
|
||||
{
|
||||
if (ChainedSpells.at(i)==spell_id)
|
||||
found=true;
|
||||
}
|
||||
if (found)
|
||||
continue;
|
||||
|
||||
if(mSkillLineAbilityMap.lower_bound(spell_id)->second->id!=ability_id)
|
||||
continue;
|
||||
SpellEntry const *SpellInfo=sSpellStore.LookupEntry(spell_id);
|
||||
@@ -1491,6 +1515,9 @@ void SpellMgr::LoadSpellChains()
|
||||
std::string sRank = SpellInfo->Rank[sWorld.GetDefaultDbcLocale()];
|
||||
if(sRank.empty())
|
||||
continue;
|
||||
//exception to polymorph spells-make pig and turtle other chain than sheep
|
||||
if ((SpellInfo->SpellFamilyName==SPELLFAMILY_MAGE) && (SpellInfo->SpellFamilyFlags & 0x1000000) && (SpellInfo->SpellIconID!=82))
|
||||
continue;
|
||||
|
||||
SpellRankEntry entry;
|
||||
SpellRankValue value;
|
||||
@@ -1503,10 +1530,18 @@ void SpellMgr::LoadSpellChains()
|
||||
entry.TargetAuraState=SpellInfo->TargetAuraState;
|
||||
entry.SpellVisual=SpellInfo->SpellVisual[0];
|
||||
entry.ManaCost=SpellInfo->manaCost;
|
||||
|
||||
value.Id=spell_id;
|
||||
value.Rank=SpellInfo->Rank[sWorld.GetDefaultDbcLocale()];
|
||||
RankMap.insert(std::pair<SpellRankEntry, SpellRankValue>(entry,value));
|
||||
|
||||
for (;;)
|
||||
{
|
||||
AbilityInfo=mSkillLineAbilityMap.lower_bound(spell_id)->second;
|
||||
value.Id=spell_id;
|
||||
value.Rank=SpellInfo->Rank[sWorld.GetDefaultDbcLocale()];
|
||||
RankMap.insert(std::pair<SpellRankEntry, SpellRankValue>(entry,value));
|
||||
spell_id=AbilityInfo->forward_spellid;
|
||||
SpellInfo=sSpellStore.LookupEntry(spell_id);
|
||||
if (!SpellInfo)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
barGoLink bar(RankMap.size());
|
||||
@@ -1531,17 +1566,13 @@ void SpellMgr::LoadSpellChains()
|
||||
for (itr2 = RankErrorMap.lower_bound(err_entry);itr2!=RankErrorMap.upper_bound(err_entry);itr2++)
|
||||
{
|
||||
sLog.outDebug("There is a duplicate rank entry (%s) for spell: %u",itr2->first,itr2->second->second.Id);
|
||||
if (itr2->second->second.Id!=21084) //only one exception to these rules (not needed in 3.0.3)
|
||||
{
|
||||
sLog.outDebug("Spell %u removed from chain data.",itr2->second->second.Id);
|
||||
RankMap.erase(itr2->second);
|
||||
itr=RankMap.lower_bound(entry);
|
||||
}
|
||||
sLog.outDebug("Spell %u removed from chain data.",itr2->second->second.Id);
|
||||
RankMap.erase(itr2->second);
|
||||
itr=RankMap.lower_bound(entry);
|
||||
}
|
||||
else
|
||||
itr2++;
|
||||
}
|
||||
|
||||
//do not proceed for spells with less than 2 ranks
|
||||
uint32 spell_max_rank=RankMap.count(entry);
|
||||
if (spell_max_rank<2)
|
||||
@@ -1619,6 +1650,10 @@ void SpellMgr::LoadSpellChains()
|
||||
}
|
||||
}
|
||||
|
||||
//uncomment these two lines to print yourself list of spell_chains on startup
|
||||
// for (UNORDERED_MAP<uint32, SpellChainNode>::iterator itr=mSpellChains.begin();itr!=mSpellChains.end();itr++)
|
||||
// sLog.outString( "Id: %u, Rank: %d , %s",itr->first,itr->second.rank, sSpellStore.LookupEntry(itr->first)->Rank[sWorld.GetDefaultDbcLocale()]);
|
||||
|
||||
sLog.outString();
|
||||
sLog.outString( ">> Loaded %u spell chains",count);
|
||||
}
|
||||
@@ -2063,18 +2098,29 @@ void SpellMgr::LoadSpellCustomAttr()
|
||||
break;
|
||||
case 41376: // Spite
|
||||
case 39992: // Needle Spine
|
||||
case 29576: //Multi-Shot
|
||||
case 40816: //Saber Lash
|
||||
case 37790: //Spread Shot
|
||||
spellInfo->MaxAffectedTargets = 3;
|
||||
break;
|
||||
case 38310: //Multi-Shot
|
||||
spellInfo->MaxAffectedTargets = 4;
|
||||
break;
|
||||
case 42005: // Bloodboil
|
||||
case 38296: //Spitfire Totem
|
||||
case 37676: //Insidious Whisper
|
||||
spellInfo->MaxAffectedTargets = 5;
|
||||
break;
|
||||
case 40827: //Sinful Beam
|
||||
case 40859: //Sinister Beam
|
||||
case 40860: //Vile Beam
|
||||
case 40861: //Wicked Beam
|
||||
spellInfo->MaxAffectedTargets = 10;
|
||||
break;
|
||||
case 8122: case 8124: case 10888: case 10890: // Psychic Scream
|
||||
case 12494: // Frostbite
|
||||
spellInfo->Attributes |= SPELL_ATTR_BREAKABLE_BY_DAMAGE;
|
||||
break;
|
||||
//case 5530: // Mace spec (this will not be needed in 303
|
||||
// spellInfo->rangeIndex = 13; //inf
|
||||
// break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ void WorldSession::HandleGMTicketCreateOpcode( WorldPacket & recv_data )
|
||||
ticket->playerGuid = GetPlayer()->GetGUID();
|
||||
ticket->message = ticketText;
|
||||
ticket->timestamp = time(NULL);
|
||||
ticket->closed = false;
|
||||
ticket->closed = 0;
|
||||
ticket->assignedToGM = 0;
|
||||
ticket->comment = "";
|
||||
|
||||
@@ -128,16 +128,20 @@ void WorldSession::HandleGMTicketDeleteOpcode( WorldPacket & /*recv_data*/)
|
||||
|
||||
GM_Ticket* ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
|
||||
|
||||
// Remove Tickets from Player
|
||||
ticketmgr.RemoveGMTicketByPlayer(GetPlayer()->GetGUID());
|
||||
// CHeck for Ticket
|
||||
if(ticket)
|
||||
{
|
||||
// Remove Tickets from Player
|
||||
|
||||
// Response - no errors
|
||||
WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4);
|
||||
data << uint32(9);
|
||||
// Send Packet
|
||||
SendPacket(&data);
|
||||
|
||||
// Response - no errors
|
||||
WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4);
|
||||
data << uint32(9);
|
||||
// Send Packet
|
||||
SendPacket(&data);
|
||||
|
||||
sWorld.SendGMText(LANG_COMMAND_TICKETPLAYERABANDON, GetPlayer()->GetName(), ticket->guid );
|
||||
sWorld.SendGMText(LANG_COMMAND_TICKETPLAYERABANDON, GetPlayer()->GetName(), ticket->guid );
|
||||
ticketmgr.RemoveGMTicketByPlayer(GetPlayer()->GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::HandleGMTicketGetTicketOpcode( WorldPacket & /*recv_data*/)
|
||||
@@ -164,7 +168,6 @@ void WorldSession::HandleGMTicketGetTicketOpcode( WorldPacket & /*recv_data*/)
|
||||
|
||||
SendPacket(&data);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void WorldSession::HandleGMTicketSystemStatusOpcode( WorldPacket & /*recv_data*/)
|
||||
|
||||
@@ -49,7 +49,7 @@ GM_Ticket* TicketMgr::GetGMTicketByPlayer(uint64 playerGuid)
|
||||
{
|
||||
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
|
||||
{
|
||||
if((*i)->playerGuid == playerGuid && !(*i)->closed)
|
||||
if((*i)->playerGuid == playerGuid && (*i)->closed == 0)
|
||||
{
|
||||
return (*i);
|
||||
}
|
||||
@@ -72,7 +72,7 @@ GM_Ticket* TicketMgr::GetGMTicketByName(const char* name)
|
||||
|
||||
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
|
||||
{
|
||||
if((*i)->playerGuid == playerGuid && !(*i)->closed)
|
||||
if((*i)->playerGuid == playerGuid && (*i)->closed == 0)
|
||||
{
|
||||
return (*i);
|
||||
}
|
||||
@@ -147,9 +147,9 @@ void TicketMgr::RemoveGMTicket(uint64 ticketGuid)
|
||||
{
|
||||
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
|
||||
{
|
||||
if((*i)->guid == ticketGuid && !(*i)->closed)
|
||||
if((*i)->guid == ticketGuid && (*i)->closed == 0)
|
||||
{
|
||||
(*i)->closed = true;
|
||||
(*i)->closed = 1;
|
||||
SaveGMTicket((*i));
|
||||
}
|
||||
++i;
|
||||
@@ -161,7 +161,7 @@ void TicketMgr::RemoveGMTicketByPlayer(uint64 playerGuid)
|
||||
{
|
||||
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
|
||||
{
|
||||
if((*i)->playerGuid == playerGuid && !(*i)->closed)
|
||||
if((*i)->playerGuid == playerGuid && (*i)->closed == 0)
|
||||
{
|
||||
(*i)->closed = true;
|
||||
SaveGMTicket((*i));
|
||||
|
||||
@@ -34,7 +34,7 @@ struct GM_Ticket
|
||||
std::string name;
|
||||
std::string message;
|
||||
uint64 timestamp;
|
||||
bool closed;
|
||||
uint16 closed;
|
||||
uint64 assignedToGM;
|
||||
std::string comment;
|
||||
};
|
||||
|
||||
@@ -489,7 +489,7 @@ void World::LoadConfigSettings(bool reload)
|
||||
sLog.outError("Rate.Talent (%f) mustbe > 0. Using 1 instead.",rate_values[RATE_TALENT]);
|
||||
rate_values[RATE_TALENT] = 1.0f;
|
||||
}
|
||||
rate_values[RATE_CORPSE_DECAY_LOOTED] = sConfig.GetFloatDefault("Rate.Corpse.Decay.Looted",0.1f);
|
||||
rate_values[RATE_CORPSE_DECAY_LOOTED] = sConfig.GetFloatDefault("Rate.Corpse.Decay.Looted",0.5f);
|
||||
|
||||
rate_values[RATE_TARGET_POS_RECALCULATION_RANGE] = sConfig.GetFloatDefault("TargetPosRecalculateRange",1.5f);
|
||||
if(rate_values[RATE_TARGET_POS_RECALCULATION_RANGE] < CONTACT_DISTANCE)
|
||||
@@ -902,7 +902,7 @@ void World::LoadConfigSettings(bool reload)
|
||||
m_configs[CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVP] = sConfig.GetBoolDefault("Death.CorpseReclaimDelay.PvP", true);
|
||||
m_configs[CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVE] = sConfig.GetBoolDefault("Death.CorpseReclaimDelay.PvE", true);
|
||||
|
||||
m_configs[CONFIG_THREAT_RADIUS] = sConfig.GetIntDefault("ThreatRadius", 100);
|
||||
m_configs[CONFIG_THREAT_RADIUS] = sConfig.GetIntDefault("ThreatRadius", 60);
|
||||
|
||||
// always use declined names in the russian client
|
||||
m_configs[CONFIG_DECLINED_NAMES_USED] =
|
||||
|
||||
Reference in New Issue
Block a user