Problem mit ID 0
- Roy
- 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
-
-
guck mal nach ob du irgendeine Definierung auf den wert null gesetzt hast
z.B. #define Team_Green 0
war bei mir auch der fehler.
-
Ne, bei den Scripts, wo dieses Problem auftretet, ist nix mit Defines...
Ich versteh das auch nicht woran das liegt. -.- -
Probiers mal so:
for (new i = 0; i < MAX_PLAYERS; i++) { }
-
Zitat
in mein Gamemode beziehen sich paar Scripts nur auf ID 0 obwohl ich
for (new i=0; i<MAX_PLAYERS; i++) { }
bereits definiert habe...Zitat von Rapfabrik der ArmeniaProbiers mal so:
for (new i = 0; i < MAX_PLAYERS; i++) { }Habe auch gedacht, dass das funktionieren würde aber anscheinend nicht...
-
mit abstand musst du auch rechnen weil das kann manchmal nicht funktionieren nur weil ein abstand gefällt hat
Aber gut zeig doch mal ein script teil deines Script was sich nur auf die id 0 bezieht..?
-
Habe das mit Abstand probiert aber mit ohne Erfolg...
Jo, hier ist ein Teil, das nur ID 0 glücklich macht, eine kleines sicheres Godcar gebiet halt:Code
Alles anzeigenpublic GodCarZone(playerid) { new vehicleid = GetPlayerVehicleID(playerid); if(IsPlayerConnected(playerid)) { new Float:Health; if((IsPlayerInAnyVehicle(playerid))&&(PlayerToPoint(500, playerid, -4713.3574, -2038.9917, 246.1165)))) { TextDrawShowForPlayer(playerid, Text:Sicheres Gebiet); GetVehicleHealth(vehicleid, Health); SetVehicleHealth(vehicleid, 1000, 1); }else{ TextDrawHideForPlayer(playerid, Text:Sicheres Gebiet); return 1; } } return 1; }
EDIT: Das ist das eine ohne MAX_PLAYERS aber reagiert trotzdem nur auf ID 0. `-´
-
Schau mal ich mach dir mal ein Bespiel wie es ausschauen soll dann überlegst du bisschen und machst es selber spielst bisschen rum usw.
ist besser für dich und auch interessanterHier mal ein Payday beispiel...
public payday(playerid) {
for (new i = 0; i < MAX_PLAYERS; i++) {
SendClientMessage(i,WEIS,"|___ *Payday* ___|"); //Nachricht die der Spieler erhält beim Payday
SendClientMessage(i,GELB,"Spieler Lohn: 999$"); //Nachricht die der Spieler erhält beim Payday
SendClientMessage(i,GELB,"Level Point: +1"); //Nachricht die der Spieler erhält beim Payday
SendClientMessage(i,WEIS,"|-----------------------------------------|"); //Nachricht die der Spieler erhält beim Payday
GivePlayerMoney(i, 999); //gibt dem spieler einen gewissen Betrag vom Geld
PlayerInfo[i][pLevel]++;
SetPlayerScore(i, PlayerInfo[i][pLevel]);
}
return 1;
}wenn du es hast kannst du es mal bescheid geben hier im thread
-
public GodCarZone(playerid)
{
for (new i = 0; i < MAX_PLAYERS; i++) {
new vehicleid = GetPlayerVehicleID(i);
if(IsPlayerConnected(i)) {
new Float:Health;
if((IsPlayerInAnyVehicle(i))&&(PlayerToPoint(500, i, -4713.3574, -2038.9917, 246.1165)))) {
TextDrawShowForPlayer(i, Text:Sicheres Gebiet);
GetVehicleHealth(vehicleid, Health);
SetVehicleHealth(vehicleid, 1000, 1);
}else{
TextDrawHideForPlayer(i, Text:Sicheres Gebiet);
return 1;
}
}
}
return 1;
}Habs mal jetzt schnell getestet, scheint jetzt zu klappen, dankeschön!
-
Freut mich
Das wichtigste ist du hast was dazu gelernt
Viel spaß noch beim scripten...;)
-
-
Mhhh...
Alles schön und gut, nun klappt es auch mit mehreren Spielern aber es geht auch nur wenn alle an dem selben Ort und im Farzeug sitzen... (-.-)
Dafür einen Vorschlag? -
Hmm... kann ich dir schwer sagen aber.. warum hast du 2x return drinnen??
Aber watte mal das ist hier so ein Gebiet wenn man da hinkommt also muss es playerid sein dann bekommt der Leben oder?
Editt: probier so mal
public GodCarZone()
{
for (new i = 0; i < MAX_PLAYERS; i++) {
new vehicleid = GetPlayerVehicleID(i);
if(IsPlayerConnected(i)) {
new Float:Health;
if((IsPlayerInAnyVehicle(i))&&(PlayerToPoint(500, i, -4713.3574, -2038.9917, 246.1165)))) {
TextDrawShowForPlayer(i, Text:Sicheres Gebiet);
GetVehicleHealth(vehicleid, Health);
SetVehicleHealth(vehicleid, 1000, 1);
}else{
TextDrawHideForPlayer(i, Text:Sicheres Gebiet);
return 1;
}
}
}
return 1;
} -
Ich probier das mal mit playerid, soll das auch mit IsPlayerInAnyVehicle ebenfalls machen?
-
probier mal so
public GodCarZone()
{
for (new i = 0; i < MAX_PLAYERS; i++) {
new vehicleid = GetPlayerVehicleID(i);
if(IsPlayerConnected(i)) {
new Float:Health;
if((IsPlayerInAnyVehicle(i))&&(PlayerToPoint(500, i, -4713.3574, -2038.9917, 246.1165)))) {
TextDrawShowForPlayer(i, Text:Sicheres Gebiet);
GetVehicleHealth(vehicleid, Health);
SetVehicleHealth(vehicleid, 1000, 1);
}else{
TextDrawHideForPlayer(i, Text:Sicheres Gebiet);
return 1;
}
}
}
return 1;
} -
Auch schon probiert, das Script möchte unbedingt, dass alle Player die sich online befinden, an dem Ort sind, ansonsten geht die Zone nicht...
-
hast du auch mal da sin das ausprobiert
if(IsPlayerConnected(i)) -> if(IsPlayerConnected(playerid))
-
Ja... Ebenfalls keine Chance...
Habe das jetzt mit:
public GodCarZone()
{
for (new i = 0; i < MAX_PLAYERS; i++) {
new vehicleid = GetPlayerVehicleID(i);
if(IsPlayerConnected(i)) {
new Float:Health;
if((IsPlayerInAnyVehicle(i))&&(PlayerToPoint(500, i, -4713.3574, -2038.9917, 246.1165)))) {
TextDrawShowForPlayer(i, Text:Sicheres Gebiet);
GetVehicleHealth(vehicleid, Health);
SetVehicleHealth(vehicleid, 1000, 1);
}else{
TextDrawHideForPlayer(i, Text:Sicheres Gebiet);
return 1;
}
}
}
return 1;
}Code
Alles anzeigenpublic GodCarZone(playerid) { for (new i = 0; i < MAX_PLAYERS; i++) { new vehicleid = GetPlayerVehicleID(i); if(IsPlayerConnected(playerid)) { new Float:Health; if((IsPlayerInAnyVehicle(i))&&(PlayerToPoint(500, i, -4713.3574, -2038.9917, 246.1165)))) { TextDrawShowForPlayer(i, Text:Sicheres Gebiet); GetVehicleHealth(vehicleid, Health); SetVehicleHealth(vehicleid, 1000, 1); }else{ TextDrawHideForPlayer(i, Text:Sicheres Gebiet); return 1; } } } return 1; }
und
public GodCarZone(playerid)
{
for (new i = 0; i < MAX_PLAYERS; i++) {
new vehicleid = GetPlayerVehicleID(i);
if(IsPlayerConnected(playerid)) {
new Float:Health;
if((IsPlayerInAnyVehicle(playerid))&&(PlayerToPoint(500, playerid, -4713.3574, -2038.9917, 246.1165)))) {
TextDrawShowForPlayer(i, Text:Sicheres Gebiet);
GetVehicleHealth(vehicleid, Health);
SetVehicleHealth(vehicleid, 1000, 1);
}else{
TextDrawHideForPlayer(i, Text:Sicheres Gebiet);
return 1;
}
}
}
return 1;
}probiert. Falls jemand noch Ideen hat, bitte posten... ich probier morgen weiter.
-
Grunsätzlich gilt, ein return 1; bricht genauso wie ein break; den kompletten Schleifendurchlauf ab. An deiner Stelle könntest du ein continue; verwenden, aber das wäre unnötig. Also wurde deine Schleife auerhaft abgebrochen durch das return 1;
Als ich deinen Code mal eingerückt habe, war eine Klammer zu viel, vielleicht hab ich die versehentlich dazugemacht, ich weiß es nicht. Benutzt du SetTimerEx oder nur SetTimer, um diesen Callback aufzurufen? Ich glaube nur SetTimer so wie ich das sehe, deshalb kann kein playerid Parameter übergeben werden, weshalb dein Code oben nur für playerid 0 funktioniert hat. Außerdem benötigst du GetVehicleHealth nicht, wenn du die Erngie des Autos nur auf 1000 setzt dauerhaft
Merke
1.) Entweder es heisst
public Callback(Parameter) { }
dann benutze SetTimerEx
SetTimerEx("Callback", 1000, 1, "d", deinParameter /* wie playerid z.B.*/)2. ) Oder es heisst
public Callback() { }
dann benutze SetTimer
SetTimer("Callback", 1000, 1);In deinem Fall, da du ALLE Spieler mit einbesziehen willst und unbesiegbar machen willst, benutze die 2. Methode. Um mit der 2. Methode auf Spieler zuzugreifen,musst du wie oben in deinem Code eine Schleife benutzen.
// forward GodCarZone()
// SetTimer("GodCarZone",...);
public GodCarZone()
{
for (new i = 0; i < MAX_PLAYERS; i++) {
new
vehicleid = GetPlayerVehicleID(i);
if(IsPlayerConnected(i)) {
if((IsPlayerInAnyVehicle(i))&&(PlayerToPoint(500, i, -4713.3574, -2038.9917, 246.1165)))) {
TextDrawShowForPlayer(i, Text:Sicheres Gebiet);
SetVehicleHealth(vehicleid, 1000, 1);
}
else TextDrawHideForPlayer(i, Text:Sicheres Gebiet);
}
// } // Wo kommt die her?
}
return 1;
} -
Prima, jetzt geht es einwandfrei, danke euch!