AntiCheat bereitet Probleme

  • AntiCheat bereitet Probleme

    Neu

    Mein AntiCheat bereitet mir derzeit Probleme. Sobald ich auf den Server Connecte habe ich pHealth = 100; zugewiesen.

    Nun gebe ich mein Passwort ein und die pHealth wird komischerweise auf 0 gestzt (erfahren durch printf)

    Nun ist meine Frage was kann man machen damit dieser Befehl richtig funktioniert ?

    PAWN-Quellcode

    1. if(Health != pHealth[i] && Health > 0)
    2. {
    3. if(Health > pHealth[i])
    4. {
    5. SetPlayerHealth(i, pHealth[i]);
    6. SendClientMessage(i,COLOR_RED, "Health Hacker"); //hier mäckert er
    7. }
    8. else
    9. {
    10. pHealth[i] = Health;
    11. return 1;
    12. }
    13. }
    Alles anzeigen
  • Neu

    Hier wird der Spawn angesprochen

    PAWN-Quellcode

    1. public OnPlayerSpawn(playerid)
    2. {
    3. pHealth[playerid] = PlayerInfo[playerid][pLive];
    4. foreach(Player, i)
    5. {
    6. new Float:Health;
    7. GetPlayerHealth(i, Health);
    8. new string[128];
    9. format(string,sizeof(string),"Health %i",Health);
    10. SendClientMessage(i,COLOR_RED,string);
    11. }
    12. SetPlayerArmour(playerid,0);
    13. SetPlayerSkin(playerid,PlayerInfo[playerid][pSkin]);
    14. if(PlayerInfo[playerid][pBanned]==-1)
    15. {
    16. SetPlayerPos(playerid,1242.8275,-1695.3693,16.1874);
    17. new string[1600],string1[1300],name1[MAX_PLAYER_NAME];
    18. GetPlayerName(playerid,name1,sizeof(name1));
    19. format(string,sizeof(string),"Dieser Account ist gesperrt, mit ihm kann nicht gespielt werden.\n\nWenn das nicht dein Account ist, verwende einen anderen Nicknamen\nWenn das dein Account ist und du zu unrecht gesperrt wurdest, melde dich im Forum unter"Servername"\n\nGrund: %s\nDauer:Permanent\nAusgeführt von: %s",PlayerInfo[playerid][pBanreason],PlayerInfo[playerid][pBanner]);
    20. strcat(string1,string);
    21. ShowPlayerDialog(playerid, DIALOG_STATISTIKEN, DIALOG_STYLE_MSGBOX,PlayerInfo[playerid][pName],string1,"Ok","");
    22. SetTimerEx("KickTimer",1000,false,"i",playerid);
    23. }
    24. else
    25. {
    26. if(PlayerInfo[playerid][pBanned]==1)
    27. {
    28. SetPlayerPos(playerid,1242.8275,-1695.3693,16.1874);
    29. new string[1600],string1[1300],name1[MAX_PLAYER_NAME];
    30. GetPlayerName(playerid,name1,sizeof(name1));
    31. format(string,sizeof(string),"Dieser Account ist gesperrt, mit ihm kann nicht gespielt werden.\n\nWenn das nicht dein Account ist, verwende einen anderen Nicknamen\nWenn das dein Account ist und du zu unrecht gesperrt wurdest, melde dich im Forum unter"Servername"\n\nGrund: %s\nDauer:%s\nAusgeführt von: %s",PlayerInfo[playerid][pBanreason],PlayerInfo[playerid],PlayerInfo[playerid][pBanner]);
    32. strcat(string1,string);
    33. ShowPlayerDialog(playerid, DIALOG_STATISTIKEN, DIALOG_STYLE_MSGBOX,PlayerInfo[playerid][pName],string1,"Ok","");
    34. SetTimerEx("KickTimer",1000,false,"i",playerid);
    35. }
    36. else
    37. {
    38. if(PlayerInfo[playerid][SpawnInKnast]==1)
    39. {
    40. SetPlayerPos(playerid, 265.9037,77.2875,1001.0391);
    41. SetPlayerInterior(playerid,6);
    42. jailTimer[playerid] = SetTimerEx("SetPlayerUnjail", 1000, 1, "d",playerid);
    43. if(jailTimer[playerid] == -1) KillTimer(jailTimer[playerid]);
    44. TogglePlayerControllable(playerid,1);
    45. }
    46. if(PlayerInfo[playerid][pSpawn] == 1)
    47. {
    48. SetPlayerPos(playerid,1243.0741,-1695.6372,16.1820);
    49. SetPlayerVirtualWorld(playerid,0);
    50. }
    51. if(PlayerInfo[playerid][pSpawn] == 2)
    52. {
    53. SetPlayerPos(playerid,-1969.2156,137.9266,27.6875);
    54. SetPlayerVirtualWorld(playerid,0);
    55. }
    56. if(PlayerInfo[playerid][pSpawn] == 3)
    57. {
    58. SetPlayerPos(playerid,2849.0522,1290.9452,11.3906);
    59. SetPlayerVirtualWorld(playerid,0);
    60. }
    61. if(PlayerInfo[playerid][pSpawn]==4)
    62. {
    63. if(PlayerInfo[playerid][pMember]>0 || PlayerInfo[playerid][pLeader]>0)
    64. {
    65. new fID;
    66. fID = PlayerInfo[playerid][pMember];
    67. SetPlayerPos(playerid, fInfo[fID][f_x],fInfo[fID][f_y],fInfo[fID][f_z]);
    68. SetPlayerFacingAngle(playerid, fInfo[fID][f_r]);
    69. SetPlayerInterior(playerid, fInfo[fID][f_inter]);
    70. SetPlayerVirtualWorld(playerid, fInfo[fID][f_world]);
    71. SetPlayerColor(playerid, fInfo[fID][f_color]);
    72. }
    73. else
    74. {
    75. PlayerInfo[playerid][pSpawn]=1;
    76. SpawnPlayer(playerid);
    77. }
    78. }
    79. if(PlayerInfo[playerid][pSpawn]==5)
    80. {
    81. for(new i=0; i<sizeof(hInfo); i++)
    82. {
    83. if(!hInfo[i][h_id])continue;
    84. if(!strlen(hInfo[i][h_besitzer]))continue;
    85. if(strcmp(hInfo[i][h_besitzer], getPlayerName(playerid), true))continue;
    86. if(hInfo[i][ih_x] != 0.0)
    87. {
    88. //Im Haus spawnen
    89. SetPlayerPos(playerid, hInfo[i][ih_x], hInfo[i][ih_y], hInfo[i][ih_z]);
    90. SetPlayerInterior(playerid, hInfo[i][h_interior]);
    91. SetPlayerVirtualWorld(playerid, i);
    92. }
    93. else
    94. {
    95. //Vorm Haus Spawnen
    96. SetPlayerPos(playerid, hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z]);
    97. SetPlayerInterior(playerid, 0);
    98. SetPlayerVirtualWorld(playerid, 0);
    99. }
    100. }
    101. }
    102. }
    103. }
    104. if(OnDuty[playerid] ==1)
    105. {
    106. OnDuty[playerid] =0;
    107. }
    108. return 1;
    109. }
    Alles anzeigen
  • Neu

    Was wird dir beim Spawn so ausgegeben:

    PAWN-Quellcode

    1. pHealth[playerid] = PlayerInfo[playerid][pLive];

    zu:

    PAWN-Quellcode

    1. printf("1: %f", pHealth[playerid]);
    2. pHealth[playerid] = PlayerInfo[playerid][pLive];
    3. printf("2: %f", pHealth[playerid]);


    PS: Durch die Schleife in der Zeile drunter sendest du jedem Spieler, wenn irgendein Spieler spawnt, seinen aktuellen Health-Stand. Ist das gewollt?

  • Neu

    Die Schleife darunter mit foreach war nicht meine absicht gewesen.

    Ich habe den Code wie folgt nun abgeändert

    PAWN-Quellcode

    1. public OnPlayerSpawn(playerid)
    2. {
    3. if(PlayerInfo[playerid][SpawnInKnast]==1)
    4. {
    5. SetPlayerPos(playerid, 265.9037,77.2875,1001.0391);
    6. SetPlayerInterior(playerid,6);
    7. jailTimer[playerid] = SetTimerEx("SetPlayerUnjail", 1000, 1, "d",playerid);
    8. if(jailTimer[playerid] == -1) KillTimer(jailTimer[playerid]);
    9. TogglePlayerControllable(playerid,1);
    10. }
    11. switch(PlayerInfo[playerid][pSpawn])
    12. {
    13. case 0:
    14. {
    15. PlayerInfo[playerid][pSpawn]=1;
    16. }
    17. case 1:
    18. {
    19. SetPlayerPos(playerid,1830.9562,-1125.6575,23.8393);
    20. SetPlayerVirtualWorld(playerid,0);
    21. }
    22. case 2:
    23. {
    24. SetPlayerPos(playerid,-1969.2156,137.9266,27.6875);
    25. SetPlayerVirtualWorld(playerid,0);
    26. }
    27. case 3:
    28. {
    29. SetPlayerPos(playerid,2849.0522,1290.9452,11.3906);
    30. SetPlayerVirtualWorld(playerid,0);
    31. }
    32. case 4:
    33. {
    34. if(PlayerInfo[playerid][pMember]>0 || PlayerInfo[playerid][pLeader]>0)
    35. {
    36. new fID;
    37. fID = PlayerInfo[playerid][pMember];
    38. SetPlayerPos(playerid, fInfo[fID][f_x],fInfo[fID][f_y],fInfo[fID][f_z]);
    39. SetPlayerFacingAngle(playerid, fInfo[fID][f_r]);
    40. SetPlayerInterior(playerid, fInfo[fID][f_inter]);
    41. SetPlayerVirtualWorld(playerid, fInfo[fID][f_world]);
    42. SetPlayerColor(playerid, fInfo[fID][f_color]);
    43. }
    44. else
    45. {
    46. PlayerInfo[playerid][pSpawn]=1;
    47. SpawnPlayer(playerid);
    48. }
    49. }
    50. case 5:
    51. {
    52. for(new i=0; i<sizeof(hInfo); i++)
    53. {
    54. if(!hInfo[i][h_id])continue;
    55. if(!strlen(hInfo[i][h_besitzer]))continue;
    56. if(strcmp(hInfo[i][h_besitzer], getPlayerName(playerid), true))continue;
    57. if(hInfo[i][ih_x] != 0.0)
    58. {
    59. //Im Haus spawnen
    60. SetPlayerPos(playerid, hInfo[i][ih_x], hInfo[i][ih_y], hInfo[i][ih_z]);
    61. SetPlayerInterior(playerid, hInfo[i][h_interior]);
    62. SetPlayerVirtualWorld(playerid, i);
    63. }
    64. else
    65. {
    66. //Vorm Haus Spawnen
    67. SetPlayerPos(playerid, hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z]);
    68. SetPlayerInterior(playerid, 0);
    69. SetPlayerVirtualWorld(playerid, 0);
    70. }
    71. }
    72. }
    73. }
    74. if(OnDuty[playerid] ==1)
    75. {
    76. OnDuty[playerid] =0;
    77. }
    78. SetPlayerArmour(playerid,0);
    79. SetPlayerSkin(playerid,PlayerInfo[playerid][pSkin]);
    80. printf("1: %f", pHealth[playerid]);
    81. printf("2: %f", pHealth[playerid]);
    82. return 1;
    83. }
    Alles anzeigen


    Der Print gibt folgendes aus

    PAWN-Quellcode

    1. [18:01:12] 1: 100.000000[18:01:12] 2: 100.000000


    eigentlich beides richtig.

    Vielleicht ist OnPlayerConnect noch mit entscheiden aber dort setze ich das leben mit


    PAWN-Quellcode

    1. pHealth[playerid] = 100;


    Das Problem taucht nur auf wenn der Spieler sich neu einloggen tut. Allerdings nicht wenn ich den Spieler neu spawne
  • Neu

    Jeffry schrieb:

    Für deinen Anti-Cheat dann:

    PAWN-Quellcode

    1. pHealth[playerid] = PlayerInfo[playerid][pLive];SetPlayerHealth(playerid, pHealth[playerid]);

    Ab dort kriege ich wieder angezeigt das ich ein Hacker bin.

    Ich poste mal hinzu dort wo mir das gesagt wird

    PAWN-Quellcode

    1. foreach(Player, i)
    2. {
    3. new Float:Health;
    4. GetPlayerHealth(i, Health);
    5. if(Health != pHealth[i] && Health > 0)
    6. {
    7. if(Health > pHealth[i])
    8. {
    9. SetPlayerHealth(i, pHealth[i]);
    10. SendClientMessage(i,COLOR_RED, "Health Hacker");
    11. }
    12. else
    13. {
    14. pHealth[i] = Health;
    15. return 1;
    16. }
    17. }
    18. }
    Alles anzeigen
  • Neu

    Was wird dir so ausgegeben?

    PAWN-Quellcode

    1. new Float:Health;
    2. foreach(Player, i)
    3. {
    4. GetPlayerHealth(i, Health);
    5. printf("i: %d / Health: %f / pHealth: %f", i, Health, pHealth[i]);
    6. if(Health > pHealth[i] && Health > 0)
    7. {
    8. SetPlayerHealth(i, pHealth[i]);
    9. SendClientMessage(i,COLOR_RED, "Health Hacker");
    10. }
    11. else
    12. {
    13. pHealth[i] = Health;
    14. }
    15. }
    Alles anzeigen
  • Neu

    Folgendes wird mir ausgegeben

    PAWN-Quellcode

    1. [18:26:15] i: 0 / Health: 100.000000 / pHealth: 90.000000
    2. [18:26:15] i: 0 / Health: 90.000000 / pHealth: 90.000000
    3. [18:26:15] i: 0 / Health: 90.000000 / pHealth: 90.000000



    ich sehe

    PAWN-Quellcode

    1. [18:26:15] i: 0 / Health: 100.000000 / pHealth: 90.000000

    hier ist wohl ein Fehler. Allerdings gebe ich den Health nicht mehr an außer in OnPlayerSpawn