static bool GetRaceValue_Execute(COMMAND_ARGS, UInt32 whichVal) { *result = 0; UInt32 intVal = 0; TESRace* race = 0; UInt32 isFemaleArg = 0; // male ExtractArgs(paramInfo, arg1, opcodeOffsetPtr, thisObj, arg3, scriptObj, eventList, &intVal, &race, &isFemaleArg); bool bIsFemale = (isFemaleArg == 0) ? false : true; if (!race) { if (!thisObj) return true; TESNPC* npc = (TESNPC*)Oblivion_DynamicCast(thisObj->baseForm, 0, RTTI_TESForm, RTTI_TESNPC, 0); if (!npc) return true; race = npc->race.race; if (!race) return true; bIsFemale = npc->actorBaseData.IsFemale(); } switch (whichVal) { case kRace_Attribute: { if (intVal > kActorVal_Luck) return true; *result = race->GetBaseAttribute(intVal, bIsFemale); break; } case kRace_BonusSkill: { if (!IsSkill(intVal)) return true; *result = race->GetSkillBonus(intVal); break; } case kRace_IsBonusSkill: { if (!IsSkill(intVal)) return true; *result = race->IsBonusSkill(intVal); break; } case kRace_NthBonusSkill: { if (intVal > 6) return true; *result = race->GetNthBonusSkill(intVal); break; } case kRace_NthSpell: { UInt32* refResult = (UInt32*)result; SpellListVisitor visitor(&race->spells.spellList); TESForm* form = visitor.GetNthInfo(intVal); SpellItem* spell = (SpellItem*)Oblivion_DynamicCast(form, 0, RTTI_TESForm, RTTI_SpellItem, 0); if (spell) { *refResult = spell->refID; } break; } } return true; }
static bool Cmd_GetRequiredSkillExp_Execute(COMMAND_ARGS) { SInt32 av = -1; *result = -1.0; if (ExtractArgs(PASS_EXTRACT_ARGS, &av) && IsSkill(av) && *g_thePlayer) { av -= kActorVal_Armorer; *result = (*g_thePlayer)->requiredSkillExp[av]; } return true; }
static bool Cmd_GetPlayerSkillAdvances_Execute(COMMAND_ARGS) { *result = 0; UInt32 valSkill = 0; if (!ExtractArgs(paramInfo, arg1, opcodeOffsetPtr, thisObj, arg3, scriptObj, eventList, &valSkill)) return true; if (!IsSkill(valSkill)) return true; *result = (*g_thePlayer)->GetSkillAdvanceCount(valSkill); return true; }
// (expValue:float) GetPlayerSkillUse skill:actor value static bool Cmd_GetPlayerSkillUse_Execute(COMMAND_ARGS) { *result = 0; UInt32 valSkill = 0; if (!ExtractArgs(paramInfo, arg1, opcodeOffsetPtr, thisObj, arg3, scriptObj, eventList, &valSkill)) return true; if (!IsSkill(valSkill)) return true; *result = (*g_thePlayer)->skillExp[valSkill - kActorVal_Armorer]; return true; }
// (expValue:float) IncrementPlayerSkillUse skill:actor value whichTrigger static bool Cmd_ModPlayerSkillExp_Execute(COMMAND_ARGS) { *result = 0; UInt32 valSkill = 0; float expChange = 0.0; if (!ExtractArgs(paramInfo, arg1, opcodeOffsetPtr, thisObj, arg3, scriptObj, eventList, &valSkill, &expChange)) return true; if (!IsSkill(valSkill)) return true; (*g_thePlayer)->ChangeExperience(valSkill, expChange); *result = (*g_thePlayer)->skillExp[valSkill-kActorVal_Armorer]; return true; }
// (expValue:float) IncrementPlayerSkillUse skill:actor value whichTrigger static bool Cmd_IncrementPlayerSkillUse_Execute(COMMAND_ARGS) { *result = 0; UInt32 valSkill = 0; UInt32 whichUse = 0; float howManyTimes = 1.0; if (!ExtractArgs(paramInfo, arg1, opcodeOffsetPtr, thisObj, arg3, scriptObj, eventList, &valSkill, &whichUse, &howManyTimes)) return true; if (!IsSkill(valSkill)) return true; (*g_thePlayer)->ModExperience(valSkill, whichUse, howManyTimes); *result = (*g_thePlayer)->skillExp[valSkill-kActorVal_Armorer]; return true; }
static bool Cmd_IsMajor_Execute(COMMAND_ARGS) { *result = 0; UInt32 skill = 0; TESClass* theClass = NULL; ExtractArgs(paramInfo, arg1, opcodeOffsetPtr, thisObj, arg3, scriptObj, eventList, &skill, &theClass); if (!IsSkill(skill)) return true; if (!theClass) { if (!thisObj) return true; TESNPC* npc = (TESNPC *)Oblivion_DynamicCast(thisObj->baseForm, 0, RTTI_TESForm, RTTI_TESNPC, 0); if (!npc || !npc->npcClass) return true; theClass = npc->npcClass; } if (theClass->IsMajorSkill(skill)) { *result = 1; } return true; }