Beiträge von Kaliber

    Entweder du nutzt ein Plugin dafür, wie dieses hier: http://forum.sa-mp.com/showthread.php?t=92246


    oder du machst es so, dass du die Maps so nennst:


    /*
    Map_0.txt
    Map_1.txt
    Map_2.txt
    Map_3.txt
    */


    //und so dann laden lassen
    new string[10];
    for(new i; i<4; i++) format(string,sizeof string,"Map_%d.txt",i),LoadMap(string);


    oder du packst alle Maps in eine .txt Datei und sorgst durch ein gewisses Zeichen..z.B. # für die Trennung der Maps und splittest es..


    oder du nutzt Datenbanksysteme wie SQLite um das zu verwirklichen ;)


    mfg. :thumbup:

    Weiß einer warum das kommt?


    Versuchs mal so:


    ocmd@3:flock,fclock,fcarlock(playerid,pa[])
    {
    if(Spieler[playerid][Fraktion] <= 0)return SendClientMessage(playerid,Rot,"Du bist in keiner Fraktion!");
    new vehid = GetNearest_Vehicle(playerid,7);
    if(vehid == -1 || Spieler[playerid][Fraktion] != 1) return 1;
    if(FCarlock[vehid] == 1) {
    FCarlock[vehid] = 0;
    for(new p; p<MAX_PLAYERS; p++) if(IsPlayerConnected(p)) SetVehicleParamsForPlayer(vehid,p,0,0);
    } else if(!FCarlock[vehid]) {
    FCarlock[vehid] = 1;
    for(new p; p<MAX_PLAYERS; p++) if(IsPlayerConnected(p)) SetVehicleParamsForPlayer(vehid,p,0,1);
    }
    return 1;
    }


    //Edit: Wofür brauchste die Schleife mit der Variable i? macht doch keinen Sinn :D


    mfg. :thumbup:

    Wie kann man es debuggen?


    Zum Beispiel so:


    ocmd:debug(playerid,params[]) {
    print(params); //<< hier weißt du was übergeben wird
    new pID;
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,-1,"Verwendung: /debug [spielerid]");
    printf("%d",pID); //Hier was sscanf macht
    return SendClientMessage(pID,-1,"Hallo Spieler pID!");
    }


    Dann kannst du ja in den Logs schauen, was da ausgegeben wird und wo der Fehler liegt ;)


    mfg. :thumbup:

    In diesem Fall, kannst du es doch auch einfach so machen:


    ocmd:teststring(playerid,params[])
    {
    if(!params[0]) return SendClientMessage(playerid, COLOR_RED,"Benutze: /Teststring [Text]");
    new strings[145];
    format(strings, sizeof(strings), "Du hast %s eingegeben!", params);
    return SendClientMessage(playerid, COLOR_GREEN, strings);
    }


    ocmd:testuser(playerid,params[])
    {
    if(!params[0]) return SendClientMessage(playerid, COLOR_RED,"Benutze: /Testuser [SpielerName / ID]");
    new string[145],name[MAX_PLAYER_NAME],pID = strval(params);
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid, COLOR_RED,"Dieser Spieler ist nicht online.");
    GetPlayerName(pID, name, sizeof(name));
    format(string, sizeof(string), "Du hast %s ausgewählt!", name);
    return SendClientMessage(playerid, COLOR_GREEN, string);
    }


    Wenn es aber auch bei anderen Befehlen nicht klappen sollte, einfach mal Debuggen ;)


    PS: Nicht so große Strings nehmen! Das Limit bei der Chat Ausgabe liegt bei 144 + Null Char...nicht bei 512 :rolleyes:


    mfg. :thumbup:

    wie das gehen soll bzw. was genau die besagte Funktion eig. tut.


    Nun, wenn man z.B. DisableInteriorEnterExits(); verwendet, werden alle Interiors die aus dem Singleplayer drinnen sind, deaktiviert.


    Sprich auch alle Bots, auch wenn du den Spieler in den selben Interior setzt z.B. Ammunation / Burger Shot o.ä. ist dort kein Bot oder sonst was, der dir was verkauft.


    SetPlayerShopName


    Diese Funktion sorgt dafür, dass genau in einem bestimmten Laden z.B. nur Ammunation dann da ein Bot steht, der dir Waffen verkauft ;)


    mfg. :thumbup:

    Kaliber das kann nicht sein, da für alle 14 Bots der selbe connect+spawnvorgang ist.


    Na, aber irgendwas muss es ja sein, sonst würde es ja funktionieren :P


    Nutzt du NPC-Plugins...vielleicht nicht alle auf Linux geswitcht? :huh:

    liegt das daran?


    Nein, allerdings ist es auch nicht gut, seinen heapspace (denn das macht man mit #pragma dynamic) um 100kB zu vergrößern :pinch:


    Deine Bots connecten, spawnen und disconnecten. Dann print-Debugge doch einfach wo das Problem ist...lässt du sie evtl in irgendeiner Funktion kicken? Evtl Anti-Cheats? Oder halt irgendwo kick(playerid) ...o.ä.?


    mfg. :rolleyes:

    Nun, da dort kein Fehler ist, muss er woanders liegen :D


    invalid function or declaration kommt immer dann, wenn man Blank Code ohne deklaration oder Funktion einfach so in das Script schreibt.


    //Beispiel1:
    #include <a_samp>


    main() {


    }


    hi
    //Output-> error 010: invalid function or declaration


    Nun, das bedeutet du hast irgendwo in deinem Script Blank Code stehen...


    Du brauchst eigentlich #include <float> und #include <core>...etc nicht schreiben, da das alles schon in der a_samp.inc includiert wird ;)


    Lösche mal das #include <core> raus..vielleicht ist der Fehler dann weg, wenn nicht, dann musst du auf Suche nach Blank-Code gehen :P


    mfg. :thumbup:

    Es ist kein Fehler in der Include Datei ^^


    Das wird nur nicht ganz richtig angezeigt...der eigentliche Fehler liegt in deinem Gamemode ;)


    Poste mal bitte alle Zeilen, bis zu der Zeile wo #include <core> steht ;)


    mfg. :thumbup:

    und stocks brauchen keine Forwards.


    Als erstes solltest du wissen, dass stock nur ein Wort ist, wie verlinkt, dass dafür sorgt, dass der Compiler die Funktion oder Variable ignoriert, falls sie nicht genutzt wird.


    Es handelt sich immer noch um eine Funktion. Und wenn eine Funktion einen TAG zurückgibt, sei es Float oder sonst einer, dann macht das forwarden auch einen Sinn.


    Schauen wir uns dazu ein Beispiel an:


    main() {
    printf("%f",getFloat(2));
    }


    stock Float:getFloat(x) {
    return float(x);
    }


    Wenn wir das genau so machen in dieser Reihenfolge, gibt es ein Problem und zwar bekommen wir diesen Warning:


    Code
    warning 208: function with tag result used before definition, forcing reparse


    Das sagt uns, dass wir bevor wir die Funktion nutzen, entweder die Funktion forwarden müssen oder bevor wir die Funktion nutzen die Funktion erstellen.


    Aus diesem Grund macht das forwarden zwar nicht direkt darüber einen Sinn, aber wenn man es so macht:


    forward Float:getFloat(x);


    main() {
    printf("%f",getFloat(2));
    }


    stock Float:getFloat(x) {
    return float(x);
    }


    ist der Warning weg und es hat durchaus seine Richtigkeit ;)


    mfg. :thumbup:

    Wie kann ich auslesen von welchen spielern ein User zu letzt getötet wurde und welche User ein Spieler zuletzt getötet hat?
    Hat jemand gerade einen Code/FS da hab schon gesucht doch leider nicht gefunden


    Nun, das kannst du über eine globale Variable einfach lösen:


    //Oben in dein Script
    #define MAX_KILL_STATS 5
    #define getKillID(%0) d_idx{%0}


    static DeathInfo[MAX_KILL_STATS][MAX_PLAYERS] = {{-1,...},{-1,...},{-1,...},{-1,...},{-1,...}},d_idx[MAX_PLAYERS char];


    //Unter dem Callback
    public OnPlayerDeath(playerid, killerid, reason)
    {
    if(killerid != INVALID_PLAYER_ID) {
    DeathInfo[getKillID(playerid)][playerid] = killerid;
    d_idx{playerid}++;
    if(getKillID(playerid) == MAX_KILL_STATS) d_idx{playerid} = 0;
    }
    return 1;
    }


    stock GetLastKillerName(playerid) //Gibt den Namen von dem Spieler zurück, der ihn zuletzt getötet hat
    {
    new name[MAX_PLAYER_NAME] = "Nieamnd";
    if(DeathInfo[getKillID(playerid)-1][playerid] == -1) return name;
    return GetPlayerName(DeathInfo[getKillID(playerid)-1][playerid],name,MAX_PLAYER_NAME),name;
    }


    stock ListLastKills(playerid) //Listet die Usernamen, von den Spielern die er zuletzt getötet hat (wenn sie noch on sind)
    {
    new name[MAX_PLAYER_NAME],string[25 + MAX_PLAYER_NAME];
    for(new i; i<MAX_PLAYERS; i++) {
    if(!IsPlayerConnected(i)) continue;
    for(new x; x<MAX_KILL_STATS; x++) {
    if(DeathInfo[x][i] == playerid) {
    GetPlayerName(i,name,MAX_PLAYER_NAME);
    format(string,sizeof string,"Du hast %s getötet gehabt!",name);
    SendClientMessage(playerid,-1,string);
    }
    }
    }
    return 1;
    }


    Ist aus dem Kopf geschrieben..weiß nicht ob es funktioniert, kannst es ja mal probieren ;)


    mfg. :rolleyes:

    Hier, so machst du es ordentlich:



    mfg. :thumbup: