Kleine GetDistanceBetweenPlayers Funktion, die ich letztens für ein kleines Testscript geschrieben hab. :>
Float:getDistanceBetweenPlayers(player1, player2);
Float:getDistanceBetweenPlayers(player1, player2) {
new Float:Pos[2][3];
GetPlayerPos(player1, Pos[0][0], Pos[0][1], Pos[0][2]);
GetPlayerPos(player2, Pos[1][0], Pos[1][1], Pos[1][2]);
new Float:distance = floatsqroot(
(Pos[0][0] - Pos[1][0]) * (Pos[0][0] - Pos[1][0]) +
(Pos[0][1] - Pos[1][1]) * (Pos[0][1] - Pos[1][1]) +
(Pos[0][2] - Pos[1][2]) * (Pos[0][2] - Pos[1][2])
);
return distance;
}
Nützliche Codeschnipsel
- breadfish
- Geschlossen
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
dcmd_a(playerid,params[])return dcmd_admin(playerid,params);
ist eine einfache Möglichkeint, bei dcmd einen Command doppelt zu vergeben.
/a und /admin bewirken jetzt das gleiche. -
stock kmh(Float:px,Float:py,Float:pz,Float:oldx,Float:oldy,Float:oldz)return floatround(floatsqroot(floatpower(floatabs(floatsub(px,oldx)),2)+floatpower(floatabs((floatsub(py,oldy)),2)+floatpower(floatabs(floatsub(pz,oldz)),2)))*11000/3200);
Gibt die Geschwindigkeit zurück, px,py und pz sind die Positionen des Spielers, oldx, oldy und oldz die Positionen vor einer Sekunde. Ungetestet -
ColorToHex(r,g,b,a)return((r & 0xff) << 24)| ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff);
Wandelt Rot-Grün-Blau-Transparenz sprich RGBA Farbcode in Hex um...
Anwendung...
SendClientMessage(playerid,ColorToHex(255,0,0,210),"Rot mit Transparenz Grad");
Viel Spaß :>
-
Das ja geil... was genau bewirkt der Operator << ?
-
<< Bit Verschiebung Links
>> Bit Verschiebung Rechts -
2high4me
kannst du auch HexToColor oder so, also dass dabei ein array rauskommt color[4] ? -
new Float:zzP[MAX_PICKUPS][3];
stock createPickupEx(zz1,zz2,zz3,zz4,zz5,zz6,zz7=-1)
{
new zz7=CreatePickup(zz1,zz2,zz3,zz4,zz5,zz6,zz7);
zzP[zz7][0]=zz3;
zzP[zz7][1]=zz4;
zzP[zz7][2]=zz5;
return zz7;
}
stock getPickupPos(zz1)return zzP[zz1];
#define CreatePickup createPickupEx
new Float:pickup_position[3]=getPickupPos(pickupid); -
stock GivePlayerHealth(playerid, Float:health)
{
new Float:Current;
GetPlayerHealth(playerid, Current);
if((Current)+(health) > 100) return SetPlayerHealth(playerid, 100);
SetPlayerHealth(playerid, ((Current)+(health)));
return 1;
}Funktion, um einen Spieler das Leben hinzuzufügen oder abzuziehen.
Beispiel: "GivePlayerHealth(playerid, 25.0); -
Anti Godmode
forward CheckFuckinHealth();
public CheckFuckinHealth()
{
for(new i = 0;i<MAX_PLAYERS;i++)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
new Float:health;
GetPlayerHealth(i,health);
SetPlayerHealth(i,health+1);
if(health!=health+1)Kick(i); // Hack
SetPlayerHealth(i,health-1);
}
return 1;
}Unter OnGameModeInit
Pawn-Quelltext
SetTimer("CheckFuckinHealth",1000,1);Spieler kriegt einmal mehr Health , kann der nicht gesetzt werden wird es als Hack erkannt
Vllt hilft es irgendwann jemanden oder so
Aso und was mich noch nervt immer eine neue Variable für GetPlayerHealth zu erstellen...
forward Float:GetPlayerHealthEx(playerid);
Float:GetPlayerHealthEx(playerid)
{
new Float:hhx;
GetPlayerHealth(playerid,hhx);
return hhx;
}For Example
SetPlayerHealth(playerid,GetPlayerHealthEx(playerid)+0.15); -
Hmm...ich glaub das funktioniert nicht ganz...
Nach der Logik her, müsstest du das Health, nachdem du es um 1 erhöht hast, nochmal mit einer anderen Variablen "getten". Sonst macht es nähmlich bei einem Spieler mit 80 HP:
if(80 != 81) Kick(i);Aso, kleiner Schreibfehler: Floath:
-
Floath ? Naja da bin ich aber anderer Meinung
Der Code stimmt so
Energie Abfragen
Energie +1
Wenn Jetzige Energie nicht Gleich Alte Energie + 1 dann > Kicken -
Habs kurz getestet und es kickt einen sofort beim Joinen. Irgendwie funzt es nicht...
-
Habs bisher selber nicht getestet sondern einfach so geschrieben wie es aussehen könnte , werds mal selber testen & verbessern
Jetzt fällt mir das mit Floath auch erst auf :> -
Kein codeschnipsel aber ein kleiner info
In SAMP 0.3 hab ich etwas kleines gemacht und rausgefunden, dass OnPlayerUpdate in 5 sekunden 80 mal, also in einer sekunde etwa 16 mal in der sekunde aufgerufen wird. -
OnPlayerUpdate wird immer dann aufgerufen sobald der Spieler irgendwas ändert z.b. die Position Waffe etc.
-
also ich hab beim testen ein bisschen gesspielt mitn waffen, bissl auto gefahren, und so und es ist immer 78, 76, 77, 80, und so geworden
-
Definitionen...
enum mover{
object_model,
Float:mX,
Float:mY,
Float:mZ,
Float:rX,
Float:rY,
Float:rZ,
Float:dX,
Float:dY,
Float:dZ,
Float:distanz,
Float:speedx,
statex,
obj_id}new objekte[][mover] = {
{model,x,y,z,rx,ry,rz,move x,move y,move z,0,-1}
};OnGameModeInit
for(new i = 0;i<sizeof(objekte);i++)objekte[i][obj_id] = CreateObject(objekte[i][object_model],objekte[i][mX],objekte[i][mY],objekte[i][mZ],objekte[i][dX],objekte[i][dY],objekte[i][dZ]);
Kommando
if(!strcmp(cmdtext,"/move"))
{
for(new j = 0;j<sizeof(objekte);j++)
{
if(!IsPlayerInRangeOfPoint(playerid,objekte[j][distanz],objekte[j][mX],objekte[j][mY],objekte[j][mZ]))continue;
if(!objekte[j][statex])
{
objekte[j][statex] = 1;
MoveObject(objekte[j][obj_id],objekte[j][dX],objekte[j][dY],objekte[j][dZ],objekte[j][speedx]);
}
else
{
objekte[j][statex] = 0;
MoveObject(objekte[j][obj_id],objekte[j][mX],objekte[j][mY],objekte[j][mZ],objekte[j][speedx]);
}
}
return 1;
}Die Objekte selber eintragen nach dem Muster...
CodeModel, X,Y,Z,RX,RY,RZ,Bewegen Nach X,Bewegen Nach Y,Bewegen Nach Z,Abstand zum Objekt,Geschwindigkeit danach Statex auf 0 & Objekt ID auf -1 das wars.
So könnt ihr mit Move alle Objekte bewegen sprich ihr könnt immer den gleichen Befehl verwenden & die Objekte bewegen sich in bestimmter Distanz
sie können geöffnet & geschlossen werden immer der gleiche Befehl... -
Hat einer etwas für "NAME betritt den Server" und verlässt?
Und habt ihr ein Anticheat? -
-