Inserate / Script Fehler finden
Ich brauch Hilfe für mein Script. Es sollte machen, dass wenn man einen fremden Hazard "sieht" (freier pfad) dann wird sie erst sichtbar. hier das Script: //VERALTET, downloadlink gibts unten /*-- Sichtbarkeits-Script --*/ #strict func Initialize() { for(var i in FindObjects(Find_ID(HZCK))) { //sucht alle Hazards i->SetVisibility(VIS_Owner); //jeder clonk wird nur für den besitzer sichtbar Local(1, i) = CreateArray(GetPlayerCount()); //erstellt ein array wo für jeden "echten" spieler ein element drin ist Local(1, i)[GetOwner(i)+1] = 1; //Stellt die sichtbarkeit für den besitzer im array schonmal auf 1 } //(1 = Sichtbar, 0 = Unsichtbar) return(1); } func Timer() { for(var i in FindObjects(Find_ID(HZCK))) //Sucht alle Hazards for(var OwnClonk in FindObjects(Find_ID(HZCK), Find_Not(Find_Owner(GetOwner(i))))) //Sucht noch die anderen if(PathFree(GetX(i), GetY(i), GetX(OwnClonk), GetY(OwnClonk)) && ObjectDistance(i,OwnClonk) <= 50) //Freier weg und nicht zu weit? if(GetPlayerType(GetOwner(OwnClonk)) == C4PT_User) //wird der Hazard überhaupt von einem "echten" spieler gesteuert? if(Local(1, i)[GetOwner(OwnClonk)+1] == 0) //ist die entsprechende variable für den Spieler noch auf 0? { Local(1, i)[GetOwner(OwnClonk)+1] = 1; //so wird sie auf 1 gesetzt Log(Format("%s hat einen Terroristen entdeckt",GetPlayerName(GetOwner(OwnClonk)))); //und eine nachricht ausgegeben } for(var i in FindObjects(Find_ID(HZCK))) //sucht alle Hazards for(var x = 0; x <= GetLength(Local(1, i)); x++) //guckt die lokale variable durch if(Local(1, i)[x] == 1) //guckt, ob i für irgendeinen spieler schon sichtbar ist Local(0, i) = Local(0, i)+GetBit_vSimsi(x); //dann wird die nächste local neu gesetzt. i->SetVisibility(VIS_Local); //und der clonk entsprechend sichtbar gemacht. } private func GetBit_vSimsi(int iZahl) { var iZahl2 = iZahl-1; if(iZahl == 1) return(1); else return(2**iZahl2); } ich denk es ist gut auskommentiert zum besser verstehen. Syntax-Errors oder so sind keine drin, es geht rein ums logische. Bisher blinkt der eigene Clonk immer, und wenn man einen fremden "sieht" dann wird zwar die nachricht geloggt, aber er wird nicht sichtbar. Ich wär bereit bis zu 70 Clunker zahlen. 20 gehen auf Sven2s Konto, er hat geholfen aber halt nur teilweise hier der downloadlink: http://rapidshare.de/files/39885779/Left_Research.c4s.html einfach nach dem start ein team auswählen, den clonk an die richtige position setzen und dann "Hazards()" und "CreateObject(VIS_)" eingeben. dann kann man die verlorene forschungsstation erforschen ;) 7 Kommentare |
Bisschen schwer zu verstehn der Satz. Schreib: Dann wird dieser Hazardclonk erst sichtbar. Aber ist ne gute Idee von dir. sollte man mit ALLEN Objekten machen :)
EDIT:
also jez bin ich soweit, dass man ein clonk "entdecken" kann, und der dann auch sichtbar wird.
in dem link oben, hab ich eine hilfsfunktion die zwei hazards erstellt, und man kann aber komischerweise nur den rechten "entdecken" obwohl beide eigentlich identisch sind.
woran kann das liegen.
die nachricht wird beim linken auch geloggt.
hier mal der ablauf:
wenn man erst den rechten "entdeckt" dann wird er sichtbar, die nachricht wird geloggt, alles läuft bestens. wenn man dann den linken "entdeckt", wird die nachricht geloggt, und beide werden unsichtbar!?
wenn man erst den linken "entdeckt" wird die nachricht geloggt, und er wird nicht sichtbar, entdeckt man dann den rechten wird der sichtbar, und die nachricht wird auch geloggt.
Zuletzt geändert: 01.07.2008 19:23
Zuletzt geändert: 27.06.2008 18:50
das mit dem Find_Exclude wer ich nochmal überarbeiten.
GetPlayerType() kannte ich bisher noch nicht =) werds aber auch einbauen.
Wenn es im Hazardclonk ist, geht das nicht, weil du bei der Initialisierung jedes Hazardclonks die Arrays für alle anderen Hazardclonks neu erstellst.
Wenn es ein Szenarienscript oder das Script eines anderen Objektes (Spielregel?) ist: Was ruft die Funktion "Timer" auf? Und warum machst du Find_Exclude(), wenn es nicht mi Hazardclonk steht?
Ansonsten sehe ich noch, dass "GetOwner(OwnClonk) <= GetPlayerCount()-1" Quatsch ist. Nimm dafür if (GetPlayerType(GetOwner(OwnClonk)) == C4PT_User).
Dann steht noch " i->SetVisibility(VIS_Local); " ganz nach der Schleife. Hast du den {...}-Block vergessen?
Dann noch diese GetBit-Sache: "2^iZahl2" ist nicht die Potenz sondern bitweises Xor. Du meinst vermutlich 2**iZahl2, oder besser einfach 2<<iZahl2.
Zuletzt geändert: 27.06.2008 18:10