Problem mit ID 0

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
  • 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 Armenia

    Probiers 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 :S


    Aber gut zeig doch mal ein script teil deines Script was sich nur auf die id 0 bezieht..?

    < Beatboxen ist leicht > Beatboxen & Singen/Rappen ist schwerer >

  • 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:



    EDIT: Das ist das eine ohne MAX_PLAYERS aber reagiert trotzdem nur auf ID 0. `-´

    Einmal editiert, zuletzt von (DFE)Roy ()

  • 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 interessanter ;)


    Hier 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 ;)

    < Beatboxen ist leicht > Beatboxen & Singen/Rappen ist schwerer >

  • 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!

  • 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;
    }

    < Beatboxen ist leicht > Beatboxen & Singen/Rappen ist schwerer >

    Einmal editiert, zuletzt von Rapfabrik ()

  • 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;
    }

    < Beatboxen ist leicht > Beatboxen & Singen/Rappen ist schwerer >

  • 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;
    }



    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;
    }