Guten Tag Leute, ich habe mal eine frage und zwar wen ich PlayerSpectatePlayer Nutze. Wie kann ich machen das der User dann alle user beobachten kann und und mit "Pfeil" tasten den user wechseln kann?
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
http://wiki.sa-mp.com/wiki/GetPlayerKeys
Das Beispiel kannste direkt nehmen,machste noch ne abfrage ob er wen am beobachten ist und für den spieler eine eigene Variable um zu gucken welche ID er grade beobachtet, und je nachdem ob er nach links oder rechts drückt addiert/subtrahierst du 1 von seiner Variable und switcht die Kamera zum nächsten spieler.
So iwie würd ich das machen xD -
Als mal dumme frage. Könntest mir bitte machen? Weil ich das nicht versteh so wirklich wie das für alle player mache das ich zu jede spieler kann
-
public OnPlayerUpdate(playerid)
{
if(GetPlayerState(playerid)==PLAYER_STATE_SPECTATING&&_a_(playerid))
{
new bob;
for(new i;i<MAX_PLAYERS;i++)
{
bob=((i+opfa[playerid])>=MAX_PLAYERS?(i):(opfa[playerid]+i));
if(IsPlayerConnected(bob)&&bob!=opfa[playerid])return PlayerSpectatePlayer(playerid,bob);
}
}
}
_a_(playerid)
{
new _a[3];
GetPlayerKeys(playerid,_a[0],_a[1],_a[2]);
if(_a[2]>0)return true;
return false;
}
ist jetzt nur für den rechten pfeil, die variable opfa[MAX_PLAYERS] muss das spec-ziel sein. -
Ich will ja so machen weil ich whitelist habe das anstadt gekickt wird in Specta gezwisch wird und zuschauen kann.
-
Hm, kay ...
Aber ausm Kopf geschrieben und nicht getestet,keine Garantie! xD
Achja OnPlayerUpdate wir pro sekunde ca 30 mal aufgerufen,deshalb ist es dort sehr unsinnig eine Schleife auszuführen
//oben ins script
new WatchingID[MAX_PLAYERS];
new IsSpectator[MAX_PLAYERS];//vllt haste sowas in der art ja schon im script
new ConnectedPlayers;
//unter OnPlayerConnect;
IsSpectator[playerid] = 999;
Watching[playerid] = 999;
ConnectedPlayers ++;
//unter disconnect
ConnectedPlayers --;
//Wenn der Spieler halt anfangen soll nen anderen zu beobachten,kA wann du das haben willst...
//Aber z.B
public OnPlayerDeath(playerid, killerid, reason)
{
TogglePlayerSpectating(playerid, 1);
PlayerSpectatePlayer(playerid, killerid);
IsSpectator[playerid] = 1;
Watching[playerid] = killerid;
return 1;
}
//dann
public OnPlayerUpdate(playerid)
{
new Keys,ud,lr;
GetPlayerKeys(playerid,Keys,ud,lr);
if(lr > 0) //rechts
{
if(IsSpectator[playerid] == 1)
{
Watching[playerid] += 1;//drückt rechts will nächsten spieler
//Abfrage jez ob es den spiler eig gibt, z.B er ist
//bei ID 5 von 6 spielern,nächste währe dann ID 0
//das finde ich damit jez raus:
if(Watching[playerid] == ConnectedPlayers)
{
Watching[playerid] = 0;
PlayerSpectatePlayer(playerid, Watching[playerid]);
}
//ansonsten geht das ja normal weiter
PlayerSpectatePlayer(playerid, Watching[playerid]);
}
}
else if(lr < 0)//links
{
if(IsSpectator[playerid] == 1)
{
Watching[playerid] -= 1;
//hier abfrage ob er von ID 0 zum id höchsten spieler jumpt
//sagen wur von ID 1 auf 0,passt! Aber von 0?
//da springt die if abfrage hier ein,kleiner als 0 ist -1
if((Watching[playerid] == -1))
{
//zum letzen spieler,allerfings gibt es ja durch id 0 einen spieler mehr
// bsp. 7 Connected user aber spieler 7 hat id
//6 und nicht 7 ;),ist bissle verwirrend i know
Watching[playerid] = (ConnectedPlayers - 1);
PlayerSpectatePlayer(playerid, Watching[playerid]);
}
//ansonsten geht das ja normal weiter
PlayerSpectatePlayer(playerid, Watching[playerid]);
}
}
return 1;
} -
Finde ich gut aber. Es ist Selfmad reallife mit Whitelist. So nun will so machen das er nicht gekickt werden kann sonder das er in spec mod ist. Weil wenn ein user Gekickt wird heißt meiner meinung nach " DU bist hier nicht erwünscht!" Deshalb habe ich mir sowas ausgedacht
-
Ja dann baus statt onplayerdeath halt bei onplayerspawn ein oder was weiß ich , ich kenn dein script doch nicht,weiß ich denn was du vor hast? ne,darum lernste pawn ja auch damit du machen kannst was du dir vorstellst...
-
Danke dir. Echt nett von dir. Also habe nun da wo er eiglich gekickt werden soll das eingefügt:
TogglePlayerSpectating(playerid, 1);
PlayerSpectatePlayer(playerid, killerid);
IsSpectator[playerid] = 1;
Watching[playerid] = killerid;Und das wäre bei onPlayerConnect
C:\Users\Manunator\Desktop\RL.pwn(2605) : error 017: undefined symbol "killerid"
C:\Users\Manunator\Desktop\RL.pwn(2607) : error 017: undefined symbol "Watching"
C:\Users\Manunator\Desktop\RL.pwn(2607) : warning 215: expression has no effect
C:\Users\Manunator\Desktop\RL.pwn(2607) : error 001: expected token: ";", but found "]"
C:\Users\Manunator\Desktop\RL.pwn(2607) : error 029: invalid expression, assumed zero
C:\Users\Manunator\Desktop\RL.pwn(2607) : fatal error 107: too many error messages on one lineCompilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
5 Errors.
-
Mach oben aus
WatchingID[MAX_PLAYERS];
//das
Watching[MAX_PLAYERS];
//und bei OnPlayerConnect kannste schlecht dasselbe nehmen wie bei onplayerdeath xD
TogglePlayerSpectating(playerid, 1);
PlayerSpectatePlayer(playerid, ConnectedPlayers);
IsSpectator[playerid] = 1;
Watching[playerid] = ConnectedPlayers;
//ansonsten halt bei onplayerspawn rein,ich kann mir denken es gibt probleme wenn dus unter onplayerconnect reinmachst! -
-
Ok hat kein errors. Morgen teste ich mit 2 mann. Danke dir.
Es geht soweit. Nur wen kein Playeron kuckst du im himmel kp und bist zusamm gerollt xD
und mann kann sich registern was mann nciht soll.
-
breadfish.de
Hat das Thema geschlossen.