Guten Tag liebe Breadfishe!
Ich will mir jetzt einen /gotocoords Befehl erstellen, wo man /gotocoords eintippt und dann die Koordinaten postet und dann zu dieser Stelle gelangen soll. (z.B. /gotocoords 181.3221, 245.1454, 123.1444)
Wie mache ich das?
Habe zwar etwas ausprobiert, doch es hat nicht geklappt.
Braucht man hier für spezielle Integer / Defines oder so?
Weil ich hatte alles richtig bei if(sscanf(params,"iii",X,Y,Z))return .... aber es ging nicht.
Könntet ihr helfen?
/gotocoords
- FreshKing
- Geschlossen
- Erledigt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
ocmd:gotocoords(playerid,params[])
{
new fahr,Float:x,Float:y,Float:z,string[128];
if(sscanf(params,"fff",x,y,z))return SendClientMessage(playerid,rot,"Benutzung: /gotocoords [x] [y] [z]");
if(Adminabfrage)
{
fahr = GetPlayerVehicleID(playerid);
SetVehiclePos(fahr,x,y,z);
SetPlayerPos(playerid,x,y,z);
PutPlayerInVehicle(playerid,fahr,0);
format(string,sizeof(string),"Sie haben sich zu den kooridnaten %i %i %i Teleportiert",x,y,z);
SendClientMessage(playerid,rot,string);
}
return 1;
}//edit:
jetzt sollte es gehen ( X, Y und Z als Float erstellt ) -
i = Integer (32Bit Zahl also eine Ganze Zahl)
du musst f verwenden für Float, Kommastellenzahlmfg.
-
-
also muss ich if(sscanf(params,"fff",Position_X,Position_Y,Position_Z))return .... machen?
Und bei den new's:
new Float:Position_X, .... ?? -
also muss ich if(sscanf(params,"fff",Position_X,Position_Y,Position_Z))return .... machen?
Und bei den new's:
new Floatosition_X, .... ??
Genau -
und wie überprüfe ich ob die Koordinaten existieren?
-
Existiert nicht jede Coord irgendwo auf der Map? :3
-
also muss ich if(sscanf(params,"fff",Position_X,Position_Y,Position_Z))return .... machen?
Und bei den new's:
new Float:Position_X, .... ??
Ich würde noch die Split Funtion nutzen, die ich oben verlinbkt habe
Ansonsten musst du die coords so eingeben: XXX.XXX XXX.XXX XXX.XXX Die Function kann aber die Kommas trennen heißt kannst
wie gewohnt so eingeben: XXX.XXX, XXX.XXX, XXX.XXXL.G.
heyho -
der befehl ging bei mir nicht.
ocmd:gotocoords(playerid, params[])
{
new Float:Position_X, Float:Position_Y, Float:Position_Z;
new vehicle, string[128];
if(!IsPlayerAnAdmin(playerid,5))return SendClientMessage(playerid,Hellrot,"* Du bist dazu nicht befugt.");
if(sscanf(params,"fff",Position_X,Position_Y,Position_Z))return SendClientMessage(playerid,Grau,"FEHLER: /gotocoords [Koordinaten]");
vehicle = GetPlayerVehicleID(playerid);
GetVehiclePos(vehicle,Position_X,Position_Y,Position_Z);
GetPlayerPos(playerid,Position_X,Position_Y,Position_Z);
format(string,sizeof(string),"* Du hast dich zu den Koordinaten %i %i %i teleportiert.",Position_X,Position_Y,Position_Z);
SendClientMessage(playerid,Gelb,string);
format(string,sizeof(string),"%s hat den Befehl /gotocoords benutzt. (Nur zur Info!)",SpielerName(playerid));
printf(string);
SetVehiclePos(vehicle,Position_X,Position_Y,Position_Z);
SetPlayerPos(playerid,Position_X,Position_Y,Position_Z);
return 1;
} -
-
Nimm meinen strmp Befehl (kannste ja umschreiben)
if(strcmp(cmd,"/gotocoords",true) == 0)
{
if(PlayerInfo[playerid][pAdmin] >= 4)
{
new coordstr[3][24], Float:coords[3];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_WHITE," /gotocoords X,Y,Z");
split(tmp,coordstr,',');
coords[0] = floatstr(coordstr[0]);
coords[1] = floatstr(coordstr[1]);
coords[2] = floatstr(coordstr[2]);
SetPlayerPos(playerid,coords[0],coords[1],coords[2]);
format(string,sizeof(string)," Erfolgreich teleportiert: X %f Y %f Z %f",coords[0],coords[1],coords[2]);
ShowInfoDialog(playerid,"Koordinaten",string);
}
return 1;
}
L.G.
heyho//edit: cmd = strtok(cmdtext, idx);
-
Versuch mal die Function split
L.G.
heyhodanke aber ich weiß nicht wie ich split benutzen soll.
-
danke aber ich weiß nicht wie ich split benutzen soll.
Habe es doch oben geschrfieben nimm doch den Code -
Schreibs so:
ocmd:gotocoords(playerid, params[]) {
if(!IsPlayerAnAdmin(playerid,5))return SendClientMessage(playerid,Hellrot,"* Du bist dazu nicht befugt.");
new Float:Pos[3],string[128];
if(sscanf(params,"fff",Pos[0],Pos[1],Pos[2]))return SendClientMessage(playerid,Grau,"FEHLER: /gotocoords [Koordinaten]");
if(IsPlayerInAnyVehicle(playerid)) SetVehiclePos(GetPlayerVehicleID(playerid),Pos[0],Pos[1],Pos[2]);
else SetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
format(string,sizeof(string),"* Du hast dich zu den Koordinaten %i %i %i teleportiert.",Pos[0],Pos[1],Pos[2]);
SendClientMessage(playerid,Gelb,string);
format(string,sizeof(string),"%s hat den Befehl /gotocoords benutzt. (Nur zur Info!)",SpielerName(playerid));
print(string);
return 1;
}mfg.
-
Schreibs so:
ocmd:gotocoords(playerid, params[]) {
if(!IsPlayerAnAdmin(playerid,5))return SendClientMessage(playerid,Hellrot,"* Du bist dazu nicht befugt.");
new Float:Pos[3],string[128];
if(sscanf(params,"fff",Pos[0],Pos[1],Pos[2]))return SendClientMessage(playerid,Grau,"FEHLER: /gotocoords [Koordinaten]");
if(IsPlayerInAnyVehicle(playerid)) SetVehiclePos(GetPlayerVehicleID(playerid),Pos[0],Pos[1],Pos[2]);
else SetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
format(string,sizeof(string),"* Du hast dich zu den Koordinaten %i %i %i teleportiert.",Pos[0],Pos[1],Pos[2]);
SendClientMessage(playerid,Gelb,string);
format(string,sizeof(string),"%s hat den Befehl /gotocoords benutzt. (Nur zur Info!)",SpielerName(playerid));
print(string);
return 1;
}mfg.
danke, ich habe mein problem gelöst:
hatte GetPlayerVehicleID(playerid); und GetPlayerPos(playerid); drinne, dabei bleibt ja dann der Spieler an der selben stelle stehen.
Habe es doch oben geschrfieben nimm doch den Codemuss ich einfach nur den Code einfügen?
-
Jop das ist ne Function die einfach unten reingeschrieben werden kann....
Dann guckste dir nochmal meinen COde an und dann verstehste das auch....
Is nämlich nicht sonderlich schwerL.G.
heyho -
breadfish.de
Hat das Thema geschlossen.