int Game::GetXPFromCR(int cr) { if (!crtable) LoadCRTable(); if (crtable) { int level = GetPartyLevel(true); if (cr>=MAX_CRLEVEL) { cr=MAX_CRLEVEL-1; } print("Challenge Rating: %d, party level: %d ", cr, level); return crtable[level][cr]; } printMessage("Game","Cannot find moncrate.2da!\n", LIGHT_RED); return 0; }
int Game::GetXPFromCR(int cr) { if (!crtable) LoadCRTable(); if (crtable) { int size = GetPartySize(true); if (!size) return 0; // everyone just died anyway int level = GetPartyLevel(true) / size; if (cr+1>=MAX_CRLEVEL) { cr=MAX_CRLEVEL-2; } Log(MESSAGE, "Game", "Challenge Rating: %d, party level: %d", cr, level); // it also has a column for cr 0.25 and 0.5 return crtable[level-1][cr+1]; } Log(ERROR, "Game", "Cannot find moncrate.2da!"); return 0; }
// check if the actor is in npclevel.2da and replace accordingly bool Game::CheckForReplacementActor(int i) { if (core->InCutSceneMode() || npclevels.empty()) { return false; } Actor* act = NPCs[i]; ieDword level = GetPartyLevel(false) / GetPartySize(false); if (!(act->Modified[IE_MC_FLAGS]&MC_BEENINPARTY) && !(act->Modified[IE_STATE_ID]&STATE_DEAD) && act->GetXPLevel(false) < level) { ieResRef newcre = "****"; // default table value std::vector<std::vector<char *> >::iterator it; for (it = npclevels.begin(); it != npclevels.end(); it++) { if (!stricmp((*it)[0], act->GetScriptName()) && (level > 2)) { // the tables have entries only up to level 24 ieDword safeLevel = npclevels[0].size() - 1; if (level < safeLevel) { safeLevel = level; } CopyResRef(newcre, (*it)[safeLevel-2]); break; } } if (stricmp(newcre, "****")) { int pos = gamedata->LoadCreature(newcre, 0, false, act->version); if (pos < 0) { error("Game::CheckForReplacementActor", "LoadCreature failed: pos is negative!\n"); } else { Actor *newact = GetNPC(pos); if (!newact) { error("Game::CheckForReplacementActor", "GetNPC failed: cannot find act!\n"); } else { newact->Pos = act->Pos; // the map is not loaded yet, so no SetPosition newact->TalkCount = act->TalkCount; newact->InteractCount = act->InteractCount; CopyResRef(newact->Area, act->Area); DelNPC(InStore(act), true); return true; } } } } return false; }