Allgemein
News
News-Archiv
Partner
Netzwerk
Banner
Header
Media
Downloads
Impressum

The Elder Scrolls
Arena
Daggerfall
Spin-offs
Romane
Jubiläum
Reviews
Welt von TES
Lore-Bibliothek
Namens-
generator

FRPGs

Elder Scrolls Online
Allgemein
Fraktionen
Charakter
Kargstein
Technik
Tamriel-
Manuskript

Media

Skyrim
Allgemein
Lösungen
Tipps & Tricks
Steam-Kniffe
Review
Media
Plugins & Mods

Oblivion
Allgemein
Lösungen
Tipps & Tricks
Technik
Charakter
Media
Plugins & Mods
Kompendium

Morrowind
Allgemein
Lösungen
Tipps & Tricks
Media
Plugins & Mods

Foren
The Elder Scrolls Online
Hilfe & Diskussion

Skyrim
Hilfe & Diskussion
Plugins & Mods

Ältere TES-Spiele
TES-Diskussion
Oblivion-Plugins
Morrowind-Plugins

Community
Taverne zum Shalk
Adventures of Vvardenfell
Tales of Tamriel
Ergebnis 1 bis 7 von 7

Thema: Scripting Frage(n)

  1. #1

    Scripting Frage(n)

    Tach,

    ich hab gestern mal mit der Umsetzung einer kleinen Mod-Idee angefangen, frage mich aber nun nach dem wälzen etlicher Tutorials und des Wiki, ob das überhaupt so möglich ist, wie ich das möchte...
    Kann ich zählen wie viele Items in einem Container sind - wichtig: Egal welche!

    Genauergesagt würde es mir reichen eine Funktion auszuführen, nachdem etwas in eine Kiste gelegt wurde. GetItemCount bezieht sich immer auf eine spezielle ObjectID - gibt es eine Variable für die ObjectID, die jedes Item umfasst?

  2. #2
    Nein. Mit den normalen Skriptbefehlen von Oblivion funktioniert afaik das nicht, es gibt kein "generisches" Zählen bzw. etwas wie eine "IsEmpty"-Funktion für Container. Mir fällt so jetzt auch keine Möglichkeit ein, was entsprechendes zu basteln.

    Im Oblivion Skript Extender gibt es eine Funktion GetNumItems, die zählt, wie viele verschiedene Items in einem Container liegen. Bei zehn Stahlpfeilen, drei Elfen-Langschwertern und einer daedrischen Axt würde z.B. "3" rauskommen. Geht aber nur, wenn man sich den OBSE installiert, und der geht afaik immer noch nicht mit der DV.

  3. #3
    Argh, das wäre genau, was ich brauchen würde... irgendwie habe ich mir schon gedacht, dass es nicht so einfach wird.

    Vielleicht umreisse ich mal kurz, was es werden soll - vielleicht gibt`s ja alternative Ansätze.

    Es wird ein Container innerhalb Bravils (öffentlich) hinzugefügt, auf den man als Diebesgildenmitglied Zugriff hat sobald man auch den ersten Hehler genannt bekommt - weiss grad nicht welcher Rang das ist, muss ich nachkucken -. Dorthinein kann man gestohlene Gegenstände packen, die dann sozusagen abgeholt werden, von denen die Seriennummern entfernt werden und die man dann nach Ablauf von 24 Stunden dort wieder vorfindet - ohne Stolen-Flag.
    Der Plan war zusätzlich zum Item einen raren Rohstoff mit abgeben zu müssen (Gold-, Silbernugget, reine Perle oder ähnliches), als Bezahlung für den Dienst - zumindest, wenn man nicht Gildenmeister ist. Die Bezahlung in der Form zum einen weil man so nicht einfach das Zeug mit Gold 'sauberkaufen' kann und zum anderen kommen die Sachen nun nicht soo oft vor, dass man jedes geklaute Bronze-Amulett damit waschen und normal verkaufen kann.
    Gedacht ist das ganze primär für die eigene Ausrüstung des Chars.

    Der Ablauf war wie folgt gedacht:
    - Items (Objekt und Bezahlung) sind in der Kiste
    - Kiste verschliesst sich für 24h
    - Wenn die Kiste wieder geöffnet wird fehlt die Bezahlung, das Item hat Ownership player
    - Wenn die Kiste leer ist wird alles zurückgesetzt

    Ich erwarte hier natürlich nicht, dass mir jemand das Script schreibt, bitte nicht falsch verstehen. Im Gegenteil, ich will das ja selber machen. Aber da das nicht ganz so einfach scheint bin ich für Ideen dankbar.

    Achja, OBSE hab` ich bereits wegen eines Mods zum Zauber löschen... das als Voraussetzung wäre rechtzufertigen würde das Mod was werden, denke ich. Von dem her kein Problem.

  4. #4
    Hmm. Mit OBSE könnte das so klappen:

    1. Checken, was an normalen "Bezahl-Items" in der Kiste ist mittels dem normalen "GetItemCount". Also jedesmal, wenn "GetItemCount" > 0 ist (für Perle, Nugget, ...), eine Variable eins rauf zählen.
    2. Checken, ob außer dem Bezahlstuff noch mehr in der Kiste liegt. Ist der Fall, wenn "GetNumItems" größer ist als der eben ermittelte Wert an unterschiedlichen Bezahlsachen.
    3. Kiste verschließen, ein Bezahl-Item abziehen, Flags löschen, nach 24 Stunden wieder öffnen lassen.

    Wie kann man Flags löschen? Evtl. mit der "RemoveAllItems"-Funktion. Laut Beschreibung löscht sie das Ownership-Flag. Du müßtest dann noch eine Dummy-Kiste an einen unzugänglichen Ort stellen und per RemoveAllItems die Items einmal dorthin verschieben und wieder zurück. Habe aber noch nie probiert, ob das gestohlene Items wirklich "sauber" macht.

    *edit*
    Das Hauptproblem ist wohl, der Kiste mitzuteilen, wasnn sie loslegen soll. Mit der GetNumItems-Funktion kann man das automatisieren. Allerdings könntest du das z.B. auch per Message-Box machen. Dazu müßtest du den OnActivate-Block überschreiben, und zwar folgendermaßen:
    1. Wenn wir gerade nicht in der 24-Stunden-Löschperiode sind, Frage stellen: Kiste öffnen oder "Reinigung" starten?
    1.1 Kiste öffnen -> "Activate" feuern.
    1.2 Reinigen: Bezahlsachen checken. Wenn nix da, meckern. Wenn doch, loslegen.
    2. Wenn wir schon in der 24-Stunden-Löschperiode sind, Message schicken ("Bitte warten ").
    Das wäre vermutlich der komfortabelste Weg. Ganz ohne OBSE.
    Geändert von Gorkon (03.11.2006 um 11:06 Uhr)

  5. #5
    Hm,

    wenn Du dem Spieler erlauben würdest nur einen Gegestand hineinzulegen, wäre es etwas einfacher. Du könntest dem Inhalt des Containers eine Ref geben, die Du per Script abfragen kannst. Mit dieser Ref kannst Du dann arbeiten. (Ownership wechseln etc.)

    EDIT: Hm, da war wohl jemand schneller.
    Geändert von Rung (03.11.2006 um 11:12 Uhr)

  6. #6
    @ Gorkon:
    Jep, die Lösung per OBSE war auch das erste, das mir einfiel.
    Flags sollte mal recht simpel mit 'SetOwnership' auf dem Spieler setzen können... probiert habe ich`s noch nicht, aber theoretisch müsste spätestens bei der nächsten Aktualisierung des Menübildchens dann die rote Hand auch verschwunden sein.

    Mit Menu-Buttons habe ich schon bissi rumgespielt, hat aber dann ziemlichen "Waschmaschinen-Charakter" ... mal kucken, ob das nicht eleganter zu lösen ist.

    @ Rung:
    Das wäre auch eine Möglichkeit - dem Spieler kann man das Bezahlitem ja auch aus dem eigenen Inventar verschwinden lassen, das muss ja nicht zwingend in die Kiste.
    Über die Refs bin schon gestolpert, muss mir das aber nochmal durchlesen, um`s richtig zu blicken.

    Aber nu` ist endgültig Feierabend, mal sehen, ob ich da heute Nachmittag weiterkomme. Danke!

    P.S. Ich wollte mir mal ankucken wie der das bei "Artful Thievery" mit dem Spell gelöst hat, aber um da downzuloaden muss man sich nicht nur registrieren, sondern auch noch durch eine Gesichtskontrolle...

  7. #7
    Aloha,

    ich möchte Euch mal zeigen, was ich bisher habe, da ich ein Problem habe auf dessen Lösung ich scheinbar nicht alleine komme:
    Code:
    scn LauRoChestScript
    
    short itemcount
    short activated
    
    begin OnActivate
    	set activated to 1
    	if activate > 0
    		activate
    	endif
    End
    
    begin MenuMode 1008
    	Message "In Menumode...", 2
    	if activated > 0
    		Message "Var activated: %.0f", activated, 2
                    ; Ab hier wird es nicht mehr ausgeführt :-/
    		set itemcount to LauRoChest.GetNumItems
                    ; ... oder hier...
    		Message "Items in Chest: %.0f", itemcount, 2
    		if itemcount > 0 
    			Message "Counted %.0f", itemcount, 2
    		else
    			Message "Shit...", 2
    		endif
    	endif
    	Message "Script over...", 2
    end
    "activated" soll sicherstellen, dass der Code nur in diesem Container-Menu ausgeführt wird. Die ganzen Messages sind nur für mich zum debugging.
    So recht kann ich mir nicht erklären, warum das Script nicht weiter ausgeführt wird.

    Zum restlichen Setup:
    Es handelt sich um einen hohlen Stein, der als neues Form das Script (LauRoChestScript) zugewiesen bekam. RefID des Steins ist "LauRoChest".
    Platziert ist das ganze gegenüber von Skirvaahs (?) Haus in Bravil - praktisch halb in der Stadmauer.
    OBSE 0.8 ist am Start.

    Gehe ich recht in der Annahme, dass:
    - das Script auch wirklich nur läuft, wenn dieses Container-menu offen ist?
    - Das Script dauerhaft läuft, also Veränderungen beim GetNumItems direkt für das Script verfügbar wären?
    - das eigentlich so laufen müsste... ich also schon auf dem richtigen Weg bin?


    P.S. Hoffe mir wird das nicht als Doppelposting ausgelegt.

    Edit:
    Fehler gefunden: "set itemcount to LauRoChest.GetNumItems" geht so nicht, es muss sich auf eine Ref beziehen... also:
    "set ContRef to Getself" (on activate) und "set itemcount to ContRef.GetNumItems" ... dann geht`s.
    Geändert von Huxley (04.11.2006 um 07:13 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •