Hey,
hatte schonmal vor ein paar Wochen ein Problem mit OnPlayerKeyStateChange, dass wenn mehr als ein Spieler auf dem Server ist, der Motor nicht mehr angehen will oder nur wenn man tausende 1000mal "n" drückt.
Alle anderen Tasten funktionieren auch mit mehreren Spielern einwandfrei. Danach habe ich es ganz verbugt und es ging garnicht mehr. Jetzt habe ich die Funktion noch mal neu geschrieben und habe wieder das Problem mit mehreren Spielern. Mache ich etwas falsch ? Ich habe noch die Funktionen GetEngineState und ToggleEngine geschrieben, aber daran wird es nicht liegen, denn ohne die Funktionen hat es auch nicht funktioniert.
if(newkeys & KEY_NO && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
if(GetEngineState(GetPlayerVehicleID(playerid)) == 1){
ToggleEngine(GetPlayerVehicleID(playerid),0);
GameTextForPlayer(playerid, "~r~Engine turned off", 2000, 3);
}
else {
ToggleEngine(GetPlayerVehicleID(playerid),1);
GameTextForPlayer(playerid, "~r~Engine turned on", 2000, 3);
}
return 1;
}
Immer noch OnPlayerKeyStateChangeBug
- Oskaar1994
- Geschlossen
- Erledigt
-
-
Poste mal das gesamte OnPlayerKeyStateChange.
Zuvor kannst du auch mal versuchen, den Code zu debuggen, damit du siehst wie weit er überhaupt kommt, dann findest du den Fehler vielleicht selbst. -
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{if(newkeys & (KEY_SPRINT))
{
if(IsPlayerInRangeOfPoint(playerid, 5.0, 1344.98877, 1244.95239, 41.18820))
{
ShowPlayerDialog(playerid,4,DIALOG_STYLE_LIST,"Spectate RW","Runway 69 North\nRunway 69 South\nRunway 5 North\nRunway 5 South","Spectate","Close");
}
else if(IsPlayerInRangeOfPoint(playerid, 5.0, 1623.52991, -2286.77075, 94.26330))//LS
{
ShowPlayerDialog(playerid,5,DIALOG_STYLE_LIST,"Spectate RW","Runway 69 West\nRunway 69 East\nRunway 5 West\nRunway 5 East","Spectate","Close");
}
else if(IsPlayerInRangeOfPoint(playerid, 5.0, -1275.72742, 56.47289, 74.24910))//sf
{
ShowPlayerDialog(playerid,6,DIALOG_STYLE_LIST,"Spectate RW","Runway 69 North\nRunway 69 South","Spectate","Close");
}
return 1;
}
//----------------------------------------------------------------------------------CART----------------------------------------------------------------
if (CartState[playerid] == 1){
if (newkeys & (KEY_SECONDARY_ATTACK )){
new Float:oX,Float:oY,Float:oZ;
GetPlayerPos(playerid,oX,oY,oZ);
RemovePlayerFromVehicle(playerid);
SetPlayerPos(playerid,oX,oY,oZ+1);
DestroyObject(CartObj[playerid]);
DestroyVehicle(CartID[playerid]);
CartState[playerid] = 0;
}
return 1;
}
//---------------------------------haussystem-----------------------------------------------------------------------------------------------------------
if(newkeys & (KEY_SECONDARY_ATTACK)){
for(new i = 0; i != MAX_HOUSES; i++) {
if(IsPlayerInCheckpoint(playerid) && IsPlayerInDynamicCP(playerid, hausInfo[i][hCpID])){
SetPlayerPos(playerid, hausInteriorData[hausInfo[i][hInterior]][iX], hausInteriorData[hausInfo[i][hInterior]][iY], hausInteriorData[hausInfo[i][hInterior]][iZ]);
SetPlayerVirtualWorld(playerid, hausInfo[i][hID]);
SetPlayerInterior(playerid, hausInteriorData[hausInfo[i][hInterior]][iInterior]);
break;
}
}
new playerWorld = GetPlayerVirtualWorld(playerid);
if(playerWorld != 0) {
for(new i = 0; i != MAX_HOUSES; i++) {
if(hausInfo[i][hID] == playerWorld) {
if(IsPlayerInRangeOfPoint(playerid, 3, hausInteriorData[hausInfo[i][hInterior]][iX], hausInteriorData[hausInfo[i][hInterior]][iY], hausInteriorData[hausInfo[i][hInterior]][iZ])) {
SetPlayerPos(playerid, hausInfo[i][hX], hausInfo[i][hY], hausInfo[i][hZ]);
SetPlayerVirtualWorld(playerid, 0);
SetPlayerInterior(playerid, 0);
break;
}
}
}
}
return 1;
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------
if(newkeys & KEY_NO && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
if(GetEngineState(GetPlayerVehicleID(playerid)) == 1){
ToggleEngine(GetPlayerVehicleID(playerid),0);
GameTextForPlayer(playerid, "~r~Engine turned off", 2000, 3);
}
else {
ToggleEngine(GetPlayerVehicleID(playerid),1);
GameTextForPlayer(playerid, "~r~Engine turned on", 2000, 3);
}
return 1;
}return 1;
}
Ich kapiere nur nicht, wieso es bei den anderen Tasten geht und hier eigentlich auch, nur nicht bei mehreren Spielern (wobei es da auch manchmal funktioniert). -
Versuche es mal so:
Spoiler anzeigen public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys & KEY_NO && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
if(GetEngineState(GetPlayerVehicleID(playerid)) == 1)
{
ToggleEngine(GetPlayerVehicleID(playerid),0);
GameTextForPlayer(playerid, "~r~Engine turned off", 2000, 3);
}
else
{
ToggleEngine(GetPlayerVehicleID(playerid),1);
GameTextForPlayer(playerid, "~r~Engine turned on", 2000, 3);
}
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------
if(newkeys & (KEY_SPRINT))
{
if(IsPlayerInRangeOfPoint(playerid, 5.0, 1344.98877, 1244.95239, 41.18820))
{
ShowPlayerDialog(playerid,4,DIALOG_STYLE_LIST,"Spectate RW","Runway 69 North\nRunway 69 South\nRunway 5 North\nRunway 5 South","Spectate","Close");
}
else if(IsPlayerInRangeOfPoint(playerid, 5.0, 1623.52991, -2286.77075, 94.26330))//LS
{
ShowPlayerDialog(playerid,5,DIALOG_STYLE_LIST,"Spectate RW","Runway 69 West\nRunway 69 East\nRunway 5 West\nRunway 5 East","Spectate","Close");
}
else if(IsPlayerInRangeOfPoint(playerid, 5.0, -1275.72742, 56.47289, 74.24910))//sf
{
ShowPlayerDialog(playerid,6,DIALOG_STYLE_LIST,"Spectate RW","Runway 69 North\nRunway 69 South","Spectate","Close");
}
}
//----------------------------------------------------------------------------------CART----------------------------------------------------------------
if (CartState[playerid] == 1)
{
if (newkeys & (KEY_SECONDARY_ATTACK ))
{
new Float:oX,Float:oY,Float:oZ;
GetPlayerPos(playerid,oX,oY,oZ);
RemovePlayerFromVehicle(playerid);
SetPlayerPos(playerid,oX,oY,oZ+1);
DestroyObject(CartObj[playerid]);
DestroyVehicle(CartID[playerid]);
CartState[playerid] = 0;
}
}
//---------------------------------haussystem-----------------------------------------------------------------------------------------------------------
if(newkeys & (KEY_SECONDARY_ATTACK))
{
for(new i = 0; i != MAX_HOUSES; i++)
{
if(IsPlayerInCheckpoint(playerid) && IsPlayerInDynamicCP(playerid, hausInfo[i][hCpID]))
{
SetPlayerPos(playerid, hausInteriorData[hausInfo[i][hInterior]][iX], hausInteriorData[hausInfo[i][hInterior]][iY], hausInteriorData[hausInfo[i][hInterior]][iZ]);
SetPlayerVirtualWorld(playerid, hausInfo[i][hID]);
SetPlayerInterior(playerid, hausInteriorData[hausInfo[i][hInterior]][iInterior]);
break;
}
}
new playerWorld = GetPlayerVirtualWorld(playerid);
if(playerWorld != 0)
{
for(new i = 0; i != MAX_HOUSES; i++)
{
if(hausInfo[i][hID] == playerWorld)
{
if(IsPlayerInRangeOfPoint(playerid, 3, hausInteriorData[hausInfo[i][hInterior]][iX], hausInteriorData[hausInfo[i][hInterior]][iY], hausInteriorData[hausInfo[i][hInterior]][iZ]))
{
SetPlayerPos(playerid, hausInfo[i][hX], hausInfo[i][hY], hausInfo[i][hZ]);
SetPlayerVirtualWorld(playerid, 0);
SetPlayerInterior(playerid, 0);
break;
}
}
}
}
}
return 1;
}
Ich hab dir auch gleich mal das Durcheinander behoben.
-
Danke, ich werde es mal probieren. Eine Frage, was hast du den genau verändert ?
-
Ich habe die "return 1;" - e entfernt und ich habe den Motor-Teil ganz nach oben gezogen um die Ausführung des Motor-Codes zu garantieren.
-
breadfish.de
Hat das Thema geschlossen.