JeuxOnLineForumsPlusConnectés : 544 (sites) | 964 (forums)Créer un compte
Neverwinter Nights
Maskado
Répondre
Partager Outils Rechercher
Avatar de xelone
xelone
Roi
 
Avatar de xelone
 
peut etre vas tu pouvoir quand meme m'aider :

j'utilise un autre eboueur mais qui foire apparemment : dans le OnUnacquireItem du mod :

Code PHP:
/*
    s_unacquireitem - example script for incorporation into OnUnAcquireitem
*/

#include "i_tagtests"

void main()
{

object oItem GetModuleItemLost();

DelayCommand(200.0ExecuteScript("eboueurs"oItem));

if (
GetIsNoDrop(oItem)) {

    
object oLostBy GetLocalObject(oItem"ND_OWNER");

    if (
GetIsObjectValid(oLostBy))
        
ExecuteScript("s_nodrop_drop"oLostBy);

}


et comme script execute "eboueur"

Code PHP:
void main()
{
if(
GetIsPC(GetItemPossessor(OBJECT_SELF))==FALSE)
{
DestroyObject(OBJECT_SELF);
}


voila il allait et je suis passé a Sou et il va plus !!

un petit médecin pour me guérir ce script ?

et pour le lootable , je dois personnalisé tout mes monstres ou c juste un "petit" script a mettre qq part ?
Lien direct vers le message - Vieux
Avatar de Nek
Nek
Alpha & Oméga
 
Avatar de Nek
 
Je ne vais m'occuper que de la partie eboueur de ce que tu me présentes, la partie "NoDrop" comporte pas mal d'inconnues (l'include et le 2e script exécuté)....

D'après ce que je peux voir de ce script, lorsqu'un item est laché par un PJ, au bout de 200 secondes, il est détruit, sauf s'il est possédé par un PJ.....

Je ne pense pas que ce soit très efficace comme éboueur, pour plusieurs raisons:

- Il ne détruit que les objets quittant l'inventaire d'un PJ.
- Il ne détruit pas les objets stackables (comme les munitions, les potions, etc) ou encore l'or (le OnUnAcquireItem ne se déclenche pas dans ces deux cas).


La seule chose que je peux te proposer, c'est d'utiliser des scripts de corps lootable (cela nécessite l'import de 3 scripts et la création d'un placeable dans la palette de ton module); et d'utiliser le même script que moi.
Je te dis ce qu'il fait exactement, tu pourras voir si ça t'intéresse:

// Le script de corps "lootable" (qui est celui utilisé par le HCR mais totalement indépendant du système):
*Chaque monstre/PNJ mort reste sur le sol durant X minutes (paramétrable)
*Il est possible de fouiller leur inventaire
*Il est possible de régler des tas de paramètres afin de personnaliser le système (il faut comprendre un peu l'anglais par contre).


// Le script "eboueur":
* Il ne s'enclenche que lorsqu'il n'y a plus de PJ ou MD dans la zone.
* Le script supprime:
- Tous les items sur le sol qui ne sont pas des items de quête.
- Toutes les créatures qui ne sont pas en combat et qui proviennent d'une rencontre.
* Après tests, ça ne pose pas de problème avec les items contenus dans les coffres ou les divers inventaires.
* Il faut absolument utiliser un script de "corps lootable" sur les Monstres/PNJ (à exécuter dans le script OnDeath), parce que cet éboueur n'est pas prévu pour effacer les "sacs de drops" Bioware.


L'installation de tout ça n'est pas trop compliquée, je peux faire un autre post à ce sujet si il faut.
Lien direct vers le message - Vieux
Avatar de xelone
xelone
Roi
 
Avatar de xelone
 
oui oui oui oui oui oui, je veux je veux je veux . bref avec joie quoi ^^
Lien direct vers le message - Vieux
Avatar de xelone
xelone
Roi
 
Avatar de xelone
 
et tant que j'y suis je pose une question dans la coontinuité :

n'ayant pas de lootable corpse, j'utilise un script qui fait spawner et respawn un objet précis (quete) de l'inventaire d'un monstre.

si j'utilise le lootable corpse, je suppose que je devrai retirer ce script sinon ca va mettre son inventaire (contenant l'objet) + spawner l'objet ???
Lien direct vers le message - Vieux
Avatar de Nek
Nek
Alpha & Oméga
 
Avatar de Nek
 
Tu peux mettre ce script ici ? Cela permettra de voir plus clair

Pour le système de corps "lootable", voici un système très complet et configurable (cependant il est en anglais):

http://nwn.darkemud.com/~darke/HC/Fi...oreERFNPCC.zip
Lien direct vers le message - Vieux
Avatar de xelone
xelone
Roi
 
Avatar de xelone
 
Code PHP:
Drops de monstres 

Script à mettre dans le OnSpawn du monstre
PHP:



//:://///////////////////////////////////////////// 

//:: OnSpawnMonstreDrop 

//:: Copyright (c) 2001 Bioware Corp. 

//::////////////////////////////////////////////// 

/* 

Systeme de drop d'item pour les monstres. 

Ce script est a placer dans le OnSpawn du monstre 

en question. 

Utilisation : 

Placer les items que l'on veut faire dropper 

dans l'inventaire du monstre en question. 

Son tag doit etre de la forme "n_resref", ou "n" 

est le pourcentage de chance de drop de l'item et 

"resref" le resref de l'item en question. 

*/ 

//::////////////////////////////////////////////// 

//:: Created By: Thalion, beta et modifs par Mercius 

//:: Created On: 12/05/2003 18:54 

//::////////////////////////////////////////////// 

#include "NW_I0_GENERIC" 

void main() 



    
object oItem GetFirstItemInInventory(OBJECT_SELF); 

    
int iNbItem 0

    
string sTagProba

    while(
GetIsObjectValid(oItem))//boucle... 

    


        
iNbItem++; 

        
sTagProba GetTag(oItem); 

        
//on prend la partie droite de l'item, le resref 

        
SetLocalString(OBJECT_SELF,"item" IntToString(iNbItem), GetStringRight(sTagProbaGetStringLength(sTagProba) - FindSubString(sTagProba,"_"))); 

        
//on prend la partie gauche de l'item, le pourcentage de chance 

        
SetLocalInt(OBJECT_SELF,"proba" IntToString(iNbItem), StringToInt(GetStringLeft(sTagProbaFindSubString(sTagProba,"_")))); 

        
//on detruit l'item 

        
DestroyObject(oItem); 

        
oItem GetNextItemInInventory(OBJECT_SELF); 

    } 


    if(
iNbItem 0

    { 

        
int i

        for(
1;<= iNbItem;i++) 

        { 

            
//on calcule avec le pourcentage pour savoir si l'item doit apparaitre ou pas 

            
if(d100() <= GetLocalInt(OBJECT_SELF,"proba" IntToString(iNbItem))) 

            { 

                
//on cree l'item 

                
CreateItemOnObject(GetLocalString(OBJECT_SELF,"item" IntToString(iNbItem))); 

            } 

            
//on supprime les flags 

            
DeleteLocalString(OBJECT_SELF,"item" IntToString(iNbItem)); 

            
DeleteLocalInt(OBJECT_SELF,"proba" IntToString(iNbItem)); 

        } 

    } 



    
AssignCommand(OBJECT_SELF,ActionEquipMostDamagingRanged()); //equipe la meilleur arme a distance et s'il n'y en a pas la meilleur arme de corp a corp 

    
AssignCommand(OBJECT_SELF,ActionEquipMostEffectiveArmor()); 

    
AssignCommand(OBJECT_SELF,ActionRandomWalk()); 

}





Ce script suivant est à mettre dans le OnDeath du monstre
PHP:



//:://///////////////////////////////////////////// 

//:: OnDeathMonstreDrop 

//:: Copyright (c) 2001 Bioware Corp. 

//::////////////////////////////////////////////// 

/* 

Systeme de drop d'item pour les monstres. 

Ce script est a placer dans le OnDeath du monstre 

en question. 

Utilisation : 

Placer les items que l'on veut faire dropper 

dans l'inventaire du monstre en question. 

Son tag doit etre de la forme "n_resref", ou "n" 

est le pourcentage de chance de drop de l'item et 

"resref" le resref de l'item en question. 

*/ 

//::////////////////////////////////////////////// 

//:: Created By: Thalion, beta et modifs par Mercius 

//:: Created On: 12/05/2003 19:04 

//::////////////////////////////////////////////// 

#include "NW_I0_GENERIC" 

//fonction "Drop" 

void Drop(object oMstr



    
object oItem GetFirstItemInInventory(oMstr); 

    
location oLoc GetLocation(oMstr); 

    while(
oItem != OBJECT_INVALID)//boucle... 

    


        
//on cree l'item a l'endroit de la mort (possiblite pour un DelayCommdand 

        //si l'on ne veut pas que l'item apparaisse tout de suite) 

        
CreateObject(GetObjectType(oItem), GetResRef(oItem), oLoc); 

        
DestroyObject(oItem); 

        
oItem GetNextItemInInventory(oMstr); 

    } 




void main() 



    
//application de la fonction au monstre qui possede ce script 

    
Drop(OBJECT_SELF); 

    
//RESTE DU SCRIPT SUR LE OnDeath DU MONSTRE// 

    
int nClass GetLevelByClass(CLASS_TYPE_COMMONER); 

    
int nAlign GetAlignmentGoodEvil(OBJECT_SELF); 

    if(
nClass && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL)) 

    { 

        
object oKiller GetLastKiller(); 

        
AdjustAlignment(oKillerALIGNMENT_EVIL5); 

    } 


    
SpeakString("NW_I_AM_DEAD"TALKVOLUME_SILENT_TALK); 

    
//Shout Attack my target, only works with the On Spawn In setup 

    
SpeakString("NW_ATTACK_MY_TARGET"TALKVOLUME_SILENT_TALK); 

    if(
GetSpawnInCondition(NW_FLAG_DEATH_EVENT)) 

    { 

        
SignalEvent(OBJECT_SELFEventUserDefined(1007)); 

    } 


Lien direct vers le message - Vieux
Avatar de xelone
xelone
Roi
 
Avatar de xelone
 
euh j'ai chargé le lootable corpse et je me retrouve avec 4 scripts ! y en a t'il un que je dois mettre dans les event du module ? je traduis petit a petit le "mode d'emploi" inséré dans les scripts mais je veux juste demander ça
Lien direct vers le message - Vieux
Avatar de Nek
Nek
Alpha & Oméga
 
Avatar de Nek
 
Le script principal doit se lancer dans le OnDeath des créatures (donc tu ajoutes une ligne ExecuteScript blablabla au script nw_c2_default7 de ton module). Donc, vraiment très simple.

Les 3 autres scripts doivent de placer dans le OnOpen, OnClose et OnDeath de l'objet invisible de la palette (je présume qu'il y a un modèle inclu dans un fichier ERF qui le fera à ta place, tu auras juste à importer le modèle)


**Concernant le script que tu m'as mis, si tu as SoU ce script est inutile, car SoU intégre un système de gestion de trésor aléatoire selon les créatures. (tu peux aller lire la doc dans l'include x0_i0_treasure).
En gros cela te permet de gérer l'apparition de drops aléatoires d'une créature en créant un coffre possédant son tag, et en le remplissant des objets que tu veux que la créature ait une chance de dropper. Le coffre devant être placé dans une zone inaccessible du module. Tu peux faire ça pour tous tes monstres, ou même pour les races, ou encore les coffres de ton module.
Lien direct vers le message - Vieux
Avatar de xelone
xelone
Roi
 
Avatar de xelone
 
ah ok ! mais bon si je mets un objet dans l'inventaire du monstres, celui sera dans le corps je suppose ? (donc la aussi plus besoin du script !)

euh, en script je suis pas une bete, donc l'execute je sais ce que tu veux dire mais c pas la joie quand meme ! vais te mettre le script comme je pense qu'il doit etre et dit moi si je me goure ou pas
Lien direct vers le message - Vieux
Avatar de xelone
xelone
Roi
 
Avatar de xelone
 
bon voici ce que j'ai fais
Code PHP:
//:://////////////////////////////////////////////////
//:: NW_C2_DEFAULT7
/*
  Default OnDeath event handler for NPCs.

  Adjusts killer's alignment if appropriate and
  alerts allies to our death.
 */
//:://////////////////////////////////////////////////
//:: Copyright (c) 2002 Floodgate Entertainment
//:: Created By: Naomi Novik
//:: Created On: 12/22/2002
//:://////////////////////////////////////////////////

#include "x0_i0_spawncond"

void main()
{
//definition d'un objet mais lequel ?  l'objet invisible ?

//object oCorpse = GetObjectByTag ("invis_corpse_obj");  //si objet invisible !

    
int nClass GetLevelByClass(CLASS_TYPE_COMMONER);
    
int nAlign GetAlignmentGoodEvil(OBJECT_SELF);

    
// If we're a good/neutral commoner,
    // adjust the killer's alignment evil
    
if(nClass && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL))
    {
        
object oKiller GetLastKiller();
        
AdjustAlignment(oKillerALIGNMENT_EVIL5);
    }

    
// Call to allies to let them know we're dead
    
SpeakString("NW_I_AM_DEAD"TALKVOLUME_SILENT_TALK);

    
//Shout Attack my target, only works with the On Spawn In setup
    
SpeakString("NW_ATTACK_MY_TARGET"TALKVOLUME_SILENT_TALK);

    
// NOTE: the OnDeath user-defined event does not
    // trigger reliably and should probably be removed
    
if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
    {
         
SignalEvent(OBJECT_SELFEventUserDefined(1007));
    }
    
//execution du script ici ? ou plus haut ?
    //{
    //ExecuteScript("hc_inc_npccorpse", oCorpse);  // vu le nom du script, c'est pas plutot un include ?
  // }

__________________
MD de l'île de Cristal, monde persistant RP inspiré du Cycle de Pendragon.
IP server : 65.94.233.226:5121
Adresse site : http://www.iledecristal.fr.st
Lien direct vers le message - Vieux
Avatar de Nek
Nek
Alpha & Oméga
 
Avatar de Nek
 
Oui tu l'aurais mis au bon endroit, mais ce script est en effet un include et il ne peut donc s'exécuter comme ça.

Tu dois l'include en début de script et lancer la fonction à la fin, comme ceci:

Code PHP:
#include "x0_i0_spawncond"
#include "hc_inc_npccorpse"

void main()
{

    
int nClass GetLevelByClass(CLASS_TYPE_COMMONER);
    
int nAlign GetAlignmentGoodEvil(OBJECT_SELF);

    
// If we're a good/neutral commoner,
    // adjust the killer's alignment evil
    
if(nClass && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL))
    {
        
object oKiller GetLastKiller();
        
AdjustAlignment(oKillerALIGNMENT_EVIL5);
    }

    
// Call to allies to let them know we're dead
    
SpeakString("NW_I_AM_DEAD"TALKVOLUME_SILENT_TALK);

    
//Shout Attack my target, only works with the On Spawn In setup
    
SpeakString("NW_ATTACK_MY_TARGET"TALKVOLUME_SILENT_TALK);

    
// NOTE: the OnDeath user-defined event does not
    // trigger reliably and should probably be removed
    
if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
    {
         
SignalEvent(OBJECT_SELFEventUserDefined(1007));
    }

    
//Voici la fonction:
    
LeaveCorpse();

Bien entendu, tu peux configurer le tout dans l'include (les paramètres expliqués en début d'include se configurent plus bas, là où se trouve la fonction LeaveCorpse)
N'oublie pas de recompiler le script OnDeath si tu modifies l'include !!

Concernant l'objet, tu dois créer dans la palette un objet invisible avec le ResRef: "invis_corpse_obj" et mettre dans le OnDisturbed le script OnDist et dans le OnUsed, le script OnUsed.


PS: Je n'ai pas la même version que toi, pas moyen de mettre la main sur celle que j'ai
Lien direct vers le message - Vieux
Avatar de xelone
xelone
Roi
 
Avatar de xelone
 
alors, ca marche nickel, merci !

y a juste un petit truc, si je peux me permettre : c'est quelle ligne que l'on doit "changer" pour que le monstre ne drop PAS son arme ? car c'est vrai c'est tres rp mais les pj vont se faire des tunes monstres si tout les monstres lache leur arme ???

c'est une de ces 2 lignes-ci ?
Code PHP:
int nDropWeapons =  TRUE    This will use the TAG to guess the ResRef for //
//                              dropping the weapons on the ground - which is //
//                              accomplished by creating new ones on the      //
//                              ground and destroying the ones in the NPC's   //
//                              inventory.                                    //
//                                                                            //
//  int nMoveWeapons = FALSE    Setting this TRUE will just move the weapons  //
//                              to the Lootable Object just as the rest of    //
//                              inventory is handled. 
edit : ok autant pour moi, c trouvé
Lien direct vers le message - Vieux
Avatar de Templier
Templier
Roi
 
Avatar de Templier
 
Bonjour à tous, voilà j'ai vu ce post sur les éboueurs qui est plutôt intéressant, mais qui n'ai pas nouveau. cela fait déjà plusieurs fois que nous avons le même genre de discussion, et plus d'un Thread parle de ce sujet.

En l'occurrence, je me demande pourquoi vous n'employez tout simplement pas le script suivant, qui est en fait une créature éboueur qui agit de manière RP et qui s'occupera de récupérer les objets qui traine.

je vous mets le liens qui vous permettra de pouvoir récupérer cette créature et le script:



Aller voir le Post de RAT
Lien direct vers le message - Vieux
Avatar de xelone
xelone
Roi
 
Avatar de xelone
 
personnellement, je trouve que le script de RAT est tres bon et Rp. seulement, au milieu d'un champs de bataiile, le petit bonhomme qui se promene et ramasse les crasse pendant que les gros monstres se frappent dessus, je trouve que ca le fait pas. C'est un script a utiliser pour les maps de ville.

enfin, c'est mon avis perso
Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
Oui tu as tout à fait raison d'ou le nom d'éboueur .

Ce script marche pour tout mais d'un point de vue rp, ne sert que pour les villes et certains lieux.

Maintenant, les anciens scripteurs comme Azra, jaha, Gadjio, em, tynril, moi et bien d'autres... On avait déjà scripté un script pour vider les objets dans les zones donc vous devriez voir directement dans les archives cela serait plus pratique pour vous

Enfin ce n'est que mon avis bien sûr
Lien direct vers le message - Vieux
Répondre

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +2. Il est actuellement 01h14.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite