Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Seite 4 von 4 « Erste 1234
Ergebnis 61 bis 77 von 77
  1. Beiträge anzeigen #61 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Zitat Zitat von Milky-Way Beitrag anzeigen
    Super, habe ich direkt mal als nützliches Skript in den Editing FAQ verlinkt
    Danke! Du darfst da ruhig Bisasam als Autorin hinschreiben Ich habe nur (ungefragt) drüber gebügelt. Die eigentliche Arbeit stammt von ihr.

  2. Beiträge anzeigen #62 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.244
     
    Milky-Way ist gerade online
    Zitat Zitat von mud-freak Beitrag anzeigen
    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.

  3. Beiträge anzeigen #63 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    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

  4. Beiträge anzeigen #64 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    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

  5. Beiträge anzeigen #65 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Zitat Zitat von Bisasam Beitrag anzeigen
    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.

  6. #66 Zitieren
    Illari
    Gast
     
    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)

  7. Beiträge anzeigen #67 Zitieren
    Alter Medizinmann Avatar von Tentarr
    Registriert seit
    May 2016
    Beiträge
    17.604
     
    Tentarr ist offline
    Hattest du zufällig den Marvin-Modus an?

    Bei aktiviertem Marvin und fokus auf einen NPC, bewirkt "C" das der NPC einen angreift.

  8. #68 Zitieren
    Illari
    Gast
     
    Zitat Zitat von Tentarr Beitrag anzeigen
    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

  9. Beiträge anzeigen #69 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Zitat Zitat von Falugify Beitrag anzeigen
    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:
    Spoiler:(zum lesen bitte Text markieren)
    Code:
    @@ -1,6 +1,6 @@
     /*
      * Gothic 1 Pickpocketing (PP) for Gothic 2
    - * https://forum.worldofplayers.de/forum/threads/1201869
    + * https://forum.worldofplayers.de/forum/threads/?p=26045212
      *
      * Compatible with Gothic 2 only
      *
    @@ -51,6 +51,7 @@
     /*
      * This function is called every time the player takes an item while pickpocketing. The return value determines whether
      * the theft was successful (TRUE = nothing happens), or failed (FALSE = player gets caught by victim).
    + * Global instances are filled: "item" and "self" (NPC that is being pickpocketed).
      */
     func int PP_Success() {
         // Engine default: Successful if talent greater than random number
    @@ -159,6 +160,8 @@
         HookEngineF(oCStealContainer__HandleEvent_success, 5, PP_SuccessHook);
     };
     func void PP_SuccessHook() {
    +    self = _^(MEM_ReadInt(ESI+160));
    +    item = _^(EBX);
         EAX = PP_Success();
     };
    Geändert von mud-freak (24.02.2021 um 08:30 Uhr)

  10. #70 Zitieren
    Falugify
    Gast
     
    Zitat Zitat von mud-freak Beitrag anzeigen
    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:
    Spoiler:(zum lesen bitte Text markieren)
    Code:
    @@ -1,6 +1,6 @@
     /*
      * Gothic 1 Pickpocketing (PP) for Gothic 2
    - * https://forum.worldofplayers.de/forum/threads/1201869
    + * https://forum.worldofplayers.de/forum/threads/?p=26045212
      *
      * Compatible with Gothic 2 only
      *
    @@ -51,6 +51,7 @@
     /*
      * This function is called every time the player takes an item while pickpocketing. The return value determines whether
      * the theft was successful (TRUE = nothing happens), or failed (FALSE = player gets caught by victim).
    + * Global instances are filled: "item" and "self" (NPC that is being pickpocketed).
      */
     func int PP_Success() {
         // Engine default: Successful if talent greater than random number
    @@ -159,6 +160,8 @@
         HookEngineF(oCStealContainer__HandleEvent_success, 5, PP_SuccessHook);
     };
     func void PP_SuccessHook() {
    +    self = _^(MEM_ReadInt(ESI+160));
    +    item = _^(EBX);
         EAX = PP_Success();
     };
    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.)

  11. Beiträge anzeigen #71 Zitieren
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.780
     
    Kirides ist offline
    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)

  12. Beiträge anzeigen #72 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Zitat Zitat von Kirides Beitrag anzeigen
    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 Zitat von Kirides Beitrag anzeigen
    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:
    Spoiler:(zum lesen bitte Text markieren)
    Code:
    func int PP_Success() {
        return (hero.attribute[ATR_DEXTERITY] >= PP_DexByNpc(self));
    };
    
    // ...
    
    func int PP_DexByNpc(var C_Npc slf) {
        var int dex; var int instId;
        
        // Cached from previous call
        if (instId == Hlp_GetInstanceId(slf)) {
            return dex;
        };
    
        instId == Hlp_GetInstanceId(slf);
        if      (instId == BDT_1085_Addon_Bloodwyn)      { dex =  90; }
        else if (instId == BDT_1099_Addon_Huno)          { dex =  85; }
        else if (instId == MIL_350_Addon_Martin)         { dex =  65; }
        else if (instId == PIR_1357_Addon_Garett)        { dex =  36; }
        else if (instId == PIR_1367_Addon_Owen)          { dex =  20; }
        else if (instId == STRF_1126_Addon_Telbor_NW)    { dex =  60; }
        else if (instId == BAU_907_Wasili)               { dex =  55; }
        else if (instId == VLK_4302_Addon_Elvrich)       { dex =  62; }
        else if (instId == BAU_908_Hodges)               { dex =  15; }
        else if (instId == BAU_912_Pepe)                 { dex =  15; }
        else if (instId == BAU_913_Thekla)               { dex =  53; }
        else if (instId == PAL_202_Albrecht)             { dex =  41; }
        else if (instId == VLK_444_Jack)                 { dex =  50; }
        else if (instId == VLK_498_Ignaz)                { dex =  38; }
        else if (instId == VLK_494_Attila)               { dex =  55; }
        else if (instId == VLK_493_Nagur)                { dex =  75; }
        else if (instId == VLK_492_Rengaru)              { dex =  20; }
        else if (instId == VLK_491_Vanja)                { dex =  20; }
        else if (instId == VLK_480_Fellan)               { dex =  40; }
        else if (instId == VLK_476_Fenia)                { dex =  50; }
        else if (instId == VLK_470_Sarah)                { dex =  57; }
        else if (instId == VLK_469_Halvor)               { dex =  78; }
        else if (instId == VLK_468_Canthar)              { dex =  20; }
        else if (instId == VLK_462_Thorben)              { dex =  30; }
        else if (instId == VLK_461_Carl)                 { dex =  34; }
        else if (instId == VLK_458_Rupert)               { dex =  18; }
        else if (instId == VLK_457_Brian)                { dex =  55; }
        else if (instId == VLK_456_Abuyin)               { dex =  75; }
        else if (instId == VLK_449_Lares)                { dex =  95; }
        else if (instId == VLK_448_Joe)                  { dex =  25; }
        else if (instId == VLK_447_Cassia)               { dex = 100; }
        else if (instId == VLK_446_Jesper)               { dex =  80; }
        else if (instId == VLK_445_Ramirez)              { dex =  90; }
        else if (instId == VLK_439_Vatras)               { dex =  91; }
        else if (instId == VLK_438_Alrik)                { dex =  55; }
        else if (instId == VLK_437_Brahim)               { dex =  15; }
        else if (instId == VLK_436_Sonja)                { dex =  58; }
        else if (instId == VLK_435_Nadja)                { dex =  40; }
        else if (instId == VLK_434_Borka)                { dex =  80; }
        else if (instId == VLK_432_Moe)                  { dex =  25; }
        else if (instId == VLK_431_Kardif)               { dex =  55; }
        else if (instId == VLK_425_Regis)                { dex =  40; }
        else if (instId == VLK_4250_Jorgen)              { dex =  59; }
        else if (instId == VLK_424_Alwin)                { dex =  20; }
        else if (instId == VLK_420_Coragon)              { dex =  40; }
        else if (instId == VLK_4201_Wirt)                { dex =  60; }
        else if (instId == VLK_418_Gritta)               { dex =  20; }
        else if (instId == VLK_417_Constantino)          { dex =  59; }
        else if (instId == VLK_416_Matteo)               { dex =  80; }
        else if (instId == VLK_415_Meldor)               { dex =  34; }
        else if (instId == VLK_414_Hanna)                { dex =  45; }
        else if (instId == VLK_4148_Gestath)             { dex =  81; }
        else if (instId == VLK_413_Bosper)               { dex =  67; }
        else if (instId == VLK_4131_Engrom)              { dex =  10; }
        else if (instId == VLK_4130_Talbin)              { dex =  40; }
        else if (instId == VLK_412_Harad)                { dex =  14; }
        else if (instId == VLK_4120_Bilgot)              { dex =  20; }
        else if (instId == VLK_411_Gaertner)             { dex =  40; }
        else if (instId == VLK_4111_Grimes)              { dex =  43; }
        else if (instId == VLK_4110_Jergan)              { dex =  84; }
        else if (instId == VLK_410_Baltram)              { dex =  76; }
        else if (instId == VLK_4107_Parlaf)              { dex =  34; }
        else if (instId == VLK_4100_Brutus)              { dex =  14; }
        else if (instId == VLK_408_Jora)                 { dex =  31; }
        else if (instId == VLK_407_Hakon)                { dex =  45; }
        else if (instId == VLK_404_Lutero)               { dex =  58; }
        else if (instId == VLK_400_Larius)               { dex =  35; }
        else if (instId == STRF_1116_Kervo)              { dex =  34; }
        else if (instId == STRF_1115_Geppert)            { dex =  56; }
        else if (instId == STRF_1106_Fed)                { dex =  32; }
        else if (instId == SLD_841_Engardo)              { dex =  34; }
        else if (instId == SLD_840_Alvares)              { dex =  20; }
        else if (instId == SLD_823_Khaled)               { dex =  78; }
        else if (instId == SLD_822_Raoul)                { dex =  45; }
        else if (instId == SLD_816_Fester)               { dex =  27; }
        else if (instId == SLD_814_Sentenza)             { dex =  56; }
        else if (instId == SLD_811_Wolf_DI)              { dex =  32; }
        else if (instId == SLD_811_Wolf)                 { dex =  32; }
        else if (instId == SLD_810_Dar)                  { dex =  67; }
        else if (instId == SLD_809_Bennet_DI)            { dex =  35; }
        else if (instId == SLD_809_Bennet)               { dex =  35; }
        else if (instId == SLD_808_Jarvis)               { dex =  41; }
        else if (instId == SLD_807_Bullco)               { dex =  56; }
        else if (instId == SLD_806_Sylvio)               { dex =  80; }
        else if (instId == SLD_805_Cord)                 { dex =  65; }
        else if (instId == SLD_804_Rod)                  { dex =  15; }
        else if (instId == SLD_803_Cipher)               { dex =  65; }
        else if (instId == SLD_802_Buster)               { dex =  34; }
        else if (instId == SLD_801_Torlof_DI)            { dex =  76; }
        else if (instId == SLD_801_Torlof)               { dex =  76; }
        else if (instId == SLD_800_Lee_DI)               { dex = 110; }
        else if (instId == PC_ThiefOW)                   { dex = 120; }
        else if (instId == PC_Thief_NW)                  { dex = 120; }
        else if (instId == PC_Thief_DI)                  { dex = 120; }
        else if (instId == PC_Psionic_DI)                { dex =  56; }
        else if (instId == PC_Psionic)                   { dex =  76; }
        else if (instId == PC_Mage_NW)                   { dex =  56; }
        else if (instId == PC_Mage_DI)                   { dex =  45; }
        else if (instId == PC_Fighter_NW_Nach_DJG)       { dex =  10; }
        else if (instId == PC_Fighter_DJG)               { dex =  10; }
        else if (instId == PC_Fighter_DI)                { dex =  10; }
        else if (instId == PAL_299_Sergio)               { dex =  78; }
        else if (instId == PAL_281_Fajeth)               { dex =  56; }
        else if (instId == PAL_280_Tengron)              { dex =  32; }
        else if (instId == PAL_268_Udar)                 { dex =  20; }
        else if (instId == PAL_267_Sengrath)             { dex =  32; }
        else if (instId == PAL_261_Gerold)               { dex =  71; }
        else if (instId == PAL_260_Tandor)               { dex =  47; }
        else if (instId == PAL_258_Keroloth)             { dex =  25; }
        else if (instId == PAL_252_Parcival)             { dex =  84; }
        else if (instId == PAL_217_Marcos)               { dex =  65; }
        else if (instId == PAL_216_Cedric)               { dex =  37; }
        else if (instId == PAL_207_Girion_DI)            { dex =  71; }
        else if (instId == PAL_207_Girion)               { dex =  73; }
        else if (instId == PAL_203_Lothar)               { dex =  56; }
        else if (instId == NOV_612_Babo)                 { dex =  17; }
        else if (instId == NOV_608_Garwig)               { dex =  52; }
        else if (instId == NOV_605_Opolos)               { dex =  54; }
        else if (instId == NOV_604_Dyrian)               { dex =  10; }
        else if (instId == NOV_603_Agon)                 { dex =  23; }
        else if (instId == NOV_602_Ulf)                  { dex =  34; }
        else if (instId == NOV_600_Pedro)                { dex =  45; }
        else if (instId == NONE_101_Mario_DI)            { dex =  71; }
        else if (instId == NONE_101_Mario)               { dex =  71; }
        else if (instId == MIL_337_Mika)                 { dex =  65; }
        else if (instId == MIL_336_Rick)                 { dex =  10; }
        else if (instId == MIL_335_Rumbold)              { dex =  24; }
        else if (instId == MIL_314_Mortis)               { dex =  38; }
        else if (instId == MIL_312_Wulfgar)              { dex =  58; }
        else if (instId == KDF_511_Daron)                { dex =  47; }
        else if (instId == KDF_510_Hyglas)               { dex =  73; }
        else if (instId == KDF_509_Isgaroth)             { dex =  48; }
        else if (instId == KDF_507_Talamon)              { dex =  87; }
        else if (instId == KDF_506_Neoras)               { dex =  72; }
        else if (instId == KDF_505_Marduk)               { dex =  36; }
        else if (instId == KDF_503_Karras)               { dex =  49; }
        else if (instId == KDF_502_Ulthar)               { dex =  74; }
        else if (instId == KDF_501_Serpentes)            { dex =  86; }
        else if (instId == KDF_500_Pyrokar)              { dex = 108; }
        else if (instId == DJG_715_Ferros)               { dex =  56; }
        else if (instId == DJG_714_Jan)                  { dex =  37; }
        else if (instId == DJG_713_Biff_NW)              { dex =  92; }
        else if (instId == DJG_713_Biff_DI)              { dex =  92; }
        else if (instId == DJG_713_Biff)                 { dex =  92; }
        else if (instId == DJG_712_Hokurn)               { dex =  69; }
        else if (instId == DJG_711_Godar)                { dex =  16; }
        else if (instId == DJG_710_Kjorn)                { dex =  47; }
        else if (instId == DJG_709_Rethon)               { dex =  78; }
        else if (instId == DJG_708_Kurgan)               { dex =  34; }
        else if (instId == DJG_705_Angar_NW)             { dex =  47; }
        else if (instId == DJG_705_Angar_DI)             { dex =  47; }
        else if (instId == DJG_705_Angar)                { dex =  47; }
        else if (instId == DJG_703_Cipher)               { dex =  79; }
        else if (instId == DJG_702_Rod)                  { dex =  16; }
        else if (instId == DJG_701_Bullco)               { dex =  34; }
        else if (instId == DJG_700_Sylvio)               { dex =  78; }
        else if (instId == BDT_1060_Dexter)              { dex =  96; }
        else if (instId == BDT_1030_Morgahard)           { dex =  73; }
        else if (instId == BAU_984_Niclas)               { dex =  27; }
        else if (instId == BAU_983_Dragomir)             { dex =  47; }
        else if (instId == BAU_982_Grimbald)             { dex =  85; }
        else if (instId == BAU_981_Grom)                 { dex =  75; }
        else if (instId == BAU_980_Sagitta)              { dex = 103; }
        else if (instId == BAU_973_Rukhar)               { dex =  26; }
        else if (instId == BAU_970_Orlan)                { dex =  89; }
        else if (instId == BAU_963_Malak)                { dex =  43; }
        else if (instId == BAU_961_Gaan)                 { dex =  23; }
        else if (instId == BAU_960_Bengar)               { dex =  28; }
        else if (instId == BAU_954_Maleth)               { dex =  10; }
        else if (instId == BAU_952_Vino)                 { dex =  34; }
        else if (instId == BAU_951_Hilda)                { dex =  26; }
        else if (instId == BAU_950_Lobart)               { dex =  65; }
        else if (instId == BAU_945_Egill)                { dex =  45; }
        else if (instId == BAU_944_Ehnim)                { dex =  76; }
        else if (instId == BAU_942_Randolph)             { dex =  58; }
        else if (instId == BAU_941_Kati)                 { dex =  13; }
        else if (instId == BAU_940_Akil)                 { dex =  37; }
        else if (instId == BAU_936_Rosi)                 { dex =  30; }
        else if (instId == BAU_935_Bronko)               { dex =  54; }
        else if (instId == BAU_934_Babera)               { dex =  20; }
        else if (instId == BAU_933_Rega)                 { dex =  25; }
        else if (instId == BAU_932_Balthasar)            { dex =  10; }
        else if (instId == BAU_931_Till)                 { dex =  36; }
        else if (instId == BAU_930_Sekob)                { dex =  75; }
        else if (instId == BAU_911_Elena)                { dex =  30; }
        else if (instId == BAU_910_Maria)                { dex =  60; }
        else if (instId == BAU_903_Bodo)                 { dex =  30; }
        else if (instId == BAU_902_Gunnar)               { dex =  45; }
        else if (instId == VLK_4303_Addon_Erol)          { dex =  43; }
        else if (instId == VLK_4301_Addon_Farim)         { dex =  20; }
        else if (instId == STRF_1127_Addon_Pardos_NW)    { dex =  85; }
        else if (instId == STRF_1125_Addon_Tonak_NW)     { dex =  80; }
        else if (instId == STRF_1124_Addon_Monty_NW)     { dex =  60; }
        else if (instId == STRF_1123_Addon_Patrick_NW)   { dex =  35; }
        else if (instId == PIR_1368_Addon_Malcom)        { dex =  20; }
        else if (instId == PIR_1365_Addon_Matt)          { dex =  55; }
        else if (instId == PIR_1362_Addon_Bones)         { dex =  75; }
        else if (instId == PIR_1356_Addon_Bill)          { dex =  80; }
        else if (instId == PIR_1355_Addon_Skip)          { dex =  20; }
        else if (instId == PIR_1354_Addon_Henry)         { dex =  40; }
        else if (instId == PIR_1353_Addon_Morgan)        { dex =  20; }
        else if (instId == PIR_1352_Addon_AlligatorJack) { dex = 100; }
        else if (instId == PIR_1320_Addon_Greg)          { dex = 111; }
        else if (instId == BDT_1098_Addon_Snaf)          { dex =  49; }
        else if (instId == BDT_1097_Addon_Fisk)          { dex = 118; }
        else if (instId == BDT_1096_Addon_Lennar)        { dex =  65; }
        else if (instId == BDT_1095_Addon_Crimson)       { dex =  66; }
        else if (instId == BDT_1091_Addon_Lucia)         { dex =  80; }
        else if (instId == BDT_1086_Addon_Scatty)        { dex =  60; }
        else if (instId == BDT_1084_Addon_Senyan)        { dex =  45; }
        else if (instId == BDT_1083_Addon_Esteban)       { dex = 105; }
        else if (instId == BDT_1082_Addon_Skinner)       { dex = 100; }
        else if (instId == BDT_1081_Addon_Wache_01)      { dex =  38; }
        else if (instId == BDT_1080_Addon_Tom)           { dex =  40; }
        else if (instId == BDT_1079_Addon_Carlos)        { dex =  71; }
        else if (instId == BDT_1075_Addon_Fortuno)       { dex =  10; }
        else if (instId == BDT_1074_Addon_Edgor)         { dex =  10; }
        else if (instId == BDT_1073_Addon_Sancho)        { dex =  50; }
        else if (instId == BDT_1072_Addon_Logan)         { dex =  59; }
        else if (instId == BDT_1070_Addon_Paul)          { dex =  22; }
        else if (instId == BDT_10024_Addon_Garaz)        { dex =  66; }
        else if (instId == BDT_10022_Addon_Miguel)       { dex =  40; }
        else if (instId == BDT_10017_Addon_Juan)         { dex =  65; }
        else if (instId == BDT_10015_Addon_Emilio)       { dex =  76; }
        else if (instId == BDT_10008_Addon_Bandit)       { dex =  55; }
        else if (instId == BDT_10005_Addon_Wache_02)     { dex =  38; }
        else if (instId == BDT_10004_Addon_Finn)         { dex =  35; }
        else {                                             dex =   0; };
    
        return dex;
    };


    Ohne den Zufallswert, würde das ja bedeuten, dass man Inventare problemlos komplett leer räumen kann. Finde ich etwas schade.



    Zitat Zitat von Falugify Beitrag anzeigen
    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.

  13. Beiträge anzeigen #73 Zitieren
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.780
     
    Kirides ist offline
    Zitat Zitat von mud-freak Beitrag anzeigen
    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

    Spoiler:(zum lesen bitte Text markieren)
    Code:
    func void PP_SuccessHook() {
        self = _^(MEM_ReadInt(ESI+160));
        item = _^(EBX);
        
        var oCItem itm; itm = _^(EBX);
        // Steal full stack of certain categories
        if (itm.mainflag >= ITEM_KAT_FOOD)
        || (itm.mainflag >= ITEM_KAT_MUN)
        || (itm.mainflag >= ITEM_KAT_POTIONS)
        || (itm.mainflag >= ITEM_KAT_NONE)
        {
            const int stackOffset = 16;
            const int transferAmount_offset = 4;
            MEM_WriteInt(ESP + stackOffset + transferAmount_offset, itm.amount);
        };
    
        EAX = PP_Success();
    };
    Geändert von Kirides (24.02.2021 um 15:21 Uhr)

  14. #74 Zitieren
    Falugify
    Gast
     
    Zitat Zitat von mud-freak Beitrag anzeigen
    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]

  15. Beiträge anzeigen #75 Zitieren
    Abenteurer Avatar von Senlax
    Registriert seit
    Jan 2021
    Ort
    HH
    Beiträge
    92
     
    Senlax ist offline
    Zitat Zitat von Bisasam Beitrag anzeigen
    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

  16. Beiträge anzeigen #76 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Zitat Zitat von Kirides Beitrag anzeigen
    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?

  17. Beiträge anzeigen #77 Zitieren
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.780
     
    Kirides ist offline

    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);
    };

Seite 4 von 4 « Erste 1234

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide