Masquer le nom des PJs... Peut etre une solution

Répondre
Partager Rechercher
Bonjour à tous, voila je suis tombé sur un sujet dans le forum de la bibliothèque qui traite d'une soit disant capuche qui cacherais le nom des pjs. Le problème, c'est que le code utilisé ne ressemble pas à du NWNscript et je suis perdu.
Voila le Code en question:
Code:
public override void OnRemoved ( object parent ) 
{ 
  if (parent is Mobile) 
  { 
    ((Mobile) parent).NameMod = null; 
    ((Mobile) parent).Title = m_title; 
  } 
  base.OnRemoved(parent); 
} 

public override void Serialize( GenericWriter writer ) 
{ 
  base.Serialize( writer ); 
  writer.Write( (int) 1 ); // version 
  writer.Write( (string) m_title ); 
} 

public override void Deserialize( GenericReader reader ) 
{ 
  base.Deserialize( reader ); 

  int version = reader.ReadInt(); 
  if ( version == 0 ) 
  { 
    m_title = reader.ReadString(); 
  } 
  m_title = reader.ReadString(); 
  } 
} 
} 



Dans le repertoire ScriptsItemsSkill Items crée masque.cs avec dedans : 

// created on 22/03/2003 at 12:15 
// Masque d'anonymat par Morlock 

using System; 
using Server; 
using Server.Mobiles; 
using Server.Network; 

namespace Server.Items 
{ 
  public class Cagoule : BaseHat 
  { 
    private string m_title; 

    [Constructable] 
    public Cagoule() : this( 0 ) 
    { 
    } 

    [Constructable] 
    public Cagoule( int hue ) : base( 0x1409, 0x387 ) 
    { 
      Weight = 2.0; 
      Name = "Cagoule"; 
    } 

    public Cagoule( Serial serial ) : base( serial ) 
    { 
    } 

    public override bool OnEquip (Mobile from) 
    { 
      m_title = from.Title; 
      if (from.Female) 
      { 
        from.NameMod = "Femme en cagoule"; 
        from.Title = ""; 
      } 
      else 
      { 
        from.NameMod = "Homme en cagoule"; 
        from.Title = ""; 
      } 
      return base.OnEquip( from ); 
    } 

  public override void OnRemoved ( object parent ) 
  { 
    if (parent is Mobile) 
    { 
      ((Mobile) parent).NameMod = null; 
      ((Mobile) parent).Title = m_title; 
    } 
    base.OnRemoved(parent); 
  } 

  public override void Serialize( GenericWriter writer ) 
  { 
    base.Serialize( writer ); 

    writer.Write( (int) 1 ); // version 
    writer.Write( (string) m_title ); 
  } 

  public override void Deserialize( GenericReader reader ) 
  { 
    base.Deserialize( reader ); 

    int version = reader.ReadInt(); 
    if ( version == 0 ) 
    { 
      m_title = reader.ReadString(); 
    } 
    m_title = reader.ReadString(); 
    } 
  } 
}
Et voila le topic en question:cacher le nom des PJs
Personnellement moi j'émets quelques doutes sur ce script. Il y a trop d'inconnu et trop d'indices qui laisse à penser que ce script est peut être utilisé dans un autre jeu.

Le premier indice est celui-ci : // created on 22/03/2003 at 12:15

Si un tel script avait été créé depuis cette date, ce qui fait à peu près 9 mois après la sortie du jeu NWN en france, pourquoi alors tous les posts réclamant à Bioware la possibilité de modifier le nom d'un objet ? Bioware a rétorqué que c'est impossible pour raison de codage interne et qu'aucun code ne viendra jamais modifier le nom d'un objet. Voila un script qui prouverait que les concepteurs du jeu aient tort. Je suis sceptique.

Autre indice : Dans le repertoire ScriptsItemsSkill Items crée masque.cs avec dedans :

Alors moi je pose quand même la question à savoir ou se trouve se fameux répertoire ? ScriptsItemsSkill n'existe pas sous le répertoire NWN. De plus l'extension cs m'est totalement inconnu ! Est ce que quelqu'un la connaît ?

Si tant est si bien qu'on ai un compilateur qui veuille bien compiler ce code, il faudrait trouver comment utiliser les fichier compilés.

De plus en lisant la bibliothèque, il y a une personne qui dit avoir vu des personnes qui ont vu un PJ sans nom. Bah, excusez du peu de foi de ma part, mais moi aussi je peux faire ca !

PNJ avec nom

PJ sans nom

Il n'y a aucune magie, aucun script et ca fonctionne depuis une éternité. Auparavant on utilisait LETO pour effacer les champs FirstName et LastName manuellement après avoir créer le personnage en question.

Aujourd'hui, progrès oblige, on peut le faire automatiquement grâce à NWNX2 et le pluggin LETO avec un petit script sous aurora du style :

Code PHP:

 string LetoSetName(string sNameint iType)
{
string sRetour;
switch(
iType)
{
case 
:
{
sRetour "<gff:set 'FirstName' '";
} break;
case 
:
{
sRetour "<gff:set 'LastName' '";
} break;
}
sRetour += sName "'>";
return 
sRetour

Donc voila quoi. Je persiste à croire qu'il s'agit d'une confusion et que ce script doit servir à un autre jeu. Sinon, depuis le temps on l'aurait vu cette fameuse cagoule !
c'est un script c# de l'emulateur runuo , sa a rien a voir avec nwn (j'ai codé la dessus 3 ans , je suis certain de ce que j'avance, )

RunUO est un emulateur de serveur Ultima Online

le fonctionnement du script est facile a reproduire .

lorsque l'on equipe l'item il change le nom du perso en "homme cagoulé" et stocke dans la db le vrai nom de la personne , lorsque l'on desequippe la cagoule , on renomme le perso avec la sauvegarde dans la DB

P.S: meme pour runuo ce script est buggé la variable pour stocker le nom du perso n'existe meme pas et elle n'est pas sauvegardée , uniquement son titre , apres usage le gars va s'appeller ..... null
euh si je lit bien sa doit pa etre super compliqué a faire , mais je suis NB dans le script NWN

si on prend un objet special avec se tag :"tag_item_incognito" et un script comme sa

Code:
//////////////////////////////////////////////////////////////////////////////
//A ajouter dans le OnActivate du module.
//////////////////////////////////////////////////////////////////////////////

void main()
{
  object oItem = GetItemActivated();
  string sItem = GetTag( oItem );
  object oPlayer = GetItemActivator();

  if ( sItem == "tag_item_incognito" )
  {
    if ( GetLocalInt( oItem, "DejaCree" ) != 1 )
    {
 la on sauve le nom du pj dans une variable et on utilise le truc de Mickey974 pour enlever le nom
    }
    else
    {
et ici on utilise le systeme de Mickey974 mais en remplaçant les blanc par les variables nom et prénom
    }
  }
}
etle tour est joué , mais bon sa fait a peine 7 jours que je m'interesse a nwn en général donc je suis peut etre dans le faux , car je ne sais pas si les joueurs ont un identifiant unique stockable genre numero de serie.
bon alors plusieurs points

@Garrath

alors il y a tout d'abord la version 2.61 de NWNX2 qui vient de sortir que tu peux trouver ici

Ensuite il faut aller sur ca pour récupérer le pluggin nwnx-mysql permettant la connexion direct entre NWNX2 et MySQL (sans driver ODBC)

Puis il faut aller la

ATTENTION

Il faut s'y connaître un minimum dans les configurations du serveur MySQL et les autorisations. Suivez les recommandations.

@Cristaal

Ben c'est pas tout à fait comme cela que ca fonctionne. La fonction que j'ai crée pour l'exemple est une fonction parmi une bonne cinquantaine. Cette fonction est encapsulée dans d'autres scripts et ne peut pas être utilisé telle quelle.

Je te conseille de lire les allocutions de Primogenitor et DragonSong sur le forum de bioware et de downloader ceci.

Moi en tout cas je confirme que cela fonctionne parfaitement car je finalise en ce moment même un système de customisation TOTAL directement en jeu. Et vous pouvez vraiment TOUT faire. Même supprimer les noms des personnages joueurs si le coeur vous en dit.

NOTA BENE : Chaque modification du fichier bic faite par Leto-NWNX demande que le personnage soit d'abord déconnecté. Une modification qui serait faite pendant que le PJ est connecté serait sans valeur.
Merci Mickey...
Je vais tacher de regarder cela...

Bon on continue HS mais ca m'interresse
Est-ce que tu sais si la version pour acceder a MySql sans passer par ODBC permet de svg directement un objet en base comme il semble que cela soit possible avec la version ODBC2 (en tout cas ce que j'en ai compris sur le forum NWNX2)?
GetPersistantObject et SetPersistantObject à mon avis sauve une partie dans la base mysql et le reste dans une table NWN (le reste étant l'objet proprement dit).

ensuite il y a un pointeur qui permettrait de hooker la mémoire (SCORCOSQL que tu actives dans le fichier d'ini) ou se trouve l'objet et de le sauvegarder dans MySQL, mais pour l'instant, je sais pas ce que ca vaut.
ah moi ce que j'ai compris c'est qu'avec ODBC2 nwnx2 permet de svg un objet directement en base MySQL dans un blob (colonne de type blob c'est une zone pour recevoir du binaire) et ca ca serait carrement cool... va falloir que je creuse cette histoire... euh... quand j'aurais le temps...
tu peux mettre n'importe quoi dans un blob mais il y a 4 ans quand je gerais des serveur SQL , c'etait LE truc qui foutait les chocotte a tout les gestionnaires de DB .

la Gestion des blob est devenu stable ?
Comme je te disais, si tu actives l'option hookscorco dans le fichier ini (normalement activé par défaut) tu dois pouvoir enregistrer dans le champ val de la table pwobjdata.

Cependant, moi ce que j'en ai vu, c'est que ca ne fonctionne pas. Je ne dis pas que cela ne marche pas, car il y a sûrement des modifications ou des paramétrages à faire et je n'ai pas eu le temps honnêtement de m'y pencher sérieusement.

Il n'y a aucun objet blob dans le champ val de la table pwobjdata qui apparaît, et ce, même si hookscorco est activé, c'est le seul test que j'ai fait avec le aps_demo.mod.
Répondre

Connectés sur ce fil

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