JeuxOnLineForumsPlusConnectés : 760 (sites) | 1655 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Une petite bibliothèque pour vous! RSS
   
Répondre
Partager Outils Rechercher
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 

Une petite bibliothèque pour vous!

Je suis un jeune scripteur totalement indépendant, j'ai décidé de me mettre à scripter sur nwn par passion du développement et la passion d'apprendre de nouveau langage , et pour aider les shards.

Donc voici une petite bibliothèque que je trouve très pratique personnellement .



Citation:
////////////////////////////////////////////////////
//::Fait par RAT
//:: nom du script : rat_replace
//////////////////////////////////////////////////////

// replace est une fonction permettant de changer une partie d'un mot par un autre mot
// exemple: smot : WP_way_1
// 1) sR1=WP sR2=RN resultat=RN_way_1
// 2) sR1=W sR2=N resultat=NP_Nay_1
string replace ( string smot , string sR1, string sR2 );

string replace ( string smot , string sR1, string sR2 )
{

///////////////////////////////
// Definition des variables
//////////////////////////////
int idebut=0;
int i=0;
int i3=0;
int ifin=GetStringLength(smot); // longueur du mot
int ifinr2=GetStringLength(sR2); // longueur du mot cherche
int ifinr1=GetStringLength(sR1); // longueur du mot remplacer
int lenrecup=0;
string remplace,insert,recup,concatenation;

while (i<=ifin) //boucle qui s'incremente suivant la longueur du mot
{

//test2=GetStringLeft(smot,i);


recup=GetSubString (smot,i3,ifinr1); // recuperation de la sous-chaine suivant
//la position du mot et le nbre a compter
//dependant de la longueur de sR1

//SendMessageToPC (oPC,test2);

if (recup!="")
{
if (recup==sR1) // si il trouve une egalite , alors il va remplacer sR1 par sR2
{
lenrecup=GetStringLength(recup); //longueur du mot trouve
insert=InsertString(smot,sR2,lenrecup); //insertion du sR2 a la position de recup
concatenation=concatenation + GetSubString (insert,lenrecup,ifinr2);
// et concatenation
// SendMessageToPC (oPC,concatenation);

}
else
{ concatenation= concatenation + recup;} //concatenation du mot qui est a
//garder

}
else
{break;} // si le string est une chaine vide il arrete la boucle

//////////////////////////
//incrementation
/////////////////////////

i3=i3+ifinr1;

i++;
}

//SendMessageToPC (oPC,concatenation);
//////////////////////////////////////////////////
//recuperation de la variable et renvoie la valeur
/////////////////////////////////////////////////

remplace=concatenation;


return remplace;



}


Lien direct vers le message - Vieux
Avatar de Blam
Blam
Roi
 
Avatar de Blam
 
Je suis nul en script
et la je comprends même pas a quoi ça corresponds !!

on peut m'expliquer?
__________________
Congnois toy toy mesme. Nulle gloire dans le sang inutile
Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
et voici , une autre bibliothèque que je me suis amusé à faire!
Citation:

////////////////////////////////////////
///Source tire sur zdm_generic_001
///Modifie par RAT
///pour creer le deplacement aleatoire
///nom du script : rat_i0_generic
///////////////////////////////////////
#include "NW_I0_GENERIC"

//fonction pour rendre plus vivant en faisant une demarche aleatoire a partir de waypoint
void RunCircuitrat(int nTens, int nNum, int nRun = FALSE, float fPause = 1.0);
void WalkWayPointsrat(int nRun = FALSE, float fPause = 1.0);
void RunNextCircuitrat(int nRun = FALSE, float fPause = 1.0);
int maxwaypoint();

void WalkWayPointsrat(int nRun = FALSE, float fPause = 1.0) //Run first circuit
{
ClearAllActions();
string DayWayString;
string NightWayString;
string DayPostString;
string NightPostString;
string sWay;
string sPost;

//The block of code below deals with night and day cycle for postings and walkway points.
if(GetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING))
{
DayWayString = "WP_";
NightWayString = "WN_";
DayPostString = "POST_";
NightPostString = "NIGHT_";
}
else
{
DayWayString = "WP_";
NightWayString = "WP_";
DayPostString = "POST_";
NightPostString = "POST_";
}

if(GetIsDay() || GetIsDawn())
{
SetLocalString(OBJECT_SELF, "NW_GENERIC_WALKWAYS_PREFIX", DayWayString);
SetLocalString(OBJECT_SELF, "NW_GENERIC_POSTING_PREFIX", DayPostString);
}
else
{
SetLocalString(OBJECT_SELF, "NW_GENERIC_WALKWAYS_PREFIX", NightWayString);
SetLocalString(OBJECT_SELF, "NW_GENERIC_POSTING_PREFIX", NightPostString);
}


sWay = GetLocalString(OBJECT_SELF, "NW_GENERIC_WALKWAYS_PREFIX");
sPost = GetLocalString(OBJECT_SELF, "NW_GENERIC_POSTING_PREFIX");

//I have now determined what the prefixs for the current walkways and postings are and will use them instead
// of POST_ and WP_

if(GetSpawnInCondition(NW_FLAG_STEALTH))
{
//MyPrintString("GENERIC SCRIPT DEBUG STRING ********** " + "Attempting to Activate Stealth");
ActionUseSkill(SKILL_HIDE, OBJECT_SELF);
}
if(GetSpawnInCondition(NW_FLAG_SEARCH))
{
//MyPrintString("GENERIC SCRIPT DEBUG STRING ********** " + "Attempting to Activate Search");
ActionUseSkill(SKILL_SEARCH, OBJECT_SELF);
}

//Test if OBJECT_SELF has waypoints to walk
string sWayTag = GetTag( OBJECT_SELF );
sWayTag = sWay + sWayTag + "_01";
object oWay1 = GetNearestObjectByTag(sWayTag);
if(!GetIsObjectValid(oWay1))
{
oWay1 = GetObjectByTag(sWayTag);
}
if(GetIsObjectValid(oWay1) && GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS))
{
//turn off the ambient animations if the creature should walk way points.
SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, FALSE);
SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS, FALSE);
}

if(GetIsObjectValid(oWay1))
{
int nNth = 1;
int nTens;
int nNum;
int nTens2;
int compt=0;
int ndizaine=0;
int NumMax=0;
object oNearest = GetNearestObject(OBJECT_TYPE_WAYPOINT, OBJECT_SELF, nNth);
while (GetIsObjectValid(oNearest))
{
string sNearestTag = GetTag(oNearest);
//removes the first 3 and last three characters from the waypoint's tag
//and checks it against his own tag. Waypoint tag format is WP_MyTag_XX.
if( GetSubString( sNearestTag, 3, GetStringLength( sNearestTag ) - 6 ) == GetTag( OBJECT_SELF ) )
{
string sTens = GetStringRight(GetTag(oNearest),2);
nTens = StringToInt(sTens)/10;
nNum= StringToInt(GetStringRight(GetTag(oNearest),1));



oNearest = OBJECT_INVALID;
}
else
{
nNth++;
oNearest = GetNearestObject(OBJECT_TYPE_WAYPOINT,OBJECT_SELF,nNth);
}
}
RunCircuitrat(nTens, nNum, nRun, fPause); //***************************************
ActionWait(fPause);
ActionDoCommand(RunNextCircuitrat(nRun, fPause));
//ActionDoCommand(SignalEvent(OBJECT_SELF,EventUserDefined(2)));
}
else
{
sWayTag = GetTag( OBJECT_SELF );
sWayTag = sPost + sWayTag;
oWay1 = GetNearestObjectByTag(sWayTag);
if(!GetIsObjectValid(oWay1))
{
oWay1 = GetObjectByTag(sWayTag);
}

if(GetIsObjectValid(oWay1))
{
ActionForceMoveToObject(oWay1, nRun, 1.0, 60.0);
float fFacing = GetFacing(oWay1);
ActionDoCommand(SetFacing(fFacing));
}
}
if(GetIsObjectValid(oWay1) && GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS))
{
SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, FALSE);
SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS, FALSE);
}
}

void RunNextCircuitrat( int nRun = FALSE, float fPause = 1.0)
{
RunCircuitrat(0,1, nRun, fPause); //***************************************
ActionWait(fPause);
ActionDoCommand(RunNextCircuitrat(nRun, fPause));
//ActionDoCommand(SignalEvent(OBJECT_SELF,EventUserDefined(2)));
}

//::///////////////////////////////////////////////
//:: Run Circuit
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Calculates the proper path to follow along a
predetermined set of way points
*/
//:://////////////////////////////////////////////
//:: Created By: Aidan Scanlan
//:: Created On: July 10, 2001
//:://////////////////////////////////////////////


//:://////////////////////////////////////////////
//:: Créé par: RAT
//:://////////////////////////////////////////////
int maxwaypoint()

{
//////////////////////////////
//Declaration des variables
/////////////////////////////
int nNth = 0;
int nrecup,nbr,nTens2;
int compt=0;
string ndizaine;
int NumMax=0;
object oNearest = GetNearestObject(OBJECT_TYPE_WAYPOINT, OBJECT_SELF);

////////////////////////////////////
//cacule du waypoint le plus grand
///////////////////////////////////
while (GetIsObjectValid(oNearest))
{
string sNearestTag = GetTag(oNearest);

if( GetSubString( sNearestTag, 3, GetStringLength( sNearestTag ) - 6 ) == GetTag( OBJECT_SELF ) )
{
string sTens = GetStringRight(GetTag(oNearest),2);
nrecup = StringToInt(sTens)/10;
nbr= StringToInt(GetStringRight(GetTag(oNearest),1));

ndizaine=IntToString(nrecup) + IntToString(nbr) ;
nTens2=StringToInt(ndizaine);

if (nTens2> NumMax ) /// si le nTens2 est superieur alors
{NumMax=nTens2;} /// NumMax recupere le chiffre le plus grand

//oNearest = OBJECT_INVALID;


}

nNth++; // incrementation du nbre d'objet qui se trouve
// sur l'area
oNearest = GetNearestObject(OBJECT_TYPE_WAYPOINT,OBJECT_SELF,nNth);



}



return NumMax;


}


void RunCircuitrat( int nTens, int nNum, int nRun = FALSE, float fPause = 1.0)
{

////////////////////
//Variables
///////////////////

string sWay = GetLocalString(OBJECT_SELF, "NW_GENERIC_WALKWAYS_PREFIX");
int Maxint=0;
int finalint=0;
int actrand;
string actrand2;
int i=0;
object oTargetPoint;
/////////////////////////////////////////////////////////
//appelle de la fonction et recupere le nbre de waypoint
/////////////////////////////////////////////////////////

Maxint=maxwaypoint();
finalint=Maxint -1; //retire un pour le random

//////////////////////////////////////////////////
//boucle de deplacement du npc suivant le maxint
//////////////////////////////////////////////////
while(i <= Maxint)
{


actrand=Random(finalint); // random du finalint)chiffre aleatoire donc de 0 a finalint
actrand=actrand+1;//on rajoute +1 comme le premier waypoint est a 01

if (actrand < 10) //si c en dessous de 10 alors on rajoute un zero pour
{actrand2="0" + IntToString(actrand);}//respecter la gestion des waypoints
else
{ actrand2=IntToString(actrand); }

// concatenation pour avoir le tag du waypoint
oTargetPoint = GetWaypointByTag(sWay + GetTag(OBJECT_SELF) + "_"+ actrand2);
ActionWait(fPause);
ActionMoveToObject(oTargetPoint, nRun); //deplacement vers l object

i++; //incrementation pour la boucle


}
}
//:://////////////////////////////////////////////
//:: Fin du script
//:://////////////////////////////////////////////

Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
Re: Je suis nul en script
Citation:
Provient du message de Blam
et la je comprends même pas a quoi ça corresponds !!

on peut m'expliquer?
Salut blam, pour t'expliquer un peu, enfin je vais essayer .
Dans la plupart des langages comme php4, ou ASP3, mm vb6.0 etc.... ils ont une fonction qui permette de prendre une partie de chaîne pour la remplacer par une autre.
Je vais essayer te donner un exemple.

par exemple : string sChaine="nw_demo"

par rapport a cette chaîne, un item par exemple possède ce tag, qui fait que quand tu l'utilise cela va créer un monstre avec pour tag "monstre_demo"

donc cela va te permettre de pouvoir faire un remplacement de chaine

string srep= replace("nw_demo", "nw","monstre")

cela va faire que srep aura pour valeur "monstre_demo" car la fonction aura remplacer nw par monstre.

un autre exemple :
string srep=replace ("nw_never","n","R")
donc "Rw_Rever"
etc

Enfin bon j'espère que je me suis fais à peu près comprendre lol .
Lien direct vers le message - Vieux
Avatar de Frolo Xeres
Frolo Xeres
Alpha & Oméga
 
Avatar de Frolo Xeres
 
-> Aaahhh ! Vive les programmeur !
-> Mais ceux qui programment c'est mieux !
Lien direct vers le message - Vieux
Avatar de Blam
Blam
Roi
 
Avatar de Blam
 
a tes souhait !
merci rat, mais je suis trop nul, j'ai même pas compris ton explication, j'ai <0 pour les notions de base
__________________
Congnois toy toy mesme. Nulle gloire dans le sang inutile
Lien direct vers le message - Vieux
Avatar de Mastokk
JOL Mastokk
Alpha & Oméga
 
Avatar de Mastokk
 
si j'ai bien compris, ça permet en écrivant le string correspondant d'appeler une fonction pré-écrite dans la bibliothèque.
Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
je vais vous donner un exemple que j'ai utilisé pour mes test sur ma bibliothèque cela sera plus simple:

object oActivator = GetItemActivator();
object oLivre = GetItemActivated();

//si par exemple le livre se nomme Le Livre du Demon donc le tag
//peut-être "livremonster_balor"
// et vous aurez au préablement créer un démon personnalisé
//avec comme resref "lm_balor"

if (GetStringLeft(GetTag(oLivre),13)=="livremonster_" )
{

string stag=GetTag(oLivre);

string srepl;

location lLoc= GetLocation(oActivator);

srepl=replace(stag,"livremonster","lm");

//SendMessageToPC (oActivator,srepl);

CreateObject(OBJECT_TYPE_CREATURE,srepl,lLoc);

return;
}
Lien direct vers le message - Vieux
Avatar de Blam
Blam
Roi
 
Avatar de Blam
 
Ok
Vu ! pas sur de savoir l'utiliser mais je vais m'y mettre.


M'ci
__________________
Congnois toy toy mesme. Nulle gloire dans le sang inutile
Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
de rien et excusez moi si j'ai eu du mal à vous l'expliquer .
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
J'ai écrit cette même fonction il y a peu de temps et je te signale que ta mise en place m'as l'air assez lourde, une fonction aussi longue pour faire si peu de chose...

Code PHP:
string StringReplace(string s1string s2string s3)
{
  
int nTemp;
  
int nL GetStringLength(s3);
  
int nLength GetStringLength(s1);
  
string sTemp;
  
string sR "";

  while ((
nTemp FindSubString(s3s1)) >= 0)
    {
    
sTemp GetStringLeft(s3nTemp);
    
s3 GetStringRight(s3nL nLength nTemp);
    
sR sR sTemp s2;
    
nL GetStringLength(s3);
    }
  
sR+=s3;

  return 
sR;

Sinon, c'est bien d'en faire profiter les autres , en fait j'avais écrit cette fonction en réponse à une question sur un autre forum, donc je l'avais posté là-bas mais..
Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
ba si tu vires tous les commentaires la fonction ne fais qu'une trentaine de ligne, mais c'est vrai qu'elle reste plus longue que la tienne .

Je ne l'ai peut être pas assez optimiser sûrement.
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
C'est pas tellement la longueur que je te reproche, c'est surtout les boucles. Tu fais là un boulot que FindSubString() fait sans doute mieux (plus rapidement en fait). Non que tes boucles ne soit pas bien pensé mais FindSubString() est probablement une fonction qui a été programmé directement en C, utiliser d'autres fonctions "créés par Bioware" pour en émuler le fonctionnement est forcément plus long, surtout si la chaîne de caractère est longue...
Mais sinon c'est très bien.
Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
vivi je te comprends tout à fait!
C'est juste que cela fait que depuis 2 semaines que je code sur never, donc je ne connaissais pas toutes les fonctions de never. Et je n'avais pas cherche cette fonction. .
Mais tu as totalement raison, les autres langages possèdent à peu près la mm fonction .
Mais merci de l'info cela me servira pour les autres scripts que je ferai
Lien direct vers le message - Vieux
Avatar de coolstar
coolstar
Alpha & Oméga
 
Avatar de coolstar
 
Welcome et Gracie pour cette louable et remarquable initiative!!

Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Une petite bibliothèque pour vous!
   

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

© 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