Skip to content

Commit 72500ba

Browse files
committed
move weapon skill value generation to the string generation stage
1 parent 0442bc8 commit 72500ba

File tree

2 files changed

+35
-35
lines changed

2 files changed

+35
-35
lines changed

cp_red_npc_generator/src/generate_weapon.py

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -124,33 +124,12 @@ def get_brawling_weapon_item(npc: Npc, all_weapons: List[ItemWithNames]) -> Item
124124
name="Brawling")
125125

126126

127-
def add_weapon_to_npc(weapon: Item, npc: Npc, weapon_skills_data: Dict[str, str]):
128-
skill_name: Optional[str] = None
129-
for tag in weapon.get_all_tags():
130-
if tag in weapon_skills_data.keys():
131-
skill_name = weapon_skills_data[tag]
132-
break
133-
134-
assert skill_name
135-
skill_value: int = npc.get_skill_total_value(skill_name)
136-
if weapon.quality == ItemQuality.EXCELLENT:
137-
skill_value += 1
138-
139-
weapon = replace(
140-
weapon,
141-
name=f"[{skill_value}] {weapon.name}")
142-
143-
npc.weapons.add(weapon)
144-
145-
146127
def generate_weapon(npc: Npc, npc_template: NpcTemplate) -> Npc:
147128
logging.debug("\nGenerating weapons...")
148129

149130
weapons_data = load_data("configs/items/weapon.json")
150131
all_weapons: List[ItemWithNames] = [dataclass_wizard.fromdict(ItemWithNames, x) for x in weapons_data]
151132

152-
weapon_skills_data: Dict[str, str] = load_data("configs/weapon_skills.json")
153-
154133
total_weapons_budget: int = round(npc_template.rank.items_budget[ItemType.WEAPON].generate())
155134
logging.debug(f"\t{total_weapons_budget=}")
156135

@@ -172,7 +151,7 @@ def generate_weapon(npc: Npc, npc_template: NpcTemplate) -> Npc:
172151
npc)
173152

174153
if primary_weapon:
175-
add_weapon_to_npc(primary_weapon, npc, weapon_skills_data)
154+
npc.weapons.add(primary_weapon)
176155

177156
# try to buy a secondary weapon with any budget left
178157
secondary_weapon, _ = pick_weapon(
@@ -183,14 +162,14 @@ def generate_weapon(npc: Npc, npc_template: NpcTemplate) -> Npc:
183162
npc)
184163

185164
if secondary_weapon:
186-
add_weapon_to_npc(secondary_weapon, npc, weapon_skills_data)
165+
npc.weapons.add(secondary_weapon)
187166

188167
# add all the rest weapons from the cyberware
189168
for cyberware in npc.cyberware:
190169
if cyberware.item.damage:
191-
add_weapon_to_npc(cyberware.item, npc, weapon_skills_data)
170+
npc.weapons.add(cyberware.item)
192171

193172
# add boxing or martial arts
194-
add_weapon_to_npc(get_brawling_weapon_item(npc, all_weapons), npc, weapon_skills_data)
173+
npc.weapons.add(get_brawling_weapon_item(npc, all_weapons))
195174

196175
return npc

cp_red_npc_generator/src/npc.py

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
import logging
66
import math
77
from functools import cmp_to_key
8-
from typing import Dict, List, Tuple, Set
9-
from dataclasses import dataclass, field
8+
from typing import Dict, List, Tuple, Set, Optional
9+
from dataclasses import dataclass, field, replace
1010

11+
from cp_red_npc_generator.src.utils import load_data
1112
from npc_template import TraumaTeamStatusType
1213
from modifier import ModifierSource
1314
from inventory_node import InventoryNode
14-
from item import Item, ItemType
15+
from item import Item, ItemType, ItemQuality
1516
from stats import StatType, Skill, SkillType, StatSkillValue
1617
from table_view import TableView
1718

@@ -196,13 +197,33 @@ def armor_sorter(item: Item) -> int:
196197
def weapon_sorter(item: Item) -> int:
197198
return int(item.damage[0]) * int(item.damage[2]) * item.rate_of_fire
198199

199-
sorted_melee_weapon = sorted([x for x in self.weapons if "MeleeWeapon" in x.get_all_tags()],
200-
key=weapon_sorter,
201-
reverse=True)
202-
203-
sorted_ranged_weapon = sorted([x for x in self.weapons if "RangedWeapon" in x.get_all_tags()],
204-
key=weapon_sorter,
205-
reverse=True)
200+
weapon_skills_data: Dict[str, str] = load_data("configs/weapon_skills.json")
201+
202+
def add_skill_value(weapon: Item) -> Item:
203+
skill_name: Optional[str] = None
204+
for tag in weapon.get_all_tags():
205+
if tag in weapon_skills_data.keys():
206+
skill_name = weapon_skills_data[tag]
207+
break
208+
209+
assert skill_name
210+
skill_value: int = self.get_skill_total_value(skill_name)
211+
if weapon.quality == ItemQuality.EXCELLENT:
212+
skill_value += 1
213+
214+
return replace(
215+
weapon,
216+
name=f"[{skill_value}] {weapon.name}")
217+
218+
sorted_melee_weapon = sorted(
219+
[add_skill_value(x) for x in self.weapons if "MeleeWeapon" in x.get_all_tags()],
220+
key=weapon_sorter,
221+
reverse=True)
222+
223+
sorted_ranged_weapon = sorted(
224+
[add_skill_value(x) for x in self.weapons if "RangedWeapon" in x.get_all_tags()],
225+
key=weapon_sorter,
226+
reverse=True)
206227

207228
assert len(sorted_melee_weapon) + len(sorted_ranged_weapon) == len(self.weapons)
208229

0 commit comments

Comments
 (0)