http://wiki.sa-mp.com/wiki/SendRconCommand
ZitatNote: Does not support login, due to the lack of a 'playerid' parameter.
Du kannst dich nicht mit SendRconCommand einloggen
http://wiki.sa-mp.com/wiki/SendRconCommand
ZitatNote: Does not support login, due to the lack of a 'playerid' parameter.
Du kannst dich nicht mit SendRconCommand einloggen
Erstellen der Datei in
format(Datei,sizeof(Datei),"/Accounts/%s.ini",pName);
Laden/Speichern in
format(Datei,sizeof(Datei),"/Spieler/%s.ini",pname);
Fehler gesehn?
PS: Verschiedene Ordner
dini_Set(Spielerdatei,"NName",strlen(inputtext));
dini_Set erwartet als dritten Parameter einen Datentyp String (Zeichenkette).
Du lieferst da durch strlen die Länge der Zeichenkette als Integer (Zahl wenn man so will)
dini_Set(Spielerdatei,"NName",inputtext);
dein forward muss dann natürlich dementsprechend so aussehen:
forward Heal(playerid);
btw wenn du in der Funktion (Public) playerid als Parameter nutzt und diesen im SetTimer nicht übergibst wird dir das Ding nicht liefern was du willst.
Also entweder SetTimerEx und die id als Integer übergeben oder mit ner for im Public alle Spieler durchlaufen.
SetTimerEx("Heal", 8000, true,"i",playerid);
Hier
f(x)=2x+x
Im Timer-Public z.B. folgendes
SetPVarInt(playerid,"hunger",GetPVarInt(playerid,"hunger")*2+GetPVarInt(playerid,"hunger"));
Ich würde warscheinlich den Hunger auch noch stärker als linear anwachsen lassen.
Also etwa so:
Zeiteinheit 1: 1 Hunger
Zeiteinheit 2: 3 Hunger
Zeiteinheit 3: 9 Hunger
Zeiteinheit 4: 27 Hunger
Zeiteinheit 5: 81 Hunger
f(x)=2x+x
Oder du lässt es einfach bei einem linearen Anstieg.
Dann musst du dich fragen wie sich der Hunger auswirken soll.
Soll man immer einen prozentualen Anteil des Hungers an Lebel verlieren oder immer einen abolouten Wert?
So jetzt zum script:
Jeder Spieler benötigt je nach dem wie du es machen willst eine Variable mit dem Hungerwert.
Dazu kann man entweder eine Variable deklarieren oder man verwendet einfach die PVars von SAMP.
Dann einen Timer erstellen, welcher in einem bestimmten Intervall alle Spieler durchgeht.
In diesem Timer-Public überprüfst du den aktuellen Hungerwert und setzt diesen neu.
Anschließend ziehst du ggf. Health ab.
Dazu ließt du die Health aus und verringerst den Wert
new Float:health;
GetPlayerHealth(playerid,health);
SetPlayerHealth(playerid,health-Wert[Float]);
Dann brauchen wir noch die Kehrseite: Das Essen
Wenn jemand isst o.Ä dann musst du den Hungerwert verringern.
Wo in deinem savePlayerPos übergibst du die Werte denn an deine Datei? Sollte dort das Problem liegen brauchst du SetPVarFloat garnicht. Dann nimmst du einfach die x,y,z und speicherst diese in deiner dini
Problem 1: Den Spieler bei 1 HP freezen
Das ist fast unmöglich umzusetzen, da z.B. ein Fall aus großer Höhe direkt tötlich ist. Oder man einen Timer mit sehr kleiner Zeitspanne laufen lassen müsste um sonstige Verletzungen (Beschuss o.Ä) zu registrieren.
Besser ist hier bei OnPlayerDeath die Position zu speichern (ggf. eine Variable auf true setzten, dass der Spieler tot ist) und dann bei OnPlayerSpawn diese Variable abfragen, den Spieler an die gespeicherte Position setzten und freezen (TogglePlayerControllable).
Problem 2: Den Medics bescheid geben
Geschieht auch in OnPlayerSpawn. Dort die gespeicherten koordinaten z.B. für einen Marker benutzen, welcher allen Spieler gesetzt wird, welche den Beruf des Sanitäters ausüben. (per for alle Spieler durchgehen).
Problem 3: Den Verletzten wiederbeleben
Einen Command erstellen, mit dem man jemanden Wiederbeleben kann. Dazu soll folgendes Sequenz-Struktogramm dienen:
Abfrage ob Spieler Medic
Abfrage ob Spieler neben anderen Spieler (IsPlayerInRangeOfPoint)
Abfrage ob anderer Spieler tot (Ist die Totvariable gesetzt?)
Anderen Spieler unfreezen (TogglePlayerControllable)
Anderen Spieler volle HP geben (sollte aber durch OnPlayerSpawn schon geschehen sein)
Spieler eine Animation ausführen lassen
Und das wars auch schon.
Du brauchst drei Variabeln des Types Float.
new Float:x,Float:y,Float:z;
Darin speicherst du die Position
GetPlayerPos(playerid,x,y,z);
Diese Variablen überträgst du in die Speicherverwaltung des PVarFloat
SetPVarFloat(playerid,"x",x);
SetPVarFloat(playerid,"y",y);
SetPVarFloat(playerid,"z",z);
Mit Integern kannst du hier nicht arbeiten, es seie denn du rundest deine Floats auf ganze Zahlen.
edit:
Zum Speichern musst du in deiner dini dann natürlich drei Felder für die drei Achsen erzeugen und nicht nur ein Feld.
Wenn du das ganze auf ein Feld reduzieren willst müsstest du die drei Koordinaten per Trenner (z.B. "|") in einen String schreiben und diesen speichern. Dann beim laden natürlich per split o.Ä. wieder in drei Werte brechen. Das ist aber nicht zu empfehlen, da es sich dann nicht mehr um atomare Werte handelt und das sowieso sehr Laufzeitintensiv ist.
Integer ist eine Zahl sprich 5 oder 6 oder 14000
String ist eine Zeichenkette sprich "Hallo Welt" oder "5" oder "6" (Auch "Zahlen" können eine Zeichenkette bilden).
Probiers mal so
new einwohner[3],result[16];
mysql_query("SELECT `Name`, `Einwohnerort` FROM `accounts`");
mysql_store_result();
while(mysql_retrieve_row())
{
mysql_fetch_field__row(result,"Einwohnerort"); //Error
if(result == 0) einwohner[0] ++;
if(result == 1) einwohner[1] ++;
if(result == 2) einwohner[2] ++;
}
mysql_free_result();
Oder schick mir ma nen Forenlink o.ä zum Plugin (Ich finde das grad net)
Du musst garnicht jedes zurückgegebene Tupel (Zeile) durchgehen. Es reicht die Anzahl der zurückgegebenen Tupel.
Welches Plugin nutzt du?
btw: result wird vorraussichtlich ein String und kein Interger sein.
Genau so ist richtig. Gerade für sowas bietet sich MYSQL an. Wie bereits gesagt den Query ausführen und die zurückgegebenen Werte auslesen (jedes Plugin bietet da eigene Methoden und Umsetzungen an).
Ich weiß noch wie es bis zu einer bestimmten Version immer extreme Asynchronitäten gab. Ein Auto stand bei zwei Spieler an zwei verschiedenen Positionen.
Wenn du nicht irgendwo die Namen speicherst um diese dort auslesen zu können ist das mit Dini nicht möglich.
Mit MYSQL wäre das kein Problem.
Da steht doch extra ein "i" hinter.
Zitat
Erscheint am 31.12.12
Sofortabholung prüfen i
Zitati Änderungen und Irrtümer vorbehalten. Abbildungen ähnlich.
So
if(PlayerInfo[playerid][pMember] == 4)
Größer gleich macht kein Sinn, da sonst die Fraktionen 5 ,6 usw das auch öffnen können.
Bei Landekapseln von Raketen und und bei Dragstern solls ja bekanntlich helfen.
Momentan versuche ich Multiaccounts auf meinem TDM Server über die ersten drei IP Blöcke eines Spielers herauszufiltern.
So jetzt habe ich letztens in diesem Tread hier was von Hardwareschlüsseln gelesen:
http://forum.sa-mp.de/san-andr…ts-erkennen-aber-wie-nur/
Jetzt die Frage an die Experten: Kann man so einen Hardwareschlüssel mit SAMP erstellen ?
Das mit der Shotgun (wir reden nicht von der Sawn-Off oder?) wird man nicht über den Skill regeln können, da im Singleplayer man die Shotgun nie in einer Hand halten kann, egal welchen Skill man hat.
Denn der native SetPlayerSkillLevel ist ja die SAMP Umsetzung der Singleplayer-Skills. (Berichtigt mich wenn ich falsch liegen)