Projekt Inventar Funktionen

Quad2Core

Abenteurer
EDIT: Mod wurde Released der thread dazu kann HIER gefunden werden.

Hallo,
Bei diesem Projekt handelt es sich um ein SKSE-Plugin, welches neue Funktionen zu Papyrus hinzufügt, welche sich auf Inventare fokussieren.
Da ich momentan an einer anderen Mod arbeite, welche zeitnah Informationen über Items im Spieler Inventar braucht und die bisherigen Papyrus Funktionen einfach wesentlich zu langsam sind,
habe ich angefangen an diesem Plugin zu arbeiten. Bei diesen Funktionen lege ich Wert darauf sie möglichst performant zu schreiben.

Bis jetzt habe ich folgende Funktionen hinzugefügt:
-int Function GetTotalNumItems()
{Gibt den Totalen Wert aller Items im Inventar der ObjectReference zurück}
-int Function GetNumItemsWithKeyword(Keyword key, bool getTotalCount = false)
{Wenn getTotalCount true entspricht gibt die Function z.B bei 10xKleiner heiltrank, 1xHeiltrank den Wert 11 zurück ansonsten den Wert 2}
Mit 20 Forms und 6 Forms die dem Keyword zu treffen:
Papyrus speed: 0.875240sec
C++ speed: 0.013010sec
Ergebnis: Meine Funktion ist 0.862230sec oder rund 67mal schneller als die reguläre Papyrus methode.

Mit 157 Forms und 18 Forms die dem Keyword zu treffen:
Papyrus speed: 5.436980sec
C++ speed: 0.021860sec
Ergebnis: Meine Funktion ist 5.415120sec oder rund 249mal schneller als die reguläre Papyrus methode.
int potionCountNew = 0
Function ScanInventoryC()
potionCountNew = PlayerRef.GetNumItemsWithKeyword(VendorItemPotion, true)
endFunction
;--- wird verglichen mit:
int potionCountOld = 0
Function ScanInventory()
int iFormIndex = PlayerRef.GetNumItems()
While iFormIndex > 0
Form akForm = PlayerRef.GetNthForm(iFormIndex)
if akForm.HasKeyword(VendorItemPotion)
potionCountOld += OkayerRef.GetItemCount(akForm)
endif
iFormIndex -= 1
endWhile
endFunction
-Form Function GetNthFormWithKeyword(Keyword key, int index)
{Gibt die Form mit dem Keyword an dem bestimmten Index zurück}

Funktionen an denen ich momentan Arbeite:
-RemoveItemsWithKeyword(Keyword key, ObjectReference ContToMoveTo = none)

Zum Speed test:
Jede Funktion wird 100 mal getestet und der Durchschnittswert wird dabei ermittelt.
Bei den Tests verwende ich die Funktion: GetCurrentRealTime()
 
Zuletzt bearbeitet:
  • Like
Reaktionen: claudius1988
Habe es gerade geschafft die Funktion:
Form Function GetNthFormWithKeyword(Keyword key, int index)
erfolgreich zu implementieren!!! YAY :D
Speed test kommt demnächst. Sollte aber genau so schnell sein wie die SKSE Funktion GetNthForm

Bei Fragen und/oder Anfragen nach bestimmten Funktionen einfach hier schreiben, mal sehen was sich machen lässt :D
 
Zuletzt bearbeitet: