Alter : 27 Ort : Irgendwo im Nirgendwo Anmeldedatum : 14.02.11
Thema: Szenarioscript - Eliminieren Sa Jul 30, 2011 7:28 pm
Hallo Leute, Ich habe versucht mit einem Szenarioscript einen Effekt zu erstellen, der die Funktion Hallo() aufruft, wenn der durch FindObject() ermittelte Wipf tot ist. Diese Funktions soll dann alle Spieler außer den Killer Eliminieren. Aber das klappt nicht so ganz. Das ist der Script:
global func FxTestStart() { if(GetAlive(FindObject(WIPF))) Hallo(); }
global func Hallo() { for(var i = GetPlayerCount(); i > 0; i--) { var y=i-1; if(!GetPlayerByIndex(y)==GetKiller(FindObject(WIPF))) EliminatePlayer(i-1); } }
Ich habe auch mal versucht, Hallo() aufzurufen wenn der Wipf tot ist. Dann hat es auch nicht funktiniert. Es muss laso an der Funktion Hallo liegen. Könnt ihr mir da weiterhelfen?
EDIT: Ich hab das Problem selbst gelöst. 1. Wird die Definition des Wipfs geändert wenn er draufgeht, wesshalb der Killer nicht zurück gegeben werden kann. 2. Ist der Script ein Produkt aus 2 min Arbeit und hat darum auch bestimmmt viele andere Fehler -.-
Nun habe ich den Script geändert. Er erstellt nun einen Clonk namens Hugo und steckt ihn in das Team vom Scriptplayer "Gegner". Er läuft quer durch die Map und wer ihn tötet, bleibt verschont wenn die For-Schleife alle Eliminiert, die Hugo nicht getötet haben.
global func Schleife() { for(var i=GetPlayerCount(); i > -1; i--) { Log(Format("Spieler %v wird geprüft",GetPlayerByIndex(i))); if(!i == GetKiller(pClonk)) EliminatePlayer(i); if(i == -1) break; } return(1); }
func Script1() { var Player = Random(GetPlayerCount()); var Color = GetPlrColorDw(Player-1); if(Random(10)) SetColorDw(Color,pClonk); var Laufen = RandomX(20,LandscapeWidth()); SetCommand(pClonk,"MoveTo",0,Laufen,GetY(pClonk)); }
func Script10() { if(GetAlive(pClonk)) goto(1); }
func Script15() { Schleife(); }
func Script16() { if(GetKiller(pClonk) == -1) Message("Hugo hat sich selbst ermordet der Trottel! Das spiel geht unentschieden aus"); else Message(Format("%v hat den %v getötet und wird darum zum Sieger gekrönt.",GetPlayerName(GetKiller(pClonk)),GetName(pClonk))); }
Das Problem: Es funktioniert immer noch nicht. Mal wird nur ein Spieler eliminiert, dann wieder keiner und am Schluss alle -.-
Ich denke der Script ist selbsterklärend. Wenn nicht, werde ich ihn noch weiter erläutern.
Naja, die Schleife sieht falsch aus: Wenn du i direkt am Anfang als GetPlayerCount() setzt, dann musst du immer i um 1 herunterzählen. Um es aber einfacher zu haben, bevorzuge ich die umgekehrte Methode:
Code:
for(var i = 0; i < GetPlayerCount(); i++)
Zudem, was versuchst du mit "if(!i == GetKiller(pClonk))" zu bewirken? Falls i > 0 ist, wird dann immer geprüft: 0 == GetKiller(pClonk), Falls i = 0 ist, 1 == GetKiller(pClonk). Das '!' muss da weg.
Wipfmagus Konteradmiral
Alter : 28 Anmeldedatum : 06.03.10
Thema: Re: Szenarioscript - Eliminieren Di Aug 23, 2011 11:27 pm
Du meinst wahrscheinlich
Code:
if(i != GetKiller(pClonk))
... du wolltest dies anscheinend als
Code:
if(!(i == GetKiller(pClonk)))
schreiben. Klammern musst du setzen - denk an Punkt- vor Strichrechnung! Sonst gilt die Negation nur für die Variable i. Logische Operatoren kommen eben noch weiter davor.