NWN2 - La Tour des Arcanes

Bibliothèque MySQL

Répondre
Partager Rechercher
Bonjour !

J'ai bossé rapidement sur une bibliothèque nwn2 où tous les textes sont stockés dans une BDD MySQL

Avantages :
Pas besoin de créer une masse de blueprints : les livres sont générés automatiquement
Donc pas besoin de gérer les stocks de livres dans les bibliothèques
Classement des livres par catégorie (Bestiaire, Module, Dieux, ...)
On peut retrouver la source et l'auteur du livre

Le projet est sur GitHub : https://github.com/CromFr/NWN2Library
vous êtes bien sûr libres de réutiliser ces fichiers dans votre module

Pour l'instant, il n'y a que quelques livres, du coup je cherches plein de récits sur l'univers de D&D !
Si vous connaissez des sites proposant des récits assez courts (moins de 10 000caractères), ou connaissez quelques histoires sympa, je suis preneur !

Merci d'avance
Miniatures attachées
Cliquez sur l'image pour la voir en taille réelle

Nom : library.jpg
Taille : 1440x900
Poids : 1,23 Mo
ID : 164706  
__________________

Dernière modification par Crom29 ; 06/06/2012 à 16h07.
Héhé, c'est cool ça, de plus je suis content de voir que tu te sers de github

Pour les adjonctions de récits, tu devrais peut-être ajouter un dossier "books" qui contiendrait le sql pour chaque livre de sorte que chaque personne puisse ajouter des scripts facilement.

ex : books/fr/dieux/fr-dieux-001-Shantea.sql

Les numéros ne sont pas nécessaires, mais ça permet de savoir facilement ce qui est dans la base
J'ai une petite question qui paraîtra peut-être assez sotte mais ces "books" sont bien des books pour le jeu lui-même n'est-ce pas ?

Comme on commence à le savoir, je ne suis pas douée du tout en technique et j'ai pas encore regardé ton code mais saurais-tu expliquer rapidement comment s'installe cet ajout que tu nous proposes ?

De nôtre côté, on essayera sans doute d'ajouter ça (peut-être pas de suite, il nous reste quelques bugs importants à résoudre, nous sommes toujours en alpha).

En tout cas, merci bien pour cet apport ! En revenant vers Nwn2 je n'imaginais pas encore la communauté si active.
__________________

La seconde version est arrivée : http://fanelya.fr !
IP : fanelya.no-ip.org

Liste de tous les serveurs : http://nwnlist.com
@Laban :
Pas bête du tout ça, ça permettra d'installer que certains livres. Je ferais ça dès que j'aurais un peu plus de livres à mettre
EDIT : j'ai finalement préféré tout mettre dans "BooksFR.sql" et commenter un peu les requêtes. Ainsi qqn qui voudra tout mettre n'aura pas à exécuter 30 fichiers, et qqn qui ne voudra en mettre que quelques unes devra copier/coller les requêtes désirées

@Charlouloute :
qu'entends tu par "pour le jeu lui même" ?
Ce sont des livres qui sont créés avec le contenu de la base de données, et une petite interface graphique permet de les classer par catégorie, de lire les livres et de les acheter (auquel cas on créé un item de la palette sur le joueur et modifie son nom, icône et description)
la bibliothèque peut être installée sur n'importe quel module NWN2 utilisant NWNX4 + MySQL.

Concernant l'installation, tout est détaillé dans le readme. En gros :
- Importation des scripts dans le module
- Écriture d'un script pour ouvrir la GUI (OnUsed d'un placeable par exemple)
EDIT : Plus besoin de l'écrire, il est dans le erf à importer, sous le nom "library_onused"
- Ajout de la GUI (library.xml) côté client
- Modification du fichier qui liste les GUI côté client (ingamegui.ini)

J'espère avoir bien répondu à tes questions

Dernière modification par Crom29 ; 07/06/2012 à 02h35.
Oui pour ma part c'est très claire. Alors je vais encore prendre le risque de paraître un tout petit peu chiante avec une dernière requête (ne te sens pas obligé au pire on fera le test à l'occasion) : un screen de l'UI IG . Au moins là, tout serait complet (selon moi en tout cas) : description, mode d'emploi et illustrations .

Merci en tout cas Crom .
__________________

La seconde version est arrivée : http://fanelya.fr !
IP : fanelya.no-ip.org

Liste de tous les serveurs : http://nwnlist.com
C'est que ça m'a l'air encore plus sympa que je ne le pensais !

Est-ce que ton script permet de créer des bibliothèques différentes ? Exemple concert avec Fanelya : les livres trouvés à Syméria ne sont pas les mêmes qu'à Zyrathul. Il faudrait donc que s'il clique sur ce qui active l'interface, selon la bibliothèque où le PJ se trouve, il ne trouve pas les mêmes ouvrages.

Désolé pour toutes ces demandes mais c'est de l'entrain .
content que ça te plaise !

Je n'avais pas pensé à séparer les livres dans plusieurs bibliothèques... mais c'est assez simple à faire ^^
Je vais modifier un peu la Bdd pour assigner les livres à un plaçable (identifié par son tag)
Je suis toujours ravie de voir ce genre de "petites" choses (si c'était si petit ce serait déjà sur tous les serveurs ^^) proposées pour tous. C'est le genre d'action qui permet à tous les serveurs de progresser. On a de la chance, nous admins de serveur, d'avoir des développeurs indépendants qui essayent de penser à tous. En plus... je boue d'idées pour l'utilisation de ce script .

Question : Est-ce que plusieurs items sur une même zone peuvent avoir le même tag ?
Citation :
Question : Est-ce que plusieurs items sur une même zone peuvent avoir le même tag ?
Oui, objets, plusieurs créatures aussi d'ailleurs (très pratique pour les mouvements d'ensemble). On peut ensuite les traiter dans une boucle :
Code PHP:

int n 0;
object oItem GetObjectByTag("mon_tag");
while ((
GetIsObjectValid(oItem))
{
      ... 
traiter l''item oItem
      n
++;
      
oItem GetObjectByTag("mon_tag"n); // noter le ,n

Attention : un tag se rapporte à un module, pas à une zone. Une erreur classique et pénible à trouver est d'utiliser un même tag pour des objets, plaçables, effets spéciaux ou créatures placés dans des zones différentes en pensant que NWN2 fait la différence.
Citation :
Attention : un tag se rapporte à un module, pas à une zone. Une erreur classique et pénible à trouver est d'utiliser un même tag pour des objets, plaçables, effets spéciaux ou créatures placés dans des zones différentes en pensant que NWN2 fait la différence.
En général, j'utilise surtout GetNearestObjectByTag(...), qui ne prend que les objets de la zone d'execution du script et est (je crois) plus performant que GetObjectByTag().

Citation :
On a de la chance, nous admins de serveur, d'avoir des développeurs indépendants qui essayent de penser à tous.
Indépendant... pas vraiment : Je mappe/scripte sur la Colère d'Aurile (rp-action)
Etant donné que je n'ai pas trouvé de bibliothèque sur le vault, j'ai décidé de partager la mienne
Citation :
En général, j'utilise surtout GetNearestObjectByTag(...), qui ne prend que les objets de la zone d'execution du script et est (je crois) plus performant que Je GetObjectByTag().
Je ne pense pas.

Il y a toujours un débat d'experts là dessus mais qui semble trancher en faveur de GetObjectByTag :

Citation :
Here are the results of the profiling run:

test_gnobt runs 348 total time 4900
test_gobt runs 348 total time 685
test_glo runs 348 total time 1395

So, according to this test, at least, GetObjectByTag outperforms even GetLocalObject, even on a huge mod like HG which probably has upwards of 70,000 objects in play (wild-ass guess based on 50k place count and 566 areas).
le toutim : http://social.bioware.com/forum/1/to...ndex/8147590/1

Pour moi GetObjectByTag va forcément plus vite :
- il n'a besoin que de la liste des des objets
- la liste est triée (B_Tree)
- il fait une recherche binaire, donc très rapide.

Alors que GetNearestObjectByTag ajoute un calcul de distance entre chaque objet de la zone et la référence. On ne doit l'utiliser à mon sens que si l'on ne peut faire autrement (chercher le + proche ennemi par exemple).

Je ne fais que des mods solos, donc je m'autorise des maps très chargées, aucun problème de performance avec GetObjectByTag.
Bonne initiative Crom.

Bon, pas trop dans le sujet.. mais c'est très intéressant cette discussion sur le Get*. Est-ce que vous avez effectué les tests sur nwn2 ? Le lien plus haut concerne le premier opus, je ne suis pas persuadé que les dernières optimisations de nwn1 aient été portée sur le 2.
Citation :
Indépendant... pas vraiment : Je mappe/scripte sur la Colère d'Aurile (rp-action)
En plus je le sais (ta signature) et je dis des bêtises. Disons alors des scripteurs généreux .

Je ne participerai pas au débat technique vu mes connaissances :P.
__________________

La seconde version est arrivée : http://fanelya.fr !
IP : fanelya.no-ip.org

Liste de tous les serveurs : http://nwnlist.com
GetNearestObjectByTag : j'ai eu des soucis de fiabilité.

Pour le SQL je trouve ça dommage parcequ'automatiser un import de fichiers SQL multiple c'est mieux mais il est vrai que c'est moins pratique à gérer.
mise a jour : on peut maintenant gérer plusieurs bibliothèques.
ça commence à être un peu galère d'ajouter des livres... je vais peut être faire une petite appli java pour simplifier ça ^^
finalement j'ai fait une appli java un peu plus chiadée que prévu, en reprenant mon projet informatique de fin d'année ^^
https://github.com/CromFr/NWN2Librar...master/Manager

l'appli va certainement être améliorée : sélection des catégorie parmi celles existantes, aide pour le choix de l'icône, filtrage des livres par catégorie / bibliothèque.



Je ne vois pas trop l'intérêt de faire un éditeur complet ingame : c'est la porte ouverte à des abus des joueurs. Je préfère que les joueurs postent leur histoire sur le forum du module et que ce soit un MD/admin qui ajoute le livre.
Réponse idiote mais quand je regarde une GUI "native" on voit des choses comme

<UIButton name="Continue" strref="39" x="ALIGN_CENTER" y="310" style="STYLE_SMALL_BUTTON"
OnLeftClick=UIButton_Input_ScreenOpen("SCREEN_MULTIPLAYERMENU") />

Le strref="39" fait référence à un fichier qui permet de changer les noms, non ?
Comme le dit Laban dans ce genre de cas tu vas avoir un/plusieurs fichier, que tu charge en fonction du langage choisi (donc il faut le fournir avec le binaire). Ensuite tu utilise des variables dans ton code qui sont "traduites" par leur équivalent dans le fichier de langue.

Le plus simple c'est d'utiliser un format simple dans ton langage de programmation (XML ? INI ?). Tu aurais par exemple:
Code:
<lang>
  <value id="BOOK">Livre</value>
</lang>
Puis:
Code:
  text = translate("BOOK");
Pour never, il me semble que le strref="39" fait référence au dialog.tlk dans lequel tu as la ligne 39 qui correspond à ta traduction. Je te conseille cependant de te baser sur des identifiants en chaîne de caractères sinon tu vas vite t'y perdre.

Si tu n'as pas envie de te prendre la tête tu peux aussi mettre des constantes dans plusieurs fichier de code à part, et changer de l'un à l'autre quand tu compile pour un certain langage.
Répondre

Connectés sur ce fil

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

Recherche avancée