Hey danke hat funktioniert.
Hier kann dann geschlossen werden.
Hey danke hat funktioniert.
Hier kann dann geschlossen werden.
Hallo Breadfisher,
Ich habe hier einen Command mit dcmd /sscanf geschrieben :
dcmd_kick(playerid,params[])
{
new zielid;
new grund[256];
if(sscanf(params, "ds",zielid,grund))
{
return SendClientMessage(playerid,weiß,"Benutzung: /kick [ID] [Grund]");
}
if(IsInAdmin[playerid] == 1)
{
if(IsPlayerConnected(playerid) && !IsPlayerConnected(zielid))
{
SendClientMessage(playerid,rot,"Es existiert kein Spieler mit dieser ID");
return 1;
}
else
{
if(zielid == playerid)
{
SendClientMessage(playerid,rot,"Du solltest dich besser nicht selber kicken");
return 1;
}
else
{
new admin[MAX_PLAYER_NAME];
new string[256];
GetPlayerName(playerid,admin,sizeof(admin));
format(string,sizeof(string),"Du wurdest von Admin %s gekickt. Grund: %s",admin,grund);
SendClientMessage(zielid,braun,string);
new string2[256];
new gekickt[MAX_PLAYER_NAME];
GetPlayerName(zielid,gekickt,sizeof(gekickt));
format(string2,sizeof(string),"Admin-Command: Admin %s hat %s gekickt. Grund: %s",admin,gekickt,grund);
Kick(zielid);
SendClientMessageToAll(braun,string2);
print("-----");
print(string2);
return 1;
}
}
}
else
{
SendClientMessage(playerid,rot,"Du besitzt nicht die nötige Einstufung zur Ausführung dieses Befehls");
return 1;
}
}
Mein Problem ist nun, dass man zwar mit der ID auch die gewünschte ID kicken kann.
Aber wenn man einen Namen benutzt geht es immer auf ID 0.
Nun möchte ich wissen, wie man sagen kann, dass nur ID's benutzt werden können. Oder noch besser man auch den Namen benutzen und damit auch den richtigen kicken kann.
Ich hoffe das ist verständlich ausgedrückt.
MFG
Hagi
Ich hoffe auf eine, oder mehrere, gute Antwort(en)
Ich geb dir volle 10/10 da ich das Programm echt coll und nüztlich finde.
Technobase.fm und die anderen sender gehören zu meinen Favoriten. Demnach ist dieses Tool super um schnell zwischen ihnen zu switchen.
Mach weiter so
MGF
Hagi
Hallö,
Ich hab hier ein enum
enum pInfo
{
pKey[128],
pCash,
pAdmin,
pKills,
pTode,
pWarn,
}
new PlayerInfo[MAX_PLAYERS][pInfo];
und hier der Teil wo eigentlich was in die User dini gespeichert werden soll.
public OnPlayerDisconnect(playerid, reason)
{
new string[100], name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
switch(reason)
{
case 0: format(string, sizeof(string), "%s hat den Server verlassen. [Timeout]", name);
case 1: format(string, sizeof(string), "%s hat den Server verlassen. [Leaving].", name);
case 2: format(string, sizeof(string), "%s hat den Server verlassen. [Kick/Ban]", name);
}
PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid);
new string2[256];
for(new i = 0; i < MAX_PLAYERS; i++)
{
GetPlayerName(i,name,sizeof(name));
format(string2,sizeof(string2),"%s.dini",name);
dini_IntSet(string2,"Admin",PlayerInfo[i][pAdmin]);
dini_IntSet(string2,"Geld",PlayerInfo[i][pCash]);
dini_IntSet(string2,"Kills",PlayerInfo[i][pKills]);
dini_IntSet(string2,"Tode",PlayerInfo[i][pTode]);
}
SendClientMessageToAll(grau,string);
print(string);
TextDrawHideForPlayer(playerid,Version);
togpm[playerid] = 0;
tk[playerid] = 0;
isprison[playerid] = 0;
IstEingeloggt[playerid] = 0;
return 1;
}
Das Problem ist, das nach dem Logout des Spielers der Cash Wert in der User.dini nicht geändert wird.
Weiß jemand woran das liegn kann ?
Ich denke erlich gesagt nicht, dass es an der Erstellungsart des Autos liegt.
Das ist einfach unsnychro. 20 Meter verrutschen meine Autos auch öfter mal.
Ein weg das zu beheben ist
Das ist jetzt aus meine Script
forward respawn5();
forward respawn4();
forward respawn3();
forward respawn2();
forward respawn1();
if(strcmp("/carrespawn",cmdtext, true) == 0)
{
if(IsAnAdmin(playerid) )
{
GameTextForAll("Die Autos werden in 5 Sekunde(n) auf Respawn gesetzt",1000,5);
SetTimer("respawn5",1000,0);
}
else
{
SendClientMessage(playerid, rot, "Du bist nicht autorisiert um diesen Befehl ausführen zu können");
return 1;
}
}
public respawn5()
{
GameTextForAll("Die Autos werden in 4 Sekunde(n) auf Respawn gesetzt",1000,5);
SetTimer("respawn4",1000,0);
}
public respawn4()
{
GameTextForAll("Die Autos werden in 3 Sekunde(n) auf Respawn gesetzt",1000,5);
SetTimer("respawn3",1000,0);
}
public respawn3()
{
GameTextForAll("Die Autos werden in 2 Sekunde(n) auf Respawn gesetzt",1000,5);
SetTimer("respawn2",1000,0);
}
public respawn2()
{
GameTextForAll("Die Autos werden in 1 Sekunde(n) auf Respawn gesetzt",1000,5);
SetTimer("respawn1",1000,0);
}
public respawn1()
{
for(new car=0; car<CAR_AMOUNT; car++)
{
SetVehicleToRespawn(car);
}
return 1;
}
*Update*
Version 3 ist nun draußen.
Für Informationen siehen oben
Ist mir auch grad aufgefallen.
Habs so und funktioniert. Hätte wirklich selber ein bisschen mehr denken können XD
if(IsPlayerConnected(playerid) && !IsPlayerConnected(zielid))
{
SendClientMessage(playerid,rot,"Es existiert kein Spieler mit dieser ID");
return 1;
}
else
{
Mal ne andere Frage:
Wie mache ich es dass nur Autos wo niemand drinsitzt respawnt werden ?
Hier mein respawncmd
public respawn1()
{
for(new car=0; car<CAR_AMOUNT; car++)
{
SetVehicleToRespawn(car);
}
return 1;
}
ICh habs dann jetzt so.
Ich probiers gleich mal aus.
Also es funktioniert nicht da steht immer noch "Admin Hagi hat gekickt"
dcmd_kick(playerid,params[])
{
if(!strlen(params))
{
return SendClientMessage(playerid,weiß,"Benutzung: /kick [ID]");
}
new zielid = strval(params);
if(IsInAdmin[playerid] == 1)
{
if(!IsPlayerConnected(playerid))
{
SendClientMessage(playerid,rot,"Es existiert kein Spieler mit dieser ID");
return 1;
}
else
{
if(zielid == playerid)
{
SendClientMessage(playerid,rot,"Du solltest dich besser nicht selber kicken");
return 1;
}
else
{
new admin[MAX_PLAYER_NAME];
new string[256];
GetPlayerName(playerid,admin,sizeof(admin));
format(string,sizeof(string),"Du wurdest von Admin %s gekickt",admin);
SendClientMessage(zielid,braun,string);
new string2[256];
new gekickt[MAX_PLAYER_NAME];
GetPlayerName(zielid,gekickt,sizeof(gekickt));
format(string2,sizeof(string),"Admin-Command: Admin %s hat %s gekickt",admin,gekickt);
Kick(zielid);
SendClientMessageToAll(braun,string2);
return 1;
}
}
}
else
{
SendClientMessage(playerid,rot,"Du bist nicht autorisiert um diesen Befehl ausführen zu können");
return 1;
}
}
Aber dann hier nicht playerid sondern zielid
oder ?
Ich brauche hilfe.
Und zwar habe ich ein paar cmd mit DCMD gemacht.
Diese funktionieren auch so weit perfekt.
Nur kann man jede id wählen, obwohl sie nicht online ist.
Wie kann ich das auf die Momentan online id einschränken ?
Ich hab schon selber was probiert es funkitoniert aber nicht. Der String-Text kommt trotzdem
dcmd_kick(playerid,params[])
{
if(!strlen(params))
{
return SendClientMessage(playerid,weiß,"Benutzung: /kick [ID]");
}
new zielid = strval(params);
if(IsInAdmin[playerid] == 1)
{
if(zielid == INVALID_PLAYER_ID)
{
SendClientMessage(playerid,rot,"Es existiert kein Spieler mit dieser ID");
return 1;
}
else
{
if(zielid == playerid)
{
SendClientMessage(playerid,rot,"Du solltest dich besser nicht selber kicken");
return 1;
}
else
{
new admin[MAX_PLAYER_NAME];
new string[256];
GetPlayerName(playerid,admin,sizeof(admin));
format(string,sizeof(string),"Du wurdest von Admin %s gekickt",admin);
SendClientMessage(zielid,braun,string);
new string2[256];
new gekickt[MAX_PLAYER_NAME];
GetPlayerName(zielid,gekickt,sizeof(gekickt));
format(string2,sizeof(string),"Admin-Command: Admin %s hat %s gekickt",admin,gekickt);
Kick(zielid);
SendClientMessageToAll(braun,string2);
return 1;
}
}
}
else
{
SendClientMessage(playerid,rot,"Du bist nicht autorisiert um diesen Befehl ausführen zu können");
return 1;
}
}
Okai danke es funktioniert.
Kann ich das auch mit einem String machen ? Und welche von %d %s ... muss ich dann benutzen ?
Besteht die Möglichkeit, dass man in das Enum auch Text einfügt ?
Ich benutze das System für Busfahrer und möchte die Haltestellen-Namen einfügen.
enum e_Muell {
Float:M_fX,
Float:M_fY,
Float:M_fZ,
Float:M_fRad;
Text:M_tHaltestelle // Irgentwie so was. Soll aber für den ClientMessage sein
}
new
Muellabfuhr_Stationen[][e_Muell] = {
{-74.2252,-1128.7936,1.6359,5.0 // Hier irgentwo de Namen},
{-89.2432,-1189.7782,2.3241,5.0},
{-63.3734,-1588.5732,3.1782,5.0},
{220.8943,-1393.5308,52.1264,5.0},
{169.0361,-1356.8065,69.8208, 5.0},
{263.5524,-1341.0842,53.7643, 5.0},
{871.9646,-864.5255,77.2742, 5.0},
{935.7687,-835.7352,94.4455, 5.0},
{1496.5879,-698.0237,94.5207, 5.0},
{1001.1724,-935.0218,41.9509, 5.0},
{-546.9002,-488.6077,25.2961, 5.0}
};
ist zwar etwas länger aber probier mal
if(PlayerToPoint(10, playerid,-23.2388,-55.4084,1003.5469) )
{
ShowMenu(...
}
elseif(PlayerToPoint(10, playerid,-23.1297,-55.2229,1003.5469) )
{
ShowMenu(...
}
elseif(PlayerToPoint(10, playerid,-23.3618,-55.6308,1003.5469))
{
ShowMenu(...
}
Ähm Ich mag Saw 1-5
Vllt nicht umbedingt aufschlitzen, aber töten lassen.
Also es soll sich an 3 Stellen öffnen ?
Ich würd mal den Radius auf 5 setzten, da er sich sonst mit den anderen PlayerToPoint überschneidet.
Wenn es sich nur an einer Stelle öffnen soll, probier mal
if(PlayerToPoint(5,playerid,362.4857,173.6745,1008.3828))
Samma willst du mich verarschen.
VOll der Namensklauer.
Ich fass es ja net
Hagi : registriert : Montag, 25. August 2008, 20:44
Haggi: registriert : Mittwoch, 11. Februar 2009, 17:00
Ich war als erster da
Gibt doch schon ein gutes in der DB
http://forum.sa-mp.de/wbb/index.php?page=DownloadDBData&dataID=32
Also kann mir jemand erklären wie ich 3 Spalten mache ?
Wie es jetzt ist, hat es mir sehr geholfen.
Nur eine Sache könntes du noch erläutern.
Wo bekomm ich die Koordinaten her ?