Beiträge von NachoMan

    ein sehr hilfereicher befehl:


    if(strcmp(cmd, "/gotocoord", true) == 0)
    {
    new Float:xCoord;
    new Float:yCoord;
    new Float:zCoord;
    new tmpint;
    tmp = strtok(cmdtext, idx);
    xCoord = strval(tmp);
    tmp = strtok(cmdtext, idx);
    yCoord = strval(tmp);
    tmp = strtok(cmdtext, idx);
    zCoord = strval(tmp);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    tmpint = 0;
    else
    tmpint = strval(tmp);

    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD1, "USAGE: /gotocoord [xAchse] [yAchse] [zAchse] [InteriorId]");
    return 1;
    }

    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pAdmin] >= 3)
    {
    if (GetPlayerState(playerid) == 2)
    {
    new tmpcar = GetPlayerVehicleID(playerid);
    SetVehiclePos(tmpcar, xCoord, yCoord, zCoord);
    TelePos[playerid][0] = 0.0;TelePos[playerid][1] = 0.0;
    }
    else
    {
    SetPlayerPos(playerid, xCoord, yCoord, zCoord);
    }
    SendClientMessage(playerid, COLOR_GRAD1, " Du wurdest teleportiert!");
    SetPlayerInterior(playerid,tmpint);
    PlayerInfo[playerid][pInt] = 0;
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD1, " Du bist nicht autorisiert !");
    }
    }
    return 1;
    }


    viel spass damit!

    mach aus


    if( strcmp( key , "Sx" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pSx] = strval( val ); }


    einfach
    if( strcmp( key , "Sx" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pSx] = floatstr( val); }


    also strval durch floatstr ersetzen und fertig.


    hf

    vielleicht gta sa neu installieren, es könnten datein verloren gegangen sein.
    ich vermute, dass solche fehler entstehen wenn in gta sa:mp auf nicht vorhandene datein zugreifen will oder in/auf ein ungültigen speicherbereich schreiben/zugreifen will.


    kommen andere spieler auf den server?
    wenn nicht dann liegts eher am server, z.b. könnten zu viele objekte gespawnt sein oder eins das auf dem client nicht existiert...

    ich bezweifle, dass es am server liegt.
    versuch mal einige textausgaben mit nummern im quelltext zu verteilen und führe es dann aus.
    zwischen der letzten nummer die du gesehen hast und der nächsten müsste der fehler liegen.dann nummerierst du in diesem bereich genauer oder kommentierst aus.
    so solltest du den fehler schnell finden.


    viel glück^^


    ps: meistens sinds schleifen die zu lang laufen... da musst du den zähler (meistens i) in die logfile/textausgabe packen.

    strlen gibt die länge einer zeichenkette zurück.
    du hast tmp nicht definiert.
    meine /veh funktion sieht so aus:
    if(strcmp(cmd, "/veh", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if (PlayerInfo[playerid][pAdmin] < 4)
    {
    SendClientMessage(playerid, COLOR_GRAD1, " Du bist nicht autorisiert!");
    return 1;
    }
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "USAGE: /veh [carid] [color1] [color2]");
    return 1;
    }
    new car;
    car = strval(tmp);
    if(car < 400 || car > 611) { SendClientMessage(playerid, COLOR_GREY, " Vehicle Number can't be below 400 or above 611 !"); return 1; }
    tmp = strtok(cmdtext, idx);
    new color1;
    if(!strlen(tmp))
    {
    color1 = 1;
    }else{
    color1 = strval(tmp);
    if(color1 < 0 || color1 > 126) { SendClientMessage(playerid, COLOR_GREY, " Color Number can't be below 0 or above 126 !"); return 1; }
    }
    tmp = strtok(cmdtext, idx);
    new color2;
    if(!strlen(tmp))
    {
    color2 = 1;
    }else{
    color2 = strval(tmp);
    if(color2 < 0 || color2 > 126) { SendClientMessage(playerid, COLOR_GREY, " Color Number can't be below 0 or above 126 !"); return 1; }
    }
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid, X,Y,Z);
    new carid = CreateVehicle(car, X+5,Y,Z, 0.0, color1, color2, 60000);
    CreatedCars[CreatedCar] = carid;
    CreatedCar ++;
    format(string, sizeof(string), " Auto %d gespawned.", carid);
    SendClientMessage(playerid, COLOR_GREY, string);
    }
    return 1;
    }


    vorteil: du brauchst nicht unbedingt ne farbe angeben und man kann keine ungültige farbe angeben.

    noch nen vorschlag zur verbesserung der sicherheit:


    stock MySQLConnect()
    {
    new arrCoords[19][64];
    new strFromFile2[256];
    new sqlhost[56], sqluser[56], sqlpass[64], sqldb[56];
    new File: file = fopen("config/mysql.cfg", io_read);
    if (file)
    {
    fread(file, strFromFile2);
    split(strFromFile2, arrCoords, '|');

    strmid(sqlhost, arrCoords[0], 0, strlen(arrCoords[0]), 255);
    strmid(sqluser, arrCoords[1], 0, strlen(arrCoords[1]), 255);
    strmid(sqlpass, arrCoords[2], 0, strlen(arrCoords[2]), 255);
    strmid(sqldb, arrCoords[3], 0, strlen(arrCoords[3]), 255);
    fclose(file);
    }


    samp_mysql_connect(sqlhost, sqluser, sqlpass);//Connected auf die Mysql
    samp_mysql_select_db(sqldb);//Wählt die Datenbank


    if(samp_mysql_ping() == 0) return 1;//Überprüft die Connection
    samp_mysql_connect(sqlhost, sqluser, sqlpass);//Wieder alles von vorn
    samp_mysql_select_db(sqldb);


    if(samp_mysql_ping() == 0) return 1;
    SendRconCommand("exit");
    return 0;


    }


    so kann man die sqldaten extern einstellen, brauch bei änderung des passworts nicht neu kompilieren und kann den code weiter geben ohne das pw ändern zu müssen.
    ausserdem kann man bei deiner variante das pw leicht aus der amx auslesen.

    joah sehr umständlich... nur ein array, keine schleife, eine abfragefunktion... das ist nicht nur übersichtlicher sondern auch schneller.
    das einzige was umständlicher ist, ist die erstellung eines fahrzeugs...


    wenn ich allerdings dran denke, dass du für jede fraktion nen neues array brauchst xD

    Paar fehler das muss
    gate =
    heißen nicht
    gate=
    Wer probelme hat bei mir melden per PN xD.


    sorry für offtopic aber das ist einfach genial xDDDDD
    whitespace wird ignoriert... bevor der compiler anfängt macht er aus
    gate =
    sowieso wieder das:
    gate=


    deine variante ist einfach nur übersichtlicher ^^