GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: LePtitClown le 07 Mai 2009, 19:42:55
-
Slt
J'ai décidé de créer ce topic ( comme l'a fait précédemment Startoflo ) pour ne pas créer de nombreux topic inutile.
J'ai un problème avec la fonction isplayerinarea
Je n'arrive pas à rentrer les bons coordonnées pourtant je prend bien(Xmin ,Ymin, Xmax, Ymax
En prenant mes coordonnés à ces encdroit là
N
-------------------------X
- -
- -
- -
- -
X-----------------------
A++ :)
-
voila j' espere que ca t aidera http://forum.sa-mp.com/index.php?topic=14702.0 (http://forum.sa-mp.com/index.php?topic=14702.0)
-
Et pour mieux comprendre la théorique ... pour pas faire ca et rester bete :P
http://forum.sa-mp.com/index.php?topic=90445.0 (http://forum.sa-mp.com/index.php?topic=90445.0)
++
nikko
-
Merci à vous deux, 2 techniques très différentes mais la 2eme marche pour la première ça a l'air de simplifier la vie, j'avais déja entendu parler de ce logiciel mais je ne le trouvais pas
A+++ :D
-
Salut
Autres problèmes:
J'ai crée un DM qui marche parfaitement dans mon Game Mode
J'ai suivi à la lettre les tutos pour réapparaitres dans le DM ( toujours aucun soucis )
Mais le problème c'est que lorsque je suis dand le dm et que je meurs je ne réapparais pas dans le dm
Je sais d'où vient le problème mais je ne sais pas comme le résoudre
Le problème survient car pour créer une redirection dans le dm j'ai ajouté un setplayerpos dans one player spawn mais j'ai déja un setplayerpos dans ce public
Donc je ne sais pas comment faire pour réapparaitre dans ce dm malgré le fait que j'ai plusieurs setplayterpos dans oneplayerspawn
PS: j'ai essayé avec un timer mais ça ne corrige pas le problème
Merci d'avance pour votre aide :D
A++
-
fait tout en haut de onplayerspawn
if( ici t as var de dm)
{
setplayerpos( pos du dm);
return 1; //surtout met le return 1;
}
-
Merci pour ton aide, mais ça ne marche toujours pas :'(
public OnPlayerSpawn(playerid)
{
SetPlayerInterior(playerid,0);
PlayerPlaySound(playerid, 1187+1, 0.0, 0.0, 0.0); //rajouter pour arrêter la musique
GangZoneShowForPlayer(playerid, gangzone, 0xFF80FF96);//gangzone
Spawned[playerid] = 1;
if(InDm[playerid] ==1)//si la variable = 1
{
SetPlayerPos(playerid,1383.6260,2185.7075,11.0234);
}
else if(InDm[playerid] ==0)
{
return 1;
}
if(gTeam[playerid] == TEAM_FLICS)
{
SetPlayerColor(playerid,COLOR_BLUE);
SetPlayerPos(playerid, 2348.4797,2455.0640,14.9742);
}
else if(gTeam[playerid] == TEAM_HORS_LA_LOI)
{
SetPlayerColor(playerid,COLOR_YELLOW);
SetPlayerPos(playerid, 2621.3303,1824.2733,11.0234);
}
else if(gTeam[playerid] == TEAM_MAFIEUX)
{
SetPlayerColor(playerid,COLOR_RED);
SetPlayerPos(playerid, 2148.6624,1683.4133,10.8203);
}
else if(gTeam[playerid] == TEAM_CIVIL)
{
SetPlayerColor(playerid,COLOR_GREEN);
SetPlayerPos(playerid, 2137.4758,1451.4338,10.8203);
}
return 1;
}
Voici le code que j'ai ( voir plus haut ), mais ça ne marche toujours pas
A++
-
public OnPlayerSpawn(playerid)
{
SetPlayerInterior(playerid,0);
PlayerPlaySound(playerid, 1187+1, 0.0, 0.0, 0.0); //rajouter pour arrêter la musique
GangZoneShowForPlayer(playerid, gangzone, 0xFF80FF96);//gangzone
Spawned[playerid] = 1;
if(InDm[playerid] ==1)//si la variable = 1
{
SetPlayerPos(playerid,1383.6260,2185.7075,11.0234);
return 1;
}
if(gTeam[playerid] == TEAM_FLICS)
{
SetPlayerColor(playerid,COLOR_BLUE);
SetPlayerPos(playerid, 2348.4797,2455.0640,14.9742);
}
else if(gTeam[playerid] == TEAM_HORS_LA_LOI)
{
SetPlayerColor(playerid,COLOR_YELLOW);
SetPlayerPos(playerid, 2621.3303,1824.2733,11.0234);
}
else if(gTeam[playerid] == TEAM_MAFIEUX)
{
SetPlayerColor(playerid,COLOR_RED);
SetPlayerPos(playerid, 2148.6624,1683.4133,10.8203);
}
else if(gTeam[playerid] == TEAM_CIVIL)
{
SetPlayerColor(playerid,COLOR_GREEN);
SetPlayerPos(playerid, 2137.4758,1451.4338,10.8203);
}
return 1;
}essaye ca =D
-
Re:
Un énrome merci à toi, ça marche nickel, mon DM est maintenant opérationnel :cheers
Mais au fait, tu as changé quoi? ???
A++ :D
-
if(InDm[playerid] ==1)//si la variable = 1
{
SetPlayerPos(playerid,1383.6260,2185.7075,11.0234);
}
else if(InDm[playerid] ==0)
{
return 1;
}
ici tu a mis le return 1; si le joueur et pas dans le dm donc c' est pas bon ca va continuer tout ce qui reste dans la fonction
et dans mon code
if(InDm[playerid] ==1)//si la variable = 1
{
SetPlayerPos(playerid,1383.6260,2185.7075,11.0234);
return 1;
}
ici si le joueur est dans un Dm ca fait le setplayerpos et puis le reste de la fonction ne s execute pas =D voila
-
OK merci :D
-
Une petite question:
Slt, je cherche à réaliser une petit feux d'artifice sur mon serveur.
Vous allez me dire de prendre firewrokd mais moi je préfère réaliser une script beaucoup plus simple avec juste quelques fusée et un seul site de lancement.
Donc je souhaiterai avoir l'ID de ces petite fusée et s'il est possible d'activer le feux d'artifice à l'aide d'une commande.
PS: si cette ID d'objet existe car je ne l'ai jamais vu.
Merci d'avance pour vos réponses
A++ :D
-
Bah regarde dans le script de fireworks et regarde l'id et tout .. :king
++
nikko
-
C' est de objet de fuset qui son lancer avec moveobject a et un certain hauteur boum =D
-
C'est ce que je viens de vérifier donc en gors c'est trop compliquer pour moi affaire classé, j'utiliserai firewrok comme tout le monde.
2 eme problème moins difficle je pense:
J'ai un petit problème avec mes petites voiture de flic réservés juste au flics.
Lorsque je sors de la caisse de flic, ce message s affiche: vous n'êtes pas un flic
Et je peux rentrer dans la voiture de flic bien que je ne soit pa flic
Voici mon script:
if(newstate == PLAYER_STATE_DRIVER) // Si le joueur est dans l'etats de conducteur
{
if(gTeam[playerid] == TEAM_FLICS)
{
new vehicleid = GetPlayerVehicleID(playerid); // On recupere l'id du vehicule dans lequel est le joueur //rajouter pour le marqueur
if(vehicleid == 60 || vehicleid == 61 || vehicleid == 62 || vehicleid == 63 || vehicleid == 64 || vehicleid == 65 || vehicleid == 101 || vehicleid == 102 || vehicleid == 103 || vehicleid ==104 || vehicleid == 105 || vehicleid == 162 || vehicleid == 163)//MODIFICATION A EFFECTUER
{
SendClientMessage(playerid, COLOR_GREEN, "Bienvenue cher Officier, fais respecter la loi");
}
}
}
else
{
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, COLOR_RED, "Tu n'es pas policier");
}
return 1;
}
A++ :)
-
Salut,
Ta ajouté ou supprimé des véhicules ( AddStaticVehicle ou AddStaticVehicleEx ) donc ta liste de carid est dérégler, tu dois tout refaire
Good Luck
-
Salut,
Salut,
Ta ajouté ou supprimé des véhicules ( AddStaticVehicle ou AddStaticVehicleEx ) donc ta liste de carid est dérégler, tu dois tout refaire
Good Luck
pas nécessairement, si l'on regarde son code on y voit très bien la signification: si le nouveau statut n,est pas conduecteur, on le retire du véhicule et lui envoie le message, bref tu dois le restructuré....
++Sim++
-
la cause parfois de sa, sont les carid déréglé.
-
Salut,
je vais simplement faire peser mon point de vue à l'aide de commentaires :-[
if(newstate == PLAYER_STATE_DRIVER) // Si le joueur est dans l'etats de conducteur
{
if(gTeam[playerid] == TEAM_FLICS)//si le joueur est flic
{
new vehicleid = GetPlayerVehicleID(playerid); // On recupere l'id du vehicule dans lequel est le joueur //rajouter pour le marqueur
if(vehicleid == 60 || vehicleid == 61 || vehicleid == 62 || vehicleid == 63 || vehicleid == 64 || vehicleid == 65 || vehicleid == 101 || vehicleid == 102 || vehicleid == 103 || vehicleid ==104 || vehicleid == 105 || vehicleid == 162 || vehicleid == 163)//CARID (peut-être invalide)
{
SendClientMessage(playerid, COLOR_GREEN, "Bienvenue cher Officier, fais respecter la loi");//le joueur est policier et il entre dans une voiture de police
}//on est maintenant hors de la condition véhicules de police
}//le test concernant la team du joueur arrête ici
}//le test concernant sont statut fini ici
else//si le nouveau statut du joueur n,est pas conducteur
{
RemovePlayerFromVehicle(playerid);//s'il n'est pas conducteur, on l'enlève de son véhicule et on lui envoie le message (c là que le problème apparait...)
SendClientMessage(playerid, COLOR_RED, "Tu n'es pas policier");
}
return 1;
voilà, tu devrais donc voir ce qui cloche dans ce bout de code (+ les carid incertains)
++Sim++
-
Slt
Les car id marchent car lorsque je suis flic j'ai bien le message qui me confirme que je suis dans un véhicule de flic
Nikko, je te remercie pour ton aide ( et aussi aux autre ) mais je ne vois vraiment d'où peut venir mon erreur.
La ligne que tu me dis ne me semble pas poser de problème, je ne vois pas quoi changer sur cette ligne
Pourrais avoir plus d'informations car ce code sera fort util pour mon serveur ?
A+ :)
-
A propos de quoi ? quel erreur ?
++
nikko
-
Slt
Pour les erreurs, j' en ai aucune ni de warnings d'ailleurs, mais dans le jeux lorsque je réalise des modifications, soit le message s' affiche lorsque je ne suis pas dans un véhicule ou soit je ne peux rentrer dans aucun véhicule.
Malgré mes tentatives, toujours un de ces deux problèmes persistent.
if(newstate == PLAYER_STATE_ONFOOT)
{
TextDrawHideForPlayer(playerid, Speedo[playerid]);
}
else if(newstate == PLAYER_STATE_DRIVER) // Si le joueur est dans l'etats de conducteur
{
if(gTeam[playerid] == TEAM_FLICS) //si le joueur est flic
{
new vehicleid = GetPlayerVehicleID(playerid); // On recupere l'id du vehicule dans lequel est le joueur //rajouter pour le marqueur
if(vehicleid == 60 || vehicleid == 61 || vehicleid == 62 || vehicleid == 63 || vehicleid == 64 || vehicleid == 65 || vehicleid == 101 || vehicleid == 102 || vehicleid == 103 || vehicleid ==104 || vehicleid == 105 || vehicleid == 162 || vehicleid == 163)//CARID (peut-être invalide)
{
SendClientMessage(playerid, COLOR_GREEN, "Bienvenue cher Officier, fais respecter la loi");//le joueur est policier et il entre dans une voiture de police
} //on est maintenant hors de la condition véhicules de police
}
} //le test concernant la team du joueur arrête ici //le test concernant sont statut fini ici
else //si le nouveau statut du joueur n,est pas conducteur
{
RemovePlayerFromVehicle(playerid); //s'il n'est pas conducteur, on l'enlève de son véhicule et on lui envoie le message (c là que le problème apparait...)
SendClientMessage(playerid, COLOR_RED, "Tu n'es pas policier");
}
return 1;
}
A++ :D
Double post
UP!
Adez moi SVP
A++ :D
-
Les carid sont toujours la 1ére cause du bug de véhicule !
Donc vérifie bien les numéros etc..
Ps: Évite les double post.
Azz 8)
-
Dsl pour le double post je vooulais juste faire un petit up :'(
Les carid sont nickel le message s'affiche lorsque je sors de n'importe quel véhicule
Donc je ne vois vraiment pas où est le problème
Aidez moi :)
A+
-
if(newstate == PLAYER_STATE_ONFOOT)
{
TextDrawHideForPlayer(playerid, Speedo[playerid]);
}
else if(newstate == PLAYER_STATE_DRIVER)
{
new vehicleid = GetPlayerVehicleID(playerid);
if(vehicleid == 60 || vehicleid == 61 || vehicleid == 62 || vehicleid == 63 || vehicleid == 64 || vehicleid == 65 || vehicleid == 101 || vehicleid == 102 || vehicleid == 103 || vehicleid ==104 || vehicleid == 105 || vehicleid == 162 || vehicleid == 163)//CARID (peut-être invalide)
{
if(gTeam[playerid] == TEAM_FLICS)
{
SendClientMessage(playerid, COLOR_GREEN, "Bienvenue cher Officier, fais respecter la loi");
else
{
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, COLOR_RED, "Tu n'es pas policier");
}
}
return 1;
}
Vla t'avait inversé des condition ...
-
Slt
un grand merci à toi et à vous tous d'ailleurs le script marche nickel après quelques petites modifications d'accolades
A++ :D
-
Slt
Je viens vous présenter une nouveau problème sur un script qui me paraissait simple à régler mais malgré le fait qu je n'ai aucune erreurs ni de warnings, mon killtimer ne marche pas. Losque je tape /test mon timer se lance normalment mais il ne s'arrête pas au bout des 5 secondes comme prévu. Un message s'affiche alors toutes les 5 seondes une fois la commande tapée. Voici mon code:
new test; ( tout en haut avant main )
forward test(); ( pour définir mon timer )
(Dans le public one playercommand )
if(strcmp(cmd, "/test", true) == 0)
{
SetTimer("test",5000,1);
SendClientMessage(playerid, COLOR_GREEN, "La commande test a été activée");
KillTimer(test);
}
Merci d'avance pour vos réponses
A+++ :D
-
C'est pas comme sa que sa marche un timer...
Il te faut pour commencer une variable
new timer;
il te faut ta fonction en public et sont forward:
forward Test();
public Test()
{
//Le code que fait ta fonction
}
Ensuite tu lance le timer de cette facon:
timer = SetTimer("Test",5000,1);
Et pour kill le timer :
KillTimer(timer);
vla
-
Slt
Meric pour ton aide
Mais en suivant tes modifications, j 'ai encore quleques problèmes. Que dois je mettre maintenant dans ma commande /test ?
A++ :)
-
Salut,
il te suffit de suivre les instructions de MrFredo, tout est clair ;)
sinon un petit peu d'aide:
en haut la première partie (jusqu'au forward, de la même façon que avait fais sauf que tu change le nom de ta variable)
puis dans ta commande tu place le timer tel que te l'as donné MrFreo
à la fin de ton code ajoute la fonction public contenant le code à exécuter (et le killtimer?, tout dépend du résultat escompté)
++Sim++
-
Slt
En suivant les instructions de Fredo que je pense avoir comprise, j'arrive à ce résultat:
//===========================AVANT MAIN=========================================
new timer; //pour le test
forward Test();
//=================COMMANDE TEST================================================
if(strcmp(cmd, "/test", true) == 0)
{
SendClientMessage(playerid, COLOR_GREEN, "La commande test a été activée");
timer = SetTimer("timer",5000,1);
}
//===================TEST=======================================================
public Test()
{
SendClientMessageToAll(0x00FF00FF, "Les 30 secondes ont été écoulées");
KillTimer(timer);
return 1;
}
Or ce code ne marche pas hélas. Au bout des 5 secondes, rien ne se produit. Si vous pouviez encore m'aider un peu ^^
A++ :D
-
un petit manque d'innatention
//===========================AVANT MAIN=========================================
new timer; //pour le test
forward Test();
//=================COMMANDE TEST================================================
if(strcmp(cmd, "/test", true) == 0)
{
SendClientMessage(playerid, COLOR_GREEN, "La commande test a été activée");
timer = SetTimer("Test",5000,1);
}
//===================TEST=======================================================
public Test()
{
SendClientMessageToAll(0x00FF00FF, "Les 30 secondes ont été écoulées");
KillTimer(timer);
return 1;
}
-
Merci beacoup à vous 3
A++ :)
-
Slt
J'ai un tout petit problème, je souhaite mettre un point noir à un skin pour le radar mais je ne trouve pas le code hexa de la couleur noir, j'ai trouvé darkred mais pas le noir tout simple sans mélange. Existe elle sur SA-MP ?
Si, oui pouvez vous me donner la réponse sous cette forme: #define COLOR_DARKRED 0x660000AA
A++ :)
-
voila un petit truc sympas http://files.uploadffs.com/9e0739_Colour_Picker.rar (http://files.uploadffs.com/9e0739_Colour_Picker.rar)
#define COLOR_Noir 0x000FF
-
Slt
Merci à toi Rambo :D
Je cherche un AntiCheat pour l'argent car mon serveur est principalement basé sur l'argent. J'aimerai bien celui du SF DTM car à ce que je vois il est efficace mais vous ne voudrez pas donc si vous aviez un anti cheat efficace pour les cheat de tune, merci de me le faire savoir
A++ :)
-
http://forum.sa-mp.com/index.php?topic=70644.0 (http://forum.sa-mp.com/index.php?topic=70644.0)
-
Salut,
Cristab tu as fait une petite erruer dans le code pour la couleur noir le code correct est :
#define COLOR_NOIR 0x000000FF
(tu peut changer les deux F afin de modifier la transparence du marqueur (merci de voir Define - Pawn Center (http://pawn.gtaonline.fr/index.php/Define) pour de plus amples informations))
++Sim++
-
Slt
Sim, c'est bizarre ce que tu dis car j'ai pris le code couleur de Cristab et je suis tombé sur exactement sur ce que je voulais, mais il doist exister plusieurs tranparence de noir comme tu le dis
A+
-
la couleur noir n'etant pas une couleur attention
-
Slt
- Je cherche un AntiCheat pour l'argent car mon serveur est principalement basé sur l'argent. J'aimerai bien celui du SF DTM car à ce que je vois il est efficace mais vous ne voudrez pas ce que je comprend donc si vous aviez un anti cheat efficace pour les cheat de tune, merci de me le faire savoir.
- Et si par hasard vous connaitriez des hébergerus gratuit gta sa mp faites le moi savoir, je sais que ça a déjà été traité mais les sujet n'ont pas été résolu
Merci d'avance
A++ :D
-
Béh si dans ton serveur le systeme de gain d' argent en stunt est desactiver et qu' on peu gagner de l' argent qu' avec des commandes béh tu met une variable
MoneyCheat[MAX_PLAYERS];
qui est à 0 avec un timer qui verifie si le joueurs gagner de l' argent si la variable est a 0 kick sinon tu ca ne fait rien mais oublie pas de mettre la variable a 1 pendant une cmd et dans le timer si on voit que la variable est a 1 on la remet a 0 voila c' est tout simple a faire est on est sur que ca fonctionne =)
J' espere t' avoir ;)
Si tu pige pas c' est que j ecris au college est j ai pas envie de rester sur trop sur gtaonline
-
Slt
Je vois ce que tu veux dire ( d'ailleurs ça ressemble à la variable de mon DM ) mais au niveau du timer je ne voit pas du tout ce qu'il vient faire la. Si tu pouvais me préciser encore un peu ce serait sympa.
Sur mon serveur on peut gagner de l'argent en:
- tuant un joueur ce que rapporte 5000
- avec la commande /givecash
- en jouant au casino
- ou tout simplement en faisant une roue avant en moto ou une cascade de toute sorte
PS: Il y a d'autres transferts d'argent mais ce sont des commandes payantes donc je ne sais pas s'il faut les citer car je pense que ton anti cheat marche juste quand l'argent augmente ce qui est logique.
A+ :D
-
tien je l ai fait =)
bien sur tu l adapte en gm ;)
new MoneyCheat[MAX_PLAYERS];
new KillTimerCheat;
new OldMoney[MAX_PLAYERS];
forward Anticheat();
public Anticheat()
{
for(new i = 0;i <= MAX_PLAYERS;i++)
{
if(MoneyCheat[i] == 1)
{
MoneyCheat[i] = 0;
return 1;
}
new money = GetPlayerMoney(i);
if(!(OldMoney[i] - money == 0))
{
Kick(i);
return 1;
}
OldMoney[i] = GetPlayerMoney(i);
}
return 0;
}
public OnFilterScriptInit()
{
KillTimerCheat = SetTimer("Anticheat",100,1);
return 1;
}
public OnFilterScriptExit()
{
KillTimer(KillTimerCheat);
return 1;
}
public OnPlayerConnect(playerid)
{
MoneyCheat[playerid] = 0;
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
MoneyCheat[playerid] = 0;
return 1;
}
et bien sur dans les cmd ou on gagne de l argent tu met MoneyCheat[playerid] = 1;
voila tout
en esperant qu il n y est pas d erreur pck telecharger pawno au cllege et tout coder lol
-
Salut,
hélas ce code comprend 2 - 3 défaut....
1. tu change la variable a un dans la commande = simple retard pour la détection
2. tu retourne 1 dès qu'un joueur à le moneyCheat à 1
3. Tu ne tiens pas en compte de la bonne façon des ajouts d'argents
Tu devrais plutôt enregistrer l'argent du joueur dans une variable(oldmoney dans ce code), lorsqu'il y a un changement fait par le serveur, tu ajoute le montant à la variable en question, tu évite de faire un timer trop court (5 ou 10 secondes est bien suffisant)...
donc ca donnerais à peu près ceci:
#define GivePlayerMoney(%0,%1) gLastCash[%0] += %1;\
GivePlayerMoney(%0, %1)
#define DIFFERENCE_MAXIMALE 500//différence maximale autorisée entre l'argent prévu et réel
new gLastCash[MAX_PLAYERS];//argent supposé du joueur
public MoneyHackDetection()
{
new tmp[128], money;
for( new i = 0; i < MAX_PLAYERS; i++)
{
if((money = GetPlayerMoney(i)))
{
if((money-gLastCash[i]) >= DIFFERENCE_MAXIMALE)
{
GetPlayerName(playerid, tmp, MAX_PLAYER_NAME);
format(tmp, sizeof(tmp), "Le joueur %s est kické pour money hack!", tmp);
SendClientMessageToAll(0xFFFFFFFF, tmp);
Kick(i);
}
gLastCash[i] = money;
}
}
return 1;
}
voilà en espérant que ce code soit bon, tu dois faire à peu près comme avec le code de sasuke, tu ajoute l'argent à la variable gLastCash lorsque tu donne de l'argent à un joueur (voir le premier define, ps. j'ai bien peur qu'il faudrait changer tous tes GivePlayerMoney (dont le premier du define) afin d'éviter que le code fasse de la récursion...(voir ci-dessous)).
Que dire de plus? n'oublie pas le timer (de 5 ou 10 secondes)
#define sGivePlayerMoney(%0,%1) gLastCash[%0] += %1;\
GivePlayerMoney(%0, %1)
++Sim++
-
Slt
tout d'abord merci pour votre aide après avoir adapté votre code il n'y a pas de warnings ni d'erreurs
Mais je ne suis en aucun cas kické si je cheat ma tune
Voivi le code exacte que j'ai inséré sur mon GM:
//=====ANTICHEATARGENT==========================================================
#define sGivePlayerMoney(%0,%1) gLastCash[%0] += %1;\
GivePlayerMoney(%0, %1)
#define DIFFERENCE_MAXIMALE 500//différence maximale autorisée entre l'argent prévu et réel
//==============================================================================
new gLastCash[MAX_PLAYERS];//argent supposé du joueur
new MoneyCheat[MAX_PLAYERS];
new KillTimerCheat;
//==============================================================================
forward MoneyHackDetection();
//==============================================================================
Main()
//==============================================================================
public OnGameModeInit()
{
KillTimerCheat = SetTimer("Anticheat",7000,1); //anticheatargent
//==============================================================================
public OnGameModeExit()
{
KillTimer(KillTimerCheat);//anticheatargent
return 1;
}
//==============================================================================
public OnPlayerConnect(playerid)
{
MoneyCheat[playerid] = 0;//anticheatargent
return 1;
}
//==============================================================================
public OnPlayerDisconnect(playerid, reason)
{
MoneyCheat[playerid] = 0;//anticheatargent
return 1;
}
//==============================================================================
public MoneyHackDetection()
{
new tmp[128], money;
for( new i = 0; i < MAX_PLAYERS; i++)
{
if((money = GetPlayerMoney(i)))
{
if((money-gLastCash[i]) >= DIFFERENCE_MAXIMALE)
{
GetPlayerName(i, tmp, MAX_PLAYER_NAME);
format(tmp, sizeof(tmp), "Le joueur %s est kické pour money hack!", tmp);
SendClientMessageToAll(0xFFFFFFFF, tmp);
Kick(i);
}
gLastCash[i] = money;
}
}
return 1;
}
//==============================================================================
Si vous pouviez encore m'aidez un peu. Merci d'avance
A++
-
KillTimerCheat = SetTimer("MoneyHackDetection",7000,1);
-
Slt
Merci à vous, le script marche enfin. J'avais des problèmes à cause de cette ligne qui était définie à 500
En fait pour que l'anti cheat marche il faut bien l'adapter au serveur à l'aide du timer et de la limite d'argent de transaction
Si je met MoneyCheat[playerid] = 0;//anticheatargent dans ma commande /givecash, les joueurs ne seront plus kcické s'il donne de grosse somme?
A+ :)
-
ui mais le code comporte une faille que je ne citerais pas au risque que les cheater l utilise lol
-
Slt
Moi aussi j'ai trouvé une faille mais bon je pense que j'arrêterai déjà les cheaters inconsicents
Et puis il y aura des admins sur le sevreur. Enfin si le serveur est hébergé un jour
Si vous connaissez un hébergeur gratuit gta sa mp de 32 slots je suis partant. L'héberguer aura bien sûr des droits d'administrateurs sur le serveur s'il le souhaite et je pourrai coller une pub au démmarrage s'il le désire
A+ :D
-
Mettre admin ton hébergeur, je pense que ton hébergeur sera pas très professionelle !
Azz 8)
-
Slt
Mdr, c'est peut être vrai mais ce sera toujours un hébergeur
PS: Mes problèmes d'hébergeur sont normalment résolu
A++ :D
-
Slt
J'ai un nouveau petit problème
Je cherche un code qui permettrait aux joueurs de ne pas pouvoir taper une commande s'ils n'ont pas une certains pourcentage de vie
Je pense qu'il faut commencer par prendre sa vie: GetPlayerHealth(playerid)
Mais après je ne sais pas trop comment faire pour refuser la commande si sa vie est inférieure à 75
Pour interdire la commande par contre je crois savoir faire: if (!strcmp(cmdtext, "/exemple", true) == 0)
Merci d'avance pour votre aide
A++ :)
-
Salut,
tu dois d'abord te créer une variable (GetPlayerHealth récupère le résultat par référence, non pas via la valeur de retour):
new Float:Health;
Ensuite tu récupère la vie du joueur:
GetPlayerHealth(playerid, health);//il est à noter que playerid correspond au ID du joueur, dans certains cas tu devras tuiliser d'auters variables que playerid
Puis tu fais ton test:
if(health >= 75.0)
{
...//tu fais la commande, le joueur à au moins 75 de vie
}
else
{
//le joueur n'a pas 75 de vie, tu lui envoie un message d'erreur (ou pas)
}
voilà tu devrais tout avoir pour faire cette petite condition...
++Sim++
-
Slt
Merci ça marche nickel
J'ai un autre petit problème, existe t-il un code permettant d'augmenter son niveau de rechercher par une commande?
J'en suis là
if (strcmp(cmd, "/etoiles", true))
{
GetPlayerWantedLevel(playerid);
WantedLevel(playerid, +1); //je pensais à un code comme ça mais ça ne marche pas
return 1;
}
Merci d'avance pour vos réponses
A++
-
if (strcmp(cmd, "/etoiles", true))
{
WantedLevel(playerid,GetPlayerWantedLevel(playerid) +1); //je pensais à un code comme ça mais ça ne marche pas
return 1;
}
PS: je vais en vacance je serais donc encore plus absent pck deja etre present sans pc lol
Sinon j' aurais une connexion d une heure pas jour ou je vais ;) allez a plus les gars on se revoit au mois d Aout =D
-
Salut,
le seul petit détail qui cause le dysfonctionnement de la commande de sasuke est l'inexistance de la fonction WantedLevel, il faut plutôt utiliser SetPlayerWantedLevel
++Sim++
-
Slt
Merci pour votre aide la commande marche nickel mais j'ai un autre problème avec un code qui lui était associé
En effet, au bout de 6 etoiles les joueurs du serveurs sont censés être prévenu que le joueur a 6 étoiles
Voici le code qui ne comporte aucune erreur mais qui ne fonctionne pas sur le serveur
if (GetPlayerWantedLevel(playerid) == 6)
{
GetPlayerName(pid, pidName, sizeof(pidName));
format(tmpp, sizeof(tmpp), "*** %s est devenu l'homme le plus recherché de San Andréas (ID:%d) ***",pidName,pid);
SendClientMessage(playerid, COLOR_GREEN, tmpp);
SendClientMessageToAll(0x33AA33AA , "Toutes les forces de polices sont appelées pour intercepter cette homme");
return 1;
}
Merci d'avance poru votre aide
A+ ;)
-
oui mais peu etre c'est normale comment ce morceaux de code est censer ce lancer ?
-
Slt
Ce code est censé se lancer lorsque le joueur a 6 étoiles ( sur mon serveur lorsqu'on tue un personne on a une étoile )
J ai mis ce code ds public one player info change
A+
-
voila danc meme probleme enfaite moi j'ai du le mettre dans le onplayerdeath en changeant playerid avec killerid et 6 par 5
-
Met ca dans OnplayerDeath:
if (GetPlayerWantedLevel(killerid) >= 6)
{
GetPlayerName(killerid, pidName, sizeof(pidName));
format(tmpp, sizeof(tmpp), "*** %s est devenu l'homme le plus recherché de San Andréas (ID:%d) ***",pidName,pid);
SendClientMessage(killerid, COLOR_GREEN, tmpp);
SendClientMessageToAll(0x33AA33AA , "Toutes les forces de polices sont appelées pour intercepter cette homme");
return 1;
}
-
Slt
Mdr, merci Sasuke bien que j'avais compris avec Cristab
Le problème c'est que je peux pas tester ce script vu qu'il faut que je tue quelq'un et qu'il est pas hébergé
Merci à vous deux, problème résolu
A+ :D
-
Béh tu peut demander a une de tes amis ;)
-
Slt
J'ai une nouvelle question
Je cherche un code me permettant de parler entre team ( je dispose de gTeam )
Je sais que vous en avez déja parler mais soit il ne marche pas dans le jeu soit il comporte des erreurs
J'ai chercher sur sa mp et en le prenant sur le SF DTM traduit mais toujours rien
Donc si vous avez un lien où je pourrai le trouver de manière concrète ce serait sympa
A+ :)
-
dans une commande tu met ( je ne te donne pas le code en entier essaye de reflechir par toi meme )
for(new msg;msg <= MAX_PLAYERS;msg ++)
{
if(Team[playerid] == Team[msg])
{
// tu envoie le msg
}
}
voila
-
Slt
J'ai réessaye d'extraire le code du SF DTM traduit trouve sur ce site dans le showrom d'ailleurs mais une ligne pose problème et je pense qu'elle est quand même indispensable
cmd(teamchatcmd);
<=ligne 1854
les erreurs:
C:\Documents and Settings\Propriétaire\Bureau\samp02Xserver.win32\gamemodes\I.pwn(1854) : error 012: invalid function call, not a valid address
C:\Documents and Settings\Propriétaire\Bureau\samp02Xserver.win32\gamemodes\I.pwn(1854) : warning 215: expression has no effect
C:\Documents and Settings\Propriétaire\Bureau\samp02Xserver.win32\gamemodes\I.pwn(1854) : error 001: expected token: ";", but found ")"
C:\Documents and Settings\Propriétaire\Bureau\samp02Xserver.win32\gamemodes\I.pwn(1854) : error 029: invalid expression, assumed zero
C:\Documents and Settings\Propriétaire\Bureau\samp02Xserver.win32\gamemodes\I.pwn(1854) : fatal error 107: too many error messages on one line
Et voici le code complet:
new teamchatcmd[] = "/t";//CHAT
forward dteamchatcmd(playerid,params[]);//CHAT
forward GetPlayers();//CHAT
cmd(teamchatcmd); // dans public command text
//==================================Team Chat===================================
dteamchatcmd(playerid,params[])
{
new team;
team = GetPlayerTeam(playerid);
new players = GetPlayers();
new playername[256];
GetPlayerName(playerid,playername,256);
new temptext[256];
new count;
for(count = 0;count <= players;count++)
{
if(IsPlayerConnected(count))
{
if(GetPlayerTeam(count) == team)
{
format(temptext,256,"[TEAM]%s: %s",playername,params);
SendClientMessage(count,COLOR_BLUE,temptext);
}
}
}
return true;
}
//------------------------------------------------------------------------------
public GetPlayers() //By rapidZ
{
new i;
new player;
player = 0;
for (i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
player++;
}
}
return player;
}
Si vous voyez d'où peut venir l'erreur, merci de me faire signe
A+ :)
-
apparement tu veut un team chat celui du sftdm personnelement n'as pas fonctionner chez moi regarde dans ma signature mon GM conquetes du nouveaux village dans la callback OnPlayerText tu peu voir un chat team qui utilise le gTeam ;)
-
Slt
Merci pour ton aide, ce script est largement plus court et plus pratique mais un problème persiste, la pharse est écrite deux fois, une fois avec la phrase pour la team et une autre pour tous le serveur
ex:
[TEAM]Bonjour les copains <= pour la team
!Bonjour les copains <= pour tous le serveur
Voici le code une fois adpaté à mon GM:
public OnPlayerText(playerid, text[])
{
if(text[0] == '!')
{
new string[256],name[24];
GetPlayerName(playerid,name,24);
format(string,256,"[TEAM] %s: %s",name,text[1]);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(gTeam[i] == gTeam[playerid])
SendClientMessage(i, GetPlayerColor(playerid), string);
}
}
return 1;
}
return 0;
}
A+ :D
-
Béh voila c 'est bien ce que je t ai expliquer =)
-
Slt
oui ça y ressemble beaucoup mais je n'y arrivais pas tout seul, mais il me reste encore le problème de la double phrase
PS: Sasuke en essayant de cliquer sur la bannière de ta team avast m'a signalé un virus
A+ :)
-
Comment ca ?
-
Salut,
PS: Sasuke en essayant de cliquer sur la bannière de ta team avast m'a signalé un virus
je dirais pas PS mais HS, les pm sont la pour ce genre de remarque...
pour ton emssage double il s'agit d'un simple problème de valeur de retour
sinon, tu veut bien dire que ca écrit le message pour la team et le message normal?
Étrangement, le script me semble correct...
essaie ces petites modifications coté optimisation (par contre ton problème n'est pas changé), assure toi de bien avoir cette version compilé et chargée
public OnPlayerText(playerid, text[])
{
if(text[0] == '!')
{
new string[128], color;
color = GetPlayerColor(playerid);
GetPlayerName (playerid, string, MAX_PLAYER_NAME);
format (string, sizeof(string), "[TEAM] %s: %s", string, text[1]);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(gTeam[i] == gTeam[playerid])
{
SendClientMessage(i, color, string);
}
}
return 1;
}
return 0;
}
si tu veut éviter d'envoyer au joueur son propre message (inutile mais bon) tu devras ajouter un if(playerid != i) dans ta boucle
++Sim++
-
je vient de comprendre ce que tu voulais mais dans ce cas la le team chat n'est plus un team chat :s
-
Slt
Voici le problème mieux expliqué (enfin je pense ) ça sera plus compréhensible
[TEAM]: Slt les copains <= le message est envoyé à la team flic
!Slt les copains <= juste en dessous le message est aussi envoyé à tout le serveur
A+
-
Essaye ca ;)
if(text[0] == '!')
{
new string[128], color;
color = GetPlayerColor(playerid);
GetPlayerName (playerid, string, MAX_PLAYER_NAME);
format (string, sizeof(string), "[TEAM] %s: %s", string, text[1]);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(gTeam[i] == gTeam[playerid])
{
SendClientMessage(i, color, string);
}
}
return 0;
}
-
Slt
ça y est le problème est résolu, merci à tous.
Voici le code exact inséré à la suite de la réponse de Sasuke
public OnPlayerText(playerid, text[])
{
if(text[0] == '!')
{
new string[128], color;
color = GetPlayerColor(playerid);
GetPlayerName (playerid, string, MAX_PLAYER_NAME);
format (string, sizeof(string), "[TEAM] %s: %s", string, text[1]);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(gTeam[i] == gTeam[playerid])
{
SendClientMessage(i, color, string);
}
}
}
return 0;
}
A+ et encore merci :D
-
Salut,
par contre ce code bloquera tous les messages, pas seulement ceux de team, déplace ton return 0 et place un return 1 ou ton return 0 est présentement
++Sim++
-
Slt
Je vois ce que tu veux dire mais après plusieurs essais soit le message s'affiche deux fois, soit le message ne s'affiche pas du tout
Pourrais tu prèciser un peu plus?
A+ ;)
-
En faite il serait plus judicieux de faire ca
public OnPlayerText(playerid, text[])
{
if(text[0] == '!')
{
new string[128], color;
color = GetPlayerColor(playerid);
GetPlayerName (playerid, string, MAX_PLAYER_NAME);
format (string, sizeof(string), "[TEAM] %s: %s", string, text[1]);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(gTeam[i] == gTeam[playerid])
{
SendClientMessage(i, color, string);
}
}
return 0;
}
return 1;
}
-
Salut,
exactement mais fais attention à ton indentation, ton return 1 n'est pas aligné avec l'accolade au dessus
++Sim++
-
Oui mais j ai juste ajouter le return dans le forum lol c' est un peu compliquer pour indenter. Merci pour la remarque
-
Merci beaucoup, j'avais ce code mais j'avais inversé return 1 et return 0 je ne savais pas que le return 0 pouvait être avant le return 1
A+ :)
-
Slt
Je viens vous exposer un nouveau problème.
J' ai voulu réaliser un script admin simple d'utilisation, donc je me suis fortement inspiré du RAS de r@f ( en respectant les crédits ) mais l'ajout d'une variable pour être admin a provoquer un problème au niveau des commandes.
En effet, il n'y a que la commande /announce [MESSAGE] qui marche dans le jeu. Pour les autres commandes c'est comme si je n'avais rien taper. Le script ne comporte aucune erreur ni de warnings
Voici le lien pastebin: http://pastebin.com/m7e2a6bf6 (http://pastebin.com/m7e2a6bf6)
Je vous remercie d'avance pour vos réponses
A+ :D
-
Salut,
tu devrais inverser tes conditions, dans ton code tu stop l'exécution immédiatement après avoir testé si la variable est à 1...donc que le joueur ait tapé /annonce ou pas, le reste du code n'est pas exécuté
essaie d'arranger tes commandes de la façon suivante:
if(!strcmp(cmd, "/announce", true))
{
if(varadmin ==1)
{
SendClientMessage(playerid,COLOR_GREEN, "La commande Admin max level a bien été activé");
tmpp = strtok(cmdtext, idx);
format(tmpp, sizeof(tmpp), "%s",cmdtext[9]);
GameTextForAll(tmpp,2500,3);
}
else
{
SendClientMessage(playerid, COLOR_RED, "Tu n'est pas admin.");
}
return 1;
}
et puis tu devrais plutôt utiliser un tableau, sinon tous les joueurs peuvent le faire...
new varadmin[MAX_PLAYERS];
//puis tu changera ta condition par:
if(varadmin[playerid] == 1)
//et pour cahnger la valeur de la variable
varadmin[playerid] = 1;//par exemple
++Sim++
-
Slt
En mettant la variable en deuxième condition la commande /announce fait crasher le server et les autres commandes ne marchent plus non plus
Pour le tableau je ne vois pas excatement ce que tu veux dire. Peux tu préciser?
A+ :)
-
un peu comme sa http://pastebin.com/me54969a (http://pastebin.com/me54969a)
-
Slt
Merci à vous tous pour vos réponses mais le serveru crash toujours lors d'une commnande
Mais après avoir intégré ces même commandes dans mon GM en virant /announce car elle ne marchait toujours pas mais commande de bases marchent /jail /unjail /goto /gethere /fric etc.....
J'ai une autre petite question
Lorsqu'on crée une variable par exemple varadmin comme dans mon cas:
- si la variable est varadmin[playerid] = 1, elle est à 1 juste pour le joueur ou pour tous le serveur?
A+ :)
-
juste le joueur
-
le pb pour les commande qui ne fonctionnent pas viens d ici
if(!strcmp(cmd, "/announce", true))
remplace le par ca
if(strcmp(cmd, "/announce", true))
enfin c' est ce que je pense
-
Slt
Si j'enlève le ! , j ai UNKNOW COMMANDS
Mais bon c est pas gave ma commande /say marche
A+
-
Salut,
non le problème ne vient pas des !, par conter il aurait pu mettre == 0 à la fin en remplacement...
as-tu pris simplement le script donné par rambo ou l'as tu modifié? si modifié, montre le via pastebin s'il te plait...
++Sim++
-
Slt
Problème résolu grâce à Cristab, maintenant la commande /announce marhce nickel:
//=================================/ANNOUNCE====================================
if(strcmp(cmd, "/announce", true) == 0)
{
if(varadmin[playerid] ==1)
{
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[256];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_ORANGE, "USAGE: /announce [message]");
return 1;
}
format(string, sizeof(string), "~y~%s", result);
GameTextForAll(string,5000,4);
}
else
{
SendClientMessage(playerid, COLOR_RED, "Vous n'êtes pas Admin.");
}
return 1;
}
A+ :D
-
Slt
Je suis en train d'essayer de créer un Derby simplifié mais j'ai quelques soucis dès le début. En fait lorsque je tape la commande /derby je suis téléporté dans le Derby mais je ne vois rien autour de moi, même pas la voiture, pourtant je susi bien dans la voiture car je vois des étincelles quand je fonce dans un mur
Voici le code:
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp (cmdtext, "/derby", true) == 0)
{
new carid;
new Float:X, Float:Y, Float:Z, Float:a;
GetPlayerInterior(playerid);
LinkVehicleToInterior(carid, 15);
GameTextForPlayer(playerid,"~b~Bienvenue ~w~au ~r~Derby",5000,6);
ResetPlayerWeapons(playerid);
SetPlayerInterior(playerid, 15);
carid = CreateVehicle(504,X,Y,Z,a,-1,-1,86400000);
SetVehiclePos(playerid, -1362.3027,931.7820,1036.3176);
PutPlayerInVehicle(playerid,carid,0);
TogglePlayerControllable(playerid,1);
return 1;
}
return 0;
}
Donc si vous avez une réponses à ce problème faites moi signe
A+ :)
-
ajoute
SetPlayerInterior(playerid,15);
-
Slt
Merci quand même, mais cette ligne est déjà présente dans mon code
A+ :)
-
Salut,
ton problème c'est que le véhicule est créé à l'endroit ou le joueur se trouvait avant de taper la commande, tu as d'abord récupérer sa position pour y créer un véhicule, lors de l'utilisation de PutPlayerInVehicle, le joueur y est déplacé, bref il se ramasse à son ancienne position mais dans l'intérieur....
il te suffit de créer le véhicule à la bonne position ;)
++Sim++
-
Slt
Après plusieurs essais pas très concluant j'ai finalement décidé de faire ce Derby à l'extérieur ce qui n'est en faite pas si mal au final.
Le Derby a l'air de marcher
Merci à tous le monde et particulièrement à Rambo qui m'a aidé à le réaliser
A+ :D
-
On est dans le forum a question je croit donc autant pas faire 50 topic a flood inutiles :)
Alors voila j'aimerais qu'on m'explique :
http://www.gtaonline.fr/forums/index.php/topic,6172.0.html (http://www.gtaonline.fr/forums/index.php/topic,6172.0.html)
Dans les deux codes [sans compter le foward] Sommes-nous obliger d'utiliser le deuxieme ?
-
Salut,
tu peut utiliser le premier, par contre le second est plus judicieux.
La définition d'un PlayerToPoint c'est "si le joueur est à porter d'un point", or la première fonction vérifie si le joueur est trop loin en x, puis en y puis en z, donc pas réellement la distance entre le joueur et le point, elle fais un cube au lieu d'une sphère (tous les points extérieurs d'une sphère sont à la même distance de son centre)
bref, la seconde fonction est plus précise. De plus elle est plus rapide (testé par Y_Less, voir son topic sur l'optimisation)
mais je préfère encore l'implantation que j'aie écrite tantôt:
PlayerToPoint(Float:radius, playerid, Float:X, Float:Y, Float:Z)
{
new Float:px, Float:py, Float:pz;
if(GetPlayerPos(playerid, px, py, pz))
{
px -= X;
py -= Y;
pz -= Z;
if((px * px) + (py * py) + (pz * pz) <= (radius * radius))
{
return 1;
}
}
return 0;
}
++Sim++
-
Merci Sim :)
Double post
Rebonjour, Suite a ce topic qui est le même probleme que moi je rencontre plusieurs erreurs :s
http://www.gtaonline.fr/forums/index.php/topic,6597.msg101941.html#msg101941 (http://www.gtaonline.fr/forums/index.php/topic,6597.msg101941.html#msg101941)
J'aimerais que vous me donniez une aide pour m'indiquer les new... & Forward... a mettre
C:\Program Files\Bonjour\GTA San Andreas\gamemodes\SFTDM2(2).pwn(1747) : error 001: expected token: ",", but found "-identifier-"
C:\Program Files\Bonjour\GTA San Andreas\gamemodes\SFTDM2(2).pwn(1747) : error 017: undefined symbol "X"
C:\Program Files\Bonjour\GTA San Andreas\gamemodes\SFTDM2(2).pwn(1747) : error 029: invalid expression, assumed zero
C:\Program Files\Bonjour\GTA San Andreas\gamemodes\SFTDM2(2).pwn(1747) : fatal error 107: too many error messages on one line
_________________________________________________________________________________ __________________________
Second probleme :
J'ai une erreur souvent rencontrer avec des probleme de fermeture des invalides mais quand je ferme sa fait tout bugger le compilateur :s
if(strcmp(cmd, "/toit", true) == 0)
{
(PlayerToPoint(8.0, playerid,-1479.3142,454.9642,7.1875))
SetPlayerPos(playerid,-1471.3809,447.5398,31.0797);
return 1;
}
Et le forward :
forward PlayerToPoint(Float:radi,playerid,Float:x,Float:y,Float:z);
Merci d'avance
-
essaye comme ceci
if(strcmp(cmd, "/toit", true) == 0)
{
if(PlayerToPoint(8.0, playerid,-1479.3142,454.9642,7.1875))
{
SetPlayerPos(playerid,-1471.3809,447.5398,31.0797);
}
return 1;
}
Tout en indentent bien sur ^^
-
Slt
J'ai un petit problème.
Ayant le saut unique au casino, mon cheat risquait de ne pas marcher quand je voulais, j'ai donc désactiver les intérieurs ( DisableInteriorEnterExits(); )
J'ai ensuite réalise un pick up devant un ammu pour se téléporter dans l'ammu ce qui ne m'a pas posé pb.
Le problème c'est que lorsque je rentre dans l'ammunation à l'aide du pick up, j'apparais dans l'ammunation mais le vendeur d'armes n'est pas là.
Donc voici la question: Comment faire pour pouvroir acheter des armes au vendeur en ayant désactiver les intérieurs standards ( ceux où il faut rentrer en marchant sur la flèche jaune )?
Merci d'avance pour vos réponses
A+ :)
-
SI tu veux au pire tu peux creer un menu, ce qui sera mieu car tu pourra mettre les armes que tu veux !
( le menu peut etre dans cette ammunation)
Ca peut sous forme de pickup ou checkpoint et le menu s'affiche avec tous les armes possble et leur prix ^^
++ Xoss
-
Slt
Merci pour ta réponse
Au, final j'ai fini par faire ça
J'ai une autre question
Des petis malins testent pleins de rcon sur mon serveur, j 'aimerai les bannir au bout de 3 mauvais mdps avec la commande /rcon login. J'ai fais le tour sur le forum et j'ai vu que la callback onerconcommand ne marchait pas.
Donc la question est: quel est le moyen pour bannir un joueur au bout de 3 mauvais rcon? :)
-
Oui possible mais je sais pas comment tres bien le faire dsl ...
Mais pour ça rien a faire ...., les cons restent des cons et ils peuvent essayer autant de fois qu'ils veulent en faisant clique droit et remote console ...
-
mabako a fait un pluning dispo sur le wiki samp et le forum ainsi que son site perso ;)
-
Slt
Merci pour vos réponses, nottament à Critsab avec son plugin. L'essayer,c'est l'approuvé ^^.
A+ :D
-
salut all voila j'ai un ti probleme j'avai mi un menu dans mon script, le serv marchai bien et le menu ossi mais depui que j'ai rajouter le un 2eme menu, le serv ne marche plus pourtant quand le script compile il n'y a aucune erreur je suis perdu :s
new Menu:banks;
new Menu:arme;
public OnGameModeInit()
{
banks = CreateMenu("~g~Bank",1,125,150,300);
SetMenuColumnHeader(arme ,0, "Selection de l'operation");
AddMenuItem(arme ,0,"retrait: 1$");
AddMenuItem(arme ,0,"retrait: 10$");
AddMenuItem(arme ,0,"retrait: 100$");
AddMenuItem(arme ,0,"retrait: 1000$");
arme = CreateMenu("~r~Street ~r~Ammu",1,125,150,300);
SetMenuColumnHeader(arme ,0, "Selection des armes");
AddMenuItem(arme ,0,"Sawnoff ShotG./200 balles-prix: 300$");
AddMenuItem(arme ,0,"Combat ShotG./200 balles-prix: 300$");
AddMenuItem(arme ,0,"AK-47/200 balles-prix: 300$");
AddMenuItem(arme ,0,"M4/200 balles-prix: 300$");
AddMenuItem(arme ,0,"exit");
}
public OnPlayerSelectedMenuRow(playerid, row)
{
new Menu:Current = GetPlayerMenu(playerid);
if (Current == arme){
if (row == 0){
GivePlayerWeapon(playerid,26,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 1){
GivePlayerWeapon(playerid,27,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 2){
GivePlayerWeapon(playerid,30,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 3){
GivePlayerWeapon(playerid,31,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 4){
TogglePlayerControllable(playerid,1);
return 1;
}
}
new Menu:Currents = GetPlayerMenu(playerid);
if (Currents == banks){
if (row == 0){
GivePlayerMoney(playerid,1);
TogglePlayerControllable(playerid,1);
}
else if (row == 2){
GivePlayerMoney(playerid,10);
TogglePlayerControllable(playerid,1);
}
else if (row == 3){
GivePlayerMoney(playerid,100);
TogglePlayerControllable(playerid,1);
}
else if (row == 4){
GivePlayerMoney(playerid,1000);
TogglePlayerControllable(playerid,1);
}
}
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
switch(getCheckpointType(playerid))
{
case CP_BANK: {
TogglePlayerControllable(playerid,0);
ShowMenuForPlayer(banks,playerid);
}
case CP_BANK_2: {
TogglePlayerControllable(playerid,0);
ShowMenuForPlayer(banks,playerid);
}
case CP_BANK_3: {
TogglePlayerControllable(playerid,0);
ShowMenuForPlayer(banks,playerid);
}
case CP_AMMU: {
TogglePlayerControllable(playerid,0);
ShowMenuForPlayer(arme,playerid);
}
}
return 0;
}
voila si quelqu'un veut m'aidé c pas de refus :D
-
new Menu:banks;
new Menu:arme;
public OnGameModeInit()
{
banks = CreateMenu("~g~Bank",1,125,150,300);
SetMenuColumnHeader(banks ,0, "Selection de l'operation");
AddMenuItem(banks ,0,"retrait: 1$");
AddMenuItem(banks ,0,"retrait: 10$");
AddMenuItem(banks ,0,"retrait: 100$");
AddMenuItem(banks ,0,"retrait: 1000$");
arme = CreateMenu("~r~Street ~r~Ammu",1,125,150,300);
SetMenuColumnHeader(arme ,0, "Selection des armes");
AddMenuItem(arme ,0,"Sawnoff ShotG./200 balles-prix: 300$");
AddMenuItem(arme ,0,"Combat ShotG./200 balles-prix: 300$");
AddMenuItem(arme ,0,"AK-47/200 balles-prix: 300$");
AddMenuItem(arme ,0,"M4/200 balles-prix: 300$");
AddMenuItem(arme ,0,"exit");
}
public OnPlayerSelectedMenuRow(playerid, row)
{
new Menu:Current = GetPlayerMenu(playerid);
if (Current == arme){
if (row == 0){
GivePlayerWeapon(playerid,26,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 1){
GivePlayerWeapon(playerid,27,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 2){
GivePlayerWeapon(playerid,30,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 3){
GivePlayerWeapon(playerid,31,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 4){
TogglePlayerControllable(playerid,1);
return 1;
}
}
new Menu:Currents = GetPlayerMenu(playerid);
if (Currents == banks){
if (row == 0){
GivePlayerMoney(playerid,1);
TogglePlayerControllable(playerid,1);
}
else if (row == 2){
GivePlayerMoney(playerid,10);
TogglePlayerControllable(playerid,1);
}
else if (row == 3){
GivePlayerMoney(playerid,100);
TogglePlayerControllable(playerid,1);
}
else if (row == 4){
GivePlayerMoney(playerid,1000);
TogglePlayerControllable(playerid,1);
}
}
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
switch(getCheckpointType(playerid))
{
case CP_BANK: {
TogglePlayerControllable(playerid,0);
ShowMenuForPlayer(banks,playerid);
}
case CP_BANK_2: {
TogglePlayerControllable(playerid,0);
ShowMenuForPlayer(banks,playerid);
}
case CP_BANK_3: {
TogglePlayerControllable(playerid,0);
ShowMenuForPlayer(banks,playerid);
}
case CP_AMMU: {
TogglePlayerControllable(playerid,0);
ShowMenuForPlayer(arme,playerid);
}
}
return 0;
}
++ D4 ++
8) 8)
-
sa sert a rien de rajouter un s a current
<?php
new Menu:banks;
new Menu:arme;
public OnGameModeInit()
{
banks = CreateMenu("~g~Bank",1,125,150,300);
SetMenuColumnHeader(arme ,0, "Selection de l'operation");
AddMenuItem(arme ,0,"retrait: 1$");
AddMenuItem(arme ,0,"retrait: 10$");
AddMenuItem(arme ,0,"retrait: 100$");
AddMenuItem(arme ,0,"retrait: 1000$");
arme = CreateMenu("~r~Street ~r~Ammu",1,125,150,300);
SetMenuColumnHeader(arme ,0, "Selection des armes");
AddMenuItem(arme ,0,"Sawnoff ShotG./200 balles-prix: 300$");
AddMenuItem(arme ,0,"Combat ShotG./200 balles-prix: 300$");
AddMenuItem(arme ,0,"AK-47/200 balles-prix: 300$");
AddMenuItem(arme ,0,"M4/200 balles-prix: 300$");
AddMenuItem(arme ,0,"exit");
}
public OnPlayerSelectedMenuRow(playerid, row)
{
new Menu:Current = GetPlayerMenu(playerid);
if (Current == arme){
if (row == 0){
GivePlayerWeapon(playerid,26,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 1){
GivePlayerWeapon(playerid,27,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 2){
GivePlayerWeapon(playerid,30,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 3){
GivePlayerWeapon(playerid,31,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 4){
TogglePlayerControllable(playerid,1);
return 1;
}
}
else if (Current == banks){
if (row == 0){
GivePlayerMoney(playerid,1);
TogglePlayerControllable(playerid,1);
}
else if (row == 2){
GivePlayerMoney(playerid,10);
TogglePlayerControllable(playerid,1);
}
else if (row == 3){
GivePlayerMoney(playerid,100);
TogglePlayerControllable(playerid,1);
}
else if (row == 4){
GivePlayerMoney(playerid,1000);
TogglePlayerControllable(playerid,1);
}
}
return 1;
}
}
-
Ca
new Menu:Current = GetPlayerMenu(playerid);
ca ce change pas par ca ??
new Current = GetPlayerMenu(playerid);
-
non je bug toujours, ya toujours pas d'erreur a la compile mais quand je lance le serv il s'éteint presque aussitôt et ce depuis que j'ai rajouter ce bout de code
banks = CreateMenu("~g~Bank",1,125,150,300);
SetMenuColumnHeader(arme ,0, "Selection de l'operation");
AddMenuItem(arme ,0,"retrait: 1$");
AddMenuItem(arme ,0,"retrait: 10$");
AddMenuItem(arme ,0,"retrait: 100$");
AddMenuItem(arme ,0,"retrait: 1000$");
quand je le retire le serv remarche normalement donc peut etre que je ne peut pas mettre 2 menu dans le GameModeInit
ps: je suis sur la version 0.3 d'SAMP
-
pardon sazuke j'avais pas preter attention
public OnPlayerSelectedMenuRow(playerid, row)
{
new Current = GetPlayerMenu(playerid);
if (Current == arme){
if (row == 0){
GivePlayerWeapon(playerid,26,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 1){
GivePlayerWeapon(playerid,27,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 2){
GivePlayerWeapon(playerid,30,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 3){
GivePlayerWeapon(playerid,31,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 4){
TogglePlayerControllable(playerid,1);
return 1;
}
else if (Current == banks){
if (row == 0){
GivePlayerMoney(playerid,1);
TogglePlayerControllable(playerid,1);
}
else if (row == 2){
GivePlayerMoney(playerid,10);
TogglePlayerControllable(playerid,1);
}
else if (row == 3){
GivePlayerMoney(playerid,100);
TogglePlayerControllable(playerid,1);
}
else if (row == 4){
GivePlayerMoney(playerid,1000);
TogglePlayerControllable(playerid,1);
}
}
}
return 1;
}
j pense meme qu'il y avait une accolade mal placer
gtaspeed si sa ne fonctionne toujours pas attend demain que je mette ton code sur pawn et corriger sa ;)
-
Salut,
regardons d'abord ce code:
banks = CreateMenu("~g~Bank",1,125,150,300);
SetMenuColumnHeader(arme ,0, "Selection de l'operation");
AddMenuItem(arme ,0,"retrait: 1$");
AddMenuItem(arme ,0,"retrait: 10$");
AddMenuItem(arme ,0,"retrait: 100$");
AddMenuItem(arme ,0,"retrait: 1000$");
tu crée le menu banks puis tu ajoute des items au menu arme?
sinon pour le Current, je suis pratiquement sûr qu'il doit comporter le tag Menu puisqu'il est comparé avec les variables arme et banks qui elles l'ont.
++Sim++
-
ouai j'me suis trompé pour le menu banks ;D sinon c bon les 2 menu marche :D, merci a vous
-
Salut,
regardons d'abord ce code:
banks = CreateMenu("~g~Bank",1,125,150,300);
SetMenuColumnHeader(arme ,0, "Selection de l'operation");
AddMenuItem(arme ,0,"retrait: 1$");
AddMenuItem(arme ,0,"retrait: 10$");
AddMenuItem(arme ,0,"retrait: 100$");
AddMenuItem(arme ,0,"retrait: 1000$");
tu crée le menu banks puis tu ajoute des items au menu arme?
sinon pour le Current, je suis pratiquement sûr qu'il doit comporter le tag Menu puisqu'il est comparé avec les variables arme et banks qui elles l'ont.
++Sim++
Arg ta etait plus rapide que moi lol GG
-
bonsoir tout le monde,
voila y se trouve que j'ai un petit probleme avec mon script,quand je passe sur le checkpoint le menu s'afiche comme prevu avec les item mais lorsque je sélectionne une item je sort du menu donc je doit ressortir du checkpoint et ré entré dedans pour réaffiché le menu.ce que j'aimerai c'est que le menu reste afficher jusqu'à ce que je le quitte,pour faire sa il faut mettre une boucle je croit mais sa je sais pas faire ^^' donc si quelqu'un pouvai m'expliquer s.v.p :happy
{
new cash[MAX_PLAYERS];
new Menu:Current = GetPlayerMenu(playerid);
if (Current == arme){
if (row == 0){
if(cash[playerid] < 700){
TextDrawShowForPlayer(playerid, loading);
TogglePlayerControllable(playerid,1);
}
else {
GivePlayerWeapon(playerid,26,200);
GivePlayerMoney(playerid, -700);
TogglePlayerControllable(playerid,1);
}
}
else if (row == 1){
GivePlayerWeapon(playerid,27,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 2){
GivePlayerWeapon(playerid,30,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 3){
GivePlayerWeapon(playerid,31,200);
GivePlayerMoney(playerid, -300);
TogglePlayerControllable(playerid,1);
}
else if (row == 4){
TogglePlayerControllable(playerid,1);
return 1;
}
}
else if (Current == banks){
if (row == 0){
GivePlayerMoney(playerid,1);
TogglePlayerControllable(playerid,1);
}
else if (row == 1){
GivePlayerMoney(playerid,10);
TogglePlayerControllable(playerid,1);
}
else if (row == 2){
GivePlayerMoney(playerid,100);
TogglePlayerControllable(playerid,1);
}
else if (row == 3){
GivePlayerMoney(playerid,1000);
TogglePlayerControllable(playerid,1);
}
else if (row == 4){
GivePlayerMoney(playerid,10000);
TogglePlayerControllable(playerid,1);
}
else if (row == 5){
GivePlayerMoney(playerid,100000);
TogglePlayerControllable(playerid,1);
}
else if (row == 6){
TogglePlayerControllable(playerid,1);
}
}
return 1;
}
Double post
petit up
(dsl double post)
-
mais si le menu s'affiche sans arret tu ne pourrat jamais quitter le CP
-
Salut,
ce que tu peut faire, c'est regarder ton code et modifier les conditions pour que le menu soit ouvert lors de certains choix (ShowMenuForPlayer),
tu pourrais aussi ajouté une ligne fermer le menu et assure toi que la façon traditionnelle de quitter le menu (même touche que pour entrer dans un véhicule) soit toujours fonctionnelle (callback OnPlayerExitedMenu impliquée)
++Sim++
-
Slt
PB résolu grâce à Cristab :D
A+
-
Slt
Je fais appel à vos services pour un problème au niveau d'un bot que je suis en train de créer
- j'ai sauvegardé en .rec grâce au FS de Cristab
-J'ai bien un fichier en amx dans npc mode comme il faut
- il est bien lancé ( je le vois sur la console )
- le .cfg m'a bien l'air configuré ( nbre de bot respecté )
- les condition du type si c'est un bot il spawn direct sont aussi mises dans mon GM
Mais le problème c'est que ce bot ne veut pas faire la trajectoire qu'il doit faire
(soit il n'apparait pas du tout ou soit il est bloqué au spawn )
Donc si vous aviez un tutorial simple à comprendre pour réaliser un bot à pied ( plus simple pour moi pour le moment à mon avis ) je suis preneur.
PS: J'ai déjà lu le tutos créer ici mais ça ne marchait pas non plus et ce tutos ne mettait pas les scripteurs d'accord d'où ma requête.
Merci d'avance
A+ :)
-
HS petit clown attention a toutes t'es publiciter ;)
-
Slt
J'ai encore besoin de votre aide pour un petit problème. :wall
Je cherche à mettre l'ID d'un joueur dans un message qui a été trouvé à l'aide d'une boucle démarré par une commande du type:
dcmd_idjoueur(const playerid,const params[])
{
for(new i = 0; i <= MAX_PLAYERS; i++)
{
J'ai essayé d'utiliser la fonction GetPlayerID que j'ai utilisé comme celà: new id = GetplayerID(playerid);
Pour mettre cet ID dans un message:
format(string,sizeof(string),"[%d] %s petit message au joueur", id,Nombre(i));
SendClientMessage(playerid,COLOR,string);
Lors de la compilation, il me dise qu'aucune fonction n'est appelé. J'ai donc ajouté un stock pour la fontion GetPlayerID, mais ça ne marche toujours pas.
Donc si l'un de vous à la solution pour obtenir l'ID d'un joueur et l'insérer dans un message, j'aimerai bien qu'il m'explique
Merci d'avance pour votre aide
A+ :D
-
pas besoin de GetPlayerId pour sa
exemple
new id;
id=PID;
format(string,sizeof(string),"[%d] %s petit message au joueur", id,Nombre(i));
SendClientMessage(playerid,COLOR,string);
ou j'ai rien compris
-
Re
Je ne comprend pas cette ligne id=PID. Mon pid n'est défini nulle part donc ça voudrait dire que id=PID sont égaux mais ils seront tous les 2 définis comme cela: new id; / new pid;
C'est normal , ou est ce que je dois définir le pid autrement, si oui comment ? :)
-
mais en gros tu veut l'id du joueur exemple /idjoueur 5 et sa te met 5 donc juste PID ou giveplayerid
-
Slt
Non justement je ne trouve pas les joueurs recherchés comme ça, je les rechercher grâce à une boucle qui me dit qui a combien d'étoiles. Moi j'aimerai rajouter l'id des joueurs dans le message qui me dit combien d'étoiles les joueurs ont
A+ :)
-
voila j' espere que ca t aidera http://forum.sa-mp.com/index.php?topic=14702.0 (http://forum.sa-mp.com/index.php?topic=14702.0)
Sa vient de moi ou :
corleon = GangZoneCreate(-2000,689, -230,4358, -1730,301, 250,8499);
japonais = GangZoneCreate(-2437,172, 503,3276, -2077,942, 874,1542);
C:\Users\*\Documents\SAMP script\gamemodes\larp.pwn(11332) : warning 202: number of arguments does not match definition
C:\Users\*\Documents\SAMP script\gamemodes\larp.pwn(11332) : warning 202: number of arguments does not match definition
C:\Users\*\Documents\SAMP script\gamemodes\larp.pwn(11332) : warning 202: number of arguments does not match definition
C:\Users\*\Documents\SAMP script\gamemodes\larp.pwn(11332) : warning 202: number of arguments does not match definition
C:\Users\*\Documents\SAMP script\gamemodes\larp.pwn(11333) : warning 202: number of arguments does not match definition
C:\Users\*\Documents\SAMP script\gamemodes\larp.pwn(11333) : warning 202: number of arguments does not match definition
C:\Users\*\Documents\SAMP script\gamemodes\larp.pwn(11333) : warning 202: number of arguments does not match definition
C:\Users\*\Documents\SAMP script\gamemodes\larp.pwn(11333) : warning 202: number of arguments does not match definition
-
Salut,
pour ton problème petit clown c'est que de la faire dans le format
j'imagine que tu as une boucle semblable à ceci:
new level = 0, tmp[128];
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if((level = GetPlayerWantedLevel(i)))
{
format(tmp, sizeof(tmp), "Le joueur d'ID %d est recherché (niv: %d)" i, level);
SendClientmessageToAll(COLOR_RED, tmp);
}
}
}
tu devrais avoir un truc du genre (ps. je préfère donné le nom que l'ID)
++Sim++
-
Slt
Merci beaucoup, je vais essayer ça
RE:
J'ai quelque soucis avec le code que tu m'a fait. Il y a beaucoup d'erreurs à une ligne mais je ne sais pas les résoudre vu que je ne connais pas bien les tmp et je ne sais pas mettre les id dans un message. Je ne connais donc pas la structure exact pour corriger.
Voivi le code une fois mis dans une commande défini en dcmd:
dcmd_recherche(const playerid,const params[])
{
#pragma unused params
SendClientMessage(playerid,COLOR_ORANGE,"Voici la liste des joueurs recherchés");
new level = 0, tmp[128];
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if((level = GetPlayerWantedLevel(i)))
{
format(tmp, sizeof(tmp), "Le joueur d'ID %d est recherché (niv: %d)" i, level); <========= ligne 4822 où sont détectées les erreurs
SendClientmessageToAll(COLOR_RED, tmp);
}
}
}
return 1;
}
Et voici les erreurs:
C:\Documents and Settings\Propriétaire\Bureau\Dossier ******\GTA SA-MP\samp 0.3\gamemodes\AAG.pwn(4822) : error 001: expected token: "-string end-", but found "-identifier-"
C:\Documents and Settings\Propriétaire\Bureau\Dossier ******\GTA SA-MP\samp 0.3\gamemodes\AAG.pwn(4822) : warning 215: expression has no effect
C:\Documents and Settings\Propriétaire\Bureau\Dossier ******\GTA SA-MP\samp 0.3\gamemodes\AAG.pwn(4822) : warning 215: expression has no effect
C:\Documents and Settings\Propriétaire\Bureau\Dossier ******\GTA SA-MP\samp 0.3\gamemodes\AAG.pwn(4822) : error 001: expected token: ";", but found ")"
C:\Documents and Settings\Propriétaire\Bureau\Dossier ******\GTA SA-MP\samp 0.3\gamemodes\AAG.pwn(4822) : error 029: invalid expression, assumed zero
C:\Documents and Settings\Propriétaire\Bureau\Dossier ******\GTA SA-MP\samp 0.3\gamemodes\AAG.pwn(4822) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
Aidez moi svp
A+ :)
-
Regarde a cette ligne (4822) Supprime Ce qu'il y a.
-
Alan, la pub est interdite dans les signature, vas lire les règles (;
-
Ok, Je suppr.
-
if((level = GetPlayerWantedLevel(i))) sa c'est pas bon if(level = GetPlayerWantedLevel(i)) sa c'est bon
-
Salut,
non, c'est bon, suffit de tester et tu verra, c'est en quelque sorte une compression de :
level = GetPlayerWantedLevel(i);
if(level)
{
}
Le code
if(level = GetPlayerWantedLevel(i))
causera un warning (ou une erreur je ne suis pas certains) indiquant que tu n'utilise pas le = dans un endroit approprié..il suffit d'ajouter un () pour contourner ce problème.
le problème vient du format, une simple erreur de frappe, cherche un peu et tu trouvera, d'ailleurs le simple fait que tu n'ai pas trouvé par toi-même montre que tu ne met pas beaucoup d'efforts à arranger tes problèmes seul... :(
++Sim++
-
Slt
Si si j'ai cherché, je me suis même inspiré du RAS mais sans succès d'où ma demande d'aide. Malgré vos propositions les 4 erreurs persistent
format(tmp, sizeof(tmp), "Le joueur d'ID %d est recherché (niv: %d)" i, level);
Dsl en réécrivant la ligne j'ai réussi à corriger les dernières erreurs restantes. La forme de ce message pourra être bénéfique à d'autres joueurs, je l'espère
Il y a juste une ligne que je ne comprend pas dans ce que vous m'avez montré. new level = 0; . A quoi sert ce 0 ? Moi j'aurai plutôt mis new level;
Je demande ça car en jeu, la commande recherche ne trouve aucun joueur recherché
A+ :)
-
Il manque une virgule avant la variable i dans ton format :
format(tmp, sizeof(tmp), "Le joueur d'ID %d est recherché (niv: %d)", i, level);
C'est ça qui cause toutes les erreurs que tu as.
Cristab, les doubles parenthèses c'est juste pour éviter un warning du compilateur.
++
Syg
-
ah mais ok lol je juste de comprendre sa condition :lmfao
mais euh enfaite j'en voit pas l'utilité
if(level == GetPlayerWantedLevel(i))
la on a le meme resultat que sa
if((level = GetPlayerWantedLevel(i)))
bizard je trouve pas sa tres claire enfaite
Comme je dit toujours si je trouve pas tres claire j'imagine meme pas le compilo
enfin si sa fonctionne c'est deja sa :)
-
Salut,
il y a une grande différence dans le fonctionnement, le code suivant:
if(level == GetPlayerWantedLevel(playerid))
ne fait que tester si level est égal à la valeur retournée par la fonction GetPlayerWantedLevel
tandis que le code suivant:
if((level = GetPlayerWantedLevel(playerid)))
modifie la valeur de la variable level, lui donne la valeur retournée par la fonction PUIS teste la valeur en question (grâce à la parenthèse supplémentaire le compilo comprend que c'est la valeur en question qui est testé et non pas si l'expression est égale)
bref, ce code est équivalent à celui ci:
level = GetPlayerWantedLevel(i);//on assigne la valeur à level
if(level)//on test la valeur en question
{
}
j'espère que c'est clair ;)
++Sim++
-
level = GetPlayerWantedLevel(i);//on assigne la valeur à level
if(level)//on test la valeur en question
{
}
sa c'est plus claire deja pour moi :)
-
Il est plus prudent de décomposer ce test en 2 lignes.
Si on garde la ligne
if((level = GetPlayerWantedLevel(playerid)))
on risque de se poser des questions si on revient dessus dans quelques semaines et on risque de corriger (en remplaçant le = par ==), ce qui fera que le code ne fonctionnera plus comme il doit.
++
Syg
-
Slt
Bien dit Syg vu que j'ai fais l'erreur
Pour la virgule, je l'avais mise. Je vais tester comme ça et je vous redis
A+ :D
-
Slt
Je viens vous exposer un nouveau problème que je n'arrive pas à résoudre ( je ne sais même pas si c'est possible sur samp )
Comment puis je vérifier qu'une remorque est bien attachée à un linerunner ?
J'arrive à vérifier que le linerunner est sur le checkpoint mais pour la remorque, vu qu'on ne la conduit pas, je ne vois pas comment on peut vérifier qu'elles est bien présente sur le chekpoint en même temps que le linerunner.
Merci d'avance pour vos réponses est vos explications
A+ ;)
-
mmm a la base ce n'est pas possible mais tu peu recupere le carid des remorque et voir si la remarque est pas loin du playerid
-
Re:
Merci pour ta réponse rapide.
J'y avais pensé mais je voulais être sur qu'il n'y avait pas plus simple.
Donc plus qu'à me lancer sur cette technique
Merci :D
A+
-
Salut,
probablement qu'en combinant IsTrailerAttachedToVehicle et GetVehicleTrailer tu devrais obtenir un bon résultat
++Sim++
-
Slt
Jamais entendu parler de cette fonction, peut être nouvelle avec samp 0.3 ???
Mais je vais aller voir tout ça.
Merci à vous deux
RE:
Alors j'ai utiliser la petite fonction sans problème. J'ai bien défini mes véhicules du type new rr1; en haut et dans onegamemodeinit rr1 = addstatic.......
Mais le probème c'est que la remorque n'est pas reconnue une fois dans le jeu.
Voilà la condition que j'ai utilisé:
if(IsTrailerAttachedToVehicle(rr1 || rr2 || rr3 || rr4 || rr5 || rr6 || rr7 || rr8 || rr9 || rr10 || rr11))
{
Les rr étant toutes des remorques comme rr1 et j ai bien mis un vehicleid = GetPlayerVehicleID(playerid) au dessus de ma condition
Donc encore quelques soucis ???
A+ ;)
-
Salut,
ta condition devrait ressembler à ceci:
if(IsTrailerAttachedToVehicle(rr1) || IsTrailerAttachedToVehicle(rr2) || IsTrailerAttachedToVehicle(rr3)....)
;)
fais attention, cette fonction ne fait que vérifier qu'une remorque, peu importe laquelle, est attachée au véhicule rr1 (ou rr2 etc...)
++Sim++
-
Merci ça marche parfaitement, tout simplement ce que je voulais :D
J'ai une autre question mais ce serait plutôt du côté protection serveur.
En effet les doubles compte comme vous le savez ce n'est pas très facile à reperer etc.
Donc je voudrai intégrer un système vérifiant le rang du joueur ex 25.58.**.** pour vérifier si une ip ayant crée un compte existe déjà.
Mais 3 problèmes se posent:
le 1er: Comment faire pour comparer l'ip d'un joueur enregistré à un joueur non enregistré.
le 2ème: Mes fichiers sauvegarde sont enregistrés en .dudb avec mdp hach, argent et score docn je voudrai savoir comment y intégrer l'ip du joueur
le 3ème: il faudra que j'enregistre les ips des joueurs ayant déjà un compte durant la commande /login
Mais j'ai du mal pour sauvegarder des données dans un fichier comme ici .dudb donc j'aimerai que vous me donniez quelques renseignements. Voici quelesques données pour que vous puissez m'aider
Ex de fichier .dudb d'une save de compte:
password_hash=54564813
Money=3745719
Score=3745719
Kills=-1812395550
Deaths=41529779
PS: les kills bug mais ne faites pas attention à ça :lmfao
Mes commandes login et register:
dcmd_register(playerid,params[]) {
if (PLAYERLIST_authed[playerid]) return SystemMsg(playerid,"Vous êtes déjà logué.");
if (udb_Exists(PlayerName(playerid))) return SystemMsg(playerid,"Ce compte existe déjà '/login mot de passe'.");
if (strlen(params)==0) return SystemMsg(playerid,"Usage correct: '/register mot de passe'");
if (udb_Create(PlayerName(playerid),params)) return SystemMsg(playerid,"Compte crée '/login mot de passe.");
return true;
}
dcmd_login(playerid,params[]) {
if (PLAYERLIST_authed[playerid]) return SystemMsg(playerid,"Vous êtes déjà logué.");
if (!udb_Exists(PlayerName(playerid))) return SystemMsg(playerid,"Ce compte n'existe pas '/register mot de passe'.");
if (strlen(params)==0) return SystemMsg(playerid,"Tapez '/login mot de passe'");
if (udb_CheckLogin(PlayerName(playerid),params)) {
// Status
GivePlayerCash(playerid,dUserINT(PlayerName(playerid)).("money")+GetPlayerMoney(playerid));
SetPlayerScore(playerid,dUserINT(PlayerName(playerid)).("Score")+GetPlayerScore(playerid));
pkills[playerid] = (playerid,dUserINT(PlayerName(playerid)).("Kills")+pkills[playerid]);
pdeaths[playerid] = (playerid,dUserINT(PlayerName(playerid)).("Deaths")+pdeaths[playerid]);
PLAYERLIST_authed[playerid]=true;
KillTimer(protectionOK[playerid]);//protection
logged[playerid] = 1;
return SystemMsg(playerid,"Vous êtes logué avec succès!");
}
Merci d'avance pour votre aide ;)
A+ ;)
-
Salut,
sans doute que la meilleure méthode consiste à sauvegarder tous les IP ayant un compte sur le serveur dans un fichier,
ainsi il ne te resterais qu'à ouvrir ce fichier et vérifier les IP une à une.
par contre, fais attention, ce genre de système peut nuire au serveur en empêchant de nouveaux joueurs de ce créer un compte (disons que moi et mon frère sommes sur le même pc....), puisque tu semble vouloir utiliser les deux premiers nombre de l'IP seulement, tu risque également de bloquer beaucoup de gens...
sinon en ce qui concerne la méthode, pour lire le fichier, il serait plus judicieux d'utiliser directement les fonctions de gestions de fichier de sa-mp:
if(fexist(FICHIER))
{
new File:file;
file = fopen(FICHIER, io_read);
if(file)
{
new tmp[32];//un IP par ligne, pas besoin d'un string long (serait mieux de mettre 128 au cas où...)
while(fread(file, tmp, 32))
{
if(strcmp(IP, tmp, false, 16))
{
fclose(file);
//l'ip est déjà enregistré
}
}
fclose(file);
}
}
pour faire la liste, il te suffirait de ce format : "%s\r\n" et simplement un petit fopen (mode io_append), un fwrite et un fclose
et de récupérer l'IP du joueur au moment de son inscription (GetPlayerIP)
++Sim++
-
Re:
Slt
Tu m'as convaincu, on va éviter de faire comme ça
Pourrais tu m'expliquer comment faire pour que lorsque un joueur s'enregistre ( donc /register mdp en général ) son pseudo suivi de son ip soit sauvegarder dans un fichier texte dans scriptfile. Comme ça on peut voir qui est nouveau et on peut vérifier les comptes facilement. D'après une grande aide de rambo pour sauvegarder j en arrive là:
#define FileSaveLPCIP "IP.txt"//LPCIP //tout en haut du GM
public OnGameModeInit()
{
//LPCIP
SetGameModeText("Blank Script");
new File:SaveD;
SaveD = fopen(FileSaveLPCIP, io_readwrite);
if(!fexist(FileSaveLPCIP))
{
fopen(FileSaveLPCIP, io_readwrite);
print("fichier"#FileSaveLPCIP"cree");
fclose(SaveD);
}
else
{
print("fichier"#FileSaveLPCIP"charger");
fclose(SaveD);
}
return 1;
}
//puis à la suite de ma commande register:
new File:Ficher = fopen(FileSaveLPCIP, io_append);
new ip[30];
new name[MAX_PLAYER_NAME];
new VTR[128];
GetPlayerIp(playerid,ip,128);
GetPlayerName(playerid,name,sizeof(name));
printf ("IP du joueur %s: %d",name,ip);//??????
fwrite(Ficher, VTR);
fclose(Ficher);
return true;
Comme vous pouvez vous en douter, si je suis là c'est que ça ne marche pas :D. Donc j'aimerai avoir de l'aide avec par exemple un exemple car là je sèche :P
A+ ;)
-
Salut,
dans ton OnGameModeInit, tu devrais modifier l'ordre de tes actions:
1 - vérifie si le fichier existe
2 - s'il n'existe pas, on en crée un nouveau (+ le fermer (io_write ferait pareil))
Ensuite, il pourrait être plus pratique de placer le reste du code dans une fonction du genre:
IsIPAndPseudoSaved(pseudo[], IP[])
{
new tmp[64], tmpp[64], len;
format(tmp, 64, "%s %s", pseudo, IP);
len = strlen(tmp);//permet de ne pas tenir compte des \r\n à la fin de chaque ligne
new File:file = fopen(fichier, io_read);
while(fread(file, tmpp, 64))
{
if(!strcmp(tmp, tmpp, true, len))
{
//trouvé
fclose(file);
return 1;
}
}
fclose(file);
return 0;
}
dans le cas de cette fonction, ton fichier devrait contenir les données structurées comme ceci:
NOM1 IP1
NOM2 IP2
NOM3 IP3
NOM4 IP4
essaie de t'en inspiré pour le faire à ta façon si tu le veut et de faire le code qui générerais le fichier correspondant
bonne chance
++Sim++
-
Slt
Tu pourrais me donner quelques précisions de plus car dsl mais je n'y arrive vraiment pas. ???
Ce que je comprend ddans ce que tu dis c'est:
1 - vérifie si le fichier existe
2 - s'il n'existe pas, on en crée un nouveau (+ le fermer (io_write ferait pareil))
if(!fexist(file))
{
fopen(file, io_readwrite);
fclose(file);
}
else
{
fclose(file);
}
Et dans register je met la fonction que tu m'as donné mais une fois en jeu ce code ne marche pas :(
Donc je n'ai pas encore tout compris ;D
A+
-
Salut,
comme tu n'ouvre pas le fichier s'il existe, le else ...(fermer le fichier) est inutile (il n'est pas ouvert)
La fonction qui te permettrais de stocker les IP et pseudo dans le fichier (qui auraient étés testés avec l'autre function), ressemblerais à ceci:
function(playerid)
{
new tmp[64], tmpp[16];
GetPlayerIP(playerid, tmpp, 16);
GetPlayerName(playerid, tmp, MAX_PLAYER_NAME);
format(tmp, sizeof(tmp), "%s %s\r\n", tmp, tmpp);//donc on format les informations à entrer
new File:file = fopen("fichier", io_append);//io_append permet de se placer à la fin du fichier afin d'ajouter des choses à la suite
fwrite(file, tmp);
fclose(file);
return 1;
}
voilà, en vérifiant de bien placé le tout comme tu le désire, tu as une fonction pour ajouter le joueur à la liste, une pour savoir s'il est dans la liste (simple à modifier pour récupérer de la liste)
++Sim++
-
Slt
Toujours pas, j'ai pas l'habitude de demander ça mais, tu peux me le faire car là je vois vraiment pas, je regarderai comment tu as fait car là je pense te faire perdre du temps :-[
A+ ;)
-
Salut,
en reprenant les fonctions précédentes
OnPlayerConnect(playerid)
{
new name[MAX_PLAYER_NAME], ip[16];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
GetPlayerIP(playerid, ip, 16);
if(IsIPAndPseudoSaved(name, ip))
{//le joueur est dans le fichier
}
else
{//le joueur n'y est pas
function(playerid);//on ajoute le joueur au fichier (la liste)
}
}
ps. si tu veut tester seulement l'IP (donc le pseudo on s'en fou un peu), il te suffirait de faire un strtok avant de comparé le string dans la fonction (IsIPAndPseudoSaved)
faudrait voir selon ce que tu désire faire...
par contre, je ne te recommande pas de regarder dans le fichier si le joueur est déjà enregistrer au lieu de ton fexist, le fexist sera toujours bien plus rapide (du fait qu'il est native)
si ce n'est pas du tout ce dont tu parle, essaie de ré expliquer XD
++Sim++
-
Moi qui croyait que ce serait super simple
je réexplique. En gros une personne arrive sur mon serveur, il décide de s'enregistrer. Lorsqu'il s'enregistre son pseudo suivi de son ip sont sauvegardés dans un dossier rien de plus rien de moins :D
ex:
LePtitClown: 50.69.78.69
Sim: 25.37.12.95
A+
-
Salut,
dans ce cas tu n'as besoin que d'une seule fonction, la dernière que j'ai donné
comme ça les noms seront stockés dans un fichier de ton choix:
ListPlayer(playerid)
{
new tmp[64], tmpp[16];
GetPlayerIP(playerid, tmpp, 16);
GetPlayerName(playerid, tmp, MAX_PLAYER_NAME);
format(tmp, sizeof(tmp), "%s: %s\r\n", tmp, tmpp);//donc on format les informations à entrer
new File:file = fopen("fichier", io_append);//io_append permet de se placer à la fin du fichier afin d'ajouter des choses à la suite
if(file)
{
fwrite(file, tmp);
fclose(file);
}
return 1;
}
il te suffirais de placer ça au moment où le joueur s'enregistre (si tu as un système de compte)
si tu n'en as pas (système de compte), il te suffit de tester si le joueur est dans la liste (avec IsIPAndPseudoSaved) et l'ajouter à la liste avec cette fonction s'il n'y est pas déjà
ps. ajuste la forme dans les deux fonctions si tu les utilisent les deux
++Sim++
-
Slt
J'ai enfin réussi à faire marcher la dernière méthode grâce à ton aide mais ce script s'obstine à enregistrer les ip à la connexion alors que moi je voudrai que ce soit à la commande /register. Pourtant le code se trouve bien dans la commande /register. ???
De quoi ça peut venir ?
A+ ;)
-
Dit nous ta commande /login
-
je pense que tu voulais dire /register, donc la voilà ( /register car l ip doit être rengristré lors de l'enregistrement )
dcmd_register(playerid,params[]) {
//if (autoriserregister[playerid] ==0) return SystemMsg(playerid,"Pour vous créer un compte avec /register [Mot de passe de votre choix], vous devez contacter un Admin en Jeu pour qu'il vous autorise à en créer un.");//rajoutertest
if (PLAYERLIST_authed[playerid]) return SystemMsg(playerid,"Vous êtes déjà logué.");
if (indm[playerid] > 0) return SystemMsg(playerid,"Vous ne pouvez pas vous enregistrer dans un DM.");
if (udb_Exists(PlayerName(playerid))) return SystemMsg(playerid,"Ce compte existe déjà '/login mot de passe'.");
if (strlen(params)==0) return SystemMsg(playerid,"Usage correct: '/register mot de passe'");
if (udb_Create(PlayerName(playerid),params)) return SystemMsg(playerid,"Compte crée '/login mot de passe.");
//===SIMIP==
new name[MAX_PLAYER_NAME], ip[16];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
GetPlayerIp(playerid, ip, 16);
if(IsIPAndPseudoSaved(name, ip))
{//le joueur est dans le fichier
}
else
{//le joueur n'y est pas
function(playerid);//on ajoute le joueur au fichier (la liste)
}
//==SIMIP==
Voilà :D
-
Salut,
et tu es certains que le code ne se retrouve pas ailleurs dans le script?
sinon ce serait que cette commande est appelée au moment de la connexion... c'est curieux
++Sim++
-
Non non, je viens d'ailleurs de faire de nombreux testss, voici les résultats:
PS: j 'ai mis la fonction qui enregistre en stock ce qui ne change rien, je précise
- lorsque je met la fonction dans register, rien ne se passe
- lorsque je met cette même fonction dans oneplayerconnect, tout marche
A+ :(
-
Passe nous plutôt le /login, si il tape /login et que ça enregistre l'IP...
-
Si tu veux mais je comprend pas ton raisonnement :D:
//REGISTER
dcmd_register(playerid,params[]) {
//if (autoriserregister[playerid] ==0) return SystemMsg(playerid,"Pour vous créer un compte avec /register [Mot de passe de votre choix], vous devez contacter un Admin en Jeu pour qu'il vous autorise à en créer un.");//rajoutertest
if (PLAYERLIST_authed[playerid]) return SystemMsg(playerid,"Vous êtes déjà logué.");
if (indm[playerid] > 0) return SystemMsg(playerid,"Vous ne pouvez pas vous enregistrer dans un DM.");
if (udb_Exists(PlayerName(playerid))) return SystemMsg(playerid,"Ce compte existe déjà '/login mot de passe'.");
if (strlen(params)==0) return SystemMsg(playerid,"Usage correct: '/register mot de passe'");
if (udb_Create(PlayerName(playerid),params)) return SystemMsg(playerid,"Compte crée '/login mot de passe.");
if (!udb_Exists(PlayerName(playerid))) return protectionregister(playerid);//SIMIP La je susi censé save l ip si e joueur est inconnu mais ça ne marche pas :(
return 1;
}
//LOGIN
dcmd_login(playerid,params[]) {
if (PLAYERLIST_authed[playerid]) return SystemMsg(playerid,"Vous êtes déjà logué.");
if (!udb_Exists(PlayerName(playerid))) return SystemMsg(playerid,"Ce compte n'existe pas '/register mot de passe'.");
if (strlen(params)==0) return SystemMsg(playerid,"Tapez '/login mot de passe'");
if (indm[playerid] > 0) return SystemMsg(playerid,"Vous ne pouvez pas vous loguer dans un DM.");
if (udb_CheckLogin(PlayerName(playerid),params)) {
// Status
GivePlayerCash(playerid,dUserINT(PlayerName(playerid)).("money")+GetPlayerMoney(playerid));
SetPlayerScore(playerid,dUserINT(PlayerName(playerid)).("Score")+GetPlayerScore(playerid));
pkills[playerid] = (playerid,dUserINT(PlayerName(playerid)).("Kills")+pkills[playerid]);
pdeaths[playerid] = (playerid,dUserINT(PlayerName(playerid)).("Deaths")+pdeaths[playerid]);
PLAYERLIST_authed[playerid]=true;
KillTimer(protectionOK[playerid]);//protection
logged[playerid] = 1;
return SystemMsg(playerid,"Vous êtes logué avec succès!");
}
A+ ;)
-
Up !
Aidez moi svp :)
-
Salut,
et tu es certains que le code ne se retrouve pas ailleurs dans le script?
sinon ce serait que cette commande est appelée au moment de la connexion... c'est curieux
++Sim++
Moi aussi je pense que l'enregistrement de l'IP doit être autre part.
Je pense aussi que sa doit être la variable PLAYERLIST_authed ou logged qui doit en être la cause.
Essaye de faire une recherche sur ces variables pour voir les conditions dans lesquels elles sont utilisées.
-
Alors tout da'bord, merci pour ta réponse. Voici quleques renseignements de plus:
PLAYERLIST_authed ets utilisé à:
- la connexion (onplayerconnect )
if (!PLAYERLIST_authed[playerid])
{
if (udb_Exists(PlayerName(playerid)))
{
SendClientMessage(playerid, COLOR_ORANGE, "Vous avez 30 SECONDES pour vous LOGUER ( /login [Mot De Passe] )");
SendClientMessage(playerid, COLOR_ORANGE, "Après ça, vous serez KICKE par le système de protection de pseudo! ! ! ");
CountProtection(playerid,30);
}
}
//REGISTER
PLAYERLIST_authed[playerid]=false;
if (udb_Exists(PlayerName(playerid))) return SendClientMessage(playerid, COLOR_SYSTEM, "Bienvenue, ce compte existe déjà (/Login mot de passe)");
return 1;
}
- la déconnexion ( onplayerdisconnect )
if (PLAYERLIST_authed[playerid])
{
// save
dUserSetINT(PlayerName(playerid)).("Money",GetPlayerMoney(playerid));
dUserSetINT(PlayerName(playerid)).("Score",GetPlayerScore(playerid));
dUserSetINT(PlayerName(playerid)).("Kills",pkills[playerid]);
dUserSetINT(PlayerName(playerid)).("Deaths",pdeaths[playerid]);
}
PLAYERLIST_authed[playerid]=false;
- lors de la fermeture du game mode ( gamemodeexit )
if (PLAYERLIST_authed[i])
{
// save
dUserSetINT(PlayerName(i)).("Money",GetPlayerMoney(i));
dUserSetINT(PlayerName(i)).("Score",GetPlayerScore(i));
dUserSetINT(PlayerName(i)).("Kills",pkills[i]);
dUserSetINT(PlayerName(i)).("Deaths",pdeaths[i]);
}
PLAYERLIST_authed[i]=false;
}
- à l'enregistrement ( /register ) et au logue ( /login )
dcmd_register(playerid,params[]) {
//if (autoriserregister[playerid] ==0) return SystemMsg(playerid,"Pour vous créer un compte avec /register [Mot de passe de votre choix], vous devez contacter un Admin en Jeu pour qu'il vous autorise à en créer un.");//rajoutertest
if (PLAYERLIST_authed[playerid]) return SystemMsg(playerid,"Vous êtes déjà logué.");
if (indm[playerid] > 0) return SystemMsg(playerid,"Vous ne pouvez pas vous enregistrer dans un DM.");
if (udb_Exists(PlayerName(playerid))) return SystemMsg(playerid,"Ce compte existe déjà '/login mot de passe'.");
if (strlen(params)==0) return SystemMsg(playerid,"Usage correct: '/register mot de passe'");
if (udb_Create(PlayerName(playerid),params)) return SystemMsg(playerid,"Compte crée '/login mot de passe.");
if (!udb_Exists(PlayerName(playerid))) return protectionregister(playerid);//SIMIP La je susi censé save l ip si e joueur est inconnu mais ça ne marche pas :(
return 1;
}
//LOGIN
dcmd_login(playerid,params[]) {
if (PLAYERLIST_authed[playerid]) return SystemMsg(playerid,"Vous êtes déjà logué.");
if (!udb_Exists(PlayerName(playerid))) return SystemMsg(playerid,"Ce compte n'existe pas '/register mot de passe'.");
if (strlen(params)==0) return SystemMsg(playerid,"Tapez '/login mot de passe'");
if (indm[playerid] > 0) return SystemMsg(playerid,"Vous ne pouvez pas vous loguer dans un DM.");
if (udb_CheckLogin(PlayerName(playerid),params)) {
// Status
GivePlayerCash(playerid,dUserINT(PlayerName(playerid)).("money")+GetPlayerMoney(playerid));
SetPlayerScore(playerid,dUserINT(PlayerName(playerid)).("Score")+GetPlayerScore(playerid));
pkills[playerid] = (playerid,dUserINT(PlayerName(playerid)).("Kills")+pkills[playerid]);
pdeaths[playerid] = (playerid,dUserINT(PlayerName(playerid)).("Deaths")+pdeaths[playerid]);
PLAYERLIST_authed[playerid]=true;
KillTimer(protectionOK[playerid]);//protection
logged[playerid] = 1;
return SystemMsg(playerid,"Vous êtes logué avec succès!");
}
logged est utilisé dans les même condition en gros cette variaible est inutile mais elle me sert juste à "discuter" avec un autre FS lorsqu'il ets activé. De plus, les variable PLAYERLIST_authed et logged retounrent à 0 à la déconnexion, à la connexion et lors de la fermeture du gamemode ( ongamemodeexit )
A+ et merci d'avance pour votre aide ;)
-
Bon bah c'est pas ce que je pensais :wall
Désoler :P
-
C'est l'intention qui compte comme on dit :lmfao
C'est quand même bizarre ce bug ;D, surtout que ça marche bien si je let met en onplayerconnect
Aidez moi :D
A+
-
Up !
Ce script me tient vraimet à coeur. Personne ( dernière tentative pour ce sujet :( )
A+ ;)
-
Slt
Je viens vous exposer un autre problème beaucoup plus grave cette fois-ci. :ohmy
Je me suis fait hacker par un hacker utilisant la méthode Ddos ( envoi de paquet sur un serveur pour qu'il crash en gros pour ceux qui ne connaissent pas )
J'aimerai savoir s'il y a quelques chose à faire pour éviter ça sur samp.
J'ai lu quelques postes sur le Ddos mais ils ne donnent pas vraiment de solutions ;D
Merci d'avance pour vos réponses
A+ ;)
-
voila pour toi
http://www.securiteinfo.com/attaques/hacking/ddos.shtml (http://www.securiteinfo.com/attaques/hacking/ddos.shtml)
a lire Contre-mesures
-
Télecharge un malware.
Personnellement sa me soule c'est vieux hacker voila encore une menace de plus pour se faire piquer notre travail ou bousiller le matériel. >:(
-
Ok merci je vais regarder ça
Bizare il a arrêté, il a dû se lasser :lmao
A+ ;)
-
Salut,
sinon pour ton ancien problème, si ce n'est pas réglé, on peut y revenir:
es-tu certains que cette façon de faire:
dUserSetINT(PlayerName(i)).("Money",GetPlayerMoney(i));
est juste, car je ne me rapelle pas d'avoir déjà vu des fonctions avec un '.' au milieu c'est comme: test().strval(text);
j'ai l'impression que ce n'est pas la bonne forme
++Sim++
-
Slt
Si si pourtant ça marche nickel normalement le système de login
J'avais d'ailleurs pensé à passer par un système de login avec menu à la connexion etc mais j'ai eu quelques soucis avec le fs de c30
( voir mon pb sur le topic du tuto à C30 => http://www.gtaonline.fr/forums/index.php/topic,9373.msg163960.html#msg163960 (http://www.gtaonline.fr/forums/index.php/topic,9373.msg163960.html#msg163960) )
A+ ;)
-
Salut,
d'après ce que je voit dans le fs de c30, la bonne forme est plutôt:
dUserSetINT(PlayerName(i), "Money", GetPlayerMoney(i));
++Sim++
-
Slt
Oula je dois avoir la mauvaise version de son FS car dans celui que j'ai il n'y a aucune ligne avec l'argent:
stats[playerid][level] = dini_Int((st), "level");
stats[playerid][skinid] = dini_Int((st), "skinid");
stats[playerid][death] = dini_Int((st), "death");
stats[playerid][kill] = dini_Int((st), "kill");
A+ ;)
-
je crois que javais fait une mise a jours quelque jours après la 1er ;)
-
Slt
Ouais j'ai vu mais le lien de dl le plsu récent était inactif donc j'ai pris le 2ème :D
Mais bon si le deuxième marche pas c'est dommage pour moi :(
A+
-
Slt
J'ai un nouveau problème avec un anti cheat argent que j'ai crée, enfin tenter de créer, car il y a un problème :lmfao
Voici le code:
//==============================================================================
public OnPlayerDeath(playerid, killerid, reason)
{
if(indm[killerid] == 0)
{
if(GetPlayerWeapon(killerid) == 35 || GetPlayerWeapon(killerid) == 36 ||GetPlayerWeapon(killerid) == 37 ||GetPlayerWeapon(killerid) == 38)
{
new string[128];
new pname[30];
GetPlayerName(killerid, pname, sizeof(pname));
format(string, sizeof(string), "== ANTI-CHEAT: %s a été banni pour avoir cheaté une arme. Honte à lui.", initialname[killerid]);
SendClientMessageToAll(COLOR_GREEN, string);
Ban(killerid);
SendClientMessage(killerid,COLOR_RED,"Vous avez été banni pour avoir cheaté une arme");
}
return 1;
}
return 0;
}
//==============================================================================
Ce code ne marche pas une fois en jeu:
ex, le joueur n'est pas banni avec un minigun.
Pourtant, si le joueur n'est pas dans un DM et qu'il tue un autre joueur, le code regarde ses armes et les vérifient, donc je ne vois pas pourquoi ça ne marche pas
Aidez moi
Merci d'avance pour vos réponses
A+ ;)
Double post
Up !
A+ ;)
-
Je te conseil d'utiliser
if(indm[killerid] == 0)
{
if(reason == 35)
{
....
Reason == id (( Id de l'arme ))
-
mais en cas de fake kill c'est la vistime qui seras bannie ;)
-
Par contre ne serait-il pas mieux de mettre le SendClientMessage avant le Ban parce que le joueur va être banni mais il ne reçevra pas le message .
Ban(killerid);
SendClientMessage(killerid,COLOR_RED,"Vous avez été banni pour avoir cheaté une arme");
-
mais en cas de fake kill c'est la vistime qui seras bannie ;)
if(reason == 38)
{
new Armes[13];
new munitions[13];
new armes;
for(new i = 1;i <= 12;i++)
{
new nomtueur[MAX_PLAYER_NAME];
GetPlayerName(killerid, nomtueur, sizeof(nomtueur));
format(string, sizeof(string), "Attention: %s vient de tueur quelqu'un avec un minigun",nomtueur);
ABroadCast(COLOR_LIGHTRED,string,1);
format(string, sizeof(string), "Voici les armes du joueur pour verifier si ce n'est pas un fakekill");
ABroadCast(COLOR_LIGHTRED,string,1);
format(string, sizeof(string), "Arme de %s", nomtueur);
ABroadCast(COLOR_LIGHTRED,string,1);
GetPlayerWeaponData(giveplayerid,killerid,Armes[killerid],munitions[killerid]);
if(Player_Weapons[killerid] != 0)
{
new weaponName[256];
GetWeaponName(Armes[killerid],weaponName,255);
format(string, sizeof(string), "Arme: %s avec %d munitions",weaponName,munitions[killerid]);
ABroadCast(COLOR_LIGHTRED,string,1);
armes ++;
}
if(armes == 0)
{
SendClientMessage(playerid, COLOR_GREY, "Arme: Aucune");
ABroadCast(COLOR_LIGHTRED,string,1);
}
}
}
J'ai fait ça vite fait je ne suis pas sur que s'est correct
Double post
J'ai oublié ceci
forward ABroadCast(color,const string[],level);
-
Il n'y a pas plus simple ?
Qu'est ce qui est faux dans mon code ?
A+ ;)
-
remplace tes getplayerweapon par
reason
Mais si s'est des fake kill comme la si bine souligné Cristab il y aura des bans insute
-
en gros, je rajoute une condition pour dire s'il est dans un véhicule, comme ça au revoir l'explosion qui pourrait être pris pour un lance rocket et le minigun de l hunter pris pour un vrai minigun
A+
-
Slt
je viens vous exposer un nouveau problème.
J'ai un petit projet qui nécessite de lancer un timer à une heure fixé pour que l'action se déroule. J'ai donc réalisé ce code:
new Hours;
new Minutes;
new Seconds;
gettime(Hours, Minutes,Seconds);
if( Hours == 17 && Minutes == 22 && Seconds == 37 ) return SendClientMessage(playerid,rouge,"On lance le Script");
Evidemment si je poste ici, c'est que le script ne marche pas du tout malgré que je n'ai aucune erreur ni de warnings
Avez vous une idée pour réparer ça ? Quelle erreur ai je fais ?
A+ ;)
-
Il faut que tu cree un timer qui toute les X temps verifie l'heure
-
Merci pour ton aide, mais ce code est déjà dans un timer qui lance le code toutes les 5 secondes :wall
Résolu grâce à Sim :D
Le problème, c'est que je demandais les secondes alors qu'il ne fallait pas car lorsque le timer lançait le code, la seconde demandé n'était pas forcément la bonne
A+ ;)
-
Salut,
Je suis là pour vous exposer un petit problème que je recontre sur une modifications que je veux faire sur mon serveur.
En effet, j'aimerai ajouter du texte dans une boite de dialogue du type: DIALOG_STYLE_MSGBOX
Voici le rendu en image que la boite devrai avoir avec un exemple de texte:
http://wiki.sa-mp.com/wiki/Dialog (http://wiki.sa-mp.com/wiki/Dialog)
Mais le problème, c'est que lors de la compilation, ce texte est considéré comme trop long, pourtant, j'ai vu des textes aussi long voir plus sur certains serveur.
Je ne vous demande donc pas comment faire car je le sais, mais plutôt connaitre la méthode me permettant de mettre des phrases plus longues que ci dessous.
ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"Menu Aide par LePtitClown","blablablablablabblablablabla \n blablablabablabla2","Valider","Annuler");
Merci d'avance pour votre aide,
A+ ;)
-
Oui bien sûr comme dans l'exemple écrit sauf que c'est plus long évidemment :happy
Mon texte doit faire ça environ ( je n'ai pas le bon sous la main ):
SendClientMessage(playerid,COLOR_INFO,"Bienvenue dans la partie Règles");
SendClientMessage(playerid,COLOR_AIDE,"Le spawnkill / carkill / motokill / driveby / nofairplay sont sanctionnés");
SendClientMessage(playerid,COLOR_AIDE,"Il existe une exception au driveby, carkill: si vous avez acheté un tank, un hunter, ou un hydra");
SendClientMessage(playerid,COLOR_AIDE,"Les joueurs doivent se respecter entres eux ( pas d'insulte, même si vous vous connaissez, de propos racial etc..)");
SendClientMessage(playerid,COLOR_AIDE,"Le cheat est formellement interdit sur ce serveur ( banni direct sans prévenir )");
SendClientMessage(playerid,COLOR_AIDE,"Ne vous plaignez pas si un joueur vous tue lorsque vous écrivez, mettez vous à l'abri");
SendClientMessage(playerid,COLOR_AIDE,"Le C Bug ainsi que le Switch sont autorisés. Un seul compte doit être crée par joueur.");
SendClientMessage(playerid,COLOR_AIDE,"Ne tuez pas un joueur qui est en prison");
SendClientMessage(playerid,COLOR_AIDE,"Tout manquement à ces règles sera sanctionné");
-
Ah j'avais pas pensé au bouton suite merci
EDIT: J'ai réussi mais je trouve que la structure n'est pas très optimisé:
if (strcmp("/aide", cmdtext, true) == 0)
{
ShowPlayerDialog(playerid,3,DIALOG_STYLE_MSGBOX ,"Menu Aide par LePtitClown","blabla","Suite","Annuler");
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 3 && response)
{
ShowPlayerDialog(playerid,4,DIALOG_STYLE_MSGBOX,"Objectif du Serveur","blabla","Suite","Annuler");
return 1;
}
if(dialogid == 4 && response)
{
ShowPlayerDialog(playerid,5,DIALOG_STYLE_MSGBOX,"Termes à connaitre","blabla","Suite","Annuler");
return 1;
}
if(dialogid == 5 && response)
{
ShowPlayerDialog(playerid,6,DIALOG_STYLE_MSGBOX,"Termes à connaitre (suite)","blabla","Suite","Annuler");
return 1;
}
if(dialogid == 6 && response)
{
ShowPlayerDialog(playerid,7,DIALOG_STYLE_MSGBOX,"Commandes du serveur","blabla","Suite","Annuler");
return 1;
}
if(dialogid == 7 && response)
{
ShowPlayerDialog(playerid,8,DIALOG_STYLE_MSGBOX,"Partie crédits","blabla","Valider","Annuler");
return 1;
}
return 0;
}
Si vous savez comment faire plus simple je suis partant bien que ce code marche très bien mais peut être un peu trop compliqué pour rien
A+ ;)
-
C'est vrai que c'est déjà plus claire :D
Mais je suis obligé de donner une id différentes à toutes mes boites de dialogue ?
-
en gros sa sert a a identifier le tableau a afficher donc oui sa sert meme en pratique
-
C'est ce que je pensais pas très util mais obligatoire
Merci pour votre aide ;)
A+
-
C'est ce que je pensais pas très util mais obligatoire
Au contraire, très utile mais pas obligatoire, surtout dans ton cas où chaque boite de dialogue permet d'ouvrir la suivante.
Si toutes tes boites ont le même ID, tu pourras pas faire la différence entre la réponse à la boite sur les crédits et la réponse à la boite sur commandes par exemple.
Sur Lalu's Stunt, toutes les boites de dialogue dans lesquelles le joueur peut interagir ont un ID qui leur est propre.
Les boites de dialogues qui ne servent qu'à l'affichage d'information ont, par contre, toutes le même ID (car aucun traitement particulier n'est fait pour ces boites là).
++
Syg
-
Slt
Désolé de revenir vous voir ici, mais j'ai un grave problème de doubles comptes. Le sujet du post 11 ne marche hélas pas du tout, je viens donc demander votre aide. L'objectif est de stopper les multi comptes. Je n'arrive pas à faire ce système correctement
//au moment du login
saveip(playerid)// on sauvegarder toutes les IP
{
new tmp[64], tmpp[32];
GetPlayerIp(playerid, tmpp, 32);
new IP[50];
new File:file = fopen("fichier.txt", io_append);//io_append permet de se placer à la fin du fichier afin d'ajouter des choses à la suite
while(fread(file, tmpp, 32))
{
if(!strcmp(IP, tmpp, false, 16))
{
format(tmp, sizeof(tmp), "%s\r\n",tmpp);//donc on format les informations à entre
fwrite(file, tmp);
fclose(file);
}
}
fclose(file);
}
//Au moment de l'enregistrement
verifip(playerid)// On vérifie si cette IP est présente dans le fichier texte
{
if(fexist("fichier.txt"))
{
new File:file = fopen("fichier.txt", io_read);
new IP[50];
if(file)
{
new tmpp[32];//un IP par ligne, pas besoin d'un string long (serait mieux de mettre 128 au cas où...)
while(fread(file, tmpp, 32))
{
if(strcmp(IP, tmpp, false, 16))
{
fclose(file);
ERRORMSG("Ip déjà enregistré, tu ne peux donc pas créer de nouveau compte");
}
}
fclose(file);
}
}
}
A+ ;)