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
Zwei Dinge:
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:
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.
Wir haben btw auch [ youtube] und [ myvideo] Tags
Video gefällt mir auch recht gut.
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:
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:
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:
--------------------------------------
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
-------------------------------------
Danke ![]()
In diesem Thread können btw auch Bugmeldungen und Erweiterungsvorschläge gepostet werden.
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:
---------------------------------
Link: http://samp.breadfish.de/wbb/i…=DownloadDBData&dataID=38
---------------------------------