Zelte separat abbauen[Fixed]
8 replies



01.01.14 04:08:08 pm
Hallo! Ich nochmal *grins*
Ich bin durch Zufall auch auf den Bug gestoßen, dass alle Zelte auf einmal abgebaut werden ... Ich wollte eine Zeltstadt in einer Map errichten und da war das eben etwas unpraktisch...
Ohne zu verzagen habe ich probiert, das iwie zu ändern, sodass man Zelte sichern kann...
VERWORFEN, weil: fehlerlastig
unpraktisch
zu verschachtelt
ich schreibe hier mal rein, was ich wo geändert habe
Original von :
C:\Stranded II\mods\Stranded II\sys\objects_buildings
Das konnte ich (mit viel Hilfe von Hurri04) so abändern:
Nun wird nur 1 Zelt abgebaut und man erhält einen Bausatz im Inventar. Eine Fehlermeldung bekommt man auch nicht (mehr).
Ich bin durch Zufall auch auf den Bug gestoßen, dass alle Zelte auf einmal abgebaut werden ... Ich wollte eine Zeltstadt in einer Map errichten und da war das eben etwas unpraktisch...


unpraktisch
zu verschachtelt
ich schreibe hier mal rein, was ich wo geändert habe
Original von :
C:\Stranded II\mods\Stranded II\sys\objects_buildings
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
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
### Tent
id=184
name=Zelt
group=building
icon=gfx\tent.bmp
model=gfx\tent.b3d
scale=2
health=150
mat=none
behaviour=cover
script=start
on:use {
if ($notusable==0){
clear;
add "Du kannst dieses Zelt einfach abbauen, um es an einem anderen Ort wieder aufzustellen.";
add "Was möchtest du tun?";
msgbox "Zelt";
button 0,"Zelt abbauen",8,"sys/scripts/tent.s2s";
add "closemenu;";
button 1,"Zelt stehen lassen",3;
}
}
on:build_finish {
event "tentbuild",0,0;
}
on:timer {
msg "Zelt abgebaut",4;
local $id;
$id=create("item",97);
store $id,"unit",1;
freevar $id;
free "self";
closemenu;
}
script=end
description=start
Bietet Schutz zum Schlafen und kann abgebaut werden, um es an einem anderen Wort wieder aufzubauen.
description=end
id=184
name=Zelt
group=building
icon=gfx\tent.bmp
model=gfx\tent.b3d
scale=2
health=150
mat=none
behaviour=cover
script=start
on:use {
if ($notusable==0){
clear;
add "Du kannst dieses Zelt einfach abbauen, um es an einem anderen Ort wieder aufzustellen.";
add "Was möchtest du tun?";
msgbox "Zelt";
button 0,"Zelt abbauen",8,"sys/scripts/tent.s2s";
add "closemenu;";
button 1,"Zelt stehen lassen",3;
}
}
on:build_finish {
event "tentbuild",0,0;
}
on:timer {
msg "Zelt abgebaut",4;
local $id;
$id=create("item",97);
store $id,"unit",1;
freevar $id;
free "self";
closemenu;
}
script=end
description=start
Bietet Schutz zum Schlafen und kann abgebaut werden, um es an einem anderen Wort wieder aufzubauen.
description=end
Das konnte ich (mit viel Hilfe von Hurri04) so abändern:
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
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:use {
$id= currentid();
if ($notusable==0){
clear;
add "Du kannst dieses Zelt einfach abbauen, um es an einem anderen Ort wieder aufzustellen.";
add "Was möchtest du tun?";
msgbox "Zelt";
button 0,"Zelt abbauen",8,"sys/scripts/tent.s2s";
add "closemenu;";
button 1,"Zelt stehen lassen",3;
}
}
on:build_finish {
event "tentbuild",0,0;
}
on:timer {
if($id==currentid()){
msg "Zelt abgebaut",4;
$item=create("item",97);
store $item,"unit",1;
free "object",$id,1;
closemenu;
}
else{}
}
$id= currentid();
if ($notusable==0){
clear;
add "Du kannst dieses Zelt einfach abbauen, um es an einem anderen Ort wieder aufzustellen.";
add "Was möchtest du tun?";
msgbox "Zelt";
button 0,"Zelt abbauen",8,"sys/scripts/tent.s2s";
add "closemenu;";
button 1,"Zelt stehen lassen",3;
}
}
on:build_finish {
event "tentbuild",0,0;
}
on:timer {
if($id==currentid()){
msg "Zelt abgebaut",4;
$item=create("item",97);
store $item,"unit",1;
free "object",$id,1;
closemenu;
}
else{}
}
Nun wird nur 1 Zelt abgebaut und man erhält einen Bausatz im Inventar. Eine Fehlermeldung bekommt man auch nicht (mehr).
edited 8×, last 01.01.14 08:07:30 pm

bei befehlen mit rückgabewert die klammern um die parameter nicht vergessen.
außerdem kommen um zahlen normalerweise keine anführungsstriche, es sei denn, sie sind z.b. in einem tagebuchtext oder ähnlichem enthalten.
$gesichert = gotstate "objects", 184, "21";
$gesichert = gotstate("objects", 184, 21);
dass da ein semikolon-fehler angezeigt wird liegt daran, dass der interpreter nicht allzu intelligent ist
außerdem kommen um zahlen normalerweise keine anführungsstriche, es sei denn, sie sind z.b. in einem tagebuchtext oder ähnlichem enthalten.


dass da ein semikolon-fehler angezeigt wird liegt daran, dass der interpreter nicht allzu intelligent ist

edited 2×, last 01.01.14 04:26:12 pm
Letzteres war mir klar
aber warum mach ich laufend so dumme Fehler?!
EDIT: Und jetzt fällt mir auch noch auf, dass beim Lagerfeuer der Syntax schon dasteht...

aber warum mach ich laufend so dumme Fehler?!

EDIT: Und jetzt fällt mir auch noch auf, dass beim Lagerfeuer der Syntax schon dasteht...

edited 1×, last 01.01.14 04:31:58 pm

funktioniert es denn nun?
falls nicht würde mir da nämlich noch eine wesentlich einfachere lösung einfallen:
das problem besteht ja deswegen, weil die events, die von buttons ausgelöst werden, immer global sind.
eine möglichkeit wäre also, in der tent.s2s einfach die ID des benutzten zeltes in eine globale variable abzuspeichern und dann in zeile 32 deines ersten scripts "free 'object', $id" zu schreiben anstatt "free 'self'".
evtl müsste da noch ne überprüfung auf
exists rein, aber ansonsten wäre das doch deutlich einfacher, oder?
falls nicht würde mir da nämlich noch eine wesentlich einfachere lösung einfallen:
das problem besteht ja deswegen, weil die events, die von buttons ausgelöst werden, immer global sind.
eine möglichkeit wäre also, in der tent.s2s einfach die ID des benutzten zeltes in eine globale variable abzuspeichern und dann in zeile 32 deines ersten scripts "free 'object', $id" zu schreiben anstatt "free 'self'".
evtl müsste da noch ne überprüfung auf


mach halt bei deinem 2. script beim timer nen
if vergleich rein, ob $id mit
currentid überienstimmt. falls ja, wird alles was da im moment steht gemacht, ansonsten garnichts. in dem fall kannst du bei free auch wieder "self" hinschreiben.
und änder besser den titel wieder auf was aussagekräftigeres, DC macht threads nämlich gerne schonmal zu, wenn ihm der titel zu blöd ist


und änder besser den titel wieder auf was aussagekräftigeres, DC macht threads nämlich gerne schonmal zu, wenn ihm der titel zu blöd ist



EDIT:
Naja, kann ja auch nicht, wenn ich id statt $id schreibe!
Jetzt funktionierts danke!
Btw: welchen code muss man hier anwenden, damit man text durchstreicht? ich hab [d]TEXT[/d]; [-]TEXT[/-] und sogar <strike>TEXT</strike> sowie <del>TEXT</del> ausprobiert (wobei ich del vor meinem googlegang nicht kannte ) und nix funktioniert!
edited 4×, last 01.01.14 08:04:51 pm

durchstreichen gibts hier im forum nicht mit bb-tags.
mach am besten einfach stattdessen nen [ more]-tag drum, falls es was längeres ist oder schreib "Edit:" am schluss und dann dahinter das neue zeug.
was nicht so toll ist, ist übrigens die vorherigen posts mehrfach zu editieren anstatt nen neuen post zu schreiben, wenn man jemandem antworten will, da es dabei das problem gibt, dass der andere dann unter umständen nicht mitbekommt, dass etwas neues geschrieben wurde.
mach am besten einfach stattdessen nen [ more]-tag drum, falls es was längeres ist oder schreib "Edit:" am schluss und dann dahinter das neue zeug.
was nicht so toll ist, ist übrigens die vorherigen posts mehrfach zu editieren anstatt nen neuen post zu schreiben, wenn man jemandem antworten will, da es dabei das problem gibt, dass der andere dann unter umständen nicht mitbekommt, dass etwas neues geschrieben wurde.



