Olaaaa terraqueos.Nesse ultimos dias consegui algum tempo para mexer no meu modulo e agora estou tratando da integracao dele com o MySQL.Meu primeiro passo foi tentar achar algum modulo com alguma funcionalidade ja pronta. Acabei pegando o proprio modulo de exemplo que vem no NWNX4. Ele deu um erro ao tentar abrir a unica area que ele ja possuia, mas o importante pra mim eram os scripts. Criei entao duas areas, uma com NPCs para testar algumas funcionalidades e outra com uma criatura hostil para testar o sistema de morte.Com tudo armado, eu abri o script e_mod_load e adicionei os seguinte comandos: if (!doesTableExist("TEXTOS")) { SQLExecDirect("CREATE TABLE TEXTOS (" + "PLAYER VARCHAR(64) NOT NULL DEFAULT '~'," + "TAG VARCHAR(64) NOT NULL DEFAULT '~'," + "NAME VARCHAR(64) NOT NULL DEFAULT '~'," + "TEXTO TEXT," + "EXPIRE INT(11) DEFAULT NULL," + "PRIMARY KEY (PLAYER, TAG, NAME)" + ") ENGINE=MyISAM DEFAULT CHARSET=latin1;" ); if (!doesTableExist("TEXTOS")) { SetLocalString(oMod, "ERROR", "The MySQL plugin could not set up the table 'pwdata'. Please make sure that the mysql userid in xp_mysql.ini has sufficient permissions to create a new table."); PrintString("e_mod_load: CREATE pwdata failed."); return; } }Ou seja, apenas copiei o codigo anterior que verificava a existencia das tabelas pwdata e pwobjdata e as criavam e as adaptei para verificar e criar a tabela TEXTO, que gravara um texto qualquer.Rodei o modulo no NWNX4 e funcionou legal.Meu proximo passo entao era gravar um texto qualquer no banco de dados e recuperar. Tentei usar as funcoes que ja veem no nwnx_sql (GetPersistentString e SetPersistentString), mas nao gravava nada. Eu entao coloquei algumas mensagens de debug e encontrei o problema:As funcoes do nwnx_sql servem apenas para as tabelas ja definidas (pwdata e pwobjdata) e assim criava um comando SQL todo esquisito, como e possivel conferir na screenshot acima. A solucao entao era criar meu proprio script de funcionalidades para a base de dados. Criei entao a sh_sql, inicialmente com apenas 2 funcoes: SetTexto e GetTexto://::////////////////////////////////////////////////////:: sh_sql/* Funcoes para o uso do NWNX4 de acordo com o esquema de base de dados criado por mim. *///::////////////////////////////////////////////////////:: Copyright (c) 2008 SubHeaven World//:: Created By: SubHeaven//:: Created On: 07/10/2008//:://////////////////////////////////////////////////#include "nwnx_sql"/************************************//* Function prototypes *//************************************///Gravar texto do jogador.// oPC: O jogador que esta gravando o texto;// sTexto: O texto a ser gravado na base de dados.void SetTexto(object oPC, string sTexto);//Ler texto do jogador.// oPC: O jogador que gravou o texto anteriormente.string GetTexto(object oPC);/************************************//* Implementation *//************************************/void SetTexto(object oPC, string sTexto){ string sPlayer; string sChar; if (GetIsPC(oPC)) { //SendMessageToPC(oPC, "Its a PC"); sPlayer = SQLEncodeSpecialChars(GetPCPlayerName(oPC)); sChar = SQLEncodeSpecialChars(GetName(oPC)); sTexto = SQLEncodeSpecialChars(sTexto); string sSQL = "SELECT TEXTO " + "FROM TEXTOS " + "WHERE PLAYER = '" + sPlayer + "' " + "AND NAME = '" + sChar + "'"; //SendMessageToPC(oPC, sSQL); SQLExecDirect(sSQL); if (SQLFetch() == SQL_SUCCESS) { SendMessageToPC(oPC, "Exist TEXTO"); // row exists sSQL = "UPDATE TEXTOS SET " + "TEXTO ='" + sTexto + "', " + "WHERE PLAYER = '" + sPlayer + "' " + "AND NAME = '" + sChar + "'"; //SendMessageToPC(oPC, sSQL); SQLExecDirect(sSQL); } else { SendMessageToPC(oPC, "Doesn't exists TEXTO"); // row