Ich habe nochmal eine Funktion hinzugefügt, damit man auch die Parameter von der Ursprungs Funktion nutzen kann ![]()
mfg. ![]()
Ich habe nochmal eine Funktion hinzugefügt, damit man auch die Parameter von der Ursprungs Funktion nutzen kann ![]()
mfg. ![]()
Einmal nur kurz am Rande, wie kann ich denn ein Wort vom Textdraw farbig machen?
Habe es schon mit einem HTML Code versucht, so wie es auch bei Messages klappt, geht aber nicht.
Ne nicht mit HTML sondern einfach so:
mfg. ![]()
Wie sieht es denn aus, wenn ich das ganze in einer Schleife mache? Dann wird der Timer ja auch immer wieder gesetzt...
Das ist nicht für Schleifen ausgelegt...nur für Localen Code der 1. Ebene ![]()
Genauso if-Bedingungen oder ähnliches ist hier nicht möglich...man muss dafür dann halt eine neue Instanz aufrufen.
mfg. ![]()
Guten Mittag euch allen,
ich habe mich mal ein bisschen umgeschaut und gesehen, dass einige Personen nach einer sleep Funktion in Pawn suchen.
Doch wie sie festgestellt haben gibt es sowas wie in Java (Thread.sleep(1000);) nicht...
Also habe ich mal so eine Funktion geschrieben:
1. Beispiele:
Also, so funktioniert die Funktion:
public OnGameModeInit() //Mal als Beispiel genommen
{
print("test"); //Wird normal ohne Verzögerung aufgerufen
sleep(1000)<a>; //Hier findet ein Timeout von 1000ms statt
print("test2"); //Dann wird das geprintet
sleep(1000)<b>; //Wieder Timeout von 1000ms
print("test3"); //und dann wird geprintet
return 1;
}
//Oder wenn man Parameter noch übergeben will
public OnPlayerConnect(playerid) //Mal als Beispiel
{
SendClientMessage(playerid,-1,"hi");
pSleep(1000)<a,"i",playerid>; //Unten ist eine nähere Erklärung
SendClientMessage(playerid,-1,"hallo nach 1000ms!");
}
2. Nähere Funktions Erklärung
Also, das sleep(1000)...sollte jedem klar sein
sleep so heißt halt die Funktion und 1000 ist das Attribut für die Millisekunden von dem Timeout ![]()
Was ich dann noch gemacht habe, z.B. dieses <a> steht für den Namen des Callbacks der Aufgerufen wird, sobald der Timeout zuende ist!
Wichtig: Das darf nicht doppelt vorkommen, man kann in einem Script nicht 2x <a> machen oder 2x <b>, diese Reihe weiter fortführen!! Egal wie! Nichts doppelt machen!
Einfach so: <a>, dann <b>, dann <c>,...usw und wenn man dann 26 Buchstaben durch hat, dann <aa>, <bb> usw ![]()
Zu pSleep, ist zu sagen, dass mit dem "i" ist halt wie bei SetTimerEx und steht für den Typ der Variable (i = Integer) und danach kommen halt die ganzen Variablen.
//Wenn man mehr Variablen übergeben will, macht man einfach:
pSleep(1000)<a,"ii",playerid,x);
3. Source Code:
Der Source Code beschränkt sich nur auf ein kleines Makro, was ihr oben im Script einfügen könnt und sieht folgender maßen aus:
//(c) by Kaliber
#define sleep(%0)<%1>; SetTimer("@sleep_"#%1#,%0,0); return 1;}\
@sleep_%1();@sleep_%1() {
#define pSleep(%0)<%1,%2,%3>; SetTimerEx("@sleep_"#%1#,%0,0,%2,%3); return 1;}\
@sleep_%1(%3);@sleep_%1(%3) {
4. Schlusswort
Ich würde mich über ein kleines Feedback freuen ![]()
mfg.
//Edited: pSleep
Es ist vil nicht platz sparend aber wenn ich eine schleife mit vielen objecten habe wird das nicht viel resosen verbauchen oder wie das heißt ?
oder wird beides gleich viel verbrauchen ?
was währe am besten ?
Es heißt Ressourcen ![]()
und es ist sparender wenn du nur 1ne Variable machst, anstatt 5 oder so ![]()
Was irgendwie ja auch logisch ist...dann wird nämlich nur 1ne Variable im Speicher angelegt und nicht 5...
Wieso ist eine Schleife nicht passend?
Ist sie ![]()
Wieso wird dafür mehr Zeit verbraucht?
Nun, es wird mehr Zeit verbrauchst...aber wir reden hier von 0.01ms oder so
Und das nur 1x nämlich wenn der Callback OnGameModeInit aufgerufen wird...
Abgesehen davon, dass es 0.001ms länger dauert, hat man Zeilen gespart, es ist eine schönere Übersicht und man kann Problemlos auch noch 99 weitere Texturen dran hängen ![]()
//Edit:
Was H4rd_B4se am Ende seines Beitrags geschrieben hat, ist auch eine sehr elegante Lösung! ![]()
mfg. ![]()
Auch zwischen PHP und C ist nicht wirklich viel Unterschied.
Ehm...doch ![]()
Einfach so:
Create3DTextLabel("{FF4000}[ Kaufmenü ]\n{FFFFFF}Benutze '/kaufen'",weis,-28.2701,-89.9557,1003.5469,20,1);
mfg. ![]()
Tut mir leid, bin noch zu sehr an Java gewöhnt, aber im Prinzip gibt beides das selbe aus.
Nein nicht direkt ![]()
double gibt z.B. in Java auch Kommazahlen aus, sprich 1.23 ![]()
Aber %d gibt eben nur ganze Integer aus ... und mit %f muss man Floats ausgeben ![]()
mfg. ![]()
Erstmal ist der Name nicht vom Datentyp double, sondern String, weshalb du auch mit diesem arbeiten musst.
%d steht nicht für double sondern für dezimal.
und bei deinem Beispiel ist die Variable string überflüssig...da kann man direkt name verwenden ![]()
mfg. ![]()
...ich fehle
Böser max! ![]()
Das was man am pRP Script halt bearbeiten muss: ForumUrl,BindIP,TSIp...
Hast du evtl die Makros leer gemacht und dann returnt?
Sprich sowas:
#define test ""
//In irgendeiner Funktion oder Callback
return test;
Dann würde das nämlich auch crashen ![]()
mfg. ![]()
Das funktioniert nicht, da OnPlayerConnect nur dann aufgerufen wird, wenn ein Spieler auf den Server connected und er sich nicht an der Position 359.2563,183.4888,1008.3828 befindet.
Sprich du müsstest permanent abfragen ob sich der Spieler an dieser Position befindet...das macht man über einen Timer und ich bin mir sicher, dass in deinem Script schon solche Funktionen aufgerufen werden über einen Timer. Schau doch mal, wo die anderen IsPlayerInRangeOfPoint abfragen gemacht werden und schreibe es dazu ![]()
mfg. ![]()
Schreib deinen Befehl mal so:
ocmd:heal(playerid,params[]) {
if(!MedicUS[playerid]) return scm(playerid,c_error,"Du bist kein Medic.");
if(!params[0]) return scm(playerid,c_error,"Verwendung: /heal [spielerid]");
new Float:Q[3],pID=strval(params);GetPlayerPos(playerid,Q[0],Q[1],Q[2]);
if(!IsPlayerInRangeOfPoint(pID,2.5,Q[0],Q[1],Q[2])) return scm(playerid,c_error,"Du bist nicht in der Nähe eines Teampartners!");
new string[128],name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(string,sizeof(string),"Du wurdest von Medic {00E6D7}%s {FFFFFF}geheilt!",name),scm(pID,-1,string);
GetPlayerName(pID,name,sizeof(name));
format(string,sizeof(string),"Du hast Soldat {00E6D7}%s {FFFFFF}geheilt!",name),scm(playerid,-1,str2);
return SetPlayerHealth(pID,100);
}
mfg. ![]()
Schreib das mal so:
new nachricht[64], ip[16];
GetPlayerIp(playerid,ip,sizeof(ip));
format(nachricht,sizeof(nachricht),"Herzliche Willkommen %s!(%i) Dein Account wurde nicht gefunden! Bitte erstell einen! /n Zur Sicherheit wurde deine IP (%s) gespeichert!",Spielername(playerid),playerid,ip);
mfg. ![]()
Wie kann ich es machen, das bei Inputfeldern der alte Text nicht mehr angezeigt wird sobald ich darauf klicke?
Einfach so:
mfg. ![]()
Bei mir funzt auch wieder alles ![]()
//Closed
Guten Abend euch allen, wenn ich auf Youtube gehen will, bekomme ich folgenden Error:
Ich wollte mal fragen ob das bei euch auch so ist?
mfg. ![]()
public leben()
{
for(new i = 0; i<MAX_PLAYERS; i++)
SetPlayerHealth(i, -5);
return 1;
}
So würden alle Leute auf dem Server nach 50sek -5 Leben haben...bzw sterben ![]()
So muss man es machen:
public leben() {
new i,Float:health;
for(; i<MAX_PLAYERS; i++) if(IsPlayerConnected(i)) GetPlayerHealth(i,health),SetPlayerHealth(i, health-5.0);
return 1;
}
mfg. ![]()
Wie zB. verwendet man denn makros mal blöd gefragt?
Dazu hatte ich mal was kleines geschrieben gehabt:
[ SCRIPTING ] Directives / Makros (pre-processor)
mfg. ![]()