Beiträge von Kaliber

    Suchfunktionen sind was feines:


    Quelle: http://forum.sa-mp.com/showthread.php?t=127404&langid=5

    Das kommt darauf an, was denn passieren soll...


    Natürlich kann er spawnen, aber unter OnPlayerSpawn kannste ja z.B. abfragen:


    C
    if(GetPlayerTeam(playerid) == 255) //Team 255 bedeutet, dass er in keinem Team ist (bzw hier landet er, falls es voll ist).
    {
        SetPlayerPos(playerid,...); //Hier kannste ihn irgendwo auf die Map setzen..halt dahin, was passieren soll, falls das Team voll ist mit der Person
        //Kannst ihn natürlich auch in einen Spectate Modus oder so hier versetzen :)
    }

    Kannst das einfach so machen:


    Wenn es dir um das löschen geht, kannst du alternativ auch einfach so eine Funktion machen:


    Dann löschst du automatisch das Geschenk, welches dir am nähsten ist (vorausgesetzt es ist mind. 15m in deiner Nähe).



    stock getClosestGift(playerid)
    {
    new id = -1;
    for(new i,Float:tmp,Float:max=15.0; i<MaxGifts; i++)
    {
    tmp = GetPlayerDistanceFromPoint(playerid, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]);
    if(tmp < max) max=tmp,id=i;
    }
    return i;
    }


    //Benutzung:
    new i = getClosestGift(playerid);
    if(i == -1 || !GiftBox[i][e_x]) return SendClientMessage(playerid,-1,"Kein Geschenk in deiner Nähe!");
    DestroyDynamicObject(GiftBox[i][e_GiftID]);
    //Und dann halt der Rest

    Mit der Funktion bekommst du den Slot:


    stock getSlotOut(const string[])
    {
    new p = strfind(string," ");
    if(p == -1) return -1;
    new p2 = strfind(string," ",false,p+1);
    if(p2 == -1) return -1;
    new id[11];
    strmid(id,string,p,p2,sizeof(id));
    return strval(id);
    }
    //und dann der code so:
    case DIALOG_IMOBEL:
    {
    if(!response) return 1;
    new id = getSlotOut(inputtext),string[11];
    if(id == -1) return SendClientMessage(playerid,-1,"Fehler"); //Sollte eig nie vorkommen!
    mobelidVar[playerid] = mobelid;
    format(string,sizeof(string),"%d",id);
    SendClientMessage(playerid,-1,string);
    ShowPlayerDialog(playerid,DIALOG_IMOBEL2,DIALOG_STYLE_LIST,"Möbelstück","Entfernen\nAuswählen","Weiter","Abbruch");
    return 1;
    }

    Es gibt so etwas, das nennt sich DEBUG.


    Wenn du ca weißt (und das tust du), wann der Fehler auftritt bzw was du tust damit der Fehler auftritt...setze ein Print rein und dann weißte wo im Code die falsche Stelle ist...ist nicht allzu kompliziert..

    Wenn du z.B. in einem Command /test Hallo 5 eingibst und der Befehl so aussieht:



    CMD:test(playerid, params[])
    {
    new string[128],id;
    if(sscanf(params,"s[3]d",string,id)) //Hallo = 5 Zeichen, hast aber nur 3 zur Verfügung....Buffer overflow
    }

    Der fehler besteht noch immer,
    danke aber für eure vielen ansätze

    ..ich hab das Skript kompiliert gehabt...bei mir kamen keine Fehler...


    Hast du auch meinen Code kopiert und mit deinem ersetzt? :rolleyes:


    Habe da einige Sachen geändert gehabt..die man nicht direkt sieht..wie z.B. aus einer ) eine } gemacht...und Namen von Makros geändert..bzw angepasst..

    Deine Makros so schreiben:



    #define AMMO_EXTRA (0) //Das hier hast du vergessen...ehh weiß nicht was für n wert das haben soll


    #define AMMO_NOAMMO (0)
    #define AMMO_9MM (1)
    #define AMMO_SHOTGUN (2)
    #define AMMO_MAGNUM (3)
    #define AMMO_9x19MM (4)
    #define AMMO_762x39MM (5)
    #define AMMO_556MM (6)
    #define AMMO_762x51MM (7)
    #define AMMO_THROW (8)
    #define AMMO_UNABLE (9)


    #define AMMTYPE_NOAMMO (0)
    #define AMMTYPE_NORM (1)
    #define AMMTYPE_HOLLOWPOINT (2)
    #define AMMTYPE_BREAKING (3)
    #define AMMTYPE_GUMMI (4)


    #define WSLOT_FIST (0)
    #define WSLOT_MEELE (1)
    #define WSLOT_HANDGUN (2)
    #define WSLOT_MAIN (3)
    #define WSLOT_THROW (4)
    #define WSLOT_OTHER (5)


    //Und dann das so:


    stock const weaponData[47][_weaponData] = {
    {"Faust", AMMO_NOAMMO, 4,WSLOT_FIST,0},
    {"Schlagring", AMMO_NOAMMO, 5,WSLOT_FIST,0},
    {"Golfschläger", AMMO_NOAMMO, 6,WSLOT_MEELE, 1},
    {"Schlagstock", AMMO_NOAMMO, 8,WSLOT_MEELE, 1},
    {"Messer", AMMO_NOAMMO, 8,WSLOT_MEELE, 1},
    {"Baseballschläger", AMMO_NOAMMO, 8,WSLOT_MEELE, 1},
    {"Schaufel", AMMO_NOAMMO, 6,WSLOT_MEELE, 1},
    {"BillardKö", AMMO_NOAMMO, 5,WSLOT_MEELE, 1},
    {"Katana", AMMO_NOAMMO, 25,WSLOT_MEELE, 1},
    {"Kettensäge", AMMO_NOAMMO, 25,WSLOT_MEELE, 1},
    {"Dildo", AMMO_NOAMMO, 1,WSLOT_MEELE, 10},
    {"Dildo", AMMO_NOAMMO, 1,WSLOT_MEELE, 10},
    {"Vibrator", AMMO_NOAMMO, 1,WSLOT_MEELE, 10},
    {"Vibrator", AMMO_NOAMMO, 1,WSLOT_MEELE, 10},
    {"Blumenstrauß", AMMO_NOAMMO, 1,WSLOT_MEELE, 10},
    {"Gehstock", AMMO_NOAMMO, 5,WSLOT_MEELE, 10},
    {"Splittergranate",AMMO_THROW,0, WSLOT_THROW, 8},
    {"Tränengas",AMMO_THROW,0, WSLOT_THROW, 8},
    {"Molotov Cocktail", AMMO_THROW,0, WSLOT_THROW, 8},
    {"Noting",-1,-1,-1,-1},
    {"Noting",-1,-1,-1,-1},
    {"Noting",-1,-1,-1,-1},
    {"9mm", AMMO_9MM, 20,WSLOT_HANDGUN, 2},
    {"9mm-SD", AMMO_9MM,15,WSLOT_HANDGUN, 2},
    {"Desert Eagle", AMMO_MAGNUM, 30,WSLOT_HANDGUN, 2},
    {"Shotgun", AMMO_SHOTGUN, 30,WSLOT_MAIN,3},
    {"Abgesägte Shotgun", AMMO_SHOTGUN, 25,WSLOT_MAIN,3},
    {"Combat Shotgun", AMMO_SHOTGUN, 20,WSLOT_MAIN,3},
    {"Uzi", AMMO_9x19MM, 15,WSLOT_HANDGUN, 4},
    {"Mp5", AMMO_9MM, 20,WSLOT_MAIN,4},
    {"Ak-47", AMMO_762x39MM, 30,WSLOT_MAIN,5},
    {"M4A1", AMMO_556MM, 30,WSLOT_MAIN,5}, // Zeile 84
    {"Tec9", AMMO_9x19MM, 15,WSLOT_HANDGUN, 4},
    {"Country Rifle", AMMO_762x51MM, 40,WSLOT_MAIN,6},
    {"Sniper Rifle", AMMO_762x51MM, 50,WSLOT_MAIN,6},
    {"RPG",AMMO_UNABLE,0,-1,7},
    {"HS Rocketlauncher", AMMO_UNABLE,0,-1,7},
    {"Flammenwerfer",AMMO_UNABLE,0,-1,7},
    {"Minigun",AMMO_UNABLE,0,-1,7},
    {"Rucksackbombe",AMMO_UNABLE,0,-1,8},
    {"Detonator",AMMO_UNABLE,0,-1,12},
    {"Sprühdose",AMMO_EXTRA,0,WSLOT_OTHER, 9},
    {"Feuerlöscher",AMMO_EXTRA,0,WSLOT_OTHER, 9},
    {"Kamera",AMMO_EXTRA,0,WSLOT_OTHER, 9},
    {"Nachtsichtgerät",AMMO_UNABLE,0,-1,11},
    {"Thermalgerät",AMMO_UNABLE,0,-1,11},
    {"Fallschirm",AMMO_EXTRA,4,WSLOT_OTHER, 11}
    };


    mfg. :thumbup:

    Bei OnPlayerDeath:



    if(killerid != INVALID_PLAYER_ID) //If-Abfrage halt noch erweitern prüfen ob er in der Arena ist
    {
    new name[MAX_PLAYER_NAME],string[128];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    GetPlayerName(killerid,string,MAX_PLAYER_NAME);
    format(string,128,"* Spieler %s hat %s getötet!",string,name);
    SendClientMessageToAll(-1,string); //ggf Anpassen, an wen es gesendet werden soll
    }