Beiträge von Kaliber

    Naja, wie wäre es einfach so:


    #define MAX_MODELS 211


    #define GetSprit(%0) sprit{GetVehicleModel(%0)-400}


    #define SPRIT_DIESEL 0
    #define SPRIT_BENZIN 1
    #define SPRIT_WASSER 2
    #define SPRIT_ELEKTRIK 3
    //what_ever


    stock const sprit[MAX_MODELS char] = {
    SPRIT_DIESEL, //Hier beginnt es ab model 400
    SPRIT_DIESEL,
    SPRIT_DIESEL,
    SPRIT_BENZIN,
    SPRIT_DIESEL,
    SPRIT_BENZIN,
    SPRIT_WASSER,
    SPRIT_ELEKTRIK //Musst halt alle Fahrzeuge durch machen
    };


    //Dann beim Dialog check, wenn er auf diesel geklickt hat
    if(GetSprit(vehicleid) == SPRIT_DIESEL)
    {
    //Hier Tankt er Diesel
    }
    else
    {
    //Hier nicht!
    }


    mfg. :thumbup:

    Ansonsten muss man sich die Struktur für jedesmal anlegen - ist dann doch etwas sehr aufwendig.


    Wieso? :huh:


    Darum geht es doch gerade, dass man das nicht muss...


    Weil wenn du die Tabelle speicherst...hat die Tabelle an sich doch immer die selbe Struktur :wacko:


    Wenn man sowas schon anbietet, dann sollte das auch einen allgemeinen nutzen haben.


    Was redest du da? Es hat doch einen allgemeinen nutzen...


    Aussagen wie "du musst es ja nicht nutzen", sind für's Ego vielleicht sehr schön, für die Allgemeinheit leider unbrauchbar.


    Achso...da man jedes Tool nutzen muss...was redest du hier für einen Schwachsinn? :huh:


    Dann kann man sich die Veröffentlichung auch sparen


    Ok...sobald ein paar Leute ein Tool nicht brauchen, kann man sich die Veröffentlichung sparen...ja ne ist klar..


    Zudem, wenn ich es für fast nichts verwenden kann, dann bringt es ja nichts.


    Das kommt ja darauf an...wenn man viele Querys auf einzelne Tabellen macht, dann bringt diese Include sehr viel...da sie die ganzen Query strukturen übersichtlicher und einfacher macht.


    Wenn man immer nur 1x etwas in eine Tabelle schreibt, dann ist es trivial, aber das ist es im seltesten Fall.


    Das mit dem Rückgabe Wert vom Insert, kann ich leider nicht so ohne weiteres handhaben, da das extrem die Nutzbarkeit von den cache Callbacks einschränken würde...


    Wie dem auch sei...ich wollte es für ein paar Personen zur Verfügung stellen...dass ihr es komplett nutzlos findet...ist euer Ding...manche evtl nicht.


    mfg. :rolleyes:

    Nun...installiere mal samp neu.


    Wenn das nichts bringt, ändere evtl den Kompatibilitätsmodus auf XP Service Pack 3...


    Falls das auch nichts bringt, könnte es auch an dem Skript selbst liegen, in diesem Fall frag ob du dir einen neuen Account erstellen darfst und deine Stats zurück bekommst :)


    mfg. :thumbup:

    Gewöhne dir mal an, die Spalten / Tabellen Namen zu kennzeichnen.


    Sprich schreib es mal so:


    format(query,sizeof(query),"INSERT INTO `autos` (`besitzer`,`model`,`x`,`y`,`z`,`r`,`tank`,`Kennzeichen`) VALUES ('%i','%i','%f','%f','%f','%f','%i','%d')",sInfo[playerid][db_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r],cInfo[carid][pctank],cInfo[carid][ckz]);

    Nun...das geht nur ganz schlecht.


    Weil die meisten Commands ja ziemlich Komplex sind und du nicht mal kurz dynamisch irgendwas erstellen kannst, was eine gewisse Komplexität mit sich bringt.


    Du kannst zwar etwas vordefinieren, worauf du zurückgreifen kannst, aber das bringt nicht wirklich was.


    Es ist doch durch CMD-Includes nicht mehr so aufwändig Commands zu erstellen und durch sscanf, kannst du diese ziemlich schnell zerlegen.


    Wozu willst du also irgendein aufwändiges "dynamisches" System erstellen, wenn es viel einfacher und schneller statisch geht? :rolleyes:

    Du fängst aber bei row 0 an...und nicht bei 1...


    Sprich schreib den Command mal so:


    ocmd:exit(playerid)
    {
    for(new i; i<sizeof(H_W); i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid, 7.0, H_W[i][0], H_W[i][1], H_W[i][2])) continue;
    new v=GetPlayerVirtualWorld(playerid)-1;
    SetPlayerInterior(playerid, 0),SetPlayerVirtualWorld(playerid, 0);
    return SetPlayerPos(playerid, HausInfo[v][hX],HausInfo[v][hY],HausInfo[v][hZ]),1;
    }
    return SendClientMessage(playerid,-1,!"Sie befinden sich an keinem Haus!");
    }


    mfg. :thumbup:

    Warum zur Hölle so kompliziert? :huh:


    Machs einfach nur so:


    stock const Float:H_W[][3] = {
    {244.4221, 305.0592, 999.1484},
    {266.7091, 305.0197, 999.1484},
    {2324.4587, -1148.8004, 1050.7101},
    {235.3885, 1187.0400, 1080.2578},
    {225.7580, 1239.9197, 1082.1406},
    {223.1530, 1287.4996, 1082.1406},
    {225.7527, 1021.9715, 1084.0162},
    {295.0053, 1472.9153, 1080.2578},
    {328.0984, 1478.0658, 1084.4375},
    {386.7174, 1471.7593, 1080.1875},
    {2269.7668, -1210.4520, 1047.5625},
    {2365.2903, -1135.0590, 1050.8750}
    };


    ocmd:exit(playerid)
    {
    for(new i; i<sizeof(H_W); i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid, 7.0, H_W[i][0], H_W[i][1], H_W[i][2])) continue;
    new v=GetPlayerVirtualWorld(playerid);
    printf("Welt: %d | %.02f | %.02f | %.2f",v,HausInfo[v][hX],HausInfo[v][hY],HausInfo[v][hZ]);
    SetPlayerInterior(playerid, 0),SetPlayerVirtualWorld(playerid, 0);
    return SetPlayerPos(playerid, HausInfo[v][hX],HausInfo[v][hY],HausInfo[v][hZ]),1;
    }
    return SendClientMessage(playerid,-1,!"Sie befinden sich an keinem Haus!");
    }


    Schau mal was dir geprintet wird...wenn da 0|0|0 in den Koordinaten rauskommt, stimmt die VirtuelleWelt nicht mit dem index von HausInfo überein...


    Du solltest dir vielleicht überlegen, dass alles in ein Array zu schreiben ^^


    mfg. :thumbup:

    Werde aber trotzdem gekickt, wenn ich den Namen habe.


    Machs so:


    stock const Betatester[][] = { //oben ins Skript
    "Admin","Test"
    };


    new b_name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, b_name, MAX_PLAYER_NAME);
    for(new j; j < sizeof(Betatester); j++)
    {
    if(strcmp(b_name, Betatester[j]) != 0)
    {
    SendClientMessage(playerid, COLOR_ERROR, "Der Server befindet sich in der Betaphase. Du musst eingetragen sein, um zu spielen.");
    return Kick(playerid);
    }
    }

    In einem Timer:


    Wofür brauchst du bitte einen Timer? :huh:


    Man muss die Daten doch nur 1x beim Ausloggen speichern...und da ist es immer wieder die selbe Struktur.


    Und bei Registrieren muss man halt 1x einen Insert Query ausführen und der hat natürlich auch die selbe Struktur.


    Für triviale kleine Querys, brauchst du das natürlich nicht verwenden...


    Mein Gott :rolleyes:

    Du hast das Array mit den Spalten, das macht es im Endeffekt mehr Code. Da jedes Query unterschiedlich ist, muss ich für jedes Query die Spalten neu dort angeben, das macht es eher mehr Code, als weniger.


    Dir sollte bewusst sein, wenn du meinen Text gelesen hast, dass es nur um das Speichern z.B. von Spielerdaten o.ä. geht.


    Und da reicht es 1x die Tabellen Struktur zu deklarieren, somit es es wesentlich weniger Code!


    Auf den ersten Blick sehe ich hier nicht, welches davon richtig ist, und welches falsch ist. Sowas kann schnell passieren und man merkt es nicht. Das bezieht sich auch auf die Wartbarkeit. Ich muss immer hin und her scrollen, zwischen dem rows Array und der Zeile hier, um herauszufinden, dann entweder alter oder money richtig ist. Bei einem Query mit 100 Attributen wird das lustig.


    Dir ist klar, dass es bei dem normalen format nicht anders ist du scherzkeks.


    Zudem kann man sich die Struktur auch dahin als Kommentar schreiben...


    Da sehe ich ganz genau, was zu was gehört.


    Das ist aber langsamer...
    und wie gesagt...die Struktur kann man angeben, das nicht so kompiziert als kommentar...


    Nur weiß das kaum einer.


    Ändert nichts an der Tatsache...


    Queries wird das ziemlich unübersichtlich


    Nun, wenn man es 1x am Anfang richtig gemacht hat...ist es sehr einfach weitere dazuzutun.
    Man muss das halt schritt für schritt machen, aber dafür ist es wesentlich einfacher, neue Sachen leicht hinzuzufügen.


    und ein normales Query in diesem Maße ist noch viel unübersichtlicher...


    Aber wie gesagt..ist jedem selbst überlassen wie er es macht...


    Ein paar Leute wollten so eine Include, also habe ich sie Ihnen zur Verfügung gestellt, ich verstehe dein Problem damit nicht.