*Update to Trinity 748.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-01-01 15:16:29 -06:00
14 changed files with 139 additions and 77 deletions

View File

@@ -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';

View File

@@ -0,0 +1 @@
ALTER TABLE gm_tickets ADD `comment` text(0) NOT NULL;

View 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
View 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.');

View File

@@ -0,0 +1 @@
UPDATE `trinity_string` SET `content_default`='Ticket %d is already assigned.' WHERE (`entry`='2008');

View 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;

View File

@@ -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);

View File

@@ -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

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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*/)

View File

@@ -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));

View File

@@ -34,7 +34,7 @@ struct GM_Ticket
std::string name;
std::string message;
uint64 timestamp;
bool closed;
uint16 closed;
uint64 assignedToGM;
std::string comment;
};

View File

@@ -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] =