Skip to content

Commit 3a5c813

Browse files
committed
Fixed issue where Archery actor value did not convert to "Marksman" string
Fixed issue where Speech actor value did not convert to "Speechcraft" string
1 parent 8ae672b commit 3a5c813

File tree

3 files changed

+6
-345
lines changed

3 files changed

+6
-345
lines changed

src/Papyrus/ActorValueHelper.cpp

Lines changed: 2 additions & 343 deletions
Original file line numberDiff line numberDiff line change
@@ -2,347 +2,6 @@
22

33
namespace ActorValueHelper
44
{
5-
auto StringToActorValue(const RE::BSFixedString& a_string) -> RE::ActorValue
6-
{
7-
std::string S(a_string);
8-
9-
std::transform(S.begin(), S.end(), S.begin(),
10-
[](unsigned char c) { return std::tolower(c); });
11-
12-
if (S == "none")
13-
return RE::ActorValue::kNone;
14-
if (S == "aggression")
15-
return RE::ActorValue::kAggresion;
16-
if (S == "confidence")
17-
return RE::ActorValue::kConfidence;
18-
if (S == "energy")
19-
return RE::ActorValue::kEnergy;
20-
if (S == "morality")
21-
return RE::ActorValue::kMorality;
22-
if (S == "mood")
23-
return RE::ActorValue::kMood;
24-
if (S == "assistance")
25-
return RE::ActorValue::kAssistance;
26-
if (S == "onehanded")
27-
return RE::ActorValue::kOneHanded;
28-
if (S == "twohanded")
29-
return RE::ActorValue::kTwoHanded;
30-
if (S == "archery")
31-
return RE::ActorValue::kArchery;
32-
if (S == "block")
33-
return RE::ActorValue::kBlock;
34-
if (S == "smithing")
35-
return RE::ActorValue::kSmithing;
36-
if (S == "heavyarmor")
37-
return RE::ActorValue::kHeavyArmor;
38-
if (S == "lightarmor")
39-
return RE::ActorValue::kLightArmor;
40-
if (S == "pickpocket")
41-
return RE::ActorValue::kPickpocket;
42-
if (S == "lockpicking")
43-
return RE::ActorValue::kLockpicking;
44-
if (S == "sneak")
45-
return RE::ActorValue::kSneak;
46-
if (S == "alchemy")
47-
return RE::ActorValue::kAlchemy;
48-
if (S == "speech")
49-
return RE::ActorValue::kSpeech;
50-
if (S == "alteration")
51-
return RE::ActorValue::kAlteration;
52-
if (S == "conjuration")
53-
return RE::ActorValue::kConjuration;
54-
if (S == "destruction")
55-
return RE::ActorValue::kDestruction;
56-
if (S == "illusion")
57-
return RE::ActorValue::kIllusion;
58-
if (S == "restoration")
59-
return RE::ActorValue::kRestoration;
60-
if (S == "enchanting")
61-
return RE::ActorValue::kEnchanting;
62-
if (S == "health")
63-
return RE::ActorValue::kHealth;
64-
if (S == "magicka")
65-
return RE::ActorValue::kMagicka;
66-
if (S == "stamina")
67-
return RE::ActorValue::kStamina;
68-
if (S == "healrate")
69-
return RE::ActorValue::kHealRate;
70-
if (S == "magickarate")
71-
return RE::ActorValue::kMagickaRate;
72-
if (S == "staminarate")
73-
return RE::ActorValue::KStaminaRate;
74-
if (S == "speedmult")
75-
return RE::ActorValue::kSpeedMult;
76-
if (S == "inventoryweight")
77-
return RE::ActorValue::kInventoryWeight;
78-
if (S == "carryweight")
79-
return RE::ActorValue::kCarryWeight;
80-
if (S == "criticalchance")
81-
return RE::ActorValue::kCriticalChance;
82-
if (S == "meleedamage")
83-
return RE::ActorValue::kMeleeDamage;
84-
if (S == "unarmeddamage")
85-
return RE::ActorValue::kUnarmedDamage;
86-
if (S == "mass")
87-
return RE::ActorValue::kMass;
88-
if (S == "voicepoints")
89-
return RE::ActorValue::kVoicePoints;
90-
if (S == "voicerate")
91-
return RE::ActorValue::kVoiceRate;
92-
if (S == "damageresist")
93-
return RE::ActorValue::kDamageResist;
94-
if (S == "poisonresist")
95-
return RE::ActorValue::kPoisonResist;
96-
if (S == "resistfire")
97-
return RE::ActorValue::kResistFire;
98-
if (S == "resistshock")
99-
return RE::ActorValue::kResistShock;
100-
if (S == "resistfrost")
101-
return RE::ActorValue::kResistFrost;
102-
if (S == "resistmagic")
103-
return RE::ActorValue::kResistMagic;
104-
if (S == "resistdisease")
105-
return RE::ActorValue::kResistDisease;
106-
if (S == "perceptioncondition")
107-
return RE::ActorValue::kUnknown46;
108-
if (S == "endurancecondition")
109-
return RE::ActorValue::kUnknown47;
110-
if (S == "leftattackcondition")
111-
return RE::ActorValue::kUnknown48;
112-
if (S == "rightattackcondition")
113-
return RE::ActorValue::kUnknown49;
114-
if (S == "leftmobilitycondition")
115-
return RE::ActorValue::kUnknown50;
116-
if (S == "rightmobilitycondition")
117-
return RE::ActorValue::kUnknown51;
118-
if (S == "braincondition")
119-
return RE::ActorValue::kUnknown52;
120-
if (S == "paralysis")
121-
return RE::ActorValue::kParalysis;
122-
if (S == "invisibility")
123-
return RE::ActorValue::kInvisibility;
124-
if (S == "nighteye")
125-
return RE::ActorValue::kNightEye;
126-
if (S == "detectliferange")
127-
return RE::ActorValue::kDetectLifeRange;
128-
if (S == "waterbreathing")
129-
return RE::ActorValue::kWaterBreathing;
130-
if (S == "waterwalking")
131-
return RE::ActorValue::kWaterWalking;
132-
if (S == "unknown59")
133-
return RE::ActorValue::kUnknown59;
134-
if (S == "fame")
135-
return RE::ActorValue::kFame;
136-
if (S == "infamy")
137-
return RE::ActorValue::kInfamy;
138-
if (S == "jumpingbonus")
139-
return RE::ActorValue::kJumpingBonus;
140-
if (S == "wardpower")
141-
return RE::ActorValue::kWardPower;
142-
if (S == "rightitemcharge")
143-
return RE::ActorValue::kRightItemCharge;
144-
if (S == "armorperks")
145-
return RE::ActorValue::kArmorPerks;
146-
if (S == "shieldperks")
147-
return RE::ActorValue::kShieldPerks;
148-
if (S == "warddeflection")
149-
return RE::ActorValue::kWardDeflection;
150-
if (S == "variable01")
151-
return RE::ActorValue::kVariable01;
152-
if (S == "variable02")
153-
return RE::ActorValue::kVariable02;
154-
if (S == "variable03")
155-
return RE::ActorValue::kVariable03;
156-
if (S == "variable04")
157-
return RE::ActorValue::kVariable04;
158-
if (S == "variable05")
159-
return RE::ActorValue::kVariable05;
160-
if (S == "variable06")
161-
return RE::ActorValue::kVariable06;
162-
if (S == "variable07")
163-
return RE::ActorValue::kVariable07;
164-
if (S == "variable08")
165-
return RE::ActorValue::kVariable08;
166-
if (S == "variable09")
167-
return RE::ActorValue::kVariable09;
168-
if (S == "variable10")
169-
return RE::ActorValue::kVariable10;
170-
if (S == "bowspeedbonus")
171-
return RE::ActorValue::kBowSpeedBonus;
172-
if (S == "favoractive")
173-
return RE::ActorValue::kFavorActive;
174-
if (S == "favorsperday")
175-
return RE::ActorValue::kFavorsPerDay;
176-
if (S == "favorsperdaytimer")
177-
return RE::ActorValue::kFavorsPerDayTimer;
178-
if (S == "leftitemcharge")
179-
return RE::ActorValue::kLeftItemCharge;
180-
if (S == "absorbchance")
181-
return RE::ActorValue::kAbsorbChance;
182-
if (S == "blindness")
183-
return RE::ActorValue::kBlindness;
184-
if (S == "weaponspeedmult")
185-
return RE::ActorValue::kWeaponSpeedMult;
186-
if (S == "shoutrecoverymult")
187-
return RE::ActorValue::kShoutRecoveryMult;
188-
if (S == "bowstaggerbonus")
189-
return RE::ActorValue::kBowStaggerBonus;
190-
if (S == "telekinesis")
191-
return RE::ActorValue::kTelekinesis;
192-
if (S == "favorpointsbonus")
193-
return RE::ActorValue::kFavorPointsBonus;
194-
if (S == "lastbribedintimidated")
195-
return RE::ActorValue::kLastBribedIntimidated;
196-
if (S == "lastflattered")
197-
return RE::ActorValue::kLastFlattered;
198-
if (S == "movementnoisemult")
199-
return RE::ActorValue::kMovementNoiseMult;
200-
if (S == "bypassvendorstolencheck")
201-
return RE::ActorValue::kBypassVendorStolenCheck;
202-
if (S == "bypassvendorkeywordcheck")
203-
return RE::ActorValue::kBypassVendorKeywordCheck;
204-
if (S == "waitingforplayer")
205-
return RE::ActorValue::kWaitingForPlayer;
206-
if (S == "onehandedmodifier")
207-
return RE::ActorValue::kOneHandedModifier;
208-
if (S == "twohandedmodifier")
209-
return RE::ActorValue::kTwoHandedModifier;
210-
if (S == "marksmanmodifier")
211-
return RE::ActorValue::kMarksmanModifier;
212-
if (S == "blockmodifier")
213-
return RE::ActorValue::kBlockModifier;
214-
if (S == "smithingmodifier")
215-
return RE::ActorValue::kSmithingModifier;
216-
if (S == "heavyarmormodifier")
217-
return RE::ActorValue::kHeavyArmorModifier;
218-
if (S == "lightarmormodifier")
219-
return RE::ActorValue::kLightArmorModifier;
220-
if (S == "pickpocketmodifier")
221-
return RE::ActorValue::kPickpocketModifier;
222-
if (S == "lockpickingmodifier")
223-
return RE::ActorValue::kLockpickingModifier;
224-
if (S == "sneakingmodifier")
225-
return RE::ActorValue::kSneakingModifier;
226-
if (S == "alchemymodifier")
227-
return RE::ActorValue::kAlchemyModifier;
228-
if (S == "speechcraftmodifier")
229-
return RE::ActorValue::kSpeechcraftModifier;
230-
if (S == "alterationmodifier")
231-
return RE::ActorValue::kAlterationModifier;
232-
if (S == "conjurationmodifier")
233-
return RE::ActorValue::kConjurationModifier;
234-
if (S == "destructionmodifier")
235-
return RE::ActorValue::kDestructionModifier;
236-
if (S == "illusionmodifier")
237-
return RE::ActorValue::kIllusionModifier;
238-
if (S == "restorationmodifier")
239-
return RE::ActorValue::kRestorationModifier;
240-
if (S == "enchantingmodifier")
241-
return RE::ActorValue::kEnchantingModifier;
242-
if (S == "onehandedskilladvance")
243-
return RE::ActorValue::kOneHandedSkillAdvance;
244-
if (S == "twohandedskilladvance")
245-
return RE::ActorValue::kTwoHandedSkillAdvance;
246-
if (S == "marksmanskilladvance")
247-
return RE::ActorValue::kMarksmanSkillAdvance;
248-
if (S == "blockskilladvance")
249-
return RE::ActorValue::kBlockSkillAdvance;
250-
if (S == "smithingskilladvance")
251-
return RE::ActorValue::kSmithingSkillAdvance;
252-
if (S == "heavyarmorskilladvance")
253-
return RE::ActorValue::kHeavyArmorSkillAdvance;
254-
if (S == "lightarmorskilladvance")
255-
return RE::ActorValue::kLightArmorSkillAdvance;
256-
if (S == "pickpocketskilladvance")
257-
return RE::ActorValue::kPickpocketSkillAdvance;
258-
if (S == "lockpickingskilladvance")
259-
return RE::ActorValue::kLockpickingSkillAdvance;
260-
if (S == "sneakingskilladvance")
261-
return RE::ActorValue::kSneakingSkillAdvance;
262-
if (S == "alchemyskilladvance")
263-
return RE::ActorValue::kAlchemySkillAdvance;
264-
if (S == "speechcraftskilladvance")
265-
return RE::ActorValue::kSpeechcraftSkillAdvance;
266-
if (S == "alterationskilladvance")
267-
return RE::ActorValue::kAlterationSkillAdvance;
268-
if (S == "conjurationskilladvance")
269-
return RE::ActorValue::kConjurationSkillAdvance;
270-
if (S == "destructionskilladvance")
271-
return RE::ActorValue::kDestructionSkillAdvance;
272-
if (S == "illusionskilladvance")
273-
return RE::ActorValue::kIllusionSkillAdvance;
274-
if (S == "restorationskilladvance")
275-
return RE::ActorValue::kRestorationSkillAdvance;
276-
if (S == "enchantingskilladvance")
277-
return RE::ActorValue::kEnchantingSkillAdvance;
278-
if (S == "leftweaponspeedmultiply")
279-
return RE::ActorValue::kLeftWeaponSpeedMultiply;
280-
if (S == "dragonsouls")
281-
return RE::ActorValue::kDragonSouls;
282-
if (S == "combathealthregenmultiply")
283-
return RE::ActorValue::kCombatHealthRegenMultiply;
284-
if (S == "onehandedpowermodifier")
285-
return RE::ActorValue::kOneHandedPowerModifier;
286-
if (S == "twohandedpowermodifier")
287-
return RE::ActorValue::kTwoHandedPowerModifier;
288-
if (S == "marksmanpowermodifier")
289-
return RE::ActorValue::kMarksmanPowerModifier;
290-
if (S == "blockpowermodifier")
291-
return RE::ActorValue::kBlockPowerModifier;
292-
if (S == "smithingpowermodifier")
293-
return RE::ActorValue::kSmithingPowerModifier;
294-
if (S == "heavyarmorpowermodifier")
295-
return RE::ActorValue::kHeavyArmorPowerModifier;
296-
if (S == "lightarmorpowermodifier")
297-
return RE::ActorValue::kLightArmorPowerModifier;
298-
if (S == "pickpocketpowermodifier")
299-
return RE::ActorValue::kPickpocketPowerModifier;
300-
if (S == "lockpickingpowermodifier")
301-
return RE::ActorValue::kLockpickingPowerModifier;
302-
if (S == "sneakingpowermodifier")
303-
return RE::ActorValue::kSneakingPowerModifier;
304-
if (S == "alchemypowermodifier")
305-
return RE::ActorValue::kAlchemyPowerModifier;
306-
if (S == "speechcraftpowermodifier")
307-
return RE::ActorValue::kSpeechcraftPowerModifier;
308-
if (S == "alterationpowermodifier")
309-
return RE::ActorValue::kAlterationPowerModifier;
310-
if (S == "conjurationpowermodifier")
311-
return RE::ActorValue::kConjurationPowerModifier;
312-
if (S == "destructionpowermodifier")
313-
return RE::ActorValue::kDestructionPowerModifier;
314-
if (S == "illusionpowermodifier")
315-
return RE::ActorValue::kIllusionPowerModifier;
316-
if (S == "restorationpowermodifier")
317-
return RE::ActorValue::kRestorationPowerModifier;
318-
if (S == "enchantingpowermodifier")
319-
return RE::ActorValue::kEnchantingPowerModifier;
320-
if (S == "dragonrend")
321-
return RE::ActorValue::kDragonRend;
322-
if (S == "attackdamagemult")
323-
return RE::ActorValue::kAttackDamageMult;
324-
if (S == "healratemult")
325-
return RE::ActorValue::kHealRateMult;
326-
if (S == "magickaratemult")
327-
return RE::ActorValue::kMagickaRateMult;
328-
if (S == "staminaratemult")
329-
return RE::ActorValue::kStaminaRateMult;
330-
if (S == "werewolfperks")
331-
return RE::ActorValue::kWerewolfPerks;
332-
if (S == "vampireperks")
333-
return RE::ActorValue::kVampirePerks;
334-
if (S == "grabactoroffset")
335-
return RE::ActorValue::kGrabActorOffset;
336-
if (S == "grabbed")
337-
return RE::ActorValue::kGrabbed;
338-
if (S == "deprecated05")
339-
return RE::ActorValue::kUnknown162;
340-
if (S == "reflectdamage")
341-
return RE::ActorValue::kReflectDamage;
342-
343-
return RE::ActorValue::kNone;
344-
}
345-
3465
auto ActorValueToString(const RE::ActorValue a_actorValue) -> RE::BSFixedString
3476
{
3487
switch (a_actorValue) {
@@ -365,7 +24,7 @@ namespace ActorValueHelper
36524
case RE::ActorValue::kTwoHanded:
36625
return "TwoHanded";
36726
case RE::ActorValue::kArchery:
368-
return "Archery";
27+
return "Marksman";
36928
case RE::ActorValue::kBlock:
37029
return "Block";
37130
case RE::ActorValue::kSmithing:
@@ -383,7 +42,7 @@ namespace ActorValueHelper
38342
case RE::ActorValue::kAlchemy:
38443
return "Alchemy";
38544
case RE::ActorValue::kSpeech:
386-
return "Speech";
45+
return "Speechcraft";
38746
case RE::ActorValue::kAlteration:
38847
return "Alteration";
38948
case RE::ActorValue::kConjuration:

src/Papyrus/PapyrusObjectREFR.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,8 @@ namespace PapyrusObjectREFR
188188
}
189189

190190
if (const auto actor = a_ref->As<RE::Actor>(); actor) {
191-
auto actorValue = ActorValueHelper::StringToActorValue(a_actorValue);
191+
const auto actorValueId = RE::GetActorValueIdFromName(a_actorValue.c_str());
192+
const auto actorValue = static_cast<RE::ActorValue>(actorValueId);
192193
return actor->GetPermanentActorValue(actorValue);
193194
}
194195

src/Papyrus/PapyrusRace.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ namespace PapyrusRace
1313
return -1;
1414
}
1515

16-
const auto actorValue = ActorValueHelper::StringToActorValue(a_actorValue);
16+
const auto actorValueId = RE::GetActorValueIdFromName(a_actorValue.c_str());
17+
const auto actorValue = static_cast<RE::ActorValue>(actorValueId);
1718

1819
for (const auto& [skill, bonus] : a_race->data.skillBoosts) {
1920
const auto skillValue = static_cast<RE::ActorValue>(skill.get());

0 commit comments

Comments
 (0)