Treasure Hunter how does it work on DSP?
Posted: Fri Aug 30, 2013 5:17 pm
I'm curiouis to know how TH works on DSP can someone fill me in?
Go to LandSandBoat
http://forums.dspt.info:80/
Code: Select all
DropList_t* DropList = itemutils::GetDropList(m_PMob->m_DropID);
if (DropList != NULL && DropList->size())
{
uint8 highestTH = charutils::GetHighestTreasureHunter(PChar, m_PMob);
for(uint8 i = 0; i < DropList->size(); ++i)
{
//highestTH is the number of 'extra chances' at an item. If the item is obtained, then break out.
uint8 tries = 0;
while(tries < 1+highestTH)
{
if(rand()%100 < DropList->at(i).DropRate)
{
PChar->PTreasurePool->AddItem(DropList->at(i).ItemID, m_PMob);
break;
}
tries++;
}
}
}
uint8 GetHighestTreasureHunter(CCharEntity* PChar, CMobEntity* PMob)
{
bool thf_in_party = true;
uint8 highestTH = PMob->m_THLvl;
if (map_config.thf_in_party_for_drops == 1) {
if(PChar->PParty != NULL) { // There's a party
if(PChar->PParty->m_PAlliance == NULL) { // but no alliance
thf_in_party = false;
for(uint8 i = 0; i < PChar->PParty->members.size(); i++) {
CCharEntity* thPChar = (CCharEntity*)PChar->PParty->members;
// THFs must be within 100 yalms in order for TH to work
if (distance(thPChar->loc.p, PMob->loc.p) < 100 && (charutils::hasTrait(thPChar, TRAIT_TREASURE_HUNTER))) {
thf_in_party = true;
break; // no point continuing to search
}
}
}
else{ // alliance
thf_in_party = false;
for(uint8 a = 0; a < PChar->PParty->m_PAlliance->partyList.size(); ++a) {
for(uint8 i = 0; i < PChar->PParty->m_PAlliance->partyList[a]->members.size(); i++) {
CCharEntity* thPChar = (CCharEntity*)PChar->PParty->m_PAlliance->partyList[a]->members;
if (distance(thPChar->loc.p, PMob->loc.p) < 100 && (charutils::hasTrait(thPChar, TRAIT_TREASURE_HUNTER))) {
thf_in_party = true;
break; // no point continuing to search
}
}
}
}
}
}
if (!thf_in_party) {
highestTH = 0;
}
return highestTH;
}
judging by the source code it only checks if there's a thief within 100 yalms of the mob when it dies. so theoritcally a thief does not have to make action on the mob it just needs to be within exp range.kjLotus wrote:think it only does that if the mob has had TH applied to it (as in atom0s' post), too lazy to check
kjLotus wrote:checked da codez
fourth line you posted
uint8 highestTH = PMob->m_THLvl;
this is zero if a thf never hit
Code: Select all
if (charutils::hasTrait(m_PChar, TRAIT_TREASURE_HUNTER))
{
if (Monster->m_THLvl == 0)
{
Monster->m_THLvl = m_PChar->getMod(MOD_TREASURE_HUNTER);
Monster->m_THPCID = m_PChar->id;
}
else if ((Monster->m_THPCID != m_PChar->id) && (Monster->m_THLvl < m_PChar->getMod(MOD_TREASURE_HUNTER))) Monster->m_THLvl = m_PChar->getMod(MOD_TREASURE_HUNTER)+1;
else if ((Monster->m_THPCID == m_PChar->id) && (Monster->m_THLvl < m_PChar->getMod(MOD_TREASURE_HUNTER))) Monster->m_THLvl = m_PChar->getMod(MOD_TREASURE_HUNTER);
if (Monster->m_THLvl > 12) Monster->m_THLvl = 12;
}
kjLotus wrote:thf does auto attack
ai_char_normal.cpp#2624Code: Select all
if (charutils::hasTrait(m_PChar, TRAIT_TREASURE_HUNTER)) { if (Monster->m_THLvl == 0) { Monster->m_THLvl = m_PChar->getMod(MOD_TREASURE_HUNTER); Monster->m_THPCID = m_PChar->id; } else if ((Monster->m_THPCID != m_PChar->id) && (Monster->m_THLvl < m_PChar->getMod(MOD_TREASURE_HUNTER))) Monster->m_THLvl = m_PChar->getMod(MOD_TREASURE_HUNTER)+1; else if ((Monster->m_THPCID == m_PChar->id) && (Monster->m_THLvl < m_PChar->getMod(MOD_TREASURE_HUNTER))) Monster->m_THLvl = m_PChar->getMod(MOD_TREASURE_HUNTER); if (Monster->m_THLvl > 12) Monster->m_THLvl = 12; }
if someone with TH never attacked, highestTH is just 0