JeuxOnLineForumsPlusConnectés : 813 (sites) | 1313 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > script:l'ethnie vampire RSS
   
Répondre
Partager Outils Rechercher
Faelar
Roi
 

script:l'ethnie vampire

j'ai essayer de faire un script pour que ceux qui écrive dans ethnie:Vampire ai des dégâts divin quand ils sont au soleil et qu'il ai quelques bonus comme par exemple:une petite régénération,+ 6 a leurs CA,+6 en force,+4 en dextérité,+2 en intelligences,+2 en sagesse,+4 en charisme et +4 en constitution.

J'ai essayer de le faire mais c'est vraiment trop balèze pour moi et je me suis cassé la tète pendant 2 jour ,
j'espère que vous pourrez m'aidez.
Lien direct vers le message - Vieux
BERNARD_JULIUS [[LH]]
Roi
 
Déjà pour les bonus, je pense qu'il faut utiliser des effect de type permanent avec ApplyEffectToObject, l'object étant le joueur.

Après, pour faire des dégats, ben moi je pense à un script sur le OnHeartBeat qui vérifie à chaque heartbeat s'il fait jour.

Reste à savoir à quelle fréquence tu souhaites appliquer les dégâts : toutes les minutes ? toutes les 2 minutes ?

Il suffit à chaque hb d'incrémenter un variable locale stockée dans le joueur, et quand la variable est à 10 ou 20 par ex, d'appliquer les dégâts...

Enfin bon vu le niveau des scripteurs sur ce forum, certains risquent de bondir en lisant mon post (je sais qu'il faut éviter le heartbeat, mais bon c'est tellement pratique...) et me dire "évite de donner des conseils si t'y connais rien !!"...

Ps: en lisant ton post on ne sait pas à quel niveau tu es bloqué, essaye d'être plus précis si possible !
Lien direct vers le message - Vieux
Faelar
Roi
 
mon problème est que je sais pas comment faire pour que le script sache si il fait jour ou nuit et si le joueur est un vampire.
Lien direct vers le message - Vieux
BERNARD_JULIUS [[LH]]
Roi
 
Pour savoir s'il fait jour : GetIsDay renvoie TRUE ou FALSE
Ou alors GetIsNight (Day=jour et Night=nuit pour les nuls en anglais...!)

Pour l'etnie, je crois que c'est avec GetSubRace...
Lien direct vers le message - Vieux
Faelar
Roi
 
serai t'il possible d'avoir une partie du script au moins?
Lien direct vers le message - Vieux
Avatar de Eldarion Tarent
Eldarion Tarent
Roi
 
Avatar de Eldarion Tarent
 
Il y a beaucoup de vampires ces temps-ci

Je te renvois à ce topic qui peut sans doute t'aider même si il ne s'agit pas du même problème ici
Lien direct vers le message - Vieux
BERNARD_JULIUS [[LH]]
Roi
 
D'accord je vais essayer de te faire un truc mais pour demain (soir) parce que là je dois malheureusement partir !! mais peut-être que qqn t'aidera d'ici-là...
Bonne chance !
Lien direct vers le message - Vieux
BERNARD_JULIUS [[LH]]
Roi
 
J’ai réussi à faire quelque chose qui peut t’intéresser, sachant que c’est pour un module solo. Pour un module multi, c’est peut-être un peu plus compliqué…

Voilà :
Dans le OnEnter de la zone de départ de ton module tu mets ce script :

Code PHP:
void main()
{
if (
GetLocalInt(GetFirstPC(),"nDefini")!=&& GetDeity(GetFirstPC())=="Vampire")
    {
    
effect eCa=EffectACIncrease(6);
    
effect eForce=EffectAbilityIncrease(ABILITY_STRENGTH,6);
    
effect eDex=EffectAbilityIncrease(ABILITY_DEXTERITY,4);
    
effect eInt=EffectAbilityIncrease(ABILITY_INTELLIGENCE,2);
    
effect eSag=EffectAbilityIncrease(ABILITY_WISDOM,2);
    
effect eChar=EffectAbilityIncrease(ABILITY_CHARISMA,4);
    
effect eCon=EffectAbilityIncrease(ABILITY_CONSTITUTION,4);
    
ApplyEffectToObject(DURATION_TYPE_PERMANENT,eCa,GetFirstPC());
    
ApplyEffectToObject(DURATION_TYPE_PERMANENT,eForce,GetFirstPC());
    
ApplyEffectToObject(DURATION_TYPE_PERMANENT,eDex,GetFirstPC());
    
ApplyEffectToObject(DURATION_TYPE_PERMANENT,eInt,GetFirstPC());
    
ApplyEffectToObject(DURATION_TYPE_PERMANENT,eSag,GetFirstPC());
    
ApplyEffectToObject(DURATION_TYPE_PERMANENT,eChar,GetFirstPC());
    
ApplyEffectToObject(DURATION_TYPE_PERMANENT,eCon,GetFirstPC());
    
SetLocalInt(GetFirstPC(),"nCompteur",0);
    
SetLocalInt(GetFirstPC(),"nDefini",1);
    }

Ce script sert à vérifier si l’ethnie est « Vampire », et dans ce cas il accorde des bonus et initialise une variable locale nCompteur.

Après, sur le HeartBeat de ton module tu mets ça :
Code PHP:
void main()
{
if (
GetIsDay() && GetDeity(GetFirstPC())=="Vampire")
    {
    
int nCount=GetLocalInt(GetFirstPC(),"nCompteur");
    if (
nCount 9)
        {
        
effect eBrule=EffectDamage(2,DAMAGE_TYPE_DIVINE);
        
ApplyEffectToObject(DURATION_TYPE_PERMANENT,eBrule,GetFirstPC());
        
SetLocalInt(GetFirstPC(),"nCompteur",0);
        }
    else 
SetLocalInt(GetFirstPC(),"nCompteur",nCount+1);
    }

Ou alors tu le mets sur le heartbeat de chaque zone extérieure, si tu veux que les vampires puissent se déplacer le jour dans les zones d’intérieur sans avoir à subir de dégâts…

Ce deuxième script incrémente la variable locale nCompteur de 1 à chaque heartbeat et vérifie si c’est supérieur à 9 : dans ce cas on inflige les dégâts et on remet le compteur à zéro. Tout ceci si le joueur est un vampire bien-sûr.

A toi maintenant d’ajuster la fréquence et la gravité de ces dégâts, dans le deuxième script.
Dans cet exemple, c’est 2 pv toutes les minutes.
Attention aussi à la différence entre « Vampire » et « vampire »…
Pour la régénération, ça ne doit pas être très compliqué, tu peux par ex donner aux vampires un objet magique utilisable une fois par jour qui permet de faire des sorts de soin…facile à faire juste avec Aurora il me semble.
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Assez horrible tout cela, comme tu l'avais toi-même dit...
D'abord tous ces effets devrait être mis en ExtraordinaryEffect() pour persister même après un repos, ensuite il faudrait voir à ne pas confondre "dieu" (GetDeity()) et "Ethnie" (GetSubRace()), En plus, il faut optimiser un minimum tes scripts et mettre dans des variables les données que tu utilises plus d'une fois, ici GetFirstPC() !

Bon, je te propose donc une solution plus souple, plus sûre et adapté au multijoueur :
Code PHP:
//Ceci est à mettre dans le OnClientEnter de ton module :

//Une fonction qui vérifie la nature de oPC et lui applique
//des effets spéciaux s'il est un vampire
void Vampireobject oPC );

void Vampireobject oPC ){
    
    if ( 
GetStringLowerCaseGetSubRaceoPC ) ) == "vampire" ){
        
        
effect eCa ExtraordinaryEffectEffectACIncrease(6) );
        
effect eForce ExtraordinaryEffectEffectAbilityIncreaseABILITY_STRENGTH) );
        
effect eDex ExtraordinaryEffectEffectAbilityIncreaseABILITY_DEXTERITY) );
        
effect eInt ExtraordinaryEffectEffectAbilityIncreaseABILITY_INTELLIGENCE) );
        
effect eSag ExtraordinaryEffectEffectAbilityIncreaseABILITY_WISDOM) );
        
effect eChar ExtraordinaryEffectEffectAbilityIncreaseABILITY_CHARISMA) );
        
effect eCon ExtraordinaryEffectEffectAbilityIncreaseABILITY_CONSTITUTION) );
        
ApplyEffectToObjectDURATION_TYPE_PERMANENTeCaoPC );
        
ApplyEffectToObjectDURATION_TYPE_PERMANENTeForceoPC );
        
ApplyEffectToObjectDURATION_TYPE_PERMANENTeDexoPC );
        
ApplyEffectToObjectDURATION_TYPE_PERMANENTeIntoPC );
        
ApplyEffectToObjectDURATION_TYPE_PERMANENTeSagoPC );
        
ApplyEffectToObjectDURATION_TYPE_PERMANENTeCharoPC );
        
ApplyEffectToObjectDURATION_TYPE_PERMANENTeConoPC );
        
        
//On lance l'exécution du script qui grillera les vampires imprudents
        
ExecuteScript"ohb_vampire"oPC );
        
    }
    
}

void main(){
    
    
//On récupère le PJ qui entre dans le module
    
object oPJ GetEnteringObject();
    
    if( 
GetIsPCoPJ ) ){
        
        
//Si c'est un vampire, on lui applique les effets
        
VampireoPJ );
        
    }
    
    
//Tu peux mettre ton code "normal" ici :-)
    

Ensuite, tu crée un nouveau script que tu appelles exactement "ohb_vampire", tu ne le mets nulle part, il suffit qu'il existe dans ta palette de script :
Code PHP:
//Script "ohb_vampire"

void main(){
    
    {
        
        
object oSelf OBJECT_SELF;
        
        if( 
GetIsDay() && !GetLocalIntoSelf"bInterieur" ) ){
            
            
//Quantité de dégats
            
int nDegats d6(2);
            
            
effect eFeu EffectDamagenDegatsDAMAGE_TYPE_FIRE );
            
ApplyEffectToObjectDURATION_TYPE_INSTANTeFeuoSelf );
            
            
//Tu peux rajouter des effets spéciaux ou un avertissement si tu veux
            
        
}
        
    }
    
    
//Change ici le délai entre chaque exécution du script
    
DelayCommand20.0fExecuteScript"ohb_vampire"OBJECT_SELF );
    

Maintenant, il te suffit de mettre ces scripts dans les évènements OnEnter et OnExit d'une zone ou d'un trigger (déclencheur) pour en faire une zone d'intérieur, où le vampire ne risque rien :
Code PHP:
//OnEnter :

void main(){
    
    
object oPJ GetEnteringObject();
    
    if( 
GetIsPCoPJ ) ){
        
        
SetLocalIntoPJ"bInterieur"TRUE );
        
    }
    
    
//Tu peux mettre le reste de ton code ici
    
}

//OnExit :

void main(){
    
    
object oPJ GetExitingObject();
    
    if( 
GetIsPCoPJ ) ){
        
        
DeleteLocalIntoPJ"bInterieur" );
        
    }
    
    
//Tu peux mettre le reste de ton code ici
    

Voilà, avec ça, pas de soucis, en multijoueur comme en solo, ça marchera sans trop charger le CPU !
Lien direct vers le message - Vieux
Avatar de Coursier
Coursier
Alpha & Oméga
 
Avatar de Coursier
 
En parlant de vampires, serait il possible de leur rendre impossible à traverser les cours d'eau et le fait de les pousser dans l'eau leur fait perdre 1/3 pv par round.
Aussi de les empêcher de rentrer dans des lieux privés sans invitation, tant qu'une personne ne leur autorise pas.

Et pour les lycanthropes non naturels, une transformation les jours de pleine lune tous les mois.
Lien direct vers le message - Vieux
BERNARD_JULIUS [[LH]]
Roi
 
Voui voui voui désolé pour la confusion entre Deity et SubRace...

Ton script a l'air bien, mais je ne comprend pas : dans ton script, le vampire qui se balade au soleil ne se fera griller qu'une seule fois, non ?? puisque le script ohb_vampire s'execute sur un OnEnter...
Ou alors je n'ai pas compris la subtilité de la ligne :
Code PHP:
DelayCommand20.0fExecuteScript"ohb_vampire" ); 
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Oui, tu n'as pas compris la subtilité, je te fais un petit schéma :
Code PHP:
Le OnEnter déclenche le ohb_vampire =>
le ohb_vampire s'exécute et  relance le ohb_vampire après 20 secondes =>
le nouveau ohb_vampire s'
exécute et relance ohb_vampire après 20 secondes => ..... 
Il s'agit donc d'une boucle avec temporisation entre chaque itération, ou si tu préfères un OnHeartBeat avec une périodicité de 20 secondes (réglable !).

Tiens d'ailleurs le ExecuteScript() ne s'applique pas par défaut à OBJECT_SELF, je vais corriger ça, ça fait deux mois que j'ai même plus NWN installé alors....
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
De plus, l'avantage c'est qu'on obtient ainsi des boucles indépendantes pour chaque joueur, en effet le OnEnter lance la boucle sur le vampire entrant et la boucle continue à s'exécuter sur ce vampire sans se préoccuper ou sans interférer avec les autres boucles sur les autres joueurs.

C'est un processus très léger et efficace, vraiment très bien à utiliser, surtout si comme moi, tu optimises le script pour éviter que le DelayCommand() soit lourd, ici il doit être très léger.
Lien direct vers le message - Vieux
BERNARD_JULIUS [[LH]]
Roi
 
âââââh, je comprend maintenant.
Je crois que le soleil me ramollit le cerveau.
En fait j'y avait jamais pensé : un script qui se réexécute lui-même, trop génial.
(Ben oui faut bien apprendre...)
En fait avec ça on a plus besoin du heartbeat...
Lien direct vers le message - Vieux
Compte #2611
Invité
 
Tu joues avec les scripts comme Satrianni avec une gratte Jedaï, ce n'est aucunement de la flaterie, tu es vraiment trés doué !

En tous cas, ce script sauve mon module, c'est exactement ce qui me manquais pour le rendre encore plus RP.

Merci encore.

Par contre, les pouvoirs permanents du vampire disparaissent encore au 1er repos même avec ExtraordinaryEffect.
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > script:l'ethnie vampire
   

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 21h08.
   

© 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