German Scripting - Fragen/Probleme

6,780 replies
Goto Page
To the start Previous 1 2 ... 329 330 331 ... 339 340 Next To the start
28.10.10 03:52:29 pm
Up
SAB
User
Offline Off
hi,
hab schon wieder ne frage

also ich hab ne menge modelle gemacht, die hinterher allezusammen passen sollen ( steine beim haus) um hier jetzt nicht jedesmal die steine neu zu stapeln müssen hab ich nen create befehl an den grundstein gehängt, der dann alle modelle perfekt stapelt.

leider wenn ich nun eine wand quer zur anderen bauen will, dann dreht die sich wie die erste(ich schätze mal wie das modelll gemacht wurde) un hab ich aber keine lust alle modelle neu zu machen, daher wollte ich fragen ob man nicht einen befehl eingeben kann um die automatisch um 90° zu drehen

hoffe ihr könnt mir helfen

marc
28.10.10 04:06:20 pm
Up
Hurri04
Super User
Offline Off
du kannst per s2 cmd getyaw die aktuelle drehung eines objektes herausfinden und zurückgeben lassen und in eine variable speichern. mit s2 cmd setrot kannst du dann die rotation ändern , beim yaw- parameter gibtst du dann einfach die variable an und schreibst direkt im anschluss an die vaiable "+90" (ohne anführungszeichen".
wenn es dann um 180° gedreht sein sollte einfach mal mit "-90" versuchen, damit das modell andersherum gedreht wird.
28.10.10 04:40:32 pm
Up
SAB
User
Offline Off
sag mal, hab mich grad schon versucht in das tutorial einzulesen, da ich nicht soviel mit variablen arbeite, aber ich hab irgendwie nur bahnhof verstanden:(

könnteste mir das einmal erklären wie ich das jetzt genau schreiben soll

wäre echt nett
28.10.10 05:49:41 pm
Up
Hurri04
Super User
Offline Off
naja, variablen sind in der regel sowas wie "kontainer" für zahlenwerte, in seltenen fällen auch wörter oder texte, aber halt normalerweise eher zahlen.

eine variable wird mit einem dollarzeichen am anfang des vaiablen-namens deklariert, also zum beispiel so:
Code:
1
$variable

in Stranded 2 gibt es einige befehle, die einen wert zurückgeben, deswegen auch befehle mit rückgabewert genannt.

bei einem befehl mit rückgabewert müssen die parameter (alle zahlen und wörter, die nach dem namen des eigentlichen befehls folgen) in runde klammern gesetzt werden, bei befehlen ohne parameter kommen dann einfach die klammern hinter den befehl, ohne dass was drin steht:
Code:
1
create("unit", 1);
oder
Code:
1
day();


damit man nun mit den rückgabewerten auch was anfangen kann, speichert man sie in variablen, die man passenderweise am besten auch gleich so nennt, dass man als scripter immer wieder direkt weiß, wofür diese variable steht, auch noch, wenn man sich das script nach ein paar monaten nochmal anguckt.
Code:
1
$unit_id=create("unit", 1);
Code:
1
$day=day();


auf diese weise kann man dann mit den variablen arbeiten, da sie nun die zurückgegebenen zahlen beinhalten und auch in scripts verwendet werden können, indem man sie einfach an eine stelle schreibt, wo z.b. eine zahl stehen würde.
Code:
1
2
$day=day();
msg "Ich bin jetzt schon seit $day Tagen auf dieser Insel!";





du meintest doch, dass du schon ein script geschrieben hast, wenn du möchstest kannst du das gerne mal hier posten, damit ich oder jemand anderes dir damit weiterhelfen kann
28.10.10 06:23:22 pm
Up
SAB
User
Offline Off
also das ist mein script für das automatische aufbauen:
Spoiler >


und das der script von nem stein(eigentlich nichts besonderes):

Spoiler >


da wollte ich halt dann in den block einbauen, das der sich sich um 90 grad dreht

danke schon mal
28.10.10 06:42:49 pm
Up
Hurri04
Super User
Offline Off
bei diesem script hier musst du die ganzen parameter in klammern setzten, da s2 cmd create ein befehl mit rückgabewert ist.
außerdem musst du das mit dem s2 cmd getx und s2 cmd getz weglassen und einfach direkt nach den zahlen schon das semicolon setzen, da das ganze ja nicht bei einem bestimmten objekt oder so ausgeführt wird sondern on:start, was ja bedeutet, dass es im globalen script steht und das hat nunmal keine X- oder Z-position.
Spoiler >


und hier bin ich mir nicht ganz sicher, ob du da nen fehler gemacht hast bei den event-namen oder ob das absicht ist, ich hab einfach mal aus dem code-tag nen quote-tag gemacht damit ich die stellen hervorheben kann...
Spoiler >
28.10.10 06:56:46 pm
Up
SAB
User
Offline Off
also, ich glaub ich wurde falsch vestanden.

ich will eine wand aus vielen kleine steinen machen. da es unglaublich müselich ist hab ich den script mit den vielen objecten geschrieben. so ´kann ich diesen script in den stein reinschreiben und beim nächsten start der map steht da ne ganze wand

das klappt alles wundrbar, zumindest in eine richtung.:(

das heisst wenn ich den script in einen stein reinschreibe, der um 90° gedreht ist, dann (damit ich eine ecke habe) dreht der sich automatisch wieder so zurück, dass er so steht wie die anderen.(also nicht um die ecke

deshalb wollte ich fragen ob man nicht einen script schreiben kann, der den eckstein so dreht wie ich ihn haben will (indiesem fall um 90°)

hoffe jetzt ist alles klar
28.10.10 07:38:54 pm
Up
Hurri04
Super User
Offline Off
achso, hatte wohl angenommen, dass das script in der game.inf steht, hättest vllt noch dazuschreiben sollen, dass das in der definition eines "grundsteins" steht.

mit ein paar veränderungen an dem script in diesem grundstein sollte das aber kein problem sein, die anderen steine richtig zu drehen.

(ich mach das ganze jetzt einfach mal nur mit einer zeile aus dem script für den rest musst du das dann halt auch so übernehmen.)

als erstes musst du nur noch ein paar zeilen ganz oben bei diesem script einfügen, die werden dann nur einmal ausgeführt, danach musst du dann die befehle wiederholen.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
on:start {
     local "$x", "$z", "$yaw", "$id";
     $x=getx("self");
     $z=getz("self");
     $yaw=getyaw("self");
     $yaw=$yaw+90;

     $id=create("object", 601, $x, $z);
     setrot "object", $id, "self", $yaw, "self";

     [...]
}


so, das wärs schon.
den oberen abschnitt so übernehmen, dann kannste den unteren abschnitt (wo das objekt erstellt und gedreht wird) auch noch so übernehmen, nur den musste dann halt immer wieder kopieren und beim create-befehl die Typ-Nummer des zu erstellenden objektes ändern.

ich hab übrigens auch noch nen paar abfragen rausgenommen, die sich immer wieder wiederholt haben, so wie das mit dem s2 cmd getx und s2 cmd getz, wenn man das einmal zu anfang in ne variable speichert reicht das ja, denn wenn man das immer wieder abfragt verbraucht das mehr rechenleistung als wenn man einfach immer wieder nur die variable einsetzt.
außerdem habe ich dann noch nen s2 cmd local befehl angewendet, da ja wahrscheinlich davon auszugehen ist, dass es diesen grundstein vielleicht auch mehrmals geben kann.

mir fällt übrigens grade noch was ein:
du könntest in der allerersten zeile das
Code:
1
on:start {
durch
Code:
1
on:edset {
ersetzen, damit würde dann direkt beim platzieren des grundsteins im editor der rest platziert werden, was dann auch wieder gut wäre hinsichtlich der tatsache, dass sonst jedes mal, wenn man die map neu startet, ziemlich heftige laggs aufteten können. damit würde man dann auch direkt schon im editor sehen, ob die wand richtig positioniert ist.
das einzige problem, was dabei besteht, ist nur, dass es leider kein on:eddelete oder so gibt, sodass man die anderen steine auch alle auf einmal wieder löschen kann, indem man den grundstein löscht...
28.10.10 08:53:56 pm
Up
SAB
User
Offline Off
danke dir wirklich sehr wenn man dich dafür belohnen könnte würde ich das direkt machen, aber leider

aufjedenfall danke
12.11.10 12:50:33 pm
Up
Agentkiller
User
Offline Off
Ich wollte eine Karte machen, wenn man stirbt das man an einem bestimmten Ort wiederbelebt wird.
So das man von da an weiter spielt.
Und dann noch seine Sachen hat
Wenns möglich ist?
best games: Gothic 1-2, Castle of the winds, Terraria, don't starve, Duke Nukem 1-3d
12.11.10 09:12:15 pm
Up
Der Muggemann
User
Offline Off
so müsste es gehen:
Code:
1
2
3
4
on:kill{
     revive 1;
     setat "unit",1,"info",[infoID];
}


das ganze mittels s2 cmd extendscript beim spieler anfügen, eine info an die Stelle machen an der man wiederbelebt werden soll und die ID in das script eintragen!
Staatlich geprüfter Schlagzeuger
12.11.10 10:30:47 pm
Up
Agentkiller
User
Offline Off
und das hier im player info:
Code:
1
2
on:kill { revive 1;
setat "unit",1,"info",2; }



und das muss ich dann in den extra Info ein tragen:
Code:
1
extendscript "unit",1,"2";



Was mach ich falsch?
best games: Gothic 1-2, Castle of the winds, Terraria, don't starve, Duke Nukem 1-3d
12.11.10 10:59:50 pm
Up
Hurri04
Super User
Offline Off
wenn ich das richtig sehe darf die 2 am ende der extendscript-zeile nicht in anführungsstrichen stehen.

wenn es einfach nur die zahl ist wird nämlich automatisch davon ausgegangen, dass es sich dabei um eine info-ID handelt, wenn da ein text in anführungszeichen steht wird das als als namen für eine text-datei interpretiert, die irgendwo im mod-ordner liegt und deren inhalt dann als script verwendet wird.

> zahlen kommen normalerweise nicht in anführungsstriche!
13.11.10 07:39:21 pm
Up
Der Muggemann
User
Offline Off
Hier schon, weil es eine Quelle ist!

Du machst also eine Info, und schreibst das Erste rein.
Dann schreibst du in das Globale Script:
Code:
1
2
3
on:start{
     extendscript "unit",1,"[infoID]";
}


Und dann setzt du im Globalen Script die ID von der Info mit dem Script ein und in der Info mit dem Script die ID an der man respawnt werden soll.

Und dann sollte es funktionieren!
Staatlich geprüfter Schlagzeuger
13.11.10 08:20:42 pm
Up
Nova
User
Offline Off
Es funktioniert wunderbar ohne die Anführungsstriche. Zahlen werden nur dann in Anführungsstriche gesetzt, wenn sie als Text interpretiert werden sollen.
Wobei allerdings der Interpreter der Stranded-Scriptsprache von DC ziemlich tolerant ist, vermutlich würde es ihn nicht stören wenn man wild mit Anführungsstrichen um sich werfen würde. (Jedenfalls bei Zahlen)
Hexenverbrennung, Inquisition, Kreuzzüge... Wir wissen, wie man feiert! - Ihre Kirche
14.11.10 04:02:27 am
Up
Agentkiller
User
Offline Off
Jo danke es klappt.
Bin nämlich erst seit mittwoch angefangen zu scripten.


edit: hab jetzt meine erste map hochgeladen
wer will kann sie testen ist für stranded mod 2.5 von BIGSID
best games: Gothic 1-2, Castle of the winds, Terraria, don't starve, Duke Nukem 1-3d
20.11.10 01:41:31 pm
Up
T-REX0113
User
Offline Off
Gibt es eigentlich für die cheats in Stranded events?

Weil ich will ne Map machen in der man nicht cheaten kann.
Für Unverwundbarkeit ist das ja kein problem, aber was ist mit dem "Hunger, Durst und Müdigkeit auf 0 setzen" Cheat?
Oder dem "bauen cheat" mit dem man keine Baumateriallien braucht cheat?

Bitte um eine Antwort
︻╤─── Nichts ist Wahr, Alles ist erlaubt ───╤︻
20.11.10 01:47:50 pm
Up
Hurri04
Super User
Offline Off
nein, dafür gibt es keine ereignisse, da das ganze "hardcoded", also im source code von Stranded 2 festgelegt ist. mit einer source code änderung ließe sich sowas also machen, aber zur zeit arbeiten soweit ich weiß nur Oraclefile und Mc Leaf am source code.
20.11.10 02:10:30 pm
Up
Nova
User
Offline Off
Man könnte das ganze durch viele Scripts lösen, aber das wäre wirklich nicht wenig Arbeit.
Lass den Spieler doch cheaten wenn er will, es ist eher eine schlechte Idee, wenn man ihn zu etwas zwingen will.


Wurzel ziehen in Stranded, ist das irgendwie möglich? Vielleicht auch nur durch einen Umweg?
Und wie steht es darum, den Rest einer Division herauszufinden? Das geht zwar auch ohne eigenen Befehl, wäre dann aber einfacher.
edited 1×, last 20.11.10 03:24:31 pm
Hexenverbrennung, Inquisition, Kreuzzüge... Wir wissen, wie man feiert! - Ihre Kirche
20.11.10 03:26:10 pm
Up
Hurri04
Super User
Offline Off
also es gibt keinen direkten befehl dafür, wenn man das machen wollte, dann müsste man das wohl über nen kleinen umweg machen, z.b. wie folgt:

eine loop schleife starten, dann eine variable auf 1 setzen und mit sich selbst multiplizieren lassen (quadieren), danachbestimmen ob das ergebnis größer ist als die zahl, aus der die wurzel gezogen werden soll (1*1=1). wenn es das nicht ist, dann die variable um 1 erhöhen und anschließend mit wieder neu berechnen lassen (2*2=4) und halt immer so weiter.
wenn dann das ergebnis größer als die zahl ist, aus der die wurzel gezogen werden soll, dann eine weitere variable um 1 erhöhen, damit das script weiß, das damit eine neue stufe eingeleitet wird, bei der die proble-variable nicht immer um 1 erhöht wird bis sie größer ist als die zahl, von der die wurzel ermittelt werden soll, sondern bei der diese variable immer um 0,1 verringert wird. das wird so lange gemacht, bis das ergebnis der rechnung wieder kleiner ist als die zahl von der die wurzel ermittelt werden soll.
dann folgt eine dritte phase (2. variable wieder um 1 erhöhen), wo die 1. variable wieder immer um 0,01 erhöht wird, bis das ergebnis wieder größer ist als die zahl, deren wurzel genommen werden soll.
damit hat man dann die wurzel auf 2 stellen hinter dem komma genau bestimmt, wenn man will kann man das ganze natürlich auch noch genauer machen, da die meisten wurzeln jedoch irrational sind sollte man wohl irgendwo aufhören.

das ganze würde dann in etwa so aussehen:
Code:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
$zahl1=[HIER DIE ZAHL, DEREN WURZEL GEZOGEN WERDEN SOLL, ÜBERGEBEN];
$wurzel=1;
$wurzel_modus=0;
$wurzel_vorkomma=1;
loop("count", 10000000000000000) {
     if($wurzel_modus==0) {
          $zahl2=$wurzel*$wurzel;
          if($zahl2<$zahl1) {
               $wurzel=$wurzel*10;
               $wurzel_vorkomma++;
          }elseif($zahl2>$zahl1) {
               $wurzel=$wurzel/10;
               $wurzel_vorkomma--;
               $wurzel_modus++;
               if($wuzel_vorkomma==1) {
                    $wuzel_vorkommax=1;
               }elseif($wuzel_vorkomma==2) {
                    $wuzel_vorkommax=10;
               }elseif($wuzel_vorkomma==3) {
                    $wuzel_vorkommax=100;
               }elseif($wuzel_vorkomma==4) {
                    $wuzel_vorkommax=1000;
               }elseif($wuzel_vorkomma==5) {
                    $wuzel_vorkommax=10000;
               }elseif($wuzel_vorkomma==6) {
                    $wuzel_vorkommax=100000;
               }elseif($wuzel_vorkomma==7) {
                    $wuzel_vorkommax=1000000;
               }elseif($wuzel_vorkomma==8) {
                    $wuzel_vorkommax=10000000;
               }elseif($wuzel_vorkomma==9) {
                    $wuzel_vorkommax=100000000;
               }elseif($wuzel_vorkomma==10) {
                    $wuzel_vorkommax=1000000000;
               }
     }elseif($wurzel_modus==1) {
          $zahl2=$wurzel*$wurzel;
          if($zahl2<$zahl1) {
               $wurzel=$wurzel+$wuzel_vorkommax;
          }elseif($zahl2>$zahl1) {
               $wurzel=$wurzel-$wuzel_vorkommax;
               $wurzel_modus++;
          }
     }elseif($wurzel_modus==2) {
          $zahl2=$wurzel*$wurzel;
          if($zahl2<$zahl1) {
               $wurzel=$wurzel+0.1*$wuzel_vorkommax;
          }elseif($zahl2>$zahl1) {
               $wurzel=$wurzel-0.1*$wuzel_vorkommax;
               $wurzel_modus++;
          }
     }elseif($wurzel_modus==3) {
          $zahl2=$wurzel*$wurzel;
          if($zahl2<$zahl1) {
               $wurzel=$wurzel+0.01*$wuzel_vorkommax;
          }elseif($zahl2>$zahl1) {
               $wurzel=$wurzel-0.01*$wuzel_vorkommax;
               $wurzel_modus++;
          }
     }elseif($wurzel_modus==4) {
          $zahl2=$wurzel*$wurzel;
          if($zahl2<$zahl1) {
               $wurzel=$wurzel+0.001*$wuzel_vorkommax;
          }elseif($zahl2>$zahl1) {
               $wurzel=$wurzel-0.001*$wuzel_vorkommax;
               $wurzel_modus++;
          }
     }elseif($wurzel_modus==5) {
          $zahl2=$wurzel*$wurzel;
          if($zahl2<$zahl1) {
               $wurzel=$wurzel+0.0001*$wuzel_vorkommax;
          }elseif($zahl2>$zahl1) {
               $wurzel=$wurzel-0.0001*$wuzel_vorkommax;
               $wurzel_modus++;
          }
     }elseif($wurzel_modus==6) {
          $zahl2=$wurzel*$wurzel;
          if($zahl2<$zahl1) {
               $wurzel=$wurzel+0.00001*$wuzel_vorkommax;
          }elseif($zahl2>$zahl1) {
               $wurzel=$wurzel-0.00001*$wuzel_vorkommax;
               $wurzel_modus++;
          }
     }elseif($wurzel_modus==7) {
          $zahl2=$wurzel*$wurzel;
          if($zahl2<$zahl1) {
               $wurzel=$wurzel+0.000001*$wuzel_vorkommax;
          }elseif($zahl2>$zahl1) {
               $wurzel=$wurzel-0.000001*$wuzel_vorkommax;
               $wurzel_modus++;
          }
     }elseif($wurzel_modus==8) {
          $zahl2=$wurzel*$wurzel;
          if($zahl2<$zahl1) {
               $wurzel=$wurzel+0.0000001*$wuzel_vorkommax;
          }elseif($zahl2>$zahl1) {
               $wurzel=$wurzel-0.0000001*$wuzel_vorkommax;
               $wurzel_modus++;
          }
     }elseif($wurzel_modus==9) {
          $zahl2=$wurzel*$wurzel;
          if($zahl2<$zahl1) {
               $wurzel=$wurzel+0.00000001*$wuzel_vorkommax;
          }elseif($zahl2>$zahl1) {
               $wurzel=$wurzel-0.00000001*$wuzel_vorkommax;
               $wurzel_modus++;
          }
     }elseif($wurzel_modus==10) {
          $zahl2=$wurzel*$wurzel;
          if($zahl2<$zahl1) {
               $wurzel=$wurzel+0.000000001*$wuzel_vorkommax;
          }elseif($zahl2>$zahl1) {
               $wurzel=$wurzel-0.000000001*$wuzel_vorkommax;
               $wurzel_modus++;
          }
     }elseif($wurzel_modus==11) {
          $zahl2=$wurzel*$wurzel;
          if($zahl2<$zahl1) {
               $wurzel=$wurzel+0.0000000001*$wuzel_vorkommax;
          }elseif($zahl2>$zahl1) {
               $wurzel=$wurzel-0.0000000001*$wuzel_vorkommax;
               $wurzel_modus++;
          }
     }elseif($wurzel_modus==12) {
          $zahl2=$wurzel*$wurzel;
          if($zahl2<$zahl1) {
               $wurzel=$wurzel+0.00000000001*$wuzel_vorkommax;
          }elseif($zahl2>$zahl1) {
               $wurzel=$wurzel-0.00000000001*$wuzel_vorkommax;
               $wurzel_modus++;
          }
     }elseif($wurzel_modus==13) {
          $zahl2=$wurzel*$wurzel;
          if($zahl2<$zahl1) {
               $wurzel=$wurzel+0.000000000001*$wuzel_vorkommax;
          }elseif($zahl2>$zahl1) {
               $wurzel=$wurzel-0.000000000001*$wuzel_vorkommax;
               $wurzel_modus++;
          }
     }elseif($wurzel_modus==14) {
          $zahl2=$wurzel*$wurzel;
          if($zahl2<$zahl1) {
               $wurzel=$wurzel+0.0000000000001*$wuzel_vorkommax;
          }elseif($zahl2>$zahl1) {
               $wurzel=$wurzel-0.0000000000001*$wuzel_vorkommax;
               $wurzel_modus++;
          }
     }elseif($wurzel_modus==15) {
          $zahl2=$wurzel*$wurzel;
          if($zahl2<$zahl1) {
               $wurzel=$wurzel+0.00000000000001*$wuzel_vorkommax;
          }elseif($zahl2>$zahl1) {
               $wurzel=$wurzel-0.00000000000001*$wuzel_vorkommax;
               $wurzel_modus++;
          }
     }
}


anmerkung:
habe das script jetzt etwas anders geschrieben als ich das oben beschrieben habe, wie man das machen könnte, das script sollte jetzt noch besser funktionieren, da es aus zahlen bis 1.000.000.000 die wurzel ziehen kann.

beim modus 0 wird erstmal geprüft wie viele stellen vor dem komma die zahl hat,
beim modus 1 wird geprüft wie die ziffer ganz am anfang der zahl lautet, aus der die wurzel gezogen werden soll,
beim modus 2 wird die 2. ziffer bestimmt,
beim modus 3 die 3. ziffer usw.

wenn die zahl, deren wurzel gezogen werden soll, sehr klein ist, dann ist das ergebnis sehr genau und es gibt wiele nachkommastellen.
aber je mehr ziffern die zahl vor dem komma hat, desto weniger stellen hat sie dann auch hinter dem komma.

probier das script einfach mal aus, ich hoffe es funktioniert
(ich hoffe nur, dass es keine probleme gibt wegen der hohen loop-zahl, die dafür notwenig ist, evtl musst du in der game.inf die zahl erhöhen, die bestimmt, nach wie vielen durchläufen eine loop schleife abgebrochen wird oder einfach das script ein wenig verkürzen, wenn du schon weißt, dass du garnicht so viele nachkommastellen brauchst, z.b. wenn die zahl nur ganz wenige ziffern vor dem komma hat. in dem fall kannst du pro modus, den du löschst eine null im loop-befehl streichen.)
To the start Previous 1 2 ... 329 330 331 ... 339 340 Next To the start