Benutzer-Werkzeuge

Webseiten-Werkzeuge


oCMobContainer

  • Vorkenntnisse und das Verstehen des Einbaus eines Standard-Mobs (oCMobInter) wären von Vorteil.

- Hier werden Besonderheiten angesprochen, die lediglich bei Mobs in bestimmten Klassen zu beachten sind.

1. Einsetzen

  • 1.0.0 oCVob(abstract) → oCMob → oCMobInter → oCMobLocable(abstrakt) → oCMobContainer
    • 1.0.1 Wir klicken uns im Objectfenster durch voranstehenden Pfad und erhalten folgendes, jetzt verändertes Objectfenster

  • 1.0.2 Rechtklick mit der Maus auf eine „freie“ Stelle im Spacerhauptfenster…. und das Object_List_Fenster verändert sich….

  • Wir erhalten das Koordinatenkreuz im Spacer-Hauptfenster mit der Bezeichnung „ocMobContainer“

  • 1.0.4 Das Objectfenster verändert sich ein weiteres mal…..

  • 1.0.5 Wir suchen uns in der Mobeinsetzliste eine passende Truhe aus. Ich habe für unser Beispiel die CHESTBIG_OCCHESTLARGELOCKED.MDS gewählt.
  • Wer die Mobeinsetz-Liste noch nicht hat, sollte sie schnellstens hier downloaden!

http://www.worldofgothic.de/?go=moddb&action=view&fileID=795&cat=9&page=0&order=0

  • CHESTBIG_OCCHESTLARGELOCKED.MDS Wer das Grundlagentutorial durchgearbeitet hat, dem sollte dieser Name folgendes sagen :
    • CHESTBIG_ wird ausgewertet von der Engine und die compilierten Hum+Mob-Dateien heissen später im Anims_compiled Ordner entsprechend. Ausgewertet zum compilieren wird der Humans.mds Eintrag, sowie der Mob.mds eintrag.
    • In der Humans.mds müssen die Animationen zb. t_chestbig_stand_2_S0 ….. usw. benannt werden, wenn das Mob den Namen CHESTBIG_IRGENDWAS hat, wohingegen in der Mob.mds die parallel mitlaufende Animation nur t_stand_2_S0 (ohne CHESTBIG) benannt wird.
    • OCCHESTLARGE - ist eine Info, (nochmal? ChestBig sagt das ja schon, da bräuchte es kein zusätzliches ChestLarge) für wen auch immer, dass das eine grosse Truhe ist. Da könnte man auch „Bratkartoffel“ in den Namen schreiben. Was hinter dem ersten _Underline im Dateinamen steht bleibt dem Modder überlassen. Dateinamen ohne _Underline werden nicht angenommen. (Dateinamen bitte nicht verwechseln mit Dateinamenerweiterung Bsp *.ASC)
    • LOCKED ist die Info für den Modder, dass das eine abschliessbare Truhe ist, (es gibt auch nicht abschliessbare)
    • MDS sagt uns, dass das ein dynamisches Mob ist.
    • Das bedeutet aber auch, dass wir jetzt 4 Dateien brauchen, damit das Mob korrekt funktioniert
      • die xxxxxx.ASC………………./ Mesh der Truhe
      • die xxxxxx_USE.ASC………../ Ani der Truhe
      • die xxxxxx.MDS………………/ gibt an welche Ani bei welchem Frame einsetzt bzw. stoppt
      • die xxxxxx_LOCKUSE.ASC…/ Lock/Unlock Ani der Truhe
  • 1.0.6 Wir klicken im Objektfenster auf „visual:“ tragen unseren gewählten MobName ein und klicken danach auf „Apply“ und schon wieder eine Änderung des Objectfensters…..

  • 1.0.7 Im Spacer-Hauptfenster erscheint unsere Truhe….

  • 1.0.8 und auch das Object_List_Fenster hat sich ein weiteres Mal verändert.

2. Positionieren

Wer keine Kenntnis hat, über „schieben, drehen, auf, ab, etc.“…… der möge bitte in den Grundlagen, die eigentlich Vorraussetzung zum Verstehen der Sondermobs sind nachlesen!
siehe Mob/Grundlagen → Positionieren

  • 2.0.0 Jetzt wird es an der Zeit unsere Truhe zu Positionieren. Dazu klicken wir unser Truhe an und wenn selbige aktiviert ist, dann erscheint ein roter Linienquader, die sogenannte „Boundingbox“.
  • 2.0.1 Wir aktivieren den „Move-Modus“
  • 2.0.3 Wie stellen die Truhe mit den uns bekannten Tasten an die richtige, von uns gewählte Position in unserer Welt.

„keyinstance“

  • 2.0.4 Alle gängigen Einstellungen, die alle Mobs haben, wurden in den Mob-Grundlagen schon explizid beschrieben. Wir befassen uns hier nur mit den Einstellungen, die ein oCMobContainer im Gegensatz zum oCMobInter zusätzlich hat.

*2.0.5 Wer keine Kenntnis hat über die Grundeinstellungen, der möge sich bitte im Mob-Grundlagen-Wiki schlaumachen.
siehe Mob/Grundlagen → Einstellungen

3. Lock/Unlock

  • 3.0.0 Wir wenden uns wieder unserem Objectfenster zu. Relevant sind die 4 angemerkten Punkte

  • 3.0.1 locked:FALSE
    • Wenn wir das so belassen, dann ist die Truhe „unlocked“ - Jeder kann sie ohne weiteres öffnen
  • 3.0.2 locked:TRUE
    • Wenn wir keine „keyinstance“ eingeben und keinen „picklock-string“, dann ist die Truhe zu. Niemand kann sie öffnen.
    • Die Truhe wäre jetzt nur noch mit „IKARUS“ ….

http://forum.worldofplayers.de/forum/threads/1299679-Skriptpaket-Ikarus-4?p=21850548&viewfull=1#post21850548

per Script zu öffnen.

  • keyInstance:ItKe_Key147
  • Wenn wir eine „keyinstance“ eingeben Bsp. ItKe_Key147, dann kann man die Truhe mit diesem Schlüssel öffnen.
  • pickLockStr: LLRLRR
  • Wenn wir keine „keyinstance“ eingeben, sondern einen Picklock-String, bspw. LLRLRR (linkslinksrechtslinksrechtsrechts) dann können wir diese Truhe, wenn das entsprechende Talent geskillt wurde mit dem Dietrich öffnen.
  • Eine keyInstance + einen pickLockStr einzugeben funktioniert im Normalfalle nicht.

4. Truhe befüllen

  • 4.0.0 contains: (Inhalt der Truhe)
  • 4.0.1 Eintragen im Spacer im Objektfenster
    • Wenn wir ein Goldstück reingeben wollen, schreiben wir:
      contains:ItMi_Gold // 1 Goldmünze 
    • Wollen wir 10 Goldmünzen reingeben, so setzen wir zwischen die Iteminstance und die Anzahl einen Doppelpunkt:
      contains:ItMi_Gold:10 // 10 Goldmünzen 
    • Wir geben 10 Goldmünzen und einen Ast in die Truhe. Die Iteminstancen trennen wir dabei durch ein Komma. Für ein Einzelstück Item muss kein :1 gesetzt werden. Wenn kein :1 da steht, erkennt das die Engine als eine 1.
    •  contains:ItMi_Gold:10, ItMw_1H_Vlk_Dagger // 10 Goldmünzen/1 Schwerer Ast 
    • Der DoppelSlash und was danach geschrieben ist wird nicht mit eingetragen, er dient nur dem geneigten Leser als Kommentar.

Ergibt „INGAME“ dieses Ergebnis….

  • 4.1.0 Truhe per Script befüllen.
  • Anmerkung: Man kann sogar noch eine Truhe befüllen während sie benutzt wird/geöffnet ist!!!
    • Dazu benötigt die Truhe einen eindeutigen vobName, einzutragen im Objectfenster
    • vobName:CHEST_WAFFENKAMMER_01
    • und einen Eintrag für conditionFunc, ebenfalls im Objektfenster einzutragen
    • conditionFunc:B_WAFFENKAMMER_CHEST_01
  • Keinen Schlüssel eintragen im Spacer, - bei dieser Variante. Der Schlüssel wird im Script abgefragt und die Truhe muss locked:FALSE sein!
  • 4.1.1 Ein Beispielscript dazu:
  • func int b_waffenkammer_chest_01()
    {
     var int chestopen_WK01; 
      if (chestopen_WK01 == 0) // Befüllen nur einmal
       {
        Mob_CreateItems("CHEST_WAFFENKAMMER_01", Itmi_Gold, 10);
        Mob_CreateItems("CHEST_WAFFENKAMMER_01", ItMw_1H_Vlk_Dagger, 1);
        chestopen_WK01 = 1; // Variable hochzählen
       }; 
      if (Npc_IsPlayer(self))
       {
         if (Npc_HasItems(hero, ItKe_Key147)>0) //Schlüssel abfragen 
          {
            return TRUE;
          }
       else
          {
            PLAYER_MOB_MISSING_KEY();  // hat keinen Schlüssel, Truhe bleibt zu
            return FALSE;
          };
       }
     else
       {
         return TRUE; // alle anderen Npc
       };
    };

Damit löst man das Problem der „schlampigen NPC´s“. Wenn ihr einer Truhe einen Schlüssel zuweist, useWithItem:ItKe_Key147 und das ist eine Schmiedetruhe zum Beispiel, dann müsst ihr dem Schmied einen Schlüssel geben, wenn ihr einen TA_OPENCHEST_BIG erstellt hättet. Wenn dann der Schmiede_Npc sein fertiges Schwert in die Truhe legt, dann schliesst er die Truhe zwar auf, aber nicht wieder zu und der Player hätte jetzt Zugriff zum Inhalt der Truhe, auch ohne Schlüssel. Das kann man mit obenstehendem Script verhindern.

  • 4.1.2 Noch ein Beispielscript dazu: Nur die Truhe befüllen, den Schlüssel oder Picklockstring kann man dann im Spacer eintragen.
  • func int b_waffenkammer_chest_01()
    {
     var int chestopen_WK01; 
      if (chestopen_WK01 == 0) // Befüllen nur einmal
       {
        Mob_CreateItems("CHEST_WAFFENKAMMER_01", Itmi_Gold, 10);
        Mob_CreateItems("CHEST_WAFFENKAMMER_01", ItMw_1H_Vlk_Dagger, 1);
        chestopen_WK01 = 1; // Variable hochzählen
       }; 
    };

5. Owner/OwnerGuild

  • 5.0.0 Wir wenden uns wieder dem Spacer_Object_Fenster zu. Und darin den Einträgen „owner“ / „ownerGuild“

  • 5.0.1 ownerGuild:GIL_KDF
    • Das wurde ausgetestet und bewirkt einfach nichts. Selbst ein direkt neben der Truhe stehender Feuermagier, der dich anblickt, interessiert sich nicht dafür, wenn du als Player kein Feuermagier bist und diese Truhe ausräumst.
  • 5.0.2 owner:KDF_511_DARON
    • Auch das wurde getestet, mit dem Ergebnis, dass, wenn der Owner dich sehen kann, er schreit:„Finger weg da!“ und beginnt sofort mit Zaubern auf den Player zu schiessen. (Mitten in der Mob-Benutzung = fragliche Variante). Desweiteren wird sein Attack Befehl auch nicht mehr aufgehoben, so dass, selbst wenn du wegrennst und zurückkommst, du es mit den Feuermagiern versaut hast. Denn wenn du einen bekämpfst, kommen die anderen zu Hilfe.
  • Summa summarum, - eher nicht empfehlenswert, sondern nach scriptseitigen Lösungen über den „Func“ suchen.

Zurück zur Haupseite →Mobs/Grundlagen/oCMobInter

2016/02/10(dlz)

quickstart/spacer/mobsplatzieren/ocmobcontainer.txt · Zuletzt geändert: 2018/04/28 07:17 von 79.239.17.78