PlayerNamen abfragen??

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
  • Guten Abend,


    Ich bin grade dabei ein kleines TaxiSystem zu schreiben aber bekomme wenn ich abfrage ob der Fahrer = der Spieler name is bekomme ich einen Error naja hir der Code:


    Spoiler anzeigen
    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    new gname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,gname,sizeof(gname));
    for(new i=0;i<sizeof(TaxiInfo);i++) {
    if(GetPlayerVehicleID(playerid)==TaxiInfo[i][VehID]) {
    if(TaxiInfo[i][besetzt] == 0) {
    ShowPlayerDialog(playerid,TAXINAME_DIALOG,DIALOG_STYLE_INPUT,"Taxi Info 1:","Wie soll der Taxi Name sein??","Weiter","Abbrechen");
    return 1;
    }
    else {
    if(TaxiInfo[i][FahrerName] == gname)return 0;//hir die Zeile
    new str[128];
    format(str,128,"Dieses Taxi wird schon von %s als DienstFahrzeug benutzt.",gname);
    SendClientMessage(playerid,Rot,str);
    return 1;
    }
    }
    }
    }
    return 1;
    }


    hir der Error:


    SQL
    C:\Users\Fabian\Desktop\Mein Samp Server\gamemodes\TaxiSystem.pwn(107) : error 033: array must be indexed (variable "gname")Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase1 Error.

    Mit freundlichen Grüßen,


    Fabi.StaR :love::saint:


  • Ich rieche Unwissen.
    Texte/Strings werden immer mit strcmp verglichen und das gibt 0 zurück, wenn es gleich ist:
    New gname[MAX_PLAYER_NAME+1];
    GetPlayerName(playerid, gname, sizeof(gname));
    if(!strcmp(gname, TaxiInfo[i][FahrerName])) return 0;
    //Hier geht's mit dem Code weiter, wenn gname und der Fahrername nicht gleich sind

    Ich bin Dittis Signatur.

  • Ehm ich habe folgendes problem ich will das es bei nur einem Fahrzeug geupdatet wirde aber ehm hir ein bild:



    hir der code:


    Spoiler anzeigen
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == TAXINAME_DIALOG) {
    for(new tg=0; tg<sizeof(TaxiInfo); tg++) {
    TaxiInfo[tg][TaxiName]=strval(inputtext);
    ShowPlayerDialog(playerid,TAXIPREIS_DIALOG,DIALOG_STYLE_INPUT,"Taxi Info 2:","Gebe bitte ein Preis(pro 15 Sekunden)an(zwischen 1-250)","Weiter","Abbrechen");
    }
    }
    if(dialogid == TAXIPREIS_DIALOG) {
    for(new tg=0; tg<sizeof(TaxiInfo); tg++) {
    new str[128];
    TaxiInfo[tg][FahrPreis]=strval(inputtext);
    format(str,128,"San Andreas Taxi\n\nName: %s\nFahrer: %s\nFahr Preis: %d",TaxiInfo[tg][TaxiName],TaxiInfo[tg][FahrerName],TaxiInfo[tg][FahrPreis]);
    Update3DTextLabelText(TaxiInfo[tg][Taxilabel],Gelb,str);//hir
    }
    }
    return 1;
    }

    Mit freundlichen Grüßen,


    Fabi.StaR :love::saint:


  • Dann solltest du in TaxiInfo die Vehicle-ID jedes Taxis speichern und beim in den Dienst Gehen durch die Vehicle-ID abfragen, in welchem Taxi er sitzt.
    Beispiel:
    public OnGameModeInit()
    {
    TaxiInfo[1][VehicleID] = AddStaticVehicle(...);
    TaxiInfo[2][VehicleID] = AddStaticVehicle(...);
    //...
    return 1;
    }


    //...


    //Innerhalb von der for-Schleife, noch vor "new str[128];":
    if(TaxiInfo[tg][VehicleID] == GetPlayerVehicleID(playerid))
    {
    //Hier der Code zum aktualisieren
    }

    Ich bin Dittis Signatur.

  • Und dann soll ich für jedes Fahrzeug ein 3D TExt machen?


    Weil ich mach es so:


    Spoiler anzeigen
    enum Taxin {
    VID,
    Float:tX,
    Float:tY,
    Float:tZ,
    Float:tA,
    VehID,
    Text3D:Taxilabel,
    besetzt,
    FahrerName[MAX_PLAYER_NAME],
    FahrPreis,
    TaxiName[128]
    }
    new TaxiInfo[4][Taxin] = {
    // ModelID,X,Y,Z,A,-1 //Der aufbau dieser zahlen reihe :D
    {420,2038.9143,1337.5933,10.4506,180.0898,-1},
    {420,2038.8539,1344.2161,10.4508,180.3526,-1},
    {438,2038.7783,1356.4287,10.6748,179.8317,-1},
    {438,2038.8260,1329.8787,10.6743,180.1532,-1}
    };

    Mit freundlichen Grüßen,


    Fabi.StaR :love::saint:


  • Hab es hin bekommen aber der Fahrername und der Taxi name wird net angezeigt :D wei man oben auf dem bild sehen kann.


    hir normal der code:

    Spoiler anzeigen

    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    new gname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,gname,sizeof(gname));
    for(new i=0; i<sizeof(TaxiInfo); i++) {
    if(GetPlayerVehicleID(playerid)==TaxiInfo[i][VehID]) {
    if(TaxiInfo[i][besetzt] == 0) {
    TaxiInfo[i][FahrerName]=strcmp(gname, TaxiInfo[i][FahrerName]);//hir der Name wird net übertragen
    ShowPlayerDialog(playerid,TAXINAME_DIALOG,DIALOG_STYLE_INPUT,"Taxi Info 1:","Wie soll der Taxi Name sein??","Weiter","Abbrechen");
    return 1;
    }
    else {
    if(!strcmp(gname, TaxiInfo[i][FahrerName])) return 0;
    new str[128];
    format(str,128,"Dieses Taxi wird schon von %s als DienstFahrzeug benutzt.",gname);
    SendClientMessage(playerid,Rot,str);
    return 1;
    }
    }
    }
    }
    return 1;
    }
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == TAXINAME_DIALOG) {
    for(new tg=0; tg<sizeof(TaxiInfo); tg++) {
    TaxiInfo[tg][TaxiName]=strval(inputtext);//hir der Taxi NAmewird net übertragen
    ShowPlayerDialog(playerid,TAXIPREIS_DIALOG,DIALOG_STYLE_INPUT,"Taxi Info 2:","Gebe bitte ein Preis(pro 15 Sekunden)an(zwischen 1-250)","Weiter","Abbrechen");
    }
    }
    if(dialogid == TAXIPREIS_DIALOG) {
    for(new tg=0; tg<sizeof(TaxiInfo); tg++) {
    if(TaxiInfo[tg][VehID] == GetPlayerVehicleID(playerid)) {
    new str[128];
    TaxiInfo[tg][FahrPreis]=strval(inputtext);//hir das is der Preis der wird angezeigt
    format(str,128,"San Andreas Taxi\n\nName: %s\nFahrer: %s\nFahr Preis: %d",TaxiInfo[tg][TaxiName],TaxiInfo[tg][FahrerName],TaxiInfo[tg][FahrPreis]);
    Update3DTextLabelText(TaxiInfo[tg][Taxilabel],Gelb,str);
    }
    }
    }
    return 1;
    }


    //edit


    Spoiler anzeigen

    - Sorry das ich soviel scheiss code schreibe aber habe ne lange zeit nix mehr gemacht in richtung Samp PAwn Scripting :D :sleeping:

    Mit freundlichen Grüßen,


    Fabi.StaR :love::saint:


  • strcmp ist dazu da, um Strings zu vergleichen, nicht, um Werte zu übernehmen. Das heißt, dass es im Normalfall nur in if-Abfragen Anwendung findet.
    Für den Name einfach folgendes:
    TaxiInfo[i][FahrerName] = gname;


    Und beim Taxiname verwendest du strval - das ist dazu da, um aus einem String mit z.B. dem Inhalt "123" die 123 als Integer zu extrahieren, ist also hier auch nicht passend, schätze ich mal. ;)
    TaxiInfo[tg][TaxiName] = inputtext;


    Beides ist jedoch ungetestet, da das am Handy recht schlecht geht. :D


    Und stell ruhig viele Fragen - ist besser als einen auf "Ich kann alles" zu machen. :)

    Ich bin Dittis Signatur.

  • Ich habe es so gemacht:


    TaxiInfo[tg][TaxiName]=inputtext;


    und habe denn error:


    C:\Users\Fabian\Desktop\Mein Samp Server\gamemodes\TaxiSystem.pwn(124) : error 047: array sizes do not match, or destination array is too small
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.

    Mit freundlichen Grüßen,


    Fabi.StaR :love::saint:


  • Der Fehler liegt nicht bei dir, mehr bei Pawn. ^^


    format(TaxiInfo[tg][TaxiName], sizeof(TaxiInfo[tg][TaxiName]), "%s", inputtext); ... wa jetzt meine Idee. Ich kann jedoch auch komplett falsch liegen.

    Ich bin Dittis Signatur.


  • Ditti hatte es schon angesprochen, man muss es mit format machen, doch er hat in seinem Code einen Fehler ^^


    Schreibe es einfach so:


    format(TaxiInfo[tg][TaxiName],128,inputtext);


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S