Beiträge von Pascal.

    Guten Tag Community!
    Ich brauche Hilfe mit mein Haus System.
    Wenn ich ein Haus erstelle ist noch alles richtig, aber ich kann es nicht sofort kaufen erst nach dem Restart.
    So wenn ich es kaufe und den Server restarte, kann man das Haus wieder kaufen obwohl ich in der Datenbank als Besitzer drinne stehe.
    Wenn man es erstellt ist auch der 3DLabelText so wie wenn man es kaufen kann und das pickup ist auch grün,
    wenn man es Kauft ändert sich der Label und das Pickup auch. Soweit geht alles.
    Wenn ich den Server restarte ist das Pickup wieder grün und der text ist so, ob man das Haus erstellt hat.
    Nun gut hier ist der Code:


    public LoadHaus()
    {
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++)
    {
    new id = GetFreeHouseID();
    hInfo[id][hx] = cache_get_field_content_float(i,"hx",dbhandle);
    hInfo[id][hy] = cache_get_field_content_float(i,"hy",dbhandle);
    hInfo[id][hz] = cache_get_field_content_float(i,"hz",dbhandle);
    hInfo[id][i_x] = cache_get_field_content_float(i,"ix",dbhandle);
    hInfo[id][i_y] = cache_get_field_content_float(i,"iy",dbhandle);
    hInfo[id][i_z] = cache_get_field_content_float(i,"iz",dbhandle);
    hInfo[id][h_interior] = cache_get_field_content_int(i,"h_interior",dbhandle);
    new tmp_name[MAX_PLAYER_NAME];
    strmid(hInfo[id][h_besitzer],tmp_name,0,sizeof(tmp_name),sizeof(tmp_name));
    cache_get_field_content(i,"h_besitzer",tmp_name,dbhandle);
    hInfo[id][h_level] = cache_get_field_content_int(i,"kauflevel",dbhandle);
    hInfo[id][h_preis] = cache_get_field_content_int(i,"kaufpreis",dbhandle);
    hInfo[id][db_id] = cache_get_field_content_int(i,"id",dbhandle);
    UpdateHaus(id);
    printf("Haus %d wurde erfolgreich Geladen.",id);
    }
    return 1;
    }


    UpdateHaus(id)
    {
    new string[250];
    if(hInfo[id][h_pickup])
    {
    DestroyPickup(hInfo[id][h_pickup]);
    }
    if(hInfo[id][h_text])
    {
    Delete3DTextLabel(hInfo[id][h_text]);
    }
    if(!strlen(hInfo[id][h_besitzer]))
    {
    format(string,250,"\
    {007AFF}Besitzer: {FEFEFE}-unbekannt-\n\
    {007AFF}Level: {FEFEFE}%d\n\
    {007AFF}Kaufpreis: {FEFEFE}%d$\n\
    {007AFF}Beschreibung: {FEFEFE}Dieses Haus steht zum Verkauf.\n\n\
    Benutze /buyhouse um das Haus zu kaufen",
    hInfo[id][h_level],hInfo[id][h_preis]);
    hInfo[id][h_pickup] = CreatePickup(1273, 1, hInfo[id][hx],hInfo[id][hy],hInfo[id][hz],-1);
    hInfo[id][h_text] = Create3DTextLabel(string,COLOR_ROT,hInfo[id][hx],hInfo[id][hy],hInfo[id][hz],10,0,1);
    print("UpdateHaus ohne Besitzer wurde aufgerufen");
    }
    else
    {
    format(string,250,"\
    {007AFF}Besitzer: {FEFEFE}%s\n\
    {007AFF}Level: {FEFEFE}%d\n\
    {007AFF}Miete: {FEFEFE}0$",
    hInfo[id][h_besitzer],hInfo[id][h_level]);
    hInfo[id][h_pickup] = CreatePickup(1272, 1, hInfo[id][hx],hInfo[id][hy],hInfo[id][hz],-1);
    hInfo[id][h_text] = Create3DTextLabel(string,COLOR_ROT,hInfo[id][hx],hInfo[id][hy],hInfo[id][hz],10,0,1);
    print("UpdateHaus mit Besitzer wurde aufgerufen");
    }
    return 1;
    }


    ocmd:createhouse(playerid,params[])
    {
    if(pInfo[playerid][pEingeloggt] == 0)return SendClientMessage(playerid,COLOR_GRAU,"Du bist nicht Eingeloggt!");
    if(pInfo[playerid][pAdmin] <6)return SendClientMessage(playerid,COLOR_GRAU,"Du bist nicht befugt diesen Befehl zu nutzen!");
    new klevel,kpreis;
    if(sscanf(params,"ii",klevel,kpreis))return SCM(playerid,COLOR_GRAU,"INFO: /createhouse [kauflevel] [kaufpreis]");
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);

    new query[250];
    new id = GetFreeHouseID();
    hInfo[id][hx] = x;
    hInfo[id][hy] = y;
    hInfo[id][hz] = z;
    hInfo[id][i_x] = 0.0;
    hInfo[id][i_y] = 0.0;
    hInfo[id][i_z] = 0.0;
    hInfo[id][h_interior] = 0;
    hInfo[id][h_level] = klevel;
    hInfo[id][h_preis] = kpreis;
    strmid(hInfo[id][h_besitzer], "",0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    format(query,250,"INSERT INTO haus (hx,hy,hz,ix,iy,iz,h_interior,kauflevel,kaufpreis) VALUES ('%f','%f','%f','0.0','0.0','0.0','0','%i','%i')",
    x,y,z,klevel,kpreis);
    mysql_function_query(dbhandle,query,true,"CreateHaus","i",id);
    UpdateHaus(id);
    printf("%s",query);
    return 1;
    }


    ocmd:buyhouse(playerid,params[])
    {
    if(pInfo[playerid][pEingeloggt] == 0)return SendClientMessage(playerid,COLOR_GRAU,"Info: Du bist nicht Eingeloggt!");
    new string[128];
    if(HasPlayerHaus(playerid))return SendClientMessage(playerid,COLOR_GRAU,"Du hast bereits ein Haus.");
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(!hInfo[i][db_id])continue;
    if(!IsPlayerInRangeOfPoint(playerid,2,hInfo[i][hx],hInfo[i][hy],hInfo[i][hz]))continue;
    if(!strlen(hInfo[i][h_besitzer]))
    {
    if(GetPlayerMoney(playerid) < hInfo[i][h_preis])return SCM(playerid,COLOR_GRAU,"Du hast nicht genügend Geld für das Haus!");
    if(GetPlayerScore(playerid) < hInfo[i][h_level])return SCM(playerid,COLOR_GRAU,"Du hast nicht das nötige Level für das Haus!");
    GivePlayerMoney(playerid,-hInfo[i][h_preis]);
    strmid(hInfo[i][h_besitzer], SpielerName(playerid),0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    format(string,128,"** Du hast das Haus erfolgreich für %d$ gekauft. **",hInfo[i][h_preis]);
    SCM(playerid,COLOR_GELB,string);
    UpdateHaus(i);
    SaveHaus(i);
    return 1;
    }
    return SCM(playerid,COLOR_GRAU,"Dieses Haus ist bereits verkauft.");
    }
    return 1;
    }

    Versuch doch ein Wenig alleine, wenn du dann Probleme hast oder Fragen hast könntest du dich ja Melden =)
    Sollte eher ein Tutorial werden mit dem Flugzeug richtig?
    Wenn sich jemand Registriert, könntest du beispielsweise jemand im Flugzeug spawnen lassen und nach einem Timer diesen
    am Airport(LS) Teleportieren/Spawnen lassen.
    Dort sollten dann Fahrzeuge bereit stehen damit er dort zur Stadthalle kann (Checkpoint kannst du dann auch noch setzen).


    Pascal :thumbup:

    Aso dann habe ich das falsch verstanden.
    Ich dachte er speichert den Name nicht.
    Gut ich amch dir mal ein kleines Beispiel:


    new Spielerdaten[128],name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdaten,sizeof(Spielerdaten),"/Accounts/%s.ini",name);
    if(!dini_Exists(inputtext))
    {
    //Code, wenn der Spieler nicht Vorhanden ist
    }
    else
    {
    SendClientMessage(playerid,-1,"Dieser Spieler ist bereits Vorhanden!");
    }


    Sollte so ähnlich klappen, einfach bissl rum probieren =)

    Also wie gesagt ist wieder ungetestet.
    Aber ich gebe dir mal ein paar tipps:


    Du kannst auch anstatt
    if(response == 1)
    {


    }
    ....
    das hier machen:
    if(response)
    {
    //Hier der code der ausgeführt werden soll...
    }
    else
    {
    //hier zb wenn er auf abbrechen klickt
    }


    Und ja zum namechange frag dort lieber nochmal ab ob es den Spieler gibt.
    Wenn du weitere Probleme hast schick code und sag mir was es für Probleme gibt =)


    //EDIT:
    Andere Code war fail hier nochmal:
    if(dialogid == DIALOG_NAMECHANGE)
    {
    if(response)
    {
    if(GetPVarInt(playerid,"Namechange") == 1)return SendClientMessage(playerid,-1,"Du hattest bereits ein Namechange.");
    if(GetPlayerMoney(playerid) < 1000000)return SendClientMessage(playerid,-1,"Du hast nicht genügend Geld.");
    new string[128],zstring[128],pfad[150],name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    gettime(stunde,minuten,sekunde);
    getdate(jahr,monat,tag);
    format(zstring,sizeof(zstring),"%02d:%02d:%02d\n%02d:%02d:%02d:",tag,monat,jahr,stunde,minuten,sekunde);
    format(string,128,"Du hast dein Name erfolgreich Umbenannt. Neuer Name: %s",inputtext);
    SendClientMessage(playerid,-1,string);
    GivePlayerMoney(playerid,-1000000);
    format(pfad,sizeof(pfad),"Namechange.txt");
    dini_Create(pfad);
    dini_Set(pfad,"Alter Name",Name(playerid));
    dini_Set(pfad,"Neuer Name",inputtext);
    SetPVarInt(playerid,"Namechange",1);
    format(string,"%s",inputtext);
    SetPlayerName(playerid,string);
    SpielerSpeichern(playerid);
    }
    else
    {

    }
    return 1;
    }

    Dein Problem mit dem Kaufdatum:


    format(zstring,sizeof(zstring),"d/d/d-d:d:d",tag,monat,jahr,stunde,minuten,sekunde);


    Du hast anstatt "zstring" string benutzt.
    Aber das Kauf datum tust du mit zstring speichern.
    Sollte so klappen =)


    //EDIT:


    Clan kaufen (falls es den Name gibt anderen wählen):


    new pfad[150];
    format(pfad,sizeof(pfad),"/Clans/%s.txt",inputtext);
    if(!dini_Exists(inputtext))
    {
    // Wenn es den Clan nicht gibt, hier erstellen
    }
    else
    {
    //Wenn es den Clan gibt:
    SendClientMessage(playerid,-1,"Dieser Clan ist bereits vorhande!");
    }


    Zum 3 Problem, mach eine neue Variable in dein pInfo enum etc....
    Und füg dort ein pClanLeader // Kannst auch anders bennen


    Dann fragst du dort ab wo du den Dialog erstellst folgendes ab:


    if(pInfo[playerid][pClanLeader] >0)return SendClientMessage(playerid,-1,"Du hast bereits ein Clan.");


    Es ist ungetestet.
    Fallst du noch Probleme hast, meld dich =)

    Morgen Community!
    Und zwar habe ich ein kleines Problem, wenn ich Alt Gr 7-8-9-0 mache kommen keine klammern.
    Es kommt immer so etwas kleines "Voice typ: disabled" oder ein anderer Text.
    Wie mache ich das wieder zurück, so das ich die Klammern machen kann?


    //EDIT: Irgendwie geht es jetzt wieder.

    Direkt gibt es kein Problem, meinte nur das wenn der Spieler gebannt ist das kein Dialog mehr kommen soll.
    if(dialogid == DIALOG_LOGIN)
    {
    if(response)
    {
    new string[250],query[128],passwort[16];
    if(strlen(inputtext)>0)
    {
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,128,"SELECT * FROM spielerdaten WHERE name='%s' AND passwort='%s'",
    SpielerName(playerid),passwort);
    mysql_function_query(dbhandle,query,true,"OnPasswortCheck","i",playerid);
    }
    else
    {
    SendClientMessage(playerid,COLOR_ROT,"Bitte gib dein Passwort ein.");
    format(string,250,"{FAFAFA}Willkommen zurück {002BFF}%s.\n\
    {FAFAFA}Bitte gib dein {002BFF}Passwort {FAFAFA}ein damit du fortfahren kannst.",SpielerName(playerid));
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login",string,"Login","Abbrechen");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_ROT,"Du hast den Login vorgang abgebrochen.");
    Kick(playerid);
    }
    return 1;
    }

    Brauchst bei den ein Public kein Timer.
    Kannst das zb so machen:


    Beispiel:
    SetSpawnInfo(playerid,0,2,401.9258,-1533.9006,32.2734,0,0,0,0,0,0,0); // playerid,team,skinID,SpawnX,SpawnY,SpawnZ,rest ist waffen und munition
    SpawnPlayer(playerid);

    Guten Abend Community!
    Und zwar suche ich seit einer halben stunde nach einer Lösung, habe mehreres Probiert aber es klappt einfach nix.
    Ich möchte den Ban Grund aus der Datenbank auslesen und in einer neuen Variable speichern und den User
    im Chat anzeigen lassen.
    Doch wenn ich den User den Grund anzeigen lassen möchte, kommt dort als Grund "NULL".



    public IsPlayerBanned(playerid)
    {
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows > 0)
    {
    new string[128],grund[128];
    cache_get_field_content(0,"grund",grund,dbhandle); //Auslesen und in "grund" speichern.
    format(string,128,"** Du bist vom Server gebannt, Grund: %s",grund); //Grund anzeigen lassen
    SCM(playerid,COLOR_ROT,string);
    Kick(playerid);
    return 0;
    }
    return 1;
    }


    Und noch ein Mysql_log:

    Code
    [17:39:17] [ERROR] CMySQLResult::GetRowDataByName() - invalid row index ('3')

    Hallo Community!
    Und zwar wollte ich mal fragen wie man das abstellen kann das die Filterscript Dialoge überschrieben werden mit den Gamemode Dialoge?
    Weil habe immer dieses Problem das sich diese Überschreiben.


    Pascal 8)