Beiträge von Kaliber

    In der Log gibt es hunderte von den Zeilen.


    Das ist richtig, aber sie haben alle etwas gemeinsam.


    Überall wird eine Array grenze überschritten > 699...die Wahrscheinlichkeit ist sehr hoch, dass es sich überall um das selbe Array handelt :)


    Wenn wir nun dieses Array finden in dem Callback, dann den Wert anpassen (zu MAX_VEHICLES), dann ist der Fehler behoben (überall) :)


    mfg. :thumbup:

    Ich verstehe halt nicht sehr viel von Mathe. Daher weiß ich nicht, wie man "exponentiell" rechnet


    ist es da auch moeglich mit der E-Funktion zu arbeiten, bzw. den Wert von e mit ^Level?


    Ja ist es:


    //Schreib das oben in dein Skript
    #define e^(%0) floatpower(2.718281828459,(%0))


    //Nutzen kannst du es so:
    new level = GetPlayerScore(playerid),Float:r=floatdiv(random(100),10);
    new Float:kosten = 10*level*(!r?0.5:r)*e^(level);


    //Edit: Jetzt hast du genau deine 1. Formel :)


    mfg. :thumbup:

    Könntest du mir die Werte erklären?


    Dafür wurde das Wiki geschaffen: http://wiki.sa-mp.com/wiki/CreateExplosion_DE


    Hier eine Liste mit Explosions IDs: http://wiki.sa-mp.com/wiki/Explosion_List


    Wenn du so ne richtig fette Explosion willst:


    CreateExplosion(mines[b][e__X], mines[b][e__Y], mines[b][e__Z], 7, 10.0);


    @[LnD]JustMe.77: Ja dein Code wurde in BBCodes ungewandelt, schau nochmal (hab ihn grad editiert beim 1. fehlte das [b ]) :)


    mfg. :thumbup:

    oder muss das in mein Gamemode rein?


    Der Timer muss dahin, wo du den anderen Code auch hingetan hast...


    Wenn du das alles in ein Filterscript schreibst, dann musst du SetTimer natürlich unter OnFilterScriptInit schreiben :)


    Falls du das gemacht hast und es immernoch nicht geht, mach mal die Range höher (also unter @Bomb schreib es so):


    if(IsPlayerInRangeOfPoint(i,4.5,


    mfg. :thumbup:

    Kannst mir da auch noch helfen ?


    Da musst du sowas ungefähr machen:


    #define MAX_MINES 100


    enum e_Mines {
    e_model,
    Float:e__X,
    Float:e__Y,
    Float:e__Z
    };


    new mines[MAX_MINES][e_Mines],bool:mine_t[MAX_PLAYERS char];


    ocmd:mine(playerid)
    {
    if(mine_t{playerid}) return SendClientMessage(playerid,-1,"Bitte warte einen kurzen Moment, bevor du die Nächste Mine erstellst!");
    new m_idx = GetFreeMine();
    if(m_idx == MAX_MINES) return SendClientMessage(playerid,-1,"Es wurde bereits die maximale Anzahl an Minen erstellt!");
    new Float:p[4];
    GetPlayerPos(playerid,p[0],p[1],p[2]),GetPlayerFacingAngle(playerid,p[3]);
    const Float:distance = 0.75; //jetzt wäre die Bombe etwas weiter vorne
    p[0] += (distance * floatsin(-p[3], degrees));
    p[1] += (distance * floatcos(-p[3], degrees));
    mine_t{playerid} = true;
    mines[m_idx][e_model] = CreateObject(19602,p[0],p[1],p[2]-0.93,0,0,0);
    mines[m_idx][e__X] = p[0],mines[m_idx][e__Y] = p[1],mines[m_idx][e__Z] = p[2];
    ApplyAnimation(playerid,"BOMBER","BOM_Plant",4.1,0,1,1,0,0,1);
    SetTimerEx("@ta",1000*5,0,"i",playerid);
    return 1;
    }


    @ta(i);@ta(i) return mine_t{i}=false;


    //Du brauchst einen Timer (unter OnGameModeInit)
    SetTimer("@Bomb",599,1);


    //Dann irgendwo außerhalb von Callbacks..etc
    @Bomb();@Bomb() {
    for(new i; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i) || mine_t{i}) continue;
    for(new b; b<MAX_MINES; b++) {
    if(!mines[b][e_model]) continue;
    if(IsPlayerInRangeOfPoint(i,2.5,mines[b][e__X],mines[b][e__Y],mines[b][e__Z])) { PlayerOnMine(i,b); break; }
    }
    }
    return 1;
    }


    stock PlayerOnMine(playerid, b) {
    //Hier ist halt die Explosion:
    CreateExplosion(mines[b][e__X], mines[b][e__Y], mines[b][e__Z], 12, 10.0);
    DestroyObject(mines[b][e_model]),mines[b][e_model]=0;
    SendClientMessage(playerid,-1,"BOOOOOOOOM!");
    return 1;
    }


    stock GetFreeMine() {
    for(new i; i<MAX_MINES; i++) if(!mines[i][e_model]) return i;
    return MAX_MINES;
    }


    mfg. :thumbup:


    //Edit: Kleinigkeiten
    Edit²:

    So würde er aber schon beim erstellen der Mine, die Mine zum explodieren bringen ^^


    Ahaha danke, daran habe ich gar nicht gedacht #gefixxt ^^

    Wie muss ich das ungefähr verändern?


    Da musst du ein bisschen rumprobieren:


    ocmd:mine(playerid)
    {
    new Float:p[4];
    GetPlayerPos(playerid,p[0],p[1],p[2]),GetPlayerFacingAngle(playerid,p[3]);
    const Float:distance = 0.75; //jetzt wäre die Bombe etwas weiter vorne
    p[0] += (distance * floatsin(-p[3], degrees));
    p[1] += (distance * floatcos(-p[3], degrees));
    CreateObject(19602,p[0],p[1],p[2]-0.93,0,0,0);
    ApplyAnimation(playerid,"BOMBER","BOM_Plant",4.1,0,1,1,0,0,1);
    return 1;
    }


    mfg. :thumbup:

    Was hab ich falsch gemacht?


    Schreibe den Command so:


    CMD:back(playerid, params[])
    {
    if(PlayerAFK[playerid] == 1)
    {
    new string[128];
    new playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,sizeof(playername));
    TogglePlayerControllable(playerid,true);
    format(string, sizeof(string), "SERVER: %s spielt nun weiter. /back",playername);
    SendClientMessageToAll(LILA,string);
    PlayerAFK[playerid] = 0;
    return true;
    }
    return SendClientMessage(playerid,ROT,"FEHLER: Du bist nicht afk!");
    }



    public AFK(playerid)
    {
    new string[128];
    new playername[MAX_PLAYER_NAME];
    KillTimer(isAFK);
    TogglePlayerControllable(playerid,false);
    GetPlayerName(playerid,playername,sizeof(playername));
    format(string, sizeof(string), "SERVER: %s ist nun afk. /afk",GetName);
    SendClientMessageToAll(LILA,string);
    SendClientMessage(playerid,WEISS,"Beutze /back um weiter zu spielen.");
    PlayerAFK[playerid] = 1;
    return true;
    }


    //Das hier schreibe unter OnPlayerCommandText ganz nach oben!
    if(PlayerAFK[playerid] == 1)
    {
    SendClientMessage(playerid,ROT,"FEHLER: Während du afk bist kannst du keine Befehle benutzen. Um aus dem afk Modus heraus zu gelangen tippe /back ein.");
    return true;
    }


    mfg. :thumbup: