Forum

> > Stranded II > Scripts > Scripting - Fragen/Probleme
Forums overviewStranded II overview Scripts overviewLog in to reply

German Scripting - Fragen/Probleme

6,780 replies
Page
To the start Previous 1 2335 336 337339 340 Next To the start

old variablen

hindustani
User Off Offline

Quote
wie kann ich den wert einer "globalen" variable direkt bestimmen/ändern.(oder geht das irgentwie auch mit setlocal?)

old Re: Scripting - Fragen/Probleme

Hurri04
Super User Off Offline

Quote
der wert einer globalen variable lässt sich ganz einfach wie folgt festlegen:
1
$variable=1;
statt 1 kannst du natürlich auch jede andere zahl nehmen, ist nur ein beispiel

s2 cmd setlocal brauchst du dabei also überhaupt nicht.

Spoiler >

old geht das so ?

hindustani
User Off Offline

Quote
on:start {
count "object",3009=$marktplatz;}

-mein ziel: ich möchte das die anzahl eines bestimmten objekts auf der karte meiner gl.variable entspricht.
edited 3×, last 13.01.11 09:42:21 pm

old Re: Scripting - Fragen/Probleme

Nova
User Off Offline

Quote
Die Variable, die den Wert am Ende haben soll, steht immer links, ebenso müssen die Parameter von Befehlen, die einen Wert zurückgeben sollen, in runden Klammern gefasst sein.
Also so:
1
2
3
4
on:start
	{
	$marktplatz = count ("object",3009);
	}

Außerdem: Bist du sicher, dass 3009 der Typ und nicht die ID ist? Die ID ist für jedes Objekt einzigartig, der Typ nur für jede Objektart.
So hat zwar jede Kiste den Typ 136, aber nicht die gleiche ID. Fahre mit der Maus über das Bild des Objekts im Editor, dessen Typ du herausfinden möchtest. Dann wird die Nummer angezeigt.

old native

hindustani
User Off Offline

Quote
kann mir jemand helfen, ich möchte eigendlich alles beibehalten, bis darauf, dass die unit auf eine einheit "x" schießt.
ich hab vieles versucht (z.b. mit attack_unit...usw.)
hat nie funktioniert.(wieder orginal skript)
wäre toll wenn jemand ne lösung hat.

danke im vorraus




(orginal skript)
##################
# Modell für Nahkampf
id=202
name=Eingeborener mit Bogen
icon=gfx\mc_leaf\icon_native_bow.bmp
model=gfx\native_bow.b3d
group=human,std
scale=0.9
colxr=12
colyr=24
behaviour=raptor
speed=2.0
turnspeed=3.0
eyes=10
health=75
range=500
attackrange=50
maxweight=25000
ani_move=2,3,0.1
ani_die=4,8,0.15
ani_attack=10,30,0.75
#ani_idle1=9,13,0.09
#ani_idle2=14,21,0.08
#ani_idle3=21,23,0.12
#ani_idle1=30,70,0.005
sfx=native
loot=60,1
loot=838,1
damage=0
param=damage,10
script=start
     on:start { if (count("object",500)>0) { skip; }
          local $dmg,$tmp,$type;
          $tmp=currentid();
          $type=type("unit",$tmp);
          $dmg=defparam("unit",$type,"damage");
          freevar $tmp,$type;
     }

     //(Messerangriff)
     on:ai_attack {
          local $protection,$shield,$tmp;
          $protection=0;
          //SCHILD
          $shield=getplayerammo();
          if ($shield==0) { $shield=getplayerweapon(); }
          if ((($shield>0)&&(playergotitem($shield)>0))&&(defparam("item",$shield,"protection")>0)) {
               $protection+=(defparam("item",$shield,"protection")/100.0);
               if (random(1,100)==1) {
                    msg "Mist! Mein Schild ist zerbrochen!",3,5000;
                freestored "unit",1,$shield,1;
               }
          }
          //LEDERKLEIDUNG
          if (playergotitem(764)>0) {
               $protection+=0.25;
               if (random(1,100)>75) {
                    msg "Die Lederkleidung ist komplett zerschlissen!",3;
                    freestored "unit",1,764,1;
               }
          }
          //Schaden
          $tmp=$dmg*(1.0-$protection);
          if ($tmp<0) { $tmp=0; }
          damage "unit",1,$tmp;
          echo "!4 Player is wearing a cover and got $tmp of $dmg damage";
          //Kochenbrüche und Blutungen
          $tmp=(int($protection*10)+8);
          if (random($tmp)==1) {
               if (gotstate("unit",1,17)==0) {
                    if (random(5)<2){
                         addstate "unit",1,1;
                    }else{
                         addstate "unit",1,7;
                    }
               }
          }
          freevar $protection,$shield,$tmp;
     }

     on:attack_player {
          if (lives("self")==1) {
               freetimers "self";
               if ((playerdistance("self")>300)||(gety("unit",1)<=0)) {
                    timer "self",random(100,1500);
               }
          }
     }

     on:hit {
          if (timercount("self")==0) { event "attack_player"; }
     }

     on:timer {
          if (gety("self")>-20) {
               local $x,$z,$yaw,$id,$health;
               $x=getx("self");
               $z=getz("self");
               $yaw=getyaw("self");
               $id=create("unit",203,$x,$z);
               setrot "unit",$id,"self",$yaw,"self";
               $health=health("self");
               health "unit",$id,($health-75);
               timer "unit",$id,1500,1,"attack";
               timer "unit",$id,1900,1,"replace";
               echo "$health";
               free "self";
          }
     }

     on:kill {
          local $tmp;
          $tmp=random(5,15);
          store create("item",53,0,0,$tmp),"self";
          $tmp=random(1,100);
          if ($tmp>90) {
               store create("item",36,0,0,1),"self";
          } elseif ($tmp>75) {
               store create("item",18,0,0,1),"self";
          } elseif ($tmp>50) {
               store create("item",17,0,0,1),"self";
          }
          freetimers "self";
          event "iskill_hunt","global";
     }
script=end
edited 2×, last 21.01.11 01:23:20 pm

old brauche hilfe!!

supersb
User Off Offline

Quote
hi !

ich hätte mal ne frage zum Palsenwall-tor .

wie kann ich es auf und zu machen?

danke im vorraus


mfg

old geht nicht

supersb
User Off Offline

Quote
habe ich geht trotzdem nicht ....


wie mach ich einen script? oder wo muss ich ihn einfügen??

old Re: Scripting - Fragen/Probleme

Der Muggemann
User Off Offline

Quote
Scripts gibt man im editor ein (bei jedem objekt ist da so ein fester), aber wenn du davon keine ahnung hast wird dir mein code nicht viel nützen (da musst du noch ein bischen mehr eingeben)
Mit E sollte es eigentlich gehen! Bist du im Editor, oder hast du es auf einer Zufallsinsel gebaut?

old Tür zu, es zieht !

BiGSiD
User Off Offline

Quote
Du solltest vor dem Tor stehen(dicht davor) und mit dem Fadenkreuz auf ein Teil des Tores zeigen, die Seitenpfeiler oder die Oberkante (Blick nach oben).

Dann'E' drücken und es sollte funzen.

Wenn du ins leere, in ein geöffnetes Tor klickst, passiert gar nix.

old plazierungs script

0TT0
User Off Offline

Quote
hi ich wollte einen plazierungeskript ertellen
die 4eckige ruine soll nämlich überall von unten bis oben und rechtz bis links und von vorne bis hintren stehen
(es soll damit dann ein mienen system entstehen) am besten wäre es wenn überall rostoffe nin allen etagen rumliegen unt unten ein verkeufer steht der die rostoffe gegen geld eintauscht (daneben auch die startposition) dann könnte dass dann doch auch ein zufalls spiel werden
aber eigentlich war mibe frage nur wir das den überhaupt geht

old Re: Scripting - Fragen/Probleme

Hurri04
Super User Off Offline

Quote
du kannst in Stranded 2 mit dem s2 cmd loop befehl (und ein paar anderen befehlen) zwar reihen von bestimmten objekten erstellen, allerdings kannst du keine loop befehle ineinander verschachteln, um beispielsweise eine fläche oder einen ganzen raum zu füllen (das nennt sich übrigens "rekursion").

du müsstest also von hand immer wieder das script wiederholen, mit dem du eine reihe von objekten platzierst und dann natürlich immer was dran verändern, damit die reihen von objekten nicht an der gleichen position sondern nebeneinaner erstellt werden.
allein das wär schon irrsinnig viel arbeit, wenn du dann auch noch einen raum füllen willst, viel spaß

hier ist auch eine map von Quester für die Extension Mod, da kannst du dir vielleicht mal das script angucken, dort ist man auch in einer miene, allerdings ist diese relativ klein, jedenfalls nicht über die ganze map...
edited 1×, last 30.01.11 02:31:39 pm

old Re: Scripting - Fragen/Probleme

Tau
User Off Offline

Quote
Man kann auch Flächen und Räume füllen, und zwar mit Variablen und Events!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Event 1:
	Erstelle die Variablen n, x, y und z lokal.
	Setze x, y und z gleich 0.
	Setze n gleich der Seitenlänge des Würfels.
	Event 2.

Event 2:
	Erstelle ein Objekt an (x,y,z).
	Event 3.

Event 3:
	Inkrementiere z.
	Wenn z gleich n:
		Setze z gleich 0.
		Inkrementiere y.
		Wenn y gleich n:
			Setze y gleich 0.
			Inkrementiere x.
			Wenn x gleich n:
				Abbruch.
	Event 2.

Starte mit event 1, und schreibe das in s2script.

old Re: Scripting - Fragen/Probleme

Hurri04
Super User Off Offline

Quote
nunja, auf die art und weise kann man natürlich das problem umgehen, dass man keine schleifen ineinander verschachteln kann, stimmt schon^^

old Re: Scripting - Fragen/Probleme

0TT0
User Off Offline

Quote
und wo muss ich jetz das ganze eingeben ?
und wass sind die befele dafür ?

=bei ext mod sind ja auch solche scripts nur wenn ich die in den globalen script schreibe passiert nix=

old Re: Scripting - Fragen/Probleme

Der Muggemann
User Off Offline

Quote
Es gibt, wenn du z.B.: Objekte einstellst, unter den Bildern einen Button auf dem "Script" steht. dort gibst du das Script ein und dann musst du ein Object setzen.

In den Scripts aus der Ext-Mod wird auch erklärt wie du es setzten musst, ich glaube nach diesem Objekt werden die anderen ausgerichtet.

old Re: Scripting - Fragen/Probleme

Hurri04
Super User Off Offline

Quote
das ganze muss normalerweise eigentlich dann im globalen script eingegeben werden, allerdings schon in der richtigen form, also mit den richtigen befehlen und mit der richtigen syntax und so weiter.

wenn du schon ein script geschrieben hast aber probleme damit hast, z.b. wenn es nicht läuft, dann kannst du es gerne hier posten, damit es sich jemand mal ansieht.
selbst, wenn es total falsch sein sollte, wird dich als anfänger wahrscheinlich keiner dafür auslachen oder anschnautzen

ansonsten kann ich dir noch das scripting-tutorial empfehlen sowie diese seite wo sämtliche befehle aufgelistet und beschrieben sind, die in S2 vorkommen.

old Re: Scripting - Fragen/Probleme

0TT0
User Off Offline

Quote
danke für den tutorial link nur das kannte ich schon
was meinst du mit "syntax"?

ok ich probiers...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
on:start{
$x=0;
$y=0;
$z=0;
$n=64;
\\$n oder eben meine seitenlänge  

   loop("???",???) {
    create "object",146,$y,$x,$z;
     }
      if ($z==$n) {
       set ($z=0);
        }
      if ($y==$n) {
       set ($z=0)
        }
      if ($x==$n) {
       ?loop end?
        }
        }

ok also so geht es schonmal nicht

old Re: Scripting - Fragen/Probleme

Hurri04
Super User Off Offline

Quote
also "syntax" bedeutet einfach, dass du die notwendigen zeichen wie { und } einhältst oder z.b. auch 2 gleichheitszeichen bei if-abfragen und immer ein semikilon am ende einer befehlszeile und so.

zu deinem script:
sind halt noch nen paar fehler drin, da hättest du dir die anweisungen von Thioester evtl was gründlicher durchlesen.
unter anderm steht da nämlich auch drin, dass du die variablen x, y und z schrittweise erhöhen musst, was aber in deinem script komplett fehlt.

so sachen wie variablen am anfang deklarieren muss man in S2 nicht unbedingt machen, normalerweise lässt man es deswegen einfach weg, allerdings schadet es auch nicht, wenn man sie hinschreibt, wobei das "schaden" in diesem falle so gemeint ist, dass es keinen unterschied macht, und nicht, dass es unbedingt gut ist
einen unterschied macht es aber, wenn du variablen lokal definierst, allerdings schreibst du dass dann so:
1
local "$variable";
allerdings bin ich mir jetzt auch nicht sicher, ob man das hier unbedingt machen muss oder ob das nicht auch mit globalen variablen geht...
wenn du den würfel allerdings an einer bestimmten position haben willst, dann kannst du das schon so machen aber dann darfst du halt nicht überall den wert 0 in die variablen übergeben sondern die koordinaten dieses ortes.
alternativ kann man das aber auch anders machen indem du ein info platzierst und mithilfe des s2 cmd setat befehls das erste modell an diese stelle verschiebst und dann von da aus weitermachst, dafür musst du dann nur einmal die ID des infos kennen, das du im editor platzierst (dieses info kann z.b. eine fahne sein).

und dann hast du bei dem loop noch die fragezeichen drin stehen, ich denke mal, du wusstest da nicht, was du da reinschreiben solltest...
in diesem falle wird da einfach "count" verwendet, wie du auch in der befehlsreferenz nachlesen kannst und hinter dem komma kommt dann die zahl der durchläufe.
ein loop end brauchst du auch nicht, dafür ist ja die } da, die den befehlsbereich der loopschleife wieder schließt, der mit der { hinter loop geöffnet wurde.

außerdem gibt es einige befehle mit rückgabewert, bei denen müssen dann die parameter in klammern gesetzt werden und in der regel schreibt man, da man den rückgabewert ja auch für irgendwas verwenden will, eine variable davor, in der der rückgabewert dann gespeichert wird.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
on:start {
	event "create_cube_x", "global";
	$object_distance=[abstand der objekte, ohne eckige klammern!];
	$factor_x=-1;
	$factor_y=-1;
	$factor_z=-1;
}

on:create_cube_x {
	loop("count", 64) {
		$cube_id_x=create("object", 146);
		setat "object", $cube_id_x, "info", [ID der fahne, ohne eckige klammern!];
		$factor_x++;
		$cube_x=$object_distance*$factor_x;
		rpos "object", "cube_id_x", $cube_x, 0, 0, "self", "self", "self";
		event "create_cube_y", "object", $cube_id_x;
		free "objekt", $cube_id_x;
	}
}

on:create_cube_y {
	loop("count", 64) {
		$cube_id_y=create("object", 146);
		setat "object", $cube_id_y, "object", $cube_id_x;
		$factor_y++;
		$cube_y=$object_distance*$factor_y;
		rpos "object", "cube_id_y", 0, $cube_y, 0, "self", "self", "self";
		event "create_cube_z", "global";
		free "objekt", $cube_id_y;
	}
}

on:create_cube_z {
	loop("count", 64) {
		$cube_id_z=create("object", 146);
		setat "object", $cube_id_z, "object", $cube_id_y;
		$factor_z++;
		$cube_z=$object_distance*$factor_z;
		rpos "object", "cube_id_z", 0, 0, $cube_z, "self", "self", "self";
	}
}
bin mir nicht ganz sicher ob das so funktioniert, wie du siehst habe ich am anfang doch drei variablen für x, y und z verwendet, allerdings zu dem zweck um ihre werte direkt am anfang auf -1 zu setzen, damit nachher die fahne der eckpunkt des würfels ist.
alles was du tun musst ist also eine fahne im editor setzen, das script ins globale script der map schreiben, die ID der fahne sowie den abstand der objekte eintragen (achtung, in s2s (Stranded 2 Script) kommen NIE! eckige klammern vor!), die map starten und hoffen, dass es funktioniert

allerdings könnte das ganze am anfang ein wenig dauern bis die map zum ersten mal geladen ist, da dort 1*64*64=4096 events ausgeführt werden und 64*64*64=262144 objekt erstellt werden.
das kann schonmal nen bisschen dauern, läppert sich ja dann doch schon

ich hoffe, dass ich die rekursion so richtig umgangen habe, schließlich habe ich hier nichts mit if-abragen gemacht, so wie Thioester es geschrieben hat.
aber andererseits sind die schleifen ja auch nicht direkt ineinander verschachtelt, also... kp obs klappt, denk aber mal eher schon


Edit:
so, hab noch was editiert an meinem script und bei 2 der events nen s2 cmd free befehl eingefügt, da einige objekte sonst doppelt vorhanden waren.
ich empfehle dir aber auch mal Thioesters script anzugucken, das ist etwas kürzer, aber nicht unbedingt verständlicher (auf den ersten blick jedenfalls nicht) geschrieben
edited 1×, last 31.01.11 08:07:02 pm
To the start Previous 1 2335 336 337339 340 Next To the start
Log in to reply Scripts overviewStranded II overviewForums overview