Créer des nouveaux domaines pour les prêtres ?

Répondre
Partager Rechercher
Heu... En fait EM, rien n'indique de manière sûre que c'est précisément la constante "METAMAGIC_EMPOWER" qui est utilisée pour booster, même si au final les sorts de soins d'un prêtre ayant le domaine de guérison ont un effet équivalent.

Ce que cherche à faire Coursier (enfin je pense), c'est d'annuler effectivement ce phénomène de simili "extension d'effet" pour les sorts de soins d'un prêtre ayant le domaine de guérison, puis de faire en sorte que les sorts de soins de ce même prêtre soient considérés comme étant lancés comme un niveau plus haut que le niveau du prêtre (qui est le véritable effet du domaine de guérison à D&D3 sur papier ), avec seulement les niveaux de la classe prêtre de comptabilisés si on a affaire à un multiclassé.
Merci eMRaistlin.

Oui c'est cela Solaufein.

eMRaistlin, sais tu comment il arrive à faire la correspondance avec **** pour le spellid ?

Créer un nouveau script ou utiliser un script et le modifier.

Je ne crois pas qu'il y ai un don permettant en sorte que les sorts de soins ou d'une catégorie particulière de ce même prêtre soient considérés comme étant lancés comme un niveau plus haut que le niveau du prêtre.
Citation :
Heu... En fait EM, rien n'indique de manière sûre que c'est précisément la constante "METAMAGIC_EMPOWER" qui est utilisée pour booster, même si au final les sorts de soins d'un prêtre ayant le domaine de guérison ont un effet équivalent.
Euh... en fait, c'est l'autre partie du Or que je soulignai :

if (nMetaMagic == METAMAGIC_EMPOWER || GetHasFeat(FEAT_HEALING_DOMAIN_POWER))


^^
PS : eMRaistlin, et apparamment il fait la correspondance avec le sorts disponibles par rapport au domaine.
Par exemple, Soins importants, il applique l'effet :
nToHeal = nToHeal + (nToHeal/2);
comme il fait parti du GetHasFeat (FEAT_HEALING_DOMAIN_POWER).
Bon, pour recentrer le debat :

C'est assez simple pour corriger ton Domaine power :

au debut de chaque script nw_s0_cur***, tu rajoute ca :
Code PHP:

if (GetHasFeat(FEAT_HEALING_DOMAIN_POWER))
   {
    
int nNb GetSpellId();
    if (
nNb+== 36){nNb=31;}
    if (
GetLocalInt(OBJECT_SELF,"cast")==TRUE)
        {
        
DeleteLocalInt(OBJECT_SELF,"cast");
        return;
        }
    
SetLocalInt(OBJECT_SELF,"cast",TRUE);
    
AssignCommand(oPC,ActionCastSpellAtObject(nNboTarget,nMetaMagic ,TRUE));
    return;
   } 

Apres, pour les autres domains, il faudrait une demande pour quon voit si c'est possible...
Pour les scripts modifiés au dessus, je peux les mettre dans le hak pour ne pas écraser les originaux ? Cela fonctionnera.

Bon, pour le dialog.tlk, ça fonctionne. J'ai testé ça marche.
tu peux meme les mettres dans le module : ca n'ecrase jamais les originaux (ca ecrase juste leur utilisation sur ton module, mais si tu cree un nouveau module, il aura des scripts tout neufs non modifiés ^^)
Quand je modifie les originaux, je les enregistre sous le même non, il n'y a pas de problème ?

Pour le domaine de la mort, à la place de l'avatar négatif comme pouvoir accordé, je veux mettre en place :
Toucher mortel : Vous pouvez utiliser toucher mortel une fois par jour. Votre toucher mortel est une habilté de sort qui est un effet de mort. Vous devez réussir une attaque de toucher au contact contre une créature vivante (en utilisant les règles pour les sorts au toucher). Quand vous touchez, jetez 1d6 par votre niveau de clerc. Si le total est au moins égal au points de vie actuel de la créature, elle meurt.

Pour le sort niveau 2, Death knell (mettre la mort à genoux, quelqu'un a la traduction française du nom du sort ?) :

Death knell
Nécromancie (Mort, Mal)
Niveau : Clerc 2, Mort 2
Composantes : V, S
Temps d'incantation : 1 action
Portée : Toucher
Cible : Créature vivante touchée
Durée : Instantanée / 10 mn par DV de la cible (voir texte)
Jet de sauvegarde : Volonté annule
Résistance à la magie : oui

Vous tirez la force de vie d'une créature gravement blesséet l'utiliser pour remplir votre propre puissance. En lançant ce sort, vous toucher une créature vivante avec - 1 pv ou moins. Si le sujet échoue à son jet de sauvegarde, il meurt, et vous gagnez 1d8 pv temporaire et + 2 en Force. En plus, votre niveau efefctif de jeteur de sort est augmenté de + 1, pour les effets de sorts dépendant de votre niveau de jeteur. Cet effet dure 10 mn par DV de la créature cible.

(Idée : sort aide, dégâts amenant à - 10, + 2 en force (force de taureau modifié))
Oui : quand tu sauvegarde un sort sous le nom d'origine, tu n'en crée qu'une copie pour le module : le "template" n'est pas modifié, et si tu recrée un autre module, le sort par defaut sera celui de bioware. Ca t'evite de modifier le spell.2da pour y changer les noms des scripts lancés par les sorts.


Pour le death kneel, je suis plutot un adapateur qu'un traducteur, donc j'irait dans le sens "Achevement" ou "dernier Baiser" ou un truc du genre, plus poetique que "Genou de la mort" (ou bien en mettant "un Genou a terre").

Le script etant assez simple :

Code PHP:

#include "nw_i0_spells"

void main()
{
object oTarget GetSpellTargetObject();
int nNbHD GetHitDice(oTarget);

if (
GetCurrentHitPoints(oTarget)>0)
    {
    
//Ici, j'invite qui voudra a trouver un VFX pour quand ca rate et a l'appliquer
    
return;
    }

if(!
MyResistSpell(OBJECT_SELFoTarget))
    {
        
//Make a Will save
        
if (!MySavingThrow(SAVING_THROW_WILL,  oTargetGetSpellSaveDC(), SAVING_THROW_TYPE_DEATH))
        {
     
ApplyEffectToObject(0,EffectDeath(),oTarget);
    
ApplyEffectToObject(1,EffectTemporaryHitPoints(d8()),OBJECT_SELF,HoursToSecond(nNbHD)/6.0);
        
ApplyEffectToObject(1,EffectAbilityIncrease(ABILITY_STRENGTH,2),OBJECT_SELF,HoursToSecond(nNbHD)/6.0);
        }
    }

Pour l'effet sur le bonus de Caster_level, j'ai bien peur qu'il te faille employer un LocalInt, et que tu modifie tous les scripts des sorts en fonction... :/

Pour le toucher mortel, tu veux le mettre a la place de quoi ??
(avatar negatif, c'est quoi ?)
C'est l'avatar du plan négatif c est le pouvoir accordé pour le domaine de mort, ça conjure une ombre qui est plus puissant suivant ton niveau.
Moi, je veux mettre toucher mortel comme sur la version papier.

J'ai fait un copier-coller :

Code PHP:

//::///////////////////////////////////////////////
//:: Cure Light Wounds
//:: NW_S0_CurLgtW
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
// When laying your hand upon a living creature,
// you channel positive energy that cures 1d8 points
// of damage plus 1 point per caster level (up to +5).
// Since undead are powered by negative energy, this
// spell inflicts damage on them instead of curing
// their wounds. An undead creature can attempt a
// Will save to take half damage.
*/
//:://////////////////////////////////////////////
//:: Created By: Brennon Holmes
//:: Created On: Oct 12, 2000
//:://////////////////////////////////////////////
//:: Update Pass By: Preston W, On: July 26, 2001

#include "NW_I0_SPELLS"
void main()
{
    if (
GetHasFeat(FEAT_HEALING_DOMAIN_POWER))
   {
    
int nNb GetSpellId();
    if (
nNb+== 36){nNb=31;}
    if (
GetLocalInt(OBJECT_SELF,"cast")==TRUE)
        {
        
DeleteLocalInt(OBJECT_SELF,"cast");
        return;
        }
    
SetLocalInt(OBJECT_SELF,"cast",TRUE);
    
AssignCommand(oPC,ActionCastSpellAtObject(nNboTarget,nMetaMagic ,TRUE));
    return;
   }
    
spellsCure(d8(), 58VFX_IMP_SUNSTRIKEVFX_IMP_HEALING_SGetSpellId());

Quand je l'ai sauvegardé, ça l'a écrasé.
Et il y a une erreur :
03/09/03 16:09:31 : Erreur. 'nw_s0_curlgtw' n'est pas compilé.
nw_s0_curlgtw.nss(34): ERREUR : VARIABLE DEFINED WITHOUT TYPE

*******************
Pour le death knell, il affiche une erreur aussi :
03/09/03 16:14:48 : Erreur. 'nw_s0_dthknl' n’est pas compilé.
nw_s0_dthknl.nss(20): ERREUR : UNDEFINED IDENTIFIER (EffectTemporaryHitPoints)
oui, ca vient que tu as ecrasé le script du sort de soin, au lieu d'inserer les lignes comme je te le conseillait : du coup, oTarget et nMetaMagic ne sont ni declarés, ni renseignés.

je te propose :

Code PHP:

//::///////////////////////////////////////////////
//:: Cure Light Wounds
//:: NW_S0_CurLgtW
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
// When laying your hand upon a living creature,
// you channel positive energy that cures 1d8 points
// of damage plus 1 point per caster level (up to +5).
// Since undead are powered by negative energy, this
// spell inflicts damage on them instead of curing
// their wounds. An undead creature can attempt a
// Will save to take half damage.
*/
//:://////////////////////////////////////////////
//:: Created By: Brennon Holmes
//:: Created On: Oct 12, 2000
//:://////////////////////////////////////////////
//:: Update Pass By: Preston W, On: July 26, 2001

#include "NW_I0_SPELLS"    
void main()
{
    
//Declare major variables
    
object oTarget GetSpellTargetObject();
    
effect eDam;
    
effect eHeal;
    
effect eVis EffectVisualEffect(VFX_IMP_HEALING_S);
    
effect eVis2 EffectVisualEffect(VFX_IMP_SUNSTRIKE);
    
int nCasterLvl GetCasterLevel(OBJECT_SELF);
    
int nToHeal;
    
int nMetaMagic GetMetaMagicFeat();
    
//Limit caster level to 5
    
if (nCasterLvl 5)
    {
        
nCasterLvl 5;
    }
    if(
GetIsPC(oTarget))
    {
        
nToHeal nCasterLvl;
    }
    else
    {
        
nToHeal d8() + nCasterLvl;
    }
    
//Make metamagic checks
    
if (nMetaMagic == METAMAGIC_MAXIMIZE)
    {
        
nToHeal nCasterLvl;
        if(
GetIsPC(OBJECT_SELF))
        {
            
nToHeal nToHeal nCasterLvl;
        }
    }

if (
GetHasFeat(FEAT_HEALING_DOMAIN_POWER))
   {
    
int nNb GetSpellId();
    if (
nNb+== 36){nNb=31;}
    if (
GetLocalInt(OBJECT_SELF,"cast")==TRUE)
        {
        
DeleteLocalInt(OBJECT_SELF,"cast");
        return;
        }
    
SetLocalInt(OBJECT_SELF,"cast",TRUE);
    
AssignCommand(oPC,ActionCastSpellAtObject(nNboTarget,nMetaMagic ,TRUE));
    return;
   }

    if (
nMetaMagic == METAMAGIC_EMPOWER)) // || GetHasFeat(FEAT_HEALING_DOMAIN_POWER)) On n'oublie pas de virer ca
    
{
        
nToHeal nToHeal + (nToHeal/2);
    }

    
//Check to see if the target is undead
    
if (GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
    {
        if(!
GetIsReactionTypeFriendly(oTarget))
        {
            
//Fire cast spell at event for the specified target
            
SignalEvent(oTargetEventSpellCastAt(OBJECT_SELFSPELL_CURE_LIGHT_WOUNDS));
            
//Make melee touch attack
            //Make SR Check
            
if (!MyResistSpell(OBJECT_SELFoTarget))
            {
                
//Make will save for half damage
                
if (/*Will Save*/ MySavingThrow(SAVING_THROW_WILLoTargetGetSpellSaveDC(), SAVING_THROW_TYPE_POSITIVE))
                {
                    
nToHeal /= 2;
                }
                
//Apply VFX impact and damage
                
eDam EffectDamage(nToHeal,DAMAGE_TYPE_POSITIVE);
                
ApplyEffectToObject(DURATION_TYPE_INSTANTeDamoTarget);
                
ApplyEffectToObject(DURATION_TYPE_INSTANTeVis2oTarget);
            }
        }
    }
    else
    {
        
//Fire cast spell at event for the specified target
        
SignalEvent(oTargetEventSpellCastAt(OBJECT_SELFSPELL_CURE_LIGHT_WOUNDSFALSE));
        
//Apply VFX impact and heal effect
        
eHeal EffectHeal(nToHeal);
        
ApplyEffectToObject(DURATION_TYPE_INSTANTeHealoTarget);
        
ApplyEffectToObject(DURATION_TYPE_INSTANTeVisoTarget);
    }

Ps , a noter que mon sort de soin n'utilise pas spellcure qui est une fonction induite qui fait strictement la meme chose, induite par bioware apres. (avec un joli bug que je sais pas s'ils ont corrigé sur les effets maxés d'un sort de soin)


Pour temporaryHitPoints, ca doit etre une faute de frappe : tappe EffectTemp a droite, et regarde ce qu'il te propose... ^^
Pardonne mon ignorance, mais comment fais tu pour insérer les lignes ?
J'ai du copier coller l'ensemble sur un fichier vierge car si je fais cela sur l'original, il ne veut pas l'enregistrer car il est ouvert en édition.
Le pouvoir du domaine de la mort s'appelle Caresse mortelle, le sort de niveau 2, Mise à mort.

Le Bug du sort de soins maximisé a été corrigé avec SoU. Je suis tenté de dire qu'en 1.30 aussi, mais j'ai pas vérifié avant d'installer SoU.
Merci Archamedes_Fr.

Comment insères tu les lignes, eMRaistlin ? si c'est plus simple que de refaire à chaque fois un script entier comme tu l'as fais pour soins des blessures légères ?

Ou N'est il pas possible de créer une liste de sorts auquel l'effet s'applique si le sort fait partie de la liste des sorts du domaine ?
Et bien, coursier, tout simplement, j'edite le script nw_s0_cur*** que je veux modifier, et j'y colle juste la partie que j'avais mis dans le premier post. Puis je sauvegarde le script.(en bypassant le message de Bioware qui previent qu'on risque d'abimer le sort [sans blagueuuuuh !])



Pour ta liste de sort, ca revient au meme, vu que a un moment ou un autre, il faudra editer les sorts de soins (mais oui, creer une fonction dans une library sera plus simple, en effet)
Comment s'y prend on pour une library ?

J'ai rajouté le sort Mise à mort (death knell) dans le spells.2da
J'ai rajouté la ligne 622 et copier la ligne finger of the death, j'ai modifié le n° de Name et mis 79987 correspondant au nom du sort et la description j'ai mis 79988 (j'ai mis le nom et la description avec l'éditeur tlk). Pour le script, j'ai mis NW_S0_dthknl (le nom du script étant nw_s0_dthknl, c'est bon au niveau majuscule / minuscule).

Quand je fais un test, le sort est pris en compte on voit l'icone mais pas le nom et la description ?

Quel est la cause ?
yop,

je me permet de taper l'incruste dans votre conversation ma foi très interressante pour poser 3 questions :

1/ Comment fait-on pour changer les noms des domaines ?
il suffit de les changer sur les 2DA et de mettre tout ça dans override ?

2/ Peut-on réattribuer par domaine les sorts sans rien changer au effets des sorts en touchant uniquement aux 2DA ?

3/ Peut-on restreindre à la création les PJ prêtres à un seul domaine ?

voila ça serait vraiment si on pouvait faire tout ça.
1)Que veux tu changer dans les noms ?
Domains.2da est mis dans le hak.

2) Oui, tu changes les spellsid dans le domains.2da sous level_
spellid sont dans spells2da.

3) ?

Le détail se trouve au dessus.
Citation :
Provient du message de Coursier
Comment s'y prend on pour une library ?

J'ai rajouté le sort Mise à mort (death knell) dans le spells.2da
J'ai rajouté la ligne 622 et copier la ligne finger of the death, j'ai modifié le n° de Name et mis 79987 correspondant au nom du sort et la description j'ai mis 79988 (j'ai mis le nom et la description avec l'éditeur tlk). Pour le script, j'ai mis NW_S0_dthknl (le nom du script étant nw_s0_dthknl, c'est bon au niveau majuscule / minuscule).

Quand je fais un test, le sort est pris en compte on voit l'icone mais pas le nom et la description ?

Quel est la cause ?
A priori, je penche pour une modif du mauvais tlk (genre le dialogF.tlk au lieu du dialog.tlk).
Sinon, de toute facon, c'est helas pas demain la veille que l'on aura les noms en mettant des "" dans les 2da pour tout. Seule solution : notifier les 2da ou ca marche pas a Bioware, et patienter...

Pour creer une library, c'est simple : tu cree une feuille de script vide, puis tu y place tes fonctions, une par une.

Code PHP:

//library 1

/*L'interet de cette ligne de declaration de fonction, c'est que en bas, tu verra le commentaire que tu met au dessus apres, dans tes script qui l'utiliseront.*/
void TestFonction();

void TestFonction()
{
SpeakString("I_WAS_HERE");

ensuite, dans les script ou tu aura besoin de la fonction, tu rajoute en haut
Code PHP:

#include "nom_du_script" 

et hop : la fonction devient accessible ^^
(ca t'evite de te retaper 300 ligne pour une fonction costaude, et en plus, ca centralise la fonction, donc en modifiant la library, tu impacte tout le module d'un coup (gain de temps, minimisation des risques d'oublis)

A noter que les modifs d'une fonction dans une library ne sont prisent en compte que lorsque le script qui l'appelle est recompilé, pas quand on enregistre la library (le mieux etant de faire un build du module en ne faisant que la compil de tous les scripts... [menu avancé du BuildModule])

Citation :
1/ Comment fait-on pour changer les noms des domaines ?
si tu fais ca, tu ne changera que les nom dans le 2da.
Pour que l'effet soit visible ingame, il faut modifier le dialog.tlk a l'endroit ou la reference strref pointe.
[a noter qu'en teorie, oui, modifier le 2da devrait suffire, mais je crois que domain.2da n'accepte pas non plus les "".... a verifier.]

Citation :
2/ Peut-on réattribuer par domaine les sorts sans rien changer au effets des sorts en touchant uniquement aux 2DA ?
Tout a fait : en modifiant domain.2da, tu modifie a loisir les sorts dispo par les pretres en changeant de domaine...

Citation :
3/ Peut-on restreindre à la création les PJ prêtres à un seul domaine ?
Oui, en mettant dans le hakpak client une version differente du 2da serveur : du coup, les domaine qui ne seront pas presents seront inaffichable, donc inselectionable (mais existeront pourtant, puisque c'est géré coté serveur : la, on desactove juste l'affichage...)
Bon, merci pour les réponses mais je sais pas si c'est moi qui ait mal compris ou vous ( enfin pas pour la 2/ là c'est très clair. )

Ce que je souhaite changer c'est :

pour les noms, que le lorsque le gars qui arrive sur le module crée son perso clerc, il ne voie plus les différents noms de domaines de base ( terre feu etc... ) mais par exemple des noms de Dieux ( enfin je vais faire comme ça moa ) du genre :

Morr, Dieu de la Mort et des Rêves et qu'il ne puisse sélectionner QU'UN SEUL domaine contre les 2 proposés normalement. dans les règles du jeu.

donc a priori faut bidouiller domain.2DA, et DIALOG.TLK. ( je fais copier coller je bidouille avec le super sacro-saint bloc note ) et mettre ça sur un hakpak fait sur mesure pour les joueurs et je met ça sur mon site par exemple.

Dernière question ( dsl ) quand je modifie un 2DA et un .tlk, je met le fichier modifié dans override ? ou dans source ? parce que dans source ça va m'écraser le fichier par défaut non ? ( c'est craignos... )

Merci beaucoup
Pour la library, tu feras comme ça, eMRaistlin :
//library 1

/*L'interet de cette ligne de declaration de fonction, c'est que en bas, tu verra le commentaire que tu met au dessus apres, dans tes script qui l'utiliseront.*/
void TestFonction();

if (GetHasFeat(FEAT_HEALING_DOMAIN_POWER))
{
int nNb = GetSpellId();
if (nNb+1 == 36){nNb=31;}
if (GetLocalInt(OBJECT_SELF,"cast")==TRUE)
{
DeleteLocalInt(OBJECT_SELF,"cast");
return;
}
SetLocalInt(OBJECT_SELF,"cast",TRUE);
AssignCommand(oPC,ActionCastSpellAtObject(nNb, oTarget,nMetaMagic ,TRUE));
return;
}
void TestFonction()
{
SpeakString("I_WAS_HERE");
}

Solaufein, je pense appliquer l'effet un niveau de lanceur plus haut à la liste des sorts accordés par le domaine.
Qu'en penses tu ?
L'appliquerais tu à tous les sorts ayant "l'école" Guérison ?
Répondre

Connectés sur ce fil

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