Beiträge von breadfish

    Zwei Dinge:

    • Bitte in Zukunft [ pwn] [ /pwn] Tags für Quellcode benutzen (hab ich jetzt gemacht, schaus dir am besten mal an)
    • Bitte, bitte, bitte Code einrücken, so ist ungemein schwer lesbar :(

    In diesem Thread können nützliche Codeschnipsel gepostet werden, die man immer mal wieder benötigt.
    Es wäre toll wenn man dazu ein kleines Verwendungsbeispiel (muss kein komplettes Script sein) schreiben würde, dann wird es leichter zu verstehen wie man es verwendet.
    Hier bitte keine Scriptfragen stellen!
    ------------------------------------------------------------------------------------------------------------------------


    Animierte Kamera


    In diesem Beispielscript wird gezeigt wie man durch Verwendung eines Timers mehr oder weniger weiche Kamerabewegungen von Punkt zu Punkt hinbekommt.


    #include <a_samp>


    enum COORD {
    Float:coord_x,
    Float:coord_y,
    Float:coord_z
    }


    enum CAMMOVEMENT {
    steps,
    currentstep,
    Float:amount_x,
    Float:amount_y,
    Float:amount_z,
    Float:look_x,
    Float:look_y,
    Float:look_z,
    CameraMoveTimerID
    }


    forward Float:GetDistanceBetweenPoints(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2);
    forward CameraMoveTimer(playerid);


    new Float:gPlayerCameraPos[MAX_PLAYERS][COORD];
    new Float:gPlayerCamMovement[MAX_PLAYERS][CAMMOVEMENT];


    main() {


    }


    //-------------------------------------------------------------------


    public OnGameModeInit() {
    AddPlayerClass(0,2040.2158,1355.9232,10.6719,267.2625,0,0,0,0,0,0);
    return 1;
    }


    //-------------------------------------------------------------------


    public OnPlayerSpawn(playerid) {
    SetPlayerCameraPosEx(playerid, 2052.1799,1384.5262,10.6719,2040.2158,1355.9232,10.6719);
    MoveCamera(playerid, 2053.9204,1348.7130,18.6719, 2040.2158,1355.9232,10.6719, 0.2);
    return 1;
    }


    //-------------------------------------------------------------------


    stock MoveCamera(playerid, Float:dest_x, Float:dest_y, Float:dest_z, Float:lookat_x, Float:lookat_y, Float:lookat_z, Float:speed) {
    new Float:distance;

    distance = GetDistanceBetweenPoints(gPlayerCameraPos[playerid][coord_x],
    gPlayerCameraPos[playerid][coord_y],
    gPlayerCameraPos[playerid][coord_z],
    dest_x,
    dest_y,
    dest_z);

    gPlayerCamMovement[playerid][steps] = floatround(distance / speed);
    gPlayerCamMovement[playerid][currentstep] = 0;

    gPlayerCamMovement[playerid][amount_x] = (dest_x - gPlayerCameraPos[playerid][coord_x]) / gPlayerCamMovement[playerid][steps];
    gPlayerCamMovement[playerid][amount_y] = (dest_y - gPlayerCameraPos[playerid][coord_y]) / gPlayerCamMovement[playerid][steps];
    gPlayerCamMovement[playerid][amount_z] = (dest_z - gPlayerCameraPos[playerid][coord_z]) / gPlayerCamMovement[playerid][steps];
    gPlayerCamMovement[playerid][look_x] = lookat_x;
    gPlayerCamMovement[playerid][look_y] = lookat_y;
    gPlayerCamMovement[playerid][look_z] = lookat_z;

    gPlayerCamMovement[playerid][CameraMoveTimerID] = SetTimerEx("CameraMoveTimer", 50, 1, "i", playerid);
    return 1;
    }


    //-------------------------------------------------------------------


    stock SetPlayerCameraPosEx(playerid, Float:cam_x, Float:cam_y, Float:cam_z, Float:lookat_x, Float:lookat_y, Float:lookat_z) {
    SetPlayerCameraPos(playerid, cam_x, cam_y, cam_z);
    SetPlayerCameraLookAt(playerid, lookat_x, lookat_y, lookat_z);

    gPlayerCameraPos[playerid][coord_x] = cam_x;
    gPlayerCameraPos[playerid][coord_y] = cam_y;
    gPlayerCameraPos[playerid][coord_z] = cam_z;

    return 1;
    }


    //-------------------------------------------------------------------


    stock Float:GetDistanceBetweenPoints(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2) {
    return floatsqroot(floatpower(x1 - x2, 2) + floatpower(y1 - y2, 2) + floatpower(z1 - z2, 2));
    }


    //-------------------------------------------------------------------


    public CameraMoveTimer(playerid) {
    if (gPlayerCamMovement[playerid][currentstep] <= gPlayerCamMovement[playerid][steps] - 1) {
    gPlayerCameraPos[playerid][coord_x] = gPlayerCameraPos[playerid][coord_x] + gPlayerCamMovement[playerid][amount_x];
    gPlayerCameraPos[playerid][coord_y] = gPlayerCameraPos[playerid][coord_y] + gPlayerCamMovement[playerid][amount_y];
    gPlayerCameraPos[playerid][coord_z] = gPlayerCameraPos[playerid][coord_z] + gPlayerCamMovement[playerid][amount_z];

    SetPlayerCameraPos(playerid, gPlayerCameraPos[playerid][coord_x], gPlayerCameraPos[playerid][coord_y], gPlayerCameraPos[playerid][coord_z]);
    SetPlayerCameraLookAt(playerid, gPlayerCamMovement[playerid][look_x], gPlayerCamMovement[playerid][look_y], gPlayerCamMovement[playerid][look_z]);

    gPlayerCamMovement[playerid][currentstep]++;
    } else {
    KillTimer(gPlayerCamMovement[playerid][CameraMoveTimerID]);
    }

    return 1;
    }


    Um es in einen Gamemmode zu verwenden ist folgendes zu tun:

    • Zeilen 3 bis 25 oben in den Gamemode, unter den #include Anweisungen einfügen
    • Zeilen 48 bis 108 an das Ende vom Gamemode einfügen

    Dann könnt ihr folgende Funktionen benutzen:


    SetPlayerCameraPosEx
    stock SetPlayerCameraPosEx(playerid, Float:cam_x, Float:cam_y, Float:cam_z, Float:lookat_x, Float:lookat_y, Float:lookat_z)


    Eine Kombination von SetPlayerCameraPos() und SetPlayerCameraLookat(). Diese Funktion muss vor MoveCamera() aufgerufen werden, da hier die Kameraposition in einer Variable gespeichert wird, weiln diese später benötigt wird (es gibt keine GetCameraPos Funktion)


    MoveCamera
    stock MoveCamera(playerid, Float:dest_x, Float:dest_y, Float:dest_z, Float:lookat_x, Float:lookat_y, Float:lookat_z, Float:speed)


    Initialisiert einige Variablen und richtet einen Timer ein, der die Kamera letztendlich bewegt. Die lookat_* Parameter werden verwendet um die Kamera auf eine Koordinate zu richten, während diese bewegt wird.

    Firzen hat bereits Y_Less und kyeman gefragt (beides SA-MP Entwickler), bisher hat jedoch noch keiner geantwortet. Ich würde sagen wir warten da noch bis heute Abend..

    Wär ich auch dafür, stellt sich nur die Frage ob wir ein eigenes Wiki installieren oder kyeman freundlich fragen ob wir wie anderen Sprachen auch nen deutschen Bereich bei wiki.sa-mp.com bekommen..?

    Also dass du bei Alt+TAB gekickt wirst ist nicht gewollt, sondern eine unangenehme Begleiterscheinung..
    Naja da das System sowieso nicht wie erwartet funktioniert hab ich es auf dem gta-action Server erstmal ausgeschalten...

    Dieses Update betrifft nur den Server, Clients müssen nicht aktualisiert werden


    Aufgrund der letzten Flood-bot attacken gegen SA-MP Server hat das SA-MP Team die neue Version 0.2.1 r2 veröffentlicht. Dieses Update behebt einige Sicherheitsprobleme und soll anonyme bots davon abhalten auf den Server zu verbinden. Es wird dringend empfohlen auf diese Version zu aktualisieren!


    Nach dem Update wird der Server alle IP-Adressen von Bots, die versuchen sich auf den auf den Server zu verbinden, in das server-log schreiben.


    SA-MP Anti-cheat (SAC)


    Seit dem release der Version 0.2 wurde ein neues, sich selbst aktualisierende Anti-Cheat System in SA-MP getestet. Dieses ist nun aus dem Beta-Status raus und kann aktiviert werden indem folgende Anweisung in der Datei server.cfg hinzugefügt wird:


    Code
    anticheat 1


    Quelle: http://sa-mp.com/ (25. Juli 2007)

    Ingame Objekt-Editor Filterscript


    Das ist im Grunde eine stark erweitere Version von meinem Objekt-Editor Filterscript, das ich schon bei Youtube gezeigt hab: http://www.youtube.com/watch?v=vYu1Okk_STA


    Wichtig: Da nur Admins die Befehle verwenden können muss man sich vorher als Administrator einloggen!
    (/rcon login [kennwort])


    Befehle:

    • /oadd [modelid] [name] - Erstellt ein neues Objekt neben den Spieler und wählt es aus
    • /ocopy [name] - Erstellt eine exakte Kopie des gerade ausgewählten objekts und wählt es aus*
    • /odel - Löscht das gerade ausgewählte Objekt und löscht die auswahl*
    • /omode [m_xy|m_z|r_xy|r_z] - Wählt den Bearbeitungsmodus des gerade ausgewählten Objekts
      • m_xy - Auf Map-X/Y-Achse verschieben
      • m_z - Auf Map-Z-Achse verschieben
      • r_xy - An Objekt-X/Y-Achse drehen
      • r_z - An Objekt-Z-Achse drehen
    • /onext - Objekte in der Umgebung auflisten (Befehl ist aus irgendeinem Grund kaputt, wird in der nächsten Version behoben)
    • /osel [object name] - Wählt ein objekt mit dem angegebenen Namen aus (der Name der beim Erstellen/Kopieren angegeben wurde)
    • /ostick <distance> - Objekt an Spielerfigur befestigen, um es dann durch herumlaufen zu platzieren*
    • /orelease - Objekt vom Player lösen*
    • /ofaktor [faktor] - Bewegungs/Drehungs-Speed Multiplikator setzen*


    Befehle die mit einem * markiert sind können auch mit einem Menü verwendet werden, geöffnet werden kann es mit der "schleichen"-Taste


    --------------------------------------


    Wenn ein Objekt ausgewählt ist startet man die bearbeitung indem man sich kniet ("c"). Die Kamera fokusiert sich dann auf das Objekt, und das Objekt kann mit den Pfeiltasten oder WSAD verschoben werden.


    Um die Bearbeitung zu stoppen einfach nochmal C drücken um aufzustehen.


    --------------------------------------


    Geplante Dinge die noch behoben bzw. hinzugefügt werden:

    • Objekte in einem Mneü auflisten
    • /onext Befehl beheben
    • Objeke aneinander "kleben"
    • Irgendein Objekt hinzufügen dass man sieht welches Objekt ausgewählt ist
    • Komplette Übersetzung ins Englische :S
    • Einen /ohelp Befehl hinzufügen um eine Liste der Befehle angezeigt zu bekommen (thx to chepa; forum.sa-mp.com)
    • Eine Möglichkeit einbauen dass auch nicht-Admins das Script verwenden können (thx to chepa; forum.sa-mp.com)
    • Object-streaming um das Objekte-Limit zu umgehen (thx to mabako)
    • eure Ideen?;)

    --------------------------------------


    Hab ich irgendwas vergessen? Irgendwas unklar? Kritik? Einfach hier reinschreiben ;)


    mfg, breadfish


    Dateien:
    --------------------------------------
    PWN: http://78.46.83.74/patrick/bread_oed.pwn
    AMX: http://rapidshare.com/files/15…tor_by_breadfish.rar.html


    -------------------------------------

    Visual Pawn

    Visual Pawn ist eine alternative PAWN-IDE, die weit mehr Features bietet als die originale PAWNO-IDE, die mit dem Windows-Server mitgeliefert wird.
    Eine Feature-Beschreibung werde ich später noch nachliefern, bis dahin müsst ihr selbst herausfinden was das Dingen kann ;)


    Nichtsdestotrotz hier ein Link zum Setup und zwei Screenshots:


    Screenshot 1
    Screenshot 2


    ---------------------------------


    Link: http://samp.breadfish.de/wbb/i…=DownloadDBData&dataID=38


    ---------------------------------