[Tutorial] Tuto pour OnPlayerClickMap
#1

Bonjour/bonsoir,
j'ai remarquй que la callback OnPlayerClickMap est beaucoup trop inutilisй, pourtant c'est une callback trиs utile, puisqu'elle peut faciliter la vie de bien des admin

je vais vous donner un exemple de ce qu'on peut faire avec la callback OnPlayerClickMap
on va crйer un script tout bкte et tout simple qui nous permettra de TP l'administrateur a l'endroit de son choix juste en cliquant sur le bouton droit de la souris sur celui-ci dans la Map situй dans le menu pause (oui on va mettre un marqueur)


voici les diffйrents paramиtres de la callback :
playerid l'ID du joueur qui a placй le marqueur sur la map
Float:fX la position X de l'endroit sur lequel le joueur a cliquй
Float:fY la position Y de l'endroit sur lequel le joueur a cliquй
Float:fZ la position Z de l'endroit sur lequel le joueur a cliquй (quasi inutilisй, mais peut кtre combinй avec le plugin MapAndreas pour une position plus EXACT)

passons maintenant aux choses sйrieuses, nous allons faire un code vraiment simple :

PHP Code:
public OnPlayerClickMap(playeridFloat:fXFloat:fYFloat:fZ)
{
    
SetPlayerPosFindZ(playeridfXfYfZ); //cette fonction va TP le joueur a la position qu'il a marquй 
    
return 1;

nous avons effectuй un code simple, que tous les joueurs peuvent utiliser, mais qui ne va pas TP le joueur si il est dans un vйhicule.
nous allons modifier le code :


PHP Code:
public OnPlayerClickMap(playeridFloat:fXFloat:fYFloat:fZ)
{
    if(
IsPlayerAdmin(playerid)) // nous avons mis une condition qui va vйrifier si le joueur est connectй en Rcon (vous pouvez adapter avec votre systиme Admin, chacun son systиme admin)
    
{
         
SetPlayerPosFindZ(playeridfXfYfZ); // toujours les mкmes propriйtйs, TP le joueur
    

    return 
1;

Voila, nous avons fait un code qui peut TP un joueur si il est admin, sinon, si il est joueur normal il reste la comme un con x)

passons aux choses plus compliquйs


PHP Code:
public OnPlayerClickMap(playeridFloat:fXFloat:fYFloat:fZ)
{
   if(
IsPlayerAdmin(playerid)) //on vйrifie si ce con est admin Rcon
   
{
      if(!
IsPlayerInAnyVehicle(playerid)) // on met une condition, si il est pas dans un vehicule...
      
{
          
SetPlayerPosFindZ(playeridfXfYfZ); // ... sa TP le joueur a la position marquй !
      
}
      else if(
IsPlayerInAnyVehicle(playerid)) // ou bien si il est dans un vйhicule...
      
{
          new 
CarID GetPlayerVehicleID(playerid); // ... on vйrifie l'ID du vйhicule...
          
new CarSeat GetPlayerVehicleSeat(playerid); // ... on vйrifie le siиge sur lequel le joueur a posй ses fesses...
          
SetVehiclePos(CarID,fX,fY,fZ); // ... on TP le vйhicule a la position marquй...
          
PutPlayerInVehicle(playerid,CarID,CarSeat); // ... et pour finir on met le joueur dans son vйhicule, dans son siиge !
      
}
   }
      return 
1;

Voila, c'йtait tout pour ce tuto, comme je termine toujours,
le script n'a pas de limite, la seul limite dans le script, c'est la limite imposй par votre imagination, donc, moduler ce code comme vous le souhaiter, et bon script a vous !
Reply
#2

Merci , зa en aidera plus d'un
Reply
#3

Il me semble que lorsque l'on est dans un vйhicle et qu'on le TP, le joueur est TP et reste assis а sa place non ?
Reply
#4

Exactement anou, quand on TP le vйhicule, on TP le joueur avec un PutPlayerInVehicle, et la sa va TP le joueur dans la voiture qui elle a йtй TP avec SetVehiclePos
Reply
#5

Yo.

Merci pour le tuto, j'ai jamais compris l'utilitй de la callback. En rйalitй, зa peut vraiment кtre utile.
Et pour la position z, elle a beau кtre inutilisйe, pour tp quelqu'un par exemple au mont Chilliad, gg si t'y arrives sans modifier la hauteur

+rep
Reply
#6

merci s4t3k, oui la callback est quasi inutilisй par tout le monde x), pourtant elle est utile
Reply
#7

Merci. Mais sinon tu peut toujours faire comme sa pour optimiser ^^:
Code:
public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
{
   if(IsPlayerAdmin(playerid)) //on vйrifie si ce con est admin 
   {
   new CarID = GetPlayerVehicleID(playerid); // ... on vйrifie l'ID du vйhicule du joueur
   new CarSeat = GetPlayerVehicleSeat(playerid); // ... on vйrifie le siиge sur lequel le joueur a posй ses fesses...
   switch(IsPlayerInAnyVehicle(playerid))
   {
   case 0: SetPlayerPosFindZ(playerid, fX, fY, fZ); // ... sa TP le joueur a la position marquй !
   case 1: SetVehiclePos(CarID,fX,fY,fZ) ,PutPlayerInVehicle(playerid,CarID,CarSeat); // On tp la voiture et pour finir on met le joueur dans son vйhicule, dans son siиge !
   }
   }
   return 1;
}
En tous cas t'aura un petit +rep <3
Reply
#8

Quote:
Originally Posted by nicolaskettler
View Post
Merci. Mais sinon tu peut toujours faire comme sa pour optimiser ^^:
Code:
public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
{
   if(IsPlayerAdmin(playerid)) //on vйrifie si ce con est admin 
   {
   new CarID = GetPlayerVehicleID(playerid); // ... on vйrifie l'ID du vйhicule du joueur
   new CarSeat = GetPlayerVehicleSeat(playerid); // ... on vйrifie le siиge sur lequel le joueur a posй ses fesses...
   switch(IsPlayerInAnyVehicle(playerid))
   {
   case 0: SetPlayerPosFindZ(playerid, fX, fY, fZ); // ... sa TP le joueur a la position marquй !
   case 1: SetVehiclePos(CarID,fX,fY,fZ) ,PutPlayerInVehicle(playerid,CarID,CarSeat); // On tp la voiture et pour finir on met le joueur dans son vйhicule, dans son siиge !
   }
   }
   return 1;
}
En tous cas t'aura un petit +rep <3
Optimisation et indentation absente

pawn Code:
public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Trolilolilol !");
    if(IsPlayerInAnyVehicle(playerid)) {
        new CarID = GetPlayerVehicleID(playerid);
        new CarSeat = GetPlayerVehicleSeat(playerid);
        SetVehiclePos(CarID, fX, fY, fZ);
        return PutPlayerInVehicle(playerid, CarID, CarSeat);
    }
    return SetPlayerPos(playerid, fX, fY, fZ);
}
10x mieux et prend moins de place
Reply
#9

Quote:
Originally Posted by iDroid
View Post
Optimisation et indentation absente

pawn Code:
public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Trolilolilol !");
    if(IsPlayerInAnyVehicle(playerid)) {
        new CarID = GetPlayerVehicleID(playerid);
        new CarSeat = GetPlayerVehicleSeat(playerid);
        SetVehiclePos(CarID, fX, fY, fZ);
        return PutPlayerInVehicle(playerid, CarID, CarSeat);
    }
    return SetPlayerPos(playerid, fX, fY, fZ);
}
10x mieux et prend moins de place
BG <3, mais perso je crois que les switch sont meilleur que les if ^^
Reply
#10

On n'a jamais dit зa.
Ce qu'on reproche aux if c'est quand on fait :

pawn Code:
if(machin == 1) code
if(machin == 2) code
if(machin == 3) code etc. // C'est зa qu'on reproche

Alors que
switch(machin) {
    case 1: code
    case 2: code
    case 3: code etc.
}

C'est mieux organisй, mais if est tout de mкme essentiel dans un GM
Et d'ailleurs comment tu peux savoir si IsPlayerInAnyVehicle retourne 0 ou 1 ?
Reply


Forum Jump:


Users browsing this thread: 7 Guest(s)