Système de faction de monstres

Répondre
Partager Rechercher
Voici un petit système scripté, et usant de bases de données SQL qui permet de gérer les monstres en leur attribuant des factions différentes préalablement renseignées par l'utilisateur (mais il y a un exemple fournis avec qui doit couvrir une petite moitié des créatures).
L'intérêt de ce système ? Enfin pouvoir revoir les Kobolds et les Gobelins s'affronter dès qu'ils se rencontrent, jusqu'à ce que des morts-vivants arrivent et en remettent une couche, etc etc.

Les plus du système:
- Voir enfin les monstres s'affronter
- Pas besoin de modifier les monstres de la palette de base
- Vous choisissez qui aime qui, et qui déteste qui
- Les créatures sont assignées à leur faction dès leur spawn

Les moins:
- Peut être un peu complexe à prendre en main
- Les monstres ont tendance à d'abord taper les joueurs avant de s'occuper entre eux
- Le système n'est pas prévu pour gérer les races jouables

Contenu du pack:
- Fichier LisezMoi.txt
- Fichier BDD exemple.txt
- 4 scripts pour Neverwinter Nights 2
- Un fichier Faction regroupant 24 factions qui peuvent servir d'exemple
- 24 Blueprints de créatures correspondant à l'exemple

Comment installer:
- Importer les scripts et blueprint de créatures depuis Faction.erf dans le module
- Copier/coller le contenu de BDD exemple.txt dans une requête SQL du serveur MySQL utilisé
- Copier/Remplacer le fichier REPUTE.fac dans le dossier du module (risque d'écraser le fichier pré-existant, en faire une copie de sauvegarde)

Fonctionnement:
Les scripts permettent d'aiguiller les monstres, si ils correspondent à une définition de la BDD, vers des Factions qui leur correspondent aux mieux, et ce dès le spawn du monstre.

FAQ:
- Je voudrais rajouter une faction de monstre à mon module, comment je fais ?
Pour cela il faut tout d'abord ajouter la faction sur le module (Voir => Factions) et définir ses relations avec les autres factions. Ensuite une créature, préférablement tagée c_faction_NOMDELAFACTION et assignée à la dite faction doit être créée dans la palette de créature du module. Pensez aussi à lui ajouter la variable bUserFaction = 1, pour évitez de possible problèmes. Ensuite direction la base de données, et a vous de remplir une ou plusieurs lignes, qui lieront les créatures du jeu à cette nouvelle faction.

- A quoi correspondent les différentes données d'une ligne dans la BDD ?
module n'a pas d'utilité réelle, mais il est conseillé d'y indiquer le nom de votre module
factionName n'a pas d'utilité réelle, mais il est très fortement conseillé d'y indiquer le nom de la Faction correspondante
blueprint, ici on retrouve le tag de la créature référence associée à la faction
race: Indiquez ici la race des créature qui seront dans cette faction, attention il s'agit ici d'un entier, et non du nom de la race. Pour la correspondance veuillez vous référer à l'éditeur de script intégré à Electron (RACIAL_TYPE_x)
subrace: Indiquez ici la sous-race des créature qui seront dans cette faction, si elle doit être précisée, attention il s'agit ici d'un entier, et non du nom de la sous-race. Pour la correspondance veuillez vous référer à l'éditeur de script intégré à Electron (RACIAL_SUBTYPE_x)
appearance: Indiquez ici l'apparence des créature qui seront dans cette faction, si elle doit être précisée, attention il s'agit ici d'un entier, et non du nom de l'apparence. Pour la correspondance veuillez vous référer à l'éditeur de script intégré à Electron (APPEARANCE_TYPE_x)
Attention, veuillez remplir soit la race seule, soit la race et la sous-race, soit la race et l'apparence !

Pour vous faciliter la tâche quand au remplissage de ces données, vous pouvez aussi décommenter la ligne 41 de sp_faction, puis spawner les créatures dans le module, et regarder les nombres qui leurs sont associés.

Si d'autres questions, vous pouvez me les poser ici.

Lien pour le télécharger: Temporairement ici
MàJ: 27/11/10
- Optimisation et nettoyage des scripts
- Suppression des versions 2DA des fonctions
Je serais ravi en effet d'avoir des retours, que ce soit pour le gameplay, ou pour les choix de programmation.
Je conseillerai juste de le tester sur un module simple, histoire de pouvoir prendre en main le système d'abord ^^
En terme de choix de programmation, je pense qu'il vaut mieux éviter les if (b2DA) et directement proposer deux versions du script (avec les mêmes noms de fonctions). L'utilisateur n'a plus qu'à compiler la version qu'il veut pour que ça fonctionne.
Je pense aussi que pour que le système puisse être ajouté partout sans soucis il faut que tu sortes le code des scripts par défaut (onspawn, onperceive) et que tu l'exécute via ExecuteScript(nom du script), comme dans le x2_mod_def_load.

Et en terme d'optimisations, tu peux légèrement optimiser le code de chooseFactionChange en stockant directement les versions chaîne de caractère de la race, sous-race et apparence plutôt que de les transformer tout le temps, ainsi qu'en évitant des affectations et concaténations de chaîne de caractères inutiles (sans aller dans l'illisible). Il faut aussi ne pas hésiter à arrêter le code au lieu d'entrer dans des else if imbriqués (après c'est chacun ses goûts c'est sûr).

Tu peux arriver à quelque chose comme ça..
Code PHP:

void chooseFactionChange(object oCreature)
{
    
string sRace IntToString(GetRacialType(oCreature));
    
string sSubRace IntToString(GetSubRace(oCreature));
    
string sAppearance IntToString(GetAppearanceType(oCreature));
    
    
string sql "SELECT factionname, blueprint FROM " FACTION_TABLE +
        
" WHERE race = " sRace " AND subrace = ";
    
    
SQLExecDirect(sql "0 AND appearance = " sAppearance);
    if (
SQLFetch())
    {
        
ChangeFaction(oCreatureGetObjectByTag(SQLGetData(2)))
        return;
    }
    
    
SQLExecDirect(sql sSubRace " AND appearance = 0");
    if (
SQLFetch())
    {
        
ChangeFaction(oCreatureGetObjectByTag(SQLGetData(2)))
        return;
    }
    
    
SQLExecDirect(sql "0 AND appearance = 0");
    if (
SQLFetch())
        
ChangeFaction(oCreatureGetObjectByTag(SQLGetData(2)))

Merci bien pour toutes ces recommandations Lv4.
En effet ton code est tout de suite beaucoup plus clair, j'en aurai presque honte d'avoir publié mon accumulation de if tout vilain.

Pour ce qui est des fonctions ayant trait aux 2DA, j'avoue que j'aurais surtout mieux fait de les supprimer. Mais je prend note, il vaut peut être mieux créer deux systèmes de scripts analogues pour ces cas là. Je pensais ça plus simple pourtant avec un if
Je prend aussi note pour les ExecuteScript(nom du script) dans les scripts par défaut.

Petite erreur de ma part, le onperceive ne devrait pas être dans le .erf, je manque vraiment de rigueur (d'ailleurs il n'a pas subit la moindre modification).
J'ai un peu commencé à y retoucher, et finirai ça sans doute dans la journée, mais c'est juste du travail de fond et de l'optimisation, il n'y a pas de changement dans le procédé en vue.
C'est tout à fait testable avec la version en ligne qui est au dessus, mais si tu as un peu de patience, dans quelques heures, voir moins, je devrais avoir mis ça à jour

Edit: Une petite heure plus tard, les scripts ont été mis-à-jour, le lien est dans le premier message du sujet.
Citation :
Publié par Cedric@Shed
Ça c'est de la réactivité! Laisse moi jusque ce week-end et je te fait un retour complet.
Alors qu'est-ce que ça peu donner entre les mains d'un créateur/administrateur de module ? J'espère vraiment que le système soit plaisant à voir en jeu, et facile à mettre en place et à prendre en main.

Si il n'y a pas de soucis, je vais pouvoir passer à un autre petit projet que j'ai en stock (qui aurait un rapport avec les Lycanthropes ).
Je t'avoue que je n'ai pas pu regarder... J'était sur qque chose qu'il faut absolument que je termine! Et surtout, il faut que je réinstalle mon serveur NWN2/NWNX4 ... Mais je compte bien tester car ça m'intéresse énormément!

Tu peux en dire un peu plus sur ton idée de système de Lycanthropes? On sait jamais si j'ai des request!
Pour le système de Lycanthropes, c'est juste un système scripté qui permet aux joueurs de jouer des PJs Lycanthropes en suivant au mieux les règles des livres de D&D (mais le but derrière c'est de pouvoir permettre de jouer tous les archétypes possibles, mais c'est pas encore gagné).
Donc on se sert de Nwnx4 pour stocker les infos sur les archétypes en question, et pour lier un PJ à tel ou tel archétype. Actuellement ce que j'ai permet de jouer un Loup-Garou, et un Rat-Garou, forme animal, humanoïde, et hybride. Les griffes, la morsure, etc... Pour le reste des Lycans, ben il n'y a pas de modèles 3D pour les formes hybrides
Mais c'est encore loin d'être finalisé.
Salut CoinCoin

J'ai regardé ton système, c'est vraiment bien! Par contre, est-il possible de gérer des factions de PJ?

Par exemple, j'ai une faction multi-raciale (humains, elfes, nains...), une autre éxclusivement naine, une autre exclusivement elfe, puis une faction qui rassemblent les factions d'ombre terre.
Je gère cela avec un item dans l'inventaire du PJ pour le moment.

Merci
Déjà, les PJs ne sont pas dans des factions. Mais je suppose que tu veux parler de factions qui seraient issues des races jouables pour les PJs.

Alors dans ce cas là, ce n'est pas prévu par le système. Il est uniquement orienté vers les monstres hostiles aux joueurs, et qui ne sont pas de races/apparences jouables. Le contraire serait fort complexe à mettre en place car ça demanderait beaucoup de critères pour faire des exceptions.

Donc, en résumé, je ne pense pas que le système pourra répondre à tes attentes pour gérer ce type de factions, malheureusement, sauf peut être la partie concernant les créatures d'OutreTerre, si elle ne comporte pas de Drow, Duergar, et Gnome des Profondeur.
OK!

Pas de problême alors, je voyais là surtout une solution NWNX4 pour gérer les factions des joueurs Mais en fait ça n'a rien à voir, le but est de gérer des factions de monstres ici, et ça le fait très bien d'ailleurs.

beau boulot!
Répondre

Connectés sur ce fil

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