stock create3DTextPickup(model,type,color,Float:opaX,Float:opaY,Float:opaZ,Text[],Virtualworld,Float:DrawDistance,testLOS)
{
Create3DTextLabel(Text[],color,opaX,opaY,opaZ,DrawDistance,Virtualworld,testLOS);
return CreatePickup(model,type,opaX,opaY,opaZ,Virtualworld);
}
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
-
-
Hier mal ein paar von mir geschriebene Funktionen, vllt braucht sie jemand
bIsNumeric(const str[])
{
new b;
while(b<strlen(str) && (str[b] >=48 && str[b] <=57))b++;
return (strlen(str)!=b) ? (0) : (1);
}- Checkt ob der String/Text eine Nummer ist
checkDate(const str[],const look = '/')
{
new count,swt;
while(count<strlen(str) && (str[count] >=48 && str[count] <=57 || str[count] == look))
{
if(str[count] == look)
{
if(count && !swt)swt = 1;
else if(count == 5 && swt)swt=2;
else break;
}
count++;
}
return (count==10) ? (1) : (0);
}- Checkt das Format bzw. ob es ein Datum ist oder nicht
- Apzektiert z.b. 21/09/1991 das Zeichen bzw. den Separator könnt ihr selber festlegen, Standard ist es /
- Nimmt nur Nummern an sprich keine Buchstaben Formate sprich AA/00/1991 = False
Viel Spaß damit -
while(b<strlen(str) && (str[b] >=48 && str[b] <=57))b++;
Würde ziemlich oft die strlen Funktion aufrufen. So wärs schlauer:
while((b != '\0') && (str[b] >= 48 && str[b] <= 57)) b++; -
Wenn dann
(str[b] != '\0')
-
stock Betrag(int)
{
if(int >= 0) return int;
return (int * (-1));
}Anwendungsbeispiel:
printf(" Betrag von 8 ist %d, Betrag von -8 ist auch %d",Betrag(8),Betrag(-8));Recht einfache Sache, wofür man das jetzt brauchen könnte weis ich auch nicht...
-
stock Betrag(int)return((int>=0)?(int):(int*(-1)));
-
Klar kann mans auch in eine Zeile schreiben und ? : benutzen, aber da fehlt mir dabei der Überblick
-
Hier mal eine Funktion die alles zurückgibt was nach einem bestimmten Text gefunden wird ,,Substring´´
substr(dest[],const text[],const starttext[],bool:ignorecase = false,startpos = 0)
{
new opos;
new start = strfind(text,starttext,ignorecase,startpos);
if(start==-1)return 0;
start+=strlen(starttext);
while(text[start])
{
dest[opos] = text[start];
opos++;
start++;
}
return 1;
}Hab ich gestern im Englischen rausgestellt, vllt braucht es hier auch jemand...
new teststring[64];
teststring = "Dont See Me/Hello World";
new output[20];
substr(output,teststring,"/");Viel Spaß damit...
-
new jmin=1;
stock jede_minute_timer()
{
new time[3];
gettime(time[0],time[1],time[2]);
time[2]=60-time[2];
SetTimer("jMinute",time[2]*1000,0);
}
public jMinute()
{
if(jmin)
{
SetTimer("jMinute",60000,1);
jmin=0;
}//code...
}
Benutzung:
jede_minute_timer();
startet einen Timer, der immer um XX:XX:00 Uhr aufgerufen wird. -
substr_count(substring[],string[],bool:ignorecase = false,startpos = 0)
{
new start = strfind(string,substring,ignorecase,startpos);
new ncount;
while(start>-1)
{
start = strfind(string,substring,ignorecase,start+strlen(substring));
ncount++;
}
return ncount;
}zählt die Texte die übereinstimmen mit dem gesuchten , diese Funktion habe ich geschrieben da jemand im Englisch es nicht hingekriegt hat, diese Funktion sollte aber
nun ihren zweckt erfüllen, die gibt die Anzahl der gefundenen Teile an.printf("%d Count",substr_count("tst","tst tst tst"));
Viel Spaß wiedermal
// Edit : Noch ne neue Funktion, hatte da php im Hintergedanken
stock checkstr(const string[],const otherstring[])
{
new bcount,check;
while(string[bcount] && otherstring[bcount])
{
if(string[bcount] == otherstring[bcount])check++;
bcount++;
}
return ((check*100)/max(strlen(string),strlen(otherstring)));
}Prüft in wie Fern sich der Text schneidet sprich in wie Fern er übereinstimmt & gibt dann den Prozentwert wieder
Und ein Update meiner GetStr Funktion
stock GetStr(const string[],const count,delim = ' ')
{
new jpos,atmCount,lastct,incut[128],cpos;
while(string[jpos] && atmCount <=count)
{
if(string[jpos] == delim)
{
if(!lastct)atmCount++;
lastct = 1;
}
else
{
lastct = 0;
if(atmCount == count)
{
incut[cpos] = string[jpos];
cpos++;
}
}
jpos++;
}
return incut;
}printf("%s",GetStr("Hallo Welt",0)); // Gibt Hallo wieder da Parameter 0 , 1 wäre Welt usw.
Kann für Kommandos mit Parameter verwendet werden oder andere Direkte Split Angelegenheiten.
-
#define ShowDialogForPlayer(%0,%1,%2,%3,%4,%5,%6,%7) new stringc[256]; format(stringc, sizeof(stringc), %4, %5); ShowPlayerDialog(%0, %1, %2, %3, stringc, %6, %7)
Damit kann man ein Dialog direkt formatieren. Info: Funktioniert nicht, wenn ein return davor ist!Beispiel:
ShowDialogForPlayer(playerid, 1, 0, "Info", "%s : %d %d", "Meine Wunderzahlen", 1, 2, "Ok", "Abbrechen"); -
forward Float:getGround(forplayerid,Float:x,Float:y);
Float:getGround(forplayerid,Float:x,Float:y)
{
new Float:hh[6];
GetPlayerPos(forplayerid,hh[0],hh[1],hh[2]);
SetPlayerPosFindZ(x,y,561.4401);
GetPlayerPos(forplayerid,hh[3],hh[4],hh[5]);
SetPlayerPos(forplayerid,hh[0],hh[1],hh[2]);
return hh[5];
}Wenn es so Funktioniert wie gedacht http://wiki.sa-mp.com/wiki/SetPlayerPosFindZ sollte meine Funktion die Z Position für das Land ermitteln & zurückgeben,
geht, naja hab die Funktion gerade mal so entdeckt, meine Funktion sollte da irrelevant sein SetPlayerPosFindZ sollte den nächsten Boden unter der vorgegebenen Höhe ermitteln & den
Spieler Direkt auf den Boden setzen, vllt wusste es ja jemand noch nicht.//EDIT : Und wieder was aus Langeweile für RP/RL Server
CheckName(playerid,Vorname_Len = 4,Nachname_Len = 4)
{
new lname[MAX_PLAYER_NAME],count[2],switchx;
GetPlayerName(playerid,lname,sizeof lname);
for(new i = 0;i<strlen(lname);i++){
if(lname[i]!=0x5F)count[switchx]++;
else switchx++;
}
return (count[0]>=Vorname_Len && count[1]>=Vorname_Len);
}Hab ich gemacht da ich diesen Check bei vielen Skripts schon gesehen habe jedoch etwas lang & Umständlich
Anwendung
new testrueckgabe = CheckName(playerid,4,3);
/* Minimal 4 Zeichen im Vornamen + Minimal 3 Zeichen im Nachnamen sprich test_bla
Ein Zeichen weniger im Vor/Nachnamen = Falsch */ -
Ich habe mein Check so gemacht:
stock SpielerName(playerid)
{
new name_name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name_name, MAX_PLAYER_NAME);
return name_name;
}stock IsInvalidName(playerid)
{
new inv_name = strfind(SpielerName(playerid), "_", true);
if(inv_name < 3) return 1;
new string[24];
format(string, sizeof(string), "%s", SpielerName(playerid));
if(string[inv_name+3] == 0) return 1;
return 0;
} -
Noch kürzerer Vorname_Nachname Checker
CheckName(const str[],vorname = 4,nachname = 4)
{
new pos = strfind(str, "_", true);
return (pos!=-1 && pos >=vorname && strlen(str[pos+1]) >= nachname);
}new testrueckgabe = CheckName(playerid,4,3);
-
stock chatvollspam(playerid,text[])
{
for(;;)SendClientMessage(playerid,0xFFFF22FF,text);
} -
Heißt das hier nicht Nützliche Codeschnipsel?
Das spammt den Chat zu bis der Spieler crasht. Und der nächste Spieler, der mit der ID on kommt, wird nochmal gespammt -
Vllt. Crasht auch der Server als erstes. Ist sone Art kampf zwischen Client und Server, wer länger aushält. Toll oder?
-
Vllt. Crasht auch der Server als erstes. Ist sone Art kampf zwischen Client und Server, wer länger aushält. Toll oder?
xD *lachflash* -
-
Extreeeem nützlich so eine Unendliche Schleife x(