Beiträge von Kaliber

    Irgendeine idee?

    Schreibs mal so:



    C
    {
        new org = PlayerInfo[playerid][pOrgMember];
        printf("%d != 0 && %d == 1",org,OrgInfo[org][OrgMech]);
        return (org != 0 && OrgInfo[org][OrgMech] == 1);
    }

    Dann schau mal, was geprintet wird im Server-Log und dann weißt du, was falsch läuft ;)


    PS: Funktionsname entfernt weil angeblich das ein zensiertes Wort ist *roflkopter*

    Gibt es wirklich keine genauere Bezeichnung dazu?

    Naja, kannst ja die Genre von Spielen einfach googeln, dann hast du alle exakt.



    Und bei dem anderen Game steht nur Adventure, General


    Und doch die games sind ähnlich.


    Da man bei den io games auch interaktiv ist um mit der Maus Dingen auszuweichen oder sonstiges.


    Auf was legst du denn genau Wert bei deiner Spiele Suche, wenn es dir um Musik geht, ist das natürlich eine andere Geschichte.

    Empfehle dir folgendes:


    1. Lösche CountDownFromAmount.


    2. Schreib es so:


    SetTimerEx("CountDownTimer2", 997, 0, "i", 10); //10 = Sekunden



    C
    forward CountDownTimer2(countDown);
    public CountDownTimer2(countDown)
    {
        if (--countDown == 0) return GameTextForAll("Mach dich bereit!", 3000, 5);
        new string[32];
        format(string, sizeof(string), "~w~%d Sekunden", countDown);
        GameTextForAll(string, 990, 4);
        SetTimerEx("CountDownTimer2", 997, 0, "i", countDown);
        return 1;
    }

    Dann brauchst du keine Globale Variable und der Timer beendet sich automatisch :)

    Ist es möglich z.B der aktuelle Stand von Bitcoin auszulesen und im Script einzubauen?

    Ja, das ist sehr gut möglich.


    Es gibt schon eine API die dir das zur Verfügung stellt: https://api.coinmarketcap.com/v1/ticker/bitcoin/?convert=EUR


    Und mit der Funktion: https://wiki.sa-mp.com/wiki/HTTP kannst du das einfach abfragen und angeben :)



    Am Ende wuerde ich gerne in einem Dialog alle Spieler auflisten, sortiert absteigend nach den meisten Kills.

    Schreib das mal so:


    Nutze dafür: https://forum.sa-mp.com/showthread.php?t=343172




    Kleine Frage

    Das keine kleine Frage, weil das komplett unverständlich ist, was du eigentlich wissen magst.


    Und so gut wie keiner kennt doch die Funktionen etc was du da verwendest.


    Schreib mir eine PN wenn du doch offensichtlich zu dem Callback Mechanismus von mir fragen hast ^^

    Ja...so könntest du es machen, dann musste einfach wieder das .pwn dranhängen und gut ist.


    Aber es ist halt einfach unsinnig. Du könntest es ja auch .c oder .exe nennen, aber das macht ja keinen Sinn.


    Du verwendest die Direktive #include somit ist faktisch alles was du da angibst, ein Include und nichts anderes.


    Also solltest du .inc verwenden.

    3 Dinge.


    • Nur weil du es .pwn nennst, bleibt es trotzdem ein Include, also nenne es doch einfach korrekt .inc
    • Ich glaube der dude in dem Tutorial hat seinen Code nicht getestet. Denn das #include <bla/x> ist immer ein relativer Pfad von Pawno/includes aus, das was du willst ist #include "bla/x"
    • Egal ob .pwn oder .inc, beides sind Includes, da du sie als solche verwendest. Du musst in keinen Hooking verwenden.

    Alsoo, irgendwo in deinem Gamemode steht:


    #include <server/enums.pwn>


    Also eine Sache dazu, man nennt Includes nicht .pwn, sondern .inc.


    Dementsprechend schreib einfach: #include <server/enums>



    So und nun muss es folgende Datei geben unter Pawno/includes/server/enums.inc.


    Falls dann immer noch der Fehler auftritt liegt es eventuell daran, dass du das falsche Pawno geöffnet hast und er deshalb die Include nicht findet ;)

    sizeof(Donutshop[0][itemName])

    Das kannst du leider nicht machen.


    Die einzige Möglichkeit wäre sizeof(Donutshop[]) oder du nutzt einen direkten Wert :)


    Format ist aber auch sehr langsam und in diesem Beispiel, wird auch kein format benötigt, da könntest du den String direkt setzen.


    Donutshop[0][itemName] = "Donut ohne Füllung";


    oder memcopy bzw strcat. Alles schneller und besser, als format ^^

    Hmm, also hier mal generell Limits: https://wiki.sa-mp.com/wiki/Limits


    Hier z.B. mit der Map (hatte mich geirrt, die SA Map ist von 3000 bis -3000 groß, aber getriggert wird wohl bis 4096)

    Known Bug(s): Pickups that have a X or Y lower than -4096.0 or bigger than 4096.0 won't show up and won't trigger OnPlayerPickUpPickup either.

    Und die höhe der Interiors kannst du an der Z-Koordinate ablesen: http://weedarr.wikidot.com/interior


    Also z.B. -25.884498,-185.868988,1003.546875 da sehen wir, dass die Höhe 1003 SA Meter sind.


    Und alle weiteren sind auch so um ~1000 SA Meter über der Map :)

    1. Es ist nur wichtig, dass sich die Interiors in den Zonen der SA:MP Map befinden. Also von -3000 bis 3000. Und zu weit unter der Map ist schlecht, weil man dann evtl über die Map gesetzt werden kann. Dementsprechend empfehle ich dir in der Luft (so wie das GTA SA auch macht) die Interiors zu mappen. Am Besten so auf einer Höhe von 2000. Weil bei 1000 sind die offline gta interiors.


    2. Es gibt sowas: https://wiki.sa-mp.com/wiki/GameTextStyle


    Das eine sind GameTexts (da ist die Auswahl limitiert, wie du siehst) und das andere sind TextDraws, wo du alles mögliche mit machen kannst. Also das was du vor hast ist definitiv mit TextDraws umsetzbar :)


    Musst mal nach einem TextDraw Creator und Tutorial schauen, da wird dir das alles erklärt :)

    Meiner Meinung nach, ist sowas wie Bcrypt in SA:MP garnicht nötig.
    Z.b. Whirlpool ist schon ziemlich sicher, und wir reden hier ja nur von einem SA:MP Server Passwort. Ich glaube nicht, dass jemand mehrere Monate oder Jahre mein Passwort brute forcet, um dann meine 500.000GTA$ auf sein Konto zu überweisen.

    Es geht hier nicht um SA:MP.


    Das geht ja viel weiter.


    In den meisten Datenbanken steht ja auch noch die Email dieses Nutzer oder der Nickname ist eben eindeutig.


    Es besteht jetzt eine hohe Wahrscheinlichkeit, dass der User dieses Passwort überall verwendet (nicht nur auf dem SA:MP Server).


    Das ist auch der Grund, wieso das so ein Ding im Thread über ReborN ist, es geht hier nicht um einen SA:MP Server, der eh down ist, sondern um die Tatsache, dass es nun möglich wäre die Email Adresse von Nutzern zu knacken oder sogar auf anderen Plattformen wie Facebook/Twitter/Instagram/Breadfish etc zu hacken oder gar zu erpressen.


    Der Punkt ist, dass User-Daten sensible Daten sind und diese mit höchster Sicherheit zu verwahren sind. (In Deutschland gilt ja jetzt die DSGVO, weswegen man sogar juristisch angreifbar wäre).


    Und um ein SHA-256 Passwort zu knacken bedarf es keine Monate. Ohne Salt/Pepper hat man das in Millisekunden dank riesen Rainbow-Tables.
    Mit Salt/Pepper dauert es je nach Rechenleistung aber auch nicht so lange, da diese Hash-Funktionen gut parallelisierbar sind (das heißt je mehr Geräte, desto schneller).


    Und man könnte leicht sich eine bestimmte Person raussuchen und fertig machen.


    Deshalb wirklich bcrypt (da es ja auch gar keinen großen Aufwand darstellt, dies einfach zu nutzen) um sicher zu gehen :)

    cache_get_value_name: field 'name' not found

    Das sagt aus, dass es in deiner Tabelle keine Spalte mit dem Namen "name" gibt :)


    Deshalb kann BizInfo[i][bName] nicht geladen werden.


    Das mit dem cache_get_row_count: no active cache kommt ja erst später.


    Kann es ventuell sein, dass es sich da gar um eine andere Funktion handelt oder dass du das einfach so irgendwo im Code plötzlich verwendest, wo es gar keinen Cache gibt?!


    Das würde das dann erklären ^^