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 :
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.
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).
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.