Autor |
|
|
|
|
Das mit dem Stuhl ist ne Sache für sich, da wirst um ne Verlängerung vom Gefängnis nicht drum rum kommen, da kann man meines Wissens nichts ändern.
Übrigens: Kannst nen Ausschnitt vom Skript posten? Mich würd echt mal interessieren wiest das gelöst hast.
Dieser Beitrag wurde 1 mal editiert, zuletzt von Dragonheart am 12.04.2007 - 12:49.
|
Beitrag vom 12.04.2007 - 12:48 |
|
|
|
|
Nein, einen Ausschnitt aus dem WAC-Code werde ich nicht posten.
Ich nutze für jeden Spieler 3 Variablen :
V101 bis V110 : für die PlayerID
V111 bis V120 : für die Teamzugehörigkeit
V121 bis V130 : als Marker, ob der Slot noch besetzt ist
Dann frage ich ab, ob die SpielerID schon gespeichert wurde,
wenn nicht, wird die SpielerID die Teamzugehörigkeit abgespeichert.
Danach teste ich, welche Slots noch von Spielern belegt sind, für die freien Slots setze ich die entsprechende Variable zurück.
Dann überprüfe ich erst, ob ein Spieler in der Nähe eines Spawnpoints ist und welchem dieser angehört.
Ist der Spieler feindlich, wird dieser nun getötet oder weg teleportiert.
Mehr gebe ich zur Zeit nicht preis.
Dieser Beitrag wurde 1 mal editiert, zuletzt von Eraser-EMC2- am 12.04.2007 - 17:48.
|
Beitrag vom 12.04.2007 - 17:48 |
|
|
|
|
Jo ist ok, wennst den Code nicht rausrücken willst ist das deine Sache, aber im großen und ganzen hört sich das ganz gut an, wenn auch die WAC extrem aufgeblasen wird. Wenn ich da an 64 Spieler denk...^^ Hast es schon mit mehreren Leuten getestet oder alles nur im SP probiert?
Dieser Beitrag wurde 1 mal editiert, zuletzt von Dragonheart am 12.04.2007 - 19:47.
|
Beitrag vom 12.04.2007 - 19:46 |
|
|
|
|
Ich habe mit 2 Spielern getestet.
Als SP findet man viele Fehler erst garnicht.
Hatte zwischenzeitlich auch ein paar Tippfehler drin gehabt, die sich erst mit 2 Spieler bemerkbar machten.
Ich habe es zur Zeit für 10 Spieler ausgelegt und habe inzwischen 7 Kilobyte erreicht.
Dieser Beitrag wurde 1 mal editiert, zuletzt von Eraser-EMC2- am 12.04.2007 - 20:01.
|
Beitrag vom 12.04.2007 - 19:59 |
|
|
keine Weitergabe des WAC-Codes |
|
|
|
das ich den WAC-Code, auch nicht in Auszügen und bis jetzt keinem, poste, ist meine private Angelegenheit und nicht durch den MapMakers beeinflußt, obwohl ich ein Moderator bin.
Dieser Beitrag wurde 1 mal editiert, zuletzt von Eraser-EMC2- am 12.04.2007 - 20:13.
|
Beitrag vom 12.04.2007 - 20:11 |
|
|
|
110 Beiträge - Gelegenheitsposter
|
|
|
ganz einfach, vorausgesetzt es ist eine feste PSP für nur ein bestimmtes Team: wenn einer der PSP zu nahe kommt, wird er 10m oder 20m oder wie man will, von der PSP wieder weg teleportiert.
|
OldMan |
Dieser Beitrag wurde 1 mal editiert, zuletzt von OldMan am 13.04.2007 - 18:00.
|
Beitrag vom 13.04.2007 - 17:56 |
|
|
|
|
Ich habe die Lösung von Dragonheart nochmal mit 2 Spielern getestet und diese funktioniert leider nicht.
Das Problem liegt dabei an dem Command ENTER, so wie Dragonheart vermutet hatte.
Es stirbt immer der erste gespawnte Spieler.
Darauf habe ich eine Lösung erarbeitet, die einmal für jeden Spieler eine eigene Variable und eine Variable als Marker benötigt.
Für 64 Spieler ist diese NUR 8,5 KiloByte groß.
Vom Aufbau her unterscheidet sie sich nicht sehr von der von Dreagonheart.
PLOOP
v200 = 0 //Marker
if (player = 0) and (v101 == 1) then v200 = 1 endif
Damit überprüfe ich, ob SpielerID 0 schon in der äußeren Zone war und setzte die Variable v200 auf 1.
if ( ssnnearssn( player,SSN_Spawnpoint_rot,10) and (v200 == 0) ) or ( ssnnearssn(player,SSN_Spawnpoint_blau,10) and (v200 == 0) ) then
Hiermit überprüfe ich, ob der Spieler in der äußeren Zone ist und ob das Ereignis schonmal ausgelöst worden ist.
Wenn das Ereignis das erste mal ausgelöst wurde (V200 = 0), wird die Variable V101 für die SpielerID 0 gesetzt :
if player == 0 then v101 = 1 endif
Wurde das Ereignis das erste mal ausgelöst und der Spieler nicht in der inneren Zone ist, wird der Spieler getötet.
if ( not ssnnearssn(player,SSN_Spawnpoint_rot,5) ) and ( not ssnnearssn(player,SSN_Spawnpoint_blau,5) ) then
killssn(player)
endif
Nun muß die Variable V101 noch zurückgesetzt werden, wenn der Spieler in keiner der beiden Zonen ist.
if ( not ssnnearssn(player,SSN_Spawnpoint_rot,10) ) and ( not ssnnearssn(player,SSN_Spawnpoint_blau,10) ) then
if player == 0 then
v101 = 0
endif
endif
END
Die Bezeichnungen "SSN_Spawnpoint_rot" und "SSN_Spawnpoint_blau" müssen natürlich mit den SSN-Nummern der Spawnpoints oder anderer Objekte ersetzt werden.
Im NILE werden diese unter ID in der Objektliste zu finden sein.
Man könnte auch ohne die Variable V200 auskommen, aber dann müßte man für jeden der anderen 63 Spieler auch eine Abfrage, ob die Spieler in eine der beiden Zonen sind, erstellen.
Diese Lösung beinhaltet keine Teamerkennung.
Dieser Beitrag wurde 3 mal editiert, zuletzt von Eraser-EMC2- am 14.04.2007 - 14:33.
|
Beitrag vom 14.04.2007 - 14:24 |
|
|
|
110 Beiträge - Gelegenheitsposter
|
|
|
also ohne Teamerkennung muß man es ja nicht komplizierter machen als es ist. habs nicht probiert, müßte aber funktionieren.
PLOOP
if !ssnnearssn(player,PSP1,10) and !ssnnearssn(player,PSP2,10) leave
killssn(player)
endif
END
|
OldMan |
|
Beitrag vom 14.04.2007 - 17:12 |
|
|
|
|
Funktioniert leider nicht,
im Einzelspieler-Modus auf jedenfall, aber
bei mehreren Spieler nicht.
Es ist daselbe Problem wie bei dem "ENTER",
Wenn der erste Spieler außerhalb der Zonen ist, ist die Abfrage "WAHR", nun kommt der zweite Spieler und ist plötzlich durch das Spawnen in eine der Zonen.
Die Abfrage ist nun "UNWAHR" und bei LEAVE tritt das Ereignis beim Wechseln von "WAHR" auf "UNWAHR" zu, somit stirbt der gerade gespawnte Spieler sofort wieder.
Für Joint Ops spielt es hier keine Rolle, das es nun eine andere SpielerID in der Abfrage vorhanden ist, das kann es nicht unterscheiden.
Wenn müßte man für jeden Spieler eine Abfrage erstellen:
PLOOP
if player == 0 then
if !ssnnearssn(player,PSP1,10) and !ssnnearssn(player,PSP2,10) leave
killssn(player)
endif
endif
if player == 1 then
if !ssnnearssn(player,PSP1,10) and !ssnnearssn(player,PSP2,10) leave
killssn(player)
endif
endif
if player == 2 then
if !ssnnearssn(player,PSP1,10) and !ssnnearssn(player,PSP2,10) leave
killssn(player)
endif
endif
...
END
Dann könnte es funktioieren, werde es mal testen.
EDIT:
Bei mir funktioniert so und komme für 64 Spieler auf 7 KiloByte große WAC-datei.
Vorausgesetzt, in der Map sind keine Bots, dann würden sich die PlayerIDs während des Spieles variieren und den WAC-Code vergrößern.
WARUM ?
Die IDs der Bots belegen den unteren Bereich der PlayerIDs, das heißt sind beim Start der Map 16 Bots (ID 0 bis 15) auf der Map, beginnen die PlayerIDs ab 16, stirbt nun ein Bot (zB. ID 8) und wird aus der Map entfernt,
wird die ID 8 frei, die dann von einem neu gejointen Spieler belegt wird.
Dieser Beitrag wurde 3 mal editiert, zuletzt von Eraser-EMC2- am 14.04.2007 - 18:29.
|
Beitrag vom 14.04.2007 - 17:58 |
|
|
|
110 Beiträge - Gelegenheitsposter
|
|
|
Zitat Original geschrieben von Eraser-EMC2-
Es ist daselbe Problem wie bei dem "ENTER", |
aber bestimmt nicht, enter bedeutet nicht weiter als daß es nur einmal stattfindet (and never then).
|
OldMan |
|
Beitrag vom 14.04.2007 - 19:27 |
|
|
|
|
Klar, ENTER und LEAVE ist nicht daselbe.
Bei ENTER wird das Ereignis EINMAL beim Wechsel von "UNWAHR" auf "WAHR" ausgelöst, bei LEAVE umgekehrt, beim Wechsel von "WAHR" auf "UNWAHR".
Somit entspricht ENTER nicht "never() then", sondern es kann ein zweites mal ausgelöst werden, aber erst wenn die Condition vorher wieder "UNWAHR" war.
|
Beitrag vom 14.04.2007 - 19:46 |
|
|
|
110 Beiträge - Gelegenheitsposter
|
|
|
dann kann es nur das 'and' sein. d.h. einfach für jede PSP einzeln abfragen.
PLOOP
if !ssnnearssn(player,PSP1,10) leave
killssn(player)
endif
if !ssnnearssn(player,PSP2,10) leave
killssn(player)
endif
END
|
OldMan |
Dieser Beitrag wurde 1 mal editiert, zuletzt von OldMan am 14.04.2007 - 21:19.
|
Beitrag vom 14.04.2007 - 21:15 |
|
|
|
|
Ich glaub du verstehst das Problem nicht:
Der Wert ob die IF-Bedingung beim letzten Durchgang falsch oder wahr war, wir ja in ner Variable gespeichert, aber diese Variable wird nur einmal erstellt und dann für alle Durchläufe benutzt. Das heißt, wenn enter beim Spieler 0 einmal ausgelöst wurde muss diese Variable auf wahr stehen und das bedeuted sie steht auch bei Spieler 1 noch auf wahr, egal was beim letzten Durchgang bei Spieler 1 war. Naja nen bisschen blöd zu erklären, ich hoff du verstehsts.
Naja vergessen wirs... Einfach dran denken: Kein ENTER, LEAVE und NEVER in Loops außer es ist für jeden Spieler ne extra If-Bedingung vorhanden.
@Eraser: Ich würd statt player lieber ne Variable hochzählen, das kanns zwar mal den falschen erwischen, aber die Chance ist recht gering.
Äh und ne Frage zu deinem Skript oben:
Hast auch getestet, was mit dem passiert, der am PSP spawnt? Ich hab da so nen Verdacht...^^
Dieser Beitrag wurde 6 mal editiert, zuletzt von Dragonheart am 14.04.2007 - 23:30.
|
Beitrag vom 14.04.2007 - 22:57 |
|
|
|
110 Beiträge - Gelegenheitsposter
|
|
|
ich verstehe das problem schon lol. und welche variable wird nur einmal erstellt ?
Also bei mir geht es, mußte zwar noch eine kleine OR Erweiterung einfügen, da die eine Sekunde wac Durchlauf zu langsam ist und habe GLOOP benutzt und es funktioniert mit leave, und natürlich funktioniert leave und enter im loop, das beweißt schon der Fakt, daß in dem Moment wo 2 exakt gleichzeitig ankommen, beide gleichzeitig sterben, ist aber nicht mein Problem.
siehe hier (schlechte Qualität!) das sind 4 Zeilen wac !
video
|
OldMan |
Dieser Beitrag wurde 8 mal editiert, zuletzt von OldMan am 15.04.2007 - 15:44.
|
Beitrag vom 15.04.2007 - 03:08 |
|
|
|
|
Erstmal vorweg gesagt, ich habe soweit alle Versionen im LAN mit 2 Spielern getestet.
Dabei auch das Aufspawnen beachtet, wenn der zweite außerhalb der Zonen ist.
@Oldman:
Das Problem an deiner Lösung ist, das Spieler die aufspawnen sofort sterben, wenn ein Spieler vorher im PLOOP schon außerhalb der Zonen ist.
Hast du das auch mit 2 Spielern getestet ?
Wie gesagt, im Singleplayer funktioniert deine Lösung, aber nicht im Mehrspieler-Modus, wenn einer am Spawnpoint aufspawnt.
@Dragonheart:
Wenn ich dich richtig verstehe, möchtest du die Condition mit der Zone nur einmal nutzen und damit es trotzdem mit mehreren Spieler funktioniert, eine zusätzliche Abfrage einer Counters einfügen.
Dazu hätte ich zur Zeit keine Idee parat, die funktionieren könnte.
|
Beitrag vom 15.04.2007 - 10:57 |
|