· 9 years ago · Sep 02, 2017, 07:54 PM
1'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2'@@@@@@@@@@@@@@@@@ Modulo desarrollado por Lain @@@@@@@@@@@@@@@@@@@@@@@@@@
3'@@@@@@@@@@@@@@@@@ Pasamos todo el manejo de chars a SQL @@@@@@@@@@@@@@@@@
4'@@@@@@@@@@@@@@@@@@@@@@@@@@@ NACHO SE LA COME @@@@@@@@@@@@@@@@@@@@@@@@@@@@
5'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
6Option Explicit
7
8' @@ Mensajes de error de la DB
9
10Public Enum DBErrorMsg
11
12 NO_ERROR = 1 ' No hubo ningun error
13 PERSONAJE_NO_EXISTE ' El personaje no existe (Logueo personajes)
14 PERSONAJE_EXISTE ' El personaje existe (Creacion personajes)
15 CUENTA_EN_USO ' La cuenta esta siendo utilizada (Logueo cuentas)
16 PASSWORD_MISMATCH ' La password no coincide (Logueo de cuentas)
17 personaje_baneado ' El personaje esta baneado (Logueo personaje)
18 DB_ERROR ' Hubo un jodido error y lo avisamos
19
20End Enum
21
22' @@ Para leer el archivo .ini
23
24Private Type DB_Param
25
26 CustomCs As String
27 DriverVer As String
28 Server As String
29 DBName As String
30 UserID As String
31 Pass As String
32 Optimizar As Byte
33
34End Type
35
36' @@ El flaco quiere banear o solo aplicar una pena?
37
38Public Enum DBPenaType
39
40 TypePena = 0 ' Advertencia
41 TypeBan ' Ban
42
43End Enum
44
45' @@ Miscellaneous
46
47Public Const USUARIO_BANEADO As Byte = 1 ' 1 significa baneado
48Public Const INVALID_INDEX As Byte = 0 ' Index invalido, comienza en 1
49Public Const PERSONAJE_LOGUEADO As Byte = 1 ' 1 significa Logged
50Public Const MAX_PESO_LOGS As Long = 1048576 ' bytes
51Public Const NINGUNA_PENA As Byte = 0 ' No tiene ninguna pena
52Public Const PENA_CUENTA As Byte = 0 ' Es una pena para la cuenta
53Public Const PENA_PERSONAJE As Byte = 1 ' Es una pena para un personaje
54
55Private Const INVALID_RETURN As Long = -1 ' Si devuelve -1 significa que algo salio mal
56Private Const ASCII_LOWER_LIMIT_CHAR As Byte = 32 ' Mas abajo de esto no deberiamos meter
57Private Const ASCII_UPPER_LIMIT_CHAR As Byte = 122 ' Mas arriba de esto hay problemas con Unicode
58Private Const NO_OPTIMIZAR_DB As Byte = 0 ' En 0 significa no optimizar
59
60' @@ Cuantas columnas creamos?
61
62Private Const MAX_BANCO_SLOTS As Byte = MAX_BANCOINVENTORY_SLOTS ' Slots de banco
63Private Const MAX_INVENTARIO_SLOTS As Byte = MAX_INVENTORY_SLOTS ' Slots de inventario
64Private Const MAX_SPELLS_SLOTS As Byte = MAXUSERHECHIZOS ' Cuantos hechizos puede tener
65Private Const MAX_SKILLS As Byte = NUMSKILLS ' Cuantos skills hay
66Private Const MAX_ATRIBUTOS As Byte = NUMATRIBUTOS ' Cantidad de atributos
67Private Const MAX_PERSONAJES_CUENTA As Byte = MAX_ACCOUNT_CHARS ' Cuantos chars por cuenta
68Private Const MAX_MIEMBROS_GUILD As Byte = MAX_CANTIDAD_MIEMBROS_GUILD ' Cuantos miembros puede tener una guild
69
70' @@ Longitud de VARCHARs
71
72Private Const DB_POSITION_MAX_LENGHT As Byte = 11 ' MAP-XXX-YYY
73Private Const DB_ATRIBUTES_MAX_LENGHT As Byte = (NUMATRIBUTOS * 2) + NUMATRIBUTOS - 1 ' 00-00-00-00-00
74
75' (SLOTS * LENGHT CAMPOS SUMADOS) + SLOTS - CANTIDAD CAMPOS
76
77Private Const DB_BANCO_MAX_LENGHT As Integer = (MAX_BANCOINVENTORY_SLOTS * 9) + (MAX_BANCOINVENTORY_SLOTS - 2)
78Private Const DB_INVENT_MAX_LENGHT As Integer = (MAX_INVENTORY_SLOTS * 10) + (MAX_INVENTORY_SLOTS - 3)
79Private Const DB_SPELL_MAX_LENGHT As Integer = (MAXUSERHECHIZOS * 3) + (MAXUSERHECHIZOS - 1)
80Private Const DB_SKILLS_MAX_LENGHT As Byte = (NUMSKILLS * 3) + (NUMSKILLS - 1)
81Private Const DB_ACCNAME_MAX_LENGHT As Byte = MAX_ACCNAME_LEN
82Private Const DB_MAX_EMAIL_LENGHT As Byte = MAX_ACCMAIL_LEN
83Private Const DB_CHARNAME_MAX_LENGHT As Byte = MAX_CHARNAME_LEN
84Private Const DB_PASSWORD_LENGHT As Byte = LEN_CUENTA_PASS / 2
85Private Const DB_RECUCODE_LENGHT As Byte = LEN_CUENTA_RECU
86Private Const DB_IDUSUARIO_LENGHT As Byte = LEN_TOLERANCIA_HID + 2
87Private Const DB_MAX_BAN_REASON_LEN As Byte = MAX_LONGITUD_RAZON_BAN
88Private Const DB_IPUSUARIO_LENGHT As Byte = MAX_LONGITUD_IP_USER
89Private Const DB_MAX_DESC_LENGHT As Byte = MAX_LONGITUD_DESC_USER
90Private Const DB_MAX_GUILDNAME_LEN As Byte = MAX_LONGITUD_GUILD_NAME
91Private Const DB_SALT_LENGHT As Byte = LEN_PASSWORD_SALT
92
93' @@ Nombre de la base de datos?
94
95Public Const DATABASE_NAME As String = "mpao"
96Public Const DATABASE_TABLE_CHARS As String = "personajes"
97Public Const DATABASE_TABLE_ACCOUNTS As String = "cuentas"
98Public Const DATABASE_TABLE_GUILDS As String = "clanes"
99Public Const DATABASE_TABLE_LOGS_ACTIONS As String = "logs_acciones"
100Public Const DATABASE_TABLE_WARNINGS As String = "penas"
101Public Const DATABASE_TABLE_BANHID As String = "banned_hids"
102
103' @@ Nombres de Columnas de DATABASE_TABLE_CHARS
104
105Public Const CHAR_CHARID As String = "CharID"
106Public Const CHAR_LOGGED As String = "Logged"
107Public Const CHAR_CHARNAME As String = "Nombre"
108Public Const CHAR_ACCID As String = "Cuenta"
109Public Const CHAR_DESC As String = "Description"
110Public Const CHAR_CLASS As String = "Clase"
111Public Const CHAR_RACE As String = "Raza"
112Public Const CHAR_GENRE As String = "Genero"
113Public Const CHAR_ATRI As String = "AT"
114Public Const CHAR_MAXHIT As String = "MaxHit"
115Public Const CHAR_MINHIT As String = "MinHit"
116Public Const CHAR_MAXMANA As String = "MaxMana"
117Public Const CHAR_MINMANA As String = "MinMana"
118Public Const CHAR_MAXHP As String = "MaxVida"
119Public Const CHAR_MINHP As String = "MinVida"
120Public Const CHAR_MAXSTA As String = "MaxEnergia"
121Public Const CHAR_MINSTA As String = "MinEnergia"
122Public Const CHAR_MINSED As String = "MinSed"
123Public Const CHAR_MAXSED As String = "MaxSed"
124Public Const CHAR_MINHAM As String = "MinHam"
125Public Const CHAR_MAXHAM As String = "MaxHam"
126Public Const CHAR_SKILLPTS As String = "SkillPts"
127Public Const CHAR_BANNED As String = "Baneado"
128Public Const CHAR_NAKED As String = "Desnudo"
129Public Const CHAR_DEAD As String = "Muerto"
130Public Const CHAR_NAVEG As String = "Navegando"
131Public Const CHAR_PARALIZ As String = "Paralizado"
132Public Const CHAR_HAMBRE As String = "Hambre"
133Public Const CHAR_SED As String = "Sed"
134Public Const CHAR_POISON As String = "Envenenado"
135Public Const CHAR_GOLD As String = "Gold"
136Public Const CHAR_GOLDBANK As String = "BancoOro"
137Public Const CHAR_ELU As String = "ELU"
138Public Const CHAR_ELV As String = "ELV"
139Public Const CHAR_EXP As String = "EXP"
140Public Const CHAR_NOBLE As String = "Noble"
141Public Const CHAR_HEAD As String = "Head"
142Public Const CHAR_BODY As String = "BodyAnim"
143Public Const CHAR_WEAPON As String = "ArmaAnim"
144Public Const CHAR_HELMET As String = "CascoAnim"
145Public Const CHAR_SHIELD As String = "EscudoAnim"
146Public Const CHAR_POSITION As String = "Pos"
147Public Const CHAR_PENA As String = "Pena"
148Public Const CHAR_NPCKILLED As String = "NPCMuertes"
149Public Const CHAR_USERKILLED As String = "UserMuertes"
150Public Const CHAR_NOBLEREP As String = "NobleRep"
151Public Const CHAR_BURGUESREP As String = "BurguesRep"
152Public Const CHAR_PLEBEREP As String = "PlebeRep"
153Public Const CHAR_LADRONREP As String = "LadronRep"
154Public Const CHAR_BANDIDOREP As String = "BandidoRep"
155Public Const CHAR_ASESINOREP As String = "AsesinoRep"
156Public Const CHAR_PROMEDIOREP As String = "PromedioRep"
157Public Const CHAR_Alianza As String = "Alianza"
158Public Const CHAR_Horda As String = "Horda"
159Public Const CHAR_NEUTRAL As String = "Neutro"
160Public Const CHAR_GUILDINDEX As String = "GuildIndex"
161Public Const CHAR_ARMORCAOS As String = "RecibioArmaduraCaos"
162Public Const CHAR_ARMORREAL As String = "RecibioArmaduraReal"
163Public Const CHAR_CAOSREWARD As String = "RecompensaCaos"
164Public Const CHAR_REALREWARD As String = "RecompensaReal"
165Public Const CHAR_CIUDAKILLED As String = "CiudasMatados"
166Public Const CHAR_CRIMIKILLED As String = "CrimisMatados"
167Public Const CHAR_BANKCANTOBJS As String = "BancoCantidadObj"
168Public Const CHAR_BANKOBJS As String = "BankObjs"
169Public Const CHAR_SPELLS As String = "Spells"
170Public Const CHAR_RINGSLOT As String = "AnilloSlot"
171Public Const CHAR_ARMORSLOT As String = "ArmorSlot"
172Public Const CHAR_BARCASLOT As String = "BarcaSlot"
173Public Const CHAR_HELMETSLOT As String = "CascoSlot"
174Public Const CHAR_SHIELDSLOT As String = "EscudoSlot"
175Public Const CHAR_MUNITIONSLOT As String = "MunicionSlot"
176Public Const CHAR_TOOLSSLOT As String = "HerramientaSlot"
177Public Const CHAR_WEAPONSLOT As String = "WeaponSlot"
178Public Const CHAR_INVCANTOBJ As String = "InvCantidadObj"
179Public Const CHAR_INVOBJS As String = "InvObjs"
180Public Const CHAR_SKILLS As String = "SKILLS"
181Public Const CHAR_LASTLOG As String = "LastLog"
182Public Const CHAR_FCREACION As String = "FCreacion"
183
184' @@ Nombres de Columnas de DATABASE_TABLE_ACCOUNTS
185
186Public Const ACC_ACCID As String = "AccID"
187Public Const ACC_LOGGED As String = "Logged"
188Public Const ACC_ACCNAME As String = "Nombre"
189Public Const ACC_PASSWD As String = "Password"
190Public Const ACC_SALT As String = "Salt"
191Public Const ACC_MAIL As String = "Email"
192Public Const ACC_RECUCODE As String = "RecuCode"
193Public Const ACC_BANNED As String = "Ban"
194Public Const ACC_CANTPJS As String = "CantidadPersonajes"
195Public Const ACC_PJ As String = "PJ"
196Public Const ACC_LASTLOG As String = "LastLog"
197
198Public Const GUILD_ID As String = "GuildID"
199Public Const GUILD_NAME As String = "Guildname"
200Public Const GUILD_LEADER As String = "Leader"
201Public Const GUILD_SUBLEADERA As String = "SubLeaderA"
202Public Const GUILD_SUBLEADERB As String = "SubLeaderB"
203Public Const GUILD_ALINEACION As String = "Alineacion"
204Public Const GUILD_NIVEL As String = "Nivel"
205Public Const GUILD_GOLD As String = "Oro"
206Public Const GUILD_EXP As String = "Experiencia"
207Public Const GUILD_MEMBERS As String = "CantidadMiembros"
208Public Const GUILD_MEMBER As String = "Miembro"
209
210' @@ Para obtener los datos de la DB
211
212Private Declare Function GetPrivateProfileString _
213 Lib "kernel32" _
214 Alias "GetPrivateProfileStringA" (ByVal lpApplicationname As String, _
215 ByVal lpKeyname As Any, _
216 ByVal lpdefault As String, _
217 ByVal lpreturnedstring As String, _
218 ByVal CrcKey As Long, _
219 ByVal CrcString As String) As Long
220
221' @@ Informacion de la base de datos
222
223Private DB As DB_Param
224
225' @@ Variable de conexion a la base de datos.
226
227Private cn As ADODB.Connection
228
229Private Sub Init_Cargar_DB_Ini()
230 '***************************************************
231 '@ Autor: Lain
232 '@ Fecha: 02/08/12
233 '@ Desc: Cargamos las configuraciones de DB.ini
234 '***************************************************
235
236 On Error GoTo ErrHandler
237
238 ' @@ Connection string propio
239 DB.CustomCs = GetVar(App.Path & "\DB.ini", "INFO", "CustomCs")
240
241 ' @@ Nombre de la DB a conectarse, puede ser null obviamente
242 DB.DBName = GetVar(App.Path & "\DB.ini", "INFO", "DBName")
243
244 ' @@ Version del driver ODBC
245 DB.DriverVer = GetVar(App.Path & "\DB.ini", "INFO", "DriverVer")
246
247 ' @@ Usuario para conectarse
248 DB.UserID = GetVar(App.Path & "\DB.ini", "INFO", "SQLUser")
249
250 ' @@ Password
251 DB.Pass = GetVar(App.Path & "\DB.ini", "INFO", "SQLPass")
252
253 ' @@ IP/Hostname del servidor sql a conectarse
254 DB.Server = GetVar(App.Path & "\DB.ini", "INFO", "Server")
255
256 ' @@ Optimizar tablas al startup?
257 DB.Optimizar = CByte(GetVar(App.Path & "\DB.ini", "INFO", "Optimizar"))
258
259 ' e.g:
260 ' [INFO]
261 ' CumstomCs=
262 ' DBName=
263 ' DriverVer=MySQL ODBC 5.3 ANSI Driver
264 ' SQLUser=root
265 ' SQLPass=
266 ' Server=localhost
267 ' Optimizar=1
268
269 Exit Sub
270
271ErrHandler:
272 Call LogDBError("Error en Init_Cargar_DB_Ini. Error: " & Err.Description)
273
274End Sub
275
276Private Function Init_Crear_DB(ByVal ExisteDB As Boolean) As Boolean
277 '***************************************************
278 '@ Autor: Lain
279 '@ Fecha: 02/08/12
280 '@ Desc: Creamos la base de datos, las tablas y _
281 las columnas.
282 '***************************************************
283
284 On Error GoTo ErrHandler
285
286 ' @@ Declaramos variables
287
288 Dim tmpQuery As String
289 Dim LoopC As Long
290
291 ' @@ Existe la base de datos pero no las tablas _
292 (DB.Name está seteado con algo)
293
294 If Not ExisteDB Then
295
296 ' @@ Declaramos aqui dentro pues no lo necesitamos _
297 fuera de esto.
298
299 Dim rs As ADODB.Recordset
300
301 ' @@ Creamos la base de datos
302 cn.Execute ("CREATE DATABASE IF NOT EXISTS `" & DATABASE_NAME & "` DEFAULT CHARSET=latin1"), , adCmdText
303
304 ' @@ Preguntamos: ¿Existe la base de datos que ACABAMOS de crear?
305 Set rs = cn.Execute("SHOW DATABASES LIKE '" & DATABASE_NAME & "'", , adCmdText)
306
307 ' @@ Si no devuelve nada quiere decir que y tenemos un problema.
308
309 If rs.EOF Or rs.BOF Then GoTo ErrHandler
310
311 ' @@ Le decimos que vamos a usar esa DB
312 cn.Execute ("USE `" & DATABASE_NAME & "`"), , adCmdText
313
314 ' @@ Liberamos recursos
315 Set rs = Nothing
316
317 End If
318
319 ' *******************************************
320 ' ************* TABLA CHARS *****************
321 ' *******************************************
322
323 ' *******************************************
324 ' ************* TABLA CHARS *****************
325 ' *******************************************
326
327 tmpQuery = "CREATE TABLE IF NOT EXISTS `" & DATABASE_TABLE_CHARS & "` ("
328 tmpQuery = tmpQuery & " `" & CHAR_CHARID & "` INT UNSIGNED NOT NULL AUTO_INCREMENT,"
329
330 ' Logged
331 tmpQuery = tmpQuery & " `" & CHAR_LOGGED & "` SMALLINT UNSIGNED NOT NULL DEFAULT '0',"
332
333 ' Nombres
334 tmpQuery = tmpQuery & " `" & CHAR_CHARNAME & "` VARCHAR(" & DB_CHARNAME_MAX_LENGHT & ") NOT NULL DEFAULT '',"
335 tmpQuery = tmpQuery & " `" & CHAR_ACCID & "` INT UNSIGNED NOT NULL DEFAULT '0',"
336
337 ' Basicos
338 tmpQuery = tmpQuery & " `" & CHAR_DESC & "` VARCHAR (" & DB_MAX_DESC_LENGHT & ") NOT NULL DEFAULT '',"
339 tmpQuery = tmpQuery & " `" & CHAR_CLASS & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
340 tmpQuery = tmpQuery & " `" & CHAR_RACE & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
341 tmpQuery = tmpQuery & " `" & CHAR_GENRE & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
342
343 ' Atributos
344 tmpQuery = tmpQuery & " `" & CHAR_ATRI & "` VARCHAR(" & DB_ATRIBUTES_MAX_LENGHT & ") NOT NULL DEFAULT '00-00-00-00-00',"
345
346 ' Stats
347 tmpQuery = tmpQuery & " `" & CHAR_MAXHIT & "` SMALLINT UNSIGNED NOT NULL DEFAULT '0',"
348 tmpQuery = tmpQuery & " `" & CHAR_MINHIT & "` SMALLINT UNSIGNED NOT NULL DEFAULT '0',"
349 tmpQuery = tmpQuery & " `" & CHAR_MAXMANA & "` SMALLINT UNSIGNED NOT NULL DEFAULT '0',"
350 tmpQuery = tmpQuery & " `" & CHAR_MINMANA & "` SMALLINT UNSIGNED NOT NULL DEFAULT '0',"
351 tmpQuery = tmpQuery & " `" & CHAR_MAXHP & "` SMALLINT UNSIGNED NOT NULL DEFAULT '0',"
352 tmpQuery = tmpQuery & " `" & CHAR_MINHP & "` SMALLINT UNSIGNED NOT NULL DEFAULT '0',"
353 tmpQuery = tmpQuery & " `" & CHAR_MINSTA & "` SMALLINT UNSIGNED NOT NULL DEFAULT '0',"
354 tmpQuery = tmpQuery & " `" & CHAR_MAXSTA & "` SMALLINT UNSIGNED NOT NULL DEFAULT '0',"
355 tmpQuery = tmpQuery & " `" & CHAR_MINSED & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
356 tmpQuery = tmpQuery & " `" & CHAR_MAXSED & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
357 tmpQuery = tmpQuery & " `" & CHAR_MINHAM & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
358 tmpQuery = tmpQuery & " `" & CHAR_MAXHAM & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
359 tmpQuery = tmpQuery & " `" & CHAR_SKILLPTS & "` SMALLINT UNSIGNED NOT NULL DEFAULT '0',"
360
361 'Flags
362 tmpQuery = tmpQuery & " `" & CHAR_BANNED & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
363 tmpQuery = tmpQuery & " `" & CHAR_NAKED & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
364 tmpQuery = tmpQuery & " `" & CHAR_DEAD & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
365 tmpQuery = tmpQuery & " `" & CHAR_NAVEG & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
366 tmpQuery = tmpQuery & " `" & CHAR_PARALIZ & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
367 tmpQuery = tmpQuery & " `" & CHAR_HAMBRE & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
368 tmpQuery = tmpQuery & " `" & CHAR_SED & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
369 tmpQuery = tmpQuery & " `" & CHAR_POISON & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
370
371 ' Currency
372 tmpQuery = tmpQuery & " `" & CHAR_GOLD & "` INT UNSIGNED NOT NULL DEFAULT '0',"
373 tmpQuery = tmpQuery & " `" & CHAR_GOLDBANK & "` INT UNSIGNED NOT NULL DEFAULT '0',"
374 tmpQuery = tmpQuery & " `" & CHAR_ELU & "` INT UNSIGNED NOT NULL DEFAULT '0',"
375 tmpQuery = tmpQuery & " `" & CHAR_ELV & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
376 tmpQuery = tmpQuery & " `" & CHAR_EXP & "` INT UNSIGNED NOT NULL DEFAULT '0',"
377
378 ' Noble
379 tmpQuery = tmpQuery & " `" & CHAR_NOBLE & "` INT UNSIGNED NOT NULL DEFAULT '0',"
380
381 ' Apariencia
382 tmpQuery = tmpQuery & " `" & CHAR_HEAD & "` SMALLINT UNSIGNED NOT NULL DEFAULT '0',"
383 tmpQuery = tmpQuery & " `" & CHAR_BODY & "` SMALLINT UNSIGNED NOT NULL DEFAULT '0',"
384 tmpQuery = tmpQuery & " `" & CHAR_WEAPON & "` SMALLINT UNSIGNED NOT NULL DEFAULT '0',"
385 tmpQuery = tmpQuery & " `" & CHAR_HELMET & "` SMALLINT UNSIGNED NOT NULL DEFAULT '0',"
386 tmpQuery = tmpQuery & " `" & CHAR_SHIELD & "` SMALLINT UNSIGNED NOT NULL DEFAULT '0',"
387
388 ' Posicion ' MAP-POS-POS '
389 tmpQuery = tmpQuery & " `" & CHAR_POSITION & "` VARCHAR(" & DB_POSITION_MAX_LENGHT & ") NOT NULL DEFAULT '000-000-000',"
390
391 ' Counters
392 tmpQuery = tmpQuery & " `" & CHAR_PENA & "` SMALLINT NOT NULL DEFAULT '0',"
393 tmpQuery = tmpQuery & " `" & CHAR_NPCKILLED & "` MEDIUMINT UNSIGNED NOT NULL DEFAULT '0',"
394 tmpQuery = tmpQuery & " `" & CHAR_USERKILLED & "` MEDIUMINT UNSIGNED NOT NULL DEFAULT '0',"
395
396 ' Reputacion
397 tmpQuery = tmpQuery & " `" & CHAR_NOBLEREP & "` INT UNSIGNED NOT NULL DEFAULT '0',"
398 tmpQuery = tmpQuery & " `" & CHAR_BURGUESREP & "` INT UNSIGNED NOT NULL DEFAULT '0',"
399 tmpQuery = tmpQuery & " `" & CHAR_PLEBEREP & "` INT UNSIGNED NOT NULL DEFAULT '0',"
400 tmpQuery = tmpQuery & " `" & CHAR_LADRONREP & "` INT UNSIGNED NOT NULL DEFAULT '0',"
401 tmpQuery = tmpQuery & " `" & CHAR_BANDIDOREP & "` INT UNSIGNED NOT NULL DEFAULT '0',"
402 tmpQuery = tmpQuery & " `" & CHAR_ASESINOREP & "` INT UNSIGNED NOT NULL DEFAULT '0',"
403 tmpQuery = tmpQuery & " `" & CHAR_PROMEDIOREP & "` INT UNSIGNED NOT NULL DEFAULT '0',"
404
405 ' Faccion
406 tmpQuery = tmpQuery & " `" & CHAR_Alianza & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
407 tmpQuery = tmpQuery & " `" & CHAR_Horda & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
408 tmpQuery = tmpQuery & " `" & CHAR_ARMORCAOS & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
409 tmpQuery = tmpQuery & " `" & CHAR_ARMORREAL & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
410 tmpQuery = tmpQuery & " `" & CHAR_CAOSREWARD & "` MEDIUMINT UNSIGNED NOT NULL DEFAULT '0',"
411 tmpQuery = tmpQuery & " `" & CHAR_REALREWARD & "` MEDIUMINT UNSIGNED NOT NULL DEFAULT '0',"
412 tmpQuery = tmpQuery & " `" & CHAR_CIUDAKILLED & "` MEDIUMINT UNSIGNED NOT NULL DEFAULT '0',"
413 tmpQuery = tmpQuery & " `" & CHAR_CRIMIKILLED & "` MEDIUMINT UNSIGNED NOT NULL DEFAULT '0',"
414 tmpQuery = tmpQuery & " `" & CHAR_NEUTRAL & "` MEDIUMINT UNSIGNED NOT NULL DEFAULT '0',"
415
416 ' Guild
417 tmpQuery = tmpQuery & " `" & CHAR_GUILDINDEX & "` INT UNSIGNED NOT NULL DEFAULT '0',"
418
419 ' BancoObjetos
420 tmpQuery = tmpQuery & " `" & CHAR_BANKCANTOBJS & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
421 tmpQuery = tmpQuery & " `" & CHAR_BANKOBJS & "` VARCHAR (" & DB_BANCO_MAX_LENGHT & ") NOT NULL DEFAULT '',"
422
423 ' Spells
424 tmpQuery = tmpQuery & " `" & CHAR_SPELLS & "` VARCHAR(" & DB_SPELL_MAX_LENGHT & ") NOT NULL DEFAULT '',"
425
426 ' Inventario
427 tmpQuery = tmpQuery & " `" & CHAR_RINGSLOT & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
428 tmpQuery = tmpQuery & " `" & CHAR_ARMORSLOT & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
429 tmpQuery = tmpQuery & " `" & CHAR_BARCASLOT & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
430 tmpQuery = tmpQuery & " `" & CHAR_HELMETSLOT & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
431 tmpQuery = tmpQuery & " `" & CHAR_SHIELDSLOT & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
432 tmpQuery = tmpQuery & " `" & CHAR_MUNITIONSLOT & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
433 tmpQuery = tmpQuery & " `" & CHAR_TOOLSSLOT & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
434 tmpQuery = tmpQuery & " `" & CHAR_WEAPONSLOT & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
435 tmpQuery = tmpQuery & " `" & CHAR_INVCANTOBJ & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
436 tmpQuery = tmpQuery & " `" & CHAR_INVOBJS & "` VARCHAR (" & DB_INVENT_MAX_LENGHT & ") NOT NULL DEFAULT '',"
437
438 ' Skills
439 tmpQuery = tmpQuery & " `" & CHAR_SKILLS & "` VARCHAR(" & DB_SKILLS_MAX_LENGHT & ") NOT NULL DEFAULT '',"
440
441 ' Fechas
442 tmpQuery = tmpQuery & " `" & CHAR_LASTLOG & "` DATETIME DEFAULT NULL,"
443 tmpQuery = tmpQuery & " `" & CHAR_FCREACION & "` TIMESTAMP DEFAULT NOW(),"
444
445 ' Pongo como Index primario a CharID, y que haga indexes para Nombre y Cuenta tambien.
446 ' asi es mas rapido la busqueda por estos ultimos.
447 tmpQuery = tmpQuery & " PRIMARY KEY (`" & CHAR_CHARID & "`), KEY `Nombre` (`" & CHAR_CHARNAME & "`), KEY `Cuenta` (`" & CHAR_ACCID & "`)"
448 tmpQuery = tmpQuery & " ) ENGINE=InnoDB DEFAULT CHARSET=latin1;"
449
450 ' @@ Mandamos la query
451 cn.Execute tmpQuery, , adCmdText
452
453 ' *******************************************
454 ' ************* TABLA ACCOUNTS **************
455 ' *******************************************
456
457 LoopC = 1
458
459 tmpQuery = "CREATE TABLE IF NOT EXISTS `" & DATABASE_TABLE_ACCOUNTS & "` ("
460 tmpQuery = tmpQuery & " `" & ACC_ACCID & "` INT UNSIGNED NOT NULL AUTO_INCREMENT,"
461 tmpQuery = tmpQuery & " `" & ACC_LOGGED & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
462 tmpQuery = tmpQuery & " `" & ACC_ACCNAME & "` VARCHAR(" & DB_ACCNAME_MAX_LENGHT & ") NOT NULL DEFAULT '',"
463 tmpQuery = tmpQuery & " `" & ACC_PASSWD & "` BINARY(" & DB_PASSWORD_LENGHT & ") NOT NULL DEFAULT '',"
464 tmpQuery = tmpQuery & " `" & ACC_SALT & "` CHAR(" & DB_SALT_LENGHT & ") NOT NULL DEFAULT '',"
465 tmpQuery = tmpQuery & " `" & ACC_MAIL & "` VARCHAR(" & DB_MAX_EMAIL_LENGHT & ") NOT NULL DEFAULT '',"
466 tmpQuery = tmpQuery & " `" & ACC_RECUCODE & "` CHAR(" & DB_RECUCODE_LENGHT & ") NOT NULL DEFAULT '',"
467 tmpQuery = tmpQuery & " `" & ACC_BANNED & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
468 tmpQuery = tmpQuery & " `" & ACC_CANTPJS & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
469
470 Do While LoopC <= MAX_PERSONAJES_CUENTA
471 tmpQuery = tmpQuery & " `" & ACC_PJ & LoopC & "` VARCHAR(" & DB_CHARNAME_MAX_LENGHT & ") NOT NULL DEFAULT '',"
472 LoopC = LoopC + 1
473 Loop
474
475 tmpQuery = tmpQuery & " `" & ACC_LASTLOG & "` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',"
476 tmpQuery = tmpQuery & " PRIMARY KEY (`" & ACC_ACCID & "`), KEY `Nombre` (`" & ACC_ACCNAME & "`)"
477 tmpQuery = tmpQuery & " ) ENGINE=InnoDB DEFAULT CHARSET=latin1;"
478
479 ' @@ Mandamos la query
480 cn.Execute tmpQuery, , adCmdText
481
482 ' *******************************************
483 ' ************* TABLA GUILDS ****************
484 ' *******************************************
485
486 LoopC = 1
487
488 tmpQuery = "CREATE TABLE IF NOT EXISTS `" & DATABASE_TABLE_GUILDS & "` ("
489 tmpQuery = tmpQuery & " `" & GUILD_ID & "` INT UNSIGNED NOT NULL AUTO_INCREMENT,"
490 tmpQuery = tmpQuery & " `" & GUILD_NAME & "` VARCHAR(" & DB_MAX_GUILDNAME_LEN & ") NOT NULL DEFAULT '',"
491 tmpQuery = tmpQuery & " `" & GUILD_LEADER & "` VARCHAR(" & DB_CHARNAME_MAX_LENGHT & ") NOT NULL DEFAULT '',"
492 tmpQuery = tmpQuery & " `" & GUILD_SUBLEADERA & "` VARCHAR(" & DB_CHARNAME_MAX_LENGHT & ") NOT NULL DEFAULT '',"
493 tmpQuery = tmpQuery & " `" & GUILD_SUBLEADERB & "` VARCHAR(" & DB_CHARNAME_MAX_LENGHT & ") NOT NULL DEFAULT '',"
494 tmpQuery = tmpQuery & " `" & GUILD_ALINEACION & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
495 tmpQuery = tmpQuery & " `" & GUILD_NIVEL & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
496 tmpQuery = tmpQuery & " `" & GUILD_GOLD & "` INT UNSIGNED NOT NULL DEFAULT '0',"
497 tmpQuery = tmpQuery & " `" & GUILD_EXP & "` INT UNSIGNED NOT NULL DEFAULT '0',"
498 tmpQuery = tmpQuery & " `" & GUILD_MEMBERS & "` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
499
500 Do While LoopC <= MAX_MIEMBROS_GUILD
501 tmpQuery = tmpQuery & " `" & GUILD_MEMBER & LoopC & "` INT UNSIGNED NOT NULL DEFAULT '0',"
502 LoopC = LoopC + 1
503 Loop
504
505 tmpQuery = tmpQuery & " `FechaCreacion` TIMESTAMP DEFAULT NOW(),"
506 tmpQuery = tmpQuery & " PRIMARY KEY (`" & GUILD_ID & "`), KEY `" & GUILD_NAME & "` (`" & GUILD_NAME & "`)"
507 tmpQuery = tmpQuery & " ) ENGINE=InnoDB DEFAULT CHARSET=latin1;"
508
509 ' @@ Mandamos la query
510 cn.Execute tmpQuery, , adCmdText
511
512 ' *******************************************
513 ' ************* TABLA **********
514 ' *******************************************
515
516 tmpQuery = "CREATE TABLE IF NOT EXISTS `" & DATABASE_TABLE_WARNINGS & "` ("
517 tmpQuery = tmpQuery & " `indexPENA` INT UNSIGNED NOT NULL AUTO_INCREMENT,"
518 tmpQuery = tmpQuery & " `AplicadaA` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
519 tmpQuery = tmpQuery & " `Nombre` VARCHAR (" & DB_ACCNAME_MAX_LENGHT & ") NOT NULL DEFAULT '',"
520 tmpQuery = tmpQuery & " `TipoPena` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
521 tmpQuery = tmpQuery & " `Motivo` VARCHAR (" & DB_MAX_BAN_REASON_LEN & ") NOT NULL DEFAULT '',"
522 tmpQuery = tmpQuery & " `AplicadaPor` VARCHAR (" & DB_CHARNAME_MAX_LENGHT & ") NOT NULL DEFAULT '',"
523 tmpQuery = tmpQuery & " `Expira` DATE NOT NULL DEFAULT '0000-00-00',"
524 tmpQuery = tmpQuery & " `Expiro` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
525 tmpQuery = tmpQuery & " `Aplicada` TIMESTAMP DEFAULT NOW(),"
526 tmpQuery = tmpQuery & " PRIMARY KEY (`indexPENA`), KEY `Cuenta` (`Nombre`), KEY `indexCHAR` (`AplicadaA`)"
527 tmpQuery = tmpQuery & " ) ENGINE=InnoDB DEFAULT CHARSET=latin1;"
528
529 ' @@ Mandamos la query
530 cn.Execute tmpQuery, , adCmdText
531
532 ' *******************************************
533 ' *********** TABLA BANNED HIDS *************
534 ' *******************************************
535
536 tmpQuery = "CREATE TABLE IF NOT EXISTS `" & DATABASE_TABLE_BANHID & "` ("
537 tmpQuery = tmpQuery & " `IndexHID` INT UNSIGNED NOT NULL AUTO_INCREMENT,"
538 tmpQuery = tmpQuery & " `HID` CHAR (" & DB_IDUSUARIO_LENGHT & ") NOT NULL DEFAULT '',"
539 tmpQuery = tmpQuery & " `Fecha` TIMESTAMP DEFAULT NOW(),"
540 tmpQuery = tmpQuery & " PRIMARY KEY (`IndexHID`), KEY `HID` (`HID`)"
541 tmpQuery = tmpQuery & " ) ENGINE=InnoDB DEFAULT CHARSET=latin1;"
542
543 ' @@ Mandamos la query
544 cn.Execute tmpQuery, , adCmdText
545
546 ' *******************************************
547 ' *********** TABLA LOGS ACCIONES ***********
548 ' *******************************************
549
550 tmpQuery = "CREATE TABLE IF NOT EXISTS `" & DATABASE_TABLE_LOGS_ACTIONS & "` ("
551 tmpQuery = tmpQuery & " `indexLOG` INT UNSIGNED NOT NULL AUTO_INCREMENT,"
552 tmpQuery = tmpQuery & " `Cuenta` INT UNSIGNED NOT NULL DEFAULT '0',"
553 tmpQuery = tmpQuery & " `IP` VARCHAR (" & DB_IPUSUARIO_LENGHT & ") NOT NULL DEFAULT '',"
554 tmpQuery = tmpQuery & " `HID` CHAR (" & DB_IDUSUARIO_LENGHT & ") NOT NULL DEFAULT '',"
555 tmpQuery = tmpQuery & " `Accion` TINYINT UNSIGNED NOT NULL DEFAULT '0',"
556 tmpQuery = tmpQuery & " `Fecha` TIMESTAMP DEFAULT NOW(),"
557 tmpQuery = tmpQuery & " PRIMARY KEY (`indexLOG`), KEY `IP` (`IP`), KEY `ID` (`HID`), KEY `Cuenta` (`Cuenta`)"
558 tmpQuery = tmpQuery & " ) ENGINE=InnoDB DEFAULT CHARSET=latin1;"
559
560 ' @@ Mandamos la query
561 cn.Execute tmpQuery, , adCmdText
562
563 ' *********************************************************
564 ' Si llego aca es que hizo todo bien y la base de datos
565 ' deberia estar creada con tablas columnas y chiches.
566 ' *********************************************************
567
568 ' @@ Todo bien
569 Init_Crear_DB = True
570
571 ' @@ Nos vamos
572
573 Exit Function
574
575ErrHandler:
576 Call LogDBError("Error en Init_Crear_DB. Error: " & Err.Description)
577 Set rs = Nothing
578
579End Function
580
581Function Init_Abrir_DB() As Boolean
582 '***************************************************
583 '@ Autor: Lain
584 '@ Fecha: 02/08/12
585 '@ Desc: Abrimos la conexion con la base de datos _
586 y en caso de no existir, la creamos.
587 '***************************************************
588
589 On Error GoTo ErrHandler
590
591 ' @@ Declaramos
592
593 Dim rs As ADODB.Recordset
594
595 ' @@ Inicializamos
596 Set cn = New ADODB.Connection
597
598 ' @@ Seteamos el cursor del lado del cliente
599 cn.CursorLocation = adUseClient
600
601 ' @@ Cargamos las variables necesarias para la conexion
602 Call Init_Cargar_DB_Ini
603
604 ' @@ ¿El usuario puso su propio ConnectionString?
605
606 If DB.CustomCs <> vbNullString Then
607 cn.Open DB.CustomCs
608 Else
609 cn.Open "DRIVER={" & DB.DriverVer & "};" & "SERVER=" & DB.Server & ";" & "DATABASE=" & DB.DBName & ";" & "UID=" & DB.UserID & ";PWD=" & DB.Pass & "; OPTION=3"
610
611 End If
612
613 ' @@ ¿Especifico una base de datos? _
614 De ser asi, quizas no tenga acceso root.
615
616 If DB.DBName = vbNullString Then
617 ' @@ Vemos si existe la base de datos
618 Set rs = cn.Execute("SHOW DATABASES LIKE '" & DATABASE_NAME & "'", , adCmdText)
619 Else
620 ' @@ Si existe la tabla logs, asumimos que esta completa pues es la ultima
621 ' que se crea.
622 Set rs = cn.Execute("SHOW TABLES LIKE '" & DATABASE_TABLE_LOGS_ACTIONS & "'", , adCmdText)
623
624 End If
625
626 ' @@ Si no existe preguntamos si la quiere crear
627
628 If rs.BOF Or rs.EOF Then
629 If MsgBox("La base de datos no existe o no está completa, desea recrearla?", vbYesNo) = vbYes Then
630 ' @@ Si no especifico el nombre, creemos que no existe la BD. _
631 Si lo puso, asumimos que esta creada y vacia.
632
633 If DB.DBName = vbNullString Then
634 If Not Init_Crear_DB(False) Then GoTo ErrHandler
635 Else
636
637 If Not Init_Crear_DB(True) Then GoTo ErrHandler
638
639 End If
640
641 Else
642 Init_Abrir_DB = False
643
644 Exit Function
645
646 End If
647
648 Else ' @@ Devolvio algo, quiere decir que o existe la DB, cuyo caso tenemos que decirle que la vamos a utilizar o que existe la tabla, cuyo caso no tenemos que hacer nada.
649
650 If DB.DBName = vbNullString Then
651 cn.Execute ("USE `" & DATABASE_NAME & "`"), , adCmdText
652
653 End If
654
655 End If
656
657 ' @@ Libero recursos
658 Set rs = Nothing
659
660 ' @@ Si llegó aca significa que esta todo piola vago
661 Init_Abrir_DB = True
662
663 ' @@ Nos vamos
664
665 Exit Function
666
667ErrHandler:
668 Call LogDBError("Error en Init_Abrir_DB. Error: " & Err.Description)
669 Set rs = Nothing
670 Set cn = Nothing
671
672End Function
673
674Function Misc_Setear_Cuentas_Unlogged() As Boolean
675 '***************************************************
676 '@ Autor: Lain
677 '@ Fecha: 02/08/12
678 '@ Desc: Buscamos todas las cuentas que tengan _
679 el flag Logged en 1 (posiblemente causado _
680 por crashes del servidor) y las seteamos _
681 a 0.
682 '***************************************************
683
684 On Error GoTo ErrHandler
685
686 ' @@ Declaramos variables
687
688 Dim rs As ADODB.Recordset
689 Dim tmpIndex As Long
690
691 ' @@ Obtenemos todos los indices que tengan Logged > 0
692 Set rs = cn.Execute("SELECT " & ACC_ACCID & " FROM `" & DATABASE_TABLE_ACCOUNTS & "` WHERE " & ACC_LOGGED & "<>0", , adCmdText)
693
694 ' @@ ¿Devolvio algo?
695
696 If rs.EOF Or rs.BOF Then
697 Misc_Setear_Cuentas_Unlogged = True
698 Set rs = Nothing
699
700 Exit Function
701
702 End If
703
704 ' @@ Seteamos esos indices de vuelta a 0
705
706 Do While Not rs.EOF
707 tmpIndex = rs.Fields(ACC_ACCID)
708 cn.Execute ("UPDATE `" & DATABASE_TABLE_ACCOUNTS & "` SET " & ACC_LOGGED & "=0 WHERE " & ACC_ACCID & "=" & tmpIndex), , adCmdText
709 rs.MoveNext
710 Loop
711
712 ' @@ Liberamos
713 Set rs = Nothing
714
715 ' @@ Todo salio bien
716 Misc_Setear_Cuentas_Unlogged = True
717
718 ' @@ Nos vamos
719
720 Exit Function
721
722ErrHandler:
723 Call LogDBError("Error en Misc_Setear_Cuentas_Unlogged. Error: " & Err.Description)
724 Set rs = Nothing
725
726End Function
727
728Function Misc_Setear_Chars_Unlogged() As Boolean
729 '***************************************************
730 '@ Autor: Lain
731 '@ Fecha: 02/08/12
732 '@ Desc: Buscamos todos los chars que tengan _
733 el flag Logged en 1 (posiblemente causado _
734 por crashes del servidor) y las seteamos _
735 a 0.
736 '***************************************************
737
738 On Error GoTo ErrHandler
739
740 ' @@ Declaramos
741
742 Dim rs As ADODB.Recordset
743 Dim tmpIndex As Long
744
745 ' @@ Preguntamos cuantos tienen Logged = 1
746 Set rs = cn.Execute("SELECT " & CHAR_CHARID & " FROM `" & DATABASE_TABLE_CHARS & "` WHERE " & CHAR_LOGGED & "<>0", , adCmdText)
747
748 ' @@ ¿Devolvio algo?
749
750 If rs.EOF Or rs.BOF Then
751 Misc_Setear_Chars_Unlogged = True
752 Set rs = Nothing
753
754 Exit Function
755
756 End If
757
758 ' @@ Les seteamos Logged = 0
759
760 Do While Not rs.EOF
761 tmpIndex = rs.Fields(CHAR_CHARID)
762 cn.Execute ("UPDATE `" & DATABASE_TABLE_CHARS & "` SET " & CHAR_LOGGED & "=0 WHERE " & CHAR_CHARID & "=" & tmpIndex), , adCmdText
763 rs.MoveNext
764 Loop
765
766 ' @@ Liberamos
767 Set rs = Nothing
768
769 ' @@ Todo salio bien
770 Misc_Setear_Chars_Unlogged = True
771
772 ' @@ Nos vamos
773
774 Exit Function
775
776ErrHandler:
777 Call LogDBError("Error en Misc_Setear_Chars_Unlogged. Error: " & Err.Description)
778 Set rs = Nothing
779
780End Function
781
782Function Misc_Optimizar_Database() As Boolean
783 '***************************************************
784 '@ Autor: Lain
785 '@ Fecha: 02/08/12
786 '@ Desc: Optimizamos y desfragmentamos las tablas _
787 NO SOY UN EXPERTO EN SQL, pero se supone _
788 que hay que hacerlo de vez en cuando.
789 '***************************************************
790
791 On Error GoTo ErrHandler
792
793 ' @@ Si no se quiere optimizar, entonces no lo hacemos
794
795 If DB.Optimizar = NO_OPTIMIZAR_DB Then Exit Function
796
797 ' @@ Cada tabla de nuestra DB deberia ir aqui
798 cn.Execute ("OPTIMIZE TABLE `" & DATABASE_TABLE_CHARS & "`;"), , adCmdText
799 cn.Execute ("OPTIMIZE TABLE `" & DATABASE_TABLE_ACCOUNTS & "`;"), , adCmdText
800 cn.Execute ("OPTIMIZE TABLE `" & DATABASE_TABLE_GUILDS & "`;"), , adCmdText
801 cn.Execute ("OPTIMIZE TABLE `" & DATABASE_TABLE_WARNINGS & "`;"), , adCmdText
802 cn.Execute ("OPTIMIZE TABLE `" & DATABASE_TABLE_BANHID & "`;"), , adCmdText
803 cn.Execute ("OPTIMIZE TABLE `" & DATABASE_TABLE_LOGS_ACTIONS & "`;"), , adCmdText
804 cn.Execute ("FLUSH TABLES"), , adCmdText
805
806 ' @@ Todo salio bien
807 Misc_Optimizar_Database = True
808
809 ' @@ Nos vamos
810
811 Exit Function
812
813ErrHandler:
814 Call LogDBError("Error en Misc_Optimizar_Database. Error: " & Err.Description)
815
816End Function
817
818Sub Init_Cerrar_DB()
819 '***************************************************
820 '@ Autor: Lain
821 '@ Fecha: 02/08/12
822 '@ Desc: Cerramos la conexion con la base de datos
823 '***************************************************
824
825 On Error GoTo ErrHandler
826
827 ' @@ Cerramos la conexion
828 cn.Close
829
830 ' @@ Liberamos recursos
831 Set cn = Nothing
832
833 ' @@ See u soon
834
835 Exit Sub
836
837ErrHandler:
838 Call LogDBError("Error en Init_Cerrar_DB. Error: " & Err.Description)
839
840End Sub
841
842Function Cuenta_Obtener_Index(ByRef AccName As String) As Long
843 '***************************************************
844 '@ Autor: Lain
845 '@ Fecha: 02/08/12
846 '@ Desc: Obtenemos el index de una cuenta a partir _
847 del nombre.
848 '***************************************************
849
850 On Error GoTo ErrHandler
851
852 ' @@ Declaramos
853
854 Dim rs As ADODB.Recordset
855
856 ' @@ Preguntamos el AccID
857 Set rs = cn.Execute("SELECT " & ACC_ACCID & " FROM `" & DATABASE_TABLE_ACCOUNTS & "` WHERE " & ACC_ACCNAME & "='" & UCase$(AccName) & "'", , adCmdText)
858
859 ' @@ Si no devolvio nada, le asigno INVALID_INDEX (O sea, no existe)
860
861 If rs.EOF Or rs.BOF Then
862 Cuenta_Obtener_Index = INVALID_INDEX
863 Set rs = Nothing
864
865 Exit Function
866
867 End If
868
869 ' @@ Si lo es, lo devolvemos.
870 Cuenta_Obtener_Index = CLng(rs.Fields(ACC_ACCID))
871
872 ' @@ Liberamos recursos
873 Set rs = Nothing
874
875 ' @@ Nos vamos
876
877 Exit Function
878
879ErrHandler:
880 Set rs = Nothing
881 Cuenta_Obtener_Index = INVALID_INDEX
882 Call LogDBError("Error en Cuenta_Obtener_Index. Cuenta: " & AccName & ". Error: " & Err.Description)
883
884End Function
885
886Sub Cuenta_Setear_Password(ByVal UserIndex As Integer, _
887 ByRef Hash As String)
888 '***************************************************
889 '@ Autor: Lain
890 '@ Fecha: 02/08/12
891 '@ Desc: Seteamos la password de una cuenta
892 '***************************************************
893
894 On Error GoTo ErrHandler
895
896 ' @@ Mandamos la query
897 cn.Execute ("UPDATE `" & DATABASE_TABLE_ACCOUNTS & "` SET " & ACC_PASSWD & "=UNHEX('" & Hash & "')," & ACC_SALT & "='" & UserList(UserIndex).Cuenta.AccSalt & "' WHERE " & ACC_ACCID & "=" & UserList(UserIndex).Cuenta.AccID), , adCmdText
898
899 ' @@ Nos vamos
900
901 Exit Sub
902
903ErrHandler:
904 Call LogDBError("Error en Cuenta_Setear_Password. Cuenta: " & UserList(UserIndex).Cuenta.AccName & ". Error: " & Err.Description)
905
906End Sub
907
908Function Cuenta_Crear_Cuenta(ByVal UserIndex As Integer) As Boolean
909 '***************************************************
910 '@ Autor: Lain
911 '@ Fecha: 02/08/12
912 '@ Desc: Creamos una cuenta
913 '***************************************************
914
915 On Error GoTo ErrHandler
916
917 ' @@ Aca podemos decir que la cuenta no existe, por lo tanto la creamos.
918 cn.Execute ("INSERT INTO `" & DATABASE_TABLE_ACCOUNTS & "` (" & ACC_ACCNAME & "," & ACC_MAIL & "," & ACC_RECUCODE & ") VALUES" & " ('" & UCase$(UserList(UserIndex).Cuenta.AccName) & "','" & UCase$(UserList(UserIndex).Cuenta.AccEmail) & "','" & UserList(UserIndex).Cuenta.AccRecuCode & "')"), , adCmdText
919
920 ' @@ Si llegó aca quiere decir que la creó!
921 Cuenta_Crear_Cuenta = True
922
923 ' @@ Nos vamos
924
925 Exit Function
926
927ErrHandler:
928 Call LogDBError("Error en Cuenta_Crear_Cuenta. Cuenta: " & UserList(UserIndex).Cuenta.AccName & ". Error: " & Err.Description)
929
930End Function
931
932Function Cuenta_Loguear_Cuenta(ByVal UserIndex As Integer, _
933 ByRef Error As Byte) As Boolean
934 '***************************************************
935 '@ Autor: Lain
936 '@ Fecha: 02/08/12
937 '@ Desc: Checkeamos si se puede loguear una cuenta _
938 y de ser asi, cargamos todos los datos.
939 '***************************************************
940
941 On Error GoTo ErrHandler
942
943 ' @@ Declaramos
944
945 Dim rs As ADODB.Recordset
946
947 ' @@ Ningun error por ahora
948 Error = DBErrorMsg.NO_ERROR
949
950 ' @@ Preguntamos por estos datos
951 Set rs = cn.Execute("SELECT " & ACC_ACCID & "," & ACC_LOGGED & ",HEX(" & ACC_PASSWD & ")," & ACC_SALT & "," & ACC_MAIL & "," & ACC_RECUCODE & " FROM `" & DATABASE_TABLE_ACCOUNTS & "` WHERE " & ACC_ACCNAME & "='" & UCase$(UserList(UserIndex).Cuenta.AccName) & "'", , adCmdText)
952
953 ' @@ ¿Esta logueada?
954
955 If rs.Fields(ACC_LOGGED) <> 0 Then
956 Error = DBErrorMsg.CUENTA_EN_USO
957 Set rs = Nothing
958
959 Exit Function
960
961 End If
962
963 ' @@ ¿Coincide la password?
964
965 If CStr(rs.Fields("HEX(" & ACC_PASSWD & ")")) <> UCase$(MD5String(UserList(UserIndex).Cuenta.AccPassword & MD5String(CStr(rs.Fields(ACC_SALT))))) Then
966 Error = DBErrorMsg.PASSWORD_MISMATCH
967 Set rs = Nothing
968
969 Exit Function
970
971 End If
972
973 ' @@ OK, PUEDE LOGUEAR!!!!!!!!!!!
974
975 ' @@ Asignamos boludeces a su slot
976
977 With UserList(UserIndex)
978 .Cuenta.AccID = rs.Fields(ACC_ACCID)
979 .Cuenta.AccRecuCode = rs.Fields(ACC_RECUCODE)
980 .Cuenta.AccEmail = rs.Fields(ACC_MAIL)
981 .Cuenta.AccSalt = rs.Fields(ACC_SALT)
982
983 End With
984
985 ' @@ Cargamos informacion de los chars
986 Call Lain_DB.Cuenta_Cargar_Chars(UserIndex)
987
988 ' @@ Actualizamos LastLog
989 cn.Execute ("UPDATE `" & DATABASE_TABLE_ACCOUNTS & "` SET " & ACC_LASTLOG & "=Now() WHERE " & ACC_ACCID & "=" & UserList(UserIndex).Cuenta.AccID), , adCmdText
990
991 ' @@ Liberamos recursos
992 Set rs = Nothing
993
994 ' @@ Devolvemos bien
995 Cuenta_Loguear_Cuenta = True
996
997 ' @@ Nos vamos
998
999 Exit Function
1000
1001ErrHandler:
1002 Call LogDBError("Error en Cuenta_Loguear_Cuenta. Cuenta: " & UserList(UserIndex).Cuenta.AccName & ". Error: " & Err.Description)
1003 Set rs = Nothing
1004 Error = DBErrorMsg.DB_ERROR
1005
1006End Function
1007
1008Function Cuenta_Guardar_Cuenta(ByVal UserIndex As Integer) As Boolean
1009 '***************************************************
1010 '@ Autor: Lain
1011 '@ Fecha: 02/08/12
1012 '@ Desc: Guardamos la cantidad de personajes y _
1013 los nicks de una cuenta.
1014 '***************************************************
1015
1016 On Error GoTo ErrHandler
1017
1018 ' @@ Declaramos
1019
1020 Dim tmpQuery As String
1021 Dim LoopC As Long
1022
1023 ' @@ Actualizamos la cantidad de personajes y los nicks de cada uno
1024 ' @@ Contador en 1
1025 LoopC = 1
1026
1027 tmpQuery = "UPDATE `" & DATABASE_TABLE_ACCOUNTS & "` SET"
1028 ' @@ Cantidad de personajes que tiene la cuenta
1029 tmpQuery = tmpQuery & " " & ACC_CANTPJS & "=" & UserList(UserIndex).Cuenta.CantidadPersonajes
1030 ' @@ Si tiene 0 personajes, solo guardo cantidadpersonajes, si tiene mas, guardo hasta el que tenga _
1031 El tema seria que no queden espacios libres en el arreglo de personajes de la cuenta, asi no nos olvidamos _
1032 de ningun char.
1033
1034 Do While LoopC <= UserList(UserIndex).Cuenta.CantidadPersonajes
1035 tmpQuery = tmpQuery & "," & ACC_PJ & LoopC & "='" & UserList(UserIndex).Cuenta.Personajes(LoopC).CharName & "'"
1036 LoopC = LoopC + 1
1037 Loop
1038
1039 tmpQuery = tmpQuery & " WHERE " & ACC_ACCID & "=" & UserList(UserIndex).Cuenta.AccID
1040
1041 ' @@ Mandamos la query
1042 cn.Execute tmpQuery, , adCmdText
1043
1044 ' @@ Salio todo bien
1045 Cuenta_Guardar_Cuenta = True
1046
1047 ' @@ Nos vamos
1048
1049 Exit Function
1050
1051ErrHandler:
1052 Call LogDBError("Error en Cuenta_Guardar_Cuenta. Cuenta: " & UserList(UserIndex).Cuenta.AccName & ". Error: " & Err.Description)
1053
1054End Function
1055
1056Sub Cuenta_Cargar_Chars(ByVal UserIndex As Integer)
1057 '***************************************************
1058 '@ Autor: Lain
1059 '@ Fecha: 02/08/12
1060 '@ Desc: Cargamos todos los datos de un char
1061 '***************************************************
1062
1063 On Error GoTo ErrHandler
1064
1065 ' @@ Declaramos variables
1066
1067 Dim tmpQuery As String
1068 Dim LoopC As Long
1069 Dim rs As ADODB.Recordset
1070
1071 ' @@ Creamos la query para saber la cantidad de personajes del pibe
1072 LoopC = 1
1073
1074 tmpQuery = "SELECT " & ACC_CANTPJS
1075
1076 Do While LoopC <= MAX_PERSONAJES_CUENTA
1077 tmpQuery = tmpQuery & "," & ACC_PJ & LoopC
1078 LoopC = LoopC + 1
1079 Loop
1080
1081 tmpQuery = tmpQuery & " FROM `" & DATABASE_TABLE_ACCOUNTS & "` WHERE " & ACC_ACCID & "=" & UserList(UserIndex).Cuenta.AccID
1082
1083 ' @@ Mandamos la query y obtenemos el resultado
1084 Set rs = cn.Execute(tmpQuery, , adCmdText)
1085
1086 ' @@ Cargamos los resultados en userlist
1087 LoopC = 1
1088
1089 UserList(UserIndex).Cuenta.CantidadPersonajes = rs.Fields(ACC_CANTPJS)
1090
1091 Do While LoopC <= UserList(UserIndex).Cuenta.CantidadPersonajes
1092 UserList(UserIndex).Cuenta.Personajes(LoopC).CharName = rs.Fields(ACC_PJ & LoopC)
1093 Call Cuenta_Obtener_Char_Info(UserIndex, UserList(UserIndex).Cuenta.Personajes(LoopC).CharName, LoopC)
1094 LoopC = LoopC + 1
1095 Loop
1096
1097 ' @@ Liberamos recursos
1098 Set rs = Nothing
1099
1100 ' @@ Nos vamos
1101
1102 Exit Sub
1103
1104ErrHandler:
1105 Call LogDBError("Error en Cuenta_Cargar_Chars. Cuenta: " & UserList(UserIndex).Cuenta.AccName & ". Error: " & Err.Description)
1106
1107End Sub
1108
1109Private Sub Cuenta_Obtener_Char_Info(ByVal UserIndex As Integer, _
1110 ByRef pjName As String, _
1111 ByVal IndexToFill As Long)
1112 '***************************************************
1113 '@ Autor: Lain
1114 '@ Fecha: 02/08/12
1115 '@ Desc: Obtenemos la informacion individual de _
1116 un char y lo cargamos en el arreglo de _
1117 personajes.
1118 '***************************************************
1119
1120 On Error GoTo ErrHandler
1121
1122 ' @@ Declaramos
1123
1124 Dim rs As ADODB.Recordset
1125 Dim tmpGuildIndex As Long
1126
1127 ' @@ Obtenemos el CharID de este nick
1128 UserList(UserIndex).Cuenta.Personajes(IndexToFill).CharIDEnAcc = Char_Obtener_Index(pjName)
1129
1130 ' @@ Mandamos la query para obtener los datos del CharID
1131 Set rs = cn.Execute("SELECT " & CHAR_HEAD & "," & CHAR_ELV & "," & CHAR_BANNED & "," & CHAR_DEAD & "," & CHAR_WEAPON & "," & CHAR_BODY & "," & CHAR_HELMET & "," & CHAR_SHIELD & "," & CHAR_GUILDINDEX & " FROM `" & DATABASE_TABLE_CHARS & "` WHERE " & CHAR_CHARID & "=" & UserList(UserIndex).Cuenta.Personajes(IndexToFill).CharIDEnAcc, , adCmdText)
1132
1133 ' @@ Asignamos lo que recibimos
1134 UserList(UserIndex).Cuenta.Personajes(IndexToFill).CharName = pjName
1135 UserList(UserIndex).Cuenta.Personajes(IndexToFill).Apariencia.Head = rs.Fields(CHAR_HEAD)
1136 UserList(UserIndex).Cuenta.Personajes(IndexToFill).Nivel = rs.Fields(CHAR_ELV)
1137 UserList(UserIndex).Cuenta.Personajes(IndexToFill).Baneado = rs.Fields(CHAR_BANNED)
1138 UserList(UserIndex).Cuenta.Personajes(IndexToFill).Muerto = rs.Fields(CHAR_DEAD)
1139 UserList(UserIndex).Cuenta.Personajes(IndexToFill).Apariencia.WeaponAnim = rs.Fields(CHAR_WEAPON)
1140 UserList(UserIndex).Cuenta.Personajes(IndexToFill).Apariencia.body = rs.Fields(CHAR_BODY)
1141 UserList(UserIndex).Cuenta.Personajes(IndexToFill).Apariencia.CascoAnim = rs.Fields(CHAR_HELMET)
1142 UserList(UserIndex).Cuenta.Personajes(IndexToFill).Apariencia.ShieldAnim = rs.Fields(CHAR_SHIELD)
1143
1144 ' @@ Obtenemos el GuildIndex
1145 tmpGuildIndex = rs.Fields(CHAR_GUILDINDEX)
1146
1147 ' @@ ¿Es valido el GuildIndex?
1148
1149 If tmpGuildIndex <> INVALID_INDEX Then
1150
1151 ' @@ Lo es, obtenemos el nombre del clan
1152 Set rs = cn.Execute("SELECT GuildName FROM `" & DATABASE_TABLE_GUILDS & "` WHERE indexGUILD=" & tmpGuildIndex, , adCmdText)
1153
1154 ' @@ Tiene que devolver algo
1155
1156 If rs.EOF Or rs.BOF Then GoTo ErrHandler
1157
1158 ' @@ Asignamos el nombre
1159 UserList(UserIndex).Cuenta.Personajes(IndexToFill).GuildName = rs!GuildName
1160 Else
1161 ' @@ No tiene guild
1162 UserList(UserIndex).Cuenta.Personajes(IndexToFill).GuildName = vbNullString
1163
1164 End If
1165
1166 ' @@ Libero recursos
1167 Set rs = Nothing
1168
1169 ' @@ Nos vamos
1170
1171 Exit Sub
1172
1173ErrHandler:
1174 Set rs = Nothing
1175 Call LogDBError("Error en Cuenta_Obtener_Char_Info. pjName: " & pjName & ". Cuenta: " & UserList(UserIndex).Cuenta.AccName & ". Error: " & Err.Description)
1176
1177End Sub
1178
1179Sub Cuenta_Cambiar_Logged(ByVal UserIndex As Integer)
1180 '***************************************************
1181 '@ Autor: Lain
1182 '@ Fecha: 02/08/12
1183 '@ Desc: Seteamos en una cuenta Logged a 1 o 0 _
1184 segun su estado.
1185 '***************************************************
1186
1187 On Error GoTo ErrHandler
1188
1189 ' @@ Si esta logueado, se lo decimos, y si no... tambien
1190
1191 If UserList(UserIndex).Cuenta.AccLogged Then
1192 cn.Execute ("UPDATE `" & DATABASE_TABLE_ACCOUNTS & "` SET " & ACC_LOGGED & "=1 WHERE " & ACC_ACCID & "=" & UserList(UserIndex).Cuenta.AccID), , adCmdText
1193 Else
1194 cn.Execute ("UPDATE `" & DATABASE_TABLE_ACCOUNTS & "` SET " & ACC_LOGGED & "=0 WHERE " & ACC_ACCID & "=" & UserList(UserIndex).Cuenta.AccID), , adCmdText
1195
1196 End If
1197
1198 ' @@ Nos vamos
1199
1200 Exit Sub
1201
1202ErrHandler:
1203 Call LogDBError("Error en Cuenta_Cambiar_Logged. Cuenta: " & UserList(UserIndex).Cuenta.AccName & " AccID: " & UserList(UserIndex).Cuenta.AccID & ". Error: " & Err.Description)
1204
1205End Sub
1206
1207Sub Cuenta_Actualizar_Logs(ByVal UserIndex As Integer, _
1208 ByVal Accion As Byte)
1209 '***************************************************
1210 '@ Autor: Lain
1211 '@ Fecha: 02/08/12
1212 '@ Desc: Logueamos lo que hizo una cuenta
1213 '***************************************************
1214
1215 On Error GoTo ErrHandler
1216
1217 ' @@ Declaramos
1218
1219 Dim tmpQuery As String
1220
1221 tmpQuery = "INSERT INTO `" & DATABASE_TABLE_LOGS_ACTIONS & "` "
1222 tmpQuery = tmpQuery & "(Cuenta,IP,HID,Accion) VALUES ("
1223 tmpQuery = tmpQuery & UserList(UserIndex).Cuenta.AccID & ","
1224 tmpQuery = tmpQuery & "'" & UserList(UserIndex).ip & "',"
1225 tmpQuery = tmpQuery & "'" & UserList(UserIndex).HIDUsuario & "',"
1226 tmpQuery = tmpQuery & Accion
1227 tmpQuery = tmpQuery & ")"
1228
1229 ' @@ Mandamos la query
1230 cn.Execute tmpQuery, , adCmdText
1231
1232 ' @@ Nos vamos.
1233
1234 Exit Sub
1235
1236ErrHandler:
1237 Call LogDBError("Error en Cuenta_Actualizar_Logs. Cuenta: & " & UserList(UserIndex).Cuenta.AccName & " Accion: " & Accion & ". Error: " & Err.Description)
1238
1239End Sub
1240
1241Function Char_Obtener_Index(ByRef CharName As String) As Long
1242 '***************************************************
1243 '@ Autor: Lain
1244 '@ Fecha: 02/08/12
1245 '@ Desc: Obtenemos el CharID de un char a partir _
1246 de su nickname.
1247 '***************************************************
1248
1249 On Error GoTo ErrHandler
1250
1251 ' @@ Declaramos
1252
1253 Dim rs As ADODB.Recordset
1254
1255 ' @@ Preguntamos el CharID
1256 Set rs = cn.Execute("SELECT " & CHAR_CHARID & " FROM `" & DATABASE_TABLE_CHARS & "` WHERE " & CHAR_CHARNAME & "='" & UCase$(CharName) & "'", , adCmdText)
1257
1258 ' @@ Si no devolvio nada es porque el CharID no existe
1259
1260 If rs.EOF Or rs.BOF Then
1261 Char_Obtener_Index = INVALID_INDEX
1262 Set rs = Nothing
1263
1264 Exit Function
1265
1266 End If
1267
1268 ' @@ Asignamos el AccID
1269 Char_Obtener_Index = CLng(rs.Fields(CHAR_CHARID))
1270
1271 ' @@ Liberamos recursos
1272 Set rs = Nothing
1273
1274 ' @@ Nos vamos
1275
1276 Exit Function
1277
1278ErrHandler:
1279 Set rs = Nothing
1280 Char_Obtener_Index = INVALID_INDEX
1281 Call LogDBError("Error en Char_Obtener_Index. PJ: " & CharName & ". Error: " & Err.Description)
1282
1283End Function
1284
1285Sub Char_Cambiar_Logged(ByVal UserIndex As Integer)
1286 '***************************************************
1287 '@ Autor: Lain
1288 '@ Fecha: 02/08/12
1289 '@ Desc: Cambiamos el flag Logged a 1 o 0 de un _
1290 char.
1291 '***************************************************
1292
1293 On Error GoTo ErrHandler
1294
1295 ' @@ Tiene un indice valido?
1296
1297 If UserList(UserIndex).CharID = INVALID_INDEX Then Exit Sub
1298
1299 ' @@ Si esta logueado, se lo decimos, y si no... tambien
1300
1301 If UserList(UserIndex).flags.UserLogged Then
1302 cn.Execute ("UPDATE `" & DATABASE_TABLE_CHARS & "` SET " & CHAR_LOGGED & "=" & UserIndex & " WHERE " & CHAR_CHARID & "=" & UserList(UserIndex).CharID), , adCmdText
1303 Else
1304 cn.Execute ("UPDATE `" & DATABASE_TABLE_CHARS & "` SET " & CHAR_LOGGED & "=0 WHERE " & CHAR_CHARID & "=" & UserList(UserIndex).CharID), , adCmdText
1305
1306 End If
1307
1308 ' @@ Nos vamos
1309
1310 Exit Sub
1311
1312ErrHandler:
1313 Call LogDBError("Error en Char_Cambiar_logged. PJ: " & UserList(UserIndex).Name & ". Error: " & Err.Description)
1314
1315End Sub
1316
1317Function Char_Guardar_Stats(ByRef tmpUser As User) As Boolean
1318 '***************************************************
1319 '@ Autor: Lain
1320 '@ Fecha: 02/08/12
1321 '@ Desc: Guardamos los stats de un char
1322 '***************************************************
1323
1324 On Error GoTo ErrHandler
1325
1326 Dim tmpQuery As String
1327 Dim RepuProm As Long
1328
1329 '******************************************************
1330 '***************** TABLA CHARS ************************
1331 '******************************************************
1332
1333 ' Basicos
1334 tmpQuery = "UPDATE `" & DATABASE_TABLE_CHARS & "` SET"
1335 tmpQuery = tmpQuery & " " & CHAR_CLASS & "=" & tmpUser.Clase
1336 tmpQuery = tmpQuery & "," & CHAR_RACE & "=" & tmpUser.Raza
1337 tmpQuery = tmpQuery & "," & CHAR_GENRE & "=" & tmpUser.Genero
1338 tmpQuery = tmpQuery & "," & CHAR_DESC & "='" & tmpUser.desc & "'"
1339
1340 ' Atributos
1341 ' @@ Guardamos los atributos que tiene sin confundirnos por si se drogó
1342
1343 If Not tmpUser.flags.TomoPocion Then
1344 tmpQuery = tmpQuery & "," & CHAR_ATRI & "='" & CStr(tmpUser.Stats.UserAtributos(1)) & "-" & CStr(tmpUser.Stats.UserAtributos(2)) & "-" & CStr(tmpUser.Stats.UserAtributos(3)) & "-" & CStr(tmpUser.Stats.UserAtributos(4)) & "-" & CStr(tmpUser.Stats.UserAtributos(5)) & "'"
1345 Else
1346 tmpQuery = tmpQuery & "," & CHAR_ATRI & "='" & CStr(tmpUser.Stats.UserAtributosBackUP(1)) & "-" & CStr(tmpUser.Stats.UserAtributosBackUP(2)) & "-" & CStr(tmpUser.Stats.UserAtributosBackUP(3)) & "-" & CStr(tmpUser.Stats.UserAtributosBackUP(4)) & "-" & CStr(tmpUser.Stats.UserAtributosBackUP(5)) & "'"
1347
1348 End If
1349
1350 ' Stats
1351 tmpQuery = tmpQuery & "," & CHAR_MAXHIT & "=" & tmpUser.Stats.MaxHIT
1352 tmpQuery = tmpQuery & "," & CHAR_MINHIT & "=" & tmpUser.Stats.MinHIT
1353 tmpQuery = tmpQuery & "," & CHAR_MAXMANA & "=" & tmpUser.Stats.MaxMAN
1354 tmpQuery = tmpQuery & "," & CHAR_MINMANA & "=" & tmpUser.Stats.MinMAN
1355 tmpQuery = tmpQuery & "," & CHAR_MAXHP & "=" & tmpUser.Stats.MaxHp
1356 tmpQuery = tmpQuery & "," & CHAR_MINHP & "=" & tmpUser.Stats.MinHp
1357 tmpQuery = tmpQuery & "," & CHAR_MINSTA & "=" & tmpUser.Stats.MinSta
1358 tmpQuery = tmpQuery & "," & CHAR_MAXSTA & "=" & tmpUser.Stats.MaxSta
1359 tmpQuery = tmpQuery & "," & CHAR_MINSED & "=" & tmpUser.Stats.MinAGU
1360 tmpQuery = tmpQuery & "," & CHAR_MAXSED & "=" & tmpUser.Stats.MaxAGU
1361 tmpQuery = tmpQuery & "," & CHAR_MINHAM & "=" & tmpUser.Stats.MinHam
1362 tmpQuery = tmpQuery & "," & CHAR_MAXHAM & "=" & tmpUser.Stats.MaxHam
1363 tmpQuery = tmpQuery & "," & CHAR_SKILLPTS & "=" & tmpUser.Stats.SkillPts
1364
1365 ' Flags
1366 tmpQuery = tmpQuery & "," & CHAR_BANNED & "=" & tmpUser.flags.Ban
1367 tmpQuery = tmpQuery & "," & CHAR_NAKED & "=" & tmpUser.flags.Desnudo
1368 tmpQuery = tmpQuery & "," & CHAR_DEAD & "=" & tmpUser.flags.Muerto
1369 tmpQuery = tmpQuery & "," & CHAR_NAVEG & "=" & tmpUser.flags.Navegando
1370 tmpQuery = tmpQuery & "," & CHAR_PARALIZ & "=" & tmpUser.flags.Paralizado
1371 tmpQuery = tmpQuery & "," & CHAR_HAMBRE & "=" & tmpUser.flags.Hambre
1372 tmpQuery = tmpQuery & "," & CHAR_SED & "=" & tmpUser.flags.Sed
1373 tmpQuery = tmpQuery & "," & CHAR_POISON & "=" & tmpUser.flags.Envenenado
1374
1375 ' Currency
1376 tmpQuery = tmpQuery & "," & CHAR_GOLD & "=" & tmpUser.Stats.GLD
1377 tmpQuery = tmpQuery & "," & CHAR_GOLDBANK & "=" & tmpUser.Stats.Banco
1378 tmpQuery = tmpQuery & "," & CHAR_ELU & "=" & tmpUser.Stats.ELU
1379 tmpQuery = tmpQuery & "," & CHAR_ELV & "=" & tmpUser.Stats.ELV
1380 tmpQuery = tmpQuery & "," & CHAR_EXP & "=" & tmpUser.Stats.Exp
1381
1382 ' Noble
1383 tmpQuery = tmpQuery & "," & CHAR_NOBLE & "=" & tmpUser.Stats.Noble
1384
1385 ' Apariencia
1386 tmpQuery = tmpQuery & "," & CHAR_HEAD & "=" & tmpUser.OrigChar.Head
1387 ' @@ Si no está muerto entonces le guardo el body
1388
1389 If tmpUser.flags.Muerto = 0 Then
1390 tmpQuery = tmpQuery & "," & CHAR_BODY & "=" & tmpUser.Char.body
1391
1392 End If
1393
1394 tmpQuery = tmpQuery & "," & CHAR_WEAPON & "=" & tmpUser.Char.WeaponAnim
1395 tmpQuery = tmpQuery & "," & CHAR_HELMET & "=" & tmpUser.Char.CascoAnim
1396 tmpQuery = tmpQuery & "," & CHAR_SHIELD & "=" & tmpUser.Char.ShieldAnim
1397
1398 ' Posicion
1399 tmpQuery = tmpQuery & "," & CHAR_POSITION & "='" & CStr(tmpUser.Pos.Map) & "-" & CStr(tmpUser.Pos.X) & "-" & CStr(tmpUser.Pos.Y) & "'"
1400
1401 ' Counters
1402 tmpQuery = tmpQuery & "," & CHAR_PENA & "=" & tmpUser.Counters.Pena
1403 tmpQuery = tmpQuery & "," & CHAR_NPCKILLED & "=" & tmpUser.Stats.NPCsMuertos
1404 tmpQuery = tmpQuery & "," & CHAR_USERKILLED & "=" & tmpUser.Stats.UsuariosMatados
1405
1406 ' Reputacion
1407 tmpQuery = tmpQuery & "," & CHAR_NOBLEREP & "=" & tmpUser.Reputacion.NobleRep
1408 tmpQuery = tmpQuery & "," & CHAR_BURGUESREP & "=" & tmpUser.Reputacion.BurguesRep
1409 tmpQuery = tmpQuery & "," & CHAR_PLEBEREP & "=" & tmpUser.Reputacion.PlebeRep
1410 tmpQuery = tmpQuery & "," & CHAR_LADRONREP & "=" & tmpUser.Reputacion.LadronesRep
1411 tmpQuery = tmpQuery & "," & CHAR_BANDIDOREP & "=" & tmpUser.Reputacion.BandidoRep
1412 tmpQuery = tmpQuery & "," & CHAR_ASESINOREP & "=" & tmpUser.Reputacion.AsesinoRep
1413 ' Calculo el Promedio
1414 RepuProm = (-tmpUser.Reputacion.AsesinoRep) + (-tmpUser.Reputacion.BandidoRep) + tmpUser.Reputacion.BurguesRep + (-tmpUser.Reputacion.LadronesRep) + tmpUser.Reputacion.NobleRep + tmpUser.Reputacion.PlebeRep
1415 RepuProm = RepuProm / 6
1416 tmpQuery = tmpQuery & "," & CHAR_PROMEDIOREP & "=" & RepuProm
1417
1418 ' Faccion
1419 tmpQuery = tmpQuery & "," & CHAR_Alianza & "=" & tmpUser.Faccion.Alianza
1420 tmpQuery = tmpQuery & "," & CHAR_Horda & "=" & tmpUser.Faccion.Horda
1421 tmpQuery = tmpQuery & "," & CHAR_ARMORCAOS & "=" & tmpUser.Faccion.RecibioArmaduraCaos
1422 tmpQuery = tmpQuery & "," & CHAR_ARMORREAL & "=" & tmpUser.Faccion.RecibioArmaduraReal
1423 tmpQuery = tmpQuery & "," & CHAR_CAOSREWARD & "=" & tmpUser.Faccion.RecompensasCaos
1424 tmpQuery = tmpQuery & "," & CHAR_REALREWARD & "=" & tmpUser.Faccion.RecompensasReal
1425 tmpQuery = tmpQuery & "," & CHAR_CRIMIKILLED & "=" & tmpUser.Faccion.CiudadadoDeKahlimdorMatados
1426 tmpQuery = tmpQuery & "," & CHAR_CIUDAKILLED & "=" & tmpUser.Faccion.CiudadanodeAnvilmarMatados
1427 tmpQuery = tmpQuery & "," & CHAR_NEUTRAL & "=" & tmpUser.Faccion.Neutro
1428
1429 tmpQuery = tmpQuery & " WHERE " & CHAR_CHARID & "=" & tmpUser.CharID
1430
1431 ' @@ Mandamos la query
1432 cn.Execute tmpQuery, , adCmdText
1433
1434 ' @@ Esta todo bien
1435 Char_Guardar_Stats = True
1436
1437 ' @@ Nos vamos
1438
1439 Exit Function
1440
1441ErrHandler:
1442 Call LogDBError("Error en Char_Guardar_Stats. CharID: " & tmpUser.CharID & ". Error: " & Err.Description)
1443
1444End Function
1445
1446Function Char_Guardar_Guild(ByRef tmpUser As User) As Boolean
1447 '***************************************************
1448 '@ Autor: Lain
1449 '@ Fecha: 02/08/12
1450 '@ Desc: Guardamos los datos del banco
1451 '***************************************************
1452
1453 On Error GoTo ErrHandler
1454
1455 ' @@ Mandamos la query
1456 cn.Execute ("UPDATE `" & DATABASE_TABLE_CHARS & "` SET " & CHAR_GUILDINDEX & "=" & tmpUser.GuildIndex & " WHERE " & CHAR_CHARID & "=" & tmpUser.CharID), , adCmdText
1457
1458 ' @@ esta todo bien
1459 Char_Guardar_Guild = True
1460
1461 Exit Function
1462
1463ErrHandler:
1464 Call LogDBError("Error en Char_Guardar_Guild. CharID: " & tmpUser.CharID & ". Error: " & Err.Description)
1465
1466End Function
1467
1468Function Char_Guardar_Banco(ByRef tmpUser As User) As Boolean
1469 '***************************************************
1470 '@ Autor: Lain
1471 '@ Fecha: 02/08/12
1472 '@ Desc: Guardamos los datos del banco
1473 '***************************************************
1474
1475 On Error GoTo ErrHandler
1476
1477 ' @@ Declaramos
1478
1479 Dim tmpStr As String
1480 Dim LoopC As Long
1481
1482 ' BancoObjs
1483 LoopC = 2
1484
1485 tmpStr = "UPDATE `" & DATABASE_TABLE_CHARS & "` SET " & CHAR_BANKOBJS & "='" & CStr(tmpUser.BancoInvent.Object(1).ObjIndex) & "-" & CStr(tmpUser.BancoInvent.Object(1).Amount)
1486
1487 Do While LoopC <= MAX_BANCO_SLOTS
1488 tmpStr = tmpStr & "-" & CStr(tmpUser.BancoInvent.Object(LoopC).ObjIndex) & "-" & CStr(tmpUser.BancoInvent.Object(LoopC).Amount)
1489 LoopC = LoopC + 1
1490 Loop
1491
1492 tmpStr = tmpStr & "' WHERE " & CHAR_CHARID & "=" & tmpUser.CharID
1493
1494 ' Mando BancoObjs
1495 cn.Execute tmpStr, , adCmdText
1496
1497 ' @@ Seteo en true
1498 Char_Guardar_Banco = True
1499
1500 ' @@ Nos vamos
1501
1502 Exit Function
1503
1504ErrHandler:
1505 Call LogDBError("Error en Char_Guardar_Banco. CharID: " & tmpUser.CharID & ". Error: " & Err.Description)
1506
1507End Function
1508
1509Function Char_Guardar_Hechizos(ByRef tmpUser As User) As Boolean
1510 '***************************************************
1511 '@ Autor: Lain
1512 '@ Fecha: 02/08/12
1513 '@ Desc: Guardamos los hechizos
1514 '***************************************************
1515
1516 On Error GoTo ErrHandler
1517
1518 ' @@ Declaramos
1519
1520 Dim tmpStr As String
1521 Dim LoopC As Long
1522
1523 ' Spells
1524 LoopC = 2
1525
1526 tmpStr = "UPDATE `" & DATABASE_TABLE_CHARS & "` SET " & CHAR_SPELLS & "='" & CStr(tmpUser.Stats.UserHechizos(1))
1527
1528 Do While LoopC <= MAX_SPELLS_SLOTS
1529 tmpStr = tmpStr & "-" & CStr(tmpUser.Stats.UserHechizos(LoopC))
1530 LoopC = LoopC + 1
1531 Loop
1532
1533 tmpStr = tmpStr & "' WHERE " & CHAR_CHARID & "=" & tmpUser.CharID
1534
1535 ' Mando Spells
1536 cn.Execute tmpStr, , adCmdText
1537
1538 ' @@ Seteamos true
1539 Char_Guardar_Hechizos = True
1540
1541 ' @@ Nos vamos
1542
1543 Exit Function
1544
1545ErrHandler:
1546 Call LogDBError("Error en Char_Guardar_Hechizos. CharID: " & tmpUser.CharID & ". Error: " & Err.Description)
1547
1548End Function
1549
1550Function Char_Guardar_Inventario(ByRef tmpUser As User) As Boolean
1551 '***************************************************
1552 '@ Autor: Lain
1553 '@ Fecha: 02/08/12
1554 '@ Desc: Guardamos el inventario de un char
1555 '***************************************************
1556
1557 On Error GoTo ErrHandler
1558
1559 ' @@ Declaramos
1560
1561 Dim tmpStr As String
1562 Dim LoopC As Long
1563
1564 ' @@ Variables de uso del inventario
1565 tmpStr = "UPDATE `" & DATABASE_TABLE_CHARS & "` SET "
1566 tmpStr = tmpStr & CHAR_INVCANTOBJ & "=" & tmpUser.Invent.NroItems
1567 tmpStr = tmpStr & "," & CHAR_RINGSLOT & "=" & tmpUser.Invent.AnilloEqpSlot
1568 tmpStr = tmpStr & "," & CHAR_ARMORSLOT & "=" & tmpUser.Invent.ArmourEqpSlot
1569 tmpStr = tmpStr & "," & CHAR_BARCASLOT & "=" & tmpUser.Invent.BarcoSlot
1570 tmpStr = tmpStr & "," & CHAR_HELMETSLOT & "=" & tmpUser.Invent.CascoEqpSlot
1571 tmpStr = tmpStr & "," & CHAR_SHIELDSLOT & "=" & tmpUser.Invent.EscudoEqpSlot
1572 tmpStr = tmpStr & "," & CHAR_MUNITIONSLOT & "=" & tmpUser.Invent.MunicionEqpSlot
1573 tmpStr = tmpStr & "," & CHAR_WEAPONSLOT & "=" & tmpUser.Invent.WeaponEqpSlot
1574 'tmpStr = tmpStr & "," & CHAR_TOOLSSLOT & "=" & tmpUser.Invent.HerramientaEqpSlot ' Marian! como funciona esto en la 13.0?
1575
1576 ' @@ Mandamos la query
1577 cn.Execute tmpStr, , adCmdText
1578
1579 ' Inventario
1580 LoopC = 2
1581
1582 tmpStr = "UPDATE `" & DATABASE_TABLE_CHARS & "` SET " & CHAR_INVOBJS & "='" & CStr(tmpUser.Invent.Object(1).ObjIndex) & "-" & CStr(tmpUser.Invent.Object(1).Amount) & "-" & CStr(tmpUser.Invent.Object(1).Equipped)
1583
1584 Do While LoopC <= MAX_INVENTARIO_SLOTS
1585 tmpStr = tmpStr & "-" & CStr(tmpUser.Invent.Object(LoopC).ObjIndex) & "-" & CStr(tmpUser.Invent.Object(LoopC).Amount) & "-" & CStr(tmpUser.Invent.Object(LoopC).Equipped)
1586 LoopC = LoopC + 1
1587 Loop
1588
1589 tmpStr = tmpStr & "' WHERE " & CHAR_CHARID & "=" & tmpUser.CharID
1590
1591 ' Mando Inventario
1592 cn.Execute tmpStr, , adCmdText
1593
1594 ' @@Seteamos en true
1595 Char_Guardar_Inventario = True
1596
1597 ' @@ Nos vamos
1598
1599 Exit Function
1600
1601ErrHandler:
1602 Call LogDBError("Error en Char_Guardar_Inventario. CharID: " & tmpUser.CharID & ". Error: " & Err.Description)
1603
1604End Function
1605
1606Function Char_Guardar_Skills(ByRef tmpUser As User) As Boolean
1607 '***************************************************
1608 '@ Autor: Lain
1609 '@ Fecha: 02/08/12
1610 '@ Desc: Guardamos los skills del char
1611 '***************************************************
1612
1613 On Error GoTo ErrHandler
1614
1615 ' @@ Declaramos
1616
1617 Dim tmpStr As String
1618 Dim LoopC As Long
1619
1620 ' Skills
1621 LoopC = 2
1622
1623 tmpStr = "UPDATE `" & DATABASE_TABLE_CHARS & "` SET " & CHAR_SKILLS & "='" & CStr(tmpUser.Stats.UserSkills(1))
1624
1625 Do While LoopC <= MAX_SKILLS
1626 tmpStr = tmpStr & "-" & CStr(tmpUser.Stats.UserSkills(LoopC))
1627 LoopC = LoopC + 1
1628 Loop
1629
1630 tmpStr = tmpStr & "' WHERE " & CHAR_CHARID & "=" & tmpUser.CharID
1631
1632 ' Mando Skills
1633 cn.Execute tmpStr, , adCmdText
1634
1635 ' @@ Seteamos true
1636 Char_Guardar_Skills = True
1637
1638 ' @@ Nos vamos
1639
1640 Exit Function
1641
1642ErrHandler:
1643 Call LogDBError("Error en Char_Guardar_Skills. CharID: " & tmpUser.CharID & ". Error: " & Err.Description)
1644
1645End Function
1646
1647Function Char_Guardar_Char(ByVal UserIndex As Integer, _
1648 ByVal EsNuevoChar As Boolean) As Boolean
1649 '***************************************************
1650 '@ Autor: Lain
1651 '@ Fecha: 02/08/12
1652 '@ Desc: Guardamos un char en la base de datos.
1653 '***************************************************
1654
1655 On Error GoTo ErrHandler
1656
1657 ' @@ Declaramos
1658
1659 Dim tmpUser As User
1660
1661 ' @@ Trabajamos con esto
1662 tmpUser = UserList(UserIndex)
1663
1664 ' @@ Si es nuevo, creamos la row
1665
1666 If EsNuevoChar Then
1667 ' @@ Asignamos Nombre y cuenta.
1668 cn.Execute ("INSERT INTO `" & DATABASE_TABLE_CHARS & "` (" & CHAR_CHARNAME & "," & CHAR_ACCID & ") VALUES ('" & UCase$(tmpUser.Name) & "'," & tmpUser.Cuenta.AccID & ")"), , adCmdText ' MarianF
1669 ' @@ Obtenemos el CharID de la row que acabamos de crear.
1670 UserList(UserIndex).CharID = Char_Obtener_Index(tmpUser.Name)
1671 tmpUser.CharID = UserList(UserIndex).CharID
1672
1673 End If
1674
1675 ' @@ Si llegó aca con un indice no valido hay un problema
1676
1677 If tmpUser.CharID = INVALID_INDEX Then GoTo ErrHandler
1678
1679 ' @@ Guardamos los stats
1680
1681 If Not Lain_DB.Char_Guardar_Stats(tmpUser) Then GoTo ErrHandler
1682
1683 ' @@ Guardamos los datos de la guild
1684
1685 If Not Lain_DB.Char_Guardar_Guild(tmpUser) Then GoTo ErrHandler
1686
1687 ' @@ Guardamos los datos del banco
1688
1689 If Not Lain_DB.Char_Guardar_Banco(tmpUser) Then GoTo ErrHandler
1690
1691 ' @@ Guardamos los datos de los hechizos
1692
1693 If Not Lain_DB.Char_Guardar_Hechizos(tmpUser) Then GoTo ErrHandler
1694
1695 ' @@ Guardamos los datos del inventario
1696
1697 If Not Lain_DB.Char_Guardar_Inventario(tmpUser) Then GoTo ErrHandler
1698
1699 ' @@ Guardamos los skills del personaje
1700
1701 If Not Lain_DB.Char_Guardar_Skills(tmpUser) Then GoTo ErrHandler
1702
1703 ' @@ Seteamos true
1704 Char_Guardar_Char = True
1705
1706 ' @@ Nos vamos.
1707
1708 Exit Function
1709
1710ErrHandler:
1711 Char_Guardar_Char = False
1712 Call LogDBError("Error en Char_Guardar_Char. Personaje: " & tmpUser.Name & ". Error: " & Err.Description)
1713
1714End Function
1715
1716Function Char_Cargar_Stats(ByRef tmpUser As User) As Boolean
1717 '***************************************************
1718 '@ Autor: Lain
1719 '@ Fecha: 02/08/12
1720 '@ Desc: Cargamos los stats de un char
1721 '***************************************************
1722
1723 On Error GoTo ErrHandler
1724
1725 Dim rs As ADODB.Recordset
1726 Dim tmpStr As String
1727 Dim LoopC As Long
1728
1729 Set rs = cn.Execute("SELECT " & CHAR_CLASS & "," & CHAR_RACE & "," & CHAR_GENRE & "," & CHAR_DESC & "," & CHAR_ATRI & _
1730 "," & CHAR_MAXHIT & "," & CHAR_MINHIT & "," & CHAR_MAXMANA & "," & CHAR_MINMANA & _
1731 "," & CHAR_MAXHP & "," & CHAR_MINHP & "," & CHAR_MAXSTA & "," & CHAR_MINSTA & _
1732 "," & CHAR_MAXSED & "," & CHAR_MINSED & "," & CHAR_MAXHAM & "," & CHAR_MINHAM & _
1733 "," & CHAR_SKILLPTS & "," & CHAR_BANNED & "," & CHAR_NAKED & "," & CHAR_DEAD & _
1734 "," & CHAR_NAVEG & "," & CHAR_PARALIZ & "," & CHAR_HAMBRE & "," & CHAR_SED & _
1735 "," & CHAR_POISON & "," & CHAR_GOLD & "," & CHAR_GOLDBANK & "," & CHAR_ELU & _
1736 "," & CHAR_ELV & "," & CHAR_EXP & "," & CHAR_NOBLE & "," & CHAR_POSITION & "," & CHAR_PENA & _
1737 "," & CHAR_NPCKILLED & "," & CHAR_USERKILLED & "," & CHAR_NOBLEREP & "," & CHAR_BURGUESREP & _
1738 "," & CHAR_PLEBEREP & "," & CHAR_LADRONREP & "," & CHAR_BANDIDOREP & "," & CHAR_ASESINOREP & _
1739 "," & CHAR_PROMEDIOREP & "," & CHAR_BODY & "," & CHAR_HEAD & "," & CHAR_WEAPON & "," & CHAR_HELMET & _
1740 "," & CHAR_SHIELD & "," & CHAR_Alianza & "," & CHAR_Horda & "," & CHAR_ARMORCAOS & _
1741 "," & CHAR_ARMORREAL & "," & CHAR_CAOSREWARD & "," & CHAR_REALREWARD & "," & CHAR_CRIMIKILLED & _
1742 "," & CHAR_CIUDAKILLED & "," & CHAR_NEUTRAL & " FROM `" & DATABASE_TABLE_CHARS & "` WHERE " & CHAR_CHARID & "=" & tmpUser.CharID, , adCmdText)
1743
1744 ' Basicos
1745 tmpUser.Clase = rs.Fields(CHAR_CLASS)
1746 tmpUser.Raza = rs.Fields(CHAR_RACE)
1747 tmpUser.Genero = rs.Fields(CHAR_GENRE)
1748 tmpUser.desc = rs.Fields(CHAR_DESC)
1749
1750 ' Atributos
1751 LoopC = 1
1752
1753 tmpStr = rs.Fields(CHAR_ATRI)
1754
1755 Do While LoopC <= MAX_ATRIBUTOS
1756 tmpUser.Stats.UserAtributos(LoopC) = CByte(ReadField(LoopC, tmpStr, 45))
1757 tmpUser.Stats.UserAtributosBackUP(LoopC) = tmpUser.Stats.UserAtributos(LoopC)
1758 LoopC = LoopC + 1
1759 Loop
1760
1761 ' Stats
1762 tmpUser.Stats.MaxHIT = rs.Fields(CHAR_MAXHIT)
1763 tmpUser.Stats.MinHIT = rs.Fields(CHAR_MINHIT)
1764 tmpUser.Stats.MaxMAN = rs.Fields(CHAR_MAXMANA)
1765 tmpUser.Stats.MinMAN = rs.Fields(CHAR_MINMANA)
1766 tmpUser.Stats.MaxHp = rs.Fields(CHAR_MAXHP)
1767 tmpUser.Stats.MinHp = rs.Fields(CHAR_MINHP)
1768 tmpUser.Stats.MinSta = rs.Fields(CHAR_MINSTA)
1769 tmpUser.Stats.MaxSta = rs.Fields(CHAR_MAXSTA)
1770 tmpUser.Stats.MaxAGU = rs.Fields(CHAR_MAXSED)
1771 tmpUser.Stats.MinAGU = rs.Fields(CHAR_MINSED)
1772 tmpUser.Stats.MaxHam = rs.Fields(CHAR_MAXHAM)
1773 tmpUser.Stats.MinHam = rs.Fields(CHAR_MINHAM)
1774 tmpUser.Stats.SkillPts = rs.Fields(CHAR_SKILLPTS)
1775
1776 ' Flags
1777 tmpUser.flags.Ban = rs.Fields(CHAR_BANNED)
1778 tmpUser.flags.Desnudo = rs.Fields(CHAR_NAKED)
1779 tmpUser.flags.Muerto = rs.Fields(CHAR_DEAD)
1780 tmpUser.flags.Navegando = rs.Fields(CHAR_NAVEG)
1781 tmpUser.flags.Paralizado = rs.Fields(CHAR_PARALIZ)
1782 tmpUser.flags.Hambre = rs.Fields(CHAR_HAMBRE)
1783 tmpUser.flags.Sed = rs.Fields(CHAR_SED)
1784 tmpUser.flags.Envenenado = rs.Fields(CHAR_POISON)
1785
1786 ' Currency
1787 tmpUser.Stats.GLD = rs.Fields(CHAR_GOLD)
1788 tmpUser.Stats.Banco = rs.Fields(CHAR_GOLDBANK)
1789 tmpUser.Stats.ELU = rs.Fields(CHAR_ELU)
1790 tmpUser.Stats.ELV = rs.Fields(CHAR_ELV)
1791 tmpUser.Stats.Exp = rs.Fields(CHAR_EXP)
1792
1793 ' Noble
1794 tmpUser.Stats.Noble = rs.Fields(CHAR_NOBLE)
1795
1796 ' Posicion
1797 tmpStr = rs.Fields(CHAR_POSITION)
1798 tmpUser.Pos.Map = CInt(ReadField(1, tmpStr, 45))
1799 tmpUser.Pos.X = CByte(ReadField(2, tmpStr, 45))
1800 tmpUser.Pos.Y = CByte(ReadField(3, tmpStr, 45))
1801
1802 ' Counters
1803 tmpUser.Counters.Pena = rs.Fields(CHAR_PENA)
1804 tmpUser.Stats.NPCsMuertos = rs.Fields(CHAR_NPCKILLED)
1805 tmpUser.Stats.UsuariosMatados = rs.Fields(CHAR_USERKILLED)
1806
1807 ' Reputacion
1808 tmpUser.Reputacion.NobleRep = rs.Fields(CHAR_NOBLEREP)
1809 tmpUser.Reputacion.BurguesRep = rs.Fields(CHAR_BURGUESREP)
1810 tmpUser.Reputacion.PlebeRep = rs.Fields(CHAR_PLEBEREP)
1811 tmpUser.Reputacion.LadronesRep = rs.Fields(CHAR_LADRONREP)
1812 tmpUser.Reputacion.BandidoRep = rs.Fields(CHAR_BANDIDOREP)
1813 tmpUser.Reputacion.AsesinoRep = rs.Fields(CHAR_ASESINOREP)
1814 tmpUser.Reputacion.Promedio = rs.Fields(CHAR_PROMEDIOREP)
1815
1816 ' Apariencia
1817 tmpUser.OrigChar.heading = 4
1818 tmpUser.OrigChar.Head = rs.Fields(CHAR_HEAD)
1819
1820 tmpUser.OrigChar.body = rs.Fields(CHAR_BODY)
1821 tmpUser.OrigChar.WeaponAnim = rs.Fields(CHAR_WEAPON)
1822 tmpUser.OrigChar.CascoAnim = rs.Fields(CHAR_HELMET)
1823 tmpUser.OrigChar.ShieldAnim = rs.Fields(CHAR_SHIELD)
1824
1825 ' Faccion
1826 tmpUser.Faccion.Alianza = rs.Fields(CHAR_Alianza)
1827 tmpUser.Faccion.Horda = rs.Fields(CHAR_Horda)
1828 tmpUser.Faccion.RecibioArmaduraCaos = rs.Fields(CHAR_ARMORCAOS)
1829 tmpUser.Faccion.RecibioArmaduraReal = rs.Fields(CHAR_ARMORREAL)
1830 tmpUser.Faccion.RecompensasCaos = rs.Fields(CHAR_CAOSREWARD)
1831 tmpUser.Faccion.RecompensasReal = rs.Fields(CHAR_REALREWARD)
1832 tmpUser.Faccion.CiudadadoDeKahlimdorMatados = rs.Fields(CHAR_CRIMIKILLED)
1833 tmpUser.Faccion.CiudadanodeAnvilmarMatados = rs.Fields(CHAR_CIUDAKILLED)
1834 tmpUser.Faccion.Neutro = rs.Fields(CHAR_NEUTRAL)
1835
1836 ' @@ Liberamos
1837 Set rs = Nothing
1838
1839 Char_Cargar_Stats = True
1840
1841 ' @@ Nos vamos
1842
1843 Exit Function
1844
1845ErrHandler:
1846 Set rs = Nothing
1847 Call LogDBError("Error en Char_Cargar_Stats. CharID: " & tmpUser.CharID & ". Error: " & Err.Description)
1848
1849End Function
1850
1851Function Char_Cargar_Guilds(ByRef tmpUser As User) As Boolean
1852 '***************************************************
1853 '@ Autor: Lain
1854 '@ Fecha: 02/08/12
1855 '@ Desc: Cargamos los datos de las guilds del char
1856 '***************************************************
1857
1858 On Error GoTo ErrHandler
1859
1860 ' @@ Declaramos
1861
1862 Dim rs As ADODB.Recordset
1863
1864 ' @@ Hacemos la query
1865 Set rs = cn.Execute("SELECT " & CHAR_GUILDINDEX & " FROM `" & DATABASE_TABLE_CHARS & "` WHERE " & CHAR_CHARID & "=" & tmpUser.CharID, , adCmdText)
1866
1867 ' @@ Guild
1868 tmpUser.GuildIndex = rs.Fields(CHAR_GUILDINDEX)
1869
1870 ' @@ Liberamos
1871 Set rs = Nothing
1872
1873 ' @@ Seteamos true
1874 Char_Cargar_Guilds = True
1875
1876 ' @@ Nos vamos
1877
1878 Exit Function
1879
1880ErrHandler:
1881 Call LogDBError("Error en Char_Cargar_Guilds. CharID: " & tmpUser.CharID & ". Error: " & Err.Description)
1882 Set rs = Nothing
1883
1884End Function
1885
1886Function Char_Cargar_Banco(ByRef tmpUser As User) As Boolean
1887 '***************************************************
1888 '@ Autor: Lain
1889 '@ Fecha: 02/08/12
1890 '@ Desc: Cargamos todos los datos del banco
1891 '***************************************************
1892
1893 On Error GoTo ErrHandler
1894
1895 ' @@Decalramos
1896
1897 Dim rs As ADODB.Recordset
1898 Dim LoopC As Long
1899 Dim loopX As Long
1900 Dim tmpStr As String
1901
1902 ' @@ Mandamos la query
1903 Set rs = cn.Execute("SELECT " & CHAR_BANKCANTOBJS & "," & CHAR_BANKOBJS & " FROM " & DATABASE_TABLE_CHARS & " WHERE " & CHAR_CHARID & "=" & tmpUser.CharID, , adCmdText)
1904
1905 ' @@ Trabajamos la query
1906 LoopC = 1
1907 loopX = 1
1908
1909 tmpUser.BancoInvent.NroItems = rs.Fields(CHAR_BANKCANTOBJS)
1910 tmpStr = rs.Fields(CHAR_BANKOBJS)
1911
1912 Do While LoopC <= MAX_BANCO_SLOTS
1913 tmpUser.BancoInvent.Object(LoopC).ObjIndex = CInt(ReadField(loopX, tmpStr, 45))
1914 loopX = loopX + 1
1915
1916 tmpUser.BancoInvent.Object(LoopC).Amount = CInt(ReadField(loopX, tmpStr, 45))
1917 loopX = loopX + 1
1918 LoopC = LoopC + 1
1919 Loop
1920
1921 ' @@ Liberamos
1922 Set rs = Nothing
1923
1924 ' @@ salio todo bien
1925 Char_Cargar_Banco = True
1926
1927 Exit Function
1928
1929ErrHandler:
1930 Call LogDBError("Error en Char_Cargar_Banco. CharID: " & tmpUser.CharID & ". Error: " & Err.Description)
1931 Set rs = Nothing
1932
1933End Function
1934
1935Function Char_Cargar_Hechizos(ByRef tmpUser As User) As Boolean
1936 '***************************************************
1937 '@ Autor: Lain
1938 '@ Fecha: 02/08/12
1939 '@ Desc: Cargamos todos los datos de los spells
1940 '***************************************************
1941
1942 On Error GoTo ErrHandler
1943
1944 ' @@Decalramos
1945
1946 Dim rs As ADODB.Recordset
1947 Dim LoopC As Long
1948 Dim tmpStr As String
1949
1950 ' @@ Mandamos la query
1951 Set rs = cn.Execute("SELECT " & CHAR_SPELLS & " FROM " & DATABASE_TABLE_CHARS & " WHERE " & CHAR_CHARID & "=" & tmpUser.CharID, , adCmdText)
1952
1953 ' @@ Trabajamos la query
1954 LoopC = 1
1955
1956 tmpStr = rs.Fields(CHAR_SPELLS)
1957
1958 Do While LoopC <= MAX_SPELLS_SLOTS
1959 tmpUser.Stats.UserHechizos(LoopC) = CInt(ReadField(LoopC, tmpStr, 45))
1960 LoopC = LoopC + 1
1961 Loop
1962
1963 ' @@ Liberamos
1964 Set rs = Nothing
1965
1966 ' @@ salio todo bien
1967 Char_Cargar_Hechizos = True
1968
1969 Exit Function
1970
1971ErrHandler:
1972 Call LogDBError("Error en Char_Cargar_Hechizos. CharID: " & tmpUser.CharID & ". Error: " & Err.Description)
1973 Set rs = Nothing
1974
1975End Function
1976
1977Function Char_Cargar_Inventario(ByRef tmpUser As User) As Boolean
1978 '***************************************************
1979 '@ Autor: Lain
1980 '@ Fecha: 02/08/12
1981 '@ Desc: Cargamos todos los datos del banco
1982 '***************************************************
1983
1984 On Error GoTo ErrHandler
1985
1986 ' @@Decalramos
1987
1988 Dim rs As ADODB.Recordset
1989 Dim LoopC As Long
1990 Dim loopX As Long
1991 Dim tmpStr As String
1992
1993 ' @@ Mandamos la query
1994 Set rs = cn.Execute("SELECT " & CHAR_RINGSLOT & "," & CHAR_ARMORSLOT & "," & CHAR_BARCASLOT & "," & CHAR_HELMETSLOT & "," & CHAR_SHIELDSLOT & "," & CHAR_MUNITIONSLOT & "," & CHAR_WEAPONSLOT & "," & CHAR_INVCANTOBJ & "," & CHAR_INVOBJS & " FROM " & DATABASE_TABLE_CHARS & " WHERE " & CHAR_CHARID & "=" & tmpUser.CharID, , adCmdText)
1995
1996 ' @@ Trabajamos la query
1997 LoopC = 1
1998 loopX = 1
1999
2000 tmpUser.Invent.AnilloEqpSlot = rs.Fields(CHAR_RINGSLOT)
2001 tmpUser.Invent.ArmourEqpSlot = rs.Fields(CHAR_ARMORSLOT)
2002 tmpUser.Invent.BarcoSlot = rs.Fields(CHAR_BARCASLOT)
2003 tmpUser.Invent.CascoEqpSlot = rs.Fields(CHAR_HELMETSLOT)
2004 tmpUser.Invent.EscudoEqpSlot = rs.Fields(CHAR_SHIELDSLOT)
2005 tmpUser.Invent.MunicionEqpSlot = rs.Fields(CHAR_MUNITIONSLOT)
2006 'tmpUser.Invent.HerramientaEqpSlot = rs.Fields(CHAR_TOOLSSLOT) ' Marian! como funciona esto en la 13.0?
2007 tmpUser.Invent.WeaponEqpSlot = rs.Fields(CHAR_WEAPONSLOT)
2008 tmpUser.Invent.NroItems = rs.Fields(CHAR_INVCANTOBJ)
2009 tmpStr = rs.Fields(CHAR_INVOBJS)
2010
2011 Do While LoopC <= MAX_INVENTARIO_SLOTS
2012 tmpUser.Invent.Object(LoopC).ObjIndex = CInt(ReadField(loopX, tmpStr, 45))
2013 loopX = loopX + 1
2014
2015 tmpUser.Invent.Object(LoopC).Amount = CInt(ReadField(loopX, tmpStr, 45))
2016 loopX = loopX + 1
2017
2018 tmpUser.Invent.Object(LoopC).Equipped = CInt(ReadField(loopX, tmpStr, 45))
2019 loopX = loopX + 1
2020 LoopC = LoopC + 1
2021 Loop
2022
2023 ' @@ Liberamos
2024 Set rs = Nothing
2025
2026 ' @@ salio todo bien
2027 Char_Cargar_Inventario = True
2028
2029 Exit Function
2030
2031ErrHandler:
2032 Call LogDBError("Error en Char_Cargar_Inventario. CharID: " & tmpUser.CharID & ". Error: " & Err.Description)
2033 Set rs = Nothing
2034
2035End Function
2036
2037Function Char_Cargar_Skills(ByRef tmpUser As User) As Boolean
2038 '***************************************************
2039 '@ Autor: Lain
2040 '@ Fecha: 02/08/12
2041 '@ Desc: Cargamos todos los datos de los skills
2042 '***************************************************
2043
2044 On Error GoTo ErrHandler
2045
2046 ' @@Decalramos
2047
2048 Dim rs As ADODB.Recordset
2049 Dim LoopC As Long
2050 Dim tmpStr As String
2051
2052 ' @@ Mandamos la query
2053 Set rs = cn.Execute("SELECT " & CHAR_SKILLS & " FROM " & DATABASE_TABLE_CHARS & " WHERE " & CHAR_CHARID & "=" & tmpUser.CharID, , adCmdText)
2054
2055 ' @@ Trabajamos la query
2056 LoopC = 1
2057
2058 tmpStr = rs.Fields(CHAR_SKILLS)
2059
2060 Do While LoopC <= MAX_SKILLS
2061 tmpUser.Stats.UserSkills(LoopC) = CByte(ReadField(LoopC, tmpStr, 45))
2062 LoopC = LoopC + 1
2063 Loop
2064
2065 ' @@ Liberamos
2066 Set rs = Nothing
2067
2068 ' @@ salio todo bien
2069 Char_Cargar_Skills = True
2070
2071 Exit Function
2072
2073ErrHandler:
2074 Call LogDBError("Error en Char_Cargar_Skills. CharID: " & tmpUser.CharID & ". Error: " & Err.Description)
2075 Set rs = Nothing
2076
2077End Function
2078
2079Function Char_Cargar_Char(ByVal UserIndex As Integer) As Boolean
2080 '***************************************************
2081 '@ Autor: Lain
2082 '@ Fecha: 02/08/12
2083 '@ Desc: Cargamos todos los datos de un char _
2084 desde la base de datos.
2085 '***************************************************
2086
2087 On Error GoTo ErrHandler
2088
2089 ' @@ Declaramos
2090
2091 Dim rs As ADODB.Recordset
2092 Dim tmpUser As User
2093
2094 ' @@ Copio userlist
2095 tmpUser = UserList(UserIndex)
2096
2097 ' @@ Cargo los stats
2098
2099 If Not Lain_DB.Char_Cargar_Stats(tmpUser) Then GoTo ErrHandler
2100
2101 ' < ------------------------ ASIGNACIONES VARIAS --------------------->
2102
2103 If tmpUser.flags.Paralizado = 1 Then
2104 tmpUser.Counters.Paralisis = IntervaloParalizado
2105
2106 End If
2107
2108 If tmpUser.flags.Muerto = 0 Then
2109 tmpUser.Char = tmpUser.OrigChar
2110 Else
2111
2112 If CiudadadoDeKahlimdor(UserIndex) Then
2113 tmpUser.Char.body = 145
2114 tmpUser.Char.Head = 501
2115 Else
2116 tmpUser.Char.body = iCuerpoMuerto
2117 tmpUser.Char.Head = iCabezaMuerto
2118
2119 End If
2120
2121 tmpUser.Char.WeaponAnim = NingunArma
2122 tmpUser.Char.ShieldAnim = NingunEscudo
2123 tmpUser.Char.CascoAnim = NingunCasco
2124
2125 End If
2126
2127 ' < ------------------------ ASIGNACIONES VARIAS --------------------->
2128
2129 ' @@ Cargamos las guilds
2130
2131 If Not Lain_DB.Char_Cargar_Guilds(tmpUser) Then GoTo ErrHandler
2132
2133 ' @@ Cargamos los datos del banco
2134
2135 If Not Lain_DB.Char_Cargar_Banco(tmpUser) Then GoTo ErrHandler
2136
2137 ' @@ Cargamos los datos de los hechizos
2138
2139 If Not Lain_DB.Char_Cargar_Hechizos(tmpUser) Then GoTo ErrHandler
2140
2141 ' @@ Cargamos el inventario
2142
2143 If Not Lain_DB.Char_Cargar_Inventario(tmpUser) Then GoTo ErrHandler
2144
2145 ' < ------------------------ ASIGNACIONES VARIAS --------------------->
2146
2147 If tmpUser.Invent.WeaponEqpSlot > 0 Then
2148 tmpUser.Invent.WeaponEqpObjIndex = tmpUser.Invent.Object(tmpUser.Invent.WeaponEqpSlot).ObjIndex
2149
2150 End If
2151
2152 If tmpUser.Invent.ArmourEqpSlot > 0 Then
2153 tmpUser.Invent.ArmourEqpObjIndex = tmpUser.Invent.Object(tmpUser.Invent.ArmourEqpSlot).ObjIndex
2154 tmpUser.flags.Desnudo = 0
2155 Else
2156 tmpUser.flags.Desnudo = 1
2157
2158 End If
2159
2160 If tmpUser.Invent.EscudoEqpSlot > 0 Then
2161 tmpUser.Invent.EscudoEqpObjIndex = tmpUser.Invent.Object(tmpUser.Invent.EscudoEqpSlot).ObjIndex
2162
2163 End If
2164
2165 If tmpUser.Invent.CascoEqpSlot > 0 Then
2166 tmpUser.Invent.CascoEqpObjIndex = tmpUser.Invent.Object(tmpUser.Invent.CascoEqpSlot).ObjIndex
2167
2168 End If
2169
2170 If tmpUser.Invent.BarcoSlot > 0 Then
2171 tmpUser.Invent.BarcoObjIndex = tmpUser.Invent.Object(tmpUser.Invent.BarcoSlot).ObjIndex
2172
2173 End If
2174
2175 If tmpUser.Invent.MunicionEqpSlot > 0 Then
2176 tmpUser.Invent.MunicionEqpObjIndex = tmpUser.Invent.Object(tmpUser.Invent.MunicionEqpSlot).ObjIndex
2177
2178 End If
2179
2180 If tmpUser.Invent.AnilloEqpSlot > 0 Then
2181 tmpUser.Invent.AnilloEqpObjIndex = tmpUser.Invent.Object(tmpUser.Invent.AnilloEqpSlot).ObjIndex
2182
2183 End If
2184
2185 ' < ------------------------ ASIGNACIONES VARIAS --------------------->
2186
2187 ' @@ Cargamos los skills
2188
2189 If Not Lain_DB.Char_Cargar_Skills(tmpUser) Then GoTo ErrHandler
2190
2191 ' @@ Actualizamos LastLog
2192 cn.Execute ("UPDATE `" & DATABASE_TABLE_CHARS & "` SET " & CHAR_LASTLOG & "=Now() WHERE " & CHAR_CHARID & "=" & tmpUser.CharID), , adCmdText
2193
2194 ' @@ Volvemos a cargar tmpUser en UserList
2195 UserList(UserIndex) = tmpUser
2196
2197 ' @@ Liberamos recursos
2198 Set rs = Nothing
2199
2200 ' @@ Esta todo bien
2201 Char_Cargar_Char = True
2202
2203 ' @@ Nos vamos
2204
2205 Exit Function
2206
2207ErrHandler:
2208 Call LogDBError("Error en Char_Cargar_Char. Personaje: " & UserList(UserIndex).Name & " Index: " & UserList(UserIndex).CharID & ". Error: " & Err.Description)
2209 Set rs = Nothing
2210
2211End Function
2212
2213Sub Char_Borrar_Char(ByVal CharID As Long)
2214 '***************************************************
2215 '@ Autor: Lain
2216 '@ Fecha: 02/08/12
2217 '@ Desc: Borra un char de la DB
2218 '***************************************************
2219
2220 On Error GoTo ErrHandler
2221
2222 ' @@ Declaramos
2223
2224 Dim tmpQuery As String
2225
2226 ' @@ Lo borro
2227 tmpQuery = "DELETE FROM `" & DATABASE_TABLE_CHARS & "` WHERE " & CHAR_CHARID & "=" & CharID
2228
2229 ' @@ Mandamos la query
2230 cn.Execute tmpQuery, , adCmdText
2231
2232 Exit Sub
2233
2234ErrHandler:
2235 Call LogDBError("Error en Char_Borrar_Char. Personaje: " & CharID & ". Error: " & Err.Description)
2236
2237End Sub
2238
2239Function Query_Nombre_Obtener_Dato_STR(ByRef Name As String, _
2240 ByRef Table As String, _
2241 ByRef FieldToReturn As String) As String
2242 '***************************************************
2243 '@ Autor: Lain
2244 '@ Fecha: 02/08/12
2245 '@ Desc: Devuelve los datos de una tabla y columna _
2246 especificada.
2247 '***************************************************
2248
2249 On Error GoTo ErrHandler
2250
2251 ' @@ Declaramos
2252
2253 Dim rs As ADODB.Recordset
2254
2255 ' @@ Query para obtener los datos
2256 Set rs = cn.Execute("SELECT " & FieldToReturn & " FROM `" & Table & "` WHERE Nombre='" & UCase$(Name) & "'", , adCmdText)
2257
2258 ' @@ Siempre tiene que devolver algo? _
2259 Discutible si es un error.
2260
2261 If rs.EOF Or rs.BOF Then GoTo ErrHandler
2262
2263 ' @@ Lo devolvemos
2264 Query_Nombre_Obtener_Dato_STR = CStr(rs.Fields(FieldToReturn))
2265
2266 ' @@ Liberamos Recursos
2267 Set rs = Nothing
2268
2269 ' @@ Nos vamos.
2270
2271 Exit Function
2272
2273ErrHandler:
2274 Call LogDBError("Error en Query_Nombre_Obtener_Dato_STR. Char: " & Name & ". Table: " & Table & ". Dato: " & FieldToReturn & ". Error: " & Err.Description)
2275 Query_Nombre_Obtener_Dato_STR = INVALID_RETURN
2276 Set rs = Nothing
2277
2278End Function
2279
2280Function Query_Nombre_Obtener_Dato_INT(ByRef Name As String, _
2281 ByRef Table As String, _
2282 ByRef FieldToReturn As String) As Long
2283 '***************************************************
2284 '@ Autor: Lain
2285 '@ Fecha: 02/08/12
2286 '@ Desc: Devuelve los datos de una tabla y columna _
2287 especificada.
2288 '***************************************************
2289
2290 On Error GoTo ErrHandler
2291
2292 ' @@ Declaramos
2293
2294 Dim rs As ADODB.Recordset
2295
2296 ' @@ Query para obtener los datos
2297 Set rs = cn.Execute("SELECT " & FieldToReturn & " FROM `" & Table & "` WHERE Nombre='" & UCase$(Name) & "'", , adCmdText)
2298
2299 ' @@ Siempre tiene que devolver algo? _
2300 Discutible si es un error.
2301
2302 If rs.EOF Or rs.BOF Then GoTo ErrHandler
2303
2304 ' @@ Lo devolvemos
2305 Query_Nombre_Obtener_Dato_INT = CLng(rs.Fields(FieldToReturn))
2306
2307 ' @@ Liberamos Recursos
2308 Set rs = Nothing
2309
2310 ' @@ Nos vamos.
2311
2312 Exit Function
2313
2314ErrHandler:
2315 Call LogDBError("Error en Query_Nombre_Obtener_Dato_INT. Char: " & Name & ". Table: " & Table & ". Dato: " & FieldToReturn & ". Error: " & Err.Description)
2316 Query_Nombre_Obtener_Dato_INT = INVALID_RETURN
2317 Set rs = Nothing
2318End Function '
2319
2320Sub Query_Nombre_Setear_Dato_Int(ByRef Name As String, _
2321 ByRef Table As String, _
2322 ByRef Column As String, _
2323 ByVal DataToWrite As Long)
2324 '***************************************************
2325 '@ Autor: Lain
2326 '@ Fecha: 02/08/12
2327 '@ Desc: Actualiza un dato en la tabla y columna _
2328 especificada. Version para numeros.
2329 '***************************************************
2330
2331 On Error GoTo ErrHandler
2332
2333 ' @@ Creo que con esto alcanza
2334 cn.Execute "UPDATE `" & Table & "` SET " & Column & "=" & DataToWrite & " WHERE Nombre='" & UCase$(Name) & "'", , adCmdText
2335
2336 ' @@ nos vamos.
2337
2338 Exit Sub
2339
2340ErrHandler:
2341 Call LogDBError("Error en Query_Nombre_Setear_Dato_Int. Nombre: " & Name & ". Tabla: " & Table & ". Column: " & Column & ". DataToWrite: " & DataToWrite & ". Error: " & Err.Description)
2342
2343End Sub
2344
2345'
2346
2347Sub Query_Nombre_Setear_Dato_Str(ByRef Name As String, _
2348 ByRef Table As String, _
2349 ByRef Column As String, _
2350 ByRef DataToWrite As String)
2351 '***************************************************
2352 '@ Autor: Lain
2353 '@ Fecha: 02/08/12
2354 '@ Desc: Actualiza un dato en la tabla y columna _
2355 especificada. Version para cadenas.
2356 '***************************************************
2357
2358 On Error GoTo ErrHandler
2359
2360 ' @@ Creo que con esto alcanza
2361 cn.Execute "UPDATE `" & Table & "` SET " & Column & "='" & DataToWrite & "' WHERE Nombre='" & UCase$(Name) & "'", , adCmdText
2362
2363 ' @@ Nos vamos
2364
2365 Exit Sub
2366
2367ErrHandler:
2368 Call LogDBError("Error en Query_Nombre_Setear_Dato_Str. Nombre: " & Name & ". Tabla: " & Table & ". Column: " & Column & ". DataToWrite: " & DataToWrite & ". Error: " & Err.Description)
2369
2370End Sub
2371
2372Sub Query_IndexCuenta_Setear_Dato_Str(ByVal AccIndex As Long, _
2373 ByRef Column As String, _
2374 ByRef DataToWrite As String)
2375 '***************************************************
2376 '@ Autor: Marian5
2377 '@ Fecha: 18/10/13
2378 '@ Desc: Actualizo la tabla Cuentas por su Indice
2379 ' version de Cadenas.
2380 '***************************************************
2381
2382 On Error GoTo ErrHandler
2383
2384 ' @@ Creo que con esto alcanza
2385 cn.Execute "UPDATE `" & DATABASE_TABLE_ACCOUNTS & "` SET " & Column & "='" & DataToWrite & "' WHERE " & ACC_ACCID & "=" & AccIndex, , adCmdText
2386
2387 ' @@ Nos vamos
2388
2389 Exit Sub
2390
2391ErrHandler:
2392 Call LogDBError("Error en Query_IndexCuenta_Setear_Dato_Str. Index: " & AccIndex & ". Columna: " & Column & ". DataToWrite: " & DataToWrite & ". Error: " & Err.Description)
2393
2394End Sub
2395
2396Sub Query_IndexCuenta_Setear_Dato_Int(ByVal AccIndex As Long, _
2397 ByRef Column As String, _
2398 ByVal DataToWrite As Integer)
2399 '***************************************************
2400 '@ Autor: MarianF
2401 '@ Fecha: 28/10/13
2402 '@ Desc: Actualizo la tabla Cuentas por su Indice
2403 ' version de enteros.
2404 '***************************************************
2405
2406 On Error GoTo ErrHandler
2407
2408 ' @@ Creo que con esto alcanza
2409 cn.Execute "UPDATE `" & DATABASE_TABLE_ACCOUNTS & "` SET " & Column & "=" & DataToWrite & " WHERE " & ACC_ACCID & "=" & AccIndex, , adCmdText
2410
2411 ' @@ Nos vamos
2412
2413 Exit Sub
2414
2415ErrHandler:
2416 Call LogDBError("Error en Query_IndexCuenta_Setear_Dato_Str. Index: " & AccIndex & ". Columna: " & Column & ". DataToWrite: " & DataToWrite & ". Error: " & Err.Description)
2417
2418End Sub
2419
2420Function Query_IndexCuenta_Obtener_Dato_STR(ByVal AccIndex As Long, _
2421 ByRef FieldToReturn As String) As String
2422 '***************************************************
2423 '@ Autor: Marian5
2424 '@ Fecha: 18/10/13
2425 '@ Desc: Obtengo un dato de la tabla de cuentas
2426 ' buscandolo por su Index
2427 '***************************************************
2428
2429 On Error GoTo ErrHandler
2430
2431 ' @@ Declaramos
2432
2433 Dim rs As ADODB.Recordset
2434
2435 ' @@ Query para obtener los datos
2436 Set rs = cn.Execute("SELECT " & FieldToReturn & " FROM `" & DATABASE_TABLE_ACCOUNTS & "` WHERE " & ACC_ACCID & "=" & AccIndex, , adCmdText)
2437
2438 ' @@ Siempre tiene que devolver algo? _
2439 Discutible si es un error.
2440
2441 If rs.EOF Or rs.BOF Then GoTo ErrHandler
2442
2443 ' @@ Lo devolvemos
2444 Query_IndexCuenta_Obtener_Dato_STR = CStr(rs.Fields(FieldToReturn))
2445
2446 ' @@ Liberamos Recursos
2447 Set rs = Nothing
2448
2449 ' @@ Nos vamos.
2450
2451 Exit Function
2452
2453ErrHandler:
2454 Call LogDBError("Error en Query_IndexCuenta_Obtener_Dato_STR. AccID: " & AccIndex & ". Dato: " & FieldToReturn & ". Error: " & Err.Description)
2455 Query_IndexCuenta_Obtener_Dato_STR = INVALID_RETURN
2456 Set rs = Nothing
2457
2458End Function
2459
2460Function Query_IndexCuenta_Obtener_Dato_INT(ByVal AccIndex As Long, _
2461 ByRef FieldToReturn As String) As Long
2462 '***************************************************
2463 '@ Autor: Marian5
2464 '@ Fecha: 18/10/13
2465 '@ Desc: Obtengo un dato de la tabla de cuentas
2466 ' buscandolo por su Index
2467 '***************************************************
2468
2469 On Error GoTo ErrHandler
2470
2471 ' @@ Declaramos
2472
2473 Dim rs As ADODB.Recordset
2474
2475 ' @@ Query para obtener los datos
2476 Set rs = cn.Execute("SELECT " & FieldToReturn & " FROM `" & DATABASE_TABLE_ACCOUNTS & "` WHERE " & ACC_ACCID & "=" & AccIndex, , adCmdText)
2477
2478 ' @@ Siempre tiene que devolver algo? _
2479 Discutible si es un error.
2480
2481 If rs.EOF Or rs.BOF Then GoTo ErrHandler
2482
2483 ' @@ Lo devolvemos
2484 Query_IndexCuenta_Obtener_Dato_INT = CLng(rs.Fields(FieldToReturn))
2485
2486 ' @@ Liberamos Recursos
2487 Set rs = Nothing
2488
2489 ' @@ Nos vamos.
2490
2491 Exit Function
2492
2493ErrHandler:
2494 Call LogDBError("Error en Query_IndexCuenta_Obtener_Dato_INT. AccID: " & AccIndex & ". Dato: " & FieldToReturn & ". Error: " & Err.Description)
2495 Query_IndexCuenta_Obtener_Dato_INT = INVALID_RETURN
2496 Set rs = Nothing
2497
2498End Function
2499
2500Function Query_IndexChar_Obtener_Dato(ByVal CharIndex As Long, _
2501 ByRef FieldToReturn As String) As String
2502 '***************************************************
2503 '@ Autor: MarianF
2504 '@ Fecha: 24/10/13
2505 '@ Desc: Obtengo un dato de la tabla de Chars
2506 ' buscando por CharID
2507 '***************************************************
2508
2509 On Error GoTo ErrHandler
2510
2511 ' @@ Declaramos
2512
2513 Dim rs As ADODB.Recordset
2514
2515 ' @@ Query para obtener los datos
2516 Set rs = cn.Execute("SELECT " & FieldToReturn & " FROM `" & DATABASE_TABLE_CHARS & "` WHERE " & CHAR_CHARID & "=" & CharIndex, , adCmdText)
2517
2518 ' @@ Siempre tiene que devolver algo? _
2519 Discutible si es un error.
2520
2521 If rs.EOF Or rs.BOF Then GoTo ErrHandler
2522
2523 ' @@ Lo devolvemos
2524 Query_IndexChar_Obtener_Dato = CStr((rs.Fields(FieldToReturn)))
2525
2526 ' @@ Liberamos Recursos
2527 Set rs = Nothing
2528
2529 ' @@ Nos vamos.
2530
2531 Exit Function
2532
2533ErrHandler:
2534 Call LogDBError("Error en Query_IndexChar_Obtener_Dato. CharID: " & CharIndex & ". Dato: " & FieldToReturn & ". Error: " & Err.Description)
2535 Query_IndexChar_Obtener_Dato = INVALID_RETURN
2536 Set rs = Nothing
2537
2538End Function
2539
2540Function HID_Existe_Index(ByRef HID As String) As Boolean
2541 '***************************************************
2542 '@ Autor: Lain
2543 '@ Fecha: 17/10/13
2544 '@ Desc: Devuelve si el HID existe (Lo cual
2545 ' significaria que esta baneada).
2546 '***************************************************
2547
2548 On Error GoTo ErrHandler
2549
2550 ' @@ Declaramos
2551
2552 Dim rs As ADODB.Recordset
2553
2554 ' @@ Mandamos la query
2555 Set rs = cn.Execute("SELECT IndexHID FROM `" & DATABASE_TABLE_BANHID & "` WHERE HID='" & HID & "'", , adCmdText)
2556
2557 ' @@ Si no devolvio nada significa que
2558 ' esta HID no esta baneada.
2559
2560 If rs.EOF Or rs.BOF Then
2561 HID_Existe_Index = False
2562 Set rs = Nothing
2563
2564 Exit Function
2565
2566 End If
2567
2568 ' @@ Existe, esta baneada.
2569 HID_Existe_Index = True
2570
2571 ' @@Liberamos
2572 Set rs = Nothing
2573
2574 ' @@ Nos vamos
2575
2576 Exit Function
2577
2578ErrHandler:
2579 Call LogDBError("Error en HID_Existe_Index. HID: " & HID & ". Error: " & Err.Description)
2580 Set rs = Nothing
2581
2582End Function
2583
2584Sub HID_Agregar_HID(ByRef HID As String)
2585 '***************************************************
2586 '@ Autor: Lain
2587 '@ Fecha: 17/10/13
2588 '@ Desc: Agrega un HID a la tabla de HIDs baneadas
2589 '***************************************************
2590
2591 On Error GoTo ErrHandler
2592
2593 ' @@ Agrego el nuevo HID
2594 cn.Execute ("INSERT INTO `" & DATABASE_TABLE_BANHID & "` (HID) VALUES ('" & HID & "')"), , adCmdText
2595
2596 ' @@ Me voy
2597
2598 Exit Sub
2599
2600ErrHandler:
2601 Call LogDBError("Error en HID_Agregar_HID. HID: " & HID & ". Error: " & Err.Description)
2602
2603End Sub
2604
2605Function Obtener_Dato_Clan(ByVal ClanIndex As Long, _
2606 ByRef Campo As String) As Variant
2607 '***************************************************
2608 '@ Autor: Lain
2609 '@ Fecha: 02/08/12
2610 '@ Desc: Devuelve un valor de la tabla de clanes
2611 '***************************************************
2612
2613 On Error GoTo ErrHandler
2614
2615 ' @@ Declaramos
2616
2617 Dim rs As ADODB.Recordset
2618
2619 ' @@ Query para obtener el dato buscado
2620 Set rs = cn.Execute("SELECT " & Campo & " FROM `" & DATABASE_TABLE_GUILDS & "` WHERE " & GUILD_ID & "=" & ClanIndex, , adCmdText)
2621
2622 ' @@ Si no devolvio nada hay un error, pues asimomos que existe
2623
2624 If rs.EOF Or rs.BOF Then GoTo ErrHandler
2625
2626 ' @@ Lo devolvemos
2627 Obtener_Dato_Clan = CVar(rs.Fields(Campo))
2628
2629 ' @@ Liberamos
2630 Set rs = Nothing
2631
2632 ' @@ Nos vamos
2633
2634 Exit Function
2635
2636ErrHandler:
2637 Call LogDBError("Error en Obtener_Dato_Clan. ClanIndex: " & ClanIndex & ". Campo: " & Campo & ". Error: " & Err.Description)
2638 Obtener_Dato_Clan = INVALID_RETURN
2639 Set rs = Nothing
2640
2641End Function
2642
2643Function Clan_Existe_Index(ByVal ClanIndex As Long) As Boolean
2644 '***************************************************
2645 '@ Autor: Lain
2646 '@ Fecha: 02/08/12
2647 '@ Desc: Verifica si un clan existe sabiendo su _
2648 indexGUILD
2649 '***************************************************
2650
2651 On Error GoTo ErrHandler
2652
2653 ' @@ Declaramos
2654
2655 Dim rs As ADODB.Recordset
2656
2657 ' @@ hago la query
2658 Set rs = cn.Execute("SELECT " & GUILD_NAME & " FROM `" & DATABASE_TABLE_GUILDS & "` WHERE " & GUILD_ID & "=" & ClanIndex, , adCmdText)
2659
2660 ' @@ Devolvio algo?
2661
2662 If rs.EOF Or rs.BOF Then
2663 Clan_Existe_Index = False
2664 Set rs = Nothing
2665
2666 Exit Function
2667
2668 End If
2669
2670 ' @@ Existe
2671 Clan_Existe_Index = True
2672
2673 ' @@ Liberamos recursos
2674 Set rs = Nothing
2675
2676 ' @@ Nos vamos
2677
2678 Exit Function
2679
2680ErrHandler:
2681 Call LogDBError("Error en Clan_Existe_Index. ClanIndex: " & ClanIndex & ". Error: " & Err.Description)
2682
2683End Function
2684
2685Function Clan_Obtener_Cantidad() As Integer
2686 '***************************************************
2687 '@ Autor: Lain
2688 '@ Fecha: 02/08/12
2689 '@ Desc: obtenemos la cantidad de clanes que hay
2690 '***************************************************
2691
2692 On Error GoTo ErrHandler
2693
2694 ' @@ Declaramos
2695
2696 Dim rs As ADODB.Recordset
2697
2698 ' @@ hacemos la query
2699 Set rs = cn.Execute("SELECT COUNT(*) AS Cantidad FROM `" & DATABASE_TABLE_GUILDS & "`", , adCmdText)
2700
2701 ' @@ Si no devolvio nada, entonces hay 0 clanes
2702
2703 If rs.EOF Or rs.BOF Then
2704 Clan_Obtener_Cantidad = 0
2705 Set rs = Nothing
2706
2707 Exit Function
2708
2709 End If
2710
2711 ' @@ Liberamos
2712 Set rs = Nothing
2713
2714 ' @@ Devolvemos cuantos clanes hay
2715 Clan_Obtener_Cantidad = rs!Cantidad
2716
2717 ' @@ Nos vamos
2718
2719 Exit Function
2720
2721ErrHandler:
2722 Call LogDBError("Error en Clan_Obtener_Cantidad. Error: " & Err.Description)
2723
2724End Function
2725
2726Sub Clan_Setear_Dato_Int(ByVal ClanIndex As Long, _
2727 ByRef Campo As String, _
2728 ByVal Dato As Long)
2729 '***************************************************
2730 '@ Autor: Lain
2731 '@ Fecha: 02/08/12
2732 '@ Desc: Setea un dato entero en la tabla de claes
2733 '***************************************************
2734
2735 On Error GoTo ErrHandler
2736
2737 ' @@ Ejecutamos la query
2738 cn.Execute ("UPDATE `" & DATABASE_TABLE_GUILDS & "` SET " & Campo & "=" & Dato), , adCmdText
2739
2740 ' @@ Nos vamos
2741
2742 Exit Sub
2743
2744ErrHandler:
2745 Call LogDBError("Error en Clan_Setear_Dato_int. ClanIndex: " & ClanIndex & ". Campo: " & Campo & ". Dato: " & Dato & ". Error: " & Err.Description)
2746
2747End Sub
2748
2749Function Advertencias_Obtener_Prontuario_Char(ByRef Name As String, _
2750 ByRef Prontuario As String) As Integer
2751 '***************************************************
2752 '@ Autor: Lain
2753 '@ Fecha: 25/2/13
2754 '@ Desc: Obtiene el prontuario de un char
2755 '***************************************************
2756
2757 On Error GoTo ErrHandler
2758
2759 ' @@ creamos el requester
2760
2761 Dim rs As ADODB.Recordset
2762 Dim tmpCant As Integer
2763
2764 ' @@ Query para obtener los datos
2765 Set rs = cn.Execute("SELECT TipoPena,Motivo,AplicadaPor,Expira,Aplicada FROM `" & DATABASE_TABLE_WARNINGS & "` WHERE Nombre='" & UCase$(Name) & "' AND AplicadaA=" & PENA_PERSONAJE, , adCmdText)
2766
2767 ' @@ Devolvio algo?
2768
2769 If rs.BOF Or rs.EOF Then
2770 Advertencias_Obtener_Prontuario_Char = NINGUNA_PENA
2771 Set rs = Nothing
2772
2773 Exit Function
2774
2775 End If
2776
2777 ' @@ Recorremos hasta que no haya mas
2778
2779 Do While Not rs.EOF
2780 tmpCant = tmpCant + 1
2781 Prontuario = Prontuario & CStr(rs!AplicadaPor) & " - " & CStr(rs!Motivo) & " - Ban: " & CStr(rs!TipoPena) & " - " & CStr(rs!Expira) & " - " & CStr(rs!Aplicada) & vbCrLf
2782 ' Jorge - Piquete - Ban: 1 - 15-04-2013 - 14-04-2013 19:25:22 \n
2783 rs.MoveNext
2784 Loop
2785
2786 ' @@ Devolvemos la cantidad de penas que hay
2787 Advertencias_Obtener_Prontuario_Char = tmpCant
2788
2789 ' @@ Liberamos
2790 Set rs = Nothing
2791
2792 ' @@ Nos vamos
2793
2794 Exit Function
2795
2796ErrHandler:
2797 Call LogDBError("Error en Advertencias_Obtener_Char. Nombre: " & Name & ". Error: " & Err.Description)
2798 Advertencias_Obtener_Prontuario_Char = NINGUNA_PENA
2799 Set rs = Nothing
2800
2801End Function
2802
2803Function Advertencias_Obtener_Char_Motivo_Ban(ByRef Name As String) As String
2804 '***************************************************
2805 '@ Autor: Lain
2806 '@ Fecha: 25/2/13
2807 '@ Desc: Obtiene porque fue baneado un char
2808 '***************************************************
2809
2810 On Error GoTo ErrHandler
2811
2812 ' @@ Declaramos
2813
2814 Dim rs As ADODB.Recordset
2815 Dim tmpMotivo As String
2816
2817 ' @@ Hacemos la query
2818 Set rs = cn.Execute("SELECT AplicadaPor,Motivo,Expira FROM `" & DATABASE_TABLE_WARNINGS & "` WHERE Nombre='" & UCase$(Name) & "' AND AplicadaA=" & PENA_PERSONAJE & " AND TipoPena=" & DBPenaType.TypeBan & " ORDER BY `indexPENA` DESC LIMIT 1", , adCmdText)
2819
2820 ' @@ Si no devolvio nada, es que no está baneado
2821
2822 If rs.EOF Or rs.BOF Then
2823 Advertencias_Obtener_Char_Motivo_Ban = vbNullString
2824 Set rs = Nothing
2825
2826 Exit Function
2827
2828 End If
2829
2830 ' @@ Preparamos el return
2831 tmpMotivo = "Baneado por: " & CStr(rs!AplicadaPor) & " - Motivo: " & CStr(rs!Motivo) & " Expira: " & CStr(rs!Expira)
2832
2833 ' @@ Asignamos para devolver
2834 Advertencias_Obtener_Char_Motivo_Ban = tmpMotivo
2835
2836 ' @@ Liberamos
2837 Set rs = Nothing
2838
2839 ' @@ Nos vamos
2840
2841 Exit Function
2842
2843ErrHandler:
2844 Call LogDBError("Error en Obtener_Motivo_Ban_Char. Nombre: " & Name & ". Error: " & Err.Description)
2845 Advertencias_Obtener_Char_Motivo_Ban = vbNullString
2846 Set rs = Nothing
2847
2848End Function
2849
2850Sub Advertencia_Setear_Pena(ByVal AplicadaA As Byte, _
2851 ByRef Nombre As String, _
2852 ByVal TipoPena As Byte, _
2853 ByRef Motivo As String, _
2854 ByRef AplicadaPor As String, _
2855 ByRef Expira As String)
2856 '***************************************************
2857 '@ Autor: Lain
2858 '@ Fecha: 02/08/12
2859 '@ Desc: Agrega una pena a un char o cuenta
2860 '***************************************************
2861
2862 On Error GoTo ErrHandler
2863
2864 Dim tmpQuery As String
2865
2866 ' @@ Creamos la query
2867 tmpQuery = "INSERT INTO `" & DATABASE_TABLE_WARNINGS & "` ("
2868 tmpQuery = tmpQuery & "(APlicadaA,Nombre,TipoPena,Motivo,AplicadaPor,Expira) VALUES ("
2869 tmpQuery = tmpQuery & AplicadaA & ",'" & UCase$(Nombre) & "'," & TipoPena & ",'" & Motivo & "','" & UCase$(AplicadaPor) & "','" & Expira & "'"
2870 tmpQuery = tmpQuery & ")"
2871
2872 ' @@ Mandamos la query
2873 cn.Execute tmpQuery, , adCmdText
2874
2875 ' @@ Nos vamos
2876
2877 Exit Sub
2878
2879ErrHandler:
2880 Call LogDBError("Error en Advertencia_Setear_Pena. Cuenta: " & Nombre & ". AplicadaPor: " & AplicadaPor & ". Error: " & Err.Description)
2881
2882End Sub
2883
2884Function Obtener_Ultimas_IPs_Cuenta(ByRef AccID As Long, _
2885 ByVal Limit As Integer) As String
2886 '***************************************************
2887 '@ Autor: Lain
2888 '@ Fecha: 02/08/12
2889 '@ Desc: Obtiene una lista de IPs de una cuenta
2890 '***************************************************
2891
2892 On Error GoTo ErrHandler
2893
2894 ' @@ Declaramos
2895
2896 Dim rs As ADODB.Recordset
2897 Dim tmpStr As String
2898 Dim tmpQuery As String
2899
2900 ' @@ hacemos la query
2901 tmpQuery = "SELECT IP FROM `" & DATABASE_TABLE_LOGS_ACTIONS & "` WHERE Cuenta=" & AccID & " ORDER BY `indexLOG` DESC Limit " & Limit
2902
2903 ' @@ la mandamos
2904 Set rs = cn.Execute(tmpQuery, , adCmdText)
2905
2906 ' @@ Si no devolvio nada entonces nos vamos
2907
2908 If rs.EOF Or rs.BOF Then
2909 Obtener_Ultimas_IPs_Cuenta = vbNullString
2910 Set rs = Nothing
2911
2912 Exit Function
2913
2914 End If
2915
2916 ' @@ Iteramos por todos los registros devueltos
2917
2918 Do While Not rs.EOF
2919 tmpStr = tmpStr & rs!ip & " - " & vbCrLf
2920 rs.MoveNext
2921 Loop
2922
2923 ' @@ Seteamos la salida
2924 Obtener_Ultimas_IPs_Cuenta = tmpStr
2925
2926 ' @@ Liberamos
2927 Set rs = Nothing
2928
2929 ' @@ Nos vamos
2930
2931 Exit Function
2932
2933ErrHandler:
2934 Call LogDBError("Error en Obtener_Ultimas_IPs_Cuenta. AccID: " & AccID & ". Limit: " & Limit & ". Error: " & Err.Description)
2935 Obtener_Ultimas_IPs_Cuenta = vbNullString
2936 Set rs = Nothing
2937
2938End Function
2939
2940Function Unban_Expired() As String
2941 '***************************************************
2942 '@ Autor: Lain
2943 '@ Fecha: 02/08/12
2944 '@ Desc: Remueve todas las penas que hayan _
2945 prescripto.
2946 '***************************************************
2947
2948 ' @@ Declaramos
2949
2950 Dim rs As ADODB.Recordset
2951 Dim tmpStr As String
2952 Dim tmpQuery As String
2953
2954 ' @@ Armo la query
2955 ' Pido indexPENA, Nombre y AplicadaA
2956 ' Busco los campos donde Expira sea distinto a 0000-00-00 (o sea, para siempre)
2957 ' y La diferencia de dias entre Expira y Now() sea menor o igual a 0
2958 ' y Teng Expiro en 0, es decir, que nunca la tratamos.
2959 tmpQuery = "SELECT indexPENA,Nombre,AplicadaA FROM `" & DATABASE_TABLE_WARNINGS & "` WHERE Expira != '0000-00-00' AND DATEDIFF(Expira,Now()) <= 0 AND Expiro=0"
2960
2961 Set rs = cn.Execute(tmpQuery, , adCmdText)
2962
2963 If rs.EOF Or rs.BOF Then
2964 Unban_Expired = vbNullString
2965 Set rs = Nothing
2966
2967 Exit Function
2968
2969 End If
2970
2971 Do While Not rs.EOF
2972 tmpStr = tmpStr & IIf(CByte(rs!AplicadaA) = PENA_CUENTA, "Cuenta: ", "Personaje: ") & CStr(rs!Nombre) & vbCrLf
2973 cn.Execute ("UPDATE `" & DATABASE_TABLE_WARNINGS & "` SET Expiro=1 WHERE indexPENA=" & rs!indexPENA), , adCmdText
2974
2975 If CByte(rs!AplicadaA) = PENA_CUENTA Then
2976 Call Lain_DB.Query_Nombre_Setear_Dato_Int(CStr(rs!Nombre), DATABASE_TABLE_ACCOUNTS, ACC_BANNED, 0)
2977 Else
2978 Call Lain_DB.Query_Nombre_Setear_Dato_Int(CStr(rs!Nombre), DATABASE_TABLE_CHARS, CHAR_BANNED, 0)
2979
2980 End If
2981
2982 rs.MoveNext
2983 Loop
2984
2985 Unban_Expired = tmpStr
2986
2987 Set rs = Nothing
2988
2989 Exit Function
2990
2991ErrHandler:
2992 Call LogDBError("Error en Unban_Expired. Error: " & Err.Description)
2993 Unban_Expired = vbNullString
2994 Set rs = Nothing
2995
2996End Function
2997
2998Sub Remove_Ban_BanList(ByVal TipoBan As Byte, _
2999 ByRef Nombre As String)
3000 '*****************************************************
3001 '@ Autor: Lain
3002 '@ Fecha: 02/08/12
3003 '@ Desc: Setea que la pena de NOMBRE de tipo TipoBan _
3004 (Cuenta o Personaje) Expiró.
3005 '*****************************************************
3006
3007 On Error GoTo ErrHandler
3008
3009 ' @@ Declaramos
3010
3011 Dim tmpQuery As String
3012 Dim rs As ADODB.Recordset
3013
3014 ' @@ Obtenemos la ultima pena d
3015 Set rs = cn.Execute("SELECT indexPENA FROM `" & DATABASE_TABLE_WARNINGS & "` WHERE Nombre='" & UCase$(Nombre) & "' AND AplicadaA=" & TipoBan & " AND TipoPena=" & DBPenaType.TypeBan & " ORDER BY `indexPENA` DESC Limit 1", , adCmdText)
3016
3017 ' @@ Devolvio algo?
3018
3019 If rs.EOF Or rs.BOF Then Exit Sub
3020
3021 ' @@ Updateamos esa pena
3022 tmpQuery = "UPDATE `" & DATABASE_TABLE_WARNINGS & "` SET Expiro=1 WHERE indexPENA=" & CLng(rs!indexPENA)
3023
3024 ' @@ Mandamos la query
3025 cn.Execute tmpQuery, , adCmdText
3026
3027 Exit Sub
3028
3029ErrHandler:
3030 Call LogDBError("Error en Remove_Ban_Banlist. Nombre: " & Nombre & ". TipoBan: " & TipoBan & ". Error: " & Err.Description)
3031
3032End Sub
3033
3034Private Sub LogDBError(desc As String)
3035 '***************************************************
3036 '@ Autor: Lain
3037 '@ Fecha: 02/08/12
3038 '@ Desc: Log de errores de la base de datos
3039 '***************************************************
3040
3041 On Error GoTo ErrHandler
3042
3043 Dim nfile As Integer
3044
3045 nfile = FreeFile
3046 Open App.Path & "\logs\DBError.log" For Append Shared As #nfile
3047 Print #nfile, Date & " " & Time & " " & desc
3048 Close #nfile
3049
3050 Exit Sub
3051
3052ErrHandler:
3053
3054 ' @@ Seria el colmo que suceda un error aqui xD
3055End Sub
3056
3057Private Function GetVar(ByVal file As String, _
3058 ByVal Main As String, _
3059 ByVal Var As String, _
3060 Optional EmptySpaces As Long = 1024) As String
3061 '***************************************************
3062 'Author: Unknown
3063 'Last Modification: -
3064 '
3065 '***************************************************
3066
3067 Dim sSpaces As String ' This will hold the input that the program will retrieve
3068 Dim szReturn As String ' This will be the defaul value if the string is not found
3069
3070 szReturn = vbNullString
3071
3072 sSpaces = Space$(EmptySpaces) ' This tells the computer how long the longest string can be
3073
3074 GetPrivateProfileString Main, Var, szReturn, sSpaces, EmptySpaces, file
3075
3076 GetVar = RTrim$(sSpaces)
3077 GetVar = Left$(GetVar, Len(GetVar) - 1)
3078
3079End Function
3080
3081Function DB_STRING_SAFE(ByRef cad As String) As Boolean
3082 '***************************************************
3083 '@ Autor: Lain
3084 '@ Fecha: 02/08/12
3085 '@ Desc: Busca caracteres que puedan buguearnos _
3086 la base de datos
3087 '***************************************************
3088
3089 Dim i As Long
3090 Dim car As Byte
3091
3092 If InStr(1, cad, "'") > 0 Or InStr(1, cad, """") > 0 Or InStr(1, cad, "/") > 0 Or InStr(1, cad, "\") > 0 Then
3093 DB_STRING_SAFE = False
3094
3095 Exit Function
3096
3097 End If
3098
3099 For i = 1 To Len(cad)
3100 car = AscW(Mid$(cad, i, 1))
3101
3102 If car < ASCII_LOWER_LIMIT_CHAR Or car > ASCII_UPPER_LIMIT_CHAR Then
3103 DB_STRING_SAFE = False
3104
3105 Exit Function
3106
3107 End If
3108
3109 Next i
3110
3111 DB_STRING_SAFE = True
3112
3113End Function
3114
3115Function DB_MD5_SAFE(ByRef cad As String) As Boolean
3116 '***************************************************
3117 '@ Autor: Lain
3118 '@ Fecha: 02/08/12
3119 '@ Desc: Busca si la password es un md5
3120 '***************************************************
3121
3122 Dim i As Long
3123 Dim car As Byte
3124
3125 For i = 1 To Len(cad)
3126 car = AscW(Mid$(cad, i, 1))
3127
3128 If (car < 48 Or car > 57) And (car < 97 Or car > 102) Then
3129 DB_MD5_SAFE = False
3130
3131 Exit Function
3132
3133 End If
3134
3135 Next i
3136
3137 DB_MD5_SAFE = True
3138
3139End Function
3140
3141Private Function FileExist(ByVal file As String, _
3142 Optional FileType As VbFileAttribute = vbNormal) As Boolean
3143 '****************************
3144 'Se fija si existe el archivo
3145 '****************************
3146
3147 FileExist = LenB(Dir$(file, FileType)) <> 0
3148
3149End Function