Beiträge von Kaliber

    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:

    -Ein Objekt erzeugen


    Naja so z.B.


    #define PreloadAnim(%0,%1) ApplyAnimation(%0,%1,"null",0.0,0,0,0,0,0)


    //Unter OnPlayerRequestClass
    PreloadAnim(playerid,"BOMBER");


    ocmd:legeBombe(playerid)
    {
    new Float:p[3];
    GetPlayerPos(playerid,p[0],p[1],p[2]);
    CreateObject(1252,p[0],p[1],p[2]-0.5,0,0,0);
    ApplyAnimation(playerid,"BOMBER","BOM_PLANT_LOOP",4.0,0,0,0,0,1);
    return 1;
    }


    mfg. :thumbup:

    Nun als erstes, schreib es einfach mal so:


    case DIALOG_FRAKBANK_EINZAHLEN:
    {
    if(response == 0) return ShowPlayerDialog(playerid,DIALOG_FRAKBANK,DIALOG_STYLE_LIST,"Fraktionsbank","Ausrüsten\nEinzahlen\nAuszahlen\nMaterial\nDrogen","Weiter","Abbruch");
    new cmd = strval(inputtext),string[350],frakid = Spieler[playerid][pFraktion];
    if((Spieler[playerid][pGeld] - cmd) < 0) return SendClientMessage(playerid,ROT,"Du hast nicht genug Geld!");
    if(!IsNumeric(inputtext)){
    format(string,sizeof(string),"Gebe bitte nun den Betrag ein, welchen du in die Fraktionkasse einzahlen möchtest!\nDerzeitiger Fraktionskassen Stand: %i$",FrakInfo[frakid][frakgeld]);
    ShowPlayerDialog(playerid,DIALOG_FRAKBANK_EINZAHLEN,DIALOG_STYLE_INPUT,"Fraktionsbank Einzahlung",string,"Weiter","Abbruch");
    return SendClientMessage(playerid,ROT,"Es sind nur Zahlen möglich!");
    }
    if(cmd < 1 || cmd > 10000) {
    format(string,sizeof(string),"Gebe bitte nun den Betrag ein, welchen du in die Fraktionkasse einzahlen möchtest!\nDerzeitiger Fraktionskassen Stand: %i$",FrakInfo[frakid][frakgeld]);
    ShowPlayerDialog(playerid,DIALOG_FRAKBANK_EINZAHLEN,DIALOG_STYLE_INPUT,"Fraktionsbank Einzahlung",string,"Weiter","Abbruch");
    return SendClientMessage(playerid,ROT,"Betrag nur zwischen 1 und 10.000$ möglich!");
    }
    FrakInfo[frakid][frakgeld] += cmd,ACMoney(playerid, -cmd);
    format(string,sizeof(string),""#HTML_WHITE"[ "#HTML_LOGIN"FrakBank: "#HTML_WHITE"Das Mitglied "#HTML_ORANGE"%s "#HTML_WHITE"hat so eben "#HTML_GREEN"%i$ "#HTML_WHITE"in der Fraktionkasse eingezahlt! "#HTML_WHITE"Neuer Stand: "#HTML_ORANGE"%i$ ]",SpielerName(playerid),cmd,FrakInfo[frakid][frakgeld]);
    FraktionsChat(Spieler[playerid][pFraktion],WEISS,string);


    format(string,sizeof(string),"INSERT INTO "#DATENBANK"_frakgeldlog (`fID`,`name`,`count`,`timestamp`,`op`) VALUES ('%d','%s','%d','%d','1')",frakid,SpielerName(playerid),cmd,gettime());
    mysql_function_query(MYSQLVerbindung,string,false,"","");
    ShowPlayerDialog(playerid,DIALOG_FRAKBANK,DIALOG_STYLE_LIST,"Fraktionsbank","Ausrüsten\nEinzahlen\nAuszahlen\nMaterial\nDrogen","Weiter","Abbruch");
    return true;
    }
    }
    return true;


    Probier das mal so aus, sollte es nicht klappen, mach es einfach so:


    frakid = Spieler[playerid][pFraktion]+1;


    mfg. :thumbup:

    Ja, das kannst du z.B. so machen:


    enum SpielerEnum //Das hast du bestimmt schon
    {
    pPremium, //Das da einfach reinmachen und abspeichern
    };



    //Da wo du Premium vergibst:
    new tage,pID;
    if(sscanf(params,"ud",pID,tage)) return...;
    SpielerInfo[pID][pPremium] = gettime()+60*60*24*tage; //28,30,31 Tage wäre z.B. 1 Monat


    //Dann da wo du deinen Account Laden lässt:
    if(gettime() > SpielerInfo[playerid][pPremium] && SpielerInfo[playerid][pPremium] != 0)
    {
    SpielerInfo[playerid][pPremium] = 0;
    SCM(playerid,-1,"Dein Premium Account ist ausgelaufen!");
    }


    Ich hoffe du hast den Ansatz so grob verstanden :)


    mfg. :thumbup:


    //Edit: Rechtschreibfehler

    Ich habe bereits alles versucht, aber die werden einfach nicht geladen. An was könnte das liegen???


    Nun, mach mal evtl einen print-Debug (evtl sind die Koordinaten alle auf 0)...


    Wenn da gar nichts aufgerufen wird, hau mal das crashdetect Plugin rein, vielleicht hast du einen Run Time Error...


    Oder dieser Codeblock wird gar nicht erst aufgerufen :)


    mfg. :thumbup:

    Ich hoffe ihr könnt helfen... :/


    Hier mal ganz grob:


    enum e_Eis {
    e_Preis,
    e_ID
    };
    new eis_verkauf[MAX_PLAYERS][e_Eis];


    #define Eis_Reset(%0) eis_verkauf[%0][e_ID]=-1


    //Unter OnPlayerConnect
    eis_verkauf[playerid][e_ID] = -1;


    //gebeeis
    new pID,preis;
    if(sscanf(params,"ud",pID,preis)) return Verwendung /gebeeis [ID][Preis];
    if(!IsPlayerConnected(pID)) return SCM(playerid,-1,"Spieler nicht connected!");
    if(!InRange(playerid,pID,15.0)) return SCM(playerid,-1,"Dieser Spieler ist nicht in deiner Nähe!");
    eis_verkauf[pID][e_Preis] = preis;
    eis_verkauf[pID][e_ID] = playerid;


    //eisannehmen
    if(eis_verkauf[playerid][e_ID] == -1) return SCM(playerid,-1,"Dir hat niemand ein Eis angeboten!");
    if(GetPlayerMoney(playerid) < eis_verkauf[playerid][e_Preis]) return SCM(playerid,-1,"Nicht genug Geld!");
    if(!InRange(playerid,eis_verkauf[playerid][e_ID],15.0)) //Impliziert !IsPlayerConnected
    {
    SCM(playerid,-1,"Der Verkäufer ist nicht in deiner Nähe!");
    return Eis_Reset(playerid);
    }
    GivePlayerMoney(playerid, -eis_verkauf[playerid][e_Preis]);
    //Gib ihm hier ein Eis
    //Nachricht senden...
    Eis_Reset(playerid);
    return 1;


    //Edit: Hier noch die InRange Funktion
    stock InRange(playerid,pID,Float:x) {
    new Float:p[3];
    GetPlayerPos(pID,p[0],p[1],p[2]);
    return IsPlayerInRangeOfPoint(playerid,x,p[0],p[1],p[2]);
    }


    mfg. :thumbup: