From cf90a1ef2b63979b7eed688c6df423612b11da42 Mon Sep 17 00:00:00 2001 From: QAston Date: Wed, 31 Dec 2008 20:06:25 +0100 Subject: *Fix bug that one warlock pet spell was not learnable. --HG-- branch : trunk --- src/game/SpellMgr.cpp | 57 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 11 deletions(-) (limited to 'src/game') diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index e67030b77f2..97dfc94326e 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -1537,6 +1537,19 @@ void SpellMgr::LoadSpellChains() { mSpellChains.clear(); // need for reload case + std::vector ChainedSpells; + for (uint32 ability_id=0;ability_idspellId==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 RankMap; for (uint32 ability_id=0;ability_idspellId; + if (spell_id==20154) //exception to these rules (not needed in 3.0.3) + continue; + bool found=false; + for (uint32 i=0; isecond->id!=ability_id) continue; SpellEntry const *SpellInfo=sSpellStore.LookupEntry(spell_id); @@ -1555,6 +1579,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; @@ -1567,10 +1594,18 @@ void SpellMgr::LoadSpellChains() entry.TargetAuraState=SpellInfo->TargetAuraState; entry.SpellVisual=SpellInfo->SpellVisual; entry.ManaCost=SpellInfo->manaCost; - - value.Id=spell_id; - value.Rank=SpellInfo->Rank[sWorld.GetDefaultDbcLocale()]; - RankMap.insert(std::pair(entry,value)); + + for (;;) + { + AbilityInfo=mSkillLineAbilityMap.lower_bound(spell_id)->second; + value.Id=spell_id; + value.Rank=SpellInfo->Rank[sWorld.GetDefaultDbcLocale()]; + RankMap.insert(std::pair(entry,value)); + spell_id=AbilityInfo->forward_spellid; + SpellInfo=sSpellStore.LookupEntry(spell_id); + if (!SpellInfo) + break; + } } barGoLink bar(RankMap.size()); @@ -1595,17 +1630,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) @@ -1683,6 +1714,10 @@ void SpellMgr::LoadSpellChains() } } +//uncomment these two lines to print yourself list of spell_chains on startup +// for (UNORDERED_MAP::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); } -- cgit v1.2.3 From 1b40ecd785ec8ac41373678566c5e74680871005 Mon Sep 17 00:00:00 2001 From: megamage Date: Wed, 31 Dec 2008 13:19:51 -0600 Subject: *Fix a typo. By Machiavelli. --HG-- branch : trunk --- src/game/Player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/game') diff --git a/src/game/Player.cpp b/src/game/Player.cpp index c553d767c6b..4ae14a2e4a3 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -3726,7 +3726,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); -- cgit v1.2.3 From 87a9ba3f4e684218bc66e3d448e06ebfec4113a4 Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Thu, 1 Jan 2009 02:49:38 +0100 Subject: * Crash Fix for ticket system on closing a ticket (pointer was deleted out of object holder), thanks Visagalis --HG-- branch : trunk --- src/game/Level1.cpp | 2 +- src/game/TicketHandler.cpp | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 11 deletions(-) (limited to 'src/game') diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index 8ac8f491fd2..71356afb86a 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -560,8 +560,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 diff --git a/src/game/TicketHandler.cpp b/src/game/TicketHandler.cpp index 2a0fa4760b6..ab00aa5f7f6 100644 --- a/src/game/TicketHandler.cpp +++ b/src/game/TicketHandler.cpp @@ -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()); - - // Response - no errors - WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4); - data << uint32(9); - // Send Packet - SendPacket(&data); + // 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); - 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*/) -- cgit v1.2.3 From 1a6c02a9355764c909f496c4ed83662abc1d8727 Mon Sep 17 00:00:00 2001 From: biglad Date: Thu, 1 Jan 2009 16:08:15 +0000 Subject: * Fix crash bug in new ticket system - Thanks Machiavelli --HG-- branch : trunk --- src/game/Level1.cpp | 18 +++++++++--------- src/game/TicketHandler.cpp | 2 +- src/game/TicketMgr.cpp | 10 +++++----- src/game/TicketMgr.h | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) (limited to 'src/game') diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index 71356afb86a..740bb687690 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -272,7 +272,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; @@ -295,7 +295,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; @@ -380,7 +380,7 @@ 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; @@ -388,9 +388,9 @@ bool ChatHandler::HandleGMTicketCloseByIdCommand(const char* args) if(ticket && ticket->assignedToGM != m_session->GetPlayer()->GetGUID()) { PSendSysMessage(LANG_COMMAND_TICKETCANNOTCLOSE, ticket->guid); - + return true; } - 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); @@ -425,7 +425,7 @@ bool ChatHandler::HandleGMTicketAssignToCommand(const char* args) std::string gmname; GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid); - if(!ticket || ticket->closed) + if(!ticket || ticket->closed == 1) { SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); return true; @@ -517,12 +517,12 @@ bool ChatHandler::HandleGMTicketCommentCommand(const char* args) 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()); @@ -552,7 +552,7 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args) PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST, ticketGuid); return true; } - if(!ticket->closed) + if(!ticket->closed == 1) { SendSysMessage(LANG_COMMAND_TICKETCLOSEFIRST); return true; diff --git a/src/game/TicketHandler.cpp b/src/game/TicketHandler.cpp index ab00aa5f7f6..f3374332f79 100644 --- a/src/game/TicketHandler.cpp +++ b/src/game/TicketHandler.cpp @@ -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 = ""; diff --git a/src/game/TicketMgr.cpp b/src/game/TicketMgr.cpp index 212f9ff8059..0f1f7501e67 100644 --- a/src/game/TicketMgr.cpp +++ b/src/game/TicketMgr.cpp @@ -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)); diff --git a/src/game/TicketMgr.h b/src/game/TicketMgr.h index 150ca4d2eff..e41be9db5c3 100644 --- a/src/game/TicketMgr.h +++ b/src/game/TicketMgr.h @@ -34,7 +34,7 @@ struct GM_Ticket std::string name; std::string message; uint64 timestamp; - bool closed; + uint16 closed; uint64 assignedToGM; std::string comment; }; -- cgit v1.2.3 From 4c201cb62652f95c6a37f5ceed975184fe9e96a7 Mon Sep 17 00:00:00 2001 From: Blaymoira Date: Thu, 1 Jan 2009 18:21:38 +0100 Subject: *Missed World.cpp changes in 729 *Try to fix a crash in eversong_woods.cpp --HG-- branch : trunk --- .../scripts/zone/eversong_woods/eversong_woods.cpp | 39 ++++++++++++---------- src/game/World.cpp | 4 +-- 2 files changed, 24 insertions(+), 19 deletions(-) (limited to 'src/game') diff --git a/src/bindings/scripts/scripts/zone/eversong_woods/eversong_woods.cpp b/src/bindings/scripts/scripts/zone/eversong_woods/eversong_woods.cpp index bfd8a5d51ce..be74291fe3d 100644 --- a/src/bindings/scripts/scripts/zone/eversong_woods/eversong_woods.cpp +++ b/src/bindings/scripts/scripts/zone/eversong_woods/eversong_woods.cpp @@ -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); } } @@ -671,22 +672,18 @@ struct TRINITY_DLL_DECL npc_infused_crystalAI : public Scripted_NoMovementAI void Reset() { - EndTimer = 0; - WaveTimer = 0; - PlayerGUID = 0; + EndTimer = 60000; Completed = false; - Progress = false; + Progress = true; + PlayerGUID = 0; + WaveTimer = 1000; } void Aggro(Unit* who){} - void JustSummoned(Creature *summoned) - { - summoned->AI()->AttackStart(m_creature); - } - void MoveInLineOfSight(Unit* who) { + PlayerGUID = who->GetGUID(); error_log("MoveLos"); if( who->GetTypeId() == TYPEID_PLAYER && !m_creature->canStartAttack(who) ) { @@ -705,6 +702,11 @@ struct TRINITY_DLL_DECL npc_infused_crystalAI : public Scripted_NoMovementAI } } } + } + + void JustSummoned(Creature *summoned) + { + summoned->AI()->AttackStart(m_creature); } void JustDied(Unit* killer) @@ -726,7 +728,9 @@ 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); + error_log("quest complete"); } m_creature->DealDamage(m_creature,m_creature->GetHealth(),NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); m_creature->RemoveCorpse(); @@ -735,17 +739,18 @@ struct TRINITY_DLL_DECL npc_infused_crystalAI : public Scripted_NoMovementAI 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); diff --git a/src/game/World.cpp b/src/game/World.cpp index 79422d35688..2f331c73893 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -483,7 +483,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) @@ -869,7 +869,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] = -- cgit v1.2.3 From ae0ce19a7fc964b62eea136c806cd29ab182f0fa Mon Sep 17 00:00:00 2001 From: QAston Date: Thu, 1 Jan 2009 18:32:25 +0100 Subject: Backed out changeset 70e92ab6c5d2 --HG-- branch : trunk --- src/game/Level1.cpp | 18 +++++++++--------- src/game/TicketHandler.cpp | 2 +- src/game/TicketMgr.cpp | 10 +++++----- src/game/TicketMgr.h | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) (limited to 'src/game') diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index 740bb687690..71356afb86a 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -272,7 +272,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 == 1) + if((*itr)->closed) continue; std::stringstream message; @@ -295,7 +295,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 == 1 || !objmgr.GetPlayer((*itr)->playerGuid)) + if((*itr)->closed || !objmgr.GetPlayer((*itr)->playerGuid)) continue; std::stringstream message; @@ -380,7 +380,7 @@ bool ChatHandler::HandleGMTicketCloseByIdCommand(const char* args) uint64 tguid = atoi(args); GM_Ticket *ticket = ticketmgr.GetGMTicket(tguid); - if(!ticket || ticket->closed == 1) + if(!ticket || ticket->closed) { SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); return true; @@ -388,9 +388,9 @@ bool ChatHandler::HandleGMTicketCloseByIdCommand(const char* args) if(ticket && ticket->assignedToGM != m_session->GetPlayer()->GetGUID()) { PSendSysMessage(LANG_COMMAND_TICKETCANNOTCLOSE, ticket->guid); - return true; + } - sWorld.SendGMText(LANG_COMMAND_TICKETCLOSED, ticket->name.c_str(), ticket->guid); + sWorld.SendGMText(LANG_COMMAND_TICKETCLOSED, ticket->name, ticket->guid); ticketmgr.RemoveGMTicket(ticket->guid); Player *plr = objmgr.GetPlayer(ticket->playerGuid); @@ -425,7 +425,7 @@ bool ChatHandler::HandleGMTicketAssignToCommand(const char* args) std::string gmname; GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid); - if(!ticket || ticket->closed == 1) + if(!ticket || ticket->closed) { SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); return true; @@ -517,12 +517,12 @@ bool ChatHandler::HandleGMTicketCommentCommand(const char* args) Player *cplr = m_session->GetPlayer(); GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid); - if(!ticket || ticket->closed == 1) + if(!ticket || ticket->closed) { 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()); @@ -552,7 +552,7 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args) PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST, ticketGuid); return true; } - if(!ticket->closed == 1) + if(!ticket->closed) { SendSysMessage(LANG_COMMAND_TICKETCLOSEFIRST); return true; diff --git a/src/game/TicketHandler.cpp b/src/game/TicketHandler.cpp index f3374332f79..ab00aa5f7f6 100644 --- a/src/game/TicketHandler.cpp +++ b/src/game/TicketHandler.cpp @@ -60,7 +60,7 @@ void WorldSession::HandleGMTicketCreateOpcode( WorldPacket & recv_data ) ticket->playerGuid = GetPlayer()->GetGUID(); ticket->message = ticketText; ticket->timestamp = time(NULL); - ticket->closed = 0; + ticket->closed = false; ticket->assignedToGM = 0; ticket->comment = ""; diff --git a/src/game/TicketMgr.cpp b/src/game/TicketMgr.cpp index 0f1f7501e67..212f9ff8059 100644 --- a/src/game/TicketMgr.cpp +++ b/src/game/TicketMgr.cpp @@ -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 == 0) + if((*i)->playerGuid == playerGuid && !(*i)->closed) { 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 == 0) + if((*i)->playerGuid == playerGuid && !(*i)->closed) { 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 == 0) + if((*i)->guid == ticketGuid && !(*i)->closed) { - (*i)->closed = 1; + (*i)->closed = true; 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 == 0) + if((*i)->playerGuid == playerGuid && !(*i)->closed) { (*i)->closed = true; SaveGMTicket((*i)); diff --git a/src/game/TicketMgr.h b/src/game/TicketMgr.h index e41be9db5c3..150ca4d2eff 100644 --- a/src/game/TicketMgr.h +++ b/src/game/TicketMgr.h @@ -34,7 +34,7 @@ struct GM_Ticket std::string name; std::string message; uint64 timestamp; - uint16 closed; + bool closed; uint64 assignedToGM; std::string comment; }; -- cgit v1.2.3 From 68015c4e94eff0ae5fd0c165e09d88a97fd9cefd Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Thu, 1 Jan 2009 18:25:56 +0100 Subject: * Fix Crash issue caused by closing a ticket. * Fix potential crash issue caused by improper datatype, SQL included to alter column (Thanks Paradox) --HG-- branch : trunk --- sql/updates/741_characters.sql | 4 ++++ sql/updates/741_world.sql | 10 ++++++++++ src/game/Level1.cpp | 24 ++++++++++++------------ src/game/TicketHandler.cpp | 2 +- src/game/TicketMgr.cpp | 10 +++++----- src/game/TicketMgr.h | 2 +- 6 files changed, 33 insertions(+), 19 deletions(-) create mode 100644 sql/updates/741_characters.sql create mode 100644 sql/updates/741_world.sql (limited to 'src/game') diff --git a/sql/updates/741_characters.sql b/sql/updates/741_characters.sql new file mode 100644 index 00000000000..aeba6f8c9ac --- /dev/null +++ b/sql/updates/741_characters.sql @@ -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`; + diff --git a/sql/updates/741_world.sql b/sql/updates/741_world.sql new file mode 100644 index 00000000000..a93d4e2bd01 --- /dev/null +++ b/sql/updates/741_world.sql @@ -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.'); diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index 71356afb86a..00f0ec47ffd 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -272,7 +272,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; @@ -295,7 +295,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; @@ -380,22 +380,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); @@ -425,7 +425,7 @@ bool ChatHandler::HandleGMTicketAssignToCommand(const char* args) std::string gmname; GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid); - if(!ticket || ticket->closed) + if(!ticket || ticket->closed == 1) { SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); return true; @@ -517,12 +517,12 @@ bool ChatHandler::HandleGMTicketCommentCommand(const char* args) 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()); @@ -552,7 +552,7 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args) PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST, ticketGuid); return true; } - if(!ticket->closed) + if(!ticket->closed == 1) { SendSysMessage(LANG_COMMAND_TICKETCLOSEFIRST); return true; diff --git a/src/game/TicketHandler.cpp b/src/game/TicketHandler.cpp index ab00aa5f7f6..f3374332f79 100644 --- a/src/game/TicketHandler.cpp +++ b/src/game/TicketHandler.cpp @@ -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 = ""; diff --git a/src/game/TicketMgr.cpp b/src/game/TicketMgr.cpp index 212f9ff8059..0f1f7501e67 100644 --- a/src/game/TicketMgr.cpp +++ b/src/game/TicketMgr.cpp @@ -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)); diff --git a/src/game/TicketMgr.h b/src/game/TicketMgr.h index 150ca4d2eff..e41be9db5c3 100644 --- a/src/game/TicketMgr.h +++ b/src/game/TicketMgr.h @@ -34,7 +34,7 @@ struct GM_Ticket std::string name; std::string message; uint64 timestamp; - bool closed; + uint16 closed; uint64 assignedToGM; std::string comment; }; -- cgit v1.2.3 From c797bd3843e246bb85c6d73beeb57939ad1dfecd Mon Sep 17 00:00:00 2001 From: Blaymoira Date: Thu, 1 Jan 2009 20:08:32 +0100 Subject: *Fixed some spells with MaxAffectedTarget but not defined in dbc files --HG-- branch : trunk --- src/game/SpellMgr.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'src/game') diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 97dfc94326e..19495a4ba25 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -2154,18 +2154,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; } -- cgit v1.2.3 From 657b4257b2bf476d5655c692fa47a294da1edf5e Mon Sep 17 00:00:00 2001 From: Blaymoira Date: Thu, 1 Jan 2009 20:25:14 +0100 Subject: * Fix obsolete string parsing * Change trinity_string entry * Fix improper syntax error messages * Fix crash issue when commenting a ticket * By Machiavelli --HG-- branch : trunk --- sql/updates/725_characters.sql | 3 +-- sql/updates/747_world.sql | 1 + src/game/Level1.cpp | 12 +++++------- 3 files changed, 7 insertions(+), 9 deletions(-) create mode 100644 sql/updates/747_world.sql (limited to 'src/game') diff --git a/sql/updates/725_characters.sql b/sql/updates/725_characters.sql index 6be4ef0e4cf..17a87769b12 100644 --- a/sql/updates/725_characters.sql +++ b/sql/updates/725_characters.sql @@ -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'); \ No newline at end of file +ALTER TABLE gm_tickets CHANGE `ticket_lastchange` `timestamp` int(10) NOT NULL default '0'; \ No newline at end of file diff --git a/sql/updates/747_world.sql b/sql/updates/747_world.sql new file mode 100644 index 00000000000..b526781b141 --- /dev/null +++ b/sql/updates/747_world.sql @@ -0,0 +1 @@ +UPDATE `trinity_string` SET `content_default`='Ticket %d is already assigned.' WHERE (`entry`='2008'); \ No newline at end of file diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index 00f0ec47ffd..1566d16c66c 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -419,7 +419,7 @@ 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; @@ -503,7 +503,7 @@ bool ChatHandler::HandleGMTicketUnAssignCommand(const char* args) bool ChatHandler::HandleGMTicketCommentCommand(const char* args) { - if(!args) + if(!*args) return false; char* tguid = strtok((char*)args, " "); @@ -513,7 +513,6 @@ bool ChatHandler::HandleGMTicketCommentCommand(const char* args) if(!comment) return false; - std::string gmname; Player *cplr = m_session->GetPlayer(); GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid); @@ -522,10 +521,9 @@ bool ChatHandler::HandleGMTicketCommentCommand(const char* args) 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; } @@ -549,7 +547,7 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args) if(!ticket) { - PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST, ticketGuid); + SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); return true; } if(!ticket->closed == 1) -- cgit v1.2.3