[SCRIPT] Respawn coffre/drops monstres

Répondre
Partager Rechercher
Voilà donc le système de respawn de coffre, et de drops de monstres, fait par Thalion, et un peu modifié par moi (pas trop quand même ).
J'ai testé, ça fonctionne correctement.

----------------------------------------
Respawn de coffres :

Il suffit de mettre ce script dans le OnOpen d'un coffre.
Code PHP:

//:://///////////////////////////////////////////// 
//:: OnOpenCoffre 
//:: Copyright (c) 2001 Bioware Corp. 
//::////////////////////////////////////////////// 
/* 
Ce script permet de faire respawn les items d'un 
coffre avec une probabilite. 
Pour l'utiliser : 
Le coffre doit avoir un tag de la forme "X_ce que vous voulez" 
avec pour X l'intervalle de temps en seconde entre 
2 respawns. Puis il faut placer dedans 
les items qui doivent respawn, avec un tag de la forme 
"n_resref" ou "n" est le pourcentage de chance que l'item 
apparaisse et "resref" le resref de l'item en question. 
*/ 
//::////////////////////////////////////////////// 
//:: Created By: Tahlion, beta et modifs par Mercius 
//:: Created On: 12/05/2003 18:36 
//::////////////////////////////////////////////// 
void main() 

    
int iNbItem GetLocalInt(OBJECT_SELF,"nombre_item"); 

    if(
iNbItem == 0
    { 
        
object oItem GetFirstItemInInventory(OBJECT_SELF); 
        
int i 0
        while(
GetIsObjectValid(oItem))//boucle... 
        

            
i++; 
            
string sTagProba GetTag(oItem); 
            
//on prend la partie droite de l'item, donc le resref 
            
SetLocalString(OBJECT_SELF,"item" IntToString(i), GetStringRight(sTagProbaGetStringLength(sTagProba) - FindSubString(sTagProba,"_"))); 
            
//on prend la partie gauche, donc le pourcentage de chance d'apparition de l'item 
            
SetLocalInt(OBJECT_SELF,"proba" +IntToString(i), StringToInt(GetStringLeft(sTagProbaFindSubString(sTagProba,"_")))); 

            
//on detruit l'item 
            
DestroyObject(oItem); 
            
oItem GetNextItemInInventory(OBJECT_SELF); 
        } 
        
SetLocalInt(OBJECT_SELF,"nombre_item",i); 
        
SetLocalInt(OBJECT_SELF,"okgenere",1);//on peut generer les items maintenant 
        
iNbItem i
    } 

    if(
iNbItem && GetLocalInt(OBJECT_SELF,"okgenere") == 1)//si la boucle ci-dessus a ete faite 
    

        
int i
        for(
1<= iNbItemi++) 
        { 
            
//si l'item n'existe pas deja dans le coffre 
            
if(!GetIsObjectValid(GetItemPossessedBy(OBJECT_SELFGetLocalString(OBJECT_SELF"item" IntToString(i))))) 
            { 
                
//on calcul avec le pourcentage, pour savoir si l'item doit apparaitre ou pas 
                
if(d100() <= GetLocalInt(OBJECT_SELF,"proba" IntToString(i))) 
                { 
                    
//on cree l'item 
                    
CreateItemOnObject(GetLocalString(OBJECT_SELF,"item" IntToString(i))); 
                } 
            } 
        } 
        
SetLocalInt(OBJECT_SELF"okgenere"0); 
        
string sTagSelf GetTag(OBJECT_SELF); 
        
DelayCommand(StringToFloat(GetStringLeft(sTagSelfFindSubString(sTagSelf,"_"))), SetLocalInt(OBJECT_SELF"okgenere"1)); 
    } 


Pour l'utiliser, il suffit de faire comme indiqué en commentaires dans le header.

Précisions : Vous avez un objet dans la palette, dont le tag et le resref sont pareils. Vous le mettez dans l'inventaire du coffre, puis vous l'éditez dans le coffre (clique droit de la souris dessus) et vous rajoutez devant le tag, le pourcentage de chance que l'item soit dans le coffre (de 1 à 100) suivi de "_".
Vous enregistrez et voilà

NB : le temps commence à se décompter la première fois que le coffre s'ouvre, il ne contiendra donc rien dedans lors de la première ouverture du coffre.


-----------------------------------
Drops de monstres :

Script à mettre dans le OnSpawn du monstre.
Code 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.
Code 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)); 
    } 


L'utilisation est expliquée dans le header, en commentaires.
NB : Ici, les objets doivent être édités dans la palette (de la façon resref = "resref" et tag = "n_resref") car aurora ne permet pas d'éditer les items dans l'inventaire du monstre, comme pour les coffres.

Voilà
Répondre

Connectés sur ce fil

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