Forum

> > Stranded II > Scripts > Schleifer Script
Forums overviewStranded II overview Scripts overviewLog in to reply

German Schleifer Script

39 replies
Page
To the start Previous 1 2 Next To the start

old Schleifer Script

Kreater
User Off Offline

Quote
Hallo liebe Com,

so ich sitze derzeit an einer Schleifmaschine mit deren Hilfe man Rohdiamanten zu Diamanten verarbeiten kann.

Als Object funktioniert dies wunderbar (mit Menü).

So nun habe ich diese als Unit eingetragen um eine Animation des Schleifers beim schleifen ablaufen zu lassen jedoch funktionieren nun meine Buttons nicht mehr ?

Woran könnnte das liegen ?

Hier der 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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
script=start
on:use {
		$me=currentid();
		loadani 46,1,8;
		clear;
			add "Hier kann ich meine Diamanten verarbeiten.";
		msgbox "Manueller Schleifer";

		add "event Rohdiamant2,object,$me;";
		button 0,"Rohdiamant verarbeiten";

			add "event Diamant,object,$me;";
		button 1,"Diamant verarbeiten";

		button 2,"Weggehen",3;
			add "closemenu;";


}

on:zurueck1 {
		$me=currentid();
		clear;
			add "Hier kann ich meine Diamanten verarbeiten.";
		msgbox "Manueller Schleifer";

		add "event Rohdiamant2,object,$me;";
		button 0,"Rohdiamant verarbeiten";
		
			add "event Diamant,object,$me;";
		button 1,"Diamant verarbeiten";

		button 2,"Weggehen",3;

}

on:Rohdiamant2 {

		$me=currentid();
		clear;
			add "Hier kann ich meine Rohdiamanten verarbeiten.";
		msgbox "Rohdiamantverarbeitung";


			add "event kleinerDiamant,object,$me;";
		button 0,"kleinen Diamant schleifen";

			add "event grosserDiamant,object,$me;";
		button 1,"großen Diamant schleifen";

			add "event zurueck1,object,$me;";
		button 2,"Zurück",3;


	}


on:Diamant {

		$me=currentid();
		clear;
			add "Hier kann ich meine Rohdiamanten verarbeiten.";
		msgbox "Rohdiamantverarbeitung";


		add "event Axtform,object,$me;";
		button 0,"Axtform herstellen";

			add "event Spitzhackenform,object,$me;";
		button 2,"Spitzhackenform herstellen";

		add "event Schaufelform,object,$me;";
		button 3,"Schaufelform herstellen";

			add "event Schwertform,object,$me;";
		button 4,"Schwertform herstellen";

			add "event Saegeblatt,object,$me;";
		button 5,"Sägeblatt herstellen";

			add "event Pfeilspitze,object,$me;";
		button 6,"Pfeilspitze herstellen";

			add "event Speerspitze,object,$me;";
		button 7,"Speerspitze herstellen";

			add "event zurueck1,object,$me;";
		button 8,"Zurück",3;

	}

	on:kleinerDiamant {
		if (playergotitem(261)>0) {
			process "Schleifen",6000;

			animate currentid(),1,8,1,1;	
			timer "self",6000;";
			animate currentid(),1,8,1,0;


			freestored "unit",1,261,1;
			find 264;
		}else{
			msg "Ich habe keine kleinen Rohdiamanten",3;
			speech "negative";
			closemenu;}

	}

	
	on:grosserDiamant {
		if (playergotitem(262)>0) {
			process "Schleifen",11000;

			animate currentid(),1,8,1,1;	
			timer "self",11000;";
			animate currentid(),1,8,1,0;

			freestored "unit",1,262,1;
			find 265;
		}else{
			msg "Ich habe keine großen Rohdiamanten",3;
			speech "negative";
			closemenu;}

	}

	
	on:Axtform {
		if (playergotitem(265)>0) {
			process "Schleifen",15000;

			animate currentid(),1,8,1,1;	
			timer "self",15000;";
			animate currentid(),1,8,1,0;

			freestored "unit",1,265,1;
			find 266;
		}else{
			msg "Ich habe keine großen Diamanten",3;
			speech "negative";
			closemenu;}

	}

	on:Spitzhackenform {
		if (playergotitem(265)>0) {
			process "Schleifen",15000;

			animate currentid(),1,8,1,1;	
			timer "self",15000;";
			animate currentid(),1,8,1,0;

			freestored "unit",1,265,1;
			find 267;
		}else{
			msg "Ich habe keine großen Diamanten",3;
			speech "negative";
			closemenu;}

	}

	on:Schaufelform {
		if (playergotitem(265)>0) {
			process "Schleifen",15000;

			animate currentid(),1,8,1,1;	
			timer "self",15000;";
			animate currentid(),1,8,1,0;

			freestored "unit",1,265,1;
			find 268;
		}else{
			msg "Ich habe keine großen Diamanten",3;
			speech "negative";
			closemenu;}

	}

	on:Schwertform {
		if (playergotitem(265)>0) {
			process "Schleifen",15000;

			animate currentid(),1,8,1,1;	
			timer "self",15000;";
			animate currentid(),1,8,1,0;

			freestored "unit",1,265,1;
			find 269;
		}else{
			msg "Ich habe keine großen Diamanten",3;
			speech "negative";
			closemenu;}

	}
	
	on:Saegeblatt {
		if (playergotitem(265)>0) {
			process "Schleifen",15000;

			animate currentid(),1,8,1,1;	
			timer "self",15000;";
			animate currentid(),1,8,1,0;

			freestored "unit",1,265,1;
			find 270;
		}else{
			msg "Ich habe keine kleinen Diamanten",3;
			speech "negative";
			closemenu;}

	}	

	on:Pfeilspitze {
		if (playergotitem(264)>0) {
			process "Schleifen",2000;

			animate currentid(),1,8,1,1;	
			timer "self",2000;";
			animate currentid(),1,8,1,0;

			freestored "unit",1,264,1;
			find 271;
		}else{
			msg "Ich habe keine kleinen Diamanten",3;
			speech "negative";
			closemenu;}

	}

		

	on:Speerspitze {
		if (playergotitem(264)>0) {
			process "Schleifen",2000;

			animate currentid(),1,8,1,1;	
			timer "self",2000;";
			animate currentid(),1,8,1,0;

			freestored "unit",1,264,1;
			find 272;
		}else{
			msg "Ich habe keine kleinen Diamanten",3;
			speech "negative";
			closemenu;}

	}
		

	
script=end

old Re: Schleifer Script

davidsung
User Off Offline

Quote
Grob geschaut hast Du ab und an s2 cmd closemenu entweder in falscher Reihenfolge oder erst gar nicht verwendet. 2-3 Zurück-Buttons scheinen funktionslos zu sein.

old Re: Schleifer Script

Kreater
User Off Offline

Quote
Hey davidson.

Nein nein der Script funktioniert bei einem Objekt ohne Probleme nur wenn ich das selbe nochmal als Unit Einstelle nicht mehr.

Wenn ich das Objekt und den Unit nebeneinander stelle geht nur das Objekt (jedoch haben beide den selben script)

old Re: Schleifer Script

davidsung
User Off Offline

Quote
Öhm, hast Du auch das "object" in "unit" für s2 cmd event geändert?

Edit: Mir geht es um solche Zeilen:
1
add "event Rohdiamant2,object,$me;";
Du kannst die letzten zwei Parameter gleich weglassen, es läuft auf das gleiche hinaus.

old Re: Schleifer Script

Kreater
User Off Offline

Quote
Ah ok so meinst du das.

Okay ich werde es mal alles ändern und mich dann nochmal melden ob es geklappt hat =).

Danke im vorraus.

old Re: Schleifer Script

Hurri04
Super User Off Offline

Quote
igitt, warum verwendet eigentlich jeder diese hässliche methode mit the s2 cmd add und dann s2 cmd msgbox bzw. s2 cmd button?!

geht doch mit s2 cmd dialogue viel schöner und übersichtlicher
einfach ne neue datei "dialogue_schleifen.s2s" im sys ordner erstellen und da die ganzen dialog-seiten reinpacken.


dann ist mir noch aufgefallen, dass du bei den events "kleinerdiamant" bis "speerspitze" einiges an code sparen kannst, weil die ja im prinzip alle gleich aufgebaut sind.

guck dir mal den befehl s2 cmd process an, da kann man nämlich noch nen parameter dranhängen, der angibt, welches event am ende des prozesses gestartet werden soll, sodass du den s2 cmd timer garnicht mehr brauchst, der ist hier nämlich eh völlig falsch angewendet. so wie ich das sehe versuchst du da, mit dem timer eine pause einzubauen, was aber nicht funktioniert. zudem gibt es auch keine event "on:timer". UND es kommt noch hinzu, dass du (wahrscheinlich durch copy&paste) bei den ganzen timer-befehlen am ende ein "; zuviel hast.

da sich bei diesen ganzen events ansonsten nur noch der s2 cmd find befehl unterscheidet, kannst du den ganzen klumpatsch auch zusammenpacken und in ner variable übergeben, welches item gefunden werden soll.


kleiner tipp noch: benutz nen text-editor wie z.b. notepad++, damit kann man relativ einfach im auge behalten, wie die einzelnen zeilen eingerückt sein sollen. fördert die lesbarkeit und so.

old Re: Schleifer Script

Kreater
User Off Offline

Quote
Hey Hurri04,

das ich nicht gerade begeisterte Antworten von euch bekomme war mir klar da der Script natürlich erstmal nur schnell zusammengebastelt war (habe auch nicht alzu große Scripterfahrung.. jedoch ist learning by doing immernoch das beste ;D).

So ist ja egal das der Script erstmal bisschen "dämlich" aufgebaut ist er tut in soweit seinen Job und das reicht mir erstmal.

Das einzigste was nun nicht funktioniert ist das Anhalten der Animation.

Habe es so probiert:
1
2
animate currentid(),1,8,08,1;
process "schleifen", 6000, animate currentid(),1,8,08,0;

nur das hatte nicht funktioniert.
Es kam auch keine Fehlermeldung oder ähnliches deswegen denk ich mir mal das an dem Script eventuell nur der Syntax nicht stimmt. Jedoch habe ich auch hier einiges versucht

Hier mal meine Versuche:
1
2
animate currentid(),1,8,08,1;
process "schleifen", 6000 [,"animate currentid(),1,8,08,0"];

1
2
animate currentid(),1,8,08,1;
process "schleifen", 6000,"animate currentid(),1,8,08,0";

jedoch hat das auch alles nicht geklappt. Dann habe ich es mit einer externen Script datei probiert.

1
2
3
4
animate currentid(),1,8,08,1;
process "schleifen", 6000,"sys\scrips\Ani_Schleifer_Ende.s2s";
bzw.process "schleifen", 6000[,"sys\scrips\Ani_Schleifer_Ende.s2s"];
bzw.process "schleifen", 6000,sys\scrips\Ani_Schleifer_Ende.s2s;

Funktionierte auch alles nicht.

Nun weis ich leider echt nicht weiter
Ich hoffe ihr könnt/wollt mir bei dem Problem helfen.

Mfg: Max

_______________________________

Edit:

und wie meinst du das eigentlich mit den Variablen ?
Ich weis wie man sie einsetzt jedoch verstehe ich nicht wie ich das in diesem Falle benutzen soll.

old Re: Schleifer Script

Feuer der veraenderung
User Off Offline

Quote
Nimm den "animate" Teil aus dem process raus, da kommt normalerweise sowas hin wie: "trololo"
Was dann so abgerufen wird:
on:trololo {
animate currentid(),1,8,08,0;
}

Möglich das dein Weg auch funktioniert, aber ich hab es noch nie gesehen, dass es jemand so macht Oo.

Achja [] verwendet man nicht, die sind in der befehlsrefernz nur dazu da um zu zeigen, dass etwas optional ist .

old Re: Schleifer Script

Kreater
User Off Offline

Quote
Ahh ok daran lags.

Okay nein nein habs probiert meine Methode funktioniert nicht Aber habs mal mit deiner probiert und nun funktioniert alles wunderbar Ich danke dir

Eine letzte frage habe ich jedoch noch dann lass ich euch erstmal inruhe möchte nicht das ihr mir zu viel helft bzw das ich euch auf die nerven gehe

Und uwar wie kann ich einstellen das ein wenn ein Objekt in der nähe von feuer liegt das was passiert ? Hab gelesen das es nen befehlt giebt (sowas wie if id in radius x,y,z dann mache das und das) jedoch weis ich den befehl nicht.
edited 1×, last 07.03.12 07:50:35 pm

old Re: Schleifer Script

Kreater
User Off Offline

Quote
Hurri08 has written
s2 cmd loop, s2 cmd loop_id und s2 cmd distance. dann mit s2 cmd gotstate prüfen, ob das objekt brennt.

musst den befehl natürlich noch mit nem event verknüpfen, je nachdem, was du vorhast.

eventuell lässt sich auch der befehl s2 cmd count_inrange verwenden.


Ok gabs da nicht mal einen Befehl der die xyz Koordinate brauchte und eine automatische Range erzeugt hat ? o.O
Glaube soetwas mal gelesen zu haben beim durschauen der Befehle finde es jedoch nicht mehr weil mit deiner Methode weis ich gerade nicht wie ich das anstellen soll.

Mfg: Max

old Re: Schleifer Script

trewq
User Off Offline

Quote
Meinst du areal_event bzw. areal_state? Die beiden werden dir bei dieser Problemstellung jedoch nicht viel helfen. Sieh dir mal das Script des Astes (Item) an. Dort wird ja auch geprüft, ob Feuer in der Nähe ist. Dort wird count_inrange("state",stateid,radius) verwendet. Den hat Hurri ja schon vorgeschlagen. Die Methode mit dem loop halte ich jedoch für etwas umständlich.

old Re: Schleifer Script

Hurri04
Super User Off Offline

Quote
kommt natürlich immer drauf an, was du vorhast.
da du das problem nicht allzu genau beschrieben hast, konnte ich auch nur grob vermuten, was du scripten willst und demnach auch nur allgemeine befehle nennen, die man dafür benutzen könnte.

Spoiler >

old Re: Schleifer Script

Feuer der veraenderung
User Off Offline

Quote
Ich glaube Hurri04 war sich nicht sicher ob count_inrange auch States akzeptiert, als Klasse.

Ich würde count_inrange und ein if (und ein else) und eine Variable verwenden.

Also:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
on:start { //eventuell anderes Event
local $fire;
$fire=count_inrange ("state",4,40); //Feuer wird im Radius von 40 gezählt
$fire=($fire)+(count_inrange ("state",5,40)); //Ewiges Feuer wird dazu gerechnet, eventuell müssen die Klammern weg bin mir nicht 100% sicher
if ($fire>0) {
event "was_auch_immer", "self"; //Eventuell kann das self weg.
}
else {
msg "Ich brauch Feuer";
speech "negativ";
}
}
on:was_auch_immer {
//Hier kommt rein was passieren soll
}

Der Skript ist nen schnell Schuss und ich sage nicht das irgend etwas vom ihm funktioniert, denn ich hab ihn nicht getestet. Ich hoffe aber das er irgendwie hilft.

old Re: Schleifer Script

Hurri04
Super User Off Offline

Quote
naja, wenn er das so haben will, dass es passiert, wenn das item bereits in der nähe des feuers liegt, dann müsste man das wohl so machen, dass man einen timer einrichtet, der dann mit einen loop alle brennenden objekte durchgeht und dort mit count_inrange oder so guckt, ob ein brennbares item in der nähe liegt, sodass dieses dann (zufällig) in brand gesteckt wird.

falls er jedoch meint, dass das beim abwerfen des items passieren soll, dann kann man das einfach über das event ob:drop machen, geht dann vom weggeworfenen item aus und prüft, ob in dessen nähe ein brennendes objekt ist.

old Re: Schleifer Script

Kreater
User Off Offline

Quote
Soo ich danke euch erstmal für eure Hilfe

Ich beschreibe mal genauer was ich vor habe.

Und zwar will ich das Verarbeiten von Eisen etwas verkomplizieren.

Das bedeutet das ich erst Roheisen abbaue. Dieses Roheisen soll man nun in den Brennofen SCHMEISSEN (nicht reinlegen per Menü oder so sondern reinschmeißen als ob man es aus dem Inventar rausschmeißt).

So wenn das Roheisen nun im Ofen auf dem Feuer liegt soll es nach einer bestimmten Zeit seine Id von Roheisen zu Glühenden Eisen ändern.

Sozusagen soll es nicht per Menü geschehen sondern in den Ofen geschmissen werden und dort dann iwan anfangen zu glühen

old Re: Schleifer Script

Hurri04
Super User Off Offline

Quote
gib dem item in der definition das behaviour throw.

dann nimmst du das event on:impact und die befehle s2 cmd impact_class, s2 cmd impact_id, s2 cmd type, s2 cmd if, s2 cmd timer, s2 cmd getx, s2 cmd gety, s2 cmd getz, s2 cmd create und s2 cmd free.

damit erstellt du dann ein script, das ausgelöst wird, wenn das item irgendwo aufschlägt. du überprüfst, ob das getroffene ziel ein objekt ist, nimmst die ID und überprüfst, ob es vom TYP des schmelzofens ist, wenn ja erstellst du beim eisenerz einen timer. sobald der getriggert wird nimmt du dann die x, y und z positionen des roheisens, erstellst an der gleichen stelle ein neues item vom typ des glühenden eisens und löschst das normale roheisen.

eventuell musst du noch nen befehl einbauen, damit on:impact direkt ein item vom typ des roheisens erzeugt wird, falls das nicht automatisch passiert, da kannst du dir einfach mal das script vom speer angucken.

old Re: Schleifer Script

Kreater
User Off Offline

Quote
ok ich verstehe was du meinst das erscheint mir auch ein klein wenig logischer als die andere Variante

Jedoch verstehe weis ich nicht wie man 2 werte überprüft.
Also sozusagen wie ich überprüfe ob die beiden zusammengestoßen sind und der wert true ist .

old Re: Schleifer Script

Hurri04
Super User Off Offline

Quote
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
on:impact {
	//roheisen an der stelle des aufschlags erstellen
	$x=impact_x();
	$y=impact_y();
	$z=impact_z();
	$id=create("item", [TYP DES ROHEISENS], $x, $z;
	setpos "item", $id, "self", $y, "self";

	//falls auf ofen aufgeschlagen, timer auslösen
	$class=impact_class();
	$id=impact_id();
	if(type($class, $id)==[TYP DES OFENS]) {
		timer "item", $id, 5000, 1, "iron_heated";
	}
}

on:iron_heated {
	//roheisen durch heißes eisen ersetzen
	$x=getx("self");
	$y=gety("self");
	$z=getz("self");
	$id=create("item", [TYP DES HEISSEN EISENS], $x, $z;
	setpos "item", $id, "self", $y, "self";
	free "self";
}

old Re: Schleifer Script

Kreater
User Off Offline

Quote
Quote
on:impact {
//roheisen an der stelle des aufschlags erstellen
$x=impact_x();
$y=impact_y();
$z=impact_z();
$id=create("item", [TYP DES ROHEISENS], $x, $z;
setpos "item", $id, "self", $y, "self";

//falls auf ofen aufgeschlagen, timer auslösen
$class=impact_class();
$id=impact_id();
if(type($class, $id)==[TYP DES OFENS]) {
timer "item", $id, 5000, 1, "iron_heated";
}
}

on:iron_heated {
//roheisen durch heißes eisen ersetzen
$x=getx("self");
$y=gety("self");
$z=getz("self");
$id=create("item", [TYP DES HEISSEN EISENS], $x, $z;
setpos "item", $id, "self", $y, "self";
free "self";
}


Ah ich verstehe

Jedoch frag ich mich gerade wiso das Eisen an der Stelle des Aufschlags erstellen ? Es liegt doch schon da. Eigentlich brauch man doch nur die Abfrage wegen des aufschlags und muss dann das item auswechseln oder nicht ?

Und jetzt mal die allerblödeste Frage der Welt mit Typ meinst du ID oder ?
To the start Previous 1 2 Next To the start
Log in to reply Scripts overviewStranded II overviewForums overview