Beiträge von Kaliber

    zu dem der Spieler beim werfen der Granate guckt und dementsprechend die Koordinaten des Punktes in den Timer einbauen


    Genau so muss man es machen, hier ein Beispiel:



    const Float:distance = 5.0; //Wie weit er die Granate wirft..
    new Float:x,Float:y,Float:z,Float:a;
    GetPlayerPos(playerid, x, y, z),GetPlayerFacingAngle(playerid, a);
    x += (distance * floatsin(-a, degrees));
    y += (distance * floatcos(-a, degrees));


    //x,y und z an den Timer übergeben


    //Dann in dem Timer:
    for(new i,Float:heal; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerInRangeOfPoint(i,7.5,x,y,z)) GetPlayerHealth(i,heal),SetPlayerHealth(i,heal-2.0);
    }


    mfg. :thumbup:

    Hahaha :D


    Kann doch Spaß machen so Automaten Spiele, ich meine im Singleplayer gibts die Dinger ja auch...


    Ist halt ein lustiger zeitvertreib, damit es nicht sinnlos ist, kann man das ja verknüpfen, wie z.B. pro 1000 Score = 50$ oder sowas ^^


    Aber, danke für euer Feedback :)

    Hallo liebe Community,


    da mir mal langweilig ist, dachte ich ich schreib mal ein neues Spiel in SA:MP.


    Also, ihr kennt doch alle diese Spiele-Automaten aus dem Singleplayer und naja durch Sprites kann man diese Games "neu" schreiben.


    Mir geht es momentan darum ein paar Ideen zu sammeln, bisher sieht das ungefähr alles so aus:



    Also, das Raumschiff kann man mit den Pfeil-Tasten über den Bildschirm steuern.


    Den Komet kann man abschießen, dass sieht dann so aus (das grüne ist der Schuss):



    Sobald man den Kometen trifft, wird dieser erstmal heller, also man brauch mehrere Schüsse, damit er verschwindet:



    Das rechts ist ein Power-Boost, dadurch bekommt man einen Double-Shoot und macht halt eben doppelt soviel schaden :)


    Ich wollte mal fragen, was ihr grundsätzlich von so einer Idee haltet und evtl paar Verbesserungsvorschläge und Ideen :)


    //Edit:
    PS: Also, das ist jetzt nicht nur permanent ein Komet oder so...es kommen halt viele Reihen und man muss diese halt immer wieder abschießen oder ausweichen und so...


    mfg. :thumbup:

    Diese Logik...finde ich ja doch mal sehr interessant :)


    Du schreibst alle strings in unterschiedliche Variablen und alle machst du 256 Byte groß...und dann willst du 256*29 in einen insgesamt string schreiben, der 256 Bytes groß ist :D


    256 != 256*29 xD


    Zudem sind für die Informationen insgesamt 256 Bytes ein bisschen zu wenig Platz :S


    Naja, wie dem auch sei, schreib das alles mal einfach so:


    new str[512];
    format(str, sizeof(str), "Accountübersicht\n\
    Name: %s\n\
    Alter: %d\n\
    Geschlecht: %s\n\
    Premium: %s\n\
    Partner: %s\n\
    Leben: %.1f\n\
    Level: %d\n\
    Verwarnungen: %d\n\
    Respektpunkte: %d/%d\n\
    Levelkosten: %d$\n\
    Spielminuten: %d\n\
    Verbrechen: %d\n\
    Bargeld: $%d\n\
    Bankkonto: $%d\n\
    Zinsen: $%d\n\
    Nebenjob: %d\n\
    Fraktion: %s\n\
    Rang: %s\n\
    Organisation: %s\n\
    Lohn: %s\n\
    Lottonummer: %d\n\
    Telefonnummer: %d\n\
    Sturmhauben: %d\n\
    Gras: %d\n\
    Drogen: %d\n\
    Morde: %d\n\
    Tode: %d",
    name,age,atext,drank,married,shealth+50.0,level,PlayerInfo[targetid][pWarns],exp,expamount,
    costlevel,PlayerInfo[targetid][pGesamtMinutes],crimes,cash,account,interest,jtext,ttext,rtext,
    ftext,PlayerInfo[targetid][pGehalt],lotto,pnumber,PlayerInfo[targetid][pSturmhauben],
    PlayerInfo[targetid][pGras],drugs,kills,deaths);
    ShowPlayerDialog(playerid,30,DIALOG_STYLE_MSGBOX , "Accountübersicht", str, "OK", "");


    So hast du auch nur einen String und es wird gleich direkt alles formatiert, das ist 29x schneller und sparst viel Speicher :D


    mfg. :thumbup:

    hat jemand noch nen gültigen Link? :D


    Das nicht, aber ich kann mir nicht vorstellen, dass das unglaublich komplex war dieses Include.


    Hier ein Vorschlag von mir:


    Source-Code: Pastebin
    Direkt-Download: Mediafire


    AddBaum(playerid); //Erstellt einen Baum
    RemoveBaum(index); //Löscht einen Baum
    RemoveAllBaum(); //Löscht alle Bäume


    PS: Wenn Incognito Streamer inkludiert ist, wird dieser automatisch verwendet!


    Wenn man mehr als 100 Bäume haben will
    #define MAX_TREES 500 //Jetzt hätte man 500 Bäume (kann man auch weiter ehöhen)
    #include <baum>



    //Mal ein Beispiel Skript:
    new Baum[MAX_PLAYERS];


    //Dann einen Command: /erstelle Baum
    if(Baum[playerid]) return SendClientMessage(playerid,-1,"Sie haben einen Baum bereits erstellt!");
    Baum[playerid] = AddBaum(playerid);


    //Und zum löschen
    RemoveBaum(Baum[playerid]);
    Baum[playerid] = 0;


    Viel Spaß damit ^^


    //Edit: Okay habe es getestet und die Z-Koordinate musste runter gesetzt werden :)


    Hier nochmal ein Screen, da dieser auch am Anfang fehlt:



    mfg. :thumbup:

    new fire[MAX_FIRES][fires] = {
    {"", 0.0, 0.0, 0.0},


    Also 2 Dinge zu dieser Initialisation:


    1. Du hast da "" geschrieben, okay sehr clever, das funktioniert nur, weil das NULL Byte dafür genommen wird und das dezimal der 0 entspricht :D Aber, es wäre deutlich übersichtlicher einfach 0 zu schreiben.


    2. Du brauchst in Pawn deine Variable nicht mit 0 initialisieren, sowie in C oder so...das wird hier schon alles automatisch gemacht ;)


    //Edit: Ja waffenid 42...da wird der Callback gar nicht aufgerufen :D


    Musst alternativ OnPlayerUpdate oder einen Timer verwenden ;)

    Spoiler anzeigen

    So und als Nächstes, schreibe mal deinen Callback so:
    public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid)
    {
    if(weaponid != 42) return 1;
    for(new i,Float:x; i<MAX_FIRES;i++) {
    x = GetPlayerDistanceFromPoint(playerid, fire[i][zX], fire[i][zY], fire[i][zZ]);
    if(x < 10) {
    new Float:z[2];
    GetXYInFrontOfPlayer(playerid, z[0], z[1], x);
    if(k_Range(z[0],fire[i][zX]) && k_Range(z[1],fire[i][zY])) {
    DestroyObject(fire[i][ID]);
    SendClientMessage(playerid, COLOR_GREEN, "Feuer gelöscht!");
    }
    break;
    }
    }
    return 1;
    }
    stock k_Range(Float:x,Float:y) return ((x-y) < 2.5 && (x-y) > -2.5) ? 1 : 0;


    mfg. :thumbup:

    Ehm...also entweder kann ich nicht mehr richtig lesen oder habe irgendwas übersehen, wieso gibt es den Command /sup 2x..das macht doch keinen Sinn? :huh:


    Verbesserungsvorschläge aus Langeweile
    - Für bool Arrays bietet es sich immer an um Speicherplatz zu sparen, char-Arrays zu verwenden.
    - Der ternary operator ist sehr nützlich und eleganter als einfache Statements:

    Verbesserungsvorschläge aus Langeweile
    forward PlayerIsAdmin(playerid);
    public PlayerIsAdmin(playerid) return (PlayerInfo[playerid][pAdmin] >= 1) ? 1 : 0;

    Verbesserungsvorschläge aus Langeweile
    - Nur so nebenbei, format ist immer sehr langsam, wenn du einen simplen String - Swap machen willst, bietet sich strcat oder eine direkte Zuweisung viel mehr an ^^


    mfg. :thumbup: