Construction Set Skriptthread zum Construction Set

Also das darf ja nicht wahr sein. Das ist ja eine Mod komplizierter als die andere.

Ist es nicht möglich einfach nur die Goldmenge des NPC und den Preis der Ware abzufragen?

Um dann im jeweiligen Händlertopic diese Goldmenge anzupassen.


Im grossen und Ganzen wird das bei Enhanced Economy 2.1 so ähnlich gemacht. Nur durch den ganzen zusätzlichen Wirrwar steigt man da ja nicht durch.
Wer weiss rat oder hat eine Idee, wie sich das umsetzten lässt?


Ziel soll sein. Einfach nur den Preis der Ware als Goldmenge dem Händler hinzuzufügen bzw abzuziehen.
 
Hab mir Living Economy mal kurz angesehen. Im Grunde wird es dort so gemacht, wie du es beschreibst, das verkompliziert sich nur zusätzlich durch ein paar Extras. Es wird abgefragt, wie viel Gold der Spieler im Handelsmenü hat und wenn dabei Veränderungen registriert werden, wird der entsprechende Betrag auch beim Händler verändert. Die Ref des Händlers wird dabei über das Dialog-Resultskript abgegriffen, der abgespielt wird, wenn der Spieler das Handelsmenü betritt...
 
  • Like
Reaktionen: robinH
hallo erstmal
ich hab von skripten genauso wenig Ahnung wie vom codieren. Deshalb hab ich mich bei der Erstellung meiner ersten Quest an http://www.scharesoft.de/tutorials.html?tx_sptutorials_browse[tutorial]=63&tx_sptutorials_browse[action]=show&tx_sptutorials_browse[controller]=Tutorial&cHash=e6a7f229cac493a735e2f7ec2204ba12 (tut mir leid ich weiß leider nicht, wie man das abkürzt) gehalten und brav

Skriptname 00Notiz1Skript

short Doonce
begin OnActivate
if ( IsActionRef Player == 1 ) && ( Doonce == 0 ) SetStage 00NotizQuest 10 set Doonce to 1 endif Activate
end

kopiert und eingefügt. Wenn ich aber speichern will, dann sagt mir das CS folgendes:
Skript '00Notiz1Skript', line 5
Syntax Error. Undefined funktion 'set'.

Kann mich da wer aufklären?
 
Du musst einfach ein paar Absätze einfügen. Richtig formatiert wäre das dann:
Code:
scn name

short doonce

Begin onActivate

if doonce == 0
  if isActionRef player
    setStage Quest-ID 10
    set doonce to 1
  endif
endif
activate

end

Du solltest außerdem davon absehen, Zahlen am Anfang von IDs zu benutzen. Das kann (nicht "muss") zu Problemen führen, bei Ref-IDs sowieso immer.
 
Danke, mal sehen ob es funktioniert.. ich hab zwischenzeitlich dieses http://www.scharesoft.de/tutorials.html?tx_sptutorials_browse%5Btutorial%5D=62&tx_sptutorials_browse%5Baction%5D=show&tx_sptutorials_browse%5Bcontroller%5D=Tutorial&cHash=8e37c430607c276dd87f6f5ddcc14f85 Skripttutorial durchgemacht und mich genau an die Abstände gehalten, die beim diesem Screenshot http://www.scharesoft.de/index.php?...s[3]=dmFzY3JpcHQ6Y2xvc2UoKTsiPiB8IDwvYT4iO30= sind, und diesmal zeigt er mir an, dass beim 'begin' Kommando in Zeile 5 ein ungültiger Blocktyp ist...
 
Ein MagicEffektScript hat keinen GameMode-Block. Ich denke, dass was du brauchst ist "ScriptEffektUpdate". (Allerdings nur wenn der Zauber auch eine Dauer (duration) hat in der es passieren kann...)
 
Wenn dir wirklich in Zeile fünf ein Fehler angezeigt wird, hast du da wahrscheinlich einen kleinen Buchstabendreher oder sonstigen Schreibfehler drin. "Begin ScriptEffectUpdate" funktioniert auf jeden Fall, aber vielleicht hast du auch vergessen den Skript-Typ auf Magie-Skript umzustellen.

Btw. @Schmelz: So weit ich weiß funktioniert "GameMode" auch in einem Magie-Skript. Vielleicht bietet "ScriptEffectUpdate" noch den zusätzlichen Luxus, dass es auch läuft, wenn der betreffende Actor nicht in der gleichen Zelle ist, wie der Spieler (unter der Vorraussetzung, dass der Zauber dann noch weiter ausgeführt wird und vielleicht benötigt der betreffende Actor noch Low-Level-Processing)... Müsste man mal testen, obwohl sich das für Oblivion wohl nicht mehr lohnen wird.
 
  • Like
Reaktionen: Schmelz
Hab mir Living Economy mal kurz angesehen. Im Grunde wird es dort so gemacht, wie du es beschreibst, das verkompliziert sich nur zusätzlich durch ein paar Extras. Es wird abgefragt, wie viel Gold der Spieler im Handelsmenü hat und wenn dabei Veränderungen registriert werden, wird der entsprechende Betrag auch beim Händler verändert. Die Ref des Händlers wird dabei über das Dialog-Resultskript abgegriffen, der abgespielt wird, wenn der Spieler das Handelsmenü betritt...

Dank Dir . Im Grossen und Ganzen ist die 2.1 schon recht gut. (Die Nachfolger bis zu 5.... sind meines Erachtens über dem Ziel hinaus und garnicht zu verstehen)

Sie erfüllt so ziemlich den Zweck allerdings habe ich es nicht hinbekommen, das ein Eigener Händler nun über ein Topic zu zusätzlichem Geld kommt. BsP für eine Dienstleistung. Ohne EE geht das ganz einfach mit dem Befehl set investment " goldsumme".
Doch EE berechnet ja den eigenen Wert. Theoretisch müsste es möglich sein irgendwie eine Variable mit zu addieren. Doch wie gesagt. Ich hab es net hinbekommen.
Das mit diesen ganzen neuen OBSE Befehlen ist mir dann doch zu hoch.


Habe mich nun zu einem Kompromiss entschlossen und addiere einfach den Dienstleistungswert als neue Goldmünzen " gold001Lohn" hinzu. Das klappt. Eine Ware lässt sich per Script ohne weiteres ins Inventar legen.

Weiss jemand wie es sich umsetzen lässt, dass die Ware Gold001Lohn , wenn sie vom Händler erworben wird, diese automatisch in die Goldmünzen aus dem Spiel " gold001" umgewandelt und dem Player hinzugefügt werden.
 
Ich würde sagen, dass geht über den "onAdd"-Block vielleicht noch in Verbindung mit "onSell". Die Anzahl der Münzen kannst du ja mit "getItemCount" abfragen und eben die entsprechende Zahl entfernen bzw. als Gold hinzufügen...
 
  • Like
Reaktionen: robinH
Von den letzten 4 Beiträgen hab ich irgendwie nichts verstanden. Gibt es irgendwo eine Art Liste, in der steht, wann man was ins Skript einsetzt, wenn man ein bestimmtes Ergebnis erzielen will?
 
Hier findest Du alles, um in's Oblivion-Skripting einzusteigen. Alles andere ist eine Frage der Logik und Erfahrung.

EDIT: Ich sollte die Tabs nicht so lange offen lassen.
 
Ich würde sagen, dass geht über den "onAdd"-Block vielleicht noch in Verbindung mit "onSell". Die Anzahl der Münzen kannst du ja mit "getItemCount" abfragen und eben die entsprechende Zahl entfernen bzw. als Gold hinzufügen...

Ja richtig, doch ich wollte da jetzt nicht extra eine Quest im Hintergrund laufen lassen, die ständig prüft ob der Player die Ware "GoldLohn" im Besitz hat, wie lässt sich das am komfortabelsten lösen? Am besten wäre es wenn die Münze "GoldLohn" das Script startet so bald sie ins Inventar gelangt.


Und was meinst du mit dem OnAddBlock. Wo finde ich den?
 
Einfach als Skript auf die Fakemünze:
Code:
scn name

short added
short count
short step

Begin onAdd player

set added to 1  ; direktes Entfernen an dieser Stelle kann zu CTD führen, deswegen wird ein paar Frames gewartet -> GameMode

end


Begin GameMode

if added
  set step to ( step + 1 )
  if step >= 10
    set added to 0
    set step to 0
    set count to player.getItemCount GoldLohn
    player.addItem Gold001 count
    player.removeItem GoldLohn count
  endif
endif

end

So wird das allerdings nicht direkt im Handelsmenü erledigt, sondern erst, wenn der Spieler dieses Verlassen hat.
Ich frage mich aber sowieso, was du mit diesen Fakemünzen anstellen willst. Soll der Spieler die beim NPC kaufen?
 
  • Like
Reaktionen: robinH
Ja super. Das das so einfach geht hätte ich nicht gedacht. Danke für den Tipp mit dem Stepp. Ich erinnere mich das ich so etwas schon letztes Jahr mit einer Ölflasche in Verbindung einer Lampe probiert hatte. Doch ohne den Stepp stürzte Oblivion immer ab. Damals habe ich das dann aufwendig über ein Quest gesteuert.

Und richtig da es auf Grund von EE nicht möglich ist dem Dienstleister über ein Topic seinen Lohn zu geben füge ich nun die Fakemünzen ein.
Somit ist dieser auch Bereichert. Wenn ich dann Waren Ihm verkaufe und das Gold im Inventar des Händlers nicht reicht kauft man halt die Fakemünzen.

Sobald die Fakemünze sich im Inventar befindet wird diese zu Gold im eigenen Inventar. Quasi ein Tausch 1 zu 1. Vorausgesetzt der Spieler erhält jeweils 2 Münzen für Eine per Script zurück.
Denn der Händler verlangt Aufgrund des Preisaufschlages leider 2 Gold für eine Goldfakemünze. Für die Engine ist das halt eine verhandelbare Ware und kein Gold.


---------------------------------------------------------------------------------------------------------

@Kahmul

Zitat:
SCN OnHitFunction

ref actor
ref target
ref attacker

Begin Function { target, attacker }

let actor := getfirstref 69
while(actor)
if(actor.getdistance player < 200)
cast <ZauberID> actor
endif
let actor := getnextref
loop

End

;EventHandler-Call, in irgendeinem Script
seteventhandler "OnHit" OnHitFunction target::playerRef ; Der Name der Function muss hier derselbe sein!

-----------------------------------------------------

Wärest du so nett und gibts etwas mehr Erklärungen zu so einem Handler. Ich versteh da irgedwie nur Bahnhof. Leider ist mein Englisch zu sehr begrenzt um das was da alles in der Wiki steht zu verstehen.

Auch Enhanced Economy nutzt diese Handler fast ständig. Das macht es sehr schwer da überhaupt die Funktion der Scripte zu erfassen. Habe Stunden damit verbracht herauszufinden wie die Scripte da überhaupt angesteuert werden. Diese liegen in keinem Objekt und auch in keiner Quest. So wie ich das mir Denke, werden diese aus einer beliebigen Stelle in einem Questscript per Befehl "Call" gestartet. Doch was bedeuten die beiden Variablen in der {} Klammer. Wozu stehen diese in der Klammer?
 
Zuletzt bearbeitet:
Bin zwar nicht Kahmul, aber ich hoffe, du nimmst auch meine Erklärung an.

Die Event Handler sind Funktionen die im Hintergrund laufen und ausgeführt werden, wenn ein bestimmtes Event passiert. Dazu musst du zuerst den Event Handler registrieren. Das geschieht mit der Funktion "setEventHandler "<Event-ID>" <Skript-ID> <Parameter1> <Parameter2>". Analog wird "removeEventHandler" für das Entfernen benutzt. "<Event-ID>" ist hier ein Platzhalter für den Namen des Events die du in der OBSE-Dokumentation in der Liste findest (der Name muss dabei in Anführungszeichen stehen). "<Skript-ID>" steht für den Namen des Skripts, das durch das Event ausgeführt werden soll. Die Parameter kannst du benutzen oder auch offen lassen. Wenn kein Parameter die Funktion einschränkt wird die Funktion halt immer bei dem betreffenden Ereignis ausgeführt, mit den Paramtern kannst du also etwas Performance sichern.

Ich weiß jetzt nicht, ob das von dir gepostete Beispiel überhaupt kompiliert wird, weil der Paramter anders bezeichnet wird, deswegen nehm ich mal ein Beispiel aus dem Wiki
Code:
SetEventHandler "OnHit" FnOnHitByPlayer "object"::Player   ;Anführungszeichen müssen, wo gesetzt, auch stehen

Das bedeutet, dass die Funktion ausgeführt wird, wenn der Spieler irgendeinen Actor schlägt (vielleicht auch, wenn es kein Actor ist). Der Parameter "object"::player bedeutet, dass das zweite Argument der Funktion der Spieler sein muss. Die Argumente findest du in der Liste neben der Funktion. In diesem Fall ist das erste Argument das Ziel und das zweite der Angreifer. Das erste Argument wird in dem Befehl mit "ref"::<beliebiges-Ziel> benutzt, das zweite wie zu sehen mit "object"::<beliebiger-Angreifer>. Wenn du also auch noch das Ziel spezifizieren willst, beispielsweise Baurus, müsstest du noch "ref"::BaurusRef in die Zeile vor "object"::player einfügen. Dann wird die Funktion nur ausgeführt, wenn Baurus vom Spieler getroffen wird.
Nun wird das Skript "FnOnHitByPlayer" ausgeführt:
Code:
scn FnOnHitByPlayer

ref Ziel
ref Angreifer    ;die Variablennamen sind egal

Begin Function { Ziel , Angreifer }  ; hier werden die Variablen automatisch auf die Parameter gesetzt
                                     ; "Ziel" ist also der Actor der geschlagen wird
                                     ; "Angreifer" ist in diesem Fall immer der Spieler

message $Angreifer + " schlägt " + $Ziel   ; die Message lautet dann: "Spieler schlägt Baurus" (wenn Baurus geschlagen wird)

Ziel.addItem Gold001 42   ; fügt dem Ziel 42 Goldstücke hinzu

end
 
Zuletzt bearbeitet:
  • Like
Reaktionen: robinH
Leider ist mein Englisch zu sehr begrenzt um das was da alles in der Wiki steht zu verstehen.

Da stehst du nicht allein da...
Ich habe mich entschlossen, mich gründlichst mit dem Skripten zu beschäftigen und so auch angefangen, mir eine Liste der Skript-Befehle auf Deutsch zu schreiben..sehr zeitaufwendig, aber es wird sich lohnen. Beim Durchforsten der Listen bin ich auf diese Parameter gestoßen und habs gleich gegoogelt, aber das, was bei Wikipedia steht, ergibt für mich keinen Sinn. Ich bin nicht grad ein Mathe-Genie... :/
Kann mir einer kurz und bündig (vielleicht mit einem Beispiel?) erklären, was es mit den Parametern auf sich hat?

EDIT: wie kann man once übersetzen? zB"Run once when object is activated" oder "Run once when object is triggered by colliding actor"...Zur Auswahl stehen bis jetzt "sobald" und "einmal". Ich bin eher fürs Erste, aber bevor ich nen Blödsinn übersetze, frag ich lieber mal...​
 
Zuletzt bearbeitet:
Was für Parameter?

Im Übrigen findest du im Ei auch eine deutsche Liste der Funktionen: KlickMich!. Ich weiß aber nicht, wie vollständig die ist und sowieso findet man im CS-Wiki oft noch nützliche Beschreibungen, Workarounds oder Tipps zu den Funktionen auf der Diskussionsseite, die es in der deutschen Liste wahrscheinlich nicht gibt.

Btw: Wenn du jetzt erst mit dem Modden/Skripten anfängst, wäre es wahrscheinlich besser, dies für Skyrim zu tun.

Edit: once = einmal
 
Zuletzt bearbeitet:
Hier steht über der 2. Spalte Parameters...
Ei der Zeit ist mir nicht unbekannt, die Liste hab ich allerdings bis jetzt noch nicht gefunden bzw. noch nicht gezielt gesucht. Das dürfte mir immerhin einiges an Arbeit ersparen.
EDIT: Vielen, vielen Danke für diesen Link mit der Liste. Bin jetzt schon viel weiter gekommen :)

Ja nur leider hab ich Skyrim noch nicht und ich wollte mich mal mit dem Skripten allgemein vertraut machen. Da drängen sich mir ein paar Fragen dazu auf:
Ist das CS von Skyrim bei der CD-ROM enthalten oder muss man sich das downloaden?
Besteht eine geringe Ähnlichkeit zwischen dem Oblivion CS und dem Skyrim CS?
Funktioniert das Skripen bei Skyrim anders bzw. sind die Befehle und Funktionen anders? (wenn nicht, kann ich mich ja auch mit dem Oblivion CS einüben, bis ich Skyrim habe)

Hm..also das überrascht mich jetzt. Danke
 
Zuletzt bearbeitet:
Froggy schrieb:
Ja nur leider hab ich Skyrim noch nicht und ich wollte mich mal mit dem Skripten allgemein vertraut machen. Da drängen sich mir ein paar Fragen dazu auf:
Ist das CS von Skyrim bei der CD-ROM enthalten oder muss man sich das downloaden?
Besteht eine geringe Ähnlichkeit zwischen dem Oblivion CS und dem Skyrim CS?
Funktioniert das Skripen bei Skyrim anders bzw. sind die Befehle und Funktionen anders? (wenn nicht, kann ich mich ja auch mit dem Oblivion CS einüben, bis ich Skyrim habe)

Hm..also das überrascht mich jetzt. Danke
Also das CK (Creation Kit) wie der Nachfolger vom CS in Skyrim heißt ähnelt von der Benutzeroberfläche schon dem CS auch wenn es n atürlic hviel mehr Funktionen bietet. Das CK ist nicht auf der Skyrim DVD enthalten sondern muss über Steam heruntergelden werden - über Steam, Bibliothek, Alle Spiele, Tools, Creation Kit (man muss die Lange Liste durchsuchen). Das CK benötigt dann auch Steam (egal ob im Online oder Offline Modus) um zu starten.
Du wolltest ja wissen wie es mit dr Skriptsprache aussieht, da soll e die größten Differenzen zum CS geben. Ich bin zwar noch NAfänger im Modding und noch lange nicht beim skripten, aber wenn ich es richtig verstanden habe gibt es in Skyrim eine neue Skriptsprache namens Papyrus (wenn ich falsch liege mich bitte korriegieren.
Alles weitere sollte aber ins Skyrim Creation Kit Unterforum.