Monstres lachant des items précis mais pas systèmatiquement...

Répondre
Partager Rechercher
Bonjour à tous !

J'ai créé un item bien précis (avecc son tag et tout et tout)... Je voudrais maintenant que cet item soit lâché par des monstres (appartenant à une rencontre) mais disons pas systèmatiquement. Je vais mieux m'expliquer :

C'est en fait pour un module persistant. Le but étant que le PJ aiille chercher tel ou tel ingrédient. Et je voudrais donc que cette "quête" soit renouvelée. Aussi, cet item ne dois pas forcément être unique. Il peut y en avoir 2 ou 3 qui tombent à plusieurs endroits différents. Vous voyez ce que je veux dire ? Merci !
Met l'item dans l'inventaire du monstre et coche la case "lachable".
Il me semble qu'il le dropera de temps en temps (et pas a chaque fois).

Sinon il te reste la solution de scripter ca, mais c'est pas évident.
Ah bon? Je crois qu'il va le lâcher à chaque fois, non?

Une méthode pour le script: dans le Onspawn du monstre tu mets quelque chose comme:
Code:
if(Random(10) == 0)
{
     CreateItemOnObject("ResRef" ,OBJECT_SELF, ....)
}
Il me semblais avoir testé le "lachable" avec un objet "pièce d'or", et que le monstre ne dropais pas a chaque fois. Apres je peu me tromper, ca remonte a quelques mois quand même

Pour le drop, la méthode est probablement la plus simple mais elle a l'inconvénient qu'il te faudra modifier tous les scripts de drop de chaque monstre.

Une autre méthode serai d'utiliser une fonction qui retourne pour chaque monstre (avec un switch sur un identifiant quelconque associé aux monstres) les objets qu'il peut dropper et les pourcentages de chance de drop, puis de créer un script de mort commun a tous les monstres et qui exploite cette fonction.

J'ai ca en magasin, elle a été testée, mais je n'ai toujours pas eu le temps de la commentée pour la soumettre aux critiques (constructives) du forum.
Bé c'est super simple, non ? Ou alors je me plante complètement...
Enfin voilà mon idée : Un gnoll a une hallebarde de Tag "halgnol" et de ResRef "halgnol". Tu décoches la case lâchable dans l'inventaire (ou tu ne mets pas l'objet hallebarde si il ne l'utilise pas).
Puis tu décoches les deux barres devant OnDeath dans ton OnSpawn, tu crées un UserDefined comme ceci :
Code PHP:

//"Lacher un objet a la mort : 50% de chances"
//By Ange Musicien
int nAppelePar GetUserDefinedEventNumber();
void main()
{
switch(
nAppelePar)
 {
 case 
1007 :  // Appele par OnDeath
 
int nHasard d100(1); // chances pour qu'il lache l'objet
 
if(nHasard>>50// conditions de lachage de l'objet
  
{
  
location lSelf GetLocation(OBJECT_SELF);
  
CreateObject(OBJECT_TYPE_ITEM,"halgnol",lSelf,FALSE);
  }
 else
  {
  }
 break;
 }

Ca c'est la première possibilité. Si ça ne marche pas (peu probable), il te reste toujours celle-là :

Code PHP:

//"Lacher un objet a la mort : 50% de chances"
//By Ange Musicien
int nAppelePar GetUserDefinedEventNumber();
void main()
{
switch(
nAppelePar)
 {
 case 
1007 :  // Appele par OnDeath
 
int nHasard d100(1); // chances pour qu'il lache l'objet
 
if(nHasard>>50// conditions de lachage de l'objet
  
{
  
object oItem GetNearestObjectByTag("halgnol");
  
ActionPutDownItem(oItem);
  
// le probleme est la : ActionPutDownItem va probablement demander au gnoll de la poser
  
}
 else
  {
  }
 break;
 }

Mais ça risque de ne pas faire très vrai. Mais c'est vraiment la bouée de secours, parce qu'en théorie le premier marche très bien. Voili voilou... Tu n'as plus qu'à remplacer les 50% et le ResRef par tes conditions.

EDIT// bon OK, je sais que je suis lent, mais là je n'avais pas lu ta réponse. Tnat pis, au moins elle n'aura pas à taper son script Bwahaha... A chaque fois que j'veux aider, c'est pareil.
Evite de mettre ">>" là où tu veux dire ">", vu que les deux existent mais que ">>" est un opérateur binaire....
Par ailleurs inutile de mettre "else" si tu n'as rien à mettre derrière, il n'est pas nécessaire, le compilateur s'accommodera très bien d'un if sans else !!
Pourquoi attendre le OnDeath pour créer l'objet ?
Il suffirait de faire un OnSpawn spécifique et de mettre l'objet dans l'inventaire avec des conditions (bien sûr, s'il un objet dans l'inventaire qui est marqué "droppable" n'est pas lâché à chaque fois, je n'ai rien dis).
Sinon, ça serait beaucoup mieux, tu crée l'objet dans l'inventaire et tu ne te soucies plus du reste.
Le mieux c'est de créer les objet au moment du spawn et de les recréer a terre au moment de la mort.
Comme ca le monstre peu utiliser la super arme magique qui tue la mort contre le joueur qui rêve de lui piquer
BON ! Je suis passé par toute les méthodes inimaginables et je n'ai pas trouvé de système. Quelqu'un pourrait m'aider ? Je n'y arrive ps. J'ai aussi essayé les deux scripts mais ça ne marche pas ! Et si je coche la case "lachable" il monstre le lache direct --> disons, trop souvent ! HEEELP !
Euh ça ne marche pas?

Code:
if(Random(10) == 0)
{
     CreateItemOnObject("ResRef" ,OBJECT_SELF, ....)
}
Sinon Iridian a raison, si tu veux un système qui marche pour tous les monstres et avec différents objets il faut que tu crée une table, dans un include par exemple, où tu fais correspondre la ResRef d'objet et le pourcentage de chance au tag du monstre. L'idéal étant même un codage sur le tag plutôt qu'une table de correspondance (quoique étant donné ce que l'on a appris sur les manipulations de chaînes ). Mais si tu veux ça pour un seul objet, ce que j'avais écris est suffisant.
Répondre

Connectés sur ce fil

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