Beiträge von Hammerfaul

    Hallo zusammen,
    Ich bin vor kurzem von SAMP zu GT-MP gewechselt.


    Leider ist die Programmiersprache nicht mehr die selbe und ich muss versuchen mit Java und C# klar zu kommen.
    Nun meine Frage: Habt ihr Tipp, wie man das Programmieren von GT-MP lernen kann?
    Ich habe bis jetzt wenig "Anleitungen" gefunden, im Gegensatz zu SAMP Zeiten.


    Grüße
    Hammerfaul


    P.S. Und ja das ganze ist ernst gemeint. Leider sind beide Sprachen für mich Neuland.

    Da lese ich sie aus.



    public IsServerDateThere(ser_id)
    {
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==0)
    {


    }
    else
    {


    }
    return 1;
    }


    Hier soll erstellt oder abgefragt werden doch da habe ich ja um hilfe gebeten weil ich da ja nicht weiß wie ich das machen soll.


    So mir ist grade aufgefallen, dass ich beim server das IsServerDaraThere weglassen könne und dann das IsServerDaraThere direkt in GameModeInit schreiben könne.


    Das sieht jetzt so aus:

    public OnGameModeInit()
    {
    //MySQL
    dbhandle = mysql_connect(db_host,db_user,db_db,db_pass);

    mysql_debug(1);

    //server daten
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==0)
    {

    }
    else
    {
    mysql_function_query(dbhandle,"SELECT * FROM server WHERE id='1'",true,"IsServerDateThere","i",1);
    }
    }


    Ich kann sie jetzt nur abfragen aber noch nicht erstellen. Wie soll das denn gehen?


    So ich bin jetzt soweit das ich meiner meinung nach alles richtig gemacht ahbe doch ich bekomme momentan noch mysql fehler:


    [21:02:54] [DEBUG] cache_get_data - connection: 1
    [21:02:54] [WARNING] cache_get_data - no active cache
    [21:02:54] [DEBUG] cache_get_field_content_int - row: 0, field_name: "buergerm", connection: 1
    [21:02:54] [WARNING] cache_get_field_content_int - no active cache
    [21:02:54] [DEBUG] cache_get_field_content_int - row: 0, field_name: "lottoerg", connection: 1
    [21:02:54] [WARNING] cache_get_field_content_int - no active cache


    [17:23:40] [DEBUG] mysql_tquery - connection: 1, query: "SELECT * FROM server WHERE id='1'", callback: "IsServerDateThere", format: "i"
    [17:23:40] [DEBUG] CMySQLQuery::CMySQLQuery() - constructor called
    [17:23:40] [DEBUG] mysql_tquery - scheduling query "SELECT * FROM server WHERE id='1'"..
    [17:23:40] [DEBUG] cache_get_data - connection: 1
    [17:23:40] [WARNING] cache_get_data - no active cache
    [17:23:40] [DEBUG] CMySQLQuery::Execute[IsServerDateThere(i)] - starting query execution
    [17:23:40] [DEBUG] CMySQLQuery::Execute[IsServerDateThere(i)] - query was successful
    [17:23:40] [DEBUG] CMySQLResult::CMySQLResult() - constructor called
    [17:23:40] [DEBUG] CMySQLQuery::Execute[IsServerDateThere(i)] - data being passed to ProcessCallbacks()
    [17:23:40] [DEBUG] Calling callback "IsServerDateThere"..
    [17:23:40] [DEBUG] cache_get_data - connection: 1
    [17:23:40] [DEBUG] CMySQLResult::~CMySQLResult() - deconstructor called
    [17:23:40] [DEBUG] CMySQLQuery::~CMySQLQuery() - deconstructor called


    new dbhandle;


    enum sInfo
    {
    eingeloggt,
    level,
    s_id,
    geld,
    job,
    alevel,
    db_id,
    bank,
    exp,
    geschlecht,
    familie,
    fraktion,
    ZbP,
    VIP,
    Lotto,
    Wanted,
    Fische,
    Drogen,
    Zeit,
    iq
    }


    public OnGameModeInit()
    {
    //MySQL
    dbhandle = mysql_connect(db_host,db_user,db_db,db_pass);
    }


    public OnPlayerConnect(playerid)
    {
    //Login/Register
    new name[MAX_PLAYER_NAME],query[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(query,sizeof(query),"SELECT id FROM accounts WHERE name='%s'",name);
    mysql_function_query(dbhandle,query,true,"OnUserCheck","i",playerid);
    }


    public OnUserCheck(playerid)
    {
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==0)
    {
    //Registrierung
    ShowPlayerDialog(playerid,DIALOG_REG,DIALOG_STYLE_INPUT,"Registrierung","Willkommen bei der Registrierung von ihrem neuen Account.\nDas Passwort muss aus Sicherheitsgründen mindestens 5 Zeichen lang sein.\nGeben sie bitte ihr gewünschtes Passwort ein:","Bestätigen","Beenden");
    }
    else
    {
    //Login
    if(pwtry[playerid] < 2) //noch versuche frei
    {
    ShowPlayerDialog(playerid,DIALOG_LOG,DIALOG_STYLE_PASSWORD,"Login","Ihr Account wurde gefunden.\nBitte geben sie ihr Passwort ein:","Bestätigen","Beenden");
    }
    else //keine versuche frei
    {
    SendClientMessageToAll(SERVER,"Fehler 3");
    kText(playerid,"Sie haben das Passwort 3 Mal falsch eingegeben und wurden nun vom Server gebannt.");
    kText(playerid,"Setzen sie sich mit einem Admin in Verbindung damit dieser sie wieder entbannt.");
    }
    }
    return 1;
    }


    public OnPasswortResponse(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(pwtry[playerid] < 2) //noch versuche frei
    {
    if(num_rows==1)
    {
    //Passwort richtig
    SpielerInfo[playerid][eingeloggt] = 1; //eingeloggt setzen
    SpielerInfo[playerid][db_id] = cache_get_field_content_int(0,"db_id",dbhandle); //db_id setzen
    SpielerInfo[playerid][job] = cache_get_field_content_int(0,"job",dbhandle); //job setzen
    SpielerInfo[playerid][alevel] = cache_get_field_content_int(0,"alevel",dbhandle); //alevel setzen
    SpielerInfo[playerid][s_id] = cache_get_field_content_int(0,"id",dbhandle); //id setzen
    SpielerInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle); //level setzen
    SpielerInfo[playerid][bank] = cache_get_field_content_int(0,"bank",dbhandle); //bank setzen
    SpielerInfo[playerid][exp] = cache_get_field_content_int(0,"exp",dbhandle); //exp setzen
    SpielerInfo[playerid][geschlecht] = cache_get_field_content_int(0,"geschlecht",dbhandle); //geschlecht setzen
    SpielerInfo[playerid][familie] = cache_get_field_content_int(0,"familie",dbhandle); //familie setzen
    SpielerInfo[playerid][fraktion] = cache_get_field_content_int(0,"fraktion",dbhandle); //fraktion setzen
    SpielerInfo[playerid][ZbP] = cache_get_field_content_int(0,"ZbP",dbhandle); //ZbP setzen
    SpielerInfo[playerid][VIP] = cache_get_field_content_int(0,"VIP",dbhandle); //VIP setzen
    SpielerInfo[playerid][Lotto] = cache_get_field_content_int(0,"Lotto",dbhandle); //Lotto setzen
    SpielerInfo[playerid][Wanted] = cache_get_field_content_int(0,"Wanted",dbhandle); //Wanted setzen
    SpielerInfo[playerid][Fische] = cache_get_field_content_int(0,"Fische",dbhandle); //Fische setzen
    SpielerInfo[playerid][Drogen] = cache_get_field_content_int(0,"Drogen",dbhandle); //Drogen setzen
    SpielerInfo[playerid][Zeit] = cache_get_field_content_int(0,"Zeit",dbhandle); //Zeit setzen
    SpielerInfo[playerid][iq] = cache_get_field_content_int(0,"iq",dbhandle); //iq setzen
    SetPlayerMoney(playerid,cache_get_field_content_int(0,"geld",dbhandle)); //geld setzen
    SetPlayerScore(playerid,SpielerInfo[playerid][level]); //level setzen
    SendClientMessage(playerid,RICHTIG,"Sie haben sich erfolgreich eingeloggt");
    //noob spawn
    //SetSpawnInfo( playerid,0,0,-207.3559,1118.9818,20.4297,273.1605,0,0,0,0, 0, 0 );
    SetSpawnInfo( playerid,0,0,-188.7771,1170.0776,19.5993,273.1605,0,0,0,0, 0, 0 );
    if(SpielerInfo[playerid][eingeloggt] == 1)
    {
    SpawnPlayer(playerid);
    if(SpielerInfo[playerid][iq] == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_IQTEST1,DIALOG_STYLE_MSGBOX,"IQ Test","Sie müssen nun 10 Fragen beantworten.","Weiter","Verlassen");
    }
    }
    loadPlayerCars(playerid);
    }
    else
    {
    //Passwort falsch
    pwtry[playerid] = pwtry[playerid] +1;
    new ueberschirft[50],text[128],versuche;
    versuche = 3-pwtry[playerid];
    format(ueberschirft,sizeof(ueberschirft),"{00FF00}Login - {FF0000}Versuch %i/%i",versuche,maxpw);
    format(text,sizeof(text),"Sie haben nur noch %i Versuche.\nBitte geben sie ihr Passwort ein:",versuche,maxpw);
    ShowPlayerDialog(playerid,DIALOG_LOG,DIALOG_STYLE_PASSWORD,ueberschirft,text,"Bestätigen","Beenden");
    }
    }
    else //keine versuche frei
    {
    kText(playerid,"Sie haben das Passwort 3 Mal falsch eingegeben und wurden nun vom Server gebannt.");
    kText(playerid,"Setzen sie sich mit einem Admin in Verbindung damit dieser sie wieder entbannt.");
    }
    return 1;
    }


    if(dialogid==DIALOG_REG)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext) < 5)
    {
    //kleiner als 5 Zeichen
    ShowPlayerDialog(playerid,DIALOG_REG,DIALOG_STYLE_INPUT,"Registrierung","Bitte beachten sie die mindestens Anzahl von 5 Zeichen.\nGeben sie bitte ihr gewünschtes Passwort ein:","Bestätigen","Beenden");
    }
    else
    {
    //registrierung
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO accounts (name,passwort) VALUES ('%s',MD5('%s'))",name,passwort);
    mysql_function_query(dbhandle,query,true,"OnPlayerRegister","i",playerid);
    SendClientMessage(playerid,RICHTIG,"Die Registierung ist abgeschlosen. Sie sind nun eingeloggt.");
    ShowPlayerDialog(playerid,DIALOG_IQTEST1,DIALOG_STYLE_INPUT,"IQ Test","Sie müssen nun 20 Fragen beantworten.","Weiter","Verlassen");
    SpielerInfo[playerid][eingeloggt] = 1;
    //SetSpawnInfo( playerid,0,0,-207.3559,1118.9818,20.4297,273.1605,0,0,0,0, 0, 0 );
    SetSpawnInfo( playerid,0,0,-188.7771,1170.0776,19.5993,273.1605,0,0,0,0, 0, 0 );
    if(SpielerInfo[playerid][eingeloggt] == 1)
    {
    SpawnPlayer(playerid);
    }
    }
    }
    else
    {
    kText(playerid,"Sie haben die Registierungsvorgang abgebrochen.");
    }
    return 1;
    }


    SpielerSpeichern(playerid) //Speichern
    {
    if(SpielerInfo[playerid][eingeloggt]==0)return 1;
    new query[1024];
    format(query,sizeof(query),"UPDATE accounts SET level = '%i',geld = '%i',job = '%i',alevel = '%i',db_id = '%i',bank = '%i',exp = '%d',geschlecht = '%i',familie = '%i',fraktion = '%i',ZbP = '%i',VIP = '%i',Lotto = '%i',Wanted = '%i',Fische = '%i',Drogen = '%i',Zeit = '%i',iq = '%i' WHERE `id` = %i",
    SpielerInfo[playerid][level], //Speichern Level
    GetPlayerMoney(playerid), //Speichern Geld
    SpielerInfo[playerid][job], //speichern job
    SpielerInfo[playerid][alevel], //speichern admin
    SpielerInfo[playerid][db_id], //speichern db_id
    SpielerInfo[playerid][bank], //speichern bank
    SpielerInfo[playerid][exp], //speichern exp
    SpielerInfo[playerid][geschlecht],//geschlecht speichern
    SpielerInfo[playerid][familie], //familie speichern
    SpielerInfo[playerid][fraktion], //fraktion speichern
    SpielerInfo[playerid][ZbP], //ZbP speichern
    SpielerInfo[playerid][VIP], //VIP speichern
    SpielerInfo[playerid][Lotto], //Lotto speichern
    SpielerInfo[playerid][Wanted], //Wanted speichern
    SpielerInfo[playerid][Fische], //Fische speichern
    SpielerInfo[playerid][Drogen], //Drogen speichern
    SpielerInfo[playerid][Zeit], //Zeit speichern
    SpielerInfo[playerid][iq], //iq speichern
    SpielerInfo[playerid][s_id]
    );
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    Halt das Typische aber es geht ja garnicht um die accounts sondern wie erstelle ich einen neue Zeile in meiner tabelle für meinen Server und wie update ich die.
    Dazu kommt der Error denn ich nicht verstehe weil die Zeile von accounts und server sich ähnlich sind und ich da eig nichts vergessen habe.

    Hallo liebe Breadfish User,


    Ich kam auf die Idee Globale Variabeln die auf lägere Zeit wichtig sind in einer MySQL Tabelle zu speichern.
    Ich habe jetzt momentanaber das Problem, dass ich die Datenbank nicht abfragen kann.


    Bei einem Spieler statet man ja normalerweise so:

    new name[MAX_PLAYER_NAME],query[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(query,sizeof(query),"SELECT id FROM accounts WHERE name='%s'",name);
    mysql_function_query(dbhandle,query,true,"OnUserCheck","i",playerid);

    Bei der Server Tabelle muss ich das ganze ja anders Abfrage, weil ich ja keinen Namen habe, doch was soll ich abfragen?
    Ich wollte es so machen, dass bei OnGameModeInit abgefragt wird ob es eine Datenbank mit der ID 1 gibt.



    new query[128];
    format(query,sizeof(query),"SELECT ? FROM server WHERE id='%i'",1);
    mysql_function_query(dbhandle,query,true,"IsServerDateThere","i",id);

    Was soll ich denn jetzt bei SELECT abfragen oder muss ich da nix Abfragen?



    public IsServerDateThere(id)
    {
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==0)
    {
    }
    else
    {
    }
    }

    Wie soll ich das ganze denn jetzt bei IsServerDateThere abfragen?


    Desweiteren bekomme ich einen Error: warning 213: tag mismatch in der Zeile

    mysql_function_query(dbhandle,query,true,"IsServerDateThere","i",id);



    Da ich mich mit MySQL nun wirklich nicht auskenne, habe ich leider keine richtige Vorstellung wie das gehen soll.


    Ich freue mich über jede Hilfe
    Hammerfaul

    Ich habe mal eine kleine Frage:
    Wie kann ich abfragen welches Objekt in meiner Nähe ist.


    Ich habe das jetzt so gemacht:

    #define MAX_TREE 16


    new Float:baum[MAX_TREE][3] =
    {
    {1504.9000244,-1710.6999512,13.6999998},
    {1421.2171630,-980.4489140,1639.3854980},
    {1424.6304930,-980.5266720,1639.3714600},
    {1417.7136230,-980.4751590,1639.3635250},
    {-1835.6014400,63.2456100,1054.8320300},
    {1000.0999800,-917.0999800,42.0000000},
    {1504.9000200,-1710.6999500,13.7000000},
    {1421.2171600,-980.4489100,1639.3855000},
    {1424.6304900,-980.5266700,1639.3714600},
    {1417.7136200,-980.4751600,1639.3635300},
    {-1835.6014400,63.2456100,1054.8320300},
    {1476.9000200,-1803.1999500,15.1000000},
    {1421.2171600,-980.4489100,1639.3855000},
    {1424.6304900,-980.5266700,1639.3714600},
    {1417.7136200,-980.4751600,1639.3635300},
    {-1835.6014400,63.2456100,1054.8320300}
    };


    stock IsPlayerAtTREE(playerid)
    {
    for(new i=0; i<MAX_TREE; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,5, baum[i][0], baum[i][1], baum[i][2])) return 1;
    }
    return 0;
    }



    Das fragt jetzt ab, ob die erstellten Objekte in meiner nähe sind.
    Jetzt will ich aber wissen, welches genau davon, damit ich diese dann löschen kann.


    Danke im vorraus
    Hammerfaul

    Aber wenn ich einen bestimmten Wert abfrage wie z.B.


    if(!frakint[playerid] == 1) return SendClientMessage(playerid,FEHLER,"Sie sind kein Polizist.");


    kommt auch der gleiche Fehler und wenn ich das ! weg mache geht der fehler weg. Entweder ist es einfach zu auffällig oder ich weiß es echt nicht.

    Danke das ist mir alles garnicht aufgefallen :)
    Mein letztes Problem liegt hier:

    new atm[MAX_ATMS][3] =
    {
    {1185.1999512,-914.7999878,42.9000015},
    {1504.9000244,-1710.6999512,13.6999998},
    {1421.2171630,-980.4489140,1639.3854980},
    {1424.6304930,-980.5266720,1639.3714600},
    {1417.7136230,-980.4751590,1639.3635250},
    {-1835.6014400,63.2456100,1054.8320300},
    {1000.0999800,-917.0999800,42.0000000},
    {1185.1999512,-914.7999878,42.9000015}
    };

    script.pwn(860) : warning 213: tag mismatch
    script.pwn(861) : warning 213: tag mismatch
    script.pwn(862) : warning 213: tag mismatch
    script.pwn(863) : warning 213: tag mismatch
    script.pwn(864) : warning 213: tag mismatch
    script.pwn(865) : warning 213: tag mismatch
    script.pwn(866) : warning 213: tag mismatch
    script.pwn(867) : warning 213: tag mismatch


    Woran könnte das liegen?

    Da ich schon ein Bank-System habe, dachte ich mir, dass ich das doch mal eben zu einem ATM_system umschreiben könnte. Falsch gedacht ....


    Hier mein momentaner Stand:



    #define MAX_ATMS 7

    Da habe diese Errors:
    script.pwn(867) : error 001: expected token: ";", but found "{"
    script.pwn(868) : error 010: invalid function or declaration



    new atm[MAX_ATMS][3] =
    {
    {1185.1999512,-914.7999878,42.9000015},
    {1504.9000244,-1710.6999512,13.6999998},
    {1421.2171630,-980.4489140,1639.3854980},
    {1424.6304930,-980.5266720,1639.3714600},
    {1417.7136230,-980.4751590,1639.3635250},
    {-1835.6014400,63.2456100,1054.8320300},
    {1000.0999800,-917.0999800,42.0000000},
    {1185.1999512,-914.7999878,42.9000015}
    };


    for(new i=0; i<MAX_ATMS; i++)
    {
    CreateDynamicObject(2942,1185.1999512,-914.7999878,42.9000015,0.0000000,0.0000000,282.0000000); //
    CreateDynamicObject(2942,1000.0999756,-917.0999756,42.0000000,0.0000000,0.0000000,278.0000000); //
    CreateDynamicObject(2942,493.0000000,-1503.0000000,20.2000008,0.0000000,0.0000000,266.0000000); //
    CreateDynamicObject(2942,1504.9000244,-1710.6999512,13.6999998,0.0000000,0.0000000,90.0000000); //
    CreateDynamicObject(2942,1421.2171630,-980.4489140,1639.3854980,0.0000000,0.0000000,0.0000000); //
    CreateDynamicObject(2942,1424.6304930,-980.5266720,1639.3714600,0.0000000,0.0000000,0.0000000); //
    CreateDynamicObject(2942,1417.7136230,-980.4751590,1639.3635250,0.0000000,0.0000000,0.0000000); //
    CreateDynamicObject(2942,-1835.6014400,63.2456100,1054.8320300,0.0000000,0.0000000,270.0000000); //
    }


    stock PlayerbeimATM(playerid)
    {
    for(new i=0; i<MAX_ATMS; i++)
    {
    If(IsPlayerInRangeOfPoint(playerid, 2, atm[i][0], atm[i][1], atm[i][2])) return 1;
    }
    return 0;
    }


    Ich sitze da jetzt schon länger dran und verstehe nicht so ganz, wo das problem ist.
    Könne mir jemand auf die Sprünge helfen?


    LG Hammfaul