|
-
-
Zitat von mud-freak
Danke! Du darfst da ruhig Bisasam als Autorin hinschreiben Ich habe nur (ungefragt) drüber gebügelt. Die eigentliche Arbeit stammt von ihr.
Danke für den Hinweis, habe ich angepasst. Da wollte ich niemands Leistung schmälern, hatte nur nicht mehr im Kopf, wie es ursprünglich zu diesem Skript kam.
-
Och ihr seid zu süß. Das neue Skript ist viel besser, ich bin ehrlich gesagt froh, dass sich da mal ein Profi drangewagt hat.
Ich bin zwar mittlerweile auch gewissermaßen altes Eisen, aber irgendwas bleibt halt auf der Strecke, wenn man bei seinen Mods irgendwie alles macht. Danke sehr^^
"Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
-Korallenkette
-
Ich habe eine Frage zum neuen Skript: Kann man damit auch den G1 Taschendiebstahl ausbessern oder nur G2 krams? Ich möchte für G1 nämlich jetzt einbauen, dass man für jedes geklaute Item den Kaufpreis in Exp bekommt.
"Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
-Korallenkette
-
Zitat von Bisasam
Ich habe eine Frage zum neuen Skript: Kann man damit auch den G1 Taschendiebstahl ausbessern oder nur G2 krams? Ich möchte für G1 nämlich jetzt einbauen, dass man für jedes geklaute Item den Kaufpreis in Exp bekommt.
Das könnte man mit dem Skript in die Funktion PP_Success einbauen (nachdem man bestätigt, dass der Diebstahl des Items erfolgreich war). Das Item sollte zu dem Zeitpunkt über ebx zugänglich sein (das habe ich nicht überprüft):
Code:
var oCItem itm; itm = _^(EBX);
Diese Funktion sollte recht einfach auf Gothic 1 übertragbar sein. Dazu müsste jemand die Adressen aus PP_SuccessInit in Gothic 1 heraussuchen.
-
16.05.2019 16:11
#66
Habe alles so gemacht wie es im Kommentarblock steht aber wenn ich hinter einen NPC gehe und C für Schleichen drücke, drehen sie sich instant um und greifen mich sofort an. Mit Cavalorn kann ich danach auch nicht mehr reden. Er greift sofort den Hero an sobald er ihn wieder sieht!
Woran liegt das jetzt?
Weil ich
A: einen bestimmten Geschicklichkeits Level benötige
B: Ich NONE Gilde angehöre
C: Etwas zu den Werten nicht verstanden habe und es noch anpassen muss
oder
D: Es nicht mit jeder Modifikation funktioniert
(Aufgrund von anderen Funktionen die ähnliche Ziele haben)
Geändert von Illari (16.05.2019 um 16:19 Uhr)
-
Hattest du zufällig den Marvin-Modus an?
Bei aktiviertem Marvin und fokus auf einen NPC, bewirkt "C" das der NPC einen angreift.
-
16.05.2019 19:16
#68
Zitat von Tentarr
Hattest du zufällig den Marvin-Modus an?
Bei aktiviertem Marvin und fokus auf einen NPC, bewirkt "C" das der NPC einen angreift.
Aiiii.... japp hatte ich^^
Habe extra ein Neues Spiel angefangen zum testen und wollte schnell zu Cavalorn gelangen um Schleichen zu lernen. Wusste nicht ob es einen command gibt der es mich lehrt. Hat also jetzt geklappt, Danke für den Hinweis. Jetzt muss ich mir nur die werte mal angucken mit den chancen usw.
Lieben gruß,
Illari
-
Zitat von Falugify
Es kommt zu Abstürzen, wenn ein Gegenstand geklaut wird, der gerade benutzt wird (Brot, Schinken, Käse, Wacholder,...)
Das kann ich nicht reproduzieren. Wenn ich einen NPC im Zustand "ZS_Stand_Eating" bestehle, befindet sich das Item, das der NPC gerade isst, nicht im Inventar. Wenn er mehrere davon hat, kann ich diese problemlos entwenden.
Kannst du etwas mehr Kontext geben unter welchen Umständen da ein Absturz kommt und natürlich wie immer: was heißt Absturz? Kommt eine Fehlermeldung? Kommt eine Access Violation? Wenn ja was ist ihr Wortlaut? ...
Ich habe gerade noch die globalen Instanzen item und self in PP_Success zur Verfügung gestellt. Damit ist der Schritt hier nicht mehr nötig und man hat mehr Möglichkeiten den Erfolg eines Diebstahls festzulegen. self ist dabei der NPC, der bestohlen wird.
Das Skript im ursprünglichen Post habe ich aktualisiert. Für Transparenz hier die genauen Änderungen:
Geändert von mud-freak (24.02.2021 um 08:30 Uhr)
-
24.02.2021 11:29
#70
Zitat von mud-freak
Das kann ich nicht reproduzieren. Wenn ich einen NPC im Zustand "ZS_Stand_Eating" bestehle, befindet sich das Item, das der NPC gerade isst, nicht im Inventar. Wenn er mehrere davon hat, kann ich diese problemlos entwenden.
Kannst du etwas mehr Kontext geben unter welchen Umständen da ein Absturz kommt und natürlich wie immer: was heißt Absturz? Kommt eine Fehlermeldung? Kommt eine Access Violation? Wenn ja was ist ihr Wortlaut? ...
Ich habe gerade noch die globalen Instanzen item und self in PP_Success zur Verfügung gestellt. Damit ist der Schritt hier nicht mehr nötig und man hat mehr Möglichkeiten den Erfolg eines Diebstahls festzulegen. self ist dabei der NPC, der bestohlen wird.
Das Skript im ursprünglichen Post habe ich aktualisiert. Für Transparenz hier die genauen Änderungen:
Interessant. Könntest du es mit dem Wacholder bei Rangar oder Bartok probieren? Ich bin mir ziemlich sicher, dass es in einer bestimmten Situation dort (wahrscheinlich vom Grundspiel einen Absturz) geben kann, der in Kombination mit dem Taschendiebstahl "einfacher" verursacht werden kann. Vielleicht ist es auch an einem bestimmten Frame, den er gerade in der Ani beim trinken ist (oder taucht eventuell nur bei "POTION" Ani auf.)
-
Ich wollte den Taschendiebstahl bei mir einbinden, möglichst ohne jede einzelne NPC instanz antatschen zu müssen.
Ich habe mir daher ein kleines Script geschrieben welches mir alle "benötigtes Geschick" Werte für die Original dNdR NPC in einen Hashtable anhand der NPC instanz-id macht.
Vielleicht kann es ja noch jemand gebrauchen.
Ich nutze es dafür aus, den "mindest-geschick" zum Taschendiebstahl wie im originalspiel zu haben und setze da zusätzlich noch weitere Bedingungen dran
EDIT: Code entfernt. @mud-freak's empfehlung aus dem nachfolgenden Post ist erheblich simpler
Geändert von Kirides (24.02.2021 um 13:35 Uhr)
-
Zitat von Kirides
Ich wollte den Taschendiebstahl bei mir einbinden, möglichst ohne jede einzelne NPC instanz antatschen zu müssen.
So hört sich das so an, als müsse man das. Der Erfolg vom Gothic 1 Taschendiebstahl stützt sich ja nur auf das Diebstahltalent und ist unabhängig vom Opfer.
Das an Gothic 2 anzugleichen ist aber trotzdem eine nette Idee.
Zitat von Kirides
Ich habe mir daher ein kleines Script geschrieben welches mir alle "benötigtes Geschick" Werte für die Original dNdR NPC in einen Hashtable anhand der NPC instanz-id macht.
Warum benutzt du da eine Hashtabelle? Das Auflisten der einzelnen NPCs sparst du dir dadurch ja nicht und es ist sogar mehr Code als folgendes:
Ohne den Zufallswert, würde das ja bedeuten, dass man Inventare problemlos komplett leer räumen kann. Finde ich etwas schade.
Zitat von Falugify
Interessant. Könntest du es mit dem Wacholder bei Rangar oder Bartok probieren? Ich bin mir ziemlich sicher, dass es in einer bestimmten Situation dort (wahrscheinlich vom Grundspiel einen Absturz) geben kann, der in Kombination mit dem Taschendiebstahl "einfacher" verursacht werden kann. Vielleicht ist es auch an einem bestimmten Frame, den er gerade in der Ani beim trinken ist (oder taucht eventuell nur bei "POTION" Ani auf.)
Ich habe gerade nur die bereinigten Skripte. Was haben die denn für einen Tagesablauf und Inventar?
Du hast immer noch nicht verraten, was genau das für ein Absturz ist.
-
Zitat von mud-freak
1. So hört sich das so an, als müsse man das. Der Erfolg vom Gothic 1 Taschendiebstahl stützt sich ja nur auf das Diebstahltalent und ist unabhängig vom Opfer.
Das an Gothic 2 anzugleichen ist aber trotzdem eine nette Idee.
2. Warum benutzt du da eine Hashtabelle? Das Auflisten der einzelnen NPCs sparst du dir dadurch ja nicht und es ist sogar mehr Code als folgendes:
....
3. Ohne den Zufallswert, würde das ja bedeuten, dass man Inventare problemlos komplett leer räumen kann. Finde ich etwas schade.
....
1. ich wollte damit nicht aussagen das es so sein muss, aber da ich das Skript zusätztlich als Option zum normalen Taschendiebstahl benutze, wollte ich für meine Mod die vorraussetzungen angleichen.
Ich habe da noch zusätzlich ~5-10 pkte +- variable Geschick Anforderung.
2. Gute frage. Ich vermute mal, weil ich zu blöd war das vorher auszuprobieren und mein Kopf ständig zu komplex denkt
Wieso funktioniert das überhaupt? - In meiner Parser-Reihenfolge kommen die NPC viele viele skripte später. Wieso bekomme ich hier keine Fehlermeldung bzgl nicht definiertem wert?
3. In meinem Taschendiebstahl sind weitere Anforderungen und begrenzungen vorhanden
- Hard-Cap durch zu wenig geschick
- gesamt gestohlener Wert von NPC übersteigt X
- je nach Preis des Gegenstands errechnete wahrscheinlichkeit diesen zu stehlen in Abhängigkeit zum Spieler-Geschick, höchstens jedoch 85%.
- Verbrauchsgegenstände welche gestapelt werden können, werden alle gleichzeitig gestohlen (gesamt-preis geht in die berechnung der Diebstahlwahrscheinlichkeit ein)
- Ambiente NPCs können nur einmalig bestohlen werden und geben weniger EXP
Wen's interessiert: So setzte ich die Menge von Items die gestohlen werden
Geändert von Kirides (24.02.2021 um 15:21 Uhr)
-
24.02.2021 14:39
#74
Zitat von mud-freak
Das kann ich nicht reproduzieren. Wenn ich einen NPC im Zustand "ZS_Stand_Eating" bestehle, befindet sich das Item, das der NPC gerade isst, nicht im Inventar. Wenn er mehrere davon hat, kann ich diese problemlos entwenden.
Kannst du etwas mehr Kontext geben unter welchen Umständen da ein Absturz kommt und natürlich wie immer: was heißt Absturz? Kommt eine Fehlermeldung? Kommt eine Access Violation? Wenn ja was ist ihr Wortlaut? ...
Ich hoffe, es hilft weiter. Das Problem dürfte nicht an den G1 Taschendiebstahl liegen. Er holt ihn wahrscheinlich nur hervor.
[Bild: ACV2346.jpg]
-
Zitat von Bisasam
Och ihr seid zu süß. Das neue Skript ist viel besser, ich bin ehrlich gesagt froh, dass sich da mal ein Profi drangewagt hat.
Ich bin zwar mittlerweile auch gewissermaßen altes Eisen, aber irgendwas bleibt halt auf der Strecke, wenn man bei seinen Mods irgendwie alles macht. Danke sehr^^
Du musst dir, wie auch z.B. Jorgenson, angewöhnen das Lob anzunehmen, wenn ihr eine gute Idee hattet oder auch ein gutes Script geschrieben hattet.
Der Senlax war's
ein Modder-Krüppel schlecht hin
-
Zitat von Kirides
2. Gute frage. Ich vermute mal, weil ich zu blöd war das vorher auszuprobieren und mein Kopf ständig zu komplex denkt
Wieso funktioniert das überhaupt? - In meiner Parser-Reihenfolge kommen die NPC viele viele skripte später. Wieso bekomme ich hier keine Fehlermeldung bzgl nicht definiertem wert?
Ganz absurd finde ich die Hashtable nicht - so eine Else-If-Kette ist O(n), während die Hashtable ungefähr O(1) ist. Ist aber vermutlich egal, weil du die Funktion ja nicht regelmäßig aufrufst (und tendenziell noch nicht genügend Einträge vorhanden sind damit die HT davon zieht)
Das mit den Fehlermeldungen ist... kompliziert (bzw. ich verstehe es auch nicht genau). Grundsätzlich gibt es beim Parsen noch einen Linking-Step, der Symbol-IDs in Ausdrücken erst später bindet. Deswegen geht zum Beispiel MEM_Call(f) obwohl f() nicht erlaubt ist, falls f erst später definiert wurde. Was genau die Regeln sind oder warum/wie das überhaupt funktionieren kann ist mir nicht klar. Vielleicht gilt es auch für alle Identifier in Ausdrücken?
-
Ergänzender Hook
Hier ein ergänzender Hook zum feature. Ich nutze ihn um (in meiner Mod) die noch übrige menge an stehlbarem Wert anzuzeigen.
Code:
/*
* This is called as soon as the steal container for the victim is opened (successfull attempt at opening)
*/
func void _PP_Hook_oCStealContainer_OpenStealSuccess() {
const int g_stealNpc_data = 11216852; // 00ab27d4
var int stealNpcPtr; stealNpcPtr = MEM_ReadInt(g_stealNpc_data);
if (!stealNpcPtr) {
MEM_Warn("g_stealNpc @ 0xAB27D4 was NULL! Should not be possible at the hooked location!");
return;
};
// victim
var C_NPC slf; slf = _^(stealNpcPtr);
const int g_stealContainer_data = 11216860; // 00ab27dc
var int stealContainerPtr; stealContainerPtr = MEM_ReadInt(g_stealContainer_data);
if (stealContainerPtr) {
// This sets a custom trade dialog title
const int oCItemContainer_SetName_G2 = 7360352;
CALL_zStringPtrParam("Title for trade"); // eg. "Harad (3 items left)"
CALL__thiscall(stealContainerPtr, oCItemContainer_SetName_G2);
};
};
/*
* Initialization function to be called from Init_Global
*/
func void PP_Init() {
// ...
const int oCStealContainer_OpenSteal_AtSuccess = 7743506; //0x762812
HookEngineF(oCStealContainer_OpenSteal_AtSuccess, 8, _PP_Hook_oCStealContainer_OpenStealSuccess);
};
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
|
|