CallLocalFunction("deletebox", "i", playerid);
CallRemoteFunction wenn die Funktion in einem anderen Filterscript ist.
CallLocalFunction("deletebox", "i", playerid);
CallRemoteFunction wenn die Funktion in einem anderen Filterscript ist.
Wenn ich jetzt eine Schleife in zB OnPlayerDisconnect erstelle, und in der Schleife return 1; verwende, wird komplett alles nach der Schleife unterbrochen, richtig?
Wenn ich nun ein break in der Schleife verwendet, wird nur die Schleife unterbrochen und der Rest unter der Schleife ausgeführt, oder?
Wenn ich jetzt eine Schleife in zB OnPlayerDisconnect erstelle, und in der Schleife return 1; verwende, wird komplett alles nach der Schleife unterbrochen, richtig?
Wenn ich nun ein break in der Schleife verwendet, wird nur die Schleife unterbrochen und der Rest unter der Schleife ausgeführt, oder?
Korrekt.
Hi, kann mir jemand bei meinem Timer helfen? Habe es mittlerweile so, aber es updated sich nicht und zeigt keine korrekten Werte an:
forward boxcountdown(playerid);
public boxcountdown(playerid)
{
new str[144];
if(countdown[playerid] > gettime())
{
countdown[playerid]--;
format(str, sizeof(str),"%d", countdown[playerid]-gettime());
Update3DTextLabelText(boxlabel[playerid], 0x00FFFFFF, str);
}
if(countdown[playerid] == 0)
{
Delete3DTextLabel(boxlabel[playerid]);
countdown[playerid] = 30;
return 1;
}
return 1;
}
Im Befehl:
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
box[playerid] = CreateDynamicObject(3798, x, y+3, z-1.0, 0.0, 0.0, 0.0, -1, -1, -1, 200.0, 200.0);
boxlabel[playerid] = Create3DTextLabel("0:30", 0x00FFFFFF, x,y+3,z, 25, 0, 0);
SendClientMessage(playerid, -1, "Box {00FF00}created");
PlayerPlaySound(playerid, 1150, 0.0, 0.0, 0.0);
blockboxspawn[playerid] = true;
deleteboxes[playerid] = SetTimerEx("deletebox", 30*1000, 0, "i", playerid);
SetTimerEx("boxcountdown", 1000, false, "i", playerid);
boxamount[playerid]--;
countdown[playerid] = gettime()+30;
Hatte vor, dass sich der 3D Text updatet und anzeigt wie lange das Objekt das ich erstellt habe noch auf dem Boden bleibt bevor es gelöscht wird, aber ich mache einiges falsch :x
Warum mit gettime und nicht einfach ohne ?
Also Countdown nur auf 30 Sek und die mit -- einfach auf null zählen?
Der Timer unten würde ich nach dem setzen vom Countdown Wert erst starten.
Und er solle sich Wiederholen also true statt false.
Sonst zieht er ja nur einmal was ab.
Und pack den Timer in einer Variable den du dann sobald der Counter auf 0 ist oder weniger killst (Killtimer ö.ä.) damit dieser nicht unnötig weiterläuft.
Bin am Handy kann deswegen nicht nachschauen.
Aber mit gettime bekommt man nur die Stunde,Minute,Sekunde in den angegebenen Variablen zurück.
Gettime(Stunde,Minuten,Sekunden)
Zitatnew Hour, Minute, Second, Timestamp;Timestamp = gettime(Hour, Minute, Second);
Habe mir einen /spawnvehicle Befehl gescriptet und möchte es so machen, dass wenn der Spieler das Fahrzeug verlässt, das Fahrzeug automatisch zerstört wird.
Allerdings habe Ich dabei große Schwierigkeiten.
Wenn das Fahrzeug erstellt (=AddStaticVehicle) wird, dann soll eine Variable das Fahrzeug erstellen
=> car = AddStaticVehicle (...)
So habe Ich mir das bisjetzt überlegt.
Hey ich habe das Problem das er mir immer das Haus gibt obwohl ich ein Haus habe ?
ocmd:givhouse(playerid,params[])
{
if(pInfo[playerid][pLoggin] == false) return 1;
if(!GetPlayerAdmin(playerid,5)) return SendAdminError(playerid);
new Hausid,pID,string[128];
if(sscanf(params, "ud",pID,Hausid)) return SendClientMessage(playerid,ROT,"Benutze: {D6D6D6}/givhaus [Playerid/Name] [Hausid]");
if(HatEinHaus(pID)) return SendClientMessage(playerid,ROT,"Der Spieler hat schon ein Haus.");
for(new i=0; i<MAX_HOUSE; i++)
{
if(hInfo[i][h_ID] == Hausid)
{
if(!IsPlayerInRangeOfPoint(playerid,2.5,hInfo[i][h_x],hInfo[i][h_y],hInfo[i][h_z])) return SendClientMessage(playerid,ROT,"Du bist nicht an dem Haus.");
format(hInfo[i][h_besitzer],40,"%s",getPlayerName(pID));
hInfo[i][h_besetzt] = 1;
UpdateHaus(i);
format(string,sizeof(string),"Du hast %s [%d] das Haus mit der Hausid %d gegeben.",getPlayerName(pID),pID,Hausid);
SendClientMessage(playerid,ROT,string),
format(string,sizeof(string),"%s [%d] hat dir das Haus mit der Hausid %d gegeben.",getPlayerName(playerid),playerid,Hausid);
SendClientMessage(pID,ROT,string);
return 1;
}
}
return 1;
}
Alles anzeigen
Drehe in der Funktion HatEinHaus das return 1 und return 0 um.
Oben im Script ein neues new erstellen:
OnPlayerConnect:
Befehl: (abfragen ob der Spieler schon ein Fahrzeug erstellt hat)
if(playercar[playerid]!=0)return SendClientMessage(playerid,-1,"Du hast bereits ein Fahrzeug erstellt!");
playercar[playerid] = AddStaticVehicle(...
OnPlayerExitVehicle:
if(playercar[playerid]==0)return 1;
DestroyVehicle(playercar[playerid]);
playercar[playerid] = 0;
SendClientMessage(playerid, -1, "Fahrzeug zerstört.");
Fertig
Nutze als Benutzer "root" und kein Passwort. Das sind dann die Standard Einstellungen, die meistens so vorhanden sind.
Danke, habe das jetzt so gelöst und es klappt wunderbar
Befehl:
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
box[playerid] = CreateDynamicObject(3798, x, y+3, z-1.0, 0.0, 0.0, 0.0, -1, -1, -1, 200.0, 200.0);
boxlabel[playerid] = Create3DTextLabel("0:30", 0x00FFFFFF, x,y+3,z, 25, 0, 0);
SendClientMessage(playerid, -1, "Box {00FF00}created");
PlayerPlaySound(playerid, 1150, 0.0, 0.0, 0.0);
blockboxspawn[playerid] = true;
deleteboxes[playerid] = SetTimerEx("deletebox", 30*1000, 0, "i", playerid);
bUpdate[playerid] = SetTimerEx("boxcountdown", 1000, true, "i", playerid);
boxamount[playerid]--;
return 1;
Label Updaten:
forward boxcountdown(playerid);
public boxcountdown(playerid)
{
new str[144];
countdown[playerid]--;
format(str, sizeof(str),"%d", countdown[playerid]);
Update3DTextLabelText(boxlabel[playerid], 0x00FFFFFF, str);
if(countdown[playerid] == 0)
{
Delete3DTextLabel(boxlabel[playerid]);
countdown[playerid] = 30;
KillTimer(bUpdate[playerid]);
return 1;
}
return 1;
}
Drehe in der Funktion HatEinHaus das return 1 und return 0 um.
Habe es nun so aber es kommt jetze ( wenn ich kein Haus habe )
Der Spieler hat bereits ein Haus.
ocmd:givhouse(playerid,params[])
{
if(pInfo[playerid][pLoggin] == false) return 1;
if(!GetPlayerAdmin(playerid,5)) return SendAdminError(playerid);
new Hausid,pID,string[128];
if(sscanf(params, "ud",pID,Hausid)) return SendClientMessage(playerid,ROT,"Benutze: {D6D6D6}/givhaus [Playerid/Name] [Hausid]");
if(HatEinHaus(pID)) return SendClientMessage(playerid,ROT,"Der Spieler hat schon ein Haus.");
for(new i=0; i<MAX_HOUSE; i++)
{
if(hInfo[i][h_ID] == Hausid)
{
if(!IsPlayerInRangeOfPoint(playerid,2.5,hInfo[i][h_x],hInfo[i][h_y],hInfo[i][h_z])) return SendClientMessage(playerid,ROT,"Du bist nicht an dem Haus.");
format(hInfo[i][h_besitzer],40,"%s",getPlayerName(pID));
hInfo[i][h_besetzt] = 1;
UpdateHaus(i);
format(string,sizeof(string),"Du hast %s [%d] das Haus mit der Hausid %d gegeben.",getPlayerName(pID),pID,Hausid);
SendClientMessage(playerid,ROT,string),
format(string,sizeof(string),"%s [%d] hat dir das Haus mit der Hausid %d gegeben.",getPlayerName(playerid),playerid,Hausid);
SendClientMessage(pID,ROT,string);
return 1;
}
}
return 1;
}
Alles anzeigen
Nutze als Benutzer "root" und kein Passwort. Das sind dann die Standard Einstellungen, die meistens so vorhanden sind.
danke habs anders gelöst^^
Jetzt hab ich nachdem Abgefragt wird ob ein Benutzer existiert diesen Error in SQL
[ERROR] CMySQLQuery::Execute[OnUserCheck(i)] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELCET id FROM accounts WHERE username='Patrick_Stewart'' at line 1
Im Script habe ich alles so gemacht wie im Video. Nur wird bei mir auch kein Dialog angezeigt
SELCET id FROM accounts WHERE username='Patrick_Stewart'' at line 1
'SELECT' anstatt 'SELCET'
Hey, wollte mal fragen ob mir einer helfen kann :>
ich möchte das der Spieler nachdem er gesprungen ist und dann gelandet ist, eine Animation ausführt...
Hab da schon ein bisschen dran rumprobiert, aber das bugt nach dem 1ten - 2-3ten mal irgendwie rum....
Nochmal erklärt:
Spieler springt, Landet und die Animation "Landen" wird vom script ausgegeben.
Tasten:
KEY_JUMP - KEY_SPRINT KEY_(UP DOWN LEFT RIGHT)
Code:
new bhopAnim[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
bhopAnim[playerid] = 0;
return 1;
}
public OnPlayerUpdate(playerid)
{
if(bhopAnim[playerid] == 1)
{
if(GetPlayerAnimationIndex(playerid))
{
new animlib[32], animname[32];
GetAnimationName(GetPlayerAnimationIndex(playerid),animlib,32,animname,32);
if(!strcmp(animname, "JUMP_LAND", true))
{
OnePlayAnim(playerid,"PED","FALL_LAND",3.5,0,1,1,0,0);
SendClientMessage(playerid, 0xFFFFFFFF, "MakeAnimation");
SendClientMessage(playerid, 0xFFFFFFFF, "");
bhopAnim[playerid] = 0;
}
}
}
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if((newkeys & KEY_JUMP) && !IsPlayerInAnyVehicle(playerid))
{
SendClientMessage(playerid, 0xFFFFFFFF, "if JUMP && !Car");
SendClientMessage(playerid, 0xFFFFFFFF, "");
if((oldkeys & KEY_UP) || (oldkeys & KEY_DOWN) || (oldkeys & KEY_LEFT) || (oldkeys & KEY_RIGHT) || (oldkeys & KEY_SPRINT))
{
SendClientMessage(playerid, 0xFFFFFFFF, "if WASD || SHIFT");
SendClientMessage(playerid, 0xFFFFFFFF, "");
bhopAnim[playerid] = 1;
}
}
return 1;
}
OnePlayAnim(playerid, animlib[], animname[], Float:Speed, looping, lockx, locky, lockz, lp)
{
ApplyAnimation(playerid, animlib, animname, Speed, looping, lockx, locky, lockz, lp);
}
Alles anzeigen
Hallo, wenn man ingame das Adminlevel ändert und man sich ausloggt, steht immernoch das selbe level in der sql datenbank drin
Wo fehlt etwas?
ocmd:setadmin(playerid,params[]){new pID,a_level;if(!IsPlayerGM(playerid,4))return 1;if(sscanf(params,"ui",pID,a_level))return SendClientMessage(playerid,FARBE_ROT," INFO: /setadmin [Playerid] [Adminlevel]");sInfo[pID][Adminlevel]=a_level;SpielerSpeichern(pID);SendClientMessage(pID,FARBE_ROT,"Dein Level wurde geändert");SendClientMessage(playerid,FARBE_ROT,"Du hast das Level von Ihm geändert");return 1;}
SpielerSpeichern(playerid){if(sInfo[playerid][LoginStatus]==0)return 1;new query[128];format(query,sizeof(query),"UPDATE accounts SET level='%i',geld='%i',admin='%i' WHERE id='%i'",sInfo[playerid][Level],GetPlayerMoney(playerid),sInfo[playerid][Adminlevel],sInfo[playerid][Id]);return 1;}
Und meine 2 FRage ist.
Wie kann man nun Bezeichnungen für die Range Einfügen mit SQL sparend
Moderator Supporter Admin
Guten Morgen Freunde.
Ich habe da mal wieder eine bzw. zwei Fragen.
Erste Frage: Ist es möglich die Funktion auszuschalten das man nicht mehr Sprinten kann?
Zweite Frage: Wie ist es möglich, das im Textdraw oder Dialog ein Text erscheint als wird er gerade Geschrieben?
Mit freundlichen Grüßen,
Hey,
wie kann man überprüfen, ob der Spieler sich bewegt? Egal ob er W,A,S,D drückt, oder Sprint, etc...
Gruß