Beiträge von IPrototypeI

    Dafür brauchst du ein Spielerarray oder du erweiterst dein enum welches SInfo als index dient um einen variable.
    so kannst du diese abfragen mit einer if abfrage in der funktion ob die variable den wert 1 hat oder 0 . Sollte sie zum beispiel den wert 1 haben so führst du den code von aoffd was nach der abfrage kommt ob der spieler ein admin ist oder nicht

    Normal machst du das bei OnPlayerSpawn mit der Funktion SetPlayerSkin, jedoch geht aus dem Code den du gepostet hast nicht das Callback hervor, welches du hier nutzt.

    Naja mit den Plugins, ich wusste nicht so wirklich nach was ich suchen soll..


    och kom schon ^^


    Hier sind 303 Plugins releast mit Source, man brauchst sich nur die Funktionsparameter der Funktionen anschauen und überlegen ob hier etwas zurück gegeben
    oder was gesetzt wird, danach kannst im Source nach der Funktion suchen.


    Bei manchen Projekten kannst du dir den Source auch auf Github anschauen.


    http://forum.sa-mp.com/forumdisplay.php?f=18


    Es gibt paar Tutorials dazu nur frage ich mich wie du das genau meinst mit dne Funktionen, meist du das nutzen von Samp Funktionen, dazu gibt es ja
    Samp GDK
    https://github.com/Zeex/sampgdk


    http://forum.sa-mp.com/showthread.php?t=295798
    http://forum.sa-mp.com/showthread.php?t=253436


    Wenn du jetzt neue Funktionen implementieren möchtest, wie zum Beispiel bei diesem Plugin benötigst du Kenntnisse im reversen von Adressen.
    http://forum.sa-mp.com/showthread.php?t=513499


    //edit wenn das dir nicht weiter geholfen hat , beschreib doch einfach mal was du genau machen möchtest

    Du bist witzig..ich find die selber nicht und ich hab dir oben sogar alles mit mysql gepostet :|


    Das Problem ist das du den Primärschlüssel deiner Userdatenbank (hier die 220) nicht ausließt.
    Am besten wäre es wenn du einfach dein enum für das Array SpielerInfo um eine variabel erweiterst.


    enum pInfo
    {
    pID, <== Hier ergänzen
    pName[MAX_PLAYER_NAME],
    pLevel,
    pGeld,
    pKills,
    ....
    }


    Dann kannst du den Primärschlüssel noch auslesen, beim laden der Spielerdaten.
    SpielerInfo[playerid][pID] = mysql_GetInt("accounts", "id", "Name", SpielerInfo[playerid][pName]);



    Nun kannst du bei deinem Insert-query das ganze so verwenden und hast nun den Primärschlüssel als Fremdschlüssel in diesem Eintrag.


    format(query,sizeof(query),"INSERT INTO autos (besitzer,x,y,z,r,model) VALUES ('%i','%f','%f','%f','%f','%i')",SpielerInfo[playerid][pID],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);



    Das ganze geht natürlich noch kürzer nur musst du dafür wissen was ein Join ist und wie man über mehrere Tabellen hinweg arbeitet.

    @Nova_:
    Wenn ich dir schon über Skype helfe dann nimm bitte das von @|Prototype|: und mir an.
    Benutz das R5 Plugin + Die Linux version die du hier finden kannst: klick mich


    Naja er kann auch die R8 Version nutzen nur muss er sein Skript umschreiben.
    Aber da würde ich schon die neuste verwenden falls er es umschreiben möchte die R39 Version.

    Mensch Leute, er verwendet das Falsche Plugin darin liegt das Problem die R8 Version verwendet andere natives als die älteren als R5 oder R6.
    Da jedoch dein Skript nicht auf dem R8 oder höher basiert werden natives aufgerufen, welche nicht existiert somit bekommst du den runtime Error.


    Daher nutz die älteren Versionen R5 oder R6
    Download:
    http://forum.sa-mp.com/showthread.php?t=56564



    //edit


    Dort oben in der Include steht ja auch nochmal für, welches Plugin die Include ist


    Zitat

    SA-MP MySQL plugin R5

    Also ich glaub das sich da eher keiner finden lässt und du etwas bezahlen musst um die Plugins bei jemanden Entwickeln zu lassen, da Plugins für Bukkit/Spigot zu schreiben nicht gerade so einfach ist. Sonst könnte es ja jeder. Du musst zum einen Java beherrschen und zum anderen die Methoden und ihre Anwendung kennen (Die Dokumentaion ist recht scheiße). Das blöde ist hier das es nicht gerade wenig Methoden gibt.


    Jedoch stirbt die Hoffnung zuletzt :D.

    Ich finde es gut das du solch ein Tutorial machst zwar ist es noch ausbaufähig.


    Jedoch mach ich noch paar Anmerkungen/Informationen:


    • Manche haben das Problem mit gewissen .dll`s (msvcp110.dll, msvcr110.dll etc...), diese muss kann man downloaden und in den Samp-Server-Ordner verschieben oder ganz einfach microsoft visual c++ redistributable updaten.
    • Ebenso kannst du noch ein Beispiel hinzunehmen wie man einen String ausließt das wissen auch nicht die meisten.
    • cache_get_data(num_rows, num_fields); kann man nutzen jedoch gibt es schon lange cache_get_field_count(); was um einiges effizenter ist.#
    • Nutze mysql_pquery anstelle von mysql_tquery da dieses um einiges schneller ist.
    • Zusätzlich kannst du bei mysql_connect die Anzahl der maximalen Verbindungen als Threads einstellen.

    Es gibt im Englischen Forum auch paar releaste Skripts, welche auf C++ basieren.


    http://forum.sa-mp.com/showthread.php?t=465909
    http://forum.sa-mp.com/showthread.php?t=502584
    http://forum.sa-mp.com/showthread.php?t=490143


    123marvin123 Ich finde es irgendwie lustig, wie du die leute dazu bekehren möchtest die Java Api zu nutzen
    im großen und ganzen keine schlechte Idee und bietet weitaus mehr Möglichkeiten als PAWN. Nur sind die standart implementieren Funktionen bei weitem schneller als die ,welche über die Api ausgeführt werden und die Performance kann man durch den JIT Kompiler nochmals um einiges erhöhen ^^.

    IPrototypeI:
    Das mit dem Native weiß ich ja, ich wöllte nur wissen wie ich in c++ dann damit weiter arbeite da ich nicht so wirklich was gefunden habe dazu.
    Und wie ich string dann wieder am gm weitergebe. könntest du mir da ein kleines beispiel schreiben? :)



    Kannst ja mal das ganze Testen sollte normal so funktionieren



    char *SaveString; //globale Variable



    //native SetString(string[]);
    static cell AMX_NATIVE_CALL SetString( AMX* amx, cell* params )
    {
    amx_StrParam(amx, params[1], SaveString);
    return 1;
    }



    //native GetString(string[], len = sizeof(string));
    static cell AMX_NATIVE_CALL GetString( AMX* amx, cell* params )
    {
    cell *dest = NULL;
    amx_GetAddr(amx, params[1], &dest);
    amx_SetString ( dest, SaveString, 0, 0, params[2]);
    return 1;
    }


    //edit mal so nebensächlich du kannst auch mal bestehende Plugins auseinander nehmen und versuchen diese zu verstehen

    Wie kann man pickups per "Enter" aktivierbar machen ?

    Wie ist das zu verstehen? Das du zum Beispiel in ein Interior geportet wird.
    Dazu benötigst du das Callback OnPlayerKeyStateChange


    http://wiki.sa-mp.com/wiki/OnPlayerKeyStateChange


    Wenn der Spieler jetzt enter drückt musst du die Positionen abgleichen, welche du ein einem Array hast
    static const Float:PickupsCps[][6] = {
    {0.0,0.0,0.0,16.0,15.0,522.0}},
    {16.0,15.0,522.0,0.0,0.0,0.0},
    }



    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if (newkeys & KEY_SECONDARY_ATTACK )
    {
    for(new i; i != sizeof(PickupsCps); ++i)
    {
    if(IsPlayerInRangeOfPoint(playerid,3.0,PickupsCps[0],PickupsCps[1],PickupsCps[2])return SetPlayerPos(playerid,PickupsCps[3],PickupsCps[4],PickupsCps[5]);
    }
    }
    return 1;
    }
    Die Tasten findest du hier
    http://wiki.sa-mp.com/wiki/Keys


    Mal ne Frage,
    Wenn ich ein plugin schreibe, und z.B. einen String an das Plugin übergebe und dort verändere,
    wie kann ich dann den String vom Plugin wieder an den Gamemode zurück geben?

    Indem du den String als Funktionsparameter zurück gibst dazu musst du amx_GetAddr + amx_SetString nutzen.


    was ist gemeint :
    native GetString(string[]);


    Hätte hier jemand eine kleine Erklärung dazu?

    Mit parallel ist gemeint das die Daten gleichzeitig verarbeitet werden sowas wird auch threaded genannt.
    Nun zum Unterschied zwischen mysql_tquery und mysql_pquery laut dem wiki Eintrag soll mysql_pquery multi-threaded sein.
    Es ist etwas verwirrent in den älteren Versionen war es so das mysql_tquery für threaded-queries genutzen wurde und mysql_function_query für
    nicht threaded queries.


    Wenn du auf die Github seute schaust wirst du schon die R39 Version finden
    https://github.com/pBlueG/SA-MP-MySQL/releases

    Kannst du das ausführlicher erklären bitte :s ?


    Also der Grund, wieso das Ganze nicht eingestreamt wird liegt darin, dass der Spieler mindestens 1 mal gespawnt werden muss.
    Jedoch gibt es eine Funktionen mit dem Namen Streamer_UpdateEx, mit der du die Objekte in einem Feld für den Spieler streamen lassen kannst.


    Syntax
    Streamer_UpdateEx(playerid, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1);


    siehe auch :
    http://forum.sa-mp.com/showthread.php?t=102865



    Verwendungsbeispiel:



    public OnPlayerRequestClass(playerid, classid)
    {
    Streamer_UpdateEx(playerid,1117.58594, -1490.00781, 32.71875);
    TogglePlayerSpectating(playerid,false);
    SetPlayerPos(playerid,1126.8378, -1386.0857, 46.8765);
    SetPlayerCameraPos(playerid, 1126.8378, -1386.0857, 46.8765);
    SetPlayerCameraLookAt(playerid, 1123.0604, -1427.7638, 34.2935);
    return 1;
    }

    Ich hab schon verstanden was er meint...genau das meine ich auch :rolleyes:


    Was Winston_Churchill hier meint ist das du einfach die funktionen hookst also GivePlayerMoney, GetPlayerMoney und eventuell
    ResetPlayerMoney und über GetPlayerMoney einfach abfrägst ob das geld der variabel entspricht.
    Was du zusätzlich dazu machen musst ist dem spieler im paintspray und in der tunning garage den wert der serverseitigen variabel zu setzen
    entweder du passt den wert einfach an unter OnEnterExitModShop oder direkt bei OnVehicleMod und bei den paint'n sprays da kannst du zonen erstellen über das Streamer Plugin