Rücke deinen Code richtig ein, überprüfe deine Klammern und du bemerktst (einen ?) deiner/n Fehler selbst
Beiträge von Mann im Mond
-
-
Benutze anstatt "==" ein "&" bei Tasten, damit es ohne Probleme funktioniert auch bei mehren Tastendrücke zur gleichen Zeit, ein anderer hier hatte erst das Problem
also
if(newkeys & KEY_FIRE) { } // Spieler drückt Schusstaste (linke Maustaste)Bei dem Link von oben ( http://wiki.sa-mp.com/wiki/OnPlayerKeyStateChange) ist das Ganze mit & usw. nochmal auf Englisch ausführlich beschrieben
-
Entweder du benutzt eine Schleife, speicherst alle Waffen in einem Array, benutzt "ResetPlayerWeapons" und gibst sie dem Spieler wieder AUßer natürlich die weggenommene. Oder was auch funktioniert (bin nicht sicher ob bei jeder Waffe, aber ich habe damit keinerlei Probleme) ist einfach die negative Munition zu geben...
stock RemovePlayerWeapon(playerid, weapon)
{
new
currentweapon,
currentammo;
for(new slot = 0; slot < 13; slot++)
{
GetPlayerWeaponData(playerid, slot, currentweapon, currentammo);
if(weapon == currentweapon)
{
GivePlayerWeapon(playerid, currentweapon, -currentammo);
break;
}
}
}
Irgendwie sowas also... -
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
if(gTeam[i] == TEAM_COP) SendClientMessage(i, FARBE, "Polizist kriegt die Nachricht"); // oder wie auch immer du es definiert hast ein Polizist zu sein
} -
Weil GetPlayerhealth nicht die Energie des Spielers zurückgibgt, sondern 0 oder 1, je nachdem ob der Spieler connected ist oder nicht (-> IsPlayerConnected). Richtig müsste es also heissen
GetPlayerHealth(healing, healingHealth[healing]); // speichere Energie in healingHealth[healing]
format(string,sizeof(string) "%f", healingHealth[healing]); // formatiere string mit der Energie -
Ja natürlich, aber AddStaticPickup liefert keine Pickupid zurück, wenn du diese brauchst
-
Vieleicht so?
Wobei das eigentlich nicht Funktionieren dürfte.
Versuchs einfach malWenn du weißt es funktioniert nicht, warum schreibst dus dann. Er will durch Drücken des gleichen Knopfes einen anderen Text jeweils anzeigen. Mach das einfach mit einer Variablen die hochgezählt wird. In meinem Fall für jeden Spieler anders, kannst aber auch für alle Spieler gleich machem, das selbe Prinzip
// oben
new
pSwitchText[playerid];// OnPlayerConnect
pSwitchText[playerid] = 0;// OnPlayerKeyStateChange
if(newkeys & KEY_FIRE)
{
switch(pSwitchText[playerid])
{
case 0: SendClientMessage(playerid,COLOR_GURKE,"Text1");
case 1: SendClientMessage(playerid,COLOR_GURKE,"Text2");
case 2: SendClientMessage(playerid,COLOR_GURKE,"Text3");
case 3: SendClientMessage(playerid,COLOR_GURKE,"Text4");
case 4: SendClientMessage(playerid,COLOR_GURKE,"Text5");
// ...
default: pSwitchText[playerid] = 0;
}
} -
Wie Silverdark schon sagte, das kann nicht funktionien. In diesen 5 zeilen ist fast in jeder Zeile ein Fehler. Und diese Fehler sind nicht nur Schreibfehler sondern einfach nur Fehler, die das ganze sinnlos machen.
@ Silverdark
- SetTimerEx("lebencheck",1000*60,1,"i",playerid);
Wenn das ein Lösungvorschlag war, macht er es auch nicht sonderlich besser. Du kannst das ganze playerid ganz komplett rausnehmen, das ist komplett sinnlos.Eigentlih dachte Tutorials müssen erst von einem Admin oder Moderator freigegeben werden, ist aber wohl in diesem Fall nicht ganz zutreffend. Falls es noch nciht so gereglt ist, würde ich das empfehlen, damit solche und 1000 andere Tutorials
1.) nicht dreifach gemacht werden
2.) nicht grottenfalsch sind, da der Zweck einen Tutorials darin liegt, dass die Leute die es lesen was RICHTIGES lernen.
3.) die Ideen, die hinter solchen Vorschlägen stecken auch wirklich Sinn ergeben. Warum sollte bitte überprüft werden, ob ein Spieler mehr als 100 Energie hat. Die meisten Cheattools bestehen darin, dass die Erngie dauehaft auf 100 bleibt und nciht, dass sie auf "99999999" gesetzt wird. Das sollte man überprüfen, nicht so etwas -
Du meinst sicherlich die neuen GUIs in 0.3.
ShowPlayerDialog
OnDialogResponse
musst du dafür benutzen. Im Wiki findest etwas zu den beiden Sachen. grundsätzlich erstellst du ein GUI mit ShowPlayerDialog und wertest die Eingabe des Spielers in OnDialogResponse aus.
Du kannst (bisher) NUR 2 Buttons machen, nicht mehr nicht weniger.Allerdings könntest du als Style für dein GUI die "Liste" benutzen, dann hättest du eine Liste mit allen deinen "Buttons". Würde also dann so aussehen:Deine Stats (Überschrift)
Strafakte (anklickbar)
Level (anklickbar)
Tasche (anklickbar)Ok (Button1) Abbrechen (Button 2)
-
Es gibt einen neuen Parameter.
Der neue Parameter ist für die Virtual World.
Mach einfach immer am ende -1.
Das bedeutet das die Pickups in jeder Virtual World sichtbar sind.
Der neue Parameter ist optional, also nicht zwinigend notwenid. Der Stadtartwert von diesem ist "-1", also überall, also stimmt das nicht.
Du musst lediglich dein Script mit den neusten Includes neu compilen und hochladen, dann sollte alles gehen -
EOS = "End of String"
-
Als aller erstes müsstest du bei AddStaticPickup einen neuen Parameter hinzufügen.
Unzwar -1
Damit deine Pickups Ingame schonmal überall sichtbar sind.
Die -1 bedeutet das die Pickups in jeder Virtualen Welt sichtbar sind.Anschließend kannst du die Funktion: GedPlayerWeapon getrost aus dem Script auskommentieren
da diese Funktion nicht mehr vorhanden ist.
Eigentlich gibt es sonst nix weiter zu machen@ MiniYoda sry aber das ist eine Community
Musste sein hehe
Total falsch.
Du musst deine CreatePickup/AddStaticPickup nicht ändern, wenn du diese nicht in einer speziellen Welt benutzen willst. Solltest du den letzen Parameter "Virtual World" nicht angeben, wird AUTOMATISCH -1 als Standartwert genomen."GedPlayerWeapons" war noch NIEMALS eine Samp Funktion, vielleicht höchstens für Leute die kein Englisch können. Es heisst "GetPlayerWeapons", aber dies wurde mit Sicherheit nicht aus 0.3 entfernt, wäre ja auch mehr als schwachsinnig. Die einzigste Waffenfunktion die entfernt wurde war "SetDisabledWeapons", mehr nicht.
Viel zu ändern gibt es nicht, wenn du die neuen Funktionen nicht verändern willst. Einzig bei der oben gennaten Funktion musst du ändern, wenn du diese benutzt und evt. bei einem Autosystem. Wichtig dabei ist, dass du Fahrzeuge beim neuen Callback "OnVehicleStream" in ändern musst. Auf alle Fälle solltest du dein Script mit den neusten Includes von 0.3 recompilen, damit alles richtig funktioniert
In diesem Sinne erst informieren, dann schreiben
-
http://wiki.sa-mp.com/wiki/OnPlayerKeyStateChange
Außerdem kannst du deinen Code in OnPlayerKeyStateChange packen, du benutzt ja keine Richtungspfeile...
-
Er will keinen /gethere befehl von einem GF, sondert einen Befehl wie er oben geschrieben hat mit Ortsangabe.
Hier ist dein Befehl, du musst ihn noch mit Koordinaten und weiteren Punkten ergänzen, "me", "ls", "sf" sind drin als Beispiele. Benötigt dcmd, sscanf und du musst als Rcon eingeloggt sein...
dcmd_teleport(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return 1; // Nur Rcon Admins
new
name[MAX_PLAYER_NAME],
string[80],
location[20],
giveplayerid;
if(sscanf(params, "su", location, giveplayerid)) return SendClientMessage(playerid, FARBE, "BENUTZUNG: /teleport [Ort] [Spieler]");
if(giveplayerid == INVALID_PLAYER_ID) return SendClientMessage(playerid, FARBE, "Ungültige Spielerid");
if(strcmp(location, "me", false) == 0)
{
new
Float:pX,
Float:pY,
Float:pZ;
GetPlayerPos(playerid, pX, pY, pZ);
SetPlayerPos(giveplayerid, pX, pY, pZ+0.5);
}
else if(strcmp(location, "ls", false) == 0) SetPlayerPos(giveplayerid, KOORDINATE_LSX, KOORDINATE_LSY, KOORDINATE_LSZ); // hier Koordinaten eintragen
else if(strcmp(location, "sf", false) == 0) SetPlayerPos(giveplayerid, KOORDINATE_SFX, KOORDINATE_SFY, KOORDINATE_SFZ); // hier Koordinaten eintragen
else return SendClientMessage(playerid, FARBE, "Ungültiger Ort");
GetPlayerName(giveplayerid, name, sizeof(name));
format(string, sizeof(string), " Du hast %s zu %s teleportiert", name, location);
SendClientMessage(playerid, FARBE, string);
SendClientMessage(giveplayerid, FARBE, " Du wurdest teleportiert");
return 1;
} -
oder such nach
Zitat,"");
oder eben nachZitat," ");
-
Zitat
Achja, er liest dort, wo es steht
ZitatUnd dass du nichts von strtok siehst liegt daran, dass ich diese Zeilen als nicht Problem relevant ansah und so einfach mit
Das mit dem Lesen habe ich gesehen, aber mich hats gewundet, wo die Werte ausgelsen werden aus der Zeile, hat sich ja erledigt -
Strings sind einfach gesagt einfach eine Zeichenkette. Du kannst das formatieren wie du willst. Willst du ein string formatieren, also Variabeln oder Integer in deinen Satz einfügen, dann musst du format arbeiten
new
string[40], // Erstelle eine Zeichenkette mit 40 Zeichen, das Zeichnlimit liegt bei 128
random; // Erstelle einen Integer// Zufallszahl erstellen
random = 100+rand(350); // Speichere eine Zufallszahl von 100-450 in "random"
// Irgendwas mit der Zufallszahl anfangen, z.B. Geld geben
GivePlayerMoney(playerid, random); // Gib dem Spieler das Geld// Nun senden wir eine Nachricht
format(string, sizeof(string), "Es wurde die Zufallszahl %d ausgewählt. Du hast nun $%d Geld aus der hand", random, GetPlayerMoney(playerid)); //random ist ein Integer und GetPlayerMoney liefert einen Integer zurück, also musst du ein %d benutzen zum Einfügen
SendClientMessage(playerid, FARBE, string); // Sende den formatierten String an den Spieler -
Deine Fehler stammen nciht vom Code, zeile 62 mit MAX_PLAYER z.B. ist irgendwo ganz oben beim Erstellen ein Fehler, es muss heissen MAX_PLAYERS (Eigeninitiative !!!)
ZitatD:\Script\gamemodes\gangdmclanwom.pwn(235) : error 004: function "IstEinGroveCar" is not implemented
Dann fehlt die Funktion bei dir
stock IstEinGroveCar(carid)
{
if(carid > 0) return 1; // Nur zum Testen, deine Autos kannst auch selber hier eintragen
}ZitatD:\Script\gamemodes\gangdmclanwom.pwn(237) : error 033: array must be indexed (variable "gTeam")
Benutzt du gTeam[playerid] oder PlayerInfo[playerid][gTeam]?
Schau einfach oben nach wie dus dfiniert hast, laut Fehler zu urteilen ist es bei dir gTeam[playerid]...ZitatD:\Script\gamemodes\gangdmclanwom.pwn(1303) : warning 203: symbol is never used: "GroveCars"
Dein Array GrooveCars oben wird nicht einmal verwendet, kannst also löschen die entsprechende Zeile... -
Versuchs obs geht, allerdings bewezifle ich das irgendwie nach deinem Code noch weiter oben zu urteilen
Zitatfahstundefailed 1
Testest du alleine? Falls ja, warum gibt er dann Playerid "1" aus und nicht "0", da du ja der Einzigste sein müsstest auf dem Server und somit ID 0 hast. Oder hast du einen Kumpel, der dir hilft?@ Nacho: Das mit der Schreibweise war nich auf dich bezogen und ich habe deine print Idee lediglich weitergeführt wie oben schon geschrieben
-
Lerne richtig einrücken, dann siehst du auch Klammerfehler besser
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE:DRIVER)
{
new
newcar = GetPlayerVehicleID(playerid);
if(IstEinGroveCar(newcar))
{
if(PlayerInfo[playerid][gTeam] == 1){ }
else
{
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, grün, " Du gehörst nicht zur Grove-Street!");
}
}
}
}
NICHT nur kopieren und einfügen, ich habe einfach mal das komplette OnPlayerStateChange gemacht