Sollst es ja auch nicht lesen,sondern verstehen.
Das hast du aber wie es aussieht leider nicht.
cmd(makeadmin, 4 , cmdtext);
Wo kommt die 4 her? Die 4 ist für kick,weil kick aus 4 Buchstaben besteht.
makeadmin hat dagegen 9 Buchstaben bzw ist 9 Buchstaben lang.
cmd(makeadmin, 9, cmdtext);
Auch ist bei deiner sscanf Abfrage noch etwas falsch:
if(sscanf(params, "us",pID,adminlevel))
Ich denke wir sind uns einige,dass das Adminlevel eine Zahl sein soll und kein Text ( String ).
if(sscanf(params, "ud",pID,adminlevel))
Beiträge von Goldkiller
-
-
Du musst noch via strval aus dem String eine Zahl machen.
adminplayer = strval(adminID);
adminplayerlvl = strval(adminLVL);
Mit sscanf musst du das erst gar nicht beachten,dass macht die Funktion schon für dich. -
Ist auch logisch.
adminID = strtok(cmdtext, idx);
Sowas müsstest du auch für adminLVL machen.Sonst wird die Stringlänge nämlich immer gleich 0 sein.//Edit:
Modulo ( % )gibt dir den Rest eine Teilung mit Ganzen Zahlen.
zB:
17 : 5 = 3 ( Eigentlich 3.4 , aber wir wollen keinen Bruch sondern eine Ganze Zahl )
17 % 5 = 2 // Ist der Rest bei der Ganzzahligen Teilung. Wir können zwar 17 : 5 teilen, aber wenn wir eine Ganze Zahl wollen,bleibt 2 übrig. So bekommen wir diese herraus ) .
http://de.wikipedia.org/wiki/Division_mit_RestDas ! ist nur eine Negation. Heisst,es dreht den Wert um.
Aus true wird false, aus false wird true.Aus 0 wird 1, aus allem außer 1 wird 0 . -
Das ist das normalste was ich bisher gelesen hab
Nachdem du checkst ob der Spieler einen PArameter angegeben hat oder nicht, beendest du die Funktion nicht. So würd's funktionieren:
COMMAND:kick(playerid,params[]) {
new pID;
if(!IsPlayerAdmin(playerid)) {
return SendClientMessage(playerid,COLOR_WHITE,"Du bist kein Administrator");
}
if(sscanf(params,"u",pID)) { //HIER hat FoxHound einen "return" eingefügt
return SendClientMessage(playerid,COLOR_WHITE,"Benutze: /kick [Name | ID]");
}
if(!IsPlayerConnected(pID)) {
SendClientMessage(playerid,COLOR_WHITE,"Spieler konnte nicht gefunden werden");
}
Kick(pID);
SendClientMessage(playerid,COLOR_WHITE,"Spieler wurde vom Server gekickt!");
return 1;
}
Dann hättest aber auch gleich nach dem "!IsPlayerConnected" Check ein return einfügen können ;). Sonst wird die Nachricht trotzdem gesendet ohne das Jemand gekickt wurde ( Gekickt wird keiner , da pID entweder INVALID_PLAYER_ID ist oder eine SpielerID hat die zZt nicht belegt ist ).
COMMAND:kick(playerid,params[]) {
new pID;
if(!IsPlayerAdmin(playerid)) {
return SendClientMessage(playerid,COLOR_WHITE,"Du bist kein Administrator");
}
if(sscanf(params,"u",pID)) { //HIER hat FoxHound einen "return" eingefügt
return SendClientMessage(playerid,COLOR_WHITE,"Benutze: /kick [Name | ID]");
}
if(!IsPlayerConnected(pID)) {
return SendClientMessage(playerid,COLOR_WHITE,"Spieler konnte nicht gefunden werden");
}
Kick(pID);
SendClientMessage(playerid,COLOR_WHITE,"Spieler wurde vom Server gekickt!");
return 1;
}//Edit:
An Maddin,
Dafür gibts einige Methoden.Die einfachste wäre:
stock IstGerade( iZahl ) {
new
iRest;
iRest = ( iZahl % 2 ); // Modulo ! Gibt den Rest einer Teilung an
return !iRest;
}
//Edit2
Geht auch so :
stock IstGeradeEx( iZahl ) {
return !( iZahl & 1 ); // Abfragen ob 1 als Bit gesetzt ist.
} -
Ja und hat einer den das Include wo ich brauch?^^
MfG xAdy
Wie oft willst du noch fragen?
Nur mal nebenbei, sowas kannst du über Google suchen:http://www.google.de/
>>
http://www.google.de/search?hl…GGL_deDE318DE344&ie=UTF-8
>>
http://nova-revival.de/DogZone…content&view=article&id=9 -
Der Befehl wird so oder so nicht funktionieren,selbst wenn du keinen Error mehr angezeigt bekommst ;).
ocmd:changeplate(playerid,params[])
{
new string[13];
new cmd[256];
if (sscanf(params, "s", string)) // Für einen String nehmen wir s,nicht d ( Integer / Dezimal )
{
return SendClientMessage(playerid,COLOR_RED,">> /CHANGEPLATE [ text ]");
}
new keycar = PlayerInfo[playerid][pCarKey];
//format(string,sizeof(string),"%s",cmd[14]); ? Wozu ?
SetVehicleNumberPlate(keycar, string);
SetVehicleToRespawn(keycar);
new Float: X,Float: Y,Float: Z;
GetPlayerPos(playerid,X,Y,Z);
SetVehiclePos(keycar,X,Y,Z);
PutPlayerInVehicle(playerid,keycar,0);
format(CarInfo[keycar][cNumberplate],13,string); // Musst die Größe anpassen
return 1;
}
Angucken und davon lernen ;).//Edit:
Ließ lieber nochmal das Tutorial dazu
http://forum.sa-mp.de/san-andr…-commands-mit-parametern/ -
Naja, ä und ae sind ja für den Computer nicht das Gleiche.
Man kann es bestimmt machen, nur ob es sich wirklich lohnt? Ich hab meine Befehle auch immer mit ae,oe,ue gemacht.Muss man sich halt mit abfinden.Bin mir aber gerade nicht sicher,ob du einfach folgendes machen kannst:
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(teast,5,cmdtext);
if (!strcmp("/täst", cmdtext, true, 5))
{
return dcmd_teast(playerid,cmdtext[5]);
}
return 0;
}
stock dcmd_teast(playerid,params[]) {
// code
return 1;
} -
Ist nicht möglich.Funktionsnamen können keine Umlaute enthalten.Da musst du wohl ue , ae, oe benutzen für ü,ä,ö.
Das hat aber auch nicht's mit DCMD selber zu tun.
stock blä(playerid) { ... }
Das ist ja auch nicht möglich -
Du lässt das Fahrzeug doch aber auch respawnen.Du "vertuschst" es doch nur doch nur :/.
Hast du es eigentlich getestet? Ich meine nämlich,dass man Fahrzeuge nicht an eine Andere Position setzen kann,wenn keiner darin sitzt.Und nebenbei:
new seat[MAX_PLAYERS]=-1;
ist
new seat[MAX_PLAYERS];
seat[0] = -1;Damit aber alle mit -1 initialisiert werden,müsstest du folgendes machen:
new seat[MAX_PLAYERS]= {-1,...}; -
Wie soll die Datei denn auch erstellt werden ? Du hast dazu nichts im Code.
http://forum.sa-mp.com/showthread.php?t=58458
http://forum.sa-mp.de/san-andr…age=Thread&threadID=12147
stock CreateHouse(playerid,hint,hpreis,hkaufbar,hworld)
{
format(opened,sizeof(opened),"/houses/haus%d.ini",houseid);
//Datei erst erstellen!
INI_Create(opened);
if(INI_Open(opened))
{
INI_WriteInt("interior",hint); houses[houseid][interior] = hint;
INI_WriteFloat("h_x",px); houses[houseid][h_x] = px;
INI_WriteFloat("h_y",py); houses[houseid][h_y] = py;
INI_WriteFloat("h_z",pz); houses[houseid][h_z] = pz;
INI_WriteFloat("vworld",hworld); houses[houseid][vworld] = hworld;
INI_WriteString("owner","Keiner"); format(houses[houseid][owner],MAX_PLAYER_NAME,"Keiner");
INI_WriteInt("kaufbar",hkaufbar); houses[houseid][kaufbar] = hkaufbar;
INI_WriteInt("preis",hpreis); houses[houseid][preis] = hpreis;
INI_WriteInt("hkasse",0); houses[houseid][hkasse] = 0;
INI_WriteInt("hschrank",0); houses[houseid][hschrank] = 0;
INI_WriteInt("hheal",0); houses[houseid][hheal] = 0;
INI_WriteInt("hbar",0); houses[houseid][hbar] = 0;
INI_WriteInt("gbase",0); houses[houseid][gbase] = 0;
INI_Save(); // Nach dem schreiben,speichern!
INI_Close(); // Ganz wichtig,Datei schließen lassen!
SuC();
return 1;
}
// ...
}
Ganz wichtig ist nach dem bearbeiten mit SII das Speichern und auch Schließen der Datei.Denn wenn du sie nicht schließt, wird es nicht möglich sein,weitere Datein zu öffnen.//Edit:
So könntest du es auch machen:
stock CreateHouse(playerid,hint,hpreis,hkaufbar,hworld)
{
format(opened,sizeof(opened),"/houses/haus%d.ini",houseid);
//Datei erst erstellen!
if( INI_Create(opened) ) {
if(INI_Open(opened))
{
INI_WriteInt("interior",hint); houses[houseid][interior] = hint;
INI_WriteFloat("h_x",px); houses[houseid][h_x] = px;
INI_WriteFloat("h_y",py); houses[houseid][h_y] = py;
INI_WriteFloat("h_z",pz); houses[houseid][h_z] = pz;
INI_WriteFloat("vworld",hworld); houses[houseid][vworld] = hworld;
INI_WriteString("owner","Keiner"); format(houses[houseid][owner],MAX_PLAYER_NAME,"Keiner");
INI_WriteInt("kaufbar",hkaufbar); houses[houseid][kaufbar] = hkaufbar;
INI_WriteInt("preis",hpreis); houses[houseid][preis] = hpreis;
INI_WriteInt("hkasse",0); houses[houseid][hkasse] = 0;
INI_WriteInt("hschrank",0); houses[houseid][hschrank] = 0;
INI_WriteInt("hheal",0); houses[houseid][hheal] = 0;
INI_WriteInt("hbar",0); houses[houseid][hbar] = 0;
INI_WriteInt("gbase",0); houses[houseid][gbase] = 0;INI_Save(); // Nach dem schreiben,speichern!
INI_Close(); // Ganz wichtig,Datei schließen lassen!SuC();
return 1;
}
}
// ...}
-
Oh man,was kann man denn daran nicht verstehen.Erst muss pB definiert werden, danach kannst du es erst verwenden.
//~~~~~~~~~~~~~~~~~Includes~~~~~~~~~~~~~~~~~//
#include <a_samp>
#include <dini>
#include <utils>
//~~~~~~~~~~~~~~~~~Defineds~~~~~~~~~~~~~~~~~//
#define COLOR_BLAU 0x33CCFFAA
#define COLOR_GRAU 0xB4B5B7FF
#define Firma 1239.2789,-950.5784,42.6852
//~~~~~~~~~~~~~~~~~Forwards~~~~~~~~~~~~~~~~~//
forward AutoNaricht();
forward Save();
forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);
//~~~~~~~~~~~~~~~~~~~new~~~~~~~~~~~~~~~~~~~~//
new presidentenenter;
new presidentenexit;
new oamtenter;
new oamtexit;
new endlostimer;
enum pB
{
Typ,
Inhalt1,
Inhalt2,
Inhalt3,
Inhalt4,
Inhalt5,
Inhalt6,
Inhalt7,
Inhalt8,
Inhalt9,
Ammo1,
Ammo2,
Ammo3,
Ammo4,
Ammo5,
Ammo6,
Ammo7,
Ammo8,
Ammo9,
Geld,
};
new Koffer[MAX_PLAYERS][pB]; -
Mal auf die Idee gekommen,pB zu definieren,bevor du es benutzt
? Die Definition des enum's muss über der Variable stehen,die sie benutzt.
-
Genau das meinte Ich.
Der Code den du gepostet hast,hat schon 23 Zeilen.In der Fehlerlog von dir sagt er aber, dass in Zeile 19 ein Fehler ist. Da meinst du,steht aber
new Koffer[MAX_PLAYERS][pB];
Da stimmt wohl was nicht,oder?
Sieht so aus als hättest du vergessen vorher die SA:MP Includes einzufügen:
#include <a_samp>enum pB
{
Typ,
Inhalt1,
Inhalt2,
Inhalt3,
Inhalt4,
Inhalt5,
Inhalt6,
Inhalt7,
Inhalt8,
Inhalt9,
Ammo1,
Ammo2,
Ammo3,
Ammo4,
Ammo5,
Ammo6,
Ammo7,
Ammo8,
Ammo9,
Geld,
};
new Koffer[MAX_PLAYERS][pB];Denn mit dem enum + der Variable ist nichts falsch.
-
Die Länge vom String kann dann sowieso nicht über 31 sein, wenn es nur 32 Zellen groß ist.Du musst am Ende jedes Strings einen Null-Terminator haben,somit wäre die letzte Zelle damit belegt.
Aber generell machst du es so wie du es eigentlich auch gezeigt hast:
if(strlen(sIrgendeineVariable) > 16 ) { ... }
Wenn der String länger als 16Zeichen ist, dann ... -
Vielleicht hast du ja SSCANF und ZCMD:
COMMAND:setvehiclehp(playerid,params[]) {
new
Float:fHealth,
iVehicle;
if(sscanf(params,"df",iVehicle,fHealth)) {
return SendClientMessage(playerid,COLOR_RED,"<usage> setvehiclehp [vehicleid] [Float:health]");
}
SetVehicleHealth(iVehicle,fHealth);
SendClientMessage(playerid,COLOR_RED,"Fahrzeug Health gesetzt");
return 1;
} -
Als was hast du denn pB definiert? Zeig das am besten mal.
-
C:/Users/mM/Desktop/Serveruser/
Das geht nicht als Pfad.
Alle Filefunktionen spielen sind automatisch in dem scriptfiles Ordner ab,deines Servers.
Auch musst du vorher den Dateipfad richtig formatieren. -
In dem Kontext ist John Doe eher das hier:
http://de.wikipedia.org/wiki/John_DoeZitatWikipedia:
Im gesamten anglo-amerikanischen Rechtsraum bezeichnet John Doe eine fiktive Prozesspartei oder einen sonstigen fiktiven Beteiligten des Prozesses[1], ebenso den fiktiven Namen einer existenten, aber nicht identifizierten Prozesspartei. -
Hast du den Gamemode mal gründlich getestet?
Du musst unbedingt bei OnPlayerDeath überprüfen ob es ein Selbstmord war ( killerid == INVALID_PLAYER_ID ) , sonst kommt es zu Fehlern.
Spieler[ 65536 ][Kopfgeld] += 100; // BOOM
Hier würde schon das Script stoppen. -
http://wiki.sa-mp.com/wiki/CreateVehicle
Du hast
Zitatrespawn_delay The delay until the car is respawned without a driver in seconds.
vergessen.