Du brauchst die Variable x nicht
Schreibe es einfach so:
stock GetPlayerTickCount(playerid) return GetTickCount() - y[playerid];
mfg.
Du brauchst die Variable x nicht
Schreibe es einfach so:
stock GetPlayerTickCount(playerid) return GetTickCount() - y[playerid];
mfg.
Oh, stimmt. Habs geändert, danke. :'D
Grade mal eingefallen:
stock Float:GetFacingAngle(playerid)
{
new Float:a;
if(IsPlayerInAnyVehicle(playerid)) GetVehicleZAngle(GetPlayerVehcileID(playerid), a);
else GetPlayerFacingAngle(playerid, a);
return a;
}
stock r_mysql_Insert(table[], string[], format2[], {Float,_}:...)
{
r_mysql_connected();
new start = 3;
new Query[128];
new Query1[128];
new Query2[128];
new str[10][128];
new in[10];
new Float: pi[10];
new f[10][32];
r_split(string, f, ',');
for(new i = 0; i < strlen(format2); i++)
{
switch(format2[i])
{
case 's':
{
for(new i2 = 0; i2 < 128; i2++)
{
str[i][i2]=getarg(i+start, i2);
if(!getarg(i+start, i2+1))
{
break;
}
}
}
case 'd':
{
in[i]=getarg(i+start, 0);
}
case 'f':
{
pi[i]=Float:getarg(i+start, 0);
}
}
}
for(new i = 0; i < strlen(format2); i++)
{
switch(format2[i])
{
case 's':
{
if(i == 0)
{
format(Query1, sizeof(Query1), "`%s`", f[i]);
format(Query2, sizeof(Query2), "'%s'", str[i]);
}
else
{
format(Query1, sizeof(Query1), "%s,`%s`", Query1, f[i]);
format(Query2, sizeof(Query2), "%s,'%s'", Query2, str[i]);
}
}
case 'd':
{
if(i == 0)
{
format(Query1, sizeof(Query1), "`%s`", f[i]);
format(Query2, sizeof(Query2), "%d", in[i]);
}
else
{
format(Query1, sizeof(Query1), "%s,`%s`", Query1, f[i]);
format(Query2, sizeof(Query2), "%s,%d", Query2, in[i]);
}
}
case 'f':
{
if(i == 0)
{
format(Query1, sizeof(Query1), "`%s`", f[i]);
format(Query2, sizeof(Query2), "%f", pi[i]);
}
else
{
format(Query1, sizeof(Query1), "%s,`%s`", Query1, f[i]);
format(Query2, sizeof(Query2), "%s,%f", Query2, pi[i]);
}
}
}
}
format(Query, sizeof(Query), "INSERT INTO `%s`(%s) VALUES (%s)", table, Query1, Query2);
mysql_query(Query);
return 1;
}
stock r_split(const strsrc[], strdest[][], delimiter) //Wiki
{
new i, li;
new aNum;
new len;
while(i <= strlen(strsrc))
{
if(strsrc[i] == delimiter || i == strlen(strsrc))
{
len = strmid(strdest[aNum], strsrc, li, i, 128);
strdest[aNum][len] = 0;
li = i+1;
aNum++;
}
i++;
}
return 1;
}
Anwendung: r_mysql_Insert(table[], string[], format2[], {Float,_}:...)
r_mysql_Insert("Spieler", "Name,Pos,id", "sfd", "RFT", 6.0, 7);
Würde nun ein Feld in der Tabelle Spieler mit folgenden Werten anlegen:
Name = RFT;
Pos = 6.000000
id = 7;
Sollte mit allen gängigen SQL Systemen funktionieren.
LG RFT
Sehr Simple spart aber viel an publics bzw. stocks die man sonst nimmt und dem ganzen Koordinaten Kopieren Hier:
forward MoveDynamicTorRunter(tor);
public MoveDynamicTorRunter(tor)
{
new Float:x,Float:y, Float:z, Float:rrx, Float:rry, Float:rrz;
GetDynamicObjectPos(tor,x,y,z);
GetDynamicObjectRot(tor,rrx,rry,rrz);
MoveDynamicObject(tor, x, y, z-10.00, 3.50, rrx, rry, rrz);
SetTimerEx("MoveDynamicTorHoch",6000,false,"d",tor);
return 1;
}
forward MoveDynamicTorHoch(tor);
public MoveDynamicTorHoch(tor)
{
new Float:x,Float:y, Float:z, Float:rrx, Float:rry, Float:rrz;
GetDynamicObjectPos(tor,x,y,z);
GetDynamicObjectRot(tor,rrx,rry,rrz);
MoveDynamicObject(tor, x, y, z+10.00, 3.50, rrx, rry, rrz);
return 1;
}
Anwendung bei Mir(Beispiel)
Die meisten nutzen zwar ein Money system aber kann man ja ändern
stock SetPlayerMoney(playerid, cash)
{
RemovePlayerMoney(playerid);
return GivePlayerMoney(playerid, cash);//Geldsystem anpassen
}
Hier mal was für euch wie ihr euch das ganze abfragen ob er so viel Geld hat spart:
stock CheckGeld(playerid, money)
{
if(GetPlayerMoney(playerid) <= money)return 1;
else if(GetPlayerMoney(playerid) > money)return 0;
}
Sehr Simple Aber nützlich manchmal
Hier noch eine möglichkeit für ein eigenes Server geld
stock GivePlayerGELDEINHEIT(playerid, a)
{
MONEYVARRIABLE += a;
return 1;
}
So gehen natürlich auch minus rechnungen ein Beipiel das es geht:
die Varriable ist jetzt mal 100 und a ist mal minus 50(-50)
100+(-50) = 50
den wenn ihr in Mathe aufgepasst habt:
+(-) = -
-(+) = -
+(+) = +
- (-) = +
MFG Arendium
@Arendium: nimm es nicht persönlich, aber deine Funktionen sind weder brauchbar noch sinnvoll. Im Grunde macht es eigentlich nur noch mehr Arbeit.
Lust auf Weihnachtsmütze? Kein problem!
new Weihnachten[MAX_PLAYERS];
CMD:Weihnachts(playerid, params[])
{
if(!Weihnachten[playerid])
{
Weihnachten[playerid] = 1;
SetPlayerAttachedObject(playerid, 3, 19065, 2, 0.120000, 0.040000, -0.003500, 0, 100, 100, 1.4, 1.4, 1.4);
SendClientMessage(playerid, 0xAFAFAFAA, " (info) ");
SendClientMessage(playerid, 0xAFAFAFAA, "{808080}» {AFAFAF}blablabla");
}
else
{
Weihnachten[playerid] = 0;
if(IsPlayerAttachedObjectSlotUsed(playerid, 3)) RemovePlayerAttachedObject(playerid, 3);
SendClientMessage(playerid, 0xAFAFAFAA, "{808080}» {AFAFAF}blabla");
}
return 1;
}
stock SetPos(playerid, Float:x,Float:y,Float:z,Float:a)
{
SetPlayerPos(playerid,x,y,z);
SetPlayerFacingAngle(playerid, a);
return 1;
}
ist dafür da das man kein SetPlayerFacingAngle mehr nutzen muss
Alles anzeigenstock SetPos(playerid, Float:x,Float:y,Float:z,Float:a)
{
SetPlayerPos(playerid,x,y,z);
SetPlayerFacingAngle(playerid, a);
return 1;
}
ist dafür da das man kein SetPlayerFacingAngle mehr nutzen muss
das geht noch kompakter
#define SetPos(%0,%1,%2,%3,%4) SetPlayerPos(%0,%1,%2,%3); SetPlayerFacingAngle(%0, %4)
daher braucht man keine extra stock funktion schreiben
und um noch was neues beizutragen eine einfach konvertierung der sekunden in minuten und sekunden
stock minutes (sec) {
return printf("%02d:%02d", (sec/60), sec % 60);
}
code only
(sec/60), sec % 60
nix großes aber klein und fein
Ok hast recht aber....
stocks kapieren die meisten Anfänger schon das von dir denke ich nicht...
Ok hast recht aber....
stocks kapieren die meisten Anfänger schon das von dir denke ich nicht...
was gibts am define nicht zu kapieren ?
Hier gehts um nützliche Codeschnipsel nicht darum das die Leute das verstehen
schau doch zum beispiel die funktion von RTF an
das versteht auch kein anfänger was bei dem code genau passiert und was soll an dem define so schwer zu verstehen sein?
Simpler "Ausrauben"-Befehl
Da ich keine Verwendung mehr für diesen Befehl habe, wollte ich ihn einfach mal veröffentlichen. Er ist eigentlich ganz simpel aufgebaut und es sind auch alle "Modifikationen" von meiner Seite her eingefügt worden. Es ist nicht für GF Edit's gedacht, sondern eher für Selfmades. Beim GF müsst ihr es halt so weit nötig anpassen.
Kommentare wie "ressourcenfressend", "nicht so simpel wie du sagst", (...) könnt ihr eigentlich direkt stecken lassen, da nicht jeder unbedingt "eure" Methode der Erstellung von Befehlen verwendet, wie gesagt: wer ihn haben will, kann ihn sich nehmen wer nicht, lässt es halt sein.
#info: Falls Fehler auftauchen, dann sollte man mich bitte per PN darüber informieren.
#Code
#define HGELB 0xFFEC8BFF
#define HBLUE 0x1C86EEFF
#define ROT 0xFF0000FF
#define GOLD 0xFFDEADFF
#define SendClientMessage SCM
new beraubt[MAX_PLAYERS];
ocmd:ausrauben(playerid,params[])
{
new Float:X,Float:Y,Float:Z;
new pID,string[128],string2[128];
new rand = random(10000);
GetPlayerPos(pID,X,Y,Z);
if(!IsPlayerConnected(pID))return SCM(playerid,ROT,"Der Spieler ist nicht online.");
if(!IsPlayerInRangeOfPoint(pID,2.0,X,Y,Z))return SCM(playerid,ROT,"Du bist nicht in der Nähe des Opfers.");
if(sscanf(params,"u",pID))return SCM(playerid,HBLUE,"Benutze: /ausrauben [Spieler/ID]");
/*if(GetPVarInt(playerid,"Job") == 5)*/
{
if(beraubt[playerid] == 0)
{
GivePlayerMoney(pID,-rand);
GivePlayerMoney(playerid,rand);
format(string,sizeof(string),"Du hast %s beklaut, Beute: %i$.",SpielerName(pID),rand);
format(string2,sizeof(string),"Dir wurden %i$ von einem Taschendieb geklaut.",rand);
SendClientMessage(playerid,GOLD,string);
SendClientMessage(pID,GOLD,string2);
SetTimerEx("beraubttimer",180000,0,"i",playerid);
SendClientMessage(playerid,HGELB,"Du musst jetzt 3 Minuten warten bis du wieder jemanden ausrauben kannst.");
beraubt[playerid] = 1;
}
else
{
SendClientMessage(playerid,ROT,"Du musst noch warten.");
}
}
/*else
{
SendClientMessage(playerid,ROT,"Du bist kein Taschendieb.");
}*/
return 1;
}
forward beraubttimer(playerid);
public beraubttimer(playerid)
{
beraubt[playerid] = 0;
}
Grüße, Felix
Alles anzeigenGrade mal eingefallen:
stock Float:GetFacingAngle(playerid)
{
new Float:a;
if(IsPlayerInAnyVehicle(playerid)) GetVehicleZAngle(GetPlayerVehcileID(playerid), a);
else GetPlayerFacingAngle(playerid, a);
return a;
}
Alles anzeigenstock SetPos(playerid, Float:x,Float:y,Float:z,Float:a)
{
SetPlayerPos(playerid,x,y,z);
SetPlayerFacingAngle(playerid, a);
return 1;
}
ist dafür da das man kein SetPlayerFacingAngle mehr nutzen muss
Kann man auch noch direkt die hier hinterher drücken :P:
GetPlayerPosEx
stock GetPlayerPosEx(playerid, Float:x, Float:y, Float:z, Float:a)
{
if(IsPlayerInAnyVehicle(playerid)) GetVehiclePos(GetPlayerVehicleID(playerid), x, y, z), GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
GetPlayerPos(playerid, x, y, z), GetPlayerFacingAngle(playerid, a);
return 1;
}
SetPlayerPosEx
stock SetPlayerPosEx(playerid, Float:x, Float:y, Float:z, Float:a)
{
if(IsPlayerInAnyVehicle(playerid)) SetVehiclePos(GetPlayerVehicleID(playerid), x, y, z), SetVehicleZAngle(GetPlayerVehicleID(playerid), a);
SetPlayerPos(playerid, x, y, z), SetPlayerFacingAngle(playerid, a);
return 1;
}
Für die, die es evtl. gebrauchen könnten:
stock GetName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
return name;
}
Anwendungsbeispiel:
new string[128];
format(string,sizeof(string),"Hey, mein Name lautet: %s",GetName(playerid));
SendClientMesage(playerid,-1,string);
Alles anzeigenFür die, die es evtl. gebrauchen könnten:
stock GetPlayerName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
return name;
}
Anwendungsbeispiel:
new string[128];
format(string,sizeof(string),"Hey, mein Name lautet: %s",GetPlayerName(playerid));
SendClientMesage(playerid,-1,string);
GetPlayerName kannst du nicht erneut definieren, da es die Funktion bereits gibt, wenn dann so:
stock GetName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
return name;
}
Ups, nicht an die standard Funktion gedacht
Liegt an der Uhrzeit. Danke das du mich verbessert hast
Alles anzeigenGetPlayerName kannst du nicht erneut definieren, da es die Funktion bereits gibt, wenn dann so:
stock GetName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
return name;
}
das ganze geht am ressourcensparendsten, wenn man die namen in einer array speichert sobald ein spieler das game betrettet.