I rewrote the getlevel quest command so it does less accessing of the database.
This also changes the syntax to
quest::getlevel(type)
zone\groups.cpp
Add at end
Code:
uint16 Group::GetAvgLevel()
{
double levelHolder = 0;
uint8 i = 0;
uint8 numMem = 0;
while(i < MAX_GROUP_MEMBERS)
{
if (members[i])
{
numMem++;
levelHolder = levelHolder + (members[i]->GetLevel());
}
i++;
}
levelHolder = ((levelHolder/numMem)+.5); // total levels divided by num of characters
return (uint16(levelHolder));
}
zone\groups.h
Around line 94 Insert
Code:
uint16 GetAvgLevel();
zone\raids.cpp
Add to end
Code:
uint16 Raid::GetAvgLevel()
{
double levelHolder = 0;
uint8 i = 0;
uint8 numMem = 0;
while(i < MAX_RAID_MEMBERS)
{
if(strlen(members[i].membername))
{
levelHolder = levelHolder + members[i].level;
numMem++;
}
i++;
}
levelHolder = ((levelHolder/(numMem))+.5); // total levels divided by num of characters
return (uint16(levelHolder));
}
zone\raids.h
Near line 126 Insert
Code:
uint16 GetAvgLevel();
zone\perlparser.cpp
Find XS(XS__getlevel); replace function with
Code:
XS(XS__getlevel);
XS(XS__getlevel)
{
dXSARGS;
if (items != 1)
Perl_croak(aTHX_ "Usage: getlevel(type)");
int RETVAL;
dXSTARG;
int type = (int)SvIV(ST(0));
RETVAL = quest_manager.getlevel(type);
XSprePUSH; PUSHu((IV)RETVAL);
XSRETURN(1);
}
zone\questmgr.cpp
Find QuestManager::getlevel replace entire function with
Code:
int QuestManager::getlevel(uint8 type)
{
if (type == 0)
{
return (initiator->GetLevel());
}
else if(type == 1)
{
Group *g = entity_list.GetGroupByClient(initiator);
if (g != NULL)
return (g->GetAvgLevel());
else
return 0;
}
else if(type == 2)
{
Raid *r = entity_list.GetRaidByClient(initiator);
if (r != NULL)
return (r->GetAvgLevel());
else
return 0;
}
else if(type == 3)
{
Raid *r = entity_list.GetRaidByClient(initiator);
if(r != NULL)
{
return (r->GetAvgLevel());
}
Group *g = entity_list.GetGroupByClient(initiator);
if(g != NULL)
{
return (g->GetAvgLevel());
}
else
return (initiator->GetLevel());
}
else
return 0;
}
zone\questmgr.h
Find int getlevel replace it with
Code:
int getlevel(uint8 type);
common\database.cpp
The following can be removed
Code:
int Database::getCharLevel(int charID)
int Database::getRaidAvgLvl(int charID)
int Database::getGroupAvgLvl(int charID)
common\database.h
These can be removed
Code:
int getCharLevel(int charID);
int getRaidAvgLvl(int charID);
int getGroupAvgLvl(int charID);