Beiträge von Templer

    8D ich will ned unnötig die Leute damit verwirren ^^ Natürlich könnte ich es so scripten damit es sehr gut läuft, aber die sollen ja auch was lernen

    Bitte überall diese Zeile
    for(new i=0; i<12; i++)
    durch das hier ersetzen.
    for(new i=0; i<11; i++)
    Ein Array zählt ab 0 nicht ab 1.



    Bei deinem stock sollte man es doch eher so machen ^^


    stock GetVehicleName(vehicleid)
    {
    new model = GetVehicleModel(vehicleid);
    return Autonamen[model-400];
    }


    sollte jedoch dennoch passen.. Naja probiers mal aus ^^

    Habs so einfach wie möglich für dich dargestellt:

    #include <a_samp>


    main()
    {
    print("\n----------------------------------");
    print(" ARGE");
    print("----------------------------------\n");
    }
    new Menu:JobMenu;
    new Menu:JobMenu2;
    new JobPickup;


    new gChosenJob[MAX_PLAYERS]; //Variable zum speichern der JobID was Spieler ausgewählt hat..


    public OnGameModeInit()
    {
    //ARGE
    JobMenu = CreateMenu("JobMenu", 1, 220.0, 350.0, 200.0);
    AddMenuItem(JobMenu, 0, "Trucker");
    AddMenuItem(JobMenu, 0, "2.Job");
    AddMenuItem(JobMenu, 0, "3.Job");
    AddMenuItem(JobMenu, 0, "4.Job");

    //Neues Menu ^^
    JobMenu2 = CreateMenu("JobMenu", 1, 220.0, 350.0, 200.0);
    AddMenuItem(JobMenu2, 0, "Job annehmen");
    AddMenuItem(JobMenu2, 0, "Job ablehnen");
    //

    JobPickup = CreatePickup(1239,2,1488.5376,-1770.2936,18.7958,-1); //ARGE-Pickup;
    return 1;
    }
    public OnPlayerPickUpPickup(playerid,pickupid)
    {
    if(pickupid == JobPickup) ShowMenuForPlayer(JobMenu, playerid);
    return 1;
    }
    public OnPlayerSelectedMenuRow(playerid, row)
    {
    if(GetPlayerMenu(playerid) == JobMenu2)
    {
    if(row == 0)
    {
    ShowMenuForPlayer(JobMenu, playerid);
    PlayerInfo[playerid][pJob] = gChosenJob[playerid]; //Die Variable pJob ist aus dem GF ^^ Bedeutet, der ausgewählte job bekommt Spieler zugeteilt!
    if(gChosenJob[playerid] == 1) SendClientMessage(playerid, 0xFFFFFF00, "Du hast den Trucker Job angenommen!");
    else if(gChosenJob[playerid] == 2) SendClientMessage(playerid, 0xFFFFFF00, "Du hast den 2. Job angenommen!");
    else if(gChosenJob[playerid] == 3) SendClientMessage(playerid, 0xFFFFFF00, "Du hast den 3. Job angenommen!");
    else if(gChosenJob[playerid] == 4) SendClientMessage(playerid, 0xFFFFFF00, "Du hast den 4. Job angenommen!");
    }
    else ShowMenuForPlayer(JobMenu, playerid);
    }
    if(GetPlayerMenu(playerid) == JobMenu)
    {
    if(row == 0)
    {
    SendClientMessage(playerid,1,"Info: Bei diesem Job musst du waren Laden und Entladen");
    ShowMenuForPlayer(JobMenu2, playerid); //Zeigt das neue Menü für Spieler
    gChosenJob[playerid] = 1; //Die JobID vom Truckerjob, indemfall 1 würde ich halt so sagen ^^
    }
    else if(row == 2)
    {
    //Wenn er den zweiten Job auswählt (Wenn Vorhanden)..
    ShowMenuForPlayer(JobMenu2, playerid); //Zeigt das neue Menü für Spieler
    gChosenJob[playerid] = 1; //Die JobID vom 2.Job, indemfall 2
    }
    else if(row == 3)
    {
    //Wenn er den dritten Job auswählt (Wenn Vorhanden)..
    ShowMenuForPlayer(JobMenu2, playerid); //Zeigt das neue Menü für Spieler
    gChosenJob[playerid] = 1; //Die JobID vom 2.Job, indemfall 2
    }
    else if(row == 4)
    {
    //Wenn er den vierten Job auswählt (Wenn Vorhanden)..
    ShowMenuForPlayer(JobMenu2, playerid); //Zeigt das neue Menü für Spieler
    gChosenJob[playerid] = 1; //Die JobID vom 2.Job, indemfall 2
    }
    }
    }

    Naja ich weiß jetzt ned so genau wo das is, aber wenn diese public FUnktion auch bei Leuten aufgerufen wird, die bereits sich registriert haben würde ich es so machen..


    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid, PlayerInfo[playerid][pCash]);
    IstEingeloggt[playerid] = 1;
    if(PlayerInfo[playerid][pTutorial] == 0)
    {
    gTutorialTimer[playerid] = SetTimerEx("Tutorial", 15000, 0, playerid); //Jede Sekunde erscheint ein neuer Text!
    SendClientMessage(playerid,weiß,"Erfolgreich eingeloggt");
    }



    new string3[128];
    format(string3,sizeof(string3),"Spieler %s hat sich eingeloggt",playername);


    //Dort wo das Tut Message endet, also bei default: das rein


    PlayerInfo[playerid][pTutorial] = 1;


    //Und bei OnPlayerConnect zu den anderen Variablen das einfügen:


    PlayerInfo[playerid][pTutorial] = 0; //Damit neue Spieler die Standart Werte kriegen
    //Den die richtigen Werte werden ja dann von der Spielerdatei übernommen, wenn du es
    //so programmiert hast ^^

    So bitte, hab mir mal alles durchgelesen.. Scheiß Arbeit das sag ich dir ^^


    Alle Änderungen wurden mit // kommentiert!


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER) //Auch für Passagiere!
    {
    for(new i=0; i<12; i++) //Aus irgendeinem Grund übernimmt er es nie richtig! Weitere Fragen folgen unten!
    {
    TextDrawShowForPlayer(playerid,Textdraw[i]);
    }


    [...]


    }

    if(newstate == PLAYER_STATE_ONFOOT) //Sicher ist sicher..
    {
    new i=0;
    for(; i<12; i++)
    {
    TextDrawHideForPlayer(playerid,Textdraw[i]);
    }
    TextDrawDestroy(Autoname[playerid]);
    TextDrawDestroy(Speed1[playerid]);
    TextDrawDestroy(Speed2[playerid]);
    TextDrawDestroy(Tankinhalt[playerid]);
    TextDrawDestroy(Kilometer[playerid]);
    }
    return 1;
    }


    public AmaturenUpdate()
    {
    new i = 0; //Eher unwichtig ^^
    for(; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(IsPlayerInAnyVehicle(i)) //Nicht 'GetPlayerState(i) == PLAYER_STATE_DRIVER' da du es Spielerbezogen machst
    {
    TextDrawDestroy(Autoname[i]);
    TextDrawDestroy(Speed1[i]);
    TextDrawDestroy(Speed2[i]);
    TextDrawDestroy(Tankinhalt[i]);
    TextDrawDestroy(Kilometer[i]);

    new output[64], Float:kommazahl;
    //print("test1")
    //Autoname
    format(output,sizeof(output),"%s",GetVehicleName(GetPlayerVehicleID(i)));
    //Für GetVehicleName wird AddStaticVehicle2 vorrausgesetzt siehe hier: http://wiki.sa-mp.com/wiki/Useful_Functions#GetVehicleName


    [...]
    //print("test2")
    //Speed
    format(output,sizeof(output),"%d km/h",ErmittleGeschwindigkeit(i,true));


    [...]

    //Speedbalken
    kommazahl=524+ErmittleGeschwindigkeit(i,true)/3.06122;


    [...]


    //Tankzeiger
    kommazahl=524+Tankmenge[GetPlayerVehicleID(i)]/1.020408;


    [...]

    //Kilometer
    kilometercount[GetPlayerVehicleID(i)] += ErmittleGeschwindigkeit(i,true)/(60*60*0.5);
    format(output,sizeof(output),"%.1f km",kilometercount[GetPlayerVehicleID(i)]);


    [...]

    TextDrawShowForPlayer(i,Autoname[i]);
    TextDrawShowForPlayer(i,Speed1[i]);
    TextDrawShowForPlayer(i,Speed2[i]);
    TextDrawShowForPlayer(i,Tankinhalt[i]);
    TextDrawShowForPlayer(i,Kilometer[i]);
    }
    }
    }


    Also meine Frage, zeig mir die new Definition von Textdraw !

    for(new i = 0;i<MAX_VEHICLES;i++)
    {
    if(strlen(Blub[i]))
    {
    format(string, sizeof(string), "%s Blub %s\n",Blub[i],Blub[i]);
    ShowPlayerDialog(playerid,DIALOG_KENNZEICHENNN,DIALOG_STYLE_LIST,"Blub",string,"weiter","abbrechen");
    }
    }

    Du siehst das bei dem Befehl er gestartet wird. Also fügst du dann einfach die folgenden Zeilen dort ein, wo du es gestartet haben willst:


    ggebetCount[playerid] = 1;
    ggebetTimer[playerid] = SetTimerEx("gebet", 1000, 1, "d", playerid); //Jede Sekunde erscheint ein neuer Text!

    Ne am besten so:


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(text, strlen("text"), cmdtext);
    return 0;
    }
    dcmd_text(playerid, params[])
    {
    if(!IsPlayerConnected(playerid)) return 1;
    new zielid, string[128];
    if(sscanf(params, "u", zielid)) return SendClientMessage(playerid, 0xFFFFFF00, "VERWENDUNG: /text [Spieler ID/Name]");
    if(!IsPlayerConnected(zielid)) return SendClientMessage(playerid, 0xFFFFFF00, "Ungültige SpielerID!");
    if(gWerbungCount[zielid] != 0) return SendClientMessage(playerid, 0xFFFFFF00, "Spieler liest bereits Text!");
    gWerbungCount[zielid] = 1;
    gWerbungTimer[zielid] = SetTimerEx("Werbung", 1000, 1, "d", zielid); //Jede Sekunde erscheint ein neuer Text!
    format(string, sizeof(string), "Du zeigst den Text für SpielerID %d!", zielid);
    return SendClientMessage(playerid, 0xFFFFFF00, string");
    }


    Sollte dann stehen "undefined dcmd" oder sowas, dann das gaanz oben ins Script einfügen:
    #define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
    Sollte ansonsten "undefined sscanf" oder sowas stehen, dann bitte auf folgenden Link gehen und den ganzen stock-Code in dein Script oben einfügen:
    http://wiki.sa-mp.com/wiki/Sscanf