Beiträge von UncleSub

    Ich für meinen Teil finde die Idee auch sehr ansprechend und finde es toll, dass sie umgesetzt wird. Eine ähnliche Idee schwirrte mir auch schon länger im Kopf rum, da ich genauso wie du finde, dass Pawn eher schlecht für ein Spiel wie SA:MP geeignet ist.
    Leider habe ich nur geringe Programmierkenntnisse außerhalb von Pawn, sonst hätte ich gerne bei der Umsetzung geholfen..Aber ich kann ja Ideen einbringen, die nützlich sind. :)


    So finde ich die Tatsache, dass Pawn Non-Threaded ist, wirklich ziemlich lästig. Ich fände es deshalb schön, wenn du das in deiner Server Interpretation mit einbinden könntest.
    Außerdem fände ich als Programmiersprache eine C ähnliche Sprache sehr ansprechend. C++ oder C# wären da meine Favoriten.

    Es wurde ein Threadvon maddin erstellt, in dem sogar eine Antwortmöglichkeit für dein Problem steht.


    Dann meldet euch Bitte im Chat.


    Ich hatte auch ein Problem mit meiner Email, weil die Adresse nicht mehr aktuell war und ich das Passwort vergessen hatte. Im Chat gemeldet und zapp­za­rapp die Email Adresse wurde für mich in die neue geändert. Einen Multi-Account dafür zu erstellen ist schlichtweg unzulässig.
    Wie bei allem gilt auch hier: Wer lesen kann ist klar im Vorteil.

    Dein Script belegt zu viel Memory. Du kannst dies beheben, indem du in dein Script bspw.


    #pragma dynamic <size>


    einfügst. (Size ist der Wert, der dem entsprechendem Teil des Memorys zugewiesen wird) [Du kannst für size erstmal 10000 probieren]


    Was dieser Error genau ist

    Im Memory gibt es verschiedene Bereiche in denen Daten gespeichert werden.
    So werden lokale Variablen im Stack gespeichert und manche lokalen Arrays im Heap. Stack und Heap belegen aber die selbe Stelle im Memory, nur an verschiedenen Enden. Wenn dann zu viel im Stack/Heap ist kommt es zu einer Stack/Heap Kollision.
    Wie oben beschrieben kann man durch #pragma dynamic dem Stack/Heap einen größeren Wert zuweisen.

    Okay soweit nun klar
    Aber wie verwende ich es nun weiter?


    Du kannst den sogenannten Ternary Operator beliebig verwenden. Du kannst darin Funktionen aufrufen, Variablen Setzen, Strings einfügen...
    Du kannst sogar mehrere Abfragen mit dem Ternary Operator ineinander machen. Beispiele findest du unten.


    Hier mal ein paar Beispiele aus dem Englischen Forum:



    Quelle: Klick mich! (Kann ich sowieso nur empfehlen, da dort viele Tipps fürs Ressourcen- und Zeilensparende Scripten sind. )


    Ein Bsp. aus meinem Script:


    rCmd[]->vehiclecontrol(playerid)
    if((Spieler[playerid][pAdmin] < 6) ? SendClientMessage(playerid,COLOR_LIGHTGREY,"Du musst Administrator sein!") : ShowPlayerDialog(playerid,DIALOG_VEHICLECONTROL,DIALOG_STYLE_LIST,"Vehicle Kontrolle","Fahrzeug Kontrolle\nAdminvehicle erstellen\nFraktionsvehicle erstellen\nPrivatvehicle erstellen\nJobvehicle erstellen","Bestätigen","Abbrechen")){}


    da man das auch für andere
    Zwecke gebrauchen kann, zB einen Integer zu einem Bool "umzuwandeln", und da kenne ich keine bessere
    Methode.


    Man kann mich aber ruhig des besseren belehren


    Siehe hier:



    new integer = 100;
    new bool:boolean = !!integer;

    Alle schreiben Hitman, da diese Fraktion an das Spiel namens "Hitman" (oder halt der Film, der entstand aber nach dem Spiel) angelehnt ist.
    Der Titel ist Hitman, daher stammt der Name. Hat im Prinzip nichts so wirklich mit der Englischen Sprache zu tun.
    Sobald du aber von mehreren Hitman redest, solltest du Hitmen sagen. Das wäre dann grammatikalisch Korrekt.


    Leider hat Rolf_Mueller: danach gefragt, wie er abfragt, ob der Spieler Fahrer ist und nicht, ob es ihm gehört.


    if (GetPlayerState(playerid)== PLAYER_STATE_DRIVER)


    Wird nicht funktionieren, da das Callback aufgerufen wird, wenn der Spieler gerade am einsteigen ist und nicht, wenn er drin sitzt.


    Die Lösung ist eigentlich ganz einfach:
    Das Callback OnPlayerEnterVehicle liefert direkt ein Parameter mit, mit dem du bestimmen kannst, ob der Spieler als Beifahrer einsteigt. Also wenn er kein Beifahrer ist, ist er Fahrer. Das musst du abfragen.


    if(!ispassenger){
    //Spieler ist Fahrer
    }

    Wieso unnötig, find ich übersichtlicher wie tausend formats wenn ich beispielsweise die Fraktion ausgeben lassen will Danke.


    Es ist nicht nur übersichtlicher, sondern auch schneller als format. Außerdem kannst du auch um Ressourcen zu sparen folgendes machen:


    new str[] = "Ich bin ein String.";


    Der String hat automatisch die Länge des Textes.

    Kann man alles in der SA:MP Wiki nachlesen. Siehe hier.


    Zitat von Wiki


    How to check for a key being released


    Exactly the same principle as above, but reversed:
    if ((oldkeys & KEY_FIRE) && !(newkeys & KEY_FIRE))


    Ich hoffe ich konnte helfen..

    Während ich mein Kaugummi kaute und Chips aß und Cola trank, war ich mit meinem Linux Computer auf Breadfish. Plötzlich platze mein wütender Arbeitgeber herein und sah dies, sofort gab es Ärger. Mutig schnappte ich mir darauf ein Buch und las dieses. Ich merkte, dass das Lesen auch Spaß machen kann.

    Auch mal was kleines von mir:



    #define SetPlayerPosA(%0,%1,%2,%3,%4) SetPlayerPos(%0,%1,%2,%3); SetPlayerFacingAngle(%0,%4); SetCameraBehindPlayer(%0)
    #define GetPlayerPosA(%0,%1,%2,%3,%4) GetPlayerPos(%0,%1,%2,%3); GetPlayerFacingAngle(%0,%4)
    #define GetVehiclePosA(%0,%1,%2,%3,%4) GetVehiclePos(%0,%1,%2,%3); GetVehicleZAngle(%0,%4)
    #define SetVehiclePosA(%0,%1,%2,%3,%4) SetVehiclePos(%0,%1,%2,%3); SetVehicleZAngle(%0,%4)


    Diese Funktionen sind wirklich sehr klein, sparen aber irgendwann viel Platz und Tipparbeit.


    So funktioniert es:



    new Float:pos[4];
    GetPlayerPosA(playerid, pos[0], pos[1], pos[2], pos[3]);
    SetPlayerPosA(playerid, pos[0], pos[1], pos[2], pos[3]+10);


    GetVehiclePosA und SetVehiclePosA funktionieren analog dazu.

    GPCI liest die Hardware ID(255 Zeichen) aus.
    Es geht auch per dini, präziser mit dini_Isset(...).


    Immer noch keine Hardware ID, sondern ein Hash aus dem Installationspfad von GTA.


    Und wie heißt diese Funktion genau, um sie auszulesen?
    Ich glaub die frage hat er auch


    Du musst in das Script folgendes einfügen:


    native gpci (playerid, serial [], len);


    Und dann einfach folgendes machen:



    new gpcistr[129];
    gpci(playerid, gpcistr, 128);

    Ja ich weiß dieser Serial ist der Aktivierungsschlüssel von deinem Win.


    Nein. Das ist ein Hash von dem Installationspfad von GTA. Ich würde es nicht alleine zum Bannen nutzen, da du unschuldige Leute bannen könntest.