German Überprüfen ob der Spieler schläft

4 replies
Goto Page
To the start Previous 1 Next To the start
Up
Pehlivan
User
Offline Off
Hallo,

ich habe einen Gebietstrigger(ID: 1), der einen bestimmten Radius hat.Nun möchte ich überprüfen, wenn der Gebietstrigger(ID: 1) von einem anderen Gebietstrigger(ID: 2) getriggert wurde.Dann soll der Gebietstrigger(ID: 1), überprüfen ob der Spieler schläft und wenn "true", dann soll ein Objekt(x,y,z) spawnen.

Bin schon soweit gekommen, aber mit dem Befehl sleeping komme ich nicht weiter:

Gebietstrigger(ID: 1)
Code:
1
2
3
4
5
on:trigger {
 if(sleeping) {//Hier bin ich mir unsicher
  
 }
}


Gebietstrigger(ID: 2)
Code:
1
2
3
on:trigger {
  starttrigger 1;
}



Ich habe auch schon im "adventure"-Ordner nachgeguckt(Ich glaube das war die dritte Map), aber habe nichts gefunden
09.04.15 09:01:23 pm
Up
Hurri04
Super User
Offline Off
ist in diesem fall wohl einfacher, das ganze andersherum zu machen:
Code:
1
2
3
4
5
on:sleep {
    if(inrange("info", 1, $radius) > 0) {
        create "object", 1; //erstellt eine Palme beim Spieler
    }
}

das script kommt dann in die globale script-box der map und nicht in die script-box des infos. zudem kann das info dann auch einfach z.b. eine fahne sein, anstatt ein gebiets-trigger. spart evtl intern nen bisschen rechenzeit.

die variable $radius entweder on:start mit einem wert füllen oder direkt hier im script mit einer zahl ersetzen.

befehls-referenzen: s2 cmd inrange, s2 cmd create
10.04.15 12:47:03 pm
Up
Pehlivan
User
Offline Off
Danke, der Code klappt.Jedoch könnte man es so machen, sodass der Code nur einmal ausgeführt wird?Und es gibt noch ein Problem, der Code wird trotzdem ausgeführt auch wenn der Spieler nicht schlafen kann.

Könnte man nicht den Code so schreiben?
Code:
1
2
3
4
5
6
7
on:sleep {
 if(sleeping == true) {
   if(inrange("info", 1, $radius) > 0) {
     create "object", 1;
   }
 } 
}


Jedoch habe ich keine Idee, wie der Code nur einmal ausgeführt werden kann.
10.04.15 01:42:47 pm
Up
Hurri04
Super User
Offline Off
es gibt im verzeichnis mods/Stranded II/sys eine game.inf datei, in der das schlafen global geregelt wird, da müsste man sich vermutlich mal die bedingungen herauskopieren, die erfüllt sein müssen, damit der spieler schlafen kann, und diese hier in das script einbauen, sodass das spawnen deines objekts auch nur unter diesen bedinungen geschieht.

im einzelnen sind das warscheinlich nur diese paar folgenden:
Code:
1
2
3
4
5
6
7
8
9
on:sleep {
    if(getplayervalue(4) > 5) {
        if(gety("unit",1) > 0) {
            if(playerspotted() == 0) {
                //Radius-Überpüfung etc.
            }
        }
    }
}


wenn das nur beim ersten schlafen in diesem gebiet passieren soll, dann einfach nach dem spawnen des objekts eine variable setzen, z.b.
Code:
1
$sleptInRadius = 1;

und entsprechend bei on:sleep um alle anderen bedinungen noch eine neue außenrum setzen, die überprüft, ob die variable == 0 ist.
11.04.15 01:04:18 pm
Up
Pehlivan
User
Offline Off
Hmm, ich weiß jetzt nicht wie/wo ich das einsetzen soll.

P.S: Sry, hatte schon lange nicht mehr in SII "programmiert".
To the start Previous 1 Next To the start