Los Santos Roleplay
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment : -20%
Ecran PC GIGABYTE 28″ LED M28U 4K ( IPS, 1 ms, ...
Voir le deal
399 €

[TUTO] Apprenons le Pawn avec Gilux ! [Partie 3 : Conclusion]

Aller en bas

[TUTO] Apprenons le Pawn avec Gilux ! [Partie 3 : Conclusion] Empty [TUTO] Apprenons le Pawn avec Gilux ! [Partie 3 : Conclusion]

Message par Mez Mer 24 Juil 2013 - 0:19

[TUTO] Apprenons le Pawn avec Gilux ! [Partie 3 : Conclusion] Pawno10Apprenons le Pawn avec Gilux ![TUTO] Apprenons le Pawn avec Gilux ! [Partie 3 : Conclusion] Pawno10
Partie 3 : Conclusion

Salut, et bienvenue dans la 3e partie de ce tutoriel PAWN qui sera assez courte !
Dans celle-ci, je vais vous apprendre à créer des fonctions, puis je vous donnerai quelques conseils pour l'hébergement.
Il y aura aussi une introduction rapide à la notion d'intérieur et de monde virtuel.


1) Notion d'intérieur
Un intérieur est comme son nom l'indique, un intérieur de bâtiment. Si vous faites un téléport 10 unités de Z au dessus de la normale, vous pourrez admirer "l'underworld". Chaque intérieur possède quelques bâtiments et a un ID spécifique que vous pouvez retrouver ici
Pour téléporter un joueur dans un intérieur, il faudra donc utiliser :
Code:
SetPlayerInterior(playerid,Interiorid);
(sans oublier de téléporter le joueur à la position de l'intérieur)
Vous trouverez les IDs et positions des intérieurs sur le lien ci-dessus.

2) Notion de monde virtuel
Il existe quelques millions (ou milliards ??) de monde virtuels, ou "VirtualWorld" ou encore "VW". Ils permettent de séparer les joueurs tout en partageant la même map.
L'utilisation de mondes virtuels autres que le 0 (défaut) semble donc évidente si vous voulez créer un DM, pour éviter que les joueurs en DM ne puissent tuer les autres.
Pour lier un joueur à un monde virtuel, utilisez :
Code:
SetPlayerVirtualWorld

ATTENTION : Un véhicule placé normalement ne sera visible que dans l'intérieur 0 et le monde virtuel 0, il faut utiliser SetVehicleVirtualWorld et LinkVehicleToInterior pour y remédier.

3) Créer vos fonctions !
Quelquefois, vous aurez des commandes répétitives à créer (je pense aux téléports), il serait donc plus judicieux de créer une seule fois tous les effets (Téléporter, téléporter le véhicule si besoin, ajuster l'angle, etc) et de résumer un téléport à une instruction du genre [tt]Teleport(playerid,Float:X,Float:Y,Float:Z,Interior,VirtualWorld);[/tt]
Je vais reprendre et ajuster honteusement (:ninja) l'exemple de Syg (http://www.gtaonline.fr/forums/index.php/topic,6250.0.html)
Code:

<?php
if (strcmp ("/stade", cmdtext, true) == 0)
{
   new vehicleid;

   if (IsPlayerInAnyVehicle (playerid))
   {
      vehicleid = GetPlayerVehicleId (playerid);
      SetPlayerPos (playerid, 1.0, 2.0, 3.0);
      SetPlayerVirtualWorld(playerid,5);
      SetPlayerInterior(playerid,2);
      SetVehicleVirtualWorld(vehicleid,5);
      LinkVehicleToInterior(vehicleid,2);
      SetVehiclePos (vehicleid, 1.0, 2.0, 3.0);
      SetVehicleZAngle (vehicleid, 4.0);
      PutPlayerInVehicle (playerid, vehicleid, 0);
      SetCameraBehindPlayer (playerid);
   }
   else
   {
      SetPlayerPos (playerid, 1.0, 2.0, 3.0);
      SetPlayerInterior(playerid,2);
      SetPlayerVirtualWorld(playerid,5);
      SetCameraBehindPlayer (playerid);
   }
}

Rien qu'à la vue de ce code, vous pouvez vous rendre compte qu'il s'agit d'un code lourd pour pas grand chose.
Cependant il peut être simplifié, nous allons créer une nouvelle instruction qui regroupera le tout :

Code:

<?php

Teleport (playerid, Float:X, Float:Y, Float:Z, Float:Angle, Interior, VirtualWorld)
{
   new vehicleid;
   if (IsPlayerInAnyVehicle(playerid))
   {
      vehicleid = GetPlayerVehicleId (playerid);
      SetPlayerPos (playerid, X, Y, Z);
      SetVehiclePos (vehicleid, X, Y, Z);
      SetVehicleZAngle (vehicleid, Angle);
      SetPlayerInterior(playerid,Interior);
      LinkVehicleToInterior(vehicleid,Interior);
      SetPlayerVirtualWorld(playerid,VirtualWorld);
      SetVehicleVirtualWorld(vehicleid, VirtualWorld);
      PutPlayerInVehicle (playerid, vehicleid, 0);
      SetCameraBehindPlayer (playerid);
   }
   else
   {
      SetPlayerPos (playerid, X, Y, Z);
      SetPlayerInterior(playerid,Interior);
      SetPlayerVirtualWorld(playerid,VirtualWorld);
      SetCameraBehindPlayer (playerid);
   }
}

Maintenant, vous n'avez plus qu'a taper :
Code:
if (strcmp ("/stade", cmdtext, true) == 0)
{
   Teleport(playerid, 1.0, 2.0, 3.0, 4.0,15,5);
   return 1;
}

Le joueur sera conduit aux positions (1;2;3), avec un angle de 4°, dans l'intérieur 15 et le monde virtuel 5.

4) Conseils d'hébergement
Les hébergeurs se font nombreux, mais certains ne sont pas toujours honnêtes... Attention donc aux vols de scripts !
Pour éviter cela au maximum, voici 2 conseils :

• Méfiez-vous des hébergeurs gratuits, très peu sont honnêtes. Si vous avez un réel projet, il vaut mieux chercher un hébergement certes payant, mais de qualité.
• Ne mettez que le .amx (version compilée) sur votre session. (Les .pwn contiennent le code source en clair et sont inutiles au fonctionnement du serveur)

Attention aussi à la compatibilité Linux / Windows ! La majorité des hébergements se font sous linux, mais il existe quelques différences, notamment au niveau des plugins (.dll à ajouter à votre serveur pour disposer de fonctions supplémentaires.) Par exemple, ici vous ne devrez pas mettre le .dll, mais le .so (Version Linux).

Voilà, c'est la fin de cette 3e partie et de ce tutoriel, vous avez maintenant les capacités pour faire un bon GM, bonne chance !
++



Reproduction autorisée, sous conditions Creative Commons.
[TUTO] Apprenons le Pawn avec Gilux ! [Partie 3 : Conclusion] 88x31

Source : gtaonline. net
Mez
Mez

Messages : 313
Date d'inscription : 05/05/2013
Localisation : 76

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum