Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Prise de conscience sur les BluePrint (moules)
Prise de conscience sur les BluePrint (moules)
Par Etienne le 5/11/2002 à 9:34:17 (#2483893)
J'utilise abondament dans mon module l'événement onEnter (et onExit) de la zone afin de générer les personnages en nombre aléatoire. Ils ont un parcours afin de faire une petite balade et un dialogue avec quelques tirage aléatoire.
Dans les maisons par exemple j'utilise
domestiques : al_domestique
enfant : al_enfant
Epouse : al_epouse
Epoux : al_epous
Majordome : al_majordome (pour les manoires surtout)
...etc...
dans les hopitaux, ladrerie et Lazaret, j'ai des pretres, medecin, soignantes et malades.
MAis je me suis rendu compte que ce beau monde tente d'aller d'une zone à une autre s'il y a le tag
WP_al_[nom]_0n
Et je puis par conséquent avoir plusieurs WP_al_[nom]_01
dans des zones différentes.
Ce qui veux dire que je vais devoir faire plusieurs modèles (BluePrint) un pour chaque zone afin d'avoir un TAG différents. puisque la création se fait par le Blueprint.
C'est là qu'interviens une question :
à moins qu'il soit possible de changer le TAG d'un objet créer par son BluePrint en dynamique dans le script. :eureka:
Et sinon encore du boulot, rajouter autant de blueprint qu'il y a de zone l'utilisant.
A plus tous
Par Tynril le 5/11/2002 à 14:09:43 (#2485851)
Bonne idée
Par Etienne le 5/11/2002 à 14:15:32 (#2485897)
Merci
Par eMRaistlin le 5/11/2002 à 14:22:46 (#2485960)
un peu comme un decode (pour ceux qui connaissent SQL) :
tu fais des tags preformatés, genre ceux que tu decris, puis tu fais des operations dessus
FindSubString
GetStringByStrRef
GetStringLeft
GetStringLength
GetStringLowerCase
GetStringRight
GetStringUpperCase
GetSubString
genre : tu prends les 3 derniers caracteres, tu les transforme en chiffres (StringToInt) puis tu fais des operations, puis tu fais l'inverse (IntToString) et tu concatene avec les tags tronqués.
genre :
object oObjectATester = Get_XXXX();
string ancienTag = GeTag(oObjectATester);
int nValeurAChanger = StringToInt(GetStringRight(ancienTag,3));
int newValeur = //operations diverses sur nValeurAChanger
string newTag = (GetStringLeft(ancienTag , GetStringLength-3)+IntToString(newValeur );
Mais bon... t'as interet a etre MEGA rigoureux... perso, je l'utilise tres peu... mais bon... si ca peut te servir...
Par Tynril le 5/11/2002 à 16:45:40 (#2487115)
Perso je serais plus pour les déplacements vectoriels, si les mouvements doivent être précis, le tout décrit en OnSpawn.
Par eMRaistlin le 5/11/2002 à 17:09:40 (#2487396)
C'est le genre de truc à tout faire péter en se gourant d'un dizième quelque part.
Je confirme a nouveau : MEGA MEGA rigoureux... sinon, ca vaut pas le coup...
Par Jedaï le 5/11/2002 à 19:53:48 (#2489229)
Sinon, vu que j'ai fait une bibliothèque entière avec presque que de la manipulation de string (pour des tokens vraiment personnalisés et des tokens dans les SpeakString() :) ), je suis tout prêt à faire ce genre de choses.
PS : Pour ceusses que ça intéresse, ma bibliothèque est sur NWN-Fr, elle permet de mettre des trucs du genre "Bonjour , votre ami est à côté de , je vous sert <=nain:<=f:quoi comme alcool/un verre d'eau>/une bière> ?" et également de créer des tokens dynamiques du style pour les dialogues très facilement. :)
Par Etienne le 5/11/2002 à 23:00:19 (#2491117)
Provient du message de Tynril
Vire tous tes waypoints et met un RandomWalk sur le OnSpawn de tes PNJs... Parce qu'il n'est pas possible de changer le tag d'un PNJ par script.
Au fait c'est quoi un RandomWalk.
Par eMRaistlin le 5/11/2002 à 23:33:17 (#2491368)
Au fait c'est quoi un RandomWalk.
une fonction coninclude.
C'est pas une fonction de base, mais c'est une fonction qui existe dans les script bIOWare, que tu peut utiliser en faisant le bon include (sorry, je connais pas les noms des script BIOWARE par coeur ^^)
Par LeProctophantasmiste le 5/11/2002 à 23:39:34 (#2491415)
// le PNJ est dans Area01 et le waypoint "WP_02" dans Area02
ActionMoveToObject(GetWaypointByTag("WP_02"));
ActionRandomWalk();
Le premier point, sensé être peu éloigné, ayant été déterminé avant que le PNJ ne change de zone, ce script crée un effet étrange: le PNJ va aller dans Area02 puis se téléporter dans Area01 et y rester pour y déambuler.
Par Jedaï le 6/11/2002 à 14:46:40 (#2495715)
Par eMRaistlin le 6/11/2002 à 14:50:46 (#2495758)
Ouaipp.. pas possible...
Je reconfirme : CE N'EST PAS POSSIBLE... mais quel interet de les modifier si tu peut les exploiter et les interpreter ?
Par Jedaï le 6/11/2002 à 15:06:45 (#2495897)
Dommage que ça soit pas possible à la création... :(
Par eMRaistlin le 6/11/2002 à 15:20:42 (#2496037)
exemple a 2 balles :
string GetTagByHour(object oObject)
{
string sFirstTag = GetTag(oObject);
int nNewValeur;
if (GetIsNight())
{
nNewValeur = 003; //ou bien tu envoi une autre requete de selection...
}
if (GetIsDay())
{
nNewValeur = 500; //ou bien tu envoi une autre requete de selection...
}
string sNewTag = (GetStringLeft(sFirstTag , GetStringLength(sFirstTag)-3)+IntToString(nNewValeur );
return sNewTag;
}
puis tu utilise
string GetTagByHour(object oObject)
dans ton script...
Par Jedaï le 6/11/2002 à 15:50:12 (#2496321)
De plus tu ne peux récupérer l'objet par cet ersatz de tag que si tu l'enregistre comme flag quelque part (sur le module par exemple). :monstre:
Non, ce qu'il faudrait c'est que Bioware nous ponde une fonction pour changer le tag dynamiquement ou au moins qu'on puisse le spécifier à la création de l'objet. Enfin on peut toujours réver...:rolleyes:
JOL Archives 1.0.1
@ JOL / JeuxOnLine