Ich habe ein Kommando "/flip" eingefügt. Wenn mein Wagen auf dem Rücken liegt wird er dadurch wieder umgedreht.
Geht es, dass man z.B. L drücken muss um den Wagen umzudrehen?
Crossline
Commands durch Tastendruck ausführen
- Crossline
- 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
-
-
Einfach die Funktionen vom Command in den Callback OnPlayerKeyStateChange reinpacken
-
Wie genau sieht das aus? Sorry, kann mir nicht vorstellen wie das gehen soll :x
if(strcmp(cmdtext, "/flip", true) == 0)
{
if(IsPlayerInAnyVehicle(playerid))
{
new currentveh;
new Float:angle;
currentveh = GetPlayerVehicleID(playerid);
GetVehicleZAngle(currentveh, angle);
SetVehicleZAngle(currentveh, angle);
SendClientMessage(playerid, 0xFFFFFFFF, "Dein Fahrzeug wurde gedreht.");
return 1;
}
else
{
SendClientMessage(playerid, 0xFFFFFFFF, "Du bist in keinem Fahrzeug!");
return 1;
}Wie muss das da rein?
-
Als erstes "Pressed" definieren, damit wir abfragen können, ob der Spieler die Taste drückt:
#define PRESSED(%0) \
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))Dann im genannten Callback abfragen, welche Taste er drückt:
if (PRESSED(KEY_FIRE))
{
}und zum Schluss noch in die Klammern die Funktionen und Abfragen des Commands rein:
if(IsPlayerInAnyVehicle(playerid))
{
new currentveh;
new Float:angle;
currentveh = GetPlayerVehicleID(playerid);
GetVehicleZAngle(currentveh, angle);
SetVehicleZAngle(currentveh, angle);
SendClientMessage(playerid, 0xFFFFFFFF, "Dein Fahrzeug wurde gedreht.");
return 1;
}
else
{
SendClientMessage(playerid, 0xFFFFFFFF, "Du bist in keinem Fahrzeug!");
return 1; -
Ist das so richtig? Bekomme SEHR viele Fehlermeldungen
#include <a_samp>
#include <Dini>
#include <dudb>
#include <ocmd>
#include <Sscanf>
#define PRESSED(%0) \
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if (PRESSED(KEY_FIRE))
{
if(IsPlayerInAnyVehicle(playerid))
{
new currentveh;
new Float:angle;
currentveh = GetPlayerVehicleID(playerid);
GetVehicleZAngle(currentveh, angle);
SetVehicleZAngle(currentveh, angle);
SendClientMessage(playerid, 0xFFFFFFFF, "Dein Fahrzeug wurde gedreht.");
return 1;
}
else
{
SendClientMessage(playerid, 0xFFFFFFFF, "Du bist in keinem Fahrzeug!");
}
return 1; -
Schöhnheitskorrektur meinerseits:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(IsPlayerInAnyVehicle(playerid))
{
new currentveh;
new Float:angle;
currentveh = GetPlayerVehicleID(playerid);
GetVehicleZAngle(currentveh, angle);
SetVehicleZAngle(currentveh, angle);
SendClientMessage(playerid, 0xFFFFFFFF, "Dein Fahrzeug wurde gedreht.");
}
else
{
SendClientMessage(playerid, 0xFFFFFFFF, "Du bist in keinem Fahrzeug!");
}
}
return 1;
}Der obere Teil müsste passen. Ach ja, das ist jetzt nicht die Taste L sondern die Feuertaste
-
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
if (PRESSED(KEY_FIRE))
{
if(IsPlayerInAnyVehicle(playerid))
{
new currentveh;
new Float:angle;
currentveh = GetPlayerVehicleID(playerid);
GetVehicleZAngle(currentveh, angle);
SetVehicleZAngle(currentveh, angle);
SendClientMessage(playerid, 0xFFFFFFFF, "Dein Fahrzeug wurde gedreht.");
}
else
{
SendClientMessage(playerid, 0xFFFFFFFF, "Du bist in keinem Fahrzeug!");
}
return 1;
}
return 0;C:\Users\PC\Desktop\Crosslines GTASA Reallife\gamemodes\Crossline.pwn(356) : warning 209: function "OnPlayerKeyStateChange" should return a value
C:\Users\PC\Desktop\Crosslines GTASA Reallife\gamemodes\Crossline.pwn(356) : error 010: invalid function or declarationWas ist da falsch?
Und wie kann ich das Kommando nun mit L ausführen?
Danke für deine Hilfe :))
Crossline -
return 1; muss weg ^^. Wegen L ... hm, geht auch ne andere Taste? Eine Liste aller Keys gibt's hier: http://wiki.sa-mp.com/wiki/GetPlayerKeys#Special_Keys (Default invehicle sind die Tasten selbst, Definition der Name im Script
-
So klappt soweit Jetzt wollte ichs aber austauschen mit dem Reperaturkommando. Da kommt aber ein Fehler auf:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if (PRESSED(KEY_YES))
{
if(strcmp(cmdtext, "/rv", true) == 0)
{
new vid = GetPlayerVehicleID(playerid);
RepairVehicle(vid);
return 1;
}
}
return 0;
}
C:\Users\PC\Desktop\Crosslines GTASA Reallife\gamemodes\Crossline.pwn(336) : error 017: undefined symbol "cmdtext" -
Mach einfach..
OnPlayerKeyStateChange(BLub...)
{
if(newkeys & TASTE)
{
OnPlayerKeyStateChange(playerid,"/command");
}
}so wird der Command durch den Druck ausgeführt.
-
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys & KEY_YES)
{
OnPlayerKeyStateChange(playerid,"/rv");
}
return 1;
}C:\Users\PC\Desktop\Crosslines GTASA Reallife\gamemodes\Crossline.pwn(5 [geändert]) : error 035: argument type mismatch (argument 2)
-
sry, bin zu müde :oo
Da muss OnPlayerCommandText hin.
-
Danke Keine Fehler mehr, werde es gleich testen.
Jetzt will ich dir aber nochmal zurück helfen.
Auf der Seite von Bayside Life steht unter Immobilien "kleine, aber fReine Immobilien"
Crossline -
breadfish.de
Hat das Thema geschlossen.