[Scriptwunsch] FirstSpawn + Telefonzellen

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
  • Hallo ich bins schon wieder..^^


    Ich wollte etwas erstellen, damit der Player beim ersten Login (also nach dem Register) eine Meldung + Geld erhält und am Airport spawnt.
    Allerdings kommt es zu schweren Bugs, zB. werden die $500 immer wieder vergeben oder schlimmer - die Spieler können sich gegenseitig nicht mehr sehen!
    So habe ich es gemacht:


    new FirstSpawn[MAX_PLAYERS];


    public OnPlayerSpawn(playerid)
    {
    . . .


    if(FirstSpawn[playerid] == 1)
    {
    SetPlayerVirtualWorld(playerid, 0);
    SetPlayerInterior(playerid, 0);
    SetPlayerPos(playerid, 1446.4323,-2287.0105,13.5469);
    SetPlayerFacingAngle(playerid, 90.0);
    SetCameraBehindPlayer(playerid);
    SetPlayerVirtualWorld(playerid, 0);
    SetPlayerInterior(playerid, 0);
    SendClientMessage(playerid, grün, "Als kleine Starthilfe hast du $500 bekommen.");
    SendClientMessage(playerid, grün, "Viel Spaß auf dem Server!");
    GivePlayerMoney(playerid, 500);
    FirstSpawn[playerid] = 0;
    }


    ...


    if (strcmp(cmd, "/register", true)==0)
    {
    . . .
    FirstSpawn[playerid] = 0;


    Dann wollte ich noch eine Nachricht einfügen, dass wenn jemand an einer Telefonzelle ist, dann eine Nachricht erscheint. Allerdings kommt keine ;)
    Mein Code:


    forward IsAtTankstelle();


    public OnGameModeInit()
    {
    . . .
    SetTimer("IsAtTankstelle", 500, 1);
    . . .


    public IsAtTelefonzelle()
    {
    for(new playerid=0; playerid<GetMaxPlayers(); playerid++)
    {
    if(PlayerToPoint(1, playerid, 1450.1318,-2283.4863,13.5469))
    {
    SendClientMessage(playerid, grau, "Du bist an einer Telefonzelle.");
    SendClientMessage(playerid, grau, "Von hier aus kannst du bald andere Leute anrufen.");
    return 1;
    }
    }
    return 1;
    }


    Ich habe jetz wirklich lange an diesen Problemen gesessen..
    mfg
    surrender

  • du musst es so machen


    GameTextForPlayer(playerid, "Hallo bla bla bla bla", 5000,0);

  • dann muss er den Timer so benutzen


    SetTimerEx("IsAtTankstelle", 500, 1);

  • new FirstSpawn[MAX_PLAYERS];


    public OnPlayerSpawn(playerid)
    {
    . . .


    if(FirstSpawn[playerid] == 1)
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerPos(playerid, 1446.4323,-2287.0105,13.5469);
    SetPlayerFacingAngle(playerid, 90.0);
    SetCameraBehindPlayer(playerid);
    SendClientMessage(playerid, grün, "Als kleine Starthilfe hast du $500 bekommen.");
    SendClientMessage(playerid, grün, "Viel Spaß auf dem Server!");
    GivePlayerMoney(playerid, 500);
    FirstSpawn[playerid] = 0;
    }


    ...


    if (strcmp(cmd, "/register", true)==0)
    {
    . . .


    forward IsAtTankstelle();


    public OnGameModeInit()
    {
    . . .
    SetTimerEx("IsAtTankstelle", 500, 1);
    . . .



    public IsAtTelefonzelle()
    {
    for(new playerid=0; playerid<GetMaxPlayers(); playerid++)
    {
    if(PlayerToPoint(1, playerid, 1450.1318,-2283.4863,13.5469))
    {
    GameTextForPlayer(playerid, "Du bist an einer Telefonzelle hier kannst du telefonieren oder so ;D" , 5000 , 0);


    return 1;
    }
    }
    return 1;
    }


    EDIT : Nur ein Vorschlag weiss nicht ob es funzt ;!

  • creck ich sehe schon ein fehler in deiner methode...


    von daher würd er schonmal 2 errors und nen warning 203 bekommen


    dsa unter sollte so aussehen


    forward IsAtTankstelle();


    public OnGameModeInit()
    {
    SetTimerEx("IsAtTankstelle", 500, 0);
    // deine absätze
    public IsAtTelefonzelle()
    {
    for(new playerid=0; playerid<GetMaxPlayers(); playerid++)
    {
    if(PlayerToPoint(1, playerid, 1450.1318,-2283.4863,13.5469))
    {
    GameTextForPlayer(playerid, "Du bist an einer Telefonzelle hier kannst du telefonieren oder so ;D" , 5000 , 0);
    }
    return 1;
    }
    return 1;
    }


    und das obere so
    new FirstSpawn[MAX_PLAYERS];


    public OnPlayerSpawn(playerid)
    {
    . . .


    if(FirstSpawn[playerid] == 1)
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerPos(playerid, 1446.4323,-2287.0105,13.5469);
    SetPlayerFacingAngle(playerid, 90.0);
    SetCameraBehindPlayer(playerid);
    GameTextForPlayer(playerid,"Als kleine Starthilfe hast du $500 bekommen.",5000,5);
    GameTextForPlayer(playerid,"Viel Spaß auf dem Server!",5000,5);
    GivePlayerMoney(playerid, 500);
    FirstSpawn[playerid] = 0;
    }


    if (strcmp(cmd, "/register", true)==0)
    {
    // do something here

    Einmal editiert, zuletzt von Polarized ()

  • SetTimerEx ist ungültig. Wolltest du nur SetTimer machen oder SetTimerEx und was vergessen? xD
    Nach euren Varianten bekommt der Spieler nach dem Register aber keine 500$ und ist nicht an dem Punkt.
    Jetzt sieht man zwar die Spieler, aber sie bewegen sich nicht..

  • Mir ist nebenbei was aufgefallen ka obs wichtig ist aber: Du solltest dich entscheiden zwischen TANKSTELLE und TELEFONZELLE :P


    der timer heißt Tankstelle das public Telefonzelle


    wie gesagt vielleicht ist es ja auch beabsichtigt oder ich sehe es falsch :D

  • Oh man Paddy ich bin so dumm, ich hatte gerade deswegen nen Lachkrampf xDD
    Kann mir jemand nen Timer dafür machen, der ab dem Zeitpunkt gilt, die der Spieler bei der Telefonzelle ist?


    //EDIT
    Hat wer noch ne Idee für den FirstSpawn?

    Einmal editiert, zuletzt von hearteyy ()

  • äh bin ich blind oder wieso setzt du einen timer mit isattankstelle und machs public isattelefonzelle?


    benutzt du gf oder machse grad einen ?

    Einmal editiert, zuletzt von Hitman <3 ()