[need] scriptes de base...

Répondre
Partager Rechercher
Bonjour!
Voila.... J'aurais besoin de quelques scriptes que vous avez du faire et rere faire pour le module Val de Bise... Plus précisément, je cherche:

- Un scripte de gestion des déco//reco.
Il est intollérable de regagner toute sa vie. Pour la gestion des sors, il y a un poste plus bas...

- Un scripte de "nettoyeurs" qui vide mes zones quand elle sont vide de PJs.

- Un scripte générique pour marchand.
Sachant que je n'ai qu'un marchand par zone, n'y a t'il pas de scripte tout fait qui m'éviterai d'en avoir.....*hum* 120

- Un scripte d'anti duplication
Je crois qu'il était de base dans le CEP mais je ne suis plus tres sur...

- Un scripte qui me fait apparaître un joli feu, et meme que quand on clique dessus, on s'assoit autour

- Un dernier pour faire passer le temps (oui oui, au sens propre... Je crois que dayo en avait posté un mais je ne retrouve plus le poste...)

Si vous les distribuez, ou que vous avez un lien vers un site les distribuant (nwvault? )... Ce sont des scriptes assez indispensables a tous module, et que j'aimerais ne pas avoir a retaper de mes petites mimines

ps: naturellement je ne vous demande pas de bosser pour moi simplement je pense que vous avez deja du scripter tout cela et que vous avez probablement des trucs tout fait Si ce n'est pas le cas, je ferai tout ca moi meme et je le distribuerai ici
Citation :
Publié par Heziva
Bonjour!
Voila.... J'aurais besoin de quelques scriptes que vous avez du faire et rere faire pour le module Val de Bise... Plus précisément, je cherche: ...

Tu peux rechercher aussi la fonction recherche ... je crois que tu les trouveras tous
Citation :
- Un scripte de gestion des déco//reco.
Code PHP:

//Pour la valeur de nHP, tout dépend de ton système de persistance et de la façon dont tu stockes les PV à la déco. L'exemple ici utilise un objet de persistance contenu sur le PJ.

object oBD GetItemPossessedBy(oPC"objetdepersistance");

void AdjustPV (object oPCobject oBD)
{
   
int nMaxHP GetMaxHitPoints(oPC);
   
int nHP GetLocalInt(oBD"PV"); 
   if(
nHP != nMaxHP && nHP != 0)
   {
    
int nHPAjuste nMaxHP nHP;
    
effect eHPAjuste ExtraordinaryEffect(EffectDamage(nHPAjuste));
    
ApplyEffectToObject(DURATION_TYPE_INSTANTeHPAjusteoPC);
   }

Citation :
- Un scripte de "nettoyeurs" qui vide mes zones quand elle sont vide de PJs.
Code PHP:

//version simplifiée de la fonction à appeler en DelayCommand dans le OnExit de chaque zone.

void CleanArea(object oArea)
{
 if(!
GetIsPCInArea(oArea))
 {
  
object oIntru GetFirstObjectInArea(oArea);
  
//Tant que l'objet est valide et n'est pas un PJ
  
while(GetIsObjectValid(oIntru) && !GetIsPC(oIntru))
  {
   
int nType GetObjectType(oIntru);
   switch(
nType)
   {
    case 
OBJECT_TYPE_CREATURE:
     
//Si la creature n'est pas un familier, compagnon ou creature invoquee
     //Et si la creature n'est pas en combat
     
if(!GetIsInCombat(oIntru) && !GetIsObjectValid(GetMaster(oIntru))
        && !
GetIsDMPossessed(oIntru))
     {
      
//Si elle est de type intrigue ou "Boss" ou "Garde", elle se repose et se soigne
      
if(GetPlotFlag(oIntru))
      {
       
//SetAILevel(OBJECT_SELF, AI_LEVEL_DEFAULT);
       
ForceRest(oIntru);
      }
      
//Sinon, elle est detruite
      
else
      {
       
//Epargne les chevaux montes
       
if(GetStringLeft(GetResRef(oIntru), 3) != "hs_")
        
DestroyObject(oIntru);
      }
     }
     break;
    case 
OBJECT_TYPE_ITEM:
     
//Si l'objet n'est pas un objet de quete, il est detruit
     
if(!GetPlotFlag())
     {
      
DestroyObject(oIntru);
     }
     break;
    default:
     break;
   }
   
oIntru GetNextObjectInArea(oArea);
  }
 }

Citation :
- Un scripte générique pour marchand.
Code PHP:

#include "nw_i0_plot"
void main()
{
    
object oStore GetNearestObject(OBJECT_TYPE_STORE);
    
gplotAppraiseOpenStore(oStoreGetPCSpeaker());    

Citation :
- Un scripte d'anti duplication
C'est à dire ?

Citation :
- Un dernier pour faire passer le temps
Code PHP:

//Delai en secondes
void PasserLeTemps(int nDelai)
{
 
int nHour GetTimeHour();
 
int nMin GetTimeMinute();
 
int nSec GetTimeSecond();
 
SetTime(nHour,nMin,nSec+nDelai);


PS: Si tu recherches un système de script complet => Lien
merci beaucoup beaucoup ! ! !

Je n'ai pas de systeme de persistance pour le moment... Donc ce que je ferais c'est sauvegarder sur un waypoint au nom du joueur (nom+cdkey ) Par contre je en sais pas du tout me servir du spellhook. Sur le rappel a la vie et sur l'autre (dont je n'ai plus le nom en tete) il va faloir retirer la variable non?


Pour les nettoyeurs, le scripte est parfait, d'autant plus qu'il gere les niveaux d'IA

Idem pour les marchand, rien a dire

L'anti duplication... Je parlais de ce bug qui permet de dupliquer avec le craft HotU... Si je peux éviter d'expliquer ca en détail sur un forum comme Maskado...

Enfin, pour passer le temps... ca fonctionera sans problme? Il fera seul la conversion 61 secondes = 1 minute + 1 seconde?


Merci encore de la réponse....

ps: réponse a *nom imprononçable pour moi* Certes, la fonction recherche est très pratique pour ce genre de choses. Cependant, j'ai 6 scriptes a trouver, et nous sommes limités dans le nombre de recherches par minutes. De plus, trouver du premier coup.... hum.... bref. J'ai pensé qu'il était plus simple de poster, ces scriptes étant des grands classiques des mondes persistant. Les regrouper ne sont pas une mauvaise chose, et d'autres que moi auront sûrement plaisir a retrouver un tel poste.
Citation :
Par contre je en sais pas du tout me servir du spellhook.
Le "spellhook" (comme tous les "hooks" ) sert simplement à insérer un bout de code avant ou après le script en question (donc ici, avant l'exécution du sort).
Tu peux y mettre ce que tu veux, mais tu peux aussi modifier le script associé au sort directement ça revient au même. Le "hook" c'est juste pour faire plus propre et ça ne modifie pas le script original ce qui est bien pratique (en cas de mise à jour de Bioware par exemple).

Citation :
Je parlais de ce bug qui permet de dupliquer avec le craft HotU
N'ayant jamais joué à NWN (mis à part pour des tests pour mes scripts ) et n'ayant jamais utilisé le système d'artisanat HotU, je ne peux pas t'aider efficacement et rapidement

Citation :
Enfin, pour passer le temps... ca fonctionera sans problme? Il fera seul la conversion 61 secondes = 1 minute + 1 seconde?
Oui sans aucun soucis. J'ai fait une simple fonction générique à appeler (via un include par exemple) ne sachant pas exactement quand et comment tu désires t'en servir, comme ça c'est plus simple.

Si tu as d'autres scripts à demander, n'hésite pas
bug de duplication:
- tu *****************************************,
- tu utilises le craft et tu choisis les diverses apparences sans appliquer la modification,
- tu *****************************************************************************)
- tu ******************************************************************.

C'est somme toute facile à remarquer, un peu comme les gens qui utilisent la déco/reco pour les sorts et les points de vie. La correction apportée par le CEP, j'en sais rien, le module sur lequel je bosse est CEP 1.50 et le bug est la. Faudrait "flagger" les items copiés lors du craft afin qu'ils soient détruits dans le on_enter.

autocensure
Si vous avez d'autres script indispensables pour un monde persistant, il serait bien de les poster ici non? Cela permettrai à ceux qui veulent créer leur propre monde d'avoir une base de script indispensable.

PS: moi je suis intéressé...
Appréciable ce script de nettoyage...

Pour l'ouverture générique de marchand, j'en ai fait un vraiment différent et basé sur le TAG du PNJ avec une petite option sur l'activation du test d'estimation... il date un peu mais le voilà :
Code PHP:

 #include "nw_i0_plot" 
 
void main() 
 { 
     
object oStore GetNearestObjectByTag("MAG_" GetTag(OBJECT_SELF)); 
     if (
GetObjectType(oStore) == OBJECT_TYPE_STORE
     { 
         if(!
GetLocalInt(OBJECT_SELF"iSansEstimation")) 
             
gplotAppraiseOpenStore(oStoreGetPCSpeaker()); 
         else 
             
OpenStore(oStoreGetPCSpeaker()); 
     } 
     else 
     { 
         
ActionSpeakStringByStrRef(53090TALKVOLUME_TALK); 
     } 
 } 
Après si tu souhaites une série de script / fonction / système voici trois liens :
-> http://www.deepblack.be/forum/portal.php?pid=2
-> http://www.deepblack.be/forum/portal.php?pid=6
-> http://www.deepblack.be/forum/portal.php?pid=8

Autre chose, là je finalise un nouveau système de scribe. Dès que le manuel d'installation/utilisation est fini, je vous tiendrais au courant.

A bientôt.
Citation :
Publié par Heziva
Par contre je en sais pas du tout me servir du spellhook. Sur le rappel a la vie et sur l'autre (dont je n'ai plus le nom en tete) il va faloir retirer la variable non?
Ou avais je donc la tete? je confondais ici avec un scripte qui poserais éventuellement une variable "estMort" lors d'un tuerie La on sauvegarde directement le nombre de PVs, donc oubliez cela ^^
Par ailleurs des que je pourrais je poserai ici mon petit système de sauvegarde sans persistance...

Ayant deja 120 marchands et plus un seul openstore, tu comprendra bien que je voulais éviter d'avoir a refaire tous les liens un a un ;-)

Pour la duplication, j'avais fais un joli scripte qui permettais de l'enlever.... il faudrait que je retrouve cela.... En réalité, au moment du début du craft je donnais un "craft token" que je retirais en fin de craft. Quiconque rejoignais avec un craft token se voyait détruire l'armure qu'il portait sur lui. Si je retrouve celui ci dans mes archives je posterai cela ici. Lea.... Bien que ce bug soit largement connu... si tu pouvais éditer ton post pour éviter d'indiquer la procedure exacte....

Enfin, si je n'ai pas réutilisé le valprofond, c'est que j'ai d'ores et deja le val de bise entièrement monté, et qui fonctionne. Je ne saurais expliquer a mes joueurs les changements profond du système de jeu ;-)

ps: Hey? personne ne sais donc allumer un feu de facon simple? Bon... Quand je l'aurai implémenté je posterai ici
Citation :
Bonjour bonjour,c'etait juste pour savoir pour le script de changement de temps.
Le script de changement de temps est une fonction que tu peux appeler n'importe où.
Par exemple, si tu veux qu'un MD puisse faire avancer le temps avec un objet via un dialogue, il te suffit d'appeler la fonction dans le script d'Action Conséquentes du dialogue.

De manière générique, pour utiliser cette fonction n'importe où:

- Tu places la fonction dans un script (par exemple "Includes")
- Il ne te reste plus qu'à l'appeler dans le script voulu comme dans l'exemple qui suit:

Code PHP:

#include "includes"
void main()
{
 
//360 comme exemple pour avancer d'une heure, le délai s'exprime en secondes.
 
PasserLeTemps(360);

- Tu peux bien entendu changer 360 par la valeur que tu veux, selon les besoins.

Citation :
Hey? personne ne sais donc allumer un feu de facon simple? Bon... Quand je l'aurai implémenté je posterai ici
Tu veux quoi exactement ? Un item activable ? Un placeable invisible sur un tileset activable ? Un effet visuel ? Quelles conditions d'utilisation et d'activation ?

Citation :
Enfin, si je n'ai pas réutilisé le valprofond, c'est que j'ai d'ores et deja le val de bise entièrement monté, et qui fonctionne. Je ne saurais expliquer a mes joueurs les changements profond du système de jeu ;-)
Pas de soucis, c'était juste à titre d'info. Chacun est libre de prendre ce qu'il désire de mon système et je reste dispo pour l'adapter aux besoins de votre module si il faut.
Merci de l'auto-censure
En détaille? Lorsque le PJ utilise un objet ayant pour tag "feudecamp", un placable "feu de camp" apparaît devant lui. Ce placable est utilisable. Lorsqu'on l'utilise (bouton droit, utiliser ou bien simple clique dessus) on s'approche du feu et on s'assoit
Au bout d'un temps donné, le feu disparaît.

Pour le passage du temps.... c'est nottemment important sur un monde persistant de pouvoir le faire. Lorsqu'un module commence a etre surchargé, l'horloge de never s'arrête. Si tu as des Vampires ou autres joyeusetés, ca peu être assez ennuyeux. On peut alors faire passer le temps directement dans le onHartBeat pour s'assurer que cela ne s'arrete jamais

Hs: Delphina, tu n'est pas joueuse.... Comment se fait il que tu t'investisse autant dans ce jeu?
Réponse HS (on va éviter d'entrer dans un débat ) : Bhaa la joie de la création ! Moi non plus je ne joue pas à NwN, je ne fais que des modules (bon j'ai plus le temps depuis quelques mois, mais je n'ai toujours fais que ça).
Citation :
En détaille? Lorsque le PJ utilise un objet ayant pour tag "feudecamp", un placable "feu de camp" apparaît devant lui. Ce placable est utilisable. Lorsqu'on l'utilise (bouton droit, utiliser ou bien simple clique dessus) on s'approche du feu et on s'assoit
Au bout d'un temps donné, le feu disparaît.
Code PHP:

//A insérer dans le On_Activated du module (je ne sais pas si tu utilises les tagbased scripts)
void main()
{
 
//Delai en secondes du feu de camp
 
float fDelay 30.0;

 
object oUser=GetItemActivator();
 
object oTarget=GetItemActivatedTarget();
 
object oItem=GetItemActivated();
 
string sItemTag=GetTag(oItem);
 if(
sItemTag == "feudecamp")
 {
  
location lLoc GetItemActivatedTargetLocation();
  
location lUloc GetLocation(oUser);
  if(
GetDistanceBetweenLocations(lLoclUloc) > 2.0)
  {
   
FloatingTextStringOnCreature("Vous etes trop loin."oUserFALSE);
  }
  else
  {
   
CreateObject(OBJECT_TYPE_PLACEABLE"pl_feudecamp"lLoc);
  }
 }
 if(
sItemTag == "pl_feudecamp")
 {
  
AssignCommand(oUserActionForceMoveToObject(oItem));
  
AssignCommand(oUserActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS1.0fDelay));
  
DelayCommand(fDelayDestroyObject(oItem1.0));
 }

Citation :
On peut alors faire passer le temps directement dans le onHartBeat pour s'assurer que cela ne s'arrete jamais
Tout à fait, l'appel de cette fonction dans le OnHB (en veillant à mettre un délai en rapport avec votre échelle de temps), permet de corriger ce petit bug (que j'ai vu apparaitre après la 1.62).

Citation :
Hs: Delphina, tu n'est pas joueuse.... Comment se fait il que tu t'investisse autant dans ce jeu?
Avant d'être un joueur je suis un programmeur, et c'est essentiellement le scripting que je trouve délassant avec NWN. Bien que j'apprécie certains aspects du jeu (comme la musique du jeu, certains modèles 3D ou certaines facilités de l'éditeur), je n'ai jamais été attiré par la campagne solo. Et pour ce qui est du jeu multi, je préfère les MMORPG.
Je pense que ce qui attire pas mal d'amateurs de jeux de rôles/RPG vidéo, c'est le fait de pouvoir créer "son petit monde à soi" en quelques (tout est relatif...) clics. Preuve en est le nombre de modules en ligne qui n'arrêtent pas de voir le jour depuis la sortie du jeu.
Bon bon bon....
Voila j'ai implanté la save des PV ainsi que le temps qui passe.

Pour les PV, je sauvegarde les PV ET le fait que j'ai sauvegarder.... ca donne ca:
Code PHP:

   void retreivePV(object oPC)
   {
   
 
//Pour la valeur de nHP, tout dépend de ton système de persistance et de la façon dont tu stockes les PV à la déco. L'exemple ici utilise un objet de persistance contenu sur le PJ.
   
       
int nMaxHP GetMaxHitPoints(oPC);
       
int nHP hez_GetLocalInt(oPC"pv");
       
int nPvSaved hez_GetLocalInt(oPC"pvSaved");
       if(
nHP <= nMaxHP && nPvSaved == 1)
       {
           
int nHPAjuste nMaxHP nHP;
           
effect eHPAjuste ExtraordinaryEffect(EffectDamage(nHPAjuste));
           
ApplyEffectToObject(DURATION_TYPE_INSTANTeHPAjusteoPC);
      }
   } 
Pour le temps qui passe.... ca ne compile pas. En effet SetTime demande aussi des milisecondes

Code PHP:

   //Delai en secondes 
  
void PasserLeTemps(int nDelai
  { 
   
int nHour GetTimeHour(); 
   
int nMin GetTimeMinute(); 
   
int nSec GetTimeSecond(); 
   
SetTime(nHour,nMin,nSec+nDelai,0); 
  } 
et encore une fois........ merci
Citation :
Pour le temps qui passe.... ca ne compile pas. En effet SetTime demande aussi des milisecondes
ça m'apprendra à taper du code à l'arrache sur une fenêtre de forum
Je me souviens que Deyonara m'avait filé un script très bien pour faire défiler le temps sur les "gros module" mais je l'a perdu ...
Il fallait le mettre sur OHB du module si j'ai bonne mémoire et je me demande si ce script pourrait convenir ?

bin.... sur le oHB....
Code PHP:

  //Delai en secondes 
 
void PasserLeTemps(int nDelai
 { 
  
int nHour GetTimeHour(); 
  
int nMin GetTimeMinute(); 
  
int nSec GetTimeSecond(); 
  
SetTime(nHour,nMin,nSec+nDelai); 
 }
  
  
void main(){
   
PasserLeTemps(2);
  } 
</font></font>
bin.... sur le oHB....
Code PHP:

     //Delai en secondes 
    
void PasserLeTemps(int nDelai
    { 
     
int nHour GetTimeHour(); 
     
int nMin GetTimeMinute(); 
     
int nSec GetTimeSecond(); 
     
SetTime(nHour,nMin,nSec+nDelai,0); 
    }
     
     
void main(){
      
PasserLeTemps(2);
     } 
Voila. Par ailleurs, je signale aussi que le GetIsPC() ne marche pas sur le OnLeave ca m'a donné du fil a retordre, je ne comprenais pas pourquoi je n'arrivais pas a sauvegarder les PVs de mes pjs


edit: merci dayo de la reprise ^^ ce que c'est de copier coller du forum.... :lol:
Citation :
Par ailleurs, je signale aussi que le GetIsPC() ne marche pas sur le OnLeave
Tu sauves en local une variable booléenne déterminant l'état de PJ ou non (dans le OnClientEnter par exemple), variable que tu testes dans le OnLeave à la place de GetIsPC().
Oui a la deco l'objet le GetIs PC ne fonctionne plus. C'est d'ailleurs un moyen de verifeir si le PJ est connecte ou pas dans certain script.
Par contre tu peux svg tout plein de variable locale sur le PJ. Y a pas de pb tu les recuperes ensuite a la prochaine reconnection (sauf reboot du serveur bien sur )
Un scripte intelligent que j'ai trouvé sur le net... le fameux GetIsPCInArea sans aucune boucle

Code PHP:

  int GetIsPCInArea(object oArea OBJECT_SELF)
  {
    
// this is a fast way to check for players without using a loop
    
object o GetFirstObjectInArea(oArea);
    if(!
GetIsPC(o)) GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC,o);
    return (
GetIsPC(o)) ? TRUE FALSE;
  } 
(topic original: http://nwn.bioware.com/forums/viewto...forum=47&sp=15 )
Répondre

Connectés sur ce fil

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