Portails, téléportation et clé.

Répondre
Partager Rechercher
Coucou
Je cherche à téléporter des joueurs d un point à l autre dans un même zone. Le point serait un portail verrouillé, qui s ouvre lorsqu un joueur possède l objet d activation, et se referme apres 30 sec environ (le tps de laisser passer les autres pj).
Jusqu à présent j avais utilisé des portes avec clé spécifique, qui se reverouillent, pour limiter l acces a certaines zones. Je n arrive pas a faire ca sur un portail.
Merci pour vos idées
J'opterais pour un item à activer sur le portail, et pour l'utilisation du OnHeartBeat du portail.


L'item reconnaîtrait le tag du portail, et lui inscrirait une variable locale "int" d'une valeur égale à 5. Dans le cas où une variable serait déjà inscrite, donc différente de 0, l'item n'aurait aucun effet.

Le OnHeartBeat du portail diminuerait cette variable de 1, à chaque cycle. Si la variable est à 5, et que le OnHeartBeat agit toutes les 6 secondes, cette même variable se retrouverait à 0 en 30 secondes.

Le OnUsed du portail permettrait la téléportation si la variable est strictement supérieure à 0.
Je débute avec les scripts, je ne sais pas faire ca Tu pourrais m expliquer un peu plus en détail, je ne comprends pas les variables, où et comment les définir, idem pour l item, je dois lui assigner un script?
Voui, tu vas avoir besoin de 3 scripts (ou d'en modifier un si ton script "OnActivateItem" est utilisé) :

1°) Créer les objets (item & plaçable) et bien définir leur "Tag". Rajouter le pouvoir "Activer" ou "Pouvoir unique" sur l'item en question, et mettre le plaçable en utilisable & intrigue (pour éviter qu'un malin s'amuse à le détruire).

2°) Créer ou modifier le script présent dans le "OnActivateItem" du module, afin que quelque chose puisse se déclencher quand l'item est utilisé. Comme cet évènement s'applique quand n'importequel objet est activé, il faut le reconnaître par son tag :
Code PHP:

void main()
{
    
object oItem GetItemActivated();

    
// Dans le cas où ton item porte le Tag "Item_Portail" :
    
if(GetTag(oItem)=="Item_Portail")
    {
        
// On récupère l'objet sur lequel l'item a été activé
        
object oPortail GetItemActivatedTarget();

        
// On vérifie si c'est bien le plaçable portail,
        // et dans le cas on ton plaçable porte le tag "Placable_Portail" :
        
if(GetTag(oPortail)=="Placable_Portail")
        {
            
// On lui colle une variable locale "int" à 5 si elle est inexistante,
            // donc inférieure à 1.
            
if(GetLocalInt(oPortail,"DECOMPTE_PORTAIL")<1)
            {
                
SetLocalInt(oPortail,"DECOMPTE_PORTAIL",1);
            }
        }
    }

Tu remarqueras que j'ai ici utilisé le nom "DECOMPTE_PORTAIL" pour la variable locale. Tu peux mettre ce que tu veux, en alphanumérique, mais il faut respecter les majuscules et les minuscules impérativement.

Ensuite, je m'occupe du plaçable. Dans son "OnHeartBeat", il faudra diminuer sa variable locale de 1, et ne rien faire si elle est inférieure.
Code PHP:

void main()
{
    
object oSelf OBJECT_SELF;
    
int nCompte GetLocalInt(oSelf,"DECOMPTE_PORTAIL");

    if(
nCompte<1)
    {
        
// Ici la variable locale est à 0 ou inexistante,
        // on coupe donc le script, rien ne se passe :
        
return;
    }
    else
        
SetLocalInt(oSelf,"DECOMPTE_PORTAIL",nCompte-1);

Remarque à part, j'ai défini "object oSelf = OBJECT_SELF;". Sur un petit script comme ça, ce n'est pas très important, mais OBJECT_SELF est une fonction. Si, et pour éviter de la rappeler plusieurs fois, on définit une variable oSelf. On pourrait appeler cette fonction "GetObjectSelf()".

Enfin, le "OnUsed" du portail nous permettra de téléporter un joueur qui utilise ce portail, si la variable est supérieure à 0 (ou supérieure ou égale à 1, suivant les préférences).
Code PHP:

void main()
{
    
object oUser GetLastUsedBy();

    if(
GetLocalInt(OBJECT_SELF,"DECOMPTE_PORTAIL")>0)
    {
        
// Dans le cas (conseillé) ou la destination est un
        // point de passage, et qu'il porte le Tag "Destination_Portail" :
        
object oWaypoint GetWaypointByTag("Destination_Portail");
        
AssignCommand(oUser,ActionJumpToObject(oWaypoint));
    }

Voila, bonne chance avec ça. La prochaine fois, fais un joli truc que tu postes ici, et demande des explications. On pourra dire que je t'ai mâché (voire digéré) le travail...

Si tu ne connais pas grand chose en script, n'hésite pas à poster des questions bêtes, c'est ce qu'il y a de mieux pour comprendre les bases.
Impressionnant en fait j avais commencé a essayer de réaliser ton idée avec un éditeur de script, merci j y vois plus clair avec ton post.
Pour la question bête, j ai voulu appliqué une variable au portail lorsque le pj active l item, l éditeur m a proposé trois choses : set local string, set local integer et set local float. Quelle est la différence entre les trois?
Les trois sont des variables locales indépendantes.

- "string" pour les variables locales de valeur alphanumérique (texte pouvant également comporter des espaces). Tu pourras stocker des noms de joueur, des tags ou des resrefs, mais aussi des nombres. Pour les nombres, ils auront la valeur "string" et ne pourront pas être interprêtés par une commande requierant un autre type de valeur, excepté si tu utilises la fonction "StringToInt()" ou "StringToFloat()".

- "int" pour les variables locales de valeur numérique en nombres entiers. C'est à mon avis la plus commune, vu que "oui"/"non" peut être interprété par "1"/"0". Peu d'erreurs possibles, donc.

- "float" pour les variables locales de valeur numérique en nombres à virgule


Je les qualifie d'indépendantes car tu peux inscrire deux variables du même nom ayant une valeur différente.

Tu pourras donc stocker :
Code:
nom                  type      valeur
VARIABLE_LOCALE_1    string    Texte 1
VARIABLE_LOCALE_2    string    Texte 2
VARIABLE_LOCALE_1    int       1
VARIABLE_LOCALE_2    int       2
VARIABLE_LOCALE_1    float     0.1
VARIABLE_LOCALE_2    float     0.2
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés