Hehe - nice find
Okay, so versteh ich das:
- der händler hat ein inventory & ein backup_inventory
- die beiden werden verglichen
- wenn backup_inventory mehr "_id"'s hat als das (echte) inventory (act_inventory, wahrscheinlich Kurzform für actor_inventory), dann wird quasi aufgefüllt
- der Auffüllmechanismus ist nicht komplett beliebig - da hier die Funktion helper_get_equivalent_items_list( all_items_list, item) benutzt wird
- pro "missing_object" wird also eine Liste an "ähnlichen Items" generiert - aus der wird dann zufällig eines ausgewählt (random.choice(_list)
Man könnte jetzt diese helper-Funktion umgehen und aus der kompletten Palette auswählen:
for item in missing_objects:
_list = all_items_list[:]
if _list:
new_item = random.choice(_list)
objects.create_item_in_inventory(object=character_id,
equipment=new_item)
backup_inventory.remove(item)
backup_inventory.append(new_item)
Generelle Anmerkungen:
- if _list: ist ähnlich wie if len(_list):, letzteres dürfte aber im Härtefall etwas langsamer sein (wichtig ist in dem Fall aber nur das die Liste nicht leer ist)
- _list = all_item_list[:] erzeugt eine Kopie von all_item_list (Vorraussetzung dafür ist das all_item_list auch wirklich ein Python-Listenobjekt ist ^^)
- _id und _list sind normale Variablennamen, der Unterstrich dient nur dazu die eingebauten Typen von Python (id und list) nicht zu überschreiben. Kann ein kleines aber fieses Detail sein, über das sich Python erstmal nicht beschwert ;-)
- zu random.choice: random ist ein modul von Python, choice eine Methode die aus einer beliebigen Python-Liste ein beliebiges Objekt auswählt & zurückgibt (ungemein praktisch ^^)
Man kann aber auch folgendes machen:
- Erstellen von separaten Listen, etwa CraftingItems, Ammo, Weapons, Armors etc.
- aus diesen Listen ein zufälliges Item herausnehmen und dem Händler ins Inventory packen
In dem Zusammenhang wäre interessant ob die Händler ein "unendlich großes" Inventory haben (eigentlich ist ja alles in einer Scrollarea drin) oder ob es ein hartes Limit gibt. Wenn es so eines gibt, dann sollte das System "eins geht raus, ein anderes kommt rein" unbedingt beibehalten, egal woher die neuen Items kommen.