Scripter erstellen

  • Hallo!
    Erstmal im Voraus: Ich erstelle eine Modifikation für Gothic 2 und für die Dialoge gibt es
    eine extra Scriptsprache. Jetzt möchte ich ein Script schreiben, in dem es zwei eingabefelder gibt:
    in das eine kommt pseudocode, dann drückt man auf einen button, und das ganze wird in ein anderres eingabefeld eingefügt und umgewandelt in richtigen code. Kann mir jemand dabei helfen, zum beispiel bei der umwandlung vom einem feld ins andere. hier der bisherige code:

    Spoiler anzeigen

    2 Mal editiert, zuletzt von mcondoi (16. Mai 2007 um 16:04)

  • Danach soll in der zweiten EditBox der richtige Quellcode stehen

    Spoiler anzeigen

    EditBox 1:

    >Hallo, was machst du denn hier

    Konvertieren drücken.

    EditBox 2:

    AI_Output(other,self,"DIA_PIR_7007_Michael_Beispiel_hero_0";); //Hallo, was machst du denn hier??

    Achso, nur so, ich bin Anfänger. :D


    Bernd670: Posts zusammengefügt!

    Einmal editiert, zuletzt von mcondoi (16. Mai 2007 um 16:08)

  • sowas in der art???

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("ConvertGUI", 633, 447, 197, 115)
    $Button1 = GUICtrlCreateButton("Convert", 168, 120, 273, 49, 0)
    $Edit1 = GUICtrlCreateEdit("", 64, 16, 513, 89, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN))
    GUICtrlSetData(-1, "Anfangstext")
    ;~ $Input1 = GUICtrlCreateInput("AInput1", 64, 24, 489, 21)
    $Edit2 = GUICtrlCreateEdit("", 96, 176, 465, 209, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN))
    GUICtrlSetData(-1, "Bitte geben Sie zunächst einen Anfangstext ein.")
    GUICtrlSetState(-1,$GUI_DISABLE)
    ;~ $Input2 = GUICtrlCreateInput("AInput2", 64, 208, 521, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    If GUICtrlRead($Edit1) = "Anfangstext" Or GUICtrlRead($Edit1) = "" Then
    MsgBox(48,"Anfangstext vergessen.","Bitte geben Sie Ihren Anfangstext ein.")
    Else
    GUICtrlSetData($Edit2,'AI_Output(other,self,"DIA_PIR_7007_Michael_Beispiel_hero_0"); //'&GUICtrlRead($Edit1))
    GUICtrlSetState($Edit2,$GUI_ENABLE)
    EndIf
    EndSwitch
    WEnd

    [/autoit]


    das ganze geht auch mit inputfelder anstatt von edit-felern ist auf jedenfall geschmackssache....muss eben nur das script leicht umgebastelt werden....

    der snoozer

  • Ja, genau, aber noch etwas muss verändert werden:

    Wenn ich schreibe:

    >Hallo, hier spricht der Held

    Dann muss dass so heißen:

    AI_Output(other,self,"DIA_PIR_7007_Michael_Beispiel_hero_0";); //Hier spricht der Held

    Wenn ich schreibe:
    <Hier spricht der NPC.

    dann muss das so heißen:

    AI_Output(self,other,"DIA_PIR_7007_Michael_Beispiel_hero_0";); //Hier spricht der NPC

    Und wie baue ich noch andere Sachen ein, z.B wenn ich schreibe:

    $tagebucheintrag_starten, TestTagebucheintrag, Das ist ein Testagebuch eintrag.

    dann soll das so heißen:

    Log_CreateTopic ("TestTagebucheintrag", LOG_MISSION); // LOG_MISSION LOG_NOTE
    Log_SetTopicStatus("TestTagebucheintrag", LOG_RUNNING); // LOG_SUCCESS LOG_FAILED LOG_OBSOLETE ( LOG_RUNNING )
    B_LogEntry ("TestTagebucheintrag","Das ist ein Testagebuch eintrag.
    ";);

    Edit1:
    Ahc so, und wenn ich mehrere Zeilen Code schreiben möchte, also so:

    >Hallo, hier spricht der Held
    >Hallo, hier spricht der Held nochmal

    erscheint das hier:

    AI_Output(other,self,"DIA_PIR_7007_Michael_Beispiel_hero_0"); //>Hallo, hier spricht der Held
    >Hallo, hier spricht der Held nochmal

    es soll aber so sein:
    AI_Output(other,self,"DIA_PIR_7007_Michael_Beispiel_hero_0"); //>Hallo, hier spricht der Held
    AI_Output(other,self,"DIA_PIR_7007_Michael_Beispiel_hero_0"); //>Hallo, hier spricht der Held nochmal


    Wie kann ich machen, dass das < oder > Zeichen immer rausgefiltert wird. Das zeichen soll nur angeben, ob der npc oder der held spricht.

    Edit2:

    Einfach weitere If funktionen schreiben oder was?

    bernd670: 3 Posts zusammengefasst!!

    Einmal editiert, zuletzt von mcondoi (16. Mai 2007 um 14:33)

  • Hi,
    ist es nicht viel einfacher wenn du dir lieber eine Gui mit ein paar Radiobuttons zur Befehlsauswahl und dann ein paar Inputs zum eingeben der einzelnen Parametern bastelst? Ich weiß zwar nicht wie umfangreich bzw. aufwändig diese Scriptsprache von Gothic ist aber ich denke dies währe einfacher als mit einer Scriptsprache eine Scriptsprache für eine Scriptsprache zu erstellen, oder möchtest du nur einen Befehl automatisieren!?

    Vinschni

  • Nein, ich will nur, dass man beim Scripten nicht so viel schreiben muss. Die Scriptsprache ist ziemlich umangreich, deshalb möhcte ich wissen, wie ich dass mache und die restlichen Befehle programmiere ich selber.

  • If ginge schon, ich denke aber, da es sich immer um's gleiche handelt ist Switch besser:

    Spoiler anzeigen
    [autoit]

    $PseudocodeEingabe = GUICtrlRead($Edit1)
    GUICtrlSetState($Edit2,$GUI_ENABLE)
    Switch $PseudocodeEingabe
    Case "Held spricht blablabla"
    GUICtrlSetData($Edit2,"AI_Output(other,self,""DIA_PIR_7007_Michael_Beispiel_hero_0""); //" & $PseudocodeEingabe)
    Case "Schatztruhe erstellen"
    GUICtrlSetData($Edit2,"CreateSchatztruhe" & $PseudocodeEingabe)
    EndSwitch

    [/autoit]


    Mit den Cases kannst du dann beliebig viele Pseudocodebefehle anfügen und auswerten.

    Vinschni

  • Tja, aber das Problem ist immer noch wenn ich in Eingabefeld 1 eine 2. Zeile schreibe, wir die nicht umgewandelt. Was muss man noch verändern, dass alle Zeilen umgewandelt werden?

    Edit1:

    Der Code bis jetzt sieht so aus:

    Spoiler anzeigen

    Edit 2:

    Aber wie schon erwähnt, das problem ist immer noch, es soll so gehen, dass "AI_Output" nur geschrieben wird, wenn das erste Zeichen in der Zeile "<" oder ">" ist. Und die Zeichen bestimmen ob "self,other" steht oder "other,self". Wie programmiert man das?

    bernd670: wieder 3 Posts zusammengefasst!! Bitte aufhören zu Spamen!!

  • like this??

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GuiEdit.au3>
    #include<Array.au3>
    Global $actor[2][3]
    $actor[0][0] = "Held"
    $actor[0][1] = "other,self,"
    $actor[0][2] ="; //Hier spricht der Held"
    $actor[1][0] = "NTC"
    $actor[1][1] = "self,other,"
    $actor[1][2] ="; //Hier spricht der NTC"
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("ConvertGUI", 633, 447, 197, 115)
    $Button1 = GUICtrlCreateButton("Convert", 168, 120, 273, 49, 0)
    $Edit1 = GUICtrlCreateEdit("", 64, 16, 513, 89, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN))
    GUICtrlSetData(-1, "Anfangstext")
    ;~ $Input1 = GUICtrlCreateInput("AInput1", 64, 24, 489, 21)
    $Edit2 = GUICtrlCreateEdit("", 96, 176, 465, 209, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN))
    GUICtrlSetData(-1, "Bitte geben Sie zunächst einen Anfangstext ein.")
    GUICtrlSetState(-1,$GUI_DISABLE)
    ;~ $Input2 = GUICtrlCreateInput("AInput2", 64, 208, 521, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    If GUICtrlRead($Edit1) = "Anfangstext" Or GUICtrlRead($Edit1) = "" Then
    MsgBox(48,"Anfangstext vergessen.","Bitte geben Sie Ihren Anfangstext ein.")
    Else
    Dim $content = ""
    For $i=1 to _GUICtrlEditGetLineCount ($Edit1)
    If StringInStr(StringLower(_GUICtrlEditGetLine($Edit1, $i)),StringLower(StringLeft($actor[0][0],3)),1) Or StringInStr(StringLower(_GUICtrlEditGetLine($Edit1, $i)),">",1) Then
    $content = $content & 'AI_Output('&$actor[0][1]&'"DIA_PIR_7007_Michael_Beispiel_hero_0")'&$actor[0][2]&@CRLF
    ;~ MsgBox(0,"","1")
    ElseIf StringInStr(StringLower(_GUICtrlEditGetLine($Edit1, $i)),StringLower($actor[1][0]),1) Or StringInStr(StringLower(_GUICtrlEditGetLine($Edit1, $i)),"<",1) Then
    $content = $content & 'AI_Output('&$actor[1][1]&'"DIA_PIR_7007_Michael_Beispiel_hero_0")'&$actor[1][2]&@CRLF
    ;~ MsgBox(0,"","2")
    Else
    $content = $content & "ERROR"&@CRLF
    ;~ MsgBox(0,"","3")
    EndIf
    Next
    ;GUICtrlSetData($Edit2,'AI_Output(other,self,"DIA_PIR_7007_Michael_Beispiel_hero_0"); //'&GUICtrlRead($Edit1))
    GUICtrlSetData($Edit2,$content)
    GUICtrlSetState($Edit2,$GUI_ENABLE)
    EndIf
    EndSwitch
    WEnd

    [/autoit]
  • das is richtig gut, aber ein problem besteht noch:

    Wenn man z.B.

    <Beispiel

    eingibt, dann soll Beispiel auch erscheinen, nicht
    Hier spricht der NTC:D

  • Zitat

    Original von mcondoi
    das is richtig gut, aber ein problem besteht noch:

    Wenn man z.B.

    <Beispiel

    eingibt, dann soll Beispiel auch erscheinen, nicht
    Hier spricht der NTC:D


    dann versuch doch einfachmal das problem selbst zu lösen....wenn wir dir immer nur fertige scripte vorlegen dann lernst du nichts dabei :/ ich denke der ansatz von mir sollte dir schon weiter helfen...außerdem bin ich grad zu faul was zu machen :P

    der snoozer