int LuaPlayerObject::getExperienceList(lua_State* L) { DeltaVectorMap<String, int>* expList = realObject->getExperienceList(); lua_newtable(L); for (int i = 0; i < expList->size(); i++) { lua_pushstring(L, expList->getKeyAt(i).toCharArray()); } for (int i = expList->size(); i > 0; i--) { lua_rawseti(L, -i - 1, i); } return 1; }
int LuaPlayerObject::getExperienceList(lua_State* L) { DeltaVectorMap<String, int>* expList = realObject->getExperienceList(); lua_newtable(L); for (int i = 0; i < expList->size(); i++) { const auto& value = expList->getKeyAt(i); lua_pushstring(L, value.toCharArray()); lua_rawseti(L, -2, i + 1); } return 1; }
void SkillManager::updateXpLimits(PlayerObject* ghost) { if (ghost == NULL || !ghost->isPlayerObject()) { return; } VectorMap<String, int>* xpTypeCapList = ghost->getXpTypeCapList(); //Clear all xp limits to the default limits. for (int i = 0; i < defaultXpLimits.size(); ++i) { String xpType = defaultXpLimits.elementAt(i).getKey(); int xpLimit = defaultXpLimits.elementAt(i).getValue(); if (xpTypeCapList->contains(xpType)) { xpTypeCapList->get(xpType) = xpLimit; } else { xpTypeCapList->put(xpType, xpLimit); } } //Iterate over the player skills and update xp limits accordingly. ManagedReference<CreatureObject*> player = cast<CreatureObject*>(ghost->getParentRecursively(SceneObjectType::PLAYERCREATURE).get().get()); if(player == NULL) return; SkillList* playerSkillBoxList = player->getSkillList(); for(int i = 0; i < playerSkillBoxList->size(); ++i) { Skill* skillBox = playerSkillBoxList->get(i); if (skillBox == NULL) continue; if (xpTypeCapList->contains(skillBox->getXpType()) && (xpTypeCapList->get(skillBox->getXpType()) < skillBox->getXpCap())) { xpTypeCapList->get(skillBox->getXpType()) = skillBox->getXpCap(); } } //Iterate over the player xp types and cap all xp types to the limits. DeltaVectorMap<String, int>* experienceList = ghost->getExperienceList(); for (int i = 0; i < experienceList->size(); ++i) { String xpType = experienceList->getKeyAt(i); if (experienceList->get(xpType) > xpTypeCapList->get(xpType)) { ghost->addExperience(xpType, xpTypeCapList->get(xpType) - experienceList->get(xpType), true); } } }