Beiträge von Kaliber

    Hallo liebe Brotfische, ich stelle euch nun mal eine kleine, aber evtl nützliche Include vor.


    Also es geht um folgendes, stellt euch vor ihr habt ein Enum:


    enum Hust
    {
    Name[MAX_PLAYER_NAME],
    Level,
    Geld,
    bool:Erstellt,
    Float:p_x,
    Float:p_y
    };


    new pInfo[MAX_PLAYERS][Hust];


    So, dies ist nun ein einfacher Enumerator.


    Man kann über Pawn ja ganz einfach auf die einzelnen Indizes zugreifen: pInfo[playerid][Level] = 1; //usw


    Alles schön und gut.


    Was diese Include bietet ist eine Funktion um die einzelnen Namen im Enum auszulesen:


    const id = 0;
    for(new i; i<GetStruct(id); i++)
    {
    printf("index: %d | Name: %s",i,heap[id][i]);
    }


    /*
    Dieser Code gibt in dem Beispiel also aus:
    index: 0 | Name: Name
    index: 1 | Name: Level
    index: 2 | Name: Geld
    index: 3 | Name: Erstellt
    index: 4 | Name: p_x
    index: 5 | Name: p_y
    */


    Dies bietet neue Möglichkeiten, z.B. beim Debugging oder einfachere Handhabung der Variablen für Speicherungs-Systeme, damit könnte man z.B. das einfach per Schleife alles speichern (mit MySQL).


    Ich wollte es euch einfach mal nur Vorstellen das System, falls es jemand benötigt (habe schon mehrmals gelesen, wo sowas gewünscht wurde).


    Probleme:


    Ihr könnt maximal 8 Indizes in einer Struktur benutzen. Grund dafür ist, dass es maximal nur %0-%9 Unbekannte in einem Makro geben kann.
    Desweiteren, dürfen die Variablen Namen nicht solang sein und ihr solltet keine weiteren Makro-Namen in dem Makro selbst nutzen :D (Also schreibt anstatt MAX_PLAYER_NAME, direkt 24 einfach.)
    Falls ihr zu lange Namen o.ä. verwendet...stürzt euer Compiler ab :S


    Da alles an Makros gebunden ist, muss man leider syntaktisch etwas umdenken.


    //Allgemeine Struktur:
    struct@anzahl_der_Indizes: Enum_Name { a,b,c,d,e,f } (id);


    //Beispiele:
    struct@1: p_INFO { a } (0); //Es gibt 1nen Index und da es die erste Struktur ist (0) am Ende.


    struct@2: p_INFO { pMember,pLeader } (1);


    struct@5: p_INFO { a,b,c,d,e } (2);


    //Weitere Funktionen
    GetStruct(id); //Gibt die Anzahl der Indizes wieder
    //Bei den Strukturen hier z.B.:
    const indizes = GetStruct(2); //würde z.B. hier 5 enthalten


    const id = 1;
    //In dieser Variable sind alle Namen gespeichert
    heap[id][0]; //Das würde ein "pLeader" ausgeben
    heap[id][1]; //das gibt ein "pMember" aus


    //Oben gezeigtes Beispiel sieht also so aus:
    struct@6: Hust { Name[24],Level,Geld,bool:Erstellt,Float:p_x,Float:p_y } (0);


    Es ist leider sehr stark durch Pawn eingegrenzt inwieweit man sowas nutzen kann.
    Ich wollte lediglich mal zeigen, dass es in kleinem Maße funktioniert so etwas zu erstellen.


    Download:
    Source-Code: PasteBin
    Direkter-Download: MediaFire


    Schlusswort:
    Ich würde mich über ein paar Rückmeldungen freuen, falls ihr Verbesserungs-Vorschläge habt oder sonst irgendwas einfach, einfach schreiben :)


    mfg. :thumbup:


    //Edit: Ich hatte das Beispiel angepasst.
    //Edit²: Ich habe das Edit eingefügt.

    Schreibe das mal so:


    COMMAND:handschelle(playerid,params[])
    {
    if(!IsSAPD(playerid)) return SendClientMessage(playerid, Rot, "Du darfst diesen Befehl nicht nutzen!");
    new targetid,string[128], PlayerName[MAX_PLAYER_NAME];
    if(sscanf(params,"us",targetid,string)) return SendClientMessage(playerid,Grau,"Benutze: /freeze [Spieler id] [Grund]");
    if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid,0xFF7800FF, "Spieler Offline");
    TogglePlayerControllable(targetid,0);
    SetPlayerSpecialAction(targetid,24);
    SetPlayerAttachedObject(targetid, 0, 19418, 6, -0.011000, 0.028000, -0.022000, -15.600012, -33.699977, -81.700035, 0.891999, 1.000000, 1.168000);
    GetPlayerName(targetid,PlayerName,MAX_PLAYER_NAME);
    format(string,sizeof(string),"%s wurde festgenommen Grund: %s",PlayerName,string);
    SendClientMessageToAll(Rot,string);
    format(string,sizeof(string),"Du Frierst %s.",PlayerName);
    SendClientMessage(playerid,Rot,string);
    GetPlayerName(playerid,PlayerName,MAX_PLAYER_NAME);
    format(string,sizeof(string)," %s Hat dir Handschellen angelegt",PlayerName);
    SendClientMessage(targetid,Rot,string);
    return 1;
    }


    mfg. :thumbup:

    z.B. Fliegen können


    Es ist nicht alles möglich, aber einiges. Fliegen unter anderem ist möglich.


    Ein Beispiel Skript für einen flymode gibt es als FilterSkript von h02:


    flymode.pwn
    //-------------------------------------------------
    //
    // This is an example of using the AttachCameraToObject function
    // to create a no-clip flying camera.
    //
    // h02 2012
    //
    // SA-MP 0.3e and above
    //
    //-------------------------------------------------

    flymode.pwn
    #include <a_samp>

    flymode.pwn
    // Players Move Speed
    #define MOVE_SPEED 100.0
    #define ACCEL_RATE 0.03

    flymode.pwn
    // Players Mode
    #define CAMERA_MODE_NONE 0
    #define CAMERA_MODE_FLY 1

    flymode.pwn
    // Key state definitions
    #define MOVE_FORWARD 1
    #define MOVE_BACK 2
    #define MOVE_LEFT 3
    #define MOVE_RIGHT 4
    #define MOVE_FORWARD_LEFT 5
    #define MOVE_FORWARD_RIGHT 6
    #define MOVE_BACK_LEFT 7
    #define MOVE_BACK_RIGHT 8

    flymode.pwn
    // Enumeration for storing data about the player
    enum noclipenum
    {
    cameramode,
    flyobject,
    mode,
    lrold,
    udold,
    lastmove,
    Float:accelmul
    }
    new noclipdata[MAX_PLAYERS][noclipenum];

    flymode.pwn
    //--------------------------------------------------

    flymode.pwn
    public OnFilterScriptExit()
    {
    // If any players are still in edit mode, boot them out before the filterscript unloads
    for(new x; x<MAX_PLAYERS; x++)
    {
    if(noclipdata[x][cameramode] == CAMERA_MODE_FLY) CancelFlyMode(x);
    }
    return 1;
    }

    flymode.pwn
    //--------------------------------------------------

    flymode.pwn
    public OnPlayerConnect(playerid)
    {
    // Reset the data belonging to this player slot
    noclipdata[playerid][cameramode] = CAMERA_MODE_NONE;
    noclipdata[playerid][lrold] = 0;
    noclipdata[playerid][udold] = 0;
    noclipdata[playerid][mode] = 0;
    noclipdata[playerid][lastmove] = 0;
    noclipdata[playerid][accelmul] = 0.0;
    return 1;
    }

    flymode.pwn
    //--------------------------------------------------

    flymode.pwn
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/flymode", true))
    {
    // Place the player in and out of edit mode
    if(GetPVarType(playerid, "FlyMode")) CancelFlyMode(playerid);
    else FlyMode(playerid);
    return 1;
    }
    return 0;
    }

    flymode.pwn
    //--------------------------------------------------

    flymode.pwn
    public OnPlayerUpdate(playerid)
    {
    if(noclipdata[playerid][cameramode] == CAMERA_MODE_FLY)
    {
    new keys,ud,lr;
    GetPlayerKeys(playerid,keys,ud,lr);

    flymode.pwn
    if(noclipdata[playerid][mode] && (GetTickCount() - noclipdata[playerid][lastmove] > 100))
    {
    // If the last move was > 100ms ago, process moving the object the players camera is attached to
    MoveCamera(playerid);
    }

    flymode.pwn
    // Is the players current key state different than their last keystate?
    if(noclipdata[playerid][udold] != ud || noclipdata[playerid][lrold] != lr)
    {
    if((noclipdata[playerid][udold] != 0 || noclipdata[playerid][lrold] != 0) && ud == 0 && lr == 0)
    { // All keys have been released, stop the object the camera is attached to and reset the acceleration multiplier
    StopPlayerObject(playerid, noclipdata[playerid][flyobject]);
    noclipdata[playerid][mode] = 0;
    noclipdata[playerid][accelmul] = 0.0;
    }
    else
    { // Indicates a new key has been pressed

    flymode.pwn
    // Get the direction the player wants to move as indicated by the keys
    noclipdata[playerid][mode] = GetMoveDirectionFromKeys(ud, lr);

    flymode.pwn
    // Process moving the object the players camera is attached to
    MoveCamera(playerid);
    }
    }
    noclipdata[playerid][udold] = ud; noclipdata[playerid][lrold] = lr; // Store current keys pressed for comparison next update
    return 0;
    }
    return 1;
    }

    flymode.pwn
    //--------------------------------------------------

    flymode.pwn
    stock GetMoveDirectionFromKeys(ud, lr)
    {
    new direction = 0;

    if(lr < 0)
    {
    if(ud < 0) direction = MOVE_FORWARD_LEFT; // Up & Left key pressed
    else if(ud > 0) direction = MOVE_BACK_LEFT; // Back & Left key pressed
    else direction = MOVE_LEFT; // Left key pressed
    }
    else if(lr > 0) // Right pressed
    {
    if(ud < 0) direction = MOVE_FORWARD_RIGHT; // Up & Right key pressed
    else if(ud > 0) direction = MOVE_BACK_RIGHT; // Back & Right key pressed
    else direction = MOVE_RIGHT; // Right key pressed
    }
    else if(ud < 0) direction = MOVE_FORWARD; // Up key pressed
    else if(ud > 0) direction = MOVE_BACK; // Down key pressed

    return direction;
    }

    flymode.pwn
    //--------------------------------------------------

    flymode.pwn
    stock MoveCamera(playerid)
    {
    new Float:FV[3], Float:CP[3];
    GetPlayerCameraPos(playerid, CP[0], CP[1], CP[2]); // Cameras position in space
    GetPlayerCameraFrontVector(playerid, FV[0], FV[1], FV[2]); // Where the camera is looking at

    flymode.pwn
    // Increases the acceleration multiplier the longer the key is held
    if(noclipdata[playerid][accelmul] <= 1) noclipdata[playerid][accelmul] += ACCEL_RATE;

    flymode.pwn
    // Determine the speed to move the camera based on the acceleration multiplier
    new Float:speed = MOVE_SPEED * noclipdata[playerid][accelmul];

    flymode.pwn
    // Calculate the cameras next position based on their current position and the direction their camera is facing
    new Float:X, Float:Y, Float:Z;
    GetNextCameraPosition(noclipdata[playerid][mode], CP, FV, X, Y, Z);
    MovePlayerObject(playerid, noclipdata[playerid][flyobject], X, Y, Z, speed);

    flymode.pwn
    // Store the last time the camera was moved as now
    noclipdata[playerid][lastmove] = GetTickCount();
    return 1;
    }

    flymode.pwn
    //--------------------------------------------------

    flymode.pwn
    stock GetNextCameraPosition(move_mode, Float:CP[3], Float:FV[3], &Float:X, &Float:Y, &Float:Z)
    {
    // Calculate the cameras next position based on their current position and the direction their camera is facing
    #define OFFSET_X (FV[0]*6000.0)
    #define OFFSET_Y (FV[1]*6000.0)
    #define OFFSET_Z (FV[2]*6000.0)
    switch(move_mode)
    {
    case MOVE_FORWARD:
    {
    X = CP[0]+OFFSET_X;
    Y = CP[1]+OFFSET_Y;
    Z = CP[2]+OFFSET_Z;
    }
    case MOVE_BACK:
    {
    X = CP[0]-OFFSET_X;
    Y = CP[1]-OFFSET_Y;
    Z = CP[2]-OFFSET_Z;
    }
    case MOVE_LEFT:
    {
    X = CP[0]-OFFSET_Y;
    Y = CP[1]+OFFSET_X;
    Z = CP[2];
    }
    case MOVE_RIGHT:
    {
    X = CP[0]+OFFSET_Y;
    Y = CP[1]-OFFSET_X;
    Z = CP[2];
    }
    case MOVE_BACK_LEFT:
    {
    X = CP[0]+(-OFFSET_X - OFFSET_Y);
    Y = CP[1]+(-OFFSET_Y + OFFSET_X);
    Z = CP[2]-OFFSET_Z;
    }
    case MOVE_BACK_RIGHT:
    {
    X = CP[0]+(-OFFSET_X + OFFSET_Y);
    Y = CP[1]+(-OFFSET_Y - OFFSET_X);
    Z = CP[2]-OFFSET_Z;
    }
    case MOVE_FORWARD_LEFT:
    {
    X = CP[0]+(OFFSET_X - OFFSET_Y);
    Y = CP[1]+(OFFSET_Y + OFFSET_X);
    Z = CP[2]+OFFSET_Z;
    }
    case MOVE_FORWARD_RIGHT:
    {
    X = CP[0]+(OFFSET_X + OFFSET_Y);
    Y = CP[1]+(OFFSET_Y - OFFSET_X);
    Z = CP[2]+OFFSET_Z;
    }
    }
    }
    //--------------------------------------------------

    flymode.pwn
    stock CancelFlyMode(playerid)
    {
    DeletePVar(playerid, "FlyMode");
    CancelEdit(playerid);
    TogglePlayerSpectating(playerid, false);

    flymode.pwn
    DestroyPlayerObject(playerid, noclipdata[playerid][flyobject]);
    noclipdata[playerid][cameramode] = CAMERA_MODE_NONE;
    return 1;
    }

    flymode.pwn
    //--------------------------------------------------

    flymode.pwn
    stock FlyMode(playerid)
    {
    // Create an invisible object for the players camera to be attached to
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, X, Y, Z, 0.0, 0.0, 0.0);

    flymode.pwn
    // Place the player in spectating mode so objects will be streamed based on camera location
    TogglePlayerSpectating(playerid, true);
    // Attach the players camera to the created object
    AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);

    flymode.pwn
    SetPVarInt(playerid, "FlyMode", 1);
    noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
    return 1;
    }

    flymode.pwn
    //--------------------------------------------------


    mfg. :thumbup:

    ich hoffe es kann mir einer weiterhelfen.


    Du kannst in einer Funktion nicht Werte übergeben und gleichzeitig setzen.


    Schreib das mal so:


    Gutschein[g][Vorhanden] = 0;
    Gutschein[g][Gutscheintyp] = 1;
    mysql_format(myCon, query, sizeof(query), "INSERT INTO `script_gutscheine` (`Gutscheincode`,`Vorhanden`,`EingeloestName`,`Gutscheintyp`) VALUES ('%d', '0','Niemand', '1')",GutscheinAlle);


    //Edit: Nah..das ist nicht dein einziger Fehler...so kann das mit der Schleife nicht funktionieren :whistling:


    mfg. :thumbup:

    Und vlt. so das man den Pfosten nicht umfahren kann.


    Ich hab mir mal kurz die Zeit genommen, sowas für dich zu erstellen:



    Code dafür
    obj = CreateObject(7246,0,0,4,0,0,0);
    SetObjectMaterial(obj, 0, 16086, "des_refinery", "steel64", 0xFFFFFFFF);
    SetObjectMaterialText(obj, " 506 SZ-Langen 5min\n 510 ZOB 7min", 0, OBJECT_MATERIAL_SIZE_256x128,
    "Arial", 21, 0, 0xFFFFA500, 0xFF000000);


    Hoffe ich konnte dir helfen :)


    mfg. :thumbup:

    Habe mir gerade den Server nochmal angeschaut.


    Also es ist ein Troll - Server :D


    Auf dem Skript ist nur der Login-Screen gemacht und zwar auf unendlich :D Entweder man crasht oder hängt ewig da.


    Durch bestimmtes Anwenden einiger Mods..gelang es mir aber auch so mal einen Blick auf den Server zu schauen...


    Da ist rein gar nichts gemacht, es ist nichteinmal DisableInteriorEnterExits im Skript aktiv, somit ist das alles purer Blödsinn mit den Jobs etc was sie schreiben.


    Also entweder wurde das "falsche Skript" (was ja nicht sein kann wegen dem Login Screen) hochgeladen, oder es ist nur zum Trollen ._.


    Vote 4 Close! :thumbdown:

    Am anfang wird erstmal dein Computer von meinem Testyourpc System getestet.
    Es bringt nichts wenn du dir beim einloggen sofort einen Crash abholst. Oder dir ein Standbild holst.
    Also werden User aussortiert die nicht den Voraussetzungen entsprechen.


    Oh bitte...was ist dass denn für ein Schwachsinn :D


    PS: Wenn man es schafft, nicht zu crashen, läuft der Balken ewig...


    mfg. :rolleyes:

    Vielleicht könnt ihr mir helfen


    Schreib das alles mal so:


    //Als erstes schreibe deine Variable so:
    new Bugs[100][MAX_BUG_LEN]; //MAX_BUG_LEN muss oberhalb definiert sein!


    //Und dann den Code so:
    if(dialogid == DIALOG_BUG_MELDEN)
    {
    if(strlen(inputtext) < 5) return SendClientMessage(playerid, 0xFF0000FF,"Dein Bug-Report ist zu kurz!");
    static b_count;
    if(b_count == sizeof Bugs) return SendClientMessage(playerid, 0xFF0000FF, "ERROR: Es ist leider kein Platz für einen Bug mehr frei!.");
    new string[11];
    format(Bugs[b_count], MAX_BUG_LEN, inputtext);
    SendClientMessage(playerid, 0xFFFFFFFF, "Bug gemeldet. Danke!");
    valstr(string,b_count);
    for(new u=0; u<MAX_PLAYERS; u++) PlayerTextDrawSetString(u,Bugs_2,string);
    SetPVarString(playerid,"Bugmlder",inputtext);
    savebugs(playerid,inputtext);
    b_count++;
    return 1;
    }


    mfg. :thumbup: