Wurde schon 100000x mal geklärt. Eine einfache google Suche hätte es auch getan.
Du verwendest killerid in Arrays, obwohl du nicht prüfst, ob killerid != INVALID_PLAYER_ID ist.
Wurde schon 100000x mal geklärt. Eine einfache google Suche hätte es auch getan.
Du verwendest killerid in Arrays, obwohl du nicht prüfst, ob killerid != INVALID_PLAYER_ID ist.
und wenn du es ausließt müsstest du es enthashen
Eieieiei, schau dir nochmal mein Tutorial an: Hash Verfahren genauer erklärt
Sowas wie enthashen gibt es nicht.
Da ein Hash keine Verschlüsselung ist.
Demnach ist dieses ganze Unterfangen auch komplett sinnlos, sowas in der Datenbank zu speichern.
Ich habe auch eingebaut das man das RCON PW ändern kann, kann ich dies genau so wie Account PWs mit Bcrypt hashen in der DB?
Wozu solltest du das in einer Datenbank speichern wollen, wenn es eh in der server.cfg steht?
ch hab es schon mit nem timer probiert aber bekomme es nicht hin die
Hä?
Musst doch nur alles zusammenführen:
//Oben im Skript
new bool:g_open;
//Im Timer:
new bool:in_range;
for(new i=GetPlayerPoolSize(); i!=-1; i--)
{
if(IsPlayerInRangeOfPoint(i,6,929.0650,-1216.7328,16.9343) && (IsAFirefighter(i)|| IsPlayerInFrac(i,1) || IsPlayerInFrac(i,2)))
{
MoveDynamicObject(gate,x,y,z,speed,r1,r2,r3); //<< open
in_range=g_open=true;
break;
}
}
if(!in_range && g_open && !IsDynamicObjectMoving(gate))
{
MoveDynamicObject(gate,x,y,z,speed,r1,r2,r3); //<< close
g_open=false;
}
Alles anzeigen
So bald ich mein /kick befehl nutze mit parametern kommt eine fehlermeldung:
Du musst grund auch schon als string deklarieren ![]()
if(!PlayerInfo[pID][LoggedIn]) return NO_CONNECT_P
Schreib das so:
Denn pID wird auf INVALID_PLAYER_ID durch sscanf gesetzt ergo (65535) und da du das in das Array packst, das aber nur eine größe von 1000 hat, kommt es hier zu einem Fehler. Das bedeutet, dass du das abfangen musst.
Das kannst du so machen oder auch:
Wobei der IsPlayerConnected sicherer ist, da er auch ohne sscanf funktionieren würde ![]()
wie mache ich es wenn ich mich mit einem Fahrzeug einer Schranke näher das sie dann auf geht ohne das ich ein Befehl eingeben muss?
Über einen Timer (oder Streamer-Zonen) prüfst du, ob der Spieler in der Nähe ist und dann bewegst du einfach das Objekt (Objekte langsam rotieren lassen)
Und wenn er weg ist, lässt du die schranke wieder runter.
Magst uns oPawn mal zeigen?
Kenne das z.B. nicht.
Muss ich in der Datenbank oder bei OnPlayerRegister Default Werte eintragen oder wo liegt der Fehler?
Gibt 2 Möglichkeiten.
Entweder du trägst in der Datenbank (also in der Tabelle) den Default Wert für die Spalte Euro ein und zwar auf 0.
Oder du gibst diese beim Insert einfach mit, machst halt einfach noch ein `Euro` dazu und den Wert eben auf 0.
Nix für ungut, aber kannst du einfach zeigen, was nun da steht? 😅
Mit "ja geht nicht" kann man halt absolut nichts anfangen...
Compile nochmal...das sieht aus, als ob das noch der alte Code ist, wo i=1 war...
Sei doch so gütig und zeige uns, wie der Code dazu aussieht...
Also in der Datenbank hat die erste crew die ID 1 ka wieso nicht null.
Ja, da wird ab 1 gezählt.
Aaaaaber trotzdem sind doch in deinem Array alle Einträge bei 0.
Ich würde es definitiv bei 0 starten lassen und bei den Abfragen einfach sowas machen:
Magie:
for(new i; i < rows; i++)
Einfach zu:
...aaaber warum auch immer man das wollen würde...
noch eine frage bezüglich dazu: wie kann ich es umändern sodass das textlabel nur dem spieler angezeigt wird, der schießt (issuerid) Kaliber
Nächstes mal, am Besten direkt in den ersten Thread deine Vorstellung schreiben, wie du dir das System vorstellst hahaha xD
Mit allen Details, sowas ist nur schwer vorherzusehen hahaha xD
Machste so:
if(issuerid != INVALID_PLAYER_ID)
{
new string[32],Float:x,Float:y,Float:z,Float:t;
GetPlayerLastShotVectors(issuerid,t,t,t,x,y,z);
format(string,sizeof(string),"DMG: %.02f",amount);
SetTimerEx("@DeleteDmgDraw",1000*10,0,"ii",issuerid,_:CreatePlayer3DTextLabel(issuerid,string, 0xFF0000FF, x,y,z, 20.0, GetPlayerVirtualWorld(playerid), 0)); //1000*10 = 10 Sekunden
}
//Und dann außerhalb:
@DeleteDmgDraw(i,l);@DeleteDmgDraw(i,l) {
DeletePlayer3DTextLabel(i,PlayerText3D:l);
}
Alles anzeigen
Achsoooo, schreib das doch hahahaha xD
Mach es so:
if(issuerid != INVALID_PLAYER_ID)
{
new string[32],Float:x,Float:y,Float:z,Float:t;
GetPlayerLastShotVectors(issuerid,t,t,t,x,y,z);
format(string,sizeof(string),"DMG: %.02f",amount);
SetTimerEx("@DeleteDmgDraw",1000*10,0,"i",_:Create3DTextLabel(string, 0xFF0000FF, x,y,z, 20.0, GetPlayerVirtualWorld(playerid), 0)); //1000*10 = 10 Sekunden
}
//Und dann außerhalb:
@DeleteDmgDraw(i);@DeleteDmgDraw(i) {
Delete3DTextLabel(Text3D:i);
}
Alles anzeigen
folgende fehlermeldungen
Dann hast du wohl eine globale Variable die Label heißt, das nicht so juuut, aber auch egal, dann machs einfach so:
new string[32],Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
format(string,sizeof(string),"DMG: %.02f",amount);
SetTimerEx("@DeleteDmgDraw",1000*10,0,"i",_:Create3DTextLabel(string, 0xFF0000FF, x,y,z, 20.0, GetPlayerVirtualWorld(playerid), 0)); //1000*10 = 10 Sekunden
//Und dann außerhalb:
@DeleteDmgDraw(i);@DeleteDmgDraw(i) {
Delete3DTextLabel(Text3D:i);
}
Das hier erstellt das textlabel dort, wo die kugel den spieler trifft.
Achsooo, ja sag das doch, dass du das willst ![]()
Dann lösch das alles..und mach es so:
//unter OnPlayerTakeDamage
new string[32],Float:x,Float:y,Float:z,Text3D:label;
GetPlayerPos(playerid,x,y,z);
format(string,sizeof(string),"DMG: %.02f",amount);
label = Create3DTextLabel(string, 0xFF0000FF, x,y,z, 20.0, GetPlayerVirtualWorld(playerid), 0);
SetTimerEx("@DeleteDmgDraw",1000*10,0,"i",_:label); //1000*10 = 10 Sekunden
//Und dann außerhalb:
@DeleteDmgDraw(i);@DeleteDmgDraw(i) {
Delete3DTextLabel(Text3D:i);
}
Alles anzeigen
Dann bleibt das Label 10 Sekunden da, wo der Spieler getroffen wurde.
bekomme bei dieser zeile:
Ich habe den Code nochmal aktualisiert, schau nochmal rein und nimm den Neusten ![]()