Ein paar Scriptfragen.

Hilfe bei der Erstellung von Fallout 1 / 2 Modifikationen, sowie Werbung und Ankündigungen.

Moderators: Newsposter, Global Moderator, Zugriff Intern, Moderator

User avatar
Lexx
Administrator
Posts: 27348
Joined: Sat Dec 10, 2005 6:27 pm

Re: Ein paar Scriptfragen.

Post by Lexx »

Du könntest dir tausend Probleme sparen, wenn du einfach mal die vorhandenen Scripte anschauen würdest... wenn du nicht genau weißt, wie man eine Variable hoch zählt, guck halt einfach in eines der hundert vorhandenen Scripte und sieh nach, wie das da gemacht wurde. Einfacher geht es echt nicht.

In einer Modoc Datei sehe ich gerade zum Beispiel die Zeile "inc_map_var(MVAR_Rat_Counter);", es wäre also nahe liegend, einfach mal "inc_global_var(GVAR_XY);" anstelle von "set_global_var(GVAR_Baum_gefaellt, GVAR_Baum_gefaellt+1)" einzusetzen. Und es gibt auf jeden Fall noch andere Möglichkeiten zum Variablen hoch zählen.
only when you no-life you can exist forever, because what does not live cannot die
User avatar
Mr.Wolna
Moderator
Posts: 12939
Joined: Sun Oct 28, 2007 8:54 pm

Re: Ein paar Scriptfragen.

Post by Mr.Wolna »

Also hier mein derzeitiger Code(komplimieren geht ohne Probleme, bloss passier nix nach den dritten Gefällten Baum:

Code: Select all

// Axe script by Mr.Wolna//


#include "D:\FALLOUT M\MAPPER\scripts\HEADERS\DEFINE.H"



procedure use_obj_on_p_proc begin
variable Tree;
variable Wood;
     if ((obj_pid(obj_being_used_with) == PID_FIRST_TREE)
        or (obj_pid(obj_being_used_with) == PID_SECOND_TREE)
        or (obj_pid(obj_being_used_with) == PID_THIRD_TREE)) then begin
            gfade_out(5);
            
            Tree:=create_object(PID_TEMPLE_SKULL_POLE,tile_num(obj_being_used_with),elevation(obj_being_used_with));
            destroy_object(obj_being_used_with);
            game_time_advance( 30 * ONE_GAME_MINUTE );
            set_global_var(GVAR_TREE_DOWN, (global_var(GVAR_TREE_DOWN) + 1 ) );            
            
            Wood:=create_object(PID_14MM_PISTOL,0,0);
            add_obj_to_inven(dude_obj,Wood);

            gfade_in(5); 
                       
    end else if (global_var(GVAR_TREE_DOWN) >= 3) then begin
// *** Msg file reference: {100}{}{Das sit nur ein Test.} ***
            floater(100);
    end
end
RPÜ/German Restoration Project Tanslation
Ich habe ein Gewehr, eine Schaufel und 5 Hektar Land hinter dem Haus. Man wird dich nie finden - leg dich also nicht mit mir an!   <br />
Ashbury wrote:P.s. Nein es ist nicht die Gewalt was mich an der Fallout Reihe gereizt hat,aber sie war immer die Kirsche auf der Sahnetorte ( Und ich will verdammt nochmal ne Kirsche oben drauf haben)
User avatar
Lexx
Administrator
Posts: 27348
Joined: Sat Dec 10, 2005 6:27 pm

Re: Ein paar Scriptfragen.

Post by Lexx »

Du hast die Logik immer noch nicht verstanden.

Bei dir oben steht:

Wenn Axt + Baum 1 oder 2 oder 3, dann:
- mach Bildschirm Schwarz
- Erstelle neuen Baum
- Lösche alten Baum
- spule die Zeit vor
- mach globale Variable + 1
- erstelle Item
- gib Spieler das Item
- mach Bildschirm wieder normal
ANSONSTEN, wenn NICHT AXT + BAUM 1 oder 2 oder 3 ABER DAFÜR GVAR größer oder gleich 3, dann:
- sprüh irgend welchen Text in die Luft
ende

Wie es richtig sein muss:

Wenn Axt + Baum 1 oder 2 oder 3, dann:
- mach Bildschirm Schwarz
- Erstelle neuen Baum
- Lösche alten Baum
- spule die Zeit vor
- mach globale Variable + 1
- erstelle Item
- gib Spieler das Item
- mach Bildschirm wieder normal
   - wenn GVAR größer oder gleich 3, dann:
     - sprüh irgend welchen Text in die Luft
   - ende
ende


Schau hier zum zehnten mal. Der Code selbst ist bei der Variable wahrscheinlich falsch, aber da siehst du zumindest den richtigen Aufbau.
Last edited by Lexx on Fri Aug 22, 2008 2:43 pm, edited 1 time in total.
only when you no-life you can exist forever, because what does not live cannot die
User avatar
Mr.Wolna
Moderator
Posts: 12939
Joined: Sun Oct 28, 2007 8:54 pm

Re: Ein paar Scriptfragen.

Post by Mr.Wolna »

kann das sein das es gar nicht geht. Also alleine als Waffenscript?

Code: Select all

Also so oder wie?
// Axe script by Mr.Wolna//

#include "D:\FALLOUT M\MAPPER\scripts\HEADERS\DEFINE.H"



procedure use_obj_on_p_proc begin
variable Tree;
variable Wood;
     if ((obj_pid(obj_being_used_with) == PID_FIRST_TREE)
        or (obj_pid(obj_being_used_with) == PID_SECOND_TREE)
        or (obj_pid(obj_being_used_with) == PID_THIRD_TREE)) then begin
            gfade_out(5);
            
            Tree:=create_object(PID_TEMPLE_SKULL_POLE,tile_num(obj_being_used_with),elevation(obj_being_used_with));
            destroy_object(obj_being_used_with);
            game_time_advance( 30 * ONE_GAME_MINUTE );
            set_global_var(GVAR_TREE_DOWN, (global_var(GVAR_TREE_DOWN) + 1 ) );            
            
            Wood:=create_object(PID_14MM_PISTOL,0,0);
            add_obj_to_inven(dude_obj,Wood);

            gfade_in(5); 
                       
   if (global_var(GVAR_Baum_gefaellt) >= 10) then begin
                        play_sfx("saloon");
                  end
end

Last edited by Mr.Wolna on Fri Aug 22, 2008 3:10 pm, edited 1 time in total.
RPÜ/German Restoration Project Tanslation
Ich habe ein Gewehr, eine Schaufel und 5 Hektar Land hinter dem Haus. Man wird dich nie finden - leg dich also nicht mit mir an!   <br />
Ashbury wrote:P.s. Nein es ist nicht die Gewalt was mich an der Fallout Reihe gereizt hat,aber sie war immer die Kirsche auf der Sahnetorte ( Und ich will verdammt nochmal ne Kirsche oben drauf haben)
User avatar
Lexx
Administrator
Posts: 27348
Joined: Sat Dec 10, 2005 6:27 pm

Re: Ein paar Scriptfragen.

Post by Lexx »

Sag mal... ist das dein komplettes Script? Weil, du hast die use_obj_on_p_proc gar nicht definiert. (Siehe andere Scripte)

kann das sein das es gar nicht geht. Also alleine als Waffenscript?
Da ist nichts dabei, was man extra machen müsste.
Last edited by Lexx on Fri Aug 22, 2008 3:11 pm, edited 1 time in total.
only when you no-life you can exist forever, because what does not live cannot die
User avatar
Mr.Wolna
Moderator
Posts: 12939
Joined: Sun Oct 28, 2007 8:54 pm

Re: Ein paar Scriptfragen.

Post by Mr.Wolna »

Lexx wrote: Sag mal... ist das dein komplettes Script? Weil, du hast die use_obj_on_p_proc gar nicht definiert. (Siehe andere Scripte)
ahm ja stimmt hab ich vergessen zu defenieren^^

Lexx wrote: Da ist nichts dabei, was man extra machen müsste.
Ich ken nda einen sehr guten scripter der anderer Meinung ist  ;)

Desswegen frag ich ja auch :D
RPÜ/German Restoration Project Tanslation
Ich habe ein Gewehr, eine Schaufel und 5 Hektar Land hinter dem Haus. Man wird dich nie finden - leg dich also nicht mit mir an!   <br />
Ashbury wrote:P.s. Nein es ist nicht die Gewalt was mich an der Fallout Reihe gereizt hat,aber sie war immer die Kirsche auf der Sahnetorte ( Und ich will verdammt nochmal ne Kirsche oben drauf haben)
User avatar
Lexx
Administrator
Posts: 27348
Joined: Sat Dec 10, 2005 6:27 pm

Re: Ein paar Scriptfragen.

Post by Lexx »

Dann bin ich gespannt darauf zu erfahren, was genau externalisiert werden muss.
only when you no-life you can exist forever, because what does not live cannot die
User avatar
Mr.Wolna
Moderator
Posts: 12939
Joined: Sun Oct 28, 2007 8:54 pm

Re: Ein paar Scriptfragen.

Post by Mr.Wolna »

Ok dieser Code geht, wie du (und andere) 10x schon gesagt hattest. Ich mach mir mehr Streß als es tatsächlich ist. #batsch

Jetz muss ich das noch mit der stärke und den perk packen

Code: Select all

//       Baum Test Script          


#include "..\headers\define.h"

#define NAME                    SCRIPT_TREE

#include "..\headers\command.h"

procedure start;
procedure use_obj_on_p_proc;


procedure start begin
end


procedure use_obj_on_p_proc begin
variable Tree;
variable Wood;
      
      
      if ((obj_pid(obj_being_used_with) == PID_FIRST_TREE)
         or (obj_pid(obj_being_used_with) == PID_SECOND_TREE)
         or (obj_pid(obj_being_used_with) == PID_THIRD_TREE)) then begin
            gfade_out(5);           

            Tree:=create_object(PID_TEMPLE_SKULL_POLE,tile_num(obj_being_used_with),elevation(obj_being_used_with));
            destroy_object(obj_being_used_with);
            game_time_advance( 30 * ONE_GAME_MINUTE );
            set_global_var(GVAR_TREE_DOWN, (global_var(GVAR_TREE_DOWN) + 1 ) );            
            
            Wood:=create_object(PID_14MM_PISTOL,0,0);
            add_obj_to_inven(dude_obj,Wood);

            gfade_in(5);            

         if (global_var(GVAR_TREE_DOWN) >= 3) then begin
            give_exp_points(100);
            play_sfx("saloon");
            set_global_var( GVAR_TREE_DOWN,0 );
         end
    end
end
RPÜ/German Restoration Project Tanslation
Ich habe ein Gewehr, eine Schaufel und 5 Hektar Land hinter dem Haus. Man wird dich nie finden - leg dich also nicht mit mir an!   <br />
Ashbury wrote:P.s. Nein es ist nicht die Gewalt was mich an der Fallout Reihe gereizt hat,aber sie war immer die Kirsche auf der Sahnetorte ( Und ich will verdammt nochmal ne Kirsche oben drauf haben)
User avatar
Lexx
Administrator
Posts: 27348
Joined: Sat Dec 10, 2005 6:27 pm

Re: Ein paar Scriptfragen.

Post by Lexx »

Für die Stärke musst du nur die aktuelle Spielerstärke abfragen und diese +1 rechnen. Ist sehr einfach. Perks erstellen ist schon wieder schwieriger, aber auch nicht unmöglich. Du musst dir auf jeden Fall die anderen Perks angucken und wann ein Perk wie gesetzt wird.

/Edit: Btw. die Formatierung sieht schon viel schöner aus. :>


Code is Art.
Last edited by Lexx on Fri Aug 22, 2008 3:56 pm, edited 1 time in total.
only when you no-life you can exist forever, because what does not live cannot die
User avatar
le Chew
Atomsprengkopf
Posts: 2826
Joined: Mon May 14, 2007 1:35 pm
Location: Bärlin
Contact:

Re: Ein paar Scriptfragen.

Post by le Chew »

Lexx wrote: /Edit: Btw. die Formatierung sieht schon viel schöner aus. :>

Code is Art.
Jo - auf zur nächsten Lektion: "Variablennamen"  :s000:

Konstanten - KONSTANT GROß
normale Vars - immer klein
Funktionen (Procedures) - AnfangsbuchstabenGroßundZusammenschreiben

(bei letzterem weiß ich nicht ob FO mitmacht ^^ Die API scheint zumindest nur auf Kleinschreibung zu setzen)

@Lexx

Btw - gibt es einen "offiziellen" FO-Codingstyle?
User avatar
Lexx
Administrator
Posts: 27348
Joined: Sat Dec 10, 2005 6:27 pm

Re: Ein paar Scriptfragen.

Post by Lexx »

chewie wrote: Jo - auf zur nächsten Lektion: "Variablennamen"  :s000:

Konstanten - KONSTANT GROß
normale Vars - immer klein
Richtig.
Funktionen (Procedures) - AnfangsbuchstabenGroßundZusammenschreiben
Normalerweise schon, aber alle p_proc Prozeduren werden bei Fallout klein geschrieben. ;) Wenn man eigene Prozeduren einbaut, hat man freie Hand.
@Lexx

Btw - gibt es einen "offiziellen" FO-Codingstyle?
Naja... Fallout ist recht einfach gestrickt, so viel kann man eigentlich nicht falsch machen. Wenn man immer schön einrückt (für die Übersichtlichkeit) und das oben geschriebene einhält, geht die Welt eigentlich in Ordnung. Alles andere scheint Jacke wie Hose zu sein, weil scheinbar sogar die damaligen Entwickler immer mal so geschrieben haben, wie sie gerade Lustig gewesen sind. Da ist in einem Script zum Beispiel ein langer Vorgang sehr schön abgekürzt und im nächsten Script unnötig kompliziert. Ich persönlich habe mich an den "Entwickler-Style" gewöhnt und schreibe meine Scripte genau so, wie es auch in den original Scripten zu sehen ist. Ist einfach besser, da cooler :> und außerdem hab ich mir da ja auch so gut wie alles selbst beigebracht... und das funktioniert bei mir im ersten Schritt nur über Copy&Paste und ausprobieren, ändern, ausprobieren, ändern, etc. bis das Zeug im Kopf ist.
only when you no-life you can exist forever, because what does not live cannot die
User avatar
Mr.Wolna
Moderator
Posts: 12939
Joined: Sun Oct 28, 2007 8:54 pm

Re: Ein paar Scriptfragen.

Post by Mr.Wolna »

danke an euch für die Hilfe, dann werde ich mich mal in die BIS scripte stürzen und versuchen, es logisch abzuarbeiten und in meinen code einzufügen so das es für meine Zwecke passt!


#knirsch
ich versuchs zumindestens *ggg*


ALso die erste Zeile sit klar aber wozu braucht man die zweite #mmh

    critter_add_trait(self_obj,TRAIT_OBJECT,OBJECT_TEAM_NUM,TEAM_DEN_SLAVER);
        critter_add_trait(self_obj,TRAIT_OBJECT,OBJECT_AI_PACKET,AI_SLAVER);

ist vom metzger script

und braucht man wircklich die ganze obrige zeile? was soll das team num und so weiter?
Last edited by Mr.Wolna on Fri Aug 22, 2008 4:39 pm, edited 1 time in total.
RPÜ/German Restoration Project Tanslation
Ich habe ein Gewehr, eine Schaufel und 5 Hektar Land hinter dem Haus. Man wird dich nie finden - leg dich also nicht mit mir an!   <br />
Ashbury wrote:P.s. Nein es ist nicht die Gewalt was mich an der Fallout Reihe gereizt hat,aber sie war immer die Kirsche auf der Sahnetorte ( Und ich will verdammt nochmal ne Kirsche oben drauf haben)
User avatar
Lexx
Administrator
Posts: 27348
Joined: Sat Dec 10, 2005 6:27 pm

Re: Ein paar Scriptfragen.

Post by Lexx »

Beim ersten wird Metzger zum Team "Den Slaver" hinzugefügt (ist nicht das, was du suchst, es sei denn, du willst den Spieler zum Sklavenhändler machen.) und beim zweiten bekommt Metzger die Slaver-AI. Soll heißen, er verhält sich im Kampf wie die Sklavenhändler.
only when you no-life you can exist forever, because what does not live cannot die
User avatar
Mr.Wolna
Moderator
Posts: 12939
Joined: Sun Oct 28, 2007 8:54 pm

Re: Ein paar Scriptfragen.

Post by Mr.Wolna »

also sind dei zwei zeilen für den arsch wa? #lachen#
RPÜ/German Restoration Project Tanslation
Ich habe ein Gewehr, eine Schaufel und 5 Hektar Land hinter dem Haus. Man wird dich nie finden - leg dich also nicht mit mir an!   <br />
Ashbury wrote:P.s. Nein es ist nicht die Gewalt was mich an der Fallout Reihe gereizt hat,aber sie war immer die Kirsche auf der Sahnetorte ( Und ich will verdammt nochmal ne Kirsche oben drauf haben)
User avatar
Mr.Wolna
Moderator
Posts: 12939
Joined: Sun Oct 28, 2007 8:54 pm

Re: Ein paar Scriptfragen.

Post by Mr.Wolna »

Und weiter gehts, mit der procedure timer_event.

Also ich habe auf der fo modding wiki nma und den beispiel scripten nachgeschaut, und verstehe das ganze jetzt einbisschen,(auch hier im forum ist was von lexx). Trotzdem würe ich euch bzw. dir Lexx sehr verbunden wenn mir das eienr mal kurz durchkaut.

Ahja also ich brauche doppelte time events, also z.B. Critter macht eine animation, dann geht zur einen bestimmten Tile, macht dort eine animation, und geht zurück zum ausgangspunkt.. und dann beginnt alles von neuen.
RPÜ/German Restoration Project Tanslation
Ich habe ein Gewehr, eine Schaufel und 5 Hektar Land hinter dem Haus. Man wird dich nie finden - leg dich also nicht mit mir an!   <br />
Ashbury wrote:P.s. Nein es ist nicht die Gewalt was mich an der Fallout Reihe gereizt hat,aber sie war immer die Kirsche auf der Sahnetorte ( Und ich will verdammt nochmal ne Kirsche oben drauf haben)
User avatar
Lexx
Administrator
Posts: 27348
Joined: Sat Dec 10, 2005 6:27 pm

Re: Ein paar Scriptfragen.

Post by Lexx »

Starte Funktion timer_event 1, in der Prozedur timer_event:

- Wenn timer_event 1, dann
-- Wenn Critter auf Hexfeld X, dann mache Animation
--- starte timer_event 2

- Wenn timer_event 2, dann bewege Critter zu Hexfeld Y
-- Wenn Critter auf Hexfeld Y, dann mache Animation
--- starte timer_event 1
only when you no-life you can exist forever, because what does not live cannot die
User avatar
Mr.Wolna
Moderator
Posts: 12939
Joined: Sun Oct 28, 2007 8:54 pm

Re: Ein paar Scriptfragen.

Post by Mr.Wolna »

joa so dachte ich das auch, bloss wie ist das nun jetzt bzw. was bedeuten die Zahlen?

  procedure timed_event_p_proc begin
    if(fixed_param == 1) then begin
        <Aktion 1>
        add_timer_event(self_obj,random(100,150),2);
    end
    if(fixed_param == 2) then begin
        <Aktion 2>
        add_timer_event(self_obj,random(100,150),2);
    end
  end
die ersten beiden, also die 100, 150 das ist die Zeit, aber was soll die zwei dahinter und wie genau funktionert das, so das ich das nachvollziehen kann!
RPÜ/German Restoration Project Tanslation
Ich habe ein Gewehr, eine Schaufel und 5 Hektar Land hinter dem Haus. Man wird dich nie finden - leg dich also nicht mit mir an!   <br />
Ashbury wrote:P.s. Nein es ist nicht die Gewalt was mich an der Fallout Reihe gereizt hat,aber sie war immer die Kirsche auf der Sahnetorte ( Und ich will verdammt nochmal ne Kirsche oben drauf haben)
User avatar
Lexx
Administrator
Posts: 27348
Joined: Sat Dec 10, 2005 6:27 pm

Re: Ein paar Scriptfragen.

Post by Lexx »

Mit den Zahlen sprichst du deine fixed_param an. So wie du das oben zu stehen hast, wird niemals etwas passieren, da die Aktionen gar nicht aufgerufen werden.

Du brauchst irgend ein auslösendes Ereignis. Zum Beispiel das laden einer Map oder so. Dann sagst du zum Beispiel im Script des Critters, wenn Map geladen, dann add_timer_event(...,1). Damit wird die timed_event_p_proc aufgerufen, sobald die Map geladen wird. Die 1 sagt, dass fixed_param == 1 gemeint ist, welcher dann nach deiner angegebenen Zufallszeit (100,150) abgespielt wird.
Wenn du jetzt eine Schleife machen willst, musst du im Vorgang von fixed_param == 1 das add_timer_event(...,2) noch erwähnen und unter den Aktionen von fixed_param == 2 wieder add_timer_event(...,1). Das erzeugt die Endlosschleife.

Du setzt also in der on_map_load (ist das richtig? Habs jetzt nicht im Kopf) das add_timer_event 1 rein und sprichst damit die timed_event_p_proc an. Danach wird alles nur noch in der timed_event_p_proc gemacht.
Last edited by Lexx on Wed Aug 27, 2008 8:55 am, edited 1 time in total.
only when you no-life you can exist forever, because what does not live cannot die
User avatar
Mr.Wolna
Moderator
Posts: 12939
Joined: Sun Oct 28, 2007 8:54 pm

Re: Ein paar Scriptfragen.

Post by Mr.Wolna »

stop...stop...stop, nicht so schnell. Also muss ich noch was in die map_enter _p_proc, reinschreiben?


Hab alles bis auf die Endlosschleife kapiert -.- Also was sollen nochmal die Zahlen am Ende? ich dachte, das ist die Defenation der timer_events, also wenn == 1, dann die aktiob die unter add_timer_event(...,1) steht, wenn == 2, dann    add_timer_event(self_obj,random(100,150),2); und so weiter.
Last edited by Mr.Wolna on Wed Aug 27, 2008 9:03 am, edited 1 time in total.
RPÜ/German Restoration Project Tanslation
Ich habe ein Gewehr, eine Schaufel und 5 Hektar Land hinter dem Haus. Man wird dich nie finden - leg dich also nicht mit mir an!   <br />
Ashbury wrote:P.s. Nein es ist nicht die Gewalt was mich an der Fallout Reihe gereizt hat,aber sie war immer die Kirsche auf der Sahnetorte ( Und ich will verdammt nochmal ne Kirsche oben drauf haben)
User avatar
Lexx
Administrator
Posts: 27348
Joined: Sat Dec 10, 2005 6:27 pm

Re: Ein paar Scriptfragen.

Post by Lexx »

In der map_enter_p_proc Prozedur des Critters setzt du zum Beispiel das rein:

Code: Select all

add_timer_event(self_obj,random(100,150),1);
In der timed_event_p_proc Prozedur dann das:

Code: Select all

if(fixed_param == 1) then begin
        <Aktion 1>
         add_timer_event(self_obj,random(100,150),2);
end
Was passiert hier:
Die Map wird geladen und der add_timer_event wird aufgerufen. Jetzt wird die angegebene Zufallszeit abgewartet (bei dir Werte von 100 bis 150). Ist die zufällig gewählte Zeit abgelaufen, ist die Nummer dahinter dran. Mit der add_timer_event(self_obj,random(100,150),2); rufst du die fixed_param 2 in der timed_event_p_proc Prozedur auf.

Code: Select all

if(fixed_param == 2) then begin
        <Aktion 2>
         add_timer_event(self_obj,random(100,150),1);
end
Für die Schleife ist wichtig, dass hier wieder "add_timer_event(self_obj,random(100,150),1);" drin steht, damit die timed_event_p_proc Prozedur wieder nach der Zeit 100 bis 150 aufgerufen wird und fixed_param 1 abspielt.

Du musst die Funktion auch nicht zwangsweise über die map_enter_p_proc starten. Es könnte auch passieren, wenn du den Critter ansprichst, wenn du ein Objekt mit dem Critter benutzt, usw. Du kannst das Event quasi überall aufrufen.
Wenn du aber zum Beispiel eine patroullierende Wache erstellen willst, empfiehlt es sich, timed_event_p_proc über map_enter_p_proc aufzurufen, etc. etc.
Last edited by Lexx on Wed Aug 27, 2008 9:07 am, edited 1 time in total.
only when you no-life you can exist forever, because what does not live cannot die
Post Reply

Return to “Fallout Modding”