#include "PapyrusActorBase.h" #include "GameForms.h" #include "GameObjects.h" #include "GameReferences.h" #include "GameExtraData.h" #include "GameData.h" #include "GameRTTI.h" namespace papyrusActorBase { TESCombatStyle* GetCombatStyle(TESNPC* thisNPC) { return (thisNPC) ? thisNPC->combatStyle : NULL; } void SetCombatStyle(TESNPC* thisNPC, TESCombatStyle* cs) { if (thisNPC && cs) { thisNPC->combatStyle = cs; } } BGSOutfit* GetOutfit(TESNPC* thisNPC, bool bSleepOutfit) { if (!thisNPC) return NULL; return bSleepOutfit ? thisNPC->sleepOutfit : thisNPC->defaultOutfit; } void SetClass(TESNPC* thisNPC, TESClass* nuClass) { if (thisNPC && nuClass) { thisNPC->npcClass = nuClass; } } UInt32 GetSpellCount(TESNPC* thisNPC) { return (thisNPC) ? thisNPC->spellList.GetSpellCount() : 0; } SpellItem* GetNthSpell(TESNPC* thisNPC, UInt32 n) { return (thisNPC) ? thisNPC->spellList.GetNthSpell(n) : NULL; } BGSVoiceType* GetVoiceType(TESNPC* thisNPC) { return (thisNPC) ? thisNPC->actorData.voiceType : NULL; } void SetVoiceType(TESNPC* thisNPC, BGSVoiceType * newVoice) { if (thisNPC) { thisNPC->actorData.voiceType = newVoice; } } float GetWeight(TESNPC* thisNPC) { return (thisNPC) ? thisNPC->weight : 0.0; } void SetWeight(TESNPC* thisNPC, float weight) { if (thisNPC) { thisNPC->weight = weight; } } float GetHeight(TESNPC* thisNPC) { return (thisNPC) ? thisNPC->height : 0.0; } void SetHeight(TESNPC* thisNPC, float height) { if (thisNPC) { thisNPC->height = height; } } UInt32 GetNumHeadParts(TESNPC* thisNPC) { return (thisNPC) ? thisNPC->numHeadParts : 0; } BGSHeadPart* GetNthHeadPart(TESNPC* thisNPC, UInt32 n) { return (thisNPC && thisNPC->headparts && n < thisNPC->numHeadParts) ? thisNPC->headparts[n] : NULL; } void SetNthHeadPart(TESNPC* thisNPC, BGSHeadPart* headPart, UInt32 n ) { if (thisNPC && n < thisNPC->numHeadParts) { if (headPart && thisNPC->headparts) { thisNPC->headparts[n] = headPart; } } } // Convenience function to return a headPart's index by type SInt32 GetIndexOfHeadPartByType(TESNPC* thisNPC, UInt32 type) { if (thisNPC && thisNPC->headparts) { for(int i = 0; i < thisNPC->numHeadParts; i++) { if(thisNPC->headparts[i] && thisNPC->headparts[i]->type == type && !thisNPC->headparts[i]->IsExtraPart()) { return i; } } } return -1; } UInt32 GetNumOverlayHeadParts(TESNPC* thisNPC) { return (thisNPC) ? GetNumActorBaseOverlays(thisNPC) : 0; } BGSHeadPart* GetNthOverlayHeadPart(TESNPC* thisNPC, UInt32 n) { if (!thisNPC) return NULL; UInt32 numOverlays = GetNumActorBaseOverlays(thisNPC); if(n >= numOverlays) return NULL; BGSHeadPart ** overlays = GetActorBaseOverlays(thisNPC); return overlays[n]; } // Convenience function to return a headPart's index by type SInt32 GetIndexOfOverlayHeadPartByType(TESNPC* thisNPC, UInt32 type) { if (!thisNPC) return NULL; UInt32 numOverlays = GetNumActorBaseOverlays(thisNPC); BGSHeadPart ** overlays = GetActorBaseOverlays(thisNPC); for(UInt32 i = 0; i < numOverlays; i++) { if(overlays[i] && overlays[i]->type == type && !overlays[i]->IsExtraPart()) return i; } return -1; } float GetFaceMorph(TESNPC* thisNPC, UInt32 index) { return (thisNPC && thisNPC->faceMorph && index < TESNPC::FaceMorphs::kNumOptions) ? thisNPC->faceMorph->option[index] : 0.0; } void SetFaceMorph(TESNPC* thisNPC, float value, UInt32 index) { if (thisNPC && thisNPC->faceMorph && index < TESNPC::FaceMorphs::kNumOptions) { thisNPC->faceMorph->option[index] = value; } } UInt32 GetFacePreset(TESNPC* thisNPC, UInt32 index) { return (thisNPC && thisNPC->faceMorph && index < TESNPC::FaceMorphs::kNumPresets) ? thisNPC->faceMorph->presets[index] : 0; } void SetFacePreset(TESNPC* thisNPC, UInt32 value, UInt32 index) { if (thisNPC && thisNPC->faceMorph && index < TESNPC::FaceMorphs::kNumPresets) { thisNPC->faceMorph->presets[index] = value; } } // Hair Color BGSColorForm* GetHairColor(TESNPC* thisNPC) { return (thisNPC && thisNPC->headData) ? thisNPC->headData->hairColor : NULL; } void SetHairColor(TESNPC* thisNPC, BGSColorForm* colorForm) { if (thisNPC && colorForm && thisNPC->headData) { thisNPC->headData->hairColor = colorForm; } } BGSTextureSet * GetFaceTextureSet(TESNPC* thisNPC) { return (thisNPC && thisNPC->headData) ? thisNPC->headData->headTexture : NULL; } void SetFaceTextureSet(TESNPC* thisNPC, BGSTextureSet * textureSet) { if (thisNPC) { thisNPC->SetFaceTexture(textureSet); } } TESObjectARMO * GetSkin(TESNPC* thisNPC) { return (thisNPC) ? thisNPC->skinForm.skin : NULL; } void SetSkin(TESNPC* thisNPC, TESObjectARMO * skin) { if (thisNPC) { thisNPC->skinForm.skin = skin; } } TESObjectARMO * GetSkinFar(TESNPC* thisNPC) { return (thisNPC) ? thisNPC->skinFar : NULL; } void SetSkinFar(TESNPC* thisNPC, TESObjectARMO * skin) { if (thisNPC) { thisNPC->skinFar = skin; } } TESNPC* GetTemplate(TESNPC* thisNPC) { return thisNPC ? thisNPC->GetRootTemplate() : NULL; } } #include "PapyrusVM.h" #include "PapyrusNativeFunctions.h" void papyrusActorBase::RegisterFuncs(VMClassRegistry* registry) { registry->RegisterFunction( new NativeFunction0 ("GetCombatStyle", "ActorBase", papyrusActorBase::GetCombatStyle, registry)); registry->RegisterFunction( new NativeFunction1 ("SetCombatStyle", "ActorBase", papyrusActorBase::SetCombatStyle, registry)); registry->RegisterFunction( new NativeFunction1 ("GetOutfit", "ActorBase", papyrusActorBase::GetOutfit, registry)); registry->RegisterFunction( new NativeFunction1 ("SetClass", "ActorBase", papyrusActorBase::SetClass, registry)); registry->RegisterFunction( new NativeFunction0 ("GetSpellCount", "ActorBase", papyrusActorBase::GetSpellCount, registry)); registry->RegisterFunction( new NativeFunction1 ("GetNthSpell", "ActorBase", papyrusActorBase::GetNthSpell, registry)); registry->RegisterFunction( new NativeFunction0 ("GetVoiceType", "ActorBase", papyrusActorBase::GetVoiceType, registry)); registry->RegisterFunction( new NativeFunction1 ("SetVoiceType", "ActorBase", papyrusActorBase::SetVoiceType, registry)); // Character Creation Information registry->RegisterFunction( new NativeFunction0 ("GetHeight", "ActorBase", papyrusActorBase::GetHeight, registry)); registry->RegisterFunction( new NativeFunction1 ("SetHeight", "ActorBase", papyrusActorBase::SetHeight, registry)); registry->RegisterFunction( new NativeFunction0 ("GetWeight", "ActorBase", papyrusActorBase::GetWeight, registry)); registry->RegisterFunction( new NativeFunction1 ("SetWeight", "ActorBase", papyrusActorBase::SetWeight, registry)); registry->RegisterFunction( new NativeFunction0 ("GetNumHeadParts", "ActorBase", papyrusActorBase::GetNumHeadParts, registry)); registry->RegisterFunction( new NativeFunction1 ("GetNthHeadPart", "ActorBase", papyrusActorBase::GetNthHeadPart, registry)); registry->RegisterFunction( new NativeFunction2 ("SetNthHeadPart", "ActorBase", papyrusActorBase::SetNthHeadPart, registry)); registry->RegisterFunction( new NativeFunction1 ("GetIndexOfHeadPartByType", "ActorBase", papyrusActorBase::GetIndexOfHeadPartByType, registry)); registry->RegisterFunction( new NativeFunction0 ("GetNumOverlayHeadParts", "ActorBase", papyrusActorBase::GetNumOverlayHeadParts, registry)); registry->RegisterFunction( new NativeFunction1 ("GetNthOverlayHeadPart", "ActorBase", papyrusActorBase::GetNthOverlayHeadPart, registry)); registry->RegisterFunction( new NativeFunction1 ("GetIndexOfOverlayHeadPartByType", "ActorBase", papyrusActorBase::GetIndexOfOverlayHeadPartByType, registry)); registry->RegisterFunction( new NativeFunction1 ("GetFaceMorph", "ActorBase", papyrusActorBase::GetFaceMorph, registry)); registry->RegisterFunction( new NativeFunction2 ("SetFaceMorph", "ActorBase", papyrusActorBase::SetFaceMorph, registry)); registry->RegisterFunction( new NativeFunction1 ("GetFacePreset", "ActorBase", papyrusActorBase::GetFacePreset, registry)); registry->RegisterFunction( new NativeFunction2 ("SetFacePreset", "ActorBase", papyrusActorBase::SetFacePreset, registry)); registry->RegisterFunction( new NativeFunction0 ("GetHairColor", "ActorBase", papyrusActorBase::GetHairColor, registry)); registry->RegisterFunction( new NativeFunction1 ("SetHairColor", "ActorBase", papyrusActorBase::SetHairColor, registry)); registry->RegisterFunction( new NativeFunction0 ("GetFaceTextureSet", "ActorBase", papyrusActorBase::GetFaceTextureSet, registry)); registry->RegisterFunction( new NativeFunction1 ("SetFaceTextureSet", "ActorBase", papyrusActorBase::SetFaceTextureSet, registry)); registry->RegisterFunction( new NativeFunction0 ("GetSkin", "ActorBase", papyrusActorBase::GetSkin, registry)); registry->RegisterFunction( new NativeFunction1 ("SetSkin", "ActorBase", papyrusActorBase::SetSkin, registry)); registry->RegisterFunction( new NativeFunction0 ("GetSkinFar", "ActorBase", papyrusActorBase::GetSkinFar, registry)); registry->RegisterFunction( new NativeFunction1 ("SetSkinFar", "ActorBase", papyrusActorBase::SetSkinFar, registry)); registry->RegisterFunction( new NativeFunction0 ("GetTemplate", "ActorBase", papyrusActorBase::GetTemplate, registry)); registry->SetFunctionFlags("ActorBase", "GetCombatStyle", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "SetCombatStyle", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetOutfit", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "SetClass", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetSpellCount", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetNthSpell", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetHeight", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "SetHeight", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetWeight", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "SetWeight", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetNumHeadParts", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetNthHeadPart", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "SetNthHeadPart", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetIndexOfHeadPartByType", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetNumOverlayHeadParts", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetNthOverlayHeadPart", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetIndexOfOverlayHeadPartByType", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetFaceMorph", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "SetFaceMorph", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetFacePreset", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "SetFacePreset", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "SetHairColor", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetHairColor", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetFaceTextureSet", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "SetFaceTextureSet", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetSkin", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "SetSkin", VMClassRegistry::kFunctionFlag_NoWait); registry->SetFunctionFlags("ActorBase", "GetTemplate", VMClassRegistry::kFunctionFlag_NoWait); }