SetTimerEx und dort als Variable die ID des Spieler mitliefern.
Beiträge von Hagi
-
-
Ne dann bekommt er ne Cigarette. Das Problem ist, das er mit dieser nicht in Autos usw einsteigen kann.
Man müsste er mit SPECIAL_ACTION_NONE die Special Action zurücksetzten, was aber einer Abfrage auf Vorhanden sein der Cigarette bedeutet.Da ist eine Animation doch wesentlich einfacher.
Wenn mans perfekt haben will, also rauchen+cigarette, dann muss man natürlich beides kombinieren.
-
Das in eine Funktion einsetzten
ApplyAnimation(playerid,"JST_BUISNESS ","smoke_01",2,0,0,0,1,1);
Kannst ja die Parameter nach belieben veränder.
ApplyAnimation -
Wobei bei dieser Methonde "text" durch "@" erstzt werden sollte.
if(strfind(text,"@",true) != -1)
{
//Was passieren soll
}Bin mir auch nicht sicher, ob es so funktioniert weil manche Sonderzeichen ja von SAMP gar nicht erst anerkannt werden oder anders dargestellt werden. Das von Neophoex sollte aber auf jeden Fall funktionieren.
/edit: if ausgebesser, sowas aber auch
-
Also wenn ich dich jetzt richtig verstehe möchtest du:
Wenn man /members eintippt, soll eine Liste mit allen online Membern der Fraktion in den Chat geschrieben werden?
Wenn dem so ist, musst du uns sagen, wie bei dir die Member und Leader in einer Variable gespeichert sind.
-
So wie dadalus das schon da oben geschrieben hat.
Wenn du in der Funktion (mehr ne sub, aber egal) einen oder mehrere Parameter übergeben willst, wie in diesem falle ein Integer mit der ID die ausgeknastet werden soll, dann schreibst du die Parameternamen einfach in die Klammer dahinter und gibts diese bei der Funktion mit in der Klammer an.
Hier der Public
public Knastzeit(playerid)Hier die Funktion mit der der public aufgerufen werden kann.
Knastzeit(iddieausgeknastetwerdensoll) -
Groß und kleinschreibung beachten.
-
Mir ist zwar immer noch nicht klar was EvilCar sein soll, aber so sollte es funktionieren.
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
new string[128];
new plname[MAX_PLAYER_NAME];
if(EvilCar(vehicleid))
{
GetPlayerName(playerid, plname, sizeof(plname));
if(!strcmp(plname, "Name", true))
{
format(string, sizeof(string), "Willkommen", plname);
SendClientMessage(playerid, COLOR_WHITE, string);
}
else
{
new Float:pos[3];
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
SetPlayerPos(playerid, pos[0], pos[1], pos[2]);SendClientMessage(playerid, COLOR_RED,"Du bist nicht Name");
return 1;
}
}
return 1;
} -
So wie OcB das schreibt ist das schon richtig.
new vid = GetPlayerVehicleID(playerid);
if(PlayerCar[pid][PlayerCarr] == vid)Die Carid wird beim Erstellen returnt und in der Var PlayerCar[pid][PlayerCarr] gespeichert. Mit GetPlayerVehicleID(playerid) kann man die vehicleid des Spielers rausfinden.
Das ganze ist dann für OnPlayerStateChange. In OnPlayerEnterVehicle ist vehicleid schon gegeben und kann direkt verwendet werden. -
Wo genau steht denn dieses secret() ?
Denn in deinem Code ist das nicht zu finden.
-
Die Klasse OnPlayerEnter Vehicle wird aufgerufen, wenn der Spieler die Einsteigentaste (Standart: f oder enter) drückt. Da er dann aber noch nicht im Auto sitzt, kann er auch nicht rausgeworfen werden. Darum musst du die Methode von Snail zum "rauswerfen" nutzen. Wenn du jedoch RemovePlayerFromVehicle nutzen willst, dann musst du alles in der Klase OnPlayerStateChange ausführen, weil diese den State erst verändert, wenn der Spieler schon hinter dem Steuer sitzt.
public OnPlayerStateChange(playerid,newstate,oldstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
new string[128];
new plname[MAX_PLAYER_NAME];
new Fahrzeug = GetPlayerVehicleID(playerid);
if(Fahrzeug(vehicleid))
{
GetPlayerName(playerid, plname, sizeof(plname));
if(!strcmp(plname, "NAME", true))
{
format(string, sizeof(string), "Willkommen %s!", plname);
SendClientMessage(playerid, COLOR_WHITE, string);
}
else
{
format(string, sizeof(string), "Du bist nicht %s!", plname);
SendClientMessage(playerid, COLOR_RED,string);
//SafeRemovePlayerFromVehicle(playerid);//ausgeklammert da es damit nicht wollte
RemovePlayerFromVehicle(playerid);
return 1;
}
}}
return 1;
} -
Ich hab an diser Stelle noch einen kleinen Tipp, wie man sich Fehler ersparen kann.
Normalerweise schreibt man ja
SetPVarInt(playerid,"diesertextalsname",wert);Da aber durch einen Fehler im String kein vernünftiger Wert gewährleistet ist, können so recht schnell Fehler entstehen.
Ich bevorzuge diese Methode:#define DISERTEXTALSNAME_KEY "diesertextalsname"
SetPVarInt(playerid,DIESERTEXTALSNAME_KEY,wert);Sollte man nun einen rechtschreibfehler gemacht haben bei SetPVarInt usw. , dann weist der Compilter einen direkt darauf hin, da für ihn der fehlerhafte Key nicht existiert.
-
huhu,
Hab hier ne Abfrage in nem GUI Dialog
if(strlen(inputtext) == 4 && IsNumeric(inputtext))
{
//aktion1
}
else
{
//aktion2
}Jedoch ist es wie folgt:
Wenn ich vier Zahlen eingebe sollte es kein Problem in der Bafrage gebene und die erste Aktion sollte ausgeführt werden.
Wenn ich nun jedoch genau vier Zahlen eingebe wird Aktion 2 und nicht Aktion 1 ausgeführt.
Wenn ich vier Buschstaben eingebe, dann wird auch Aktion 2 ausgeführt, so wie es sein soll.
Erkennt jemand den Fehler?So ist bei mir IsNumeric definiert:
stock IsNumeric(const string[])
{
new lenght = strlen(string);
for (new i=0; i<lenght; i++)
{
if (!((string[i] <= '9' && string[i] >= '0') || (i==0 && (string[i]=='-' || string[i]=='+'))))
{
return false;
}
}
return 0;
} -
if(pInfo[playerid][gTeam] == 3 || pInfo[playerid][gLeader] == 3 || pInfo[playerid][gTeam] >= 6 && pInfo[playerid][gTeam] <= 14 || pInfo[playerid][gLeader] >= 6 && pInfo[playerid][gLeader] <= 14 || pInfo[playerid][gTeam] == 16 || pInfo[playerid][gLeader] == 16)
Das sollte eigentlich so funktionieren.
-
Hier kannst du die Waffenid sehen.
Demnach müsste dein Command so aussehen:
//---------waffen für Terroristen----------------
if (strcmp(cmdtext, "/waffeng", true) == 0) // wenn ( /waffeng eingegeben wird
{
if(pInfo[playerid][gTeam] == Terroristen || pInfo[playerid][gLeader] == Terroristen)// wenn der Spieler ein Teammitglieder oder Leader der Fraktion Groove ist
{
GivePlayerWeapon(playerid, 39, 10); // Gibt 10 Rucksackbomben
GivePlayerWeapon(playerid,40,1); //Gibt den Detonator
SetPlayerArmour(playerid,100.0); // Gibt dem Spieler 100 Rüstung
}
return 1; // Cmd zu Ende
} -
Ich benutze für Commands mit Parametern dcmd. Für Commands ohne Parameter jedoch strcmp, da ich dcmd dann viel zu aufwändig finde.
-
Hallo,
ich wollte für meinen DM Server mal nen Anti C-Fire Bug machen. Ich denke jeder weiß was ich unter diesem Bug verstehe.
Das ist mein Quelltext:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(oldkeys == 1 && newkeys == 4 || oldkeys == 4 && newkeys == 4) // Auch mit KEY_CROUCH und KEY_FIRE anstatt der Zahlen funktioniert es nicht.
{
SetPVarInt(playerid,"CFIREBUG",GetPVarInt(playerid,"CFIREBUG") +1);if(GetPVarInt(playerid,"CFIREBUG") >= 3)
{
new string[128];
new pname[20];
GetPlayerName(playerid,pname,sizeof(pname));
format(string,sizeof(string),"Spieler %s (%d) benutzt möglicherweise den C-Fire Bug",pname,playerid);
print(string);for(new i = 0;i<MAX_PLAYERS;i++)
{
if(GetPVarInt(i,ADMIN_KEY) >= 1)
{
SendClientMessage(i,grün,string);
}
}
}
}
else
{
SetPVarInt(playerid,"CFIREBUG",0);
}
return 1;
}Das Problem ist nur, dass InGame gar nichts passiert. Auch wird nichts in die Log geschrieben.
Hat jemand einen besseren Ansatz oder eine Lösung ?edit1: Das mit dem ADMIN_KEY ist oben definiert und dient nur der vermeidung von Fehlern.
-
Ein Feature dass ich beim neuen Client und Server, eher Client, vermisse ist die RCON Login in Konsole.
So musste man nicht immer connecten um z.B. Banlist zu relaoden. Diese funktion scheint nicht zu existieren. Habt ihr genauere Angabe dazu ?
-
127.0.0.1 ist zu empfehlen, da der Server auf deinem Pc läuft.
-
Aber sicher, arrays können auch Stings enthalten. Nur Abfragen ob der Inhalt gleich ist solltest du so machen.
if(!strcmp("maennlich",spieler[playerid][geschlecht],false))