16
Scripting SA-MP [Pawn center] / Re : [Demande Aide] Programmation IA
« le: 08 Janvier 2014, 12:07:44 »
Pour moi, A* serait l'un des meilleurs choix: Algorithme A* - Wikipédia
Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.
public OnPlayerDisconnect(playerid, reason)
{
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);
INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
INI_Close(File);
gJob[playerid] = 0;
PlayerInfo[playerid][pAdmin] = 0;
checkpoint = 0;
SaveAccount(playerid);
return 1;
}
public SaveAccount(playerid)
{
if(IsPlayerConnected(playerid))
{
new string3[32];
//new valeur[32];
new playername3[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername3, sizeof(playername3));
format(string3, sizeof(string3), "Users/%s.ini", playername3);
new File: hFile = fopen(string3, io_write);
if (hFile)
{
new var[32];
format(var, 32, "Mdp=%s\n", PlayerInfo[playerid][pMdp]);fwrite(hFile, var);
format(var, 32, "Argent=%d\n",PlayerInfo[playerid][pArgent]);fwrite(hFile, var);
format(var, 30, "Admin=%d\n",PlayerInfo[playerid][pAdmin]);fwrite(hFile, var);
format(var, 30, "Meurtres=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var);
format(var, 30, "Morts=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var);
fclose(hFile);
//SpawnPlayer(playerid);
}
}
return 1;
}
Pour ma part ce que je peux te dire pour ton anti cheat, ne fait jamais d'anticheat qui kick, banni automatiquement car ton anticheat ne sera jamais sûr à 100%.
Ce qu'il faut que tu fasse c'est envoyer un message à tous les membres du staff présents indiquant le type de cheat utilisé.
printf("Player level: %i\n", level);
CiterEn général, quand un joueur prend des dégâts, sa vie ne baisse pas.Ah bon ?
forward payday();
public OnGameModeInit()
{
SetTimer("payday", 60000, true);
}
public payday() {
new hh, mm, ss;
gettime( hh, mm, ss );
if( mm == 0 )
{
for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i))
{
new level = PlayerInfo[i][pLevel];
new string[952];
if(level == 1)
{
new Payday = 10000;
GivePlayerMoney(i, Payday);
SendClientMessage(i, couleur_vert_clair,"{F6F600} ________________________________________________________________\n");
SendClientMessage(i, couleur_vert_clair,"{F6F600}|________________________ Jours de Paye _________________________|\n");
format(string, sizeof(string), "{F6F600}|____________________ {00F600}Vous avez reçu %s${F6F600} ____________________|\n", Payday);
SendClientMessage(i, couleur_vert_clair, string);
SendClientMessage(i, couleur_vert_clair,"{F6F600} ________________________________________________________________\n");
}
if(level == 2)
{
new Payday = 20000;
GivePlayerMoney(i, Payday);
SendClientMessage(i, couleur_vert_clair,"{F6F600} ________________________________________________________________\n");
SendClientMessage(i, couleur_vert_clair,"{F6F600}|________________________ Jours de Paye _________________________|\n");
format(string, sizeof(string), "{F6F600}|____________________ {00F600}Vous avez reçu %s${F6F600} ____________________|\n", Payday);
SendClientMessage(i, couleur_vert_clair, string);
SendClientMessage(i, couleur_vert_clair,"{F6F600} ________________________________________________________________\n");
}
}
}
return 1;
}
Les lag ou l'unsynchro ou autre fait que parfois on se fait toucher mais on ne perd rien. Qu'en pensez vous ?
Sinon, pour l'invincibilité, tu n'as qu'à vérifier si, lorsqu'un joueur tire sur un autre joueur (Tu peux faire ça via OnPlayerTakeDamage il me semble), sa vie descend bien (pour ça tu fais un timer, que tu utiliseras aussi pour vérifier les tp, et tu récupères la vie dans une variable), si la vie est bien égale à la variable moins le dégats censés êtres reçus, tu ne fais rien, mais sinon, ça devrait détecter l'invincibilité
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid) {
new Float:playerHealth = 0.0;
GetPlayerHealth(playerid, playerHealth);
if (playerHealth > (100.0 - amount)) {
// HAXXXXXXX
}
return 1;
}