Forum
Stranded II Scripts Scripting - Fragen/Probleme1
$variable=1;
setlocal brauchst du dabei also überhaupt nicht.
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
Also so:
1
2
3
4
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.
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
ich hätte mal ne frage zum Palsenwall-tor .
wie kann ich es auf und zu machen?
danke im vorraus
mfg
1
event "toogle","object",[ID];
wie mach ich einen script? oder wo muss ich ihn einfügen??
Mit E sollte es eigentlich gehen! Bist du im Editor, oder hast du es auf einer Zufallsinsel gebaut?
Dann'E' drücken und es sollte funzen.
Wenn du ins leere, in ein geöffnetes Tor klickst, passiert gar nix.
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
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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.
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=
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.
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.
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
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
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";
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 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
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"; 	} }
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 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