Ja gut, dann musst du bei "OnNPCConnect" das schreiben: playerready[myplayerid] = 0;
Bestimmte Spieler moven/joinen [Dringend]
- ElektroFreak
- Geschlossen
- Erledigt
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
-
-
bei dem ist es 100% auf 0 aber wird trotzdem gehin gemovt...
habe das so wie du gemacht,.. wo wird den abgefragt dass nur die gemovt werden bei denen es auf 1 steht?
@Simon2202 -
-
habe es so: @Simon2202
Code
Alles anzeigenQuellcode forward PaintBallTimer(); public PaintBallTimer() { gamestartet = 1; for(new i=0;i<MAX_PLAYERS;i++) { if(!IsPlayerConnected(i))continue; if(playerready[i] == 0)continue; //Hier wirds abgefragt. //Spieler Teleportieren playerready[i] = 0; SetPlayerPos(i, 3780,-2663,8); } return 1; }
-
Vom Code her sollte es aber einwandfrei funktionieren... Teste es mal mit einem 2. Spieler vielleicht liegt es am NPC
-
NPCs laufen/fahren einen aufgezeichneten Record ab, deren Position kann eigentlich nicht mit SetPlayerPos verändert werden.
Wenn du aber ganz auf Nummer Sicher gehen willst, dann mache es so:
forward PaintBallTimer();
public PaintBallTimer()
{
gamestartet = 1;
for(new i=0;i<MAX_PLAYERS;i++)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
if(playerready[i] == 0) continue;
playerready[i] = 0;
SetPlayerPos(i, 3780,-2663,8);
}
return 1;
}Prinzipiell ist der Code aber sonst soweit richtig.
Wenn es bei dir trotzdem nicht geht, poste bitte deine Version von Befehl und Timer nochmal komplett hier, und beschreibe ganz genau was du und der andere Spieler Schritt für Schritt machen. -
mir ist aufgefallen dass:
Wenn Spieler 1 in der pb ist und bereit macht und dann Spieler 2 aber NICHT in der Pb ist und auch bereit macht dass dann steht NACHDEM Spieler 1 bereit gemacht hat das bei Spieler 2 auch steht er wäre bereits bereit anstatt du bist nicht in der nähe.....
-
Wenn es bei dir trotzdem nicht geht, poste bitte deine Version von Befehl und Timer nochmal komplett hier, und beschreibe ganz genau was du und der andere Spieler Schritt für Schritt machen.
Wäre gut, wenn du das machen könntest, damit wir hier wieder einen einheitlichen Stand haben.
-
- if(strcmp(cmd, "/bereit",true) == 0)
- {
- //Abfragen
- /// if(playerready[playerid] == 1) return SendClientMessage(playerid,COLOR_YELLOW,"Du bist bereits bereit!");
- // if(paintball[playerid] == 0) /*wenn er nicht in der arena ist ist (0) dann*/ return SendClientMessage(playerid,COLOR_YELLOW,"Du bist nicht in der Paintball Arena!");
- // if(gamestartet == 1)/*wenn das spiel bereits läuft dann*/ return SendClientMessage(playerid,COLOR_RED,"Das Spiel hat schon begonnen!");
- if(PlayerInfo[playerid][pReady] == 1)
- {
- SendClientMessage(playerid, 0xCDFF00FF, "Du bist bereits bereit!");
- return 1;
- }
- if(paintball[playerid] == 0)
- {
- SendClientMessage(playerid, 0xCDFF00FF, "Du bist nicht in der Paintballarena");
- return 1;
- }
- if(gamestartet == 1)
- {
- SendClientMessage(playerid, 0xCDFF00FF, "Das spiel hat bereits begonnen!");
- return 1;
- }
- PlayerInfo[playerid][pReady] = 1; //Spieler macht sich bereit
- paintballplayers += 2; //Die Spieler in der PB Arena werden um 1 erhöht
- SendClientMessage(playerid,COLOR_YELLOW,"Du bist nun bereit! Solltest du die Arena verlassen musst du dich erneut bereitmachen!");
- if(paintballplayers == 2)//Wenn es 2 Spieler sind, wird ein Timer von 10 Sekunden (10.000 Millisekunden) gestartet
- {
- SetTimer("PaintBallTimer",45000,0);
- for(new i=0;i<MAX_PLAYERS;i++)
- {
- if(!IsPlayerConnected(i))continue;
- if(PlayerInfo[i][pReady] = 1)continue;
- SendClientMessage(i,COLOR_RED,"Das spiel startet in 45Sekunden! Macht euch bereit!!!");
- }
- return 1;
- }
- return 1;
- }
Habe das mal so probiert
-
Schreib das ganze so, ist bisschen übersichtlicher und so sollte es gehen:
Code
Alles anzeigenif(strcmp(cmd, "/bereit",true) == 0) { if(PlayerInfo[playerid][pReady] == 1)return SendClientMessage(playerid, 0xCDFF00FF, "Du bist bereits bereit!"); if(paintball[playerid] == 0)return SendClientMessage(playerid, 0xCDFF00FF, "Du bist nicht in der Paintballarena"); if(gamestartet == 1)return SendClientMessage(playerid, 0xCDFF00FF, "Das spiel hat bereits begonnen!"); PlayerInfo[playerid][pReady] == 1; paintballplayers += 1; //Hier hast du es um 2 erhöht gehabt! SendClientMessage(playerid,COLOR_YELLOW,"Du bist nun bereit! Solltest du die Arena verlassen musst du dich erneut bereitmachen!"); if(paintballplayers == 2) { SetTimer("PaintBallTimer",45000,0); for(new i=0;i<MAX_PLAYERS;i++) { if(!IsPlayerConnected(i))continue; if(PlayerInfo[i][pReady] = 1)continue; SendClientMessage(i,COLOR_RED,"Das spiel startet in 45Sekunden! Macht euch bereit!!!"); } return 1; } return 1; }
-
Das Problem liegt hier:
if(PlayerInfo[i][pReady] = 1)continue;Das müsste dir auch eine Warnung 211 geben (possibly unintended assignment) [=Möglicherweise ungewollte Zuweisung].
Ändere das zu:
if(PlayerInfo[i][pReady] == 1) continue;
Das war somit auch das Problem, dass alle Spieler immer bereit waren.
-
-
Bei OnPlayerDeath:
if(killerid != INVALID_PLAYER_ID) //If-Abfrage halt noch erweitern prüfen ob er in der Arena ist
{
new name[MAX_PLAYER_NAME],string[128];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
GetPlayerName(killerid,string,MAX_PLAYER_NAME);
format(string,128,"* Spieler %s hat %s getötet!",string,name);
SendClientMessageToAll(-1,string); //ggf Anpassen, an wen es gesendet werden soll
} -
@Jeffry @Kaliber habe es mal so gemacht aber so geht es nicht...:
if(impb[killerid] == 1)//ob killerid ingame ist also im match
{if(pbrang[killerid] == 1)//ob der waffenrang 1 2 3 4 oder sonstwas hat aber hier nur 1er...
{
ResetPlayerWeapons(killerid);
pbrang[killerid] = 2;
GivePlayerWeapon(killerid, 25, 500);
GameTextForPlayer(killerid, "~r~>>>Waffenbeförderung<<<", 1000,4);
}return 1;
}es kommt werder der gametext noch sonst etwas bei dem killer
-
Wie sieht denn dein ganzes OnPlayerDeath aus?
Möglicherweise hast du es falsch verschachtelt, oder ein return schon davor gesetzt. -
Function OnPlayerDeath(playerid, killerid, reason)
{
M_OnPlayerDeath(playerid,killerid,reason);if(impb[playerid] == 1)
{
SetTimerEx("pbweiter", 4000, false, "i", playerid);
if(pbrang[playerid] == 1)
{
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid, 24, 500);
SetPlayerHealth(playerid,100);
SetPlayerArmour(playerid,100);
}
if(pbrang[playerid] == 2)
{
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid, 25, 500);
SetPlayerHealth(playerid,100);
SetPlayerArmour(playerid,100);
}
return 1;
}if(impb[killerid] == 1)
{if(pbrang[killerid] == 1)
{
ResetPlayerWeapons(killerid);
pbrang[killerid] = 2;
GivePlayerWeapon(killerid, 25, 500);
GameTextForPlayer(killerid, "~r~>>>Waffenbeförderung<<<", 1000,4);
}return 1;
} -
Versuche es so:
Function OnPlayerDeath(playerid, killerid, reason)
{
M_OnPlayerDeath(playerid,killerid,reason);
if(impb[playerid] == 1)
{
SetTimerEx("pbweiter", 4000, false, "i", playerid);
if(pbrang[playerid] == 1)
{
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid, 24, 500);
SetPlayerHealth(playerid,100);
SetPlayerArmour(playerid,100);
}
else if(pbrang[playerid] == 2)
{
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid, 25, 500);
SetPlayerHealth(playerid,100);
SetPlayerArmour(playerid,100);
}
}
if(killerid != INVALID_PLAYER_ID)
{
if(impb[killerid] == 1)
{
if(pbrang[killerid] == 1)
{
ResetPlayerWeapons(killerid);
pbrang[killerid] = 2;
GivePlayerWeapon(killerid, 25, 500);
GameTextForPlayer(killerid, "~r~>>>Waffenbeförderung<<<", 1000,4);
}
}
}
return 1;
} -
26errors aber habe vor dem return 1; noch ne klammer weg gemacht dann kamen keine errors.
@Jeffrygibt es noch ne bessere version den getöteten spieler wieder in die arena zu moven als ich es jz gemacht habe mit diesem timer? also bei dem timer ist einfach nur setplayerpos....
aber davor kommt ja noch dieses typische nach unten schwenken mit diesem drehen also dieser "Standerd tot" danach wird man am normalen spawn gemacht und wegen dem timer in die arene gemovt -
26errors aber habe vor dem return 1; noch ne klammer weg gemacht dann kamen keine errors.
Dann hast du vergessen eine Klammer am Ende zu ersetzen, so wie beim Post, da hat nämlich auch eine gefehlt.
gibt es noch ne bessere version den getöteten spieler wieder in die arena zu moven
Ja, bei OnPlayerSpawn abfragen, ob der Spieler in der Arena ist, wenn ja, SetPlayerPos.
Dann ist er direkt wieder drin, wenn die Tot-Kamera vorbei ist. -
ok danke! es klappt auch mit der waffenbeförderung undso! danke
-
-
breadfish.de
Hat das Thema geschlossen.