Beiträge von IPrototypeI

    wie schon bereits erwaehnt machst du es dir am leichtesten so zu arbeite. dazu kannst du das mysql r7 plugin verwenden oder die sqlite include von slice um dazu noch die beste performance raus zu holen das was du benoetigst ist nur eine tabelle mit dem namen und den kills da musst du nur die kills jeweils updaten und das auch wieder auslesen sortiert dazu hat es ein beispielcode im codeschnipsel bereich nur mit racezeiten.


    um nochmal auf das thema umzusteige das ganze noch file basierend zu mache. brauchst du nur die namen der ganzen accounts


    Ein Codeschnipsel dazu gibt es nicht. Du hast dazu mehrere Möglichkeit dies zu tun
    1. Du speicherst das ganze seperat via MySQL und kannst die besten 5 sortiert per SQL Befehl auslesen ( einfachste Methode)
    2. Du speicherst die ganzen daten wieder extra ab in einem file jedoch sollte man darauf achten das man je nach veränderung die Daten in dem file durchgeht und doppelte ergebnisse entfernt
    also den spieler vom Namen her.


    _________________
    Das ganze über das File wo die daten der spieler gespeichert sind zu machen ist unmöglich wenn du nicht von ihrgend wo her die Namen bekommst.


    Wenn ich du wäre würde ich hier zu MySQL oder SQLite greifen.

    Ja ein wenig schon nun gut der jeweilige parameter


    vielen Dank für die Erklärung.


    Wieso schreibst du dafür nicht ein Scriptbeispiel / Tutorial? Ich denke, das können sicher einige Leute benutzen

    Kein Problem ich bezieh das mal in betracht ob ich ein Tutorial zur Berechnungen in Samp oder über das Thema eins erstelle jedoch hab ich generel erstmal mal gedacht ein richtiges MySQL Tutorial zu verfassen von A - Z und wenn man sich das Tutorial zu meinem Zollsystem anschaut wird das sehr ausführlich gestaltet sein.

    Ja ein wenig schon nun gut der jeweilige parameter MAX_Z ist eigentlich unnötig
    damit kannst du die höhe begrenzen also Flugzeuge könntest du damit auch blitzen solltest du das hoch genug einstellen.



    stock Check_If_Point_In_Triangle(playerid,Float:X,Float:Y,Float:Z,Float:R,Float:MAX_Z)


    playerid ist klar die spielerid
    X = X koordinate von deinem blitzer
    Y = Y koordinate von deinem blitzer
    Z = Z koordinate von deinem blitzer
    R = Rotation von deinem blitzer kannst den beispiel befehl dazu benutzen da werden zusätzlich zwei blitzer erstellt damit das dreieck klar wird
    du kannst das ganze also die größe des dreieckes durch die konstanten bestimmen



    new const Float:Winkel = 60.0;
    new const Float:Weite = 30.0;


    xD unterrichten tu ich nicht als Lehrer ich helfe nur gelegentlich Leuten bei der Problembewältigung mancher Aufgaben, aber zum Studium ist es noch ein längerer Weg erstmal die 3 Jahre WG fertig machen.

    Dreh doch einfach den spieß um
    stock Encrypt(tstring[])
    {
    new x, j = strlen(tstring);
    for(; x < j; ++x){
    tstring[x] += (3^x) * (x % 15);
    if(tstring[x] > (0xff))tstring[x] -= 256;
    }
    return 1;
    }
    stock Decrypt(tstring[])
    {
    new x, j = strlen(tstring);
    for(; x < j; ++x){
    tstring[x] -= (3^x) * (x % 15);
    if(tstring[x] < (0xff))tstring[x] += 256;
    }
    return 1;
    }


    Sollte gehen also die zeichen des ASCII code werden ohne probleme wieder decrypted

    Bevor du überhaupt richtig mit MySQL arbeiten kannst solltest du dir paar tutorials dazu anschauen oder dich mal so durchlesen was
    http://dev.mysql.com/doc/refman/5.1/de/ angeht


    Achja stimmt ja wieder dazu muss man ja lesen können ! Was du ja anscheinend mit deinem copy paste nicht kannst.
    Da solltest du wohl eher hier anfangen

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Mysql Query


    Ich hab dir mal was kleines gebastelt


    stock Check_If_Point_In_Triangle(playerid,Float:X,Float:Y,Float:Z,Float:R,Float:MAX_Z)
    {
    new const Float:Winkel = 60.0;
    new const Float:Weite = 30.0;
    new Float:Pos[8];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    Pos[4] = Y+(Weite*floatsin(Winkel+R,degrees));
    Pos[5] = Y-(Weite*floatsin(R-Winkel,degrees));
    Pos[6] = X+(Weite*floatcos(Winkel+R,degrees));
    Pos[7] = X-(Weite*floatcos(R-Winkel,degrees));
    return (((Y-Pos[4])*(Pos[0]-X) + (Pos[6]-X)*(Pos[1]-Y)) <0 ||((Pos[4]-Pos[5])*(Pos[0]-Pos[6]) + (Pos[7]-Pos[6])*(Pos[1]-Pos[4])) <0 ||((Pos[5]-Y)*(Pos[0]-Pos[7]) + (X-Pos[7])*(Pos[1]-Pos[5])) <0 || Pos[2] > MAX_Z || Pos[2] < Z) ? 0:1;
    }


    damit kannst du jeweilig abprüfen ob der spieler von einem gewissen punkt in einem dreieck steht


    und um das ganze selbst zu testen da ich mal davon ausgehe das du dir bestimmt nicht vorstellen kannst was genau die berechnung macht und wie es benutzt wird
    noch ein beispiel code
    new Float:Array[4];
    if(!strcmp("/test",cmdtext)){
    new const Float:Winkel = 60.0;
    new const Float:Weite = 30.0;
    GetPlayerPos(playerid,Array[0],Array[1],Array[2]);
    GetPlayerFacingAngle(playerid,Array[3]);
    CreateObject(18880,Array[0],Array[1],Array[2]-1.0,0.0,0.0,Array[3]-180);
    CreateObject(18880,Array[0]+(Weite*floatcos(Winkel+Array[3],degrees)),Array[1]+(Weite*floatsin(Winkel+Array[3],degrees)),Array[2]-1.0,0.0,0.0,Array[3]+180);
    CreateObject(18880,Array[0]-(Weite*floatcos(Array[3]-Winkel,degrees)),Array[1]-(Weite*floatsin(Array[3]-Winkel,degrees)),Array[2]-1.0,0.0,0.0,Array[3]+180);
    return 1;
    }else if(!strcmp("/set",cmdtext)){
    new str_1[30];
    format(str_1,30,"Du bist %s",(Check_If_Point_In_Triangle(playerid,Array[0],Array[1],Array[2]-1.0,Array[3],20.0))?("drinnen"):("drausen"));
    SendClientMessage(playerid,-1,str_1);
    return 1;
    }


    Es kann gut sein das es vllt kürzer geht aber ein anderer weg ist mir beim durchgehen nicht eingefallen als das über die winkelfunktionen zu machen
    falls einer einen einfacheren weg hätte könnte er ihn ja auch drunter posten.


    //edit
    was du auch machen könntest wäre die Zonen per Streamer Plugin zu erstellen mit der Funktion
    CreateDynamicPolygon(Float:points[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = sizeof points, worldid = -1, interiorid = -1, playerid = -1);


    das wär wohl doch das einfachste

    Willst du alle daten auslesen oder nur das Level
    bei allen daten musst du es splitten und `Level` durch * ersetzen das hat die auswirkung das alle Daten in der Spalte als string ausgelesen werden.


    Zu dem empfehle ich dir
    mysql_free_result();
    noch zu benutzen sonst arbeitet sich das ganze zu einem memoryleak vor und dein server wird ihrgend wan abkratzen.
    In wie fern lädt er das ganze nicht wird nix zugewiesen das liegt daran das du den inhalt welche ausgelesen wird nicht
    konvertiert wird beziheungsweise zugeordnet.


    das könntest du auch wenn es nur ums level geht
    mysql_fetch_int();
    benutzen
    SpielerInfo[playerid][pLevel] = mysql_fetch_int();


    Ich finde die vorstellung dieses Plugin von dir garnicht so schlecht
    nur solltest du bedenken das Pawn nicht darauf ausgelegt ist.
    Das bedeutet jetzt jedoch nicht das PAWN nicht multithreadfähig wäre sondern
    es ist einfach nicht threadsicher.
    Warum Pawn generel nicht multithreadfähig ist liegt daran das nur ein Stack also auch ein Parametersatz genutzt wird
    die Auswirkung eines zweiten Threads wäre das er auf den ersten Stack zurück hreifen würde und dieses zerstört.


    Um jedoch trotzdem einen weg zu finden zur Multithreadfähigkeit ist die verwendung dieses plugins
    http://forum.sa-mp.com/showthread.php?t=108781
    Damit hat man die möglichkeit Plugins zu schreiben womit man Natives als auch Callbacks multithreadfähig nutzen kann.

    Das ist ein Showroom, wo jeder User, egal ob er noch Anfänger oder Profi ist, Sachen veröffentlichen kann.
    Also es ist seine Entscheidung, ob er sein Thema löscht oder nicht.


    Verbesserungsvorschläge etc. hin oder Herr ihr könnt sie Preisgeben/Posten etc. aber, ob er sie übernimmt etc. ist seine Entscheidung.
    Ihr müsst es ja nicht nutzen.

    Da magst du recht haben jedoch sollte man auch etwas produktives posten meiner Meinung nach oder wenigstens etwas was vom code ansehlich ist.
    Da die Werke die man veröffentlicht auch die Fähigkeiten wiederspiegelt und für was sonst gibt es den Bereich Codeschnipsel gerade darum um klein Codes die
    man veröffentlichen will der öffentlichkeit mitzuteilen und keine nutzlosen Threads zu eröffnen.
    Um nochmal das Thema Verbesserungsvorschläge anzusprechen das war nur noch eine Ergänzung was er machen hätte können, wenn er die weiteren Verbesserungsvorschläge oben angenommen hätte.

    Autos getunt spawnen lassen:
    new vid = AddStaticVehicleEx(...);
    AddVehicleComponent(vid, ...)
    Wiki: http://wiki.sa-mp.com/wiki/AddVehicleComponent


    Was das "Unzerstörbarmachen" angeht:
    Setzt nen Timer und setz das leben des Fahrzeuges wieder auf 1000 ;)


    Ein extra timer wäre nicht mal nötig dazu kann man auch ganz einfach über
    OnUnoccupiedVehicleUpdate machen jedoch zum reparieren solltest du beachten das du mit SetVehicleHealth das leben setzt
    also der äußereschaden bleibt bestehen und nur mit
    RepairVehicle kann man den äußeren schaden reparieren.


    Oder du benutz
    SetVehicleHealth(vehicleid,Float:0x7F800000);


    Dann brauchst du kein Timer

    Die Umsetzung als auch der Umfang ist mehr als nur schlecht das hätte man ganz einfach per defines lösen können so müsste man nicht extra eine funktion
    aufrufen was dazu hin mehr zeit benötigt.


    Am besten löscht du den Thread dann kannst du das ganze im bereich Codeschnipsel posten oder schreibst das neu oder lässt es ganz bleiben.

    Wenn der Spieler auf dem Desktop ist hört OnPlayerUpdate was für die synchronisation des spielers zuständig ist auf sich aufzurufen für dne jeweiligen spieler.
    Daher kann man das ganze via extra Timer abprüfen und einer variabel.

    Wann ist denn das Release Datum von SAMP Extension? Falls diese Frage schonmal gestellt wurde, Sorry, jedoch, wird es auch auf XP kompatibel sein? ^^


    Ja für Windows XP ist es kompatibel mit dem Release Datum wird es noch etwas dauern dies ist ein auf Freizeit basierendes Projekt und ja es wird auch dran weiter gearbeitet.

    3 Tage das glaubst du doch selbst nicht du machst schon an dem gamemode rum seit du mich in skype geaddet hast und das ist schon etwas länger her dort sind immer noch sogar paar kleine codeelemente enthalten von mir
    Beispiel
    mysql_fetch_row_format(text);
    sscanf(text,"p<|>is[64]s[20]",SpielerInfo[playerid][pBanned],SpielerInfo[playerid][pBanngrund],SpielerInfo[playerid][pBanner]);


    Naja was soll man groß dazu sagen für einen anfänger gehts es wäre schon wenn du mit dem puren querys und SQL Befehlen arbeiten würdest wie richtige Männer.
    Zu dem hättest du die spielervariabeln reseten können via for-schleife.

    Warum überhaupt die fahrzeuge löschen und neu erstellen beim respawn solang das fahrzeug in der ursprünglichen position erstellt wurde wo es auch respawen
    soll so wird das auto auch wieder richtig danach gespawnt daher kann man auch das SetVehicleToRespawn.


    Was sinn macht ist das Auto nochmal neu zuerstellen beim parken.

    Du kannst es bei OnGameModeInit rein packen dort lässt du dir erstmals nur die id ausgeben wie schon erwähnt sollte -1 ausgegeben werden ist die funktion nicht "vorhanden".


    //edit


    Es wäre vllt noch gut zu erwähnen das du die filterskripts in der server.cfg davor eingetragen haben musst

    Mit diesem code hat man die möglichkeit eine funktion mit einem argument aufzurufen.
    new pointer; dient nur als ablage der jeweiligen werte die in den cpu registrieren abgeändert wird.
    Daher sind befehle via emit schneller und verbrauchen weniger memory.
    Hier hier wird mit Opcodes gearbeitet, was zuletzt ausgeführt wird mit den letzen 5 Zeilen abgesehen von Stack damit erhöht man nur diesen sonst meckert die console. Da der befehl #emit CALL entfernt wurde dies bringt den server zum crashen wurde glaub ich aufgrund von sicherheitsgründen entfernt.


    Sowas ist halt hardcoding. Schau erstmal ob funcidx was zurück gibt oder hast #pragma dynamic 0 in deinem skript stehen

    Das filterskript sollte auch geladen sein du kannst ja mal probieren ob du mit funcidx was zurück bekommst.
    Aber normal sollte sowas über CallRemoteFunction funktionieren.



    new pointer, idx = funcidx("OnPlayerSpawn2");
    #emit LCTRL 0x1
    #emit NEG
    #emit ADD.C 0x20
    #emit STOR.S.pri pointer
    #emit LREF.S.alt pointer
    #emit LCTRL 0x1
    #emit NEG
    #emit ADD
    #emit LOAD.S.alt idx
    #emit SHL.C.alt 0x3
    #emit ADD
    #emit STOR.S.pri pointer
    #emit LREF.S.pri pointer
    #emit STOR.S.pri pointer
    #emit PUSH.S playerid
    #emit PUSH.C 0x8
    #emit LCTRL 0x6
    #emit ADD.C 0x1C
    #emit PUSH.pri
    #emit LOAD.S.pri pointer
    #emit SCTRL 0x6
    #emit STACK 0x10


    letzte Methode was man noch machen kann ist via emit


    //edit der code funktioniert auch nicht wenn funcidx -1 zurück gibt

    Der Fehler 1045 sagt aus das entweder das passwort falsch ist oder der benutzername er kann nicht zur datenbank verbinden.


    http://www.fromdual.ch/mysql-e…es-and-messages-1000-1049


    Sollte es daran legen das er keine Verbindungaufbaut washier sehr komisch aussieht da er ja anscheinend die Daten updaten würde ich sagen es liegt an dem .
    Aber ich geh mal davon aus das er ihrgend was überspringt oder nicht ausführt da sollten die daten vom vorgänger noch vorhanden sein liegt das daran
    das zum einen die Spielervariabeln nicht reseten wurden oder er ließt die Daten von dem vorgänger account aus.
    kannst ja dennoch mal debuggen.