Wantedstern-System

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
  • Hi Leute,


    hab ein Problem:
    Ich hab mir so ein Wantedsternsystem erstellt bei dem man wie im Single-Player-Modus ein Wanted weg bekommt wenn man durch einen Stern fährt.
    Irgendwie spawnt bei mir aber nur ein Stern und nicht 6 wie es sollte.
    Vielleicht fällt mir der Fehler einfach nicht auf...
    Bitte um Hilfe!


    //Wantedsterne:
    new wantedstern[6];
    new Float:Sterne[][21] =
    {
    {964.1988,-1726.5197,13.5480},
    {742.9077,-1383.6504,25.6922},
    {513.2272,-1226.0343,43.9561},
    {1549.6445,-804.9227,72.2175},
    {2021.6064,-1042.3839,24.8023},
    {2562.7632,-1141.3459,51.7578},
    {2484.7676,-1765.7177,13.5539},
    {2270.9719,-2374.5776,17.4219},
    {2286.2500,-1354.2195,30.5625},
    {2262.3440,-755.9854,38.0179},
    {2324.0854,-52.9940,26.4844},
    {1642.2914,245.2601,19.7410},
    {1968.5441,906.8984,10.8203},
    {1998.1050,2330.7424,10.8203},
    {-2555.5422,451.3930,14.6622},
    {-2975.7556,503.8995,2.4297},
    {-2756.5574,-121.0871,6.8685},
    {-2293.9617,-2449.5110,25.6750},
    {-1430.6826,906.3411,7.1875},
    {-1695.1555,-155.2955,21.2222}
    };


    //Wantedsternsystem:
    SetTimer("sternerespawn",1000*60*30,true);
    new zufall = random(sizeof(Sterne));
    wantedstern[0] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    wantedstern[1] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    wantedstern[2] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    wantedstern[3] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    wantedstern[4] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    wantedstern[5] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);


    forward sternerespawn();
    public sternerespawn()
    {
    DestroyPickup(wantedstern[0]);
    DestroyPickup(wantedstern[1]);
    DestroyPickup(wantedstern[2]);
    DestroyPickup(wantedstern[3]);
    DestroyPickup(wantedstern[4]);
    DestroyPickup(wantedstern[5]);
    new zufall = random(sizeof(Sterne));
    wantedstern[0] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    wantedstern[1] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    wantedstern[2] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    wantedstern[3] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    wantedstern[4] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    wantedstern[5] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    return 1;
    }


    if(pickupid==wantedstern[0] || pickupid==wantedstern[1] || pickupid==wantedstern[2] || pickupid==wantedstern[3] || pickupid==wantedstern[4] || pickupid==wantedstern[5])
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPVarInt(i,"Fraktion")==3 || GetPVarInt(i,"Fraktion")==5 || GetPVarInt(i,"Fraktion")==13)
    {
    new string[128];
    format(string,sizeof(string),"%s hat einen Wantedstern gefunden!",SpielerName(playerid));
    SendClientMessage(i,COLOR_LIGHTGREEN,string);
    if(GetPlayerWantedLevel(playerid)>=1)
    {
    SetPlayerWantedLevel(playerid,GetPlayerWantedLevel(playerid)-1);
    SpielerSpeichern(playerid);
    return 0;
    }
    }
    return 1;
    }
    return 1;
    }

  • Das liegt daran, dass bei:
    new zufall = random(sizeof(Sterne));
    eine Random Zahl ausgesucht wird, und diese dann in Zufall gespeichert wird. Sie verändert sich nicht, wenn man die Variable Zufall noch mal verwendet.
    Sprich:
    Du erstellst zwar 6, aber 6 mal die gleichen Koordinaten.


    Gruß,
    Neo. :)


    new zufall = random(sizeof(Sterne));
    wantedstern[0] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    zufall = random(sizeof(Sterne));
    wantedstern[1] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    zufall = random(sizeof(Sterne));
    wantedstern[2] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    zufall = random(sizeof(Sterne));
    wantedstern[3] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    zufall = random(sizeof(Sterne));
    wantedstern[4] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    zufall = random(sizeof(Sterne));
    wantedstern[5] = CreatePickup(1247,1,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);


    Zwar nicht das beste, aber so sollte es gehen. (Du solltest aber noch schauen, dass man nicht 2 mal das gleiche bekommen kann.)

  • Das funkt auch noch nicht...
    Er tut nichts wenn ich durch den Stern laufe....


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid==wantedstern[0])
    {
    if(GetPlayerWantedLevel(playerid)>=1)
    {
    SetPlayerWantedLevel(playerid,GetPlayerWantedLevel(playerid)-1);
    SpielerSpeichern(playerid);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPVarInt(i,"Fraktion")==3 || GetPVarInt(i,"Fraktion")==5 || GetPVarInt(i,"Fraktion")==13)
    {
    new string[128];
    format(string,sizeof(string),"%s hat einen Wantedstern gefunden!",SpielerName(playerid));
    SendClientMessage(i,COLOR_LIGHTGREEN,string);
    }
    return 1;
    }
    }
    }

  • Na das erste Problem war ja, dass nur ein Stern erstellt wird. Funktioniert es denn so, dass mehr erstellt werden?


    Problem an der Sache ist, dass der PickUp Type 1 nicht PickupAble ist. Das bedeutet, du musst dort mit einem Timer arbeiten.


    Erstelle einen Timer, mit ~1,5 sekunden interval, repeatable (Bei connect, Parameter playerid)
    Überprüfe seine Position und vergleich sie mit den Pickups
    Falls er in der Range ist(so etwa 3-5) führen den Code auf OnPlayerPickUpPickup aus (ab if(GetPlayerWantedLevel) ..)
    Falls nicht, returnen.


    Gruß,
    Neo. :)



  • Habs jetzt auf mehrere Arten versucht und nichts hat gefunkt weder der Timer wird ausgeführt noch der Stern verschwindet.
    Aja das mit den Sternen das mehrere spawnen hat toll funktioniert ! Danke :)


  • Soll der Stern denn nach dem aufheben verschwinden? - Wenn ja, für immer oder nur kurz?


    der Stern soll beim aufheben verschwinden dann gibt es noch 5 andere Sterne auf der Map.
    Dann nach ca. einer halben Stunde respawnen alle Sterne neu an einer Zufallsposition (hab ich mit einem eigenen Timer gelöst.)
    Aber mein stern verschwindet nie wie ich es auch mache ob ich einen anderen Pickuptyp nehme oder mit timer was mache...
    Danke trotzdem mal für deine super Hilfe bisher...

  • Versuch das ganze mal mit dem Pickuptyp 2 "Pickupable, respawns after some time.".


    Dann zerstörst du aber in OnPlayerPickupPickUp das Pickup, falls es jemand aufhebt.


    switch(pickupid)
    {
    case(wantedstern[0]):
    {
    // Code Code Code
    // Code Code Code
    DestroyPickup(wantedstern[0]);
    return 1;
    }
    }


    Funktioniert der Timer auch, der alle respawnen soll?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • ich poste dir den aktuellen Stand, dann kannst du s dir ansehen was nicht passt



    public OnGameModeInit()
    {
    //Wantedsternsystem:
    SetTimer("sternerespawn",1000*60*30,true);
    new zufall = random(sizeof(Sterne));
    new zufall1 = random(sizeof(Sterne));
    new zufall2 = random(sizeof(Sterne));
    new zufall3 = random(sizeof(Sterne));
    new zufall4 = random(sizeof(Sterne));
    new zufall5 = random(sizeof(Sterne));
    wantedstern[0] = CreatePickup(1247,2,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    wantedstern[1] = CreatePickup(1247,2,Sterne[zufall1][0],Sterne[zufall1][1],Sterne[zufall1][2]);
    wantedstern[2] = CreatePickup(1247,2,Sterne[zufall2][0],Sterne[zufall2][1],Sterne[zufall2][2]);
    wantedstern[3] = CreatePickup(1247,2,Sterne[zufall3][0],Sterne[zufall3][1],Sterne[zufall3][2]);
    wantedstern[4] = CreatePickup(1247,2,Sterne[zufall4][0],Sterne[zufall4][1],Sterne[zufall4][2]);
    wantedstern[5] = CreatePickup(1247,2,Sterne[zufall5][0],Sterne[zufall5][1],Sterne[zufall5][2]);
    }


    forward sternerespawn();
    public sternerespawn()
    {
    DestroyPickup(wantedstern[0]);
    DestroyPickup(wantedstern[1]);
    DestroyPickup(wantedstern[2]);
    DestroyPickup(wantedstern[3]);
    DestroyPickup(wantedstern[4]);
    DestroyPickup(wantedstern[5]);
    new zufall = random(sizeof(Sterne));
    new zufall1 = random(sizeof(Sterne));
    new zufall2 = random(sizeof(Sterne));
    new zufall3 = random(sizeof(Sterne));
    new zufall4 = random(sizeof(Sterne));
    new zufall5 = random(sizeof(Sterne));
    wantedstern[0] = CreatePickup(1247,2,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    wantedstern[1] = CreatePickup(1247,2,Sterne[zufall1][0],Sterne[zufall1][1],Sterne[zufall1][2]);
    wantedstern[2] = CreatePickup(1247,2,Sterne[zufall2][0],Sterne[zufall2][1],Sterne[zufall2][2]);
    wantedstern[3] = CreatePickup(1247,2,Sterne[zufall3][0],Sterne[zufall3][1],Sterne[zufall3][2]);
    wantedstern[4] = CreatePickup(1247,2,Sterne[zufall4][0],Sterne[zufall4][1],Sterne[zufall4][2]);
    wantedstern[5] = CreatePickup(1247,2,Sterne[zufall5][0],Sterne[zufall5][1],Sterne[zufall5][2]);
    return 1;
    }


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid==wantedstern[0])
    {
    if(GetPlayerWantedLevel(playerid)>=1)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPVarInt(i,"Fraktion")==3 || GetPVarInt(i,"Fraktion")==5 || GetPVarInt(i,"Fraktion")==13)
    {
    new string[128];
    format(string,sizeof(string),"%s hat einen Wantedstern gefunden!",SpielerName(playerid));
    SendClientMessage(i,COLOR_LIGHTGREEN,string);
    }
    return 1;
    }
    SetPlayerWantedLevel(playerid,GetPlayerWantedLevel(playerid)-1);
    SpielerSpeichern(playerid);
    DestroyPickup(wantedstern[0]);
    }
    return 1;
    }
    if(pickupid==wantedstern[1])
    {
    if(GetPlayerWantedLevel(playerid)>=1)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPVarInt(i,"Fraktion")==3 || GetPVarInt(i,"Fraktion")==5 || GetPVarInt(i,"Fraktion")==13)
    {
    new string[128];
    format(string,sizeof(string),"%s hat einen Wantedstern gefunden!",SpielerName(playerid));
    SendClientMessage(i,COLOR_LIGHTGREEN,string);
    }
    return 1;
    }
    SetPlayerWantedLevel(playerid,GetPlayerWantedLevel(playerid)-1);
    SpielerSpeichern(playerid);
    DestroyPickup(wantedstern[1]);
    }
    return 1;
    }
    if(pickupid==wantedstern[2])
    {
    if(GetPlayerWantedLevel(playerid)>=1)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPVarInt(i,"Fraktion")==3 || GetPVarInt(i,"Fraktion")==5 || GetPVarInt(i,"Fraktion")==13)
    {
    new string[128];
    format(string,sizeof(string),"%s hat einen Wantedstern gefunden!",SpielerName(playerid));
    SendClientMessage(i,COLOR_LIGHTGREEN,string);
    }
    return 1;
    }
    SetPlayerWantedLevel(playerid,GetPlayerWantedLevel(playerid)-1);
    SpielerSpeichern(playerid);
    DestroyPickup(wantedstern[2]);
    }
    return 1;
    }
    if(pickupid==wantedstern[3])
    {
    if(GetPlayerWantedLevel(playerid)>=1)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPVarInt(i,"Fraktion")==3 || GetPVarInt(i,"Fraktion")==5 || GetPVarInt(i,"Fraktion")==13)
    {
    new string[128];
    format(string,sizeof(string),"%s hat einen Wantedstern gefunden!",SpielerName(playerid));
    SendClientMessage(i,COLOR_LIGHTGREEN,string);
    }
    return 1;
    }
    SetPlayerWantedLevel(playerid,GetPlayerWantedLevel(playerid)-1);
    SpielerSpeichern(playerid);
    DestroyPickup(wantedstern[3]);
    }
    return 1;
    }
    if(pickupid==wantedstern[4])
    {
    if(GetPlayerWantedLevel(playerid)>=1)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPVarInt(i,"Fraktion")==3 || GetPVarInt(i,"Fraktion")==5 || GetPVarInt(i,"Fraktion")==13)
    {
    new string[128];
    format(string,sizeof(string),"%s hat einen Wantedstern gefunden!",SpielerName(playerid));
    SendClientMessage(i,COLOR_LIGHTGREEN,string);
    }
    return 1;
    }
    SetPlayerWantedLevel(playerid,GetPlayerWantedLevel(playerid)-1);
    SpielerSpeichern(playerid);
    DestroyPickup(wantedstern[4]);
    }
    return 1;
    }
    if(pickupid==wantedstern[5])
    {
    if(GetPlayerWantedLevel(playerid)>=1)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPVarInt(i,"Fraktion")==3 || GetPVarInt(i,"Fraktion")==5 || GetPVarInt(i,"Fraktion")==13)
    {
    new string[128];
    format(string,sizeof(string),"%s hat einen Wantedstern gefunden!",SpielerName(playerid));
    SendClientMessage(i,COLOR_LIGHTGREEN,string);
    }
    return 1;
    }
    SetPlayerWantedLevel(playerid,GetPlayerWantedLevel(playerid)-1);
    SpielerSpeichern(playerid);
    DestroyPickup(wantedstern[5]);
    }
    return 1;
    }

    Einmal editiert, zuletzt von Schmonk ()

  • Versuch mal ein par prints einzubauen.


    Sprich:


    if(pickupid==wantedstern[0])
    {
    print("1");
    if(GetPlayerWantedLevel(playerid)>=1)
    {
    print("2");
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    printf("i,%i"i);
    if(GetPVarInt(i,"Fraktion")==3 || GetPVarInt(i,"Fraktion")==5 || GetPVarInt(i,"Fraktion")==13)
    {
    new string[128];
    format(string,sizeof(string),"%s hat einen Wantedstern gefunden!",SpielerName(playerid));
    SendClientMessage(i,COLOR_LIGHTGREEN,string);
    }
    return 1;
    }
    print("3");
    SetPlayerWantedLevel(playerid,GetPlayerWantedLevel(playerid)-1);
    SpielerSpeichern(playerid);
    DestroyPickup(wantedstern[0]);
    }
    print("4");
    return 1;
    }
    Wenn du nun durch dieses durchläufst müsste er dir was in die Console schreiben. Was schreibt er dir?


  • new wantedstern[6];


    wantedstern[0] = CreatePickup(1247,2,Sterne[zufall][0],Sterne[zufall][1],Sterne[zufall][2]);
    wantedstern[1] = CreatePickup(1247,2,Sterne[zufall1][0],Sterne[zufall1][1],Sterne[zufall1][2]);
    wantedstern[2] = CreatePickup(1247,2,Sterne[zufall2][0],Sterne[zufall2][1],Sterne[zufall2][2]);
    wantedstern[3] = CreatePickup(1247,2,Sterne[zufall3][0],Sterne[zufall3][1],Sterne[zufall3][2]);
    wantedstern[4] = CreatePickup(1247,2,Sterne[zufall4][0],Sterne[zufall4][1],Sterne[zufall4][2]);
    wantedstern[5] = CreatePickup(1247,2,Sterne[zufall5][0],Sterne[zufall5][1],Sterne[zufall5][2]);