Beiträge von Kaliber
-
-
Und wie kann ich die benutzen, beispiel wäre nett

Nun, ganz einfach so:public OnPlayerUpdate(playerid) {
new Keys,ud,lr;
GetPlayerKeys(playerid,Keys,ud,lr);
if(ud == KEY_UP) SendClientMessage(playerid, -1, "UP");
else if(ud == KEY_DOWN) SendClientMessage(playerid, -1, "DOWN");
if(lr == KEY_LEFT) SendClientMessage(playerid, -1, "LEFT");
else if(lr == KEY_RIGHT) SendClientMessage(playerid, -1, "RIGHT");
return 1;
}mfg.

-
Bei deinem format in der 4. Zeile, es gibt kein %e im format, dass muss %i oder %d heißen

mfg.

-
okay also spart es nur ressourcen wenn ich das eichtig verstehe?
Ressourcen ist so ein allgemeiner Begriff, es spart Speicher
mfg.

-
Ich danke dir für den hinweis, aber was genau bringt das char?
Kannst dir meinen Beitrag dazu mal durchlesen: http://forum.sa-mp.de/gta-mult…optimierung-6#post1428034mfg.

-
@Music4You:
Das würde zu Fehlern kommen, wenn der Spieler im Dialog ist und gleichzeitig wer anders im Dialog ist und dann würde der andere die ID vom anderen übernehmen

Deshalb muss man das nochmal Spielerspezifisch machen, sprich so:
new nameid[MAX_PLAYERS char];//oben im script.
ocmd:kick(playerid,params[])
{
new pID, reason[128], string[128];
if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,Red,"Eingabe: /kick [ID] [Grund]");
format(string,sizeof(string),"%s hat %s gekickt! Grund: %s",SpielerName(playerid),SpielerName(pID),reason);
SendClientMessageToAll(Red,string);
ShowPlayerDialog(playerid,DIALOG_KICK,DIALOG_STYLE_MSGBOX,"Kick","Möchtest du den Spieler wirklich kicken?","Ja","Nein");
nameid{playerid}=pID;
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_KICK) {
if(!response) return SendClientMessage(playerid,Red,"Du hast den Vorgang abgebrochen!"),nameid{playerid}=0;
return Kick(nameid{playerid});
}
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.

-
also muss ich if(sscanf(params,"fff",Position_X,Position_Y,Position_Z))return .... machen?
Und bei den new's:
new Floatosition_X, .... ??
Genau
-
i = Integer (32Bit Zahl also eine Ganze Zahl)
du musst f verwenden für Float, Kommastellenzahl
mfg.

-
Ja, diese kleine Operation dauert halt keine ms, sondern nur ns...
Mach eine Schleife mit einem Wert von 1000 dazwischen oder so und du wirst merken, er gibt dir ms aus

mfg.

-
Aber sollte doch gleich sien oder?
Also, folgendes:- Du musst nicht abfragen ob der Spieler connected ist, denn wenn er es nicht wäre, könnte er nicht auf den Desktop gehen
- Du musst den Callback nicht durch ein forward festlegen, da dieser Pointer bereits gesetzt wurde, das ist ein Standard Callback von SAMP und ist schon in der a_samp.inc geforwardet.
AllowPlayerTeleport(playerid,1); // Teleport wird erlaub oder?
Nein nein, das hat da nichts zu suchen
Unter OnGameModeInit() schreibe mal folgendes rein:
AllowAdminTeleport(1);
So und jetzt loggst du dich inGame als Rcon-Admin ein und dann kannst du dich direkt porten

mfg.

- Du musst nicht abfragen ob der Spieler connected ist, denn wenn er es nicht wäre, könnte er nicht auf den Desktop gehen
-
KEY_CROUCH ist nur die Taste H, wenn du dich in einem Auto befindest und das nicht geändert hast in deinen GTA Einstellungen. Wenn du zu Fuß unterwegs bist, musst du die Taste C drücken, soweit du das nicht geändert hast

Den Code kannst du auch so schreiben:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
if(newkeys & KEY_CROUCH) {
if(IsPlayerInRangeOfPoint(playerid,3.0,825.70001, 849.29999, 13.2)) return MoveObject(PaintAreaGate, 825.70001, 849.29999, 13.2-10, 3.0),SetTimer("PaintAreaGate1",5000,0);
}
return 1;
}forward PaintAreaGate1();
public PaintAreaGate1() return MoveObject(PaintAreaGate, 825.70001, 849.29999, 13.2+10, 3.0);Die Übergabe eines Parameters durch einen Timer wie "playerid" ist total nutzlos, da du diesen ja nicht in der Funktion PaintAreaGate1 verwendest

mfg.

-
Ja, das Funktioniert und zwar so:
Um dem Spieler das zu erlauben nutzt du die Funktion AllowPlayerTeleport
und um den Spieler zu dem Marker zu teleportieren nutzt du OnPlayerClickMap
mfg.

-
Doch wenn ich in diesem Befehl hier <= benutze wird die SendClientMessage nicht gesendet..!`?!? Und wenn ich nur < benutze funktioniert alles!?! Und das letzte Fahrzeug wird auch gelöscht! also funktioniert < bei mir wie eigendlich <= funktionieren sollte?! und bei <= wird alles unter der zeile irwie nicht mehr gelesen... warum funktioniert das mit <= nicht? (Benutze UMP 0.3 e falls das wichtig sein sollte..)
Das liegt an dem Array von PlayerVehicle.Ganz einfach Arrays werden so erstellt:
new test[3];
test[0] = 1;
test[1] = 2;
test[2] = 3;
test[3] = 4; //Das würde nicht funktionieren, da der Array nur auf 3 Cells begrenzt ist, also können wir nicht 4 nutzen (0,1,2 = 3 | 0,1,2,3 = 4)Bei deiner Schleife ist das das selbe, nur das hier kein Fehler während des Compilierens kommt, sondern erst während die Schleife ausgeführt wird.
<= würde ja bedeuten, dass wir (jetzt auf mein Beispiel bezogen) in die 4. Cell was schreiben wollen, obwohl wir nur 3 haben.
Deshalb < damit wir nur 0,1,2 beschreiben und nicht 0,1,2,3

mfg.

-
4 Errors.
Er meint natürlich auch, du sollst das schreiben:new firstperson[MAX_PLAYERS];
mfg.

-
Oder man schreibt es kürzer einfach so:
stock SpamChat(playerid,dest) {
switch(dest) {
case 0: for(new i; i<20; i++) SendClientMessage(playerid,-1,"");
case 1: for(new i; i<20; i++) SendClientMessageToAll(-1,"");
}
return 1;
}mfg.

-
Den Rot markierten Parameter auf z.b 400 stellen´?
Da ist nichts rot makiert, aber nein, du müsstest das dann so schreiben:CreateDynamicObject(19325, 2211.88477, 2037.06555, 11.23800, 0.00000, 0.00000, 0.00000, -1, -1, -1, 400.0);
mfg.

-
Das ist deine Funktion:
CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 200.0);
und hier jetzt einfach den letzten Parameter auf z.B. 300.0 erhöhen oder 400.0 jenachdem

mfg.

-
Du musst die StreamDistance deiner Objekte erhöhen, schau mal auf die Parameter

mfg.

-
Verwende das nicht, das ist einfach nur unnötig!
Lass einfach oben den Parameter weg!
Sprich einfach so:
ocmd:give(playerid)
{}
anstatt Pragma zu nutzen!
mfg.
