Beiträge von robbi2304

    Sobald der Checkpoint durchlaufen wird, soll ein Fahrzeug erstellt werden und der Spieler auch direkt hinein gesetzt werden.
    Allerdings werden massen an Fahrzeugen erstellt und der Spieler in das Fahrzeug gesetzt. Wo liegt mein Fehler ?



    else if(TUTCheckpoint[playerid]==4)
    {
    DisablePlayerCheckpoint(playerid);
    PlayerInfo[playerid][pTutorial]=0;
    new Text3D:vehicle3Dtext[MAX_VEHICLES],vehicleid;
    PlayerInfo[playerid][pMoney]-=2000;
    MoneyUpdate(playerid);
    new Float:a, vehicle;
    vehicle = CreateVehicle(415, 1379.0913, -1648.8781, 13.3828, a, 1, 1, 0);
    PutPlayerInVehicle(playerid, vehicle, 0);
    LinkVehicleToInterior(vehicle, GetPlayerInterior(playerid));
    SetVehicleVirtualWorld(vehicle, GetPlayerVirtualWorld(playerid));
    new Vehicle = GetPlayerVehicleID(playerid),lights,alarm,doors,bonnet,boot,objective;
    SetVehicleParamsEx(Vehicle,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
    SetPlayerCheckpoint(playerid, 1379.0913, -1648.8781, 13.3828, 3.0);
    L1Checkpoint[playerid]=1;
    SetPVarInt(playerid,!"Fahrstunde",vehicle);
    vehicle3Dtext[vehicleid] = Create3DTextLabel("Fahrschule", 0xFF0000AA, 0.0, 0.0, 0.0, 50.0, 0, 1 );
    return 1;
    }

    Gerne würde ich den Tankinhalt aus meiner Datenbank auselsen habe hierbei aber noch ein paar kleine Probleme. Es wird nicht Richtig ausgelesen.


    Laden der Daten:

    for(new i=0; i<cache_num_rows(); i++)
    {
    new id = getFreeCarID();
    cache_get_value_name_int(i, "id", cInfo[id][db_id] );//Integer
    cache_get_value_name_int(i, "model", cInfo[id][model]);//Integer
    cache_get_value_name_int(i, "besitzer", cInfo[id][besitzer]);//Integer
    cache_get_value_name_float(i, "x", cInfo[id][c_x]); //Float
    cache_get_value_name_float(i, "y", cInfo[id][c_y]);//Float
    cache_get_value_name_float(i, "z", cInfo[id][c_z]);//Float
    cache_get_value_name_float(i, "r", cInfo[id][c_r]);//Float
    cache_get_value_name_int(i, "c1", cInfo[id][color1]);//Integer
    cache_get_value_name_int(i, "c2", cInfo[id][color2]);//Integer
    cache_get_value_name_int(i, "c3", cInfo[id][color3]);//Integer
    cache_get_value_name_int(i, "key", cInfo[id][key]);//Integer
    cache_get_value_name_int(i, "c_gesperrt", cInfo[id][c_gespeert] );//Integer
    cache_get_value_name_int(i, "tank", cInfo[id][tankinhalt]);//Integer
    if(cInfo[id][c_gespeert] == 0)
    {
    cInfo[id][id_x] = CreateVehicle(cInfo[id][model],cInfo[id][c_x],cInfo[id][c_y],cInfo[id][c_z],cInfo[id][c_r],cInfo[id][color1],cInfo[id][color2],cInfo[id][color3]);
    }
    }


    Abfrage welche Zahl angezeigt werden soll



    if(newstate==PLAYER_STATE_ONFOOT)
    {

    for(new i=0; i<sizeof(autosOhneMotor); i++)
    {
    new vID=GetPlayerVehicleID(playerid);
    new vModel=GetVehicleModel(vID);
    if(autosOhneMotor[i]!=vModel)continue;
    new tmp_engine,
    tmp_lights,
    tmp_alarm,
    tmp_doors,
    tmp_bonnet,
    tmp_boot,
    tmp_objective;
    //Motor an/ausschalten
    GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    SetVehicleParamsEx(vID, 1, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    }
    PlayerTextDrawHide(playerid, tankLabel[playerid]);
    for(new i=0; i<sizeof(tank); i++)
    {
    tank[i]=cInfo[i][tankinhalt];
    }

    Wie schon in der Überschrift genannt wird der Spieler nicht gespeichert warum auch immer.





    if(dialogid == DIALOG_REGISTER)
    {
    //Spieler hat Abbrechen gewählt
    if(!response) return Kick(playerid);



    //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", "Bitte registriere Dich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");



    //Wenn alles passt wird der Spieler in der Datenbank angelegt
    //Als Verschlüsselung für das Passwort wird MD5 verwendet
    new query[256];
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password) VALUES ('%e', MD5('%e'))", PlayerInfo[playerid][pName], inputtext);
    print(query);
    //Das Query wird abgesendet und die playerid an OnUserRegister übergeben
    mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
    return 1;
    }


    Der Print gibt folgendes aus


    [19:24:56] INSERT INTO users (name, password) VALUES ('BRuda', MD5('password'))

    Hallo liebe Leute,


    nun habe ich ein paar Tage nichts mehr an meinem Script gemacht und habe nun das Problem das ich keines meiner Gebäude mehr betreten kann.


    Die koordinaten wo ich betreten will sind Richtig !!!




    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {



    if(newkeys & KEY_SECONDARY_ATTACK) //HAUS EINGANG
    {
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(!hInfo[i][h_id])continue;
    if(hInfo[i][ih_x]==0.0)continue;
    if(!IsPlayerInRangeOfPoint(playerid,5,hInfo[i][h_x],hInfo[i][h_y],hInfo[i][h_z]))continue;
    SetPlayerPos(playerid,hInfo[i][ih_x],hInfo[i][ih_y],hInfo[i][ih_z]);
    SetPlayerInterior(playerid,hInfo[i][h_interior]);
    SetPlayerVirtualWorld(playerid,i);
    }
    return 1;
    }
    if(newkeys & KEY_SECONDARY_ATTACK) //HAUS Ausgang
    {
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(GetPlayerVirtualWorld(playerid)!=i)continue;
    if(!IsPlayerInRangeOfPoint(playerid,20,hInfo[i][ih_x],hInfo[i][ih_y],hInfo[i][ih_z]))continue;
    SetPlayerPos(playerid, hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z]);
    SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid, 0);
    return 1;
    }
    }
    if(newkeys & KEY_SECONDARY_ATTACK) //LSPD Haupteingang betreten
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,1554.4691,-1675.4144,16.1953))
    {
    SetPlayerPos(playerid,246.7169,65.3257,1003.6406);
    SetPlayerInterior(playerid,6);
    SendClientMessage(playerid,COLOR_GREEN,"Sie haben das Gebäude betreten.");
    }
    }
    if (newkeys & KEY_SECONDARY_ATTACK) //LSPD Hauptausgang verlassen
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,246.9134,63.5777,1003.6406))
    {
    SetPlayerPos(playerid,1552.2690,-1675.3098,16.1953);
    SetPlayerInterior(playerid,0);
    SendClientMessage(playerid,COLOR_GREEN,"Sie haben das Gebäude verlassen.");
    SetTimerEx("EingangTimer",1000,0,"i",playerid);
    }
    }
    if (newkeys & KEY_SECONDARY_ATTACK)//LSPD Garage Ausgang
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,1524.4877,-1677.0833,6.2188))
    {
    SetPlayerPos(playerid,246.5958,87.8413,1003.6406);
    SetPlayerInterior(playerid,6);
    SendClientMessage(playerid,COLOR_GREEN,"Sie haben das Gebäude verlassen.");
    SetTimerEx("EingangTimer",1000,0,"i",playerid);
    }
    }
    if (newkeys & KEY_SECONDARY_ATTACK) //LSPD Garage Eingang
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,246.5958,87.8413,1003.6406))
    {
    SetPlayerPos(playerid,1524.4877,-1677.0833,6.2188);
    SetPlayerInterior(playerid,0);
    SendClientMessage(playerid,COLOR_GREEN,"Sie haben das Gebäude betreten.");
    SetTimerEx("EingangTimer",1000,0,"i",playerid);
    }
    }
    if (newkeys & KEY_SECONDARY_ATTACK) //Stadthalle Eingang
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,1480.6678,-1770.9159,18.7958))
    {
    SetPlayerPos(playerid,384.808624,173.804992,1008.382812);
    SetPlayerInterior(playerid,3);
    SendClientMessage(playerid,COLOR_GREEN,"Sie haben das Gebäude betreten.");
    SetTimerEx("EingangTimer",1000,0,"i",playerid);
    }
    }
    if (newkeys & KEY_SECONDARY_ATTACK) //Stadthalle Ausgang
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,389.8269,174.0015,1008.3828))



    {
    SetPlayerPos(playerid,1480.6678,-1770.9159,18.7958);
    SetPlayerInterior(playerid,0);
    SendClientMessage(playerid,COLOR_GREEN,"Sie haben das Gebäude betreten.");
    SetTimerEx("EingangTimer",1000,0,"i",playerid);
    }
    }
    if(newkeys & KEY_SECONDARY_ATTACK)
    {
    if(IsPlayerInRangeOfPoint(playerid, 2.0,1494.1659,-1771.1053,18.7958) || IsPlayerInRangeOfPoint(playerid, 2.0, 1811.6915,-1881.2222,13.5704) || IsPlayerInRangeOfPoint(playerid, 2.0, 548.8316,-1259.5533,16.8543) || IsPlayerInRangeOfPoint(playerid, 2.0, 1484.70, -1772.32, 18.23) || IsPlayerInRangeOfPoint(playerid, 2.0, 1425.8143,-1023.0555,23.8281) || IsPlayerInRangeOfPoint(playerid, 2.0,733.2467,-1348.6964,13.5092))



    {
    ShowPlayerDialog(playerid, DIALOG_Bank, DIALOG_STYLE_LIST,"Menü", "Kontostand\nEinzahlen\nAuszahlen", "Auswählen", "Beenden");
    }



    }
    if(newkeys & KEY_SECONDARY_ATTACK)
    {
    if(IsPlayerInRangeOfPoint(playerid, 2.0,1494.1659,-1771.1053,18.7958) || IsPlayerInRangeOfPoint(playerid, 2.0, 1811.6915,-1881.2222,13.5704) || IsPlayerInRangeOfPoint(playerid, 2.0, 548.8316,-1259.5533,16.8543) || IsPlayerInRangeOfPoint(playerid, 2.0, 1484.70, -1772.32, 18.23) || IsPlayerInRangeOfPoint(playerid, 2.0, 1425.8143,-1023.0555,23.8281) || IsPlayerInRangeOfPoint(playerid, 2.0,733.2467,-1348.6964,13.5092))
    {
    ShowPlayerDialog(playerid, DIALOG_Bank, DIALOG_STYLE_LIST,"Menü", "Kontostand\nEinzahlen\nAuszahlen", "Auswählen", "Beenden");
    }
    }
    if(newkeys & KEY_NO)
    {
    if(PlayerInfo[playerid][pJob] != 4) return 1;
    if(Garbage2[playerid][Mullaktiv] == false) return 1;
    for(new r = 0; r < sizeof(Muelltonnen); r++)
    {
    for(new i = 0; i < sizeof(Muelltonnen[]); i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,3,Muelltonnen[r][i][mt_x],Muelltonnen[r][i][mt_y],Muelltonnen[r][i][mt_z]))
    {
    if(r != Garbage2[playerid][MullmannRoute]) return SendClientMessage(playerid,COLOR_RED,"Das ist keine Mülltonne aus deiner Route.");
    if(i != Garbage2[playerid][Mulltonne]) return 1;
    AttachObjectToPlayer(Muelltonnen[r][i][MuelltonnenID], playerid, 0, 0.65, 0-0.35, 0, 0, 0-180);
    SetPlayerSpecialAction(playerid, SPECIAL_ACTION_CARRY);
    Muelltonnen[r][i][mt_used] = true;
    new Float:vX, Float:vY, Float:vZ,Float:vA;
    GetXYInFrontOfVehicle(Garbage2[playerid][MullwagenID], vX, vY, vZ, vA, -4.2);
    SetPlayerCheckpoint(playerid, vX, vY, vZ+0.5, 3);
    Garbage2[playerid][MullmannStep] = 1;
    }
    }
    }
    }
    return 1;
    }

    Da sich hier bisher niemand gemeldet hat, mache ich dir mal einen Vorschlag wie du es selber machen könntest. Beim OnPlayerDisconnect fragst du zuerst ab ob der Spieler im Besitz eines Hauses ist. Wenn ja fragst du die genau Haus ID ab. Dann hast du alle Daten die du brauchst zum Abfragen. Nun musst du einen Timestamp erstellen der sich z.b in der Datenbank speichert sobald der Spieler disconnected ist. Schon wars das im Grunde.

    Nutzt du eventuell die gleiche Dialog ID für die beiden Dialoge? Anders wäre es kaum zu erklären, dass der andere Dialog aufgerufen wird.

    tatsächlich. danke für den denkhinweis und nochmal zu der kontrolle.
    Für eins bin ich nun noch aber zu doof. Den Wert nach dem beantworten wieder zu löschen.



    if(dialogid==DIALOG_SHOWFRAGEN)
    {
    if(response)
    {
    new buffer1[MAX_PLAYER_NAME],name[MAX_PLAYER_NAME],i;
    strmid(name,inputtext,6,strfind(inputtext," ", false, 6));
    for(; i<MAX_PLAYERS; ++i)
    {
    GetPlayerName(i,buffer1,MAX_PLAYER_NAME);
    if(!strcmp(name,buffer1,false))
    {
    SetPVarInt(playerid,"ID2",i);
    break;
    }
    new string[1024],buffer[1024],string1[128];
    GetPVarString(i,"ReportFrage",buffer,90);
    format(string,sizeof(string),"Frage von {FF0019}%s",name);
    format(string1,sizeof(string1),"Name:%d\nFrage:%s\n\nDie Nachricht wird an den Spieler gesendet sobald du auf Absenden klickst.",PlayerInfo[playerid][pName],buffer);
    ShowPlayerDialog(playerid,DIALOG_SHOWFRAGEN1,DIALOG_STYLE_INPUT,string,string1,"Annehmen","Zurück");
    return 1;
    }
    }
    }
    if(dialogid==DIALOG_SHOWFRAGEN1)
    {
    if(response)
    { new count;
    new string[128];
    new pID = GetPVarInt(playerid,"ID2");
    if(PlayerInfo[pID][ReportSend] == 0)return SendClientMessage(playerid,COLOR_RED,"Der Report wurde schon bearbeitet !");
    Fragen -= 1;
    count--;
    UpdateReportTD();
    format(string,sizeof(string),"[Report System] %s: %s",PlayerInfo[playerid][pName],inputtext);
    SendClientMessage(pID,-1,string);
    SendClientMessage(playerid,COLOR_GREEN,"Deine Nachricht wurde erfolgreich abgesendet.");
    PlayerInfo[pID][Report] = 0;
    PlayerInfo[pID][ReportSend] = 0;
    PlayerInfo[pID][Frage] = 0;

    return 1;
    }
    }



    if(dialogid==DIALOG_REPORT_FRAGEN)
    {
    if(PlayerInfo[playerid][Frage]== 1) return SendClientMessage(playerid,COLOR_RED,"Du hast schon eine Frage erstellt. Bitte warte ab bis diese beantwortet ist.");
    if(!response)return ShowPlayerDialog(playerid,DIALOG_REPORT,DIALOG_STYLE_LIST,"{FF000F}"#Servername"{FEFEFE} - Report","Allgemeines\nProblem\nBugmeldung\nBeschwerden","Auswählen","Abbrechen");
    if(strlen(inputtext) < 5)return SendClientMessage(playerid,COLOR_RED,"Deine Nachricht ist zu kurz!");
    Fragen += 1;
    UpdateReportTD();
    SendClientMessage(playerid,COLOR_RED,"Dein Report wurde an alle aktiven Administratoren weitergeleitet, bitte gedulde dich noch einen Moment.");
    PlayerInfo[playerid][Report] = 1;
    PlayerInfo[playerid][ReportSend] = 1;
    PlayerInfo[playerid][Frage] = 1;
    sachen[reportcount]++;
    PlayerInfo[playerid][reportid] = sachen[reportcount];
    SetPVarString(playerid,"ReportFrage",inputtext);
    }

    Jop. Fehler darin gefunden. Danke dir


    // Edit


    Manchmal beim beantworten bzw beim absenden ruft er den ShowPlayerDialog erneut auf o.o


    woran könnte das liegen



    new string[1024],buffer[1024],string1[128];
    GetPVarString(i,"ReportFrage",buffer,90);
    format(string,sizeof(string),"Frage von {FF0019}%s",name);
    format(string1,sizeof(string1),"Name:%d\nFrage:%s\n\nDie Nachricht wird an den Spieler gesendet sobald du auf Absenden klickst.",PlayerInfo[playerid][pName],buffer);
    ShowPlayerDialog(playerid,DIALOG_SHOWFRAGEN1,DIALOG_STYLE_INPUT,string,string1,"Annehmen","Zurück");
    return 1;


    und das dann immer wieder ohne das ich den report absenden kann.


    Fällt besonder auf wenn Leerzeichen mit ins Spiel kommen

    Report wird erstellt


    ocmd:report(playerid){ if(PlayerInfo[playerid][pLoggedIn] == false)return SendClientMessage(playerid,COLOR_RED,"Du bist nicht eingeloggt !"); ShowPlayerDialog(playerid,DIALOG_REPORT,DIALOG_STYLE_LIST,"{FF000F}"#Servername"{FEFEFE} - Report","Allgemeines\nProblem\nBugmeldung\nBeschwerden","Auswählen","Abbrechen"); return 1;}

    Danke für deine erneute Hilfe @Jeffry,


    dies ist derzeit nicht das Problem was ich derzeit habe. Ich habe mal ein YouTube Video dazu hochgeladen. Dadurch ist es leichter erklärt.


    Das erstellen eines Reports funktioniert. Allerdings nicht das Antworten darauf weil er zu früh in SHOWFRAGEN 1 wechselt.


    Video:


    Externer Inhalt youtu.be
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    #define DIALOG_BEFEHLE 600
    command:befehle(playerid,params[])
    {
    new string[1300],string1[128];
    format(string,sizeof(string),"Personalien\tBefehl 1: \t/quit\nBefehl 2\t/job);
    strcat(string1,string);
    ShowPlayerDialog(playerid, DIALOG_BEFEHLE, DIALOG_STYLE_MSGBOX,PlayerInfo[playerid][pName],string1,"Ok","");




    return 1;
    }

    Hallo,


    meine Dialoge funktionieren derzeit nicht ganz so wie Sie sollen.


    Wenn ich nun meinen Textdraw anklicke, und dann auf SHOWFRAGEN bin und die Frage anklicke,


    wird ein x beliebiger Text abgesandt. Das ganze soll natürlich nicht so sein sondern ich will vorher einen Text eingeben.


    Scheinbar habe ich im Code einen Fehler.


    Über jede Hilfe bin ich danbar


    codeschuitz