[SCRIPTS] Objets et OnActivatedItem

Répondre
Partager Rechercher
Je vous invite à mettre sur ce sujet des scripts d'objets personnalisés que vous aimeriez partager avec la communauté. Les scripts qui ont leur place ici sont ceux relatif à des objets custom, activés avec un pouvoir unique, sur soi uniquement ou non et dont le script se place dans le OnActivatedItem du module.

S'il vous plaît, ne postez qu'un objet par message, repostez un nouveau sujet pour chaque nouvel objet, mettez le nom que vous avez donné à cet objet en titre de votre réponse, et organisez votre message comme suit:

Citation :
- Cet Objet vient-il des manuels D&D ?
Si oui, mettez si possible ses caractéristiques dans D&D. S'il diffère un peu, dîtes en quoi.
- Qu'est ce qu'est censé faire cet objet ?
- Y a-t-il des choses précises à faire ?
- Le Script
S'il vous plaît, ne polluez pas ce sujet avec des question relatives à la modification d'un script ou avec des scripts en cours d'élaboration et pour lesquels vous avez besoin d'aide. Dans le cas où vous souhaiteriez modifier un script, postez un nouveau sujet (avec un titre explicite !)

RAPPEL sur l'utilisation du OnActivatedItem:

- Lorsqu'un objet custom (c'est à dire utilisant un pouvoir unique) est utilisé, il lance le OnActivatedItem du module. A ce moment là, pour déterminer quel item a été activé, le jeu compare le TAG de l'objets aux différentes possibilités qu'on lui donne ici, puis lance le script correspondant.

- Il faut placer les fonctions void custom utilisées dans certains script avant la fonction main.

- Vous aurez le début de votre OnActivatedItem, dans le genre de ceci:

Code PHP:

//Les différentes fonctions custom dans le genre:
void FonctionCustomA(object oPC)
{
SendMessageToPC(oPC"Ceci est une fonction custom");
}

void FonctionCustomB(object oPC);
{
SendMessageToPC(oPC"Ceci est une autre fonction custom");
}

//puis, le void main avec les différents tests sur les TAG pour savoir quel item est activé
void main()
{
//Quel objet vient d'etre active ?
object oItem ;
oItem GetItemActivated();
string sTag GetTag(oItem);
//suivit par les tests sur les TAG
if(sTag "TAG_D'UN_OBJET_CUSTOM")
{
...
}

Les baies merveilleuses
Je commence avec mes baies merveilleuses.

Cet Objet vient-il des manuels D&D ?
Il y a peut être des baies merveilleuses dans D&D mais il ne me semble pas qu'elles aient ces effets.

Qu'est ce qu'est censé faire cet objet ?
Cet objet s'utilise sur soit uniquement. Ce script choisit aléatoirement 2 caractéristiques (il se peut que ce soit 2 fois la même) et leur applique aléatoirement entre 1 et 5 points en plus pendant 20 minutes ou jusqu'au prochain repos.

Y a-t-il des choses précises à faire ?
Comme d'habitude, il faut paramétrer les caractéristiques de l'objet. Dans la liste des sorts, il faut choisir "pouvoir unique", ici, il faut prendre "pouvoir unique sur soit uniquement". Le TAG de l'objet ici est BE_BAIES_MERVEIL.

Le Script
Code PHP:

void main()
{
//Quel objet vient d'etre active ?
object oItem ;
oItem GetItemActivated();
string sTag GetTag(oItem);

//des if sur les TAG d'items qui peuvent etre actives
if (sTag == "BE_BAIES_MERVEIL")
    {
    
//Qui a active cet objet ?
    
object oPC GetItemActivator();
    
int n ;
    
Random(5);
    
int m ;
    
Random(5);
    
int x ;
    
//Modifiez ici la valeur maximale (celle entre parenthèses) du 1er buff 
    
Random (5) + 1;
    
int y ;
    
//Modifiez ici la valeur maximale (celle entre parenthèses) du 2eme buff 
    
Random(5) + 1;
    
//Temps que dure l'effet, ici 20 minutes
    
int iDuration 1200;
    
FloatingTextStringOnCreature("miam"oPC);
    switch(
n)
        {
        case 
0:
        
ApplyEffectToObject(iDurationEffectAbilityIncrease(ABILITY_CHARISMAx), oPC);
        
SendMessageToPC(oPC"Votre charisme vient d'augmenter de"+IntToString(x)+ " points");
        break;

        case 
1:
        
ApplyEffectToObject(iDurationEffectAbilityIncrease(ABILITY_CONSTITUTIONx), oPC);
        
SendMessageToPC(oPC"Votre constitution vient d'augmenter de"+IntToString(x)+ " points");
        break;

        case 
2:
        
ApplyEffectToObject(iDurationEffectAbilityIncrease(ABILITY_DEXTERITYx), oPC);
        
SendMessageToPC(oPC"Votre dexterite vient d'augmenter de"+IntToString(x)+ " points");
        break;

        case 
3:
        
ApplyEffectToObject(iDurationEffectAbilityIncrease(ABILITY_INTELLIGENCEx), oPC);
        
SendMessageToPC(oPC"Votre intelligence vient d'augmenter de"+IntToString(x)+ " points");
        break;

        case 
4:
        
ApplyEffectToObject(iDurationEffectAbilityIncrease(ABILITY_STRENGTHx), oPC);
        
SendMessageToPC(oPC"Votre force vient d'augmenter de"+IntToString(x)+ " points");
        break;

        case 
5:
        
ApplyEffectToObject(iDurationEffectAbilityIncrease(ABILITY_WISDOMx), oPC);
        
SendMessageToPC(oPC"Votre sagesse vient d'augmenter de"+IntToString(x)+ " points");
        break;
         }
    switch(
m)
        {
        case 
0:
        
ApplyEffectToObject(iDurationEffectAbilityIncrease(ABILITY_CHARISMAy), oPC);
        
SendMessageToPC(oPC"Votre charisme vient d'augmenter de"+IntToString(y)+ " points");
        break;

        case 
1:
        
ApplyEffectToObject(iDurationEffectAbilityIncrease(ABILITY_CONSTITUTIONy), oPC);
        
SendMessageToPC(oPC"Votre constitution vient d'augmenter de"+IntToString(y)+ " points");
        break;

        case 
2:
        
ApplyEffectToObject(iDurationEffectAbilityIncrease(ABILITY_DEXTERITYy), oPC);
        
SendMessageToPC(oPC"Votre dexterite vient d'augmenter de"+IntToString(y)+ " points");
        break;

        case 
3:
        
ApplyEffectToObject(iDurationEffectAbilityIncrease(ABILITY_INTELLIGENCEy), oPC);
        
SendMessageToPC(oPC"Votre intelligence vient d'augmenter de"+IntToString(y)+ " points");
        break;

        case 
4:
        
ApplyEffectToObject(iDurationEffectAbilityIncrease(ABILITY_STRENGTHy), oPC);
        
SendMessageToPC(oPC"Votre force vient d'augmenter de"+IntToString(y)+ " points");
        break;

        case 
5:
        
ApplyEffectToObject(iDurationEffectAbilityIncrease(ABILITY_WISDOMy), oPC);
        
SendMessageToPC(oPC"Votre sagesse vient d'augmenter de"+IntToString(y)+" points");
        break;
        }
    }

La chopine du juste
Je poursuis avec la chopine du juste.

Cet objet vient-il des manuels D&D ?
Non

Qu'est-ce qu'est censé faire cet objet ?
Il s'agit d'un objet curatif. Il contient un alcool (le perso pour lequel il a été fait est un poivrot notoire ^^) béni qui soigne la totalité des points de vie perdue par la cible ainsi que la grande majorité des effets négatifs qui pourraient lui être appliqués. Cependant, il s'agit d'un alcool, la cible subit donc un malus de 2 points d'intelligence et de 2 points de dextérité durant 1 minute.
Cet objet s'utilise sur soit ou quelqu'un d'autre.

Y a-t-il des choses à faire ?
Choisir "pouvoir unique".
Mettre cette fonction custom au dessus du void main du OnActivatedItem (c'est dans cette fonction que l'on gère tous les effets que le breuvage de la chopine enlève):
Code PHP:

//Fonction utilisee dans le script de la chopine
void FonctionDeSoin(object oPC)
    {
    
effect eEffet GetFirstEffect(oPC);
    
//Les effets negatifs que l'on souhaite retirer
    
while(GetIsEffectValid(eEffet))
        {
        if (
GetEffectType(eEffet) == EFFECT_TYPE_ABILITY_DECREASE ||
            
GetEffectType(eEffet) == EFFECT_TYPE_AC_DECREASE ||
            
GetEffectType(eEffet) == EFFECT_TYPE_ATTACK_DECREASE ||
            
GetEffectType(eEffet) == EFFECT_TYPE_BLINDNESS ||
            
GetEffectType(eEffet) == EFFECT_TYPE_CURSE ||
            
GetEffectType(eEffet) == EFFECT_TYPE_DAMAGE_DECREASE ||
            
GetEffectType(eEffet) == EFFECT_TYPE_DEAF ||
            
GetEffectType(eEffet) == EFFECT_TYPE_DISEASE ||
            
GetEffectType(eEffet) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
            
GetEffectType(eEffet) == EFFECT_TYPE_NEGATIVELEVEL||
            
GetEffectType(eEffet) == EFFECT_TYPE_PARALYZE ||
            
GetEffectType(eEffet) == EFFECT_TYPE_POISON ||
            
GetEffectType(eEffet) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
            
GetEffectType(eEffet) == EFFECT_TYPE_SKILL_DECREASE ||
            
GetEffectType(eEffet) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE)
            {
            
//On retire les effets trouvés.
            
RemoveEffect(oPCeEffet);
            }
     
eEffet GetNextEffect(oPC);
        }
    } 
Script:
Le script à insérer dans le void main() qui se déclenche quand cet objet est activé:

Code PHP:

if(sTag == "BE_CHOPINE_MURLF")
    {
    
//temps en seconde durant lequel la cible est debuffee en intelligence et en dexterite
    
int iDuration 60;
    
int x;
    
int y;
    
int z;
    
object oPC GetItemActivatedTarget();
    
//Combien de points de vie faut-il soigner ?
    
GetMaxHitPoints(oPC);
    
GetCurrentHitPoints(oPC);
    
;
    
// un p'tit effet visuel pour la route
    
effect eVisual EffectVisualEffect(VFX_IMP_RESTORATION_GREATER);
    
ApplyEffectToObject(DURATION_TYPE_INSTANTeVisualoPC);
    
//on soigne et on retire les effets negatifs
    
effect eHeal EffectHeal(x);
    
ApplyEffectToObject(DURATION_TYPE_INSTANTeHealoPC);
    
ActionDoCommand(FonctionDeSoin(oPC));
    
//la chopine contient un alcool curatif, l'alcool c'est mal
    
ApplyEffectToObject(iDurationEffectAbilityDecrease(ABILITY_INTELLIGENCE2), oPC);
    
ApplyEffectToObject(iDurationEffectAbilityDecrease(ABILITY_DEXTERITY2), oPC);
    } 
Le Don du Martyr
Cet objet vient-il des manuels D&D ?
Non

Qu'est-ce qu'est censé faire cet objet ?
Cet objet transfert la moitié de la vie de celui qui s'en sert vers sa cible.

Y a-t-il des choses à faire ?
rien de plus que d'habitude.

Script :
Code PHP:

if(sTag == "BE_AMU_MARTYR")
    {
    
object oPC GetItemActivatedTarget();
    
object oHealer GetItemActivator();
    
int x;
    
int z;
    
GetCurrentHitPoints(oHealer);
    
//Le soigneur sacrifie la moitie de ses points de vie actuels pour les transferer a sa cible
    
= (z/2) ;
    if ( 
1)
    {
    
//Le soigneur sacrifie ses points de vie (x points)
    
effect eVisualDamage EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
    
ApplyEffectToObject(DURATION_TYPE_INSTANTeVisualDamageoHealer);
    
effect eDamage EffectDamage(x);
    
ApplyEffectToObject(DURATION_TYPE_INSTANTeDamageoHealer);
    
//La cible du sort est soigne de x points de vie
    
effect eVisual EffectVisualEffect(VFX_IMP_RESTORATION_GREATER);
    
ApplyEffectToObject(DURATION_TYPE_INSTANTeVisualoPC);
    
effect eHeal EffectHeal(x);
    
ApplyEffectToObject(DURATION_TYPE_INSTANTeHealoPC);
    }
    else
        {
        
SendMessageToPC(oHealer"Vous n'avez pas assez de points de vie a transferer");
        }
    } 
Anneau de maximisation de puissance



Cet Objet vient-il des manuels D&D?
Nan! c'est mon mien à moi!

Qu'est censé faire cet objet?
Cet objet booste temporairement les stats de son utilisateur tout en ajoutant un effet enflammé sur ce dernier, je conseille de mettre ce script en cache au cas ou

Y'a-t'il des choses à faire?

ouaich:

je bosse avec des executescript dans mon OnactivateItem, c'est plus propre à mon gout donc il faut ajouter ceci dans le script du onactivateItem
(tag de l'objet: amaxpu nom du script exécuté: flamik, je sais les noms sont cons!)
Code PHP:

    if (sItemTag == "amaxpu")
    {
        
ExecuteScript("flamik"oUser);
        return;
    } 







Et voici donc flamik:

Code PHP:

void BurningObject(object oPCfloat fDuration 0.0f)  {
      
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_IMP_FLAME_M),oPC,1.0f);
      if(
fDuration 0.0f) {
          
DelayCommand(0.5f,BurningObject(oPC,fDuration-0.5f));
      }
  }

void main() {
    
object oPC GetItemActivator();

    
effect eEffect1 EffectAbilityIncrease(ABILITY_CONSTITUTION,3);
    
effect eEffect2 EffectAbilityIncrease(ABILITY_STRENGTH,3);
    
effect eEffect3 EffectAbilityIncrease(ABILITY_DEXTERITY,3);
    
effect eEffect4 EffectMovementSpeedIncrease(190);
    
int nDurationType DURATION_TYPE_TEMPORARY;
    
float fDuration 60.0f//La durée que tu souhaites pour tes effets



    
DelayCommand(0.5,AssignCommand(oPCActionSpeakString("PUISSANCE MAXIMALE, YAHAAAAAAA!!"TALKVOLUME_TALK)));
    
DelayCommand(1.0,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_LIGHTNING_M),oPC));
    
DelayCommand(2.2,BurningObject(oPC,60.0f));
    
DelayCommand(2.2,ApplyEffectToObject(nDurationType,EffectVisualEffect(VFX_DUR_LIGHT_RED_10),oPCfDuration));
    
DelayCommand(2.2,ApplyEffectToObject (nDurationTypeeEffect1oPC,fDuration));
    
DelayCommand(2.2,ApplyEffectToObject (nDurationTypeeEffect2oPC,fDuration));
    
DelayCommand(2.2,ApplyEffectToObject (nDurationTypeeEffect3oPC,fDuration));
    
DelayCommand(2.2,ApplyEffectToObject (nDurationTypeeEffect4oPC,fDuration));

Lotus Noir

Effet: c'est d'la drogue! bande de tox! selon la fréquence de consommation il est possible de faire une overdose, ou de simplement planer, les valeurs du perso changent, ainsi que son alignement et si on en prend une fois et qu'on a arrété pendant longtemps les risque sont moindre que si on se shootait un max avec!


on fait quoi?

comme pour mon script précédent je passe pas un executescript() donc dans le script se trouvant dans le OnactivateItem on ajoute ça:

Code PHP:

if(sItemTag=="blacklotus")
{
ExecuteScript("blacklotus",oUser);
return;

le nom de l'item ajouté s'appelle blacklotus tout comme le script ci-dessous:


Code PHP:

void main()
{

object oUser GetItemActivator();
int DoAlignmentAdjustment TRUE;
int iBLUse GetLocalInt(oUser,"BL_USE");
int iBLUseR GetLocalInt(oUser,"BL_USER");
int iCh d2(1)+iBLUse;
int iCh2 d4(1);
int iCh3 d10(1);
int iCh4 d2(1);
int iDie d100(1);
int iHP GetCurrentHitPoints(oUser);
int iCon GetAbilityScore(oUser,ABILITY_CONSTITUTION);
int iInt GetAbilityScore(oUser,ABILITY_INTELLIGENCE);
int iUp d6(1)*30;
int iDown = (d6(1)+iBLUse)*30;
effect eUp1 EffectAbilityIncrease(ABILITY_STRENGTH,d4(1)-iBLUse);
effect eUp2 EffectAbilityIncrease(ABILITY_DEXTERITY,d4(1)-iBLUse);
effect eUp3 EffectHaste();
effect eBad1 EffectBlindness();
effect eBad2 EffectAbilityDecrease(ABILITY_STRENGTH,d4(1)+iBLUse);
effect eBad3 EffectAbilityDecrease(ABILITY_CONSTITUTION,d4(1)+iBLUse);
effect eBad4 EffectAbilityDecrease(ABILITY_DEXTERITY,d4(1)+iBLUse);
effect eBad5 EffectConfused();
effect eBad6 EffectStunned();
effect eBad7 EffectSlow();
effect eBad9 EffectAbilityDecrease(ABILITY_INTELLIGENCE,d4(1)+iBLUse);



SetLocalInt(oUser,"BL_USE",(iBLUse 1));
SetLocalInt(oUser,"BL_USER",(iBLUseR 1));
if(
iCh > ((iCon 3) + d2(1)))
{
int iHP GetCurrentHitPoints(oUser);
effect eBad8 EffectDamage(iHP+iHP,DAMAGE_TYPE_MAGICAL,DAMAGE_POWER_NORMAL);
DelayCommand(20.0,ApplyEffectToObject(DURATION_TYPE_INSTANT,eBad8,oUser));
DelayCommand(20.0,SendMessageToPC(oUser,"Vous avez abusé du lotus noir... vous êtes en train de mourir."));
return;}
if(
iCh > ((iCon 3)))
{
DelayCommand(20.0,SendMessageToPC(oUser,"Votre coeur commence a battre la chamade c'est comme si il allait sortir de votre poitrine"));}
if(
iCh > ((iCon 3) - d2(1)))
{
DelayCommand(20.0,SendMessageToPC(oUser,"Vos paumes deviennent moites votre tête semble parcourue d'électricité"));}

if(
iDie == 1)
{
int iHP GetCurrentHitPoints(oUser);
effect eBad8 EffectDamage(iHP+iHP,DAMAGE_TYPE_MAGICAL,DAMAGE_POWER_NORMAL);
DelayCommand(20.0,ApplyEffectToObject(DURATION_TYPE_INSTANT,eBad8,oUser));
DelayCommand(20.0,SendMessageToPC(oUser,"Vous avez abusé du lotus noir... vous êtes en train de mourir."));
return;}

DelayCommand(20.0,AssignCommand(oUserPlayVoiceChat(VOICE_CHAT_LAUGH,oUser)));
if(
iCh2 == 1)
{
DelayCommand(20.0,AssignCommand(oUser,ActionSpeakString("Wow! quel trip!",TALKVOLUME_TALK)));}
if(
iCh2 == 2)
{
DelayCommand(20.0,AssignCommand(oUser,ActionSpeakString("Ooooh... Les jolies couleurs!",TALKVOLUME_TALK)));}
if(
iCh2 == 3)
{
DelayCommand(20.0,AssignCommand(oUser,ActionSpeakString("DES INSECTES PARTOUT IL GROUILLENT SUR MOI AAAAAAAAAAAAH!",TALKVOLUME_TALK)));}
if(
iCh2 == 4)
{
DelayCommand(20.0,AssignCommand(oUser,ActionSpeakString("Qu'est-ce que c'était?? Vous avez vu?",TALKVOLUME_TALK)));}

if(
iCh3 == 7)
{
DelayCommand(20.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eBad1,oUser,iCh2*10.0));}
if(
iCh3 >= 9)
{
DelayCommand(20.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eBad5,oUser,iCh2*10.0));}
if(
iCh3 == 8)
{
DelayCommand(20.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eBad6,oUser,iCh2*10.0));}
if(
iCh4 == 1)
{
DelayCommand(20.0,AssignCommand(oUserActionPlayAnimationANIMATION_LOOPING_PAUSE_DRUNK1.010.0)));}
if(
iCh4 == 2)
{
DelayCommand(20.0,AssignCommand(oUserActionPlayAnimationANIMATION_LOOPING_DEAD_FRONT1.010.0)));}
DelayCommand(20.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eUp1,oUser,iUp*1.0));
DelayCommand(20.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eUp2,oUser,iUp*1.0));
DelayCommand(20.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eUp3,oUser,iCh3*10.0));

DelayCommand(20.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eBad9,oUser,(iUp+iDown*1.0)));
if(
iBLUse 2)
{
DelayCommand(iUp+20*1.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eBad4,oUser,iDown*1.0));
DelayCommand(iUp+20*1.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eBad2,oUser,iDown*1.0));
DelayCommand(iUp+20*1.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eBad3,oUser,iDown*1.0));
}
if(
DoAlignmentAdjustment)
{
int nShift = (GetLawChaosValue(oUser)-21)/5;
if(
nShift 0)
{
DelayCommand(20.0,AdjustAlignment(oUser,ALIGNMENT_CHAOTIC,nShift));
}
}

DelayCommand((iUp+iDown*2.0),SetLocalInt(oUser,"BL_USE",(iBLUse 1)));
DelayCommand(((20+iUp+iDown)*1.0),SetLocalInt(oUser,"BL_USER",(iBLUseR 1)));


(et non je ne fais pas QUE flooder )
Répondre

Connectés sur ce fil

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