Immer noch OnPlayerKeyStateChangeBug

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
  • 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;
    }

  • 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.