JeuxOnLineForumsPlusConnectés : 762 (sites) | 1315 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Désactiver Arrêt du Temps RSS
   
Répondre
Partager Outils Rechercher
Avatar de Kray
Kray
Bagnard
 
Avatar de Kray
 
Arrow

Désactiver Arrêt du Temps

Bon, j'ai bidouillé un peu pour que l'on puisse désactiver le sort Arrêt du Temps aux PJs. C'est utile pour les univers permanent ou les modules de fort passage.

Le script gerant Arrêt du Temps est dans NW_S0_TimeStop.nss, et se présente sous cette forme :
Code PHP:
//:://///////////////////////////////////////////// 
//:: Time Stop 
//:: NW_S0_TimeStop.nss 
//:: Copyright (c) 2001 Bioware Corp. 
//::////////////////////////////////////////////// 
/* 
    All persons in the Area are frozen in time 
    except the caster. 
*/ 
//::////////////////////////////////////////////// 
//:: Created By: Preston Watamaniuk 
//:: Created On: Jan 7, 2002 
//::////////////////////////////////////////////// 
 
void main() 

    
//Declare major variables 
    
location lTarget GetSpellTargetLocation(); 
    
effect eVis EffectVisualEffect(VFX_FNF_TIME_STOP); 
    
effect eTime EffectTimeStop(); 
    
int nRoll d4(); 
 
    
//Fire cast spell at event for the specified target 
    
SignalEvent(OBJECT_SELFEventSpellCastAt(OBJECT_SELFSPELL_TIME_STOPFALSE)); 
 
    
//Apply the VFX impact and effects 
    
DelayCommand(0.75ApplyEffectToObject(DURATION_TYPE_TEMPORARYeTimeOBJECT_SELF9.0)); 
    
ApplyEffectAtLocation(DURATION_TYPE_INSTANTeVislTarget); 

On nottera d'ailleurs une faute, le sort ne tient pas compte de la variation de durée du sort qui est pourtant tirée (Variable nRoll).

Voici ma version, interdisant l'utilisation de ce sort (autant par Parchemin que par Magie ou Metamagie) aux PJs et corrigeant la faute de script :
Code PHP:
//::///////////////////////////////////////////////
//:: Time Stop
//:: NW_S0_TimeStop.nss
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    All persons in the Area are frozen in time
    except the caster.
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Jan 7, 2002
//:: Updated By: Kray
//:: Updated On: 15/07/2002
//:://////////////////////////////////////////////

void main()
{
    
object oPC OBJECT_SELF;
    if(
GetIsDM(oPC))
    {
        
//Declare major variables
        
location lTarget GetSpellTargetLocation();
        
effect eVis EffectVisualEffect(VFX_FNF_TIME_STOP);
        
effect eTime EffectTimeStop();
        
int nRoll d4();
        
float fDuration IntToFloat(nRoll) + 9.0f;

        
//Fire cast spell at event for the specified target
        
SignalEvent(OBJECT_SELFEventSpellCastAt(OBJECT_SELFSPELL_TIME_STOPFALSE));

        
//Apply the VFX impact and effects
        
DelayCommand(0.75ApplyEffectToObject(DURATION_TYPE_TEMPORARYeTimeOBJECT_SELFfDuration));
        
ApplyEffectAtLocation(DURATION_TYPE_INSTANTeVislTarget);
    }
    else
    {
        
SendMessageToPC(oPC,"Arret du Temps est désactivé sur ce module");
    }

J'espère que ça pourra servir

Edité:
Tant que j'y suis, voici le script laissant le sort public mais corrigeant la faute de BioWare :
Code PHP:
//:://///////////////////////////////////////////// 
//:: Time Stop 
//:: NW_S0_TimeStop.nss 
//:: Copyright (c) 2001 Bioware Corp. 
//::////////////////////////////////////////////// 
/* 
    All persons in the Area are frozen in time 
    except the caster. 
*/ 
//::////////////////////////////////////////////// 
//:: Created By: Preston Watamaniuk 
//:: Created On: Jan 7, 2002 
//:: Updated By: Kray
//:: Updated On: 14/07/2002
//::////////////////////////////////////////////// 
 
void main() 

    
//Declare major variables 
    
location lTarget GetSpellTargetLocation(); 
    
effect eVis EffectVisualEffect(VFX_FNF_TIME_STOP); 
    
effect eTime EffectTimeStop(); 
    
int nRoll d4(); 
    
float fDuration IntToFloat(nRoll) + 9.0f;
 
    
//Fire cast spell at event for the specified target 
    
SignalEvent(OBJECT_SELFEventSpellCastAt(OBJECT_SELFSPELL_TIME_STOPFALSE)); 
 
    
//Apply the VFX impact and effects 
    
DelayCommand(0.75ApplyEffectToObject(DURATION_TYPE_TEMPORARYeTimeOBJECT_SELFfDuration)); 
    
ApplyEffectAtLocation(DURATION_TYPE_INSTANTeVislTarget); 

Lien direct vers le message - Vieux
Mélancolie
Invité
 
[Message effacé à la demande de l'auteur]
[Message effacé à la demande de l'auteur]
Lien direct vers le message - Vieux
Avatar de Kray
Kray
Bagnard
 
Avatar de Kray
 
Citation:
Provient du message de Lumina
Si vous etes si pointilleux que ça sur les règles, vous devriez mettre les "rest" pour une durée de 2 heures réelles plutot que 30 secondes.
Mais... Le rest est désactivé sur Althea

Le repos se fait uniquement dans les auberges, ou dans les tentes portables, auquel cas le joueur se doit d'y attendre deux heures
Lien direct vers le message - Vieux
Avatar de Tyriael
Tyriael
Roi
 
Avatar de Tyriael
 
la récupération de sorts ........
livre add3 edition :

I]"Le magicien ne peut préparer ses sorts que s'il est frais et dispos, état qu'il ateint après 8 heures de sommeil .Il n'est pas obligé de dormir durant ce temps "[/I]
Mais tout déplacement , incantation, combat , utilisation de compétence et tout efforts fatiguant lui est interdit

8 heures sans bouger le temps va etre long
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
Pour Ceux que ca interesse de posseder quand meme le time stop, tout en gardant un gestion pas trop encombrante sur un monde persistant :

Code PHP:
void main()
{
    
object oPC OBJECT_SELF;

        
//Declare major variables
        
location lTarget GetSpellTargetLocation();
        
effect eVis EffectVisualEffect(VFX_FNF_TIME_STOP);
        
effect eTime EffectTimeStop();
        
int nRoll d4();
        
float fDuration IntToFloat(nRoll) + 9.0f;

    if ((!
GetIsPC(oPC))||GetIsDM(oPC))
    {
        
//Fire cast spell at event for the specified target
        
SignalEvent(OBJECT_SELFEventSpellCastAt(OBJECT_SELFSPELL_TIME_STOPFALSE));

        
//Apply the VFX impact and effects
        
DelayCommand(0.75ApplyEffectToObject(DURATION_TYPE_TEMPORARYeTimeOBJECT_SELFfDuration));
        
ApplyEffectAtLocation(DURATION_TYPE_INSTANTeVislTarget);
    }
    else
    {
    
int nNBCreature GetHitDice(oPC);
    
int nNBDone 1;
    
object oCible;

    
ApplyEffectAtLocation(DURATION_TYPE_INSTANTeVislTarget);
        while (
nNBCreature 0)
            {
            
oCible GetNearestObject(OBJECT_TYPE_CREATURE,oPC,nNBDone);
            
//if (GetIsPC(oCible)){                                     //DECOMMENT ME
            //ApplyEffectToObject(DURATION_TYPE_TEMPORARY,ExtraordinaryEffect(EffectSlow()),oCible,fDuration);                                     //DECOMMENT ME
            //ApplyEffectToObject(DURATION_TYPE_TEMPORARY,ExtraordinaryEffect(EffectSilence()),oCible,fDuration);                                     //DECOMMENT ME
            //} else {                                     //DECOMMENT ME
            
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,ExtraordinaryEffect(EffectParalyze()),oCible,fDuration);
            
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,ExtraordinaryEffect(EffectSilence()),oCible,fDuration);
            
//}                                     //DECOMMENT ME
            
nNBDone nNBDone+1;
            
nNBCreature nNBCreature-1;
            }
    }

Voila. Si vous ne decommentez pas les lignes //DECOMMENT ME, alors vos joueurs pourront continuer a lancer arret du temps, mais cela ne freezera que les creature alentours, pour un maximum de <magelevel> creature.

[EDIT : En Cours : erreur de syntaxe]
Si vous decommentez ces lignes, alors les autres joueurs seront affectes, mais seulement ralentis. Ca me semble un peu trop puissant, du coup, le time stop.

A noter que dans les 2 cas, si le tag de la creature est "NO_TIME_STOP", alors le sort ne fonctionnera pas sur lui.
Lien direct vers le message - Vieux
Avatar de MTorment
MTorment
Roi
 
Avatar de MTorment
 
Ca m'intéresse mais je ne sais pas où le mettre dans mon module.

Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
Tu importe juste le script, puis tu le compile, et c'est tout... pas besoin de l'affecter a un event ^^
Lien direct vers le message - Vieux
miriandel
Roi
 
Citation:
Provient du message de Kray&amp;Ravendas
Mais... Le rest est désactivé sur Althea

Le repos se fait uniquement dans les auberges, ou dans les tentes portables, auquel cas le joueur se doit d'y attendre deux heures
Euh... ce que Kray veut dire, c'est que le repos n'est pas autorisé dans un endroit ou logiquement il n'est pas possible de se reposer, il serait saugrenu de planter sa tente en pleine ville

Il est toutefois possible de se reposer n'importe où pour autant qu'aucune menace ne l'empêche et qu'on dispose des objets magiques ad-hoc.

Il s'agit donc d'une implémentation à mi-chemin entre le NWN de base (où le mage est un orgue de Staline) et les règles de D&D (où il faut passer une nuit pour se reposer, ce qui se fait généralement en 10 secondes en le disant au DM qui tire son jet de rencontre, mais soit...).

QUant à l'arrêt du temps, ben une fois n'est pas coutume, je vais plutôt être de l'avis de Raistlin.
Flinguer un des rarissimes sorts niveau IX du mage... pas cool...
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
Voila, l'edit est fait, ca devrait aller mieux. Désolé pour cette petite erreur.
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
La version que j'utilise actuellement :

Code PHP:
//#include "ro_generic"
 
void main()
{
/*
//BlueGem Consomation -- "Blue Gemstone"
object oGEMBLUE;
int nGem = 0;
if (GetIsPC(OBJECT_SELF)==FALSE) //||(GetIsNvnRoDM(OBJECT_SELF)==TRUE)) Ici, je verifie si le joueur est un Joueur non MD. Si oui, alors on lui prend une Gemme
    {
    nGem = 1;
    }
if (nGem==1)
    {
    object oGem = GetFirstItemInInventory(OBJECT_SELF);
    while (GetIsObjectValid(oGem))
        {
        if (GetName(oGem)== "Blue Gemstone") // Comparaison avec le nom et pas le tag : le tag me sert au calcul de la rarete
            {
            oGEMBLUE = oGem;
            break;
            }
        oGem = GetNextItemInInventory(OBJECT_SELF);
        }
    if (GetIsObjectValid(oGEMBLUE))
        {
        int nStack = GetNumStackedItems(oGEMBLUE);
        DestroyObject(oGEMBLUE);
        if (nStack>1)
            {
            CreateItemOnObject("bluegemstone",OBJECT_SELF,nStack-1); //ATTENTION AU RESREF de la Gem, ici
            }
        nGem = 1;
        }
    }
if (ngem==0)
    {
    SendMessageToPC(OBJECT_SELF,"You do not have the Blue Gem needed to cast this spell");
    return;
    }
*/
/*
int GetNbCreature(object oArea)
{
object oTest = GetFirstObjectInArea(oArea);
int nNb = 0;
while (GetIsObjectValid(oTest))
    {
    if (GetObjectType(oTest)==OBJECT_TYPE_CREATURE)
        {
        nNb ++;
        }
    oTest = GetNextObjectInArea(oArea);
    }
return nNb;
*/
 
//SCRIPT TIMESTOP
    
object oPC OBJECT_SELF;
 
        
//Declare major variables
        
location lTarget GetSpellTargetLocation();
        
effect eVis EffectVisualEffect(VFX_FNF_TIME_STOP);
        
effect eTime EffectTimeStop();
        
int nRoll d4();
        
float fDuration IntToFloat(nRoll) + 9.0f;
 
    if (
GetIsDM(oPC))
    {
        
//Fire cast spell at event for the specified target
        
SignalEvent(OBJECT_SELFEventSpellCastAt(OBJECT_SELFSPELL_TIME_STOPFALSE));
 
        
//Apply the VFX impact and effects
        
DelayCommand(0.75ApplyEffectToObject(DURATION_TYPE_TEMPORARYeTimeOBJECT_SELFfDuration));
        
ApplyEffectAtLocation(DURATION_TYPE_INSTANTeVislTarget);
    }
    else
    {
    
int nNBCreature GetHitDice(oPC); //Je gere avec le nombre de dés de vie du Perso le nombre de créature stoppées par timeStop
            //Ceux qui veulent toute la zone, il suffit de remplacer GetHitDice par la fonction GetNbCreature(GetArea(OBJECT_SELF)) que j'ai commentée au dessus de timeStop
    
int nNBDone 1;
    
object oCible;
    
effect eFX;
 
    
ApplyEffectAtLocation(DURATION_TYPE_INSTANTeVislTarget);
        while (
nNBCreature 0)
            {
            
oCible GetNearestObject(OBJECT_TYPE_CREATURE,oPC,nNBDone);
            
eFX GetFirstEffect(oCible);
 
            
AssignCommand(oCible,ClearAllActions());
 
            
DelayCommand(0.2,SetCommandable(FALSE,oCible));
 
            
DelayCommand(fDuration,SetCommandable(TRUE,oCible));
 
            
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_DUR_MAGIC_RESISTANCE),oCible,fDuration);
            
nNBDone nNBDone+1;
            
nNBCreature nNBCreature-1;
            }
    }

Des fois que ca serve ^^
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Whouaou

C'est quoi ce sujet?!? Il est tout vieux, il sent le renfermé, ya des toiles d'araignées partout!

Que des gens qu'on ne voit plus lol

...
Il m'ont tous laissé tomber OOouiinn

M'en fout, je vais faire la grève des vieux NA!
Que tout ceux qui étaient sur les forums Nw JOL depuis 2000 me rejoignent!! Gniark gniark




Em, tu utilise des composantes sur Ragnarok?!
Ça doit être terriblement ennuyant de refaire tous les scripts de sort...
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
toute facon, j'ai mis sous commentaire le include #ro_generic, mais dedans, y'a un calcul de l'attaque magique.

J'ai refait toutes les regles du jeu, donc j'ai dut refaire tous les sorts du jeu (j'en ai meme rajoute une 40aine au passage ^^)

C'est un peu fastidieux, mais le resultat est la

(PS : et timestop, comme certains autres sort de level 9 que j'ai crée, ainsi que resurection et invisibilité, sont soumis a la consomation d'un Gemstone,qui est assez simple a trouver, mais limite quand meme un peu l'utilisation de ces sorts puissants mais un peu desequilibrants... Y'a qu'a voir Invisibilité : soit tu met True Sight a tout tes monstres, soit un mage de niveau 7 peu tranquillement se ballader dans la grotte d'un dragon... :/)

[PUB PERSO]
Bein, vient essayer : click sur ma sign
[/PUB PERSO]
Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
Citation:
Provient du message de Skanzo Sylan
Whouaou

C'est quoi ce sujet?!? Il est tout vieux, il sent le renfermé, ya des toiles d'araignées partout!

Que des gens qu'on ne voit plus lol

...
Il m'ont tous laissé tomber OOouiinn

M'en fout, je vais faire la grève des vieux NA!
Que tout ceux qui étaient sur les forums Nw JOL depuis 2000 me rejoignent!! Gniark gniark




Em, tu utilise des composantes sur Ragnarok?!
Ça doit être terriblement ennuyant de refaire tous les scripts de sort...
Sniifff, bon ba je ne pourrai pas venir , je suis sur le forum de Jol que depuis 5 mois lol

Donc Tant pis ..... c'est pas grâve lol.
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Bah si on compte mes brefs passages au temps de BG2, ça doit passer
Mais NWN n'est sorti que depuis moins d'un an donc...

Et puis personne ne t'a laissé tomber, sisi, je t'assure, ils vont revenir !
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
Version que j'utilise actuellement (depuis l'ajout de EffectParalyse)

Code PHP:
//#include "ro_generic"

void main()
{
//BlueGem Consomation -- "Blue Gemstone"
/*
if (BlueGem(1,OBJECT_SELF)==FALSE)
    {
    SendMessageToPC(OBJECT_SELF,"You do not have the Blue Gem needed to cast this spell");
    return;
    }
*/
//SCRIPT TIMESTOP
    
object oPC OBJECT_SELF;

        
//Declare major variables
        
location lTarget GetSpellTargetLocation();
        
effect eVis EffectVisualEffect(VFX_FNF_TIME_STOP);
        
effect eTime EffectTimeStop();
        
int nRoll d4();
/*
////////////////////////////////////////////////////////////////
//:MODIF 2-2 HERE
///////////////////////////////////////////////////////////////
                if ((GetIsSecondClass(OBJECT_SELF,10)==TRUE) || (GetIsSecondClass(OBJECT_SELF,9)==TRUE))
                    {
                    nRoll = nRoll*3/2;
                    }
*/
        
float fDuration IntToFloat(nRoll) + 9.0f;

    if (
GetIsDM(oPC))
    {
        
//Fire cast spell at event for the specified target
        
SignalEvent(OBJECT_SELFEventSpellCastAt(OBJECT_SELFSPELL_TIME_STOPFALSE));

        
//Apply the VFX impact and effects
        
DelayCommand(0.75ApplyEffectToObject(DURATION_TYPE_TEMPORARYeTimeOBJECT_SELFfDuration));
        
ApplyEffectAtLocation(DURATION_TYPE_INSTANTeVislTarget);
    }
    else
    {
    
int nNBCreature GetHitDice(oPC)*3/2;
    
int nNBDone 1;
    
object oCible;
//    effect eFX;
    
ApplyEffectAtLocation(DURATION_TYPE_INSTANTeVislTarget);
        while (
nNBCreature 0)
            {
            
oCible GetNearestObject(OBJECT_TYPE_CREATURE,oPC,nNBDone);
//            eFX = GetFirstEffect(oCible);
//            AssignCommand(oCible,ClearAllActions());
//            DelayCommand(0.2,SetCommandable(FALSE,oCible));
//            DelayCommand(fDuration,SetCommandable(TRUE,oCible));
            
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectCutsceneParalyze(),oCible,fDuration);
            
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_DUR_MAGIC_RESISTANCE),oCible,fDuration);
            
nNBDone nNBDone+1;
            
nNBCreature nNBCreature-1;
            }
    }

voila.
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Désactiver Arrêt du Temps
   

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 +1. Il est actuellement 13h32.
   

© 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