styyx-util 1.0
Utility Header for SKSE Plugin development
Loading...
Searching...
No Matches
st-misc.h
Go to the documentation of this file.
1#pragma once
2
3namespace StyyxUtil
4{
5 struct MiscUtil
6 {
10 static RE::Setting *GetGameSetting(const char *a_setting)
11 {
12 return RE::GameSettingCollection::GetSingleton()
13 ? RE::GameSettingCollection::GetSingleton()->GetSetting(a_setting)
14 : nullptr;
15 }
16
21 template <class T>
22 static void ChangeGameSetting(RE::Setting *setting, const T &value)
23 {
24 if (!setting)
25 {
26 return;
27 }
28
29 switch (setting->GetType())
30 {
31
32 case RE::Setting::Type::kBool:
33 if constexpr (std::is_same_v<T, bool> || std::is_same_v<T, int> || std::is_same_v<T, uint32_t>)
34 {
35 setting->data.b = static_cast<bool>(value);
36 }
37 break;
38
39 case RE::Setting::Type::kFloat:
40 if constexpr (std::is_floating_point_v<T> || std::is_integral_v<T>)
41 {
42 setting->data.f = static_cast<float>(value);
43 }
44 break;
45
46 case RE::Setting::Type::kSignedInteger:
47 if constexpr (std::is_integral_v<T>)
48 {
49 setting->data.i = static_cast<int32_t>(value);
50 }
51 break;
52
53 case RE::Setting::Type::kUnsignedInteger:
54 if constexpr (std::is_integral_v<T>)
55 {
56 setting->data.u = static_cast<std::uint32_t>(value);
57 }
58 break;
59
60 case RE::Setting::Type::kString:
61 if constexpr (std::is_same_v<T, const char *> || std::is_same_v<T, std::string>)
62 {
63 setting->data.s(value);
64 }
65 break;
66
67 default:
68 break;
69 }
70 };
71
80 template <class T>
81 static void SetGMST(const char *gmst, const T &value)
82 {
84 };
85
94 static bool IsModLoaded(const std::string_view& mod_name)
95 {
96 const auto data_handler = RE::TESDataHandler::GetSingleton();
97
98 if (const auto main_file = data_handler->LookupModByName(mod_name); !main_file || main_file->compileIndex == 0xFF)
99 return false;
100 return true;
101 }
102
105 static RE::TESObjectWEAP* GetUnarmedWeapon()
106 {
107 auto** singleton{ reinterpret_cast<RE::TESObjectWEAP**>(REL::ID(401061).address()) };
108 return *singleton;
109 }
110
114 static void RunConsoleCommandOnRef(RE::TESObjectREFR* a_target, const std::string_view a_command)
115 {
116 const auto scriptFactory = RE::IFormFactory::GetConcreteFormFactoryByType<RE::Script>();
117 const auto script = scriptFactory ? scriptFactory->Create() : nullptr;
118 if (!script) return;
119 script->SetCommand(a_command);
120 script->CompileAndRun(a_target);
121 }
122
123#pragma region EnumToString
124
127
131 static const char* EntryPointToString(RE::BGSEntryPoint::ENTRY_POINT entryPoint)
132 {
133 using namespace RE;
134 switch (entryPoint) {
135 case BGSEntryPoint::ENTRY_POINTS::kCalculateWeaponDamage: return "kCalculateWeaponDamage";
136 case BGSEntryPoint::ENTRY_POINTS::kCalculateMyCriticalHitChance: return "kCalculateMyCriticalHitChance";
137 case BGSEntryPoint::ENTRY_POINTS::kCalculateMyCriticalHitDamage: return "kCalculateMyCriticalHitDamage";
138 case BGSEntryPoint::ENTRY_POINTS::kCalculateMineExplodeChance: return "kCalculateMineExplodeChance";
139 case BGSEntryPoint::ENTRY_POINTS::kAdjustLimbDamage: return "kAdjustLimbDamage";
140 case BGSEntryPoint::ENTRY_POINTS::kAdjustBookSkillPoints: return "kAdjustBookSkillPoints";
141 case BGSEntryPoint::ENTRY_POINTS::kModRecoveredHealth: return "kModRecoveredHealth";
142 case BGSEntryPoint::ENTRY_POINTS::kGetShouldAttack: return "kGetShouldAttack";
143 case BGSEntryPoint::ENTRY_POINTS::kModBuyPrices: return "kModBuyPrices";
144 case BGSEntryPoint::ENTRY_POINTS::kAddLeveledListOnDeath: return "kAddLeveledListOnDeath";
145 case BGSEntryPoint::ENTRY_POINTS::kGetMaxCarryWeight: return "kGetMaxCarryWeight";
146 case BGSEntryPoint::ENTRY_POINTS::kModAddictionChance: return "kModAddictionChance";
147 case BGSEntryPoint::ENTRY_POINTS::kModAddictionDuration: return "kModAddictionDuration";
148 case BGSEntryPoint::ENTRY_POINTS::kModPositiveChemDuration: return "kModPositiveChemDuration";
149 case BGSEntryPoint::ENTRY_POINTS::kActivate: return "kActivate";
150 case BGSEntryPoint::ENTRY_POINTS::kIgnoreRunningDuringDetection: return "kIgnoreRunningDuringDetection";
151 case BGSEntryPoint::ENTRY_POINTS::kIgnoreBrokenLock: return "kIgnoreBrokenLock";
152 case BGSEntryPoint::ENTRY_POINTS::kModEnemyCriticalHitChance: return "kModEnemyCriticalHitChance";
153 case BGSEntryPoint::ENTRY_POINTS::kModSneakAttackMult: return "kModSneakAttackMult";
154 case BGSEntryPoint::ENTRY_POINTS::kModMaxPlaceableMines: return "kModMaxPlaceableMines";
155 case BGSEntryPoint::ENTRY_POINTS::kModBowZoom: return "kModBowZoom";
156 case BGSEntryPoint::ENTRY_POINTS::kModRecoverArrowChance: return "kModRecoverArrowChance";
157 case BGSEntryPoint::ENTRY_POINTS::kModSkillUse: return "kModSkillUse";
158 case BGSEntryPoint::ENTRY_POINTS::kModTelekinesisDistance: return "kModTelekinesisDistance";
159 case BGSEntryPoint::ENTRY_POINTS::kModTelekinesisDamageMult: return "kModTelekinesisDamageMult";
160 case BGSEntryPoint::ENTRY_POINTS::kModTelekinesisDamage: return "kModTelekinesisDamage";
161 case BGSEntryPoint::ENTRY_POINTS::kModBashingDamage: return "kModBashingDamage";
162 case BGSEntryPoint::ENTRY_POINTS::kModPowerAttackStamina: return "kModPowerAttackStamina";
163 case BGSEntryPoint::ENTRY_POINTS::kModPowerAttackDamage: return "kModPowerAttackDamage";
164 case BGSEntryPoint::ENTRY_POINTS::kModSpellMagnitude: return "kModSpellMagnitude";
165 case BGSEntryPoint::ENTRY_POINTS::kModSpellDuration: return "kModSpellDuration";
166 case BGSEntryPoint::ENTRY_POINTS::kModSecondaryValueWeight: return "kModSecondaryValueWeight";
167 case BGSEntryPoint::ENTRY_POINTS::kModArmorWeight: return "kModArmorWeight";
168 case BGSEntryPoint::ENTRY_POINTS::kModIncomingStagger: return "kModIncomingStagger";
169 case BGSEntryPoint::ENTRY_POINTS::kModTargetStagger: return "kModTargetStagger";
170 case BGSEntryPoint::ENTRY_POINTS::kModAttackDamage: return "kModAttackDamage";
171 case BGSEntryPoint::ENTRY_POINTS::kModIncomingDamage: return "kModIncomingDamage";
172 case BGSEntryPoint::ENTRY_POINTS::kModTargetDamageResistance: return "kModTargetDamageResistance";
173 case BGSEntryPoint::ENTRY_POINTS::kModSpellCost: return "kModSpellCost";
174 case BGSEntryPoint::ENTRY_POINTS::kModPercentBlocked: return "kModPercentBlocked";
175 case BGSEntryPoint::ENTRY_POINTS::kModShieldDeflectArrowChance: return "kModShieldDeflectArrowChance";
176 case BGSEntryPoint::ENTRY_POINTS::kModIncomingSpellMagnitude: return "kModIncomingSpellMagnitude";
177 case BGSEntryPoint::ENTRY_POINTS::kModIncomingSpellDuration: return "kModIncomingSpellDuration";
178 case BGSEntryPoint::ENTRY_POINTS::kModPlayerIntimidation: return "kModPlayerIntimidation";
179 case BGSEntryPoint::ENTRY_POINTS::kModPlayerReputation: return "kModPlayerReputation";
180 case BGSEntryPoint::ENTRY_POINTS::kModFavorPoints: return "kModFavorPoints";
181 case BGSEntryPoint::ENTRY_POINTS::kModBribeAmount: return "kModBribeAmount";
182 case BGSEntryPoint::ENTRY_POINTS::kModDetectionLight: return "kModDetectionLight";
183 case BGSEntryPoint::ENTRY_POINTS::kModDetectionMovement: return "kModDetectionMovement";
184 case BGSEntryPoint::ENTRY_POINTS::kModSoulGemRecharge: return "kModSoulGemRecharge";
185 case BGSEntryPoint::ENTRY_POINTS::kSetSweepAttack: return "kSetSweepAttack";
186 case BGSEntryPoint::ENTRY_POINTS::kApplyCombatHitSpell: return "kApplyCombatHitSpell";
187 case BGSEntryPoint::ENTRY_POINTS::kApplyBashingSpell: return "kApplyBashingSpell";
188 case BGSEntryPoint::ENTRY_POINTS::kApplyReanimateSpell: return "kApplyReanimateSpell";
189 case BGSEntryPoint::ENTRY_POINTS::kSetBooleanGraphVariable: return "kSetBooleanGraphVariable";
190 case BGSEntryPoint::ENTRY_POINTS::kModSpellCastingSoundEvent: return "kModSpellCastingSoundEvent";
191 case BGSEntryPoint::ENTRY_POINTS::kModPickpocketChance: return "kModPickpocketChance";
192 case BGSEntryPoint::ENTRY_POINTS::kModDetectionSneakSkill: return "kModDetectionSneakSkill";
193 case BGSEntryPoint::ENTRY_POINTS::kModFallingDamage: return "kModFallingDamage";
194 case BGSEntryPoint::ENTRY_POINTS::kModLockpickSweetSpot: return "kModLockpickSweetSpot";
195 case BGSEntryPoint::ENTRY_POINTS::kModSellPrices: return "kModSellPrices";
196 case BGSEntryPoint::ENTRY_POINTS::kCanPickpocketEquippedItem: return "kCanPickpocketEquippedItem";
197 case BGSEntryPoint::ENTRY_POINTS::kModLockpickLevelAllowed: return "kModLockpickLevelAllowed";
198 case BGSEntryPoint::ENTRY_POINTS::kSetLockpickStartingArc: return "kSetLockpickStartingArc";
199 case BGSEntryPoint::ENTRY_POINTS::kSetProgressionPicking: return "kSetProgressionPicking";
200 case BGSEntryPoint::ENTRY_POINTS::kMakeLockpicksUnbreakable: return "kMakeLockpicksUnbreakable";
201 case BGSEntryPoint::ENTRY_POINTS::kModAlchemyEffectiveness: return "kModAlchemyEffectiveness";
202 case BGSEntryPoint::ENTRY_POINTS::kApplyWeaponSwingSpell: return "kApplyWeaponSwingSpell";
203 case BGSEntryPoint::ENTRY_POINTS::kModCommandedActorLimit: return "kModCommandedActorLimit";
204 case BGSEntryPoint::ENTRY_POINTS::kApplySneakingSpell: return "kApplySneakingSpell";
205 case BGSEntryPoint::ENTRY_POINTS::kModPlayerMagicSlowdown: return "kModPlayerMagicSlowdown";
206 case BGSEntryPoint::ENTRY_POINTS::kModWardMagickaAbsorptionPct: return "kModWardMagickaAbsorptionPct";
207 case BGSEntryPoint::ENTRY_POINTS::kModInitialIngredientEffectsLearned: return "kModInitialIngredientEffectsLearned";
208 case BGSEntryPoint::ENTRY_POINTS::kPurifyAlchemyIngredients: return "kPurifyAlchemyIngredients";
209 case BGSEntryPoint::ENTRY_POINTS::kFilterActivation: return "kFilterActivation";
210 case BGSEntryPoint::ENTRY_POINTS::kCanDualCastSpell: return "kCanDualCastSpell";
211 case BGSEntryPoint::ENTRY_POINTS::kModTemperingHealth: return "kModTemperingHealth";
212 case BGSEntryPoint::ENTRY_POINTS::kModEnchantmentPower: return "kModEnchantmentPower";
213 case BGSEntryPoint::ENTRY_POINTS::kModSoulPctCapturedToWeapon: return "kModSoulPctCapturedToWeapon";
214 case BGSEntryPoint::ENTRY_POINTS::kModSoulGemEnchanting: return "kModSoulGemEnchanting";
215 case BGSEntryPoint::ENTRY_POINTS::kModNumberAppliedEnchantmentsAllowed: return "kModNumberAppliedEnchantmentsAllowed";
216 case BGSEntryPoint::ENTRY_POINTS::kSetActivateLabel: return "kSetActivateLabel";
217 case BGSEntryPoint::ENTRY_POINTS::kModShoutOK: return "kModShoutOK";
218 case BGSEntryPoint::ENTRY_POINTS::kModPoisonDoseCount: return "kModPoisonDoseCount";
219 case BGSEntryPoint::ENTRY_POINTS::kShouldApplyPlacedItem: return "kShouldApplyPlacedItem";
220 case BGSEntryPoint::ENTRY_POINTS::kModArmorRating: return "kModArmorRating";
221 case BGSEntryPoint::ENTRY_POINTS::kModLockpickingCrimeChance: return "kModLockpickingCrimeChance";
222 case BGSEntryPoint::ENTRY_POINTS::kModIngredientsHarvested: return "kModIngredientsHarvested";
223 case BGSEntryPoint::ENTRY_POINTS::kModSpellRange_TargetLoc: return "kModSpellRange_TargetLoc";
224 case BGSEntryPoint::ENTRY_POINTS::kModPotionsCreated: return "kModPotionsCreated";
225 case BGSEntryPoint::ENTRY_POINTS::kModLockpickingKeyRewardChance: return "kModLockpickingKeyRewardChance";
226 case BGSEntryPoint::ENTRY_POINTS::kAllowMountActor: return "kAllowMountActor";
227 default: return "UnknownEntryPoint";
228 }
229 }
230
234 static const char* WeaponTypeToString(const RE::WEAPON_TYPE a_type)
235 {
236 switch (a_type)
237 {
238 case RE::WEAPON_TYPE::kBow:
239 return "kBow";
240 case RE::WEAPON_TYPE::kHandToHandMelee:
241 return "kHandToHandMelee";
242 case RE::WEAPON_TYPE::kOneHandAxe:
243 return "kOneHandAxe";
244 case RE::WEAPON_TYPE::kOneHandDagger:
245 return "kOneHandDagger";
246 case RE::WEAPON_TYPE::kOneHandMace:
247 return "kOneHandMace";
248 case RE::WEAPON_TYPE::kOneHandSword:
249 return "kOneHandSword";
250 case RE::WEAPON_TYPE::kTwoHandAxe:
251 return "kTwoHandAxe";
252 case RE::WEAPON_TYPE::kTwoHandSword:
253 return "kTwoHandSword";
254 case RE::WEAPON_TYPE::kCrossbow:
255 return "kCrossbow";
256 case RE::WEAPON_TYPE::kStaff:
257 return "kStaff";
258 default:
259 return "Unknown";
260 }
261 }
262
266 static const char* AttackStateToString(RE::ATTACK_STATE_ENUM state) {
267
268 switch (state) {
269 case RE::ATTACK_STATE_ENUM::kNone:
270 return "kNone";
271 case RE::ATTACK_STATE_ENUM::kDraw:
272 return "kDraw";
273 case RE::ATTACK_STATE_ENUM::kSwing:
274 return "kSwing";
275 case RE::ATTACK_STATE_ENUM::kHit:
276 return "kHit";
277 case RE::ATTACK_STATE_ENUM::kNextAttack:
278 return "kNextAttack";
279 case RE::ATTACK_STATE_ENUM::kFollowThrough:
280 return "kFollowThrough";
281 case RE::ATTACK_STATE_ENUM::kBash:
282 return "kBash";
283 case RE::ATTACK_STATE_ENUM::kBowDraw:
284 return "kBowDraw";
285 case RE::ATTACK_STATE_ENUM::kBowAttached:
286 return "kBowAttached";
287 case RE::ATTACK_STATE_ENUM::kBowDrawn:
288 return "kBowDrawn";
289 case RE::ATTACK_STATE_ENUM::kBowReleasing:
290 return "kBowReleasing";
291 case RE::ATTACK_STATE_ENUM::kBowReleased:
292 return "kBowReleased";
293 case RE::ATTACK_STATE_ENUM::kBowNextAttack:
294 return "kBowNextAttack";
295 case RE::ATTACK_STATE_ENUM::kBowFollowThrough:
296 return "kBowFollowThrough";
297 case RE::ATTACK_STATE_ENUM::kFire:
298 return "kFire";
299 case RE::ATTACK_STATE_ENUM::kFiring:
300 return "kFiring";
301 case RE::ATTACK_STATE_ENUM::kFired:
302 return "kFired";
303 default:
304 return "Unknown Attack State";
305
306 }
307 }
308
310
311#pragma endregion
312 };
313}
static const char * WeaponTypeToString(const RE::WEAPON_TYPE a_type)
Get the name of a weapon type.
Definition st-misc.h:234
static const char * EntryPointToString(RE::BGSEntryPoint::ENTRY_POINT entryPoint)
Get the entry point name.
Definition st-misc.h:131
static const char * AttackStateToString(RE::ATTACK_STATE_ENUM state)
Get the name of a specified attack state.
Definition st-misc.h:266
Definition st-actor.h:7
Definition st-misc.h:6
static bool IsModLoaded(const std::string_view &mod_name)
Check if a mod is loaded by its full file name.
Definition st-misc.h:94
static void ChangeGameSetting(RE::Setting *setting, const T &value)
Helper template to easily set a game setting to a value.
Definition st-misc.h:22
static void RunConsoleCommandOnRef(RE::TESObjectREFR *a_target, const std::string_view a_command)
Run console command on reference.
Definition st-misc.h:114
static RE::TESObjectWEAP * GetUnarmedWeapon()
Get the unarmed weapon pointer.
Definition st-misc.h:105
static void SetGMST(const char *gmst, const T &value)
Set a game setting (by name) to a specific value.
Definition st-misc.h:81
static RE::Setting * GetGameSetting(const char *a_setting)
Helper function to get Game settings by name.
Definition st-misc.h:10