GS-Zone

Anti Clientes Editados simple y funcional Ir al Indice

Moderadores: Moderadores de Argentum, Especialistas de Argentum, Especialistas de Programación

25

Nota » 20 Ene 2012 09:46

Hola no tengo el case OLOGIN ni NLOGIN,Uso Semper Widia alguna ayuda?.
:S
Zhepelin Ao
135
Aprendiz [4]
Registrado: Años de membresía
Ubicación: San Martin
Mensajes: 338

Nota » 21 Ene 2012 04:29

AngelDsm escribió:Hola no tengo el case OLOGIN ni NLOGIN,Uso Semper Widia alguna ayuda?.
:S


Em postea la primer parte del modulo TCP

Imagen
Ninja en progreso
889
Dragon Ancestral [5]
Registrado: Años de membresía
Ubicación: • olivos •
Mensajes: 4042
Aportes: 13

Nota » 24 Ene 2012 15:25

miqueas150 escribió:
AngelDsm escribió:Hola no tengo el case OLOGIN ni NLOGIN,Uso Semper Widia alguna ayuda?.
:S


Em postea la primer parte del modulo TCP



Aca tenes te deje todo el Modulo por las dudas :P. :

  1. ption Explicit
  2.  
  3. Public TempSerial As String
  4.  
  5. Public Enum SendTarget
  6.     toindex = 0         'Envia a un solo User
  7.     ToAll = 1           'A todos los Users
  8.     ToMap = 2           'Todos los Usuarios en el mapa
  9.     ToPCArea = 3        'Todos los Users en el area de un user determinado
  10.     ToNone = 4          'Ninguno
  11.     ToAllButIndex = 5   'Todos menos el index
  12.     ToMapButIndex = 6   'Todos en el mapa menos el indice
  13.     ToGM = 7
  14.     ToNPCArea = 8       'Todos los Users en el area de un user determinado
  15.     ToGuildMembers = 9
  16.     ToAdmins = 10
  17.     ToPCAreaButIndex = 11
  18.     ToAdminsAreaButConsejeros = 12
  19.     ToDiosesYclan = 13
  20.     ToConsejo = 14
  21.     ToClanArea = 15
  22.     ToConsejoCaos = 16
  23.     ToRolesMasters = 17
  24.     ToDeadArea = 18
  25.     ToCiudadanos = 19
  26.     ToCriminales = 20
  27.     ToPartyArea = 21
  28.     ToReal = 22
  29.     ToCaos = 23
  30.     ToCiudadanosYRMs = 24
  31.     ToCriminalesYRMs = 25
  32.     ToRealYRMs = 26
  33.     ToCaosYRMs = 27
  34. End Enum
  35.  
  36. Sub DarCuerpoYCabeza(ByRef UserBody As Integer, ByRef UserHead As Integer, ByVal raza As String, ByVal Gen As String)
  37. 'TODO: Poner las heads en arrays, así se acceden por índices
  38. 'y no hay problemas de discontinuidad de los índices.
  39. 'También se debe usar enums para raza y sexo
  40. Select Case Gen
  41.    Case "Hombre"
  42.         Select Case raza
  43.             Case "Humano"
  44.                 UserHead = RandomNumber(1, 30)
  45.                 UserBody = 1
  46.             Case "Elfo"
  47.                 UserHead = RandomNumber(1, 13) + 100
  48.                 If UserHead = 113 Then UserHead = 201       'Un índice no es continuo.... :S muy feo
  49.                 UserBody = 2
  50.             Case "Elfo Oscuro"
  51.                 UserHead = RandomNumber(1, 8) + 201
  52.                 UserBody = 3
  53.             Case "Enano"
  54.                 UserHead = RandomNumber(1, 5) + 300
  55.                 UserBody = 52
  56.             Case "Gnomo"
  57.                 UserHead = RandomNumber(1, 6) + 400
  58.                 UserBody = 52
  59.             Case Else
  60.                 UserHead = 1
  61.                 UserBody = 1
  62.         End Select
  63.    Case "Mujer"
  64.         Select Case raza
  65.             Case "Humano"
  66.                 UserHead = RandomNumber(1, 7) + 69
  67.                 UserBody = 1
  68.             Case "Elfo"
  69.                 UserHead = RandomNumber(1, 7) + 169
  70.                 UserBody = 2
  71.             Case "Elfo Oscuro"
  72.                 UserHead = RandomNumber(1, 11) + 269
  73.                 UserBody = 3
  74.             Case "Gnomo"
  75.                 UserHead = RandomNumber(1, 5) + 469
  76.                 UserBody = 52
  77.             Case "Enano"
  78.                 UserHead = RandomNumber(1, 3) + 369
  79.                 UserBody = 52
  80.             Case Else
  81.                 UserHead = 70
  82.                 UserBody = 1
  83.         End Select
  84. End Select
  85.  
  86. End Sub
  87.  
  88. Function AsciiValidos(ByVal cad As String) As Boolean
  89. Dim car As Byte
  90. Dim i As Integer
  91.  
  92. cad = LCase$(cad)
  93.  
  94. For i = 1 To Len(cad)
  95.     car = Asc(mid$(cad, i, 1))
  96.    
  97.     If (car < 97 Or car > 122) And (car <> 255) And (car <> 32) Then
  98.         AsciiValidos = False
  99.         Exit Function
  100.     End If
  101.    
  102. Next i
  103.  
  104. AsciiValidos = True
  105.  
  106. End Function
  107.  
  108. Function Numeric(ByVal cad As String) As Boolean
  109. Dim car As Byte
  110. Dim i As Integer
  111.  
  112. cad = LCase$(cad)
  113.  
  114. For i = 1 To Len(cad)
  115.     car = Asc(mid$(cad, i, 1))
  116.    
  117.     If (car < 48 Or car > 57) Then
  118.         Numeric = False
  119.         Exit Function
  120.     End If
  121.    
  122. Next i
  123.  
  124. Numeric = True
  125.  
  126. End Function
  127.  
  128.  
  129. Function NombrePermitido(ByVal Nombre As String) As Boolean
  130. Dim i As Integer
  131.  
  132. For i = 1 To UBound(ForbidenNames)
  133.     If InStr(Nombre, ForbidenNames(i)) Then
  134.             NombrePermitido = False
  135.             Exit Function
  136.     End If
  137. Next i
  138.  
  139. NombrePermitido = True
  140.  
  141. End Function
  142.  
  143. Function ValidateSkills(ByVal UserIndex As Integer) As Boolean
  144.  
  145. Dim LoopC As Integer
  146.  
  147. For LoopC = 1 To NUMSKILLS
  148.     If UserList(UserIndex).Stats.UserSkills(LoopC) < 0 Then
  149.         Exit Function
  150.         If UserList(UserIndex).Stats.UserSkills(LoopC) > 100 Then UserList(UserIndex).Stats.UserSkills(LoopC) = 100
  151.     End If
  152. Next LoopC
  153.  
  154. ValidateSkills = True
  155.    
  156. End Function
  157.  
  158. Sub ConnectNewUser(UserIndex As Integer, name As String, Password As String, UserRaza As String, UserSexo As String, UserClase As String, _
  159.                     US1 As String, US2 As String, US3 As String, US4 As String, US5 As String, _
  160.                     US6 As String, US7 As String, US8 As String, US9 As String, US10 As String, _
  161.                     US11 As String, US12 As String, US13 As String, US14 As String, US15 As String, _
  162.                     US16 As String, US17 As String, US18 As String, US19 As String, US20 As String, _
  163.                     US21 As String, UserEmail As String, Hogar As String, Cuenta As String, ByVal USerial As String)
  164.  
  165. If FileExist(CharPath & name & ".swao", vbNormal) = True Then
  166.     Call SendData(SendTarget.toindex, UserIndex, 0, "INF" & "Ya existe el personaje.")
  167.     Exit Sub
  168. End If
  169.  
  170. If Not AsciiValidos(name) Then
  171.     Call SendData(SendTarget.toindex, UserIndex, 0, "ERRNombre invalido.")
  172.     Exit Sub
  173. End If
  174.  
  175. Dim LoopC As Integer
  176.  
  177. If UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = 0 Then
  178.     Call SendData(SendTarget.toindex, UserIndex, 0, "ERRDebe tirar los dados antes de poder crear un personaje.")
  179.     Exit Sub
  180. End If
  181.  
  182. UserList(UserIndex).flags.Muerto = 0
  183. UserList(UserIndex).flags.Escondido = 0
  184. UserList(UserIndex).name = name
  185. UserList(UserIndex).clase = UserClase
  186. UserList(UserIndex).raza = UserRaza
  187. UserList(UserIndex).genero = UserSexo
  188. UserList(UserIndex).email = UserEmail
  189. UserList(UserIndex).Hogar = Hogar
  190.  
  191. Select Case UCase$(UserRaza)
  192.     Case "HUMANO"
  193.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 1
  194.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 1
  195.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) + 2
  196.     Case "ELFO"
  197.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 4
  198.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 2
  199.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) + 2
  200.     Case "ELFO OSCURO"
  201.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 2
  202.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 2
  203.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 2
  204.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) - 3
  205.     Case "ENANO"
  206.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 3
  207.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) + 3
  208.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) - 6
  209.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) - 1
  210.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) - 2
  211.     Case "GNOMO"
  212.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) - 4
  213.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 3
  214.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 3
  215.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) + 1
  216. End Select
  217.  
  218. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza)
  219. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad)
  220. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion)
  221. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma)
  222. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)
  223. '/columdruMysql
  224.  
  225. UserList(UserIndex).Stats.UserSkills(1) = Val(US1)
  226. UserList(UserIndex).Stats.UserSkills(2) = Val(US2)
  227. UserList(UserIndex).Stats.UserSkills(3) = Val(US3)
  228. UserList(UserIndex).Stats.UserSkills(4) = Val(US4)
  229. UserList(UserIndex).Stats.UserSkills(5) = Val(US5)
  230. UserList(UserIndex).Stats.UserSkills(6) = Val(US6)
  231. UserList(UserIndex).Stats.UserSkills(7) = Val(US7)
  232. UserList(UserIndex).Stats.UserSkills(8) = Val(US8)
  233. UserList(UserIndex).Stats.UserSkills(9) = Val(US9)
  234. UserList(UserIndex).Stats.UserSkills(10) = Val(US10)
  235. UserList(UserIndex).Stats.UserSkills(11) = Val(US11)
  236. UserList(UserIndex).Stats.UserSkills(12) = Val(US12)
  237. UserList(UserIndex).Stats.UserSkills(13) = Val(US13)
  238. UserList(UserIndex).Stats.UserSkills(14) = Val(US14)
  239. UserList(UserIndex).Stats.UserSkills(15) = Val(US15)
  240. UserList(UserIndex).Stats.UserSkills(16) = Val(US16)
  241. UserList(UserIndex).Stats.UserSkills(17) = Val(US17)
  242. UserList(UserIndex).Stats.UserSkills(18) = Val(US18)
  243. UserList(UserIndex).Stats.UserSkills(19) = Val(US19)
  244. UserList(UserIndex).Stats.UserSkills(20) = Val(US20)
  245. UserList(UserIndex).Stats.UserSkills(21) = Val(US21)
  246.  
  247. Dim Totalskpts As Integer
  248.  
  249. Totalskpts = 0
  250.  
  251. For LoopC = 1 To NUMSKILLS
  252.     Totalskpts = Totalskpts + Abs(UserList(UserIndex).Stats.UserSkills(LoopC))
  253. Next LoopC
  254.  
  255. If Totalskpts > 10 Then
  256.     Call LogHackAttemp(UserList(UserIndex).name & " intento hackear los skills.")
  257.     Call CloseSocket(UserIndex)
  258.     Exit Sub
  259. End If
  260.  
  261. UserList(UserIndex).Password = Password
  262. UserList(UserIndex).Char.heading = eHeading.SOUTH
  263.  
  264. Call DarCuerpoYCabeza(UserList(UserIndex).Char.body, UserList(UserIndex).Char.Head, UserList(UserIndex).raza, UserList(UserIndex).genero)
  265. UserList(UserIndex).OrigChar = UserList(UserIndex).Char
  266.    
  267. UserList(UserIndex).Char.WeaponAnim = NingunArma
  268. UserList(UserIndex).Char.ShieldAnim = NingunEscudo
  269. UserList(UserIndex).Char.CascoAnim = NingunCasco
  270.  
  271. UserList(UserIndex).Stats.MET = 1
  272. Dim MiInt As Long
  273. MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) \ 3)
  274.  
  275. UserList(UserIndex).Stats.MaxHP = 15 + MiInt
  276. UserList(UserIndex).Stats.MinHP = 15 + MiInt
  277.  
  278. MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) \ 6)
  279. If MiInt = 1 Then MiInt = 2
  280.  
  281. UserList(UserIndex).Stats.MaxSta = 20 * MiInt
  282. UserList(UserIndex).Stats.MinSta = 20 * MiInt
  283.  
  284.  
  285. UserList(UserIndex).Stats.MaxAGU = 100
  286. UserList(UserIndex).Stats.MinAGU = 100
  287.  
  288. UserList(UserIndex).Stats.MaxHam = 100
  289. UserList(UserIndex).Stats.MinHam = 100
  290.  
  291.  
  292. '<-----------------MANA----------------------->
  293. If UCase$(UserClase) = "MAGO" Then
  294.     MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)) / 3
  295.     UserList(UserIndex).Stats.MaxMAN = 100 + MiInt
  296.     UserList(UserIndex).Stats.MinMAN = 100 + MiInt
  297. ElseIf UCase$(UserClase) = "CLERIGO" Or UCase$(UserClase) = "DRUIDA" _
  298.     Or UCase$(UserClase) = "BARDO" Or UCase$(UserClase) = "ASESINO" Then
  299.         MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)) / 4
  300.         UserList(UserIndex).Stats.MaxMAN = 50
  301.         UserList(UserIndex).Stats.MinMAN = 50
  302. Else
  303.     UserList(UserIndex).Stats.MaxMAN = 0
  304.     UserList(UserIndex).Stats.MinMAN = 0
  305. End If
  306.  
  307. If UCase$(UserClase) = "MAGO" Or UCase$(UserClase) = "CLERIGO" Or _
  308.    UCase$(UserClase) = "DRUIDA" Or UCase$(UserClase) = "BARDO" Or _
  309.    UCase$(UserClase) = "ASESINO" Or UCase$(UserClase) = "PALADIN" Then
  310.         UserList(UserIndex).Stats.UserHechizos(1) = 2
  311. End If
  312.  
  313. UserList(UserIndex).Stats.MaxHIT = 2
  314. UserList(UserIndex).Stats.MinHIT = 1
  315.  
  316. UserList(UserIndex).Stats.GLD = 0
  317.  
  318. UserList(UserIndex).Stats.Exp = 0
  319. UserList(UserIndex).Stats.ELU = 300
  320. UserList(UserIndex).Stats.ELV = 1
  321.  
  322. UserList(UserIndex).Invent.NroItems = 4
  323.  
  324. UserList(UserIndex).Invent.Object(1).ObjIndex = 467
  325. UserList(UserIndex).Invent.Object(1).Amount = 100
  326.  
  327. UserList(UserIndex).Invent.Object(2).ObjIndex = 468
  328. UserList(UserIndex).Invent.Object(2).Amount = 100
  329. UserList(UserIndex).Ranking.DuelosGanados = 0
  330. UserList(UserIndex).Ranking.DuelosParejaGanados = 0
  331. UserList(UserIndex).Ranking.MaxRondasDesafio = 0
  332. UserList(UserIndex).Ranking.TorneosGanados = 0
  333. UserList(UserIndex).Invent.Object(3).ObjIndex = 460
  334. UserList(UserIndex).Invent.Object(3).Amount = 1
  335. UserList(UserIndex).Invent.Object(3).Equipped = 1
  336.  
  337. If UCase$(UserClase) = "MAGO" Or UCase$(UserClase) = "BARDO" Or _
  338. UCase$(UserClase) = "PALADIN" Or UCase$(UserClase) = "DRUIDA" Or UCase$(UserClase) = "CLERIGO" Then
  339.  
  340. UserList(UserIndex).Invent.Object(5).ObjIndex = 461 'POTA ROJA
  341. UserList(UserIndex).Invent.Object(5).Amount = 150
  342. UserList(UserIndex).Invent.Object(6).ObjIndex = 975 'POTA AZUL
  343. UserList(UserIndex).Invent.Object(6).Amount = 150
  344.  
  345. Else
  346.  
  347. UserList(UserIndex).Invent.Object(5).ObjIndex = 461 'POTA ROJA
  348. UserList(UserIndex).Invent.Object(5).Amount = 150
  349.  
  350. End If
  351.  
  352. If Not UCase$(UserClase) = "MAGO" Then
  353.  
  354. UserList(UserIndex).Invent.Object(7).ObjIndex = 462 'POTA VERDE
  355. UserList(UserIndex).Invent.Object(7).Amount = 150
  356. UserList(UserIndex).Invent.Object(8).ObjIndex = 1078 'POTA AMARILLA
  357. UserList(UserIndex).Invent.Object(8).Amount = 150
  358.  
  359. End If
  360.  
  361.  
  362. Select Case UserRaza
  363.     Case "Humano"
  364.         UserList(UserIndex).Invent.Object(4).ObjIndex = 463
  365.     Case "Elfo"
  366.         UserList(UserIndex).Invent.Object(4).ObjIndex = 464
  367.     Case "Elfo Oscuro"
  368.         UserList(UserIndex).Invent.Object(4).ObjIndex = 465
  369.     Case "Enano"
  370.         UserList(UserIndex).Invent.Object(4).ObjIndex = 466
  371.     Case "Gnomo"
  372.         UserList(UserIndex).Invent.Object(4).ObjIndex = 466
  373. End Select
  374.  
  375. UserList(UserIndex).Invent.Object(4).Amount = 1
  376. UserList(UserIndex).Invent.Object(4).Equipped = 1
  377.  
  378. UserList(UserIndex).Invent.Object(9).ObjIndex = 41
  379. UserList(UserIndex).Invent.Object(9).Amount = 1
  380.  
  381. UserList(UserIndex).Invent.ArmourEqpSlot = 4
  382. UserList(UserIndex).Invent.ArmourEqpObjIndex = UserList(UserIndex).Invent.Object(4).ObjIndex
  383.  
  384. UserList(UserIndex).Invent.WeaponEqpObjIndex = UserList(UserIndex).Invent.Object(3).ObjIndex
  385. UserList(UserIndex).Invent.WeaponEqpSlot = 3
  386. UserList(UserIndex).Stats.TPoints = 0
  387. UserList(UserIndex).FaccionNumber = 2
  388. UserList(UserIndex).flags.Caballero = 0
  389. UserList(UserIndex).flags.IsMaxLevel = False
  390. UserList(UserIndex).Char.Account = Cuenta
  391. Call AddPjCuenta(Cuenta, name)
  392. Call DB_SaveCharacter(UserIndex, name)
  393. Call ConnectUser(UserIndex, name, Password, USerial, Cuenta)
  394. Call SendData(SendTarget.toindex, UserIndex, 0, "CUD" & (1 + 1) & "," & name & "," & UserList(UserIndex).Char.body & "," & UserList(UserIndex).Char.Head)
  395. End Sub
  396. Sub CloseSocket(ByVal UserIndex As Integer)
  397.  
  398. On Error GoTo errhandler
  399.    
  400.     If UserIndex = LastUser Then
  401.         Do Until UserList(LastUser).flags.UserLogged
  402.             LastUser = LastUser - 1
  403.             If LastUser < 1 Then Exit Do
  404.         Loop
  405.     End If
  406.    
  407.     If UserList(UserIndex).ConnID <> -1 Then
  408.         Call CloseSocketSL(UserIndex)
  409.     End If
  410.    
  411.     If UserList(UserIndex).ComUsu.DestUsu > 0 Then
  412.         If UserList(UserList(UserIndex).ComUsu.DestUsu).flags.UserLogged Then
  413.             If UserList(UserList(UserIndex).ComUsu.DestUsu).ComUsu.DestUsu = UserIndex Then
  414.                 Call SendData(SendTarget.toindex, UserList(UserIndex).ComUsu.DestUsu, 0, "||Comercio cancelado por el otro usuario" & FONTTYPE_TALK)
  415.                 Call FinComerciarUsu(UserList(UserIndex).ComUsu.DestUsu)
  416.             End If
  417.         End If
  418.     End If
  419.    
  420.      If UserList(UserIndex).flags.Teleports.Creado = True Then
  421.         UserList(UserIndex).flags.Teleports.Creado = False
  422.        
  423.         Call EraseObj(SendTarget.ToMap, 0, UserList(UserIndex).Pos.Map, 1, UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY)
  424.        
  425.         MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.Map = 0
  426.         MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.X = 0
  427.         MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.Y = 0
  428.    
  429.         UserList(UserIndex).flags.Teleports.tMap = 0
  430.         UserList(UserIndex).flags.Teleports.TimeCount = 0
  431.         UserList(UserIndex).flags.Teleports.tX = 0
  432.         UserList(UserIndex).flags.Teleports.tY = 0
  433.         UserList(UserIndex).flags.Teleports.Creado = False
  434.        
  435.     End If
  436.      
  437.     If UserList(UserIndex).flags.UserLogged Then
  438.         If NumUsers > 0 Then NumUsers = NumUsers - 1
  439.         Call CloseUser(UserIndex)
  440.        
  441.     Else
  442.         Call ResetUserSlot(UserIndex)
  443.     End If
  444.    
  445.     UserList(UserIndex).ConnID = -1
  446.     UserList(UserIndex).ConnIDValida = False
  447.     UserList(UserIndex).NumeroPaquetesPorMiliSec = 0
  448.    
  449. Exit Sub
  450.  
  451. errhandler:
  452.     UserList(UserIndex).ConnID = -1
  453.     UserList(UserIndex).ConnIDValida = False
  454.     UserList(UserIndex).NumeroPaquetesPorMiliSec = 0
  455.     Call ResetUserSlot(UserIndex)
  456.  
  457.     Call LogError("CloseSocket - Error = " & Err.Number & " - Descripción = " & Err.Description & " - UserIndex = " & UserIndex)
  458. End Sub
  459.  
  460. Sub CloseSocketSL(ByVal UserIndex As Integer)
  461.  
  462. If UserList(UserIndex).ConnID <> -1 And UserList(UserIndex).ConnIDValida Then
  463.     Call BorraSlotSock(UserList(UserIndex).ConnID)
  464.     Call WSApiCloseSocket(UserList(UserIndex).ConnID)
  465.     UserList(UserIndex).ConnIDValida = False
  466. End If
  467. End Sub
  468.  
  469. Public Function EnviarDatosASlot(ByVal UserIndex As Integer, Datos As String) As Long
  470.  
  471.     On Error GoTo Err
  472.    
  473.     Dim Ret As Long
  474.        
  475.     Ret = WsApiEnviar(UserIndex, Datos)
  476.    
  477.     If Ret <> 0 And Ret <> WSAEWOULDBLOCK Then
  478.         Call CloseSocketSL(UserIndex)
  479.         Call Cerrar_Usuario(UserIndex)
  480.     End If
  481.     EnviarDatosASlot = Ret
  482.     Exit Function
  483.    
  484. Err:
  485.         'If MainView.SUPERLOG.Value = 1 Then LogCustom ("EnviarDatosASlot:: ERR Handler. userindex=" & UserIndex & " datos=" & Datos & " UL?/CId/CIdV?=" & UserList(UserIndex).flags.UserLogged & "/" & UserList(UserIndex).ConnID & "/" & UserList(UserIndex).ConnIDValida & " ERR: " & Err.Description)
  486. End Function
  487.  
  488. Public Function EnviarDatosASlot2(ByVal UserIndex As Integer, Datos As String) As Long
  489.  
  490. #If UsarQueSocket = 1 Then
  491.     On Error GoTo Err
  492.    
  493.     Dim Ret As Long
  494.    
  495.    
  496.    
  497.     Ret = WsApiEnviar(UserIndex, Datos)
  498.    
  499.     If Ret <> 0 And Ret <> WSAEWOULDBLOCK Then
  500.         Call CloseSocketSL(UserIndex)
  501.         Call Cerrar_Usuario(UserIndex)
  502.     End If
  503.     EnviarDatosASlot2 = Ret
  504.     Exit Function
  505.    
  506. Err:
  507.         'If MainView.SUPERLOG.Value = 1 Then LogCustom ("EnviarDatosASlot:: ERR Handler. userindex=" & UserIndex & " datos=" & Datos & " UL?/CId/CIdV?=" & UserList(UserIndex).flags.UserLogged & "/" & UserList(UserIndex).ConnID & "/" & UserList(UserIndex).ConnIDValida & " ERR: " & Err.Description)
  508.  
  509. #ElseIf UsarQueSocket = 0 Then '**********************************************
  510.  
  511.     Dim Encolar As Boolean
  512.     Encolar = False
  513.    
  514.     EnviarDatosASlot2 = 0
  515.    
  516.     If UserList(UserIndex).ColaSalida.Count <= 0 Then
  517.         If MainView.Socket2(UserIndex).Write(Datos, Len(Datos)) < 0 Then
  518.             If MainView.Socket2(UserIndex).LastError = WSAEWOULDBLOCK Then
  519.                 UserList(UserIndex).SockPuedoEnviar = False
  520.                 Encolar = True
  521.             Else
  522.                 Call Cerrar_Usuario(UserIndex)
  523.             End If
  524.         End If
  525.     Else
  526.         Encolar = True
  527.     End If
  528.    
  529.     If Encolar Then
  530.         Debug.Print "Encolando..."
  531.         UserList(UserIndex).ColaSalida.Add Datos
  532.     End If
  533.  
  534. #ElseIf UsarQueSocket = 2 Then '**********************************************
  535.  
  536. Dim Encolar As Boolean
  537. Dim Ret As Long
  538.    
  539.     Encolar = False
  540.    
  541.     '//
  542.     '// Valores de retorno:
  543.     '//                     0: Todo OK
  544.     '//                     1: WSAEWOULDBLOCK
  545.     '//                     2: Error critico
  546.     '//
  547.     If UserList(UserIndex).ColaSalida.Count <= 0 Then
  548.         Ret = MainView.Serv.Enviar(UserList(UserIndex).ConnID, Datos, Len(Datos))
  549.         If Ret = 1 Then
  550.             Encolar = True
  551.         ElseIf Ret = 2 Then
  552.             Call CloseSocketSL(UserIndex)
  553.             Call Cerrar_Usuario(UserIndex)
  554.         End If
  555.     Else
  556.         Encolar = True
  557.     End If
  558.    
  559.     If Encolar Then
  560.         Debug.Print "Encolando..."
  561.         UserList(UserIndex).ColaSalida.Add Datos
  562.     End If
  563. #End If '**********************************************
  564.  
  565. End Function
  566.  
  567. Sub SendData(ByVal sndRoute As SendTarget, ByVal sndIndex As Integer, ByVal sndMap As Integer, ByVal sndData As String)
  568.  
  569. On Error Resume Next
  570.  
  571. Dim LoopC As Integer
  572. Dim X As Integer
  573. Dim Y As Integer
  574.  
  575. If sndData <> "BUENO" Then
  576. sndData = Security.Security.NSC_Encryption(sndData, Security.Keys(1))
  577. End If
  578. sndData = sndData & ENDC
  579.  
  580. Select Case sndRoute
  581.  
  582.     Case SendTarget.ToPCArea
  583.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  584.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  585.                If InMapBounds(X, Y) Then
  586.                     If MapData(sndMap, X, Y).UserIndex > 0 Then
  587.                        If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  588.                             Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  589.                        End If
  590.                     End If
  591.                End If
  592.             Next X
  593.         Next Y
  594.         Exit Sub
  595.    
  596.     Case SendTarget.toindex
  597.         If UserList(sndIndex).ConnID <> -1 Then
  598.             Call EnviarDatosASlot(sndIndex, sndData)
  599.             Exit Sub
  600.         End If
  601.  
  602.  
  603.     Case SendTarget.ToNone
  604.         Exit Sub
  605.        
  606.        
  607.     Case SendTarget.ToAdmins
  608.         For LoopC = 1 To LastUser
  609.             If UserList(LoopC).ConnID <> -1 Then
  610.                 If UserList(LoopC).flags.Privilegios > 0 Then
  611.                     Call EnviarDatosASlot(LoopC, sndData)
  612.                End If
  613.             End If
  614.         Next LoopC
  615.         Exit Sub
  616.        
  617.     Case SendTarget.ToAll
  618.         For LoopC = 1 To LastUser
  619.             If UserList(LoopC).ConnID <> -1 Then
  620.                 If UserList(LoopC).flags.UserLogged Then 'Esta logeado como usuario?
  621.                     Call EnviarDatosASlot(LoopC, sndData)
  622.                 End If
  623.             End If
  624.         Next LoopC
  625.         Exit Sub
  626.    
  627.     Case SendTarget.ToAllButIndex
  628.         For LoopC = 1 To LastUser
  629.             If (UserList(LoopC).ConnID <> -1) And (LoopC <> sndIndex) Then
  630.                 If UserList(LoopC).flags.UserLogged Then 'Esta logeado como usuario?
  631.                     Call EnviarDatosASlot(LoopC, sndData)
  632.                 End If
  633.             End If
  634.         Next LoopC
  635.         Exit Sub
  636.    
  637.     Case SendTarget.ToMap
  638.         For LoopC = 1 To LastUser
  639.             If (UserList(LoopC).ConnID <> -1) Then
  640.                 If UserList(LoopC).flags.UserLogged Then
  641.                     If UserList(LoopC).Pos.Map = sndMap Then
  642.                         Call EnviarDatosASlot(LoopC, sndData)
  643.                     End If
  644.                 End If
  645.             End If
  646.         Next LoopC
  647.         Exit Sub
  648.      
  649.     Case SendTarget.ToMapButIndex
  650.         For LoopC = 1 To LastUser
  651.             If (UserList(LoopC).ConnID <> -1) And LoopC <> sndIndex Then
  652.                 If UserList(LoopC).Pos.Map = sndMap Then
  653.                     Call EnviarDatosASlot(LoopC, sndData)
  654.                 End If
  655.             End If
  656.         Next LoopC
  657.         Exit Sub
  658.            
  659.     Case SendTarget.ToGuildMembers
  660.        
  661.         LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
  662.         While LoopC > 0
  663.             If (UserList(LoopC).ConnID <> -1) Then
  664.                 Call EnviarDatosASlot(LoopC, sndData)
  665.             End If
  666.             LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
  667.         Wend
  668.        
  669.         Exit Sub
  670.  
  671.  
  672.     Case SendTarget.ToDeadArea
  673.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  674.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  675.                If InMapBounds(X, Y) Then
  676.                     If MapData(sndMap, X, Y).UserIndex > 0 Then
  677.                         If UserList(MapData(sndMap, X, Y).UserIndex).flags.Muerto = 1 Or UserList(MapData(sndMap, X, Y).UserIndex).flags.Privilegios >= 1 Then
  678.                            If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  679.                                 Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  680.                            End If
  681.                         End If
  682.                     End If
  683.                End If
  684.             Next X
  685.         Next Y
  686.         Exit Sub
  687.  
  688.     '[Alejo-18-5]
  689.     Case SendTarget.ToPCAreaButIndex
  690.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  691.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  692.                If InMapBounds(X, Y) Then
  693.                     If (MapData(sndMap, X, Y).UserIndex > 0) And (MapData(sndMap, X, Y).UserIndex <> sndIndex) Then
  694.                        If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  695.                             Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  696.                        End If
  697.                     End If
  698.                End If
  699.             Next X
  700.         Next Y
  701.         Exit Sub
  702.        
  703.     Case SendTarget.ToClanArea
  704.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  705.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  706.                If InMapBounds(X, Y) Then
  707.                     If (MapData(sndMap, X, Y).UserIndex > 0) Then
  708.                         If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  709.                             If UserList(sndIndex).GuildIndex > 0 And UserList(MapData(sndMap, X, Y).UserIndex).GuildIndex = UserList(sndIndex).GuildIndex Then
  710.                                 Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  711.                             End If
  712.                         End If
  713.                     End If
  714.                End If
  715.             Next X
  716.         Next Y
  717.         Exit Sub
  718.  
  719.  
  720.  
  721.     Case SendTarget.ToPartyArea
  722.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  723.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  724.                If InMapBounds(X, Y) Then
  725.                     If (MapData(sndMap, X, Y).UserIndex > 0) Then
  726.                         If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  727.                             If UserList(sndIndex).PartyIndex > 0 And UserList(MapData(sndMap, X, Y).UserIndex).PartyIndex = UserList(sndIndex).PartyIndex Then
  728.                                 Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  729.                             End If
  730.                         End If
  731.                     End If
  732.                End If
  733.             Next X
  734.         Next Y
  735.         Exit Sub
  736.        
  737.     '[CDT 17-02-2004]
  738.     Case SendTarget.ToAdminsAreaButConsejeros
  739.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  740.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  741.                If InMapBounds(X, Y) Then
  742.                     If (MapData(sndMap, X, Y).UserIndex > 0) And (MapData(sndMap, X, Y).UserIndex <> sndIndex) Then
  743.                        If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  744.                             If UserList(MapData(sndMap, X, Y).UserIndex).flags.Privilegios > 1 Then
  745.                                 Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  746.                             End If
  747.                        End If
  748.                     End If
  749.                End If
  750.             Next X
  751.         Next Y
  752.         Exit Sub
  753.     '[/CDT]
  754.  
  755.     Case SendTarget.ToNPCArea
  756.         For Y = Npclist(sndIndex).Pos.Y - MinYBorder + 1 To Npclist(sndIndex).Pos.Y + MinYBorder - 1
  757.             For X = Npclist(sndIndex).Pos.X - MinXBorder + 1 To Npclist(sndIndex).Pos.X + MinXBorder - 1
  758.                If InMapBounds(X, Y) Then
  759.                     If MapData(sndMap, X, Y).UserIndex > 0 Then
  760.                        If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  761.                             Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  762.                        End If
  763.                     End If
  764.                End If
  765.             Next X
  766.         Next Y
  767.         Exit Sub
  768.  
  769.     Case SendTarget.ToDiosesYclan
  770.         LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
  771.         While LoopC > 0
  772.             If (UserList(LoopC).ConnID <> -1) Then
  773.                 Call EnviarDatosASlot(LoopC, sndData)
  774.             End If
  775.             LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
  776.         Wend
  777.  
  778.         LoopC = Guild.Iterador_ProximoGM(sndIndex)
  779.         While LoopC > 0
  780.             If (UserList(LoopC).ConnID <> -1) Then
  781.                 Call EnviarDatosASlot(LoopC, sndData)
  782.             End If
  783.             LoopC = Guild.Iterador_ProximoGM(sndIndex)
  784.         Wend
  785.  
  786.         Exit Sub
  787.  
  788.     Case SendTarget.ToConsejo
  789.         For LoopC = 1 To LastUser
  790.             If (UserList(LoopC).ConnID <> -1) Then
  791.                 If UserList(LoopC).flags.PertAlCons > 0 Then
  792.                     Call EnviarDatosASlot(LoopC, sndData)
  793.                 End If
  794.             End If
  795.         Next LoopC
  796.         Exit Sub
  797.     Case SendTarget.ToConsejoCaos
  798.         For LoopC = 1 To LastUser
  799.             If (UserList(LoopC).ConnID <> -1) Then
  800.                 If UserList(LoopC).flags.PertAlConsCaos > 0 Then
  801.                     Call EnviarDatosASlot(LoopC, sndData)
  802.                 End If
  803.             End If
  804.         Next LoopC
  805.         Exit Sub
  806.     Case SendTarget.ToRolesMasters
  807.         For LoopC = 1 To LastUser
  808.             If (UserList(LoopC).ConnID <> -1) Then
  809.                 If UserList(LoopC).flags.EsRolesMaster Then
  810.                     Call EnviarDatosASlot(LoopC, sndData)
  811.                 End If
  812.             End If
  813.         Next LoopC
  814.         Exit Sub
  815.    
  816.     Case SendTarget.ToCiudadanos
  817.         For LoopC = 1 To LastUser
  818.             If (UserList(LoopC).ConnID <> -1) Then
  819.                 If Not criminal(LoopC) Then
  820.                     Call EnviarDatosASlot(LoopC, sndData)
  821.                 End If
  822.             End If
  823.         Next LoopC
  824.         Exit Sub
  825.    
  826.     Case SendTarget.ToCriminales
  827.         For LoopC = 1 To LastUser
  828.             If (UserList(LoopC).ConnID <> -1) Then
  829.                 If criminal(LoopC) Then
  830.                     Call EnviarDatosASlot(LoopC, sndData)
  831.                 End If
  832.             End If
  833.         Next LoopC
  834.         Exit Sub
  835.    
  836.     Case SendTarget.ToReal
  837.         For LoopC = 1 To LastUser
  838.             If (UserList(LoopC).ConnID <> -1) Then
  839.                 If UserList(LoopC).Faccion.ArmadaReal = 1 Then
  840.                     Call EnviarDatosASlot(LoopC, sndData)
  841.                 End If
  842.             End If
  843.         Next LoopC
  844.         Exit Sub
  845.    
  846.     Case SendTarget.ToCaos
  847.         For LoopC = 1 To LastUser
  848.             If (UserList(LoopC).ConnID <> -1) Then
  849.                 If UserList(LoopC).Faccion.FuerzasCaos = 1 Then
  850.                     Call EnviarDatosASlot(LoopC, sndData)
  851.                 End If
  852.             End If
  853.         Next LoopC
  854.         Exit Sub
  855.        
  856.     Case ToCiudadanosYRMs
  857.         For LoopC = 1 To LastUser
  858.             If (UserList(LoopC).ConnID <> -1) Then
  859.                 If Not criminal(LoopC) Or UserList(LoopC).flags.EsRolesMaster Then
  860.                     Call EnviarDatosASlot(LoopC, sndData)
  861.                 End If
  862.             End If
  863.         Next LoopC
  864.         Exit Sub
  865.    
  866.     Case ToCriminalesYRMs
  867.         For LoopC = 1 To LastUser
  868.             If (UserList(LoopC).ConnID <> -1) Then
  869.                 If criminal(LoopC) Or UserList(LoopC).flags.EsRolesMaster Then
  870.                     Call EnviarDatosASlot(LoopC, sndData)
  871.                 End If
  872.             End If
  873.         Next LoopC
  874.         Exit Sub
  875.    
  876.     Case ToRealYRMs
  877.         For LoopC = 1 To LastUser
  878.             If (UserList(LoopC).ConnID <> -1) Then
  879.                 If UserList(LoopC).Faccion.ArmadaReal = 1 Or UserList(LoopC).flags.EsRolesMaster Then
  880.                     Call EnviarDatosASlot(LoopC, sndData)
  881.                 End If
  882.             End If
  883.         Next LoopC
  884.         Exit Sub
  885.    
  886.     Case ToCaosYRMs
  887.         For LoopC = 1 To LastUser
  888.             If (UserList(LoopC).ConnID <> -1) Then
  889.                 If UserList(LoopC).Faccion.FuerzasCaos = 1 Or UserList(LoopC).flags.EsRolesMaster Then
  890.                     Call EnviarDatosASlot(LoopC, sndData)
  891.                 End If
  892.             End If
  893.         Next LoopC
  894.         Exit Sub
  895. End Select
  896.  
  897. End Sub
  898.  
  899. Sub SendData2(ByVal sndRoute As SendTarget, ByVal sndIndex As Integer, ByVal sndData As String)
  900.  
  901. On Error Resume Next
  902.  
  903. sndData = sndData & ENDC
  904.  
  905. Select Case sndRoute
  906.     Case SendTarget.toindex
  907.         If UserList(sndIndex).ConnID <> -1 Then
  908.              Call EnviarDatosASlot2(sndIndex, sndData)
  909.              Exit Sub
  910.         End If
  911.    
  912. End Select
  913. End Sub
  914. Function EstaPCarea(Index As Integer, Index2 As Integer) As Boolean
  915.  
  916.  
  917. Dim X As Integer, Y As Integer
  918. For Y = UserList(Index).Pos.Y - MinYBorder + 1 To UserList(Index).Pos.Y + MinYBorder - 1
  919.         For X = UserList(Index).Pos.X - MinXBorder + 1 To UserList(Index).Pos.X + MinXBorder - 1
  920.  
  921.             If MapData(UserList(Index).Pos.Map, X, Y).UserIndex = Index2 Then
  922.                 EstaPCarea = True
  923.                 Exit Function
  924.             End If
  925.        
  926.         Next X
  927. Next Y
  928. EstaPCarea = False
  929. End Function
  930.  
  931. Function HayPCarea(Pos As WorldPos) As Boolean
  932.  
  933.  
  934. Dim X As Integer, Y As Integer
  935. For Y = Pos.Y - MinYBorder + 1 To Pos.Y + MinYBorder - 1
  936.         For X = Pos.X - MinXBorder + 1 To Pos.X + MinXBorder - 1
  937.             If X > 0 And Y > 0 And X < 101 And Y < 101 Then
  938.                 If MapData(Pos.Map, X, Y).UserIndex > 0 Then
  939.                     HayPCarea = True
  940.                     Exit Function
  941.                End If
  942.             End If
  943.         Next X
  944. Next Y
  945. HayPCarea = False
  946. End Function
  947.  
  948. Function HayOBJarea(Pos As WorldPos, ObjIndex As Integer) As Boolean
  949.  
  950.  
  951. Dim X As Integer, Y As Integer
  952. For Y = Pos.Y - MinYBorder + 1 To Pos.Y + MinYBorder - 1
  953.         For X = Pos.X - MinXBorder + 1 To Pos.X + MinXBorder - 1
  954.             If MapData(Pos.Map, X, Y).ObjInfo.ObjIndex = ObjIndex Then
  955.                 HayOBJarea = True
  956.                 Exit Function
  957.             End If
  958.        
  959.         Next X
  960. Next Y
  961. HayOBJarea = False
  962. End Function
  963.  
  964. Function ValidateChr(ByVal UserIndex As Integer) As Boolean
  965.  
  966. ValidateChr = UserList(UserIndex).Char.Head <> 0 _
  967.                 And UserList(UserIndex).Char.body <> 0 _
  968.                 And ValidateSkills(UserIndex)
  969.  
  970. End Function
  971.  
  972. Sub ConnectUser(ByVal UserIndex As Integer, name As String, Password As String, ByVal UserSerial As String, Cuenta As String)
  973. Dim N As Integer
  974. Dim tStr As String
  975. On Error GoTo ERr_HS
  976. UserList(UserIndex).flags.Escondido = 0
  977. UserList(UserIndex).flags.Guerra = False
  978. Call SendData(SendTarget.toindex, UserIndex, 0, "|G0")
  979. UserList(UserIndex).flags.TargetNPC = 0
  980. UserList(UserIndex).flags.TargetNpcTipo = eNPCType.Comun
  981. UserList(UserIndex).flags.TargetObj = 0
  982. UserList(UserIndex).flags.TargetUser = 0
  983. UserList(UserIndex).Char.FX = 0
  984. UserList(UserIndex).SerialIndex = UserSerial
  985. UserList(UserIndex).flags.SeguItems = True
  986.  
  987. If NumUsers >= MaxUsers Then
  988.     Call SendData(SendTarget.toindex, UserIndex, 0, "ERREl servidor ha alcanzado el maximo de usuarios soportado, por favor vuelva a intertarlo mas tarde.")
  989.     Call CloseSocket(UserIndex)
  990.     Exit Sub
  991. End If
  992.  
  993. If AllowMultiLogins = 0 Then
  994.     If CheckForSameIP(UserIndex, UserList(UserIndex).ip) = True Then
  995.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERRNo es posible usar mas de un personaje al mismo tiempo.")
  996.         Call CloseSocket(UserIndex)
  997.         Exit Sub
  998.     End If
  999. End If
  1000.  
  1001. Call SendData(SendTarget.toindex, UserIndex, 0, "CUALIPC" & UserList(UserIndex).ip)
  1002.  
  1003. Dim j As Integer
  1004.  
  1005.  
  1006.  
  1007. If CheckForSameName(name) Then
  1008.     If UserList(NameIndex(name)).Counters.Saliendo Then
  1009.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERREl usuario está saliendo.")
  1010.     Else
  1011.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERRPerdon, un usuario con el mismo nombre se há logoeado.")
  1012.     End If
  1013.     Call CloseSocket(UserIndex)
  1014.     Exit Sub
  1015. End If
  1016.  
  1017. Call DB_LoadCharacter(UserIndex, name)
  1018.  
  1019. If Not ValidateChr(UserIndex) Then
  1020.     Call SendData(SendTarget.toindex, UserIndex, 0, "!!Hubo un error al cargar tu personaje, informa esto en nuestros foros http://www.swforos.com/foro/.)
  1021.     Call CloseSocket(UserIndex)
  1022.     Exit Sub
  1023. End If
  1024.  
  1025. If UserList(UserIndex).flags.Ban Then
  1026. Call SendData(SendTarget.toindex, UserIndex, 0, "ERREste personaje se encuentra bajo una suspención, para tenér mas información, visitá http://www.swforos.com.ar/")
  1027. CloseSocket (UserIndex)
  1028. Exit Sub
  1029. End If
  1030.  
  1031. If UserList(UserIndex).Invent.EscudoEqpSlot = 0 Then UserList(UserIndex).Char.ShieldAnim = NingunEscudo
  1032. If UserList(UserIndex).Invent.CascoEqpSlot = 0 Then UserList(UserIndex).Char.CascoAnim = NingunCasco
  1033. If UserList(UserIndex).Invent.WeaponEqpSlot = 0 Then UserList(UserIndex).Char.WeaponAnim = NingunArma
  1034.  
  1035.  
  1036. Call UpdateUserInv(True, UserIndex, 0)
  1037. Call UpdateUserHechizos(True, UserIndex, 0)
  1038.  
  1039. If UserList(UserIndex).flags.Navegando = 1 Then
  1040.      UserList(UserIndex).Char.body = ObjData(UserList(UserIndex).Invent.BarcoObjIndex).Ropaje
  1041.      UserList(UserIndex).Char.Head = 0
  1042.      UserList(UserIndex).Char.WeaponAnim = NingunArma
  1043.      UserList(UserIndex).Char.ShieldAnim = NingunEscudo
  1044.      UserList(UserIndex).Char.CascoAnim = NingunCasco
  1045. End If
  1046.     If UserList(UserIndex).flags.Montando = 1 Then
  1047.          UserList(UserIndex).Char.body = ObjData(UserList(UserIndex).Invent.MonturaObjIndex).Ropaje
  1048.          UserList(UserIndex).Char.Head = UserList(UserIndex).OrigChar.Head
  1049.          UserList(UserIndex).Char.WeaponAnim = NingunArma
  1050.          UserList(UserIndex).Char.ShieldAnim = NingunEscudo
  1051.          UserList(UserIndex).Char.CascoAnim = UserList(UserIndex).Char.CascoAnim
  1052.     End If
  1053. If UserList(UserIndex).flags.Paralizado Then
  1054. #If SeguridadAlkon Then
  1055.     If EncriptarProtocolosCriticos Then
  1056.         Call SendCryptedData(SendTarget.toindex, UserIndex, 0, "PARADOK")
  1057.         Call SendData(SendTarget.toindex, UserIndex, 0, "PU" & UserList(UserIndex).Pos.X & "," & UserList(UserIndex).Pos.Y)
  1058.     Else
  1059. #End If
  1060.         Call SendData(SendTarget.toindex, UserIndex, 0, "PARADOK")
  1061.         Call SendData(SendTarget.toindex, UserIndex, 0, "PU" & UserList(UserIndex).Pos.X & "," & UserList(UserIndex).Pos.Y)
  1062. #If SeguridadAlkon Then
  1063.     End If
  1064. #End If
  1065. End If
  1066.  
  1067. 'Feo, esto tiene que ser parche cliente
  1068. If UserList(UserIndex).flags.Estupidez = 0 Then Call SendData(SendTarget.toindex, UserIndex, 0, "NESTUP")
  1069. '
  1070.  
  1071. 'Posicion de comienzo
  1072. If UserList(UserIndex).Pos.Map = 0 Then
  1073.              UserList(UserIndex).Pos.Map = 60
  1074.              UserList(UserIndex).Pos.X = 45
  1075.              UserList(UserIndex).Pos.Y = 55
  1076. Else
  1077.  
  1078. If Not MapaValido(UserList(UserIndex).Pos.Map) Then
  1079.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERREL PJ se encuenta en un mapa invalido.")
  1080.         Call CloseSocket(UserIndex)
  1081.         Exit Sub
  1082.     End If
  1083.    ''TELEFRAG
  1084.     If MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex <> 0 Then
  1085.         ''si estaba en comercio seguro...
  1086.         If UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu > 0 Then
  1087.             If UserList(UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu).flags.UserLogged Then
  1088.                 Call FinComerciarUsu(UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu)
  1089.                 Call SendData(SendTarget.toindex, UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu, 0, "||Comercio cancelado. El otro usuario se ha desconectado." & FONTTYPE_TALK)
  1090.             End If
  1091.             If UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).flags.UserLogged Then
  1092.                 Call FinComerciarUsu(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex)
  1093.                 Call SendData(SendTarget.toindex, MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex, 0, "ERRAlguien se ha conectado donde te encontrabas, por favor reconéctate...")
  1094.             End If
  1095.         End If
  1096.         Call CloseSocket(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex)
  1097.     End If
  1098.    
  1099.    
  1100.     If UserList(UserIndex).flags.Muerto = 1 Then
  1101.         Call Empollando(UserIndex)
  1102.     End If
  1103. End If
  1104.  
  1105. 'Nombre de sistema
  1106. UserList(UserIndex).name = name
  1107.  
  1108. UserList(UserIndex).Password = Password
  1109.  
  1110. UserList(UserIndex).showName = True 'Por default los nombres son visibles
  1111.  
  1112.  
  1113. Call SendData(SendTarget.toindex, UserIndex, 0, "IU" & UserIndex) 'Enviamos el User index
  1114. Call SendData(SendTarget.toindex, UserIndex, 0, "CM" & UserList(UserIndex).Pos.Map & "," & MapInfo(UserList(UserIndex).Pos.Map).MapVersion) 'Carga el mapa
  1115. Call SendData(SendTarget.toindex, UserIndex, 0, "TM" & MapInfo(UserList(UserIndex).Pos.Map).Music)
  1116.  
  1117. 'Vemos que clase de user es (se lo usa para setear los privilegios alcrear el PJ)
  1118. UserList(UserIndex).flags.EsRolesMaster = EsRolesMaster(name)
  1119. If EsEventM(name) Then
  1120.     UserList(UserIndex).flags.Privilegios = PlayerType.Dios
  1121.     UserList(UserIndex).flags.Rango = 6
  1122.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1123. ElseIf EsDirector(name) Then
  1124.     UserList(UserIndex).flags.Privilegios = PlayerType.DirectorGM
  1125.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1126. ElseIf EsAdmin(name) Then
  1127.     UserList(UserIndex).flags.Privilegios = PlayerType.Admin
  1128.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1129. ElseIf EsDios(name) Then
  1130.     UserList(UserIndex).flags.Privilegios = PlayerType.Dios
  1131.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1132. ElseIf EsSemiDios(name) Then
  1133.     UserList(UserIndex).flags.Privilegios = PlayerType.SemiDios
  1134.     UserList(UserIndex).flags.Rango = 2
  1135.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1136. ElseIf EsConsejero(name) Then
  1137.     UserList(UserIndex).flags.Privilegios = PlayerType.SemiDios ' le doi los privilegios del semi ;)
  1138.     UserList(UserIndex).flags.Rango = 1
  1139.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, True)
  1140. Else
  1141.     UserList(UserIndex).flags.Privilegios = PlayerType.User
  1142. End If
  1143.  
  1144. ''[EL OSO]: TRAIGO ESTO ACA ARRIBA PARA DARLE EL IP!
  1145. UserList(UserIndex).Counters.IdleCount = 0
  1146. Call MakeUserChar(SendTarget.ToMap, 0, UserList(UserIndex).Pos.Map, UserIndex, UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y)
  1147. Call SendData(SendTarget.toindex, UserIndex, 0, "IP" & UserList(UserIndex).Char.CharIndex)
  1148. Call SendUserStatsBox(UserIndex)
  1149.  
  1150. Call EnviarHambreYsed(UserIndex)
  1151.  
  1152. If haciendoBK Then
  1153.     Call SendData(SendTarget.toindex, UserIndex, 0, "BKW")
  1154.     Call SendData(SendTarget.toindex, UserIndex, 0, "||Servidor> Por favor espera algunos segundos, WorldSave esta ejecutandose." & FONTTYPE_SERVER)
  1155. End If
  1156.  
  1157. If EnPausa Then
  1158.     Call SendData(SendTarget.toindex, UserIndex, 0, "BKW")
  1159.     Call SendData(SendTarget.toindex, UserIndex, 0, "||Servidor> Lo sentimos mucho pero el servidor se encuentra actualmente detenido. Intenta ingresar más tarde." & FONTTYPE_SERVER)
  1160. End If
  1161.  
  1162. If EnTesting And UserList(UserIndex).Stats.ELV >= 18 Then
  1163.     Call SendData(SendTarget.toindex, UserIndex, 0, "ERRServidor en Testing por unos minutos, conectese con PJs de nivel menor a 18. No se conecte con Pjs que puedan resultar importantes por ahora pues pueden arruinarse.")
  1164.     Call CloseSocket(UserIndex)
  1165.     Exit Sub
  1166. End If
  1167.  
  1168. NumUsers = NumUsers + 1
  1169. UserList(UserIndex).flags.UserLogged = True
  1170.  
  1171. MapInfo(UserList(UserIndex).Pos.Map).NumUsers = MapInfo(UserList(UserIndex).Pos.Map).NumUsers + 1
  1172.  
  1173. If UserList(UserIndex).Stats.SkillPts > 0 Then
  1174.     Call EnviarSkills(UserIndex)
  1175.     Call EnviarSubirNivel(UserIndex, UserList(UserIndex).Stats.SkillPts)
  1176. End If
  1177.  
  1178. If NumUsers > DayStats.MaxUsuarios Then DayStats.MaxUsuarios = NumUsers
  1179.  
  1180. If NumUsers > recordusuarios Then
  1181.     Call SendData(SendTarget.ToAll, 0, 0, "||Record de usuarios conectados simultaniamente." & "Hay " & NumUsers & " usuarios." & "~240~240~50~1~0")
  1182.     recordusuarios = NumUsers
  1183.     Call WriteVar(IniPath & "Config.bin", "INIT", "Record", str(recordusuarios))
  1184. End If
  1185.  
  1186. Dim i As Integer
  1187.  
  1188. If UserList(UserIndex).NroMacotas > 0 Then
  1189.     For i = 1 To MAXMASCOTAS
  1190.         If UserList(UserIndex).MascotasType(i) > 0 Then
  1191.             UserList(UserIndex).MascotasIndex(i) = SpawnNpc(UserList(UserIndex).MascotasType(i), UserList(UserIndex).Pos, True, True)
  1192.            
  1193.             If UserList(UserIndex).MascotasIndex(i) > 0 Then
  1194.                 Npclist(UserList(UserIndex).MascotasIndex(i)).MaestroUser = UserIndex
  1195.                 Call FollowAmo(UserList(UserIndex).MascotasIndex(i))
  1196.             Else
  1197.                 UserList(UserIndex).MascotasIndex(i) = 0
  1198.             End If
  1199.         End If
  1200.     Next i
  1201. End If
  1202.  
  1203. If UserList(UserIndex).flags.Navegando = 1 Then Call SendData(SendTarget.toindex, UserIndex, 0, "NAVEG")
  1204.     If UserList(UserIndex).flags.Montando = 1 Then Call SendData(SendTarget.toindex, UserIndex, 0, "EQUIT")
  1205.  
  1206. If ServerSoloGMs > 0 Then
  1207.     If UserList(UserIndex).flags.Privilegios < ServerSoloGMs Then
  1208.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERRServidor restringido a administradores de jerarquia mayor o igual a: " & ServerSoloGMs & ". Por favor intente en unos momentos.")
  1209.         Call CloseSocket(UserIndex)
  1210.         Exit Sub
  1211.     End If
  1212. End If
  1213.  
  1214. If UserList(UserIndex).GuildIndex > 0 Then
  1215.     'welcome to the show baby...
  1216.     If Not Guild.m_ConectarMiembroAClan(UserIndex, UserList(UserIndex).GuildIndex) Then
  1217.         Call SendData(SendTarget.toindex, UserIndex, 0, "||Tu estado no te permite entrar al clan." & FONTTYPE_GUILD)
  1218.     End If
  1219. End If
  1220.  
  1221. Call SendData(SendTarget.ToPCArea, UserIndex, UserList(UserIndex).Pos.Map, "CFX" & UserList(UserIndex).Char.CharIndex & "," & FXIDs.FXWARP & "," & 0)
  1222.  
  1223. Call SendData(SendTarget.toindex, UserIndex, 0, "LOGGED")
  1224.  
  1225. UserList(UserIndex).Char.Account = Cuenta
  1226. Call Guild.SendGuildNews(UserIndex)
  1227.  
  1228. Dim fPath As String
  1229.  
  1230. fPath = App.Path & "/don/" & UserList(UserIndex).name
  1231.  
  1232. If FileExist(fPath) Then
  1233.     Call SendData(SendTarget.toindex, UserIndex, 0, "||Gracias por ayudár al servidor, tu donación fue procesada, para recibír tus premios, escribe /DONE " & GetVar(fPath, "Init", "Codigo") & "." & FONTTYPE_GUILD)
  1234. End If
  1235.  
  1236. If UserList(UserIndex).GuildIndex > 0 Then
  1237.     SendData SendTarget.toindex, UserIndex, 0, "||El seguro de CvC se encuentra activado." & "~0~128~0~1~0"
  1238.     UserList(UserIndex).flags.SeguroCvc = True
  1239. End If
  1240.  
  1241. If UserList(UserIndex).flags.MP = False Then
  1242.     SendData SendTarget.toindex, UserIndex, 0, "||Los mensajes privados se encuentran activados." & FONTTYPE_INFO
  1243. Else
  1244.     SendData SendTarget.toindex, UserIndex, 0, "||Los mensajes privados se encuentran desactivados." & FONTTYPE_INFO
  1245. End If
  1246.  
  1247. If UserList(UserIndex).Faccion.RecompensasReal = 4 Then
  1248. UserList(UserIndex).flags.EsCuartaJerarquia = True
  1249. End If
  1250.  
  1251. If HayDesafio = False Then
  1252. UserList(UserIndex).flags.YaParticipoDesafio = 0
  1253. UserList(UserIndex).flags.UltiDesafiante = vbNullString
  1254. Else
  1255. If UserList(UserCreaDesafio).name <> UserList(UserIndex).flags.UltiDesafiante Then
  1256. UserList(UserIndex).flags.UltiDesafiante = vbNullString
  1257. UserList(UserIndex).flags.YaParticipoDesafio = 0
  1258. End If
  1259. End If
  1260.  
  1261. If UserList(UserIndex).GuildIndex > 0 Then
  1262. SendData SendTarget.toindex, UserIndex, 0, "||Castillo Norte pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Norte") & FONTTYPE_GUILD
  1263. SendData SendTarget.toindex, UserIndex, 0, "||Castillo Sur pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Sur") & FONTTYPE_GUILD
  1264. SendData SendTarget.toindex, UserIndex, 0, "||Castillo Este pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Este") & FONTTYPE_GUILD
  1265. SendData SendTarget.toindex, UserIndex, 0, "||Castillo Oeste pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Oeste") & FONTTYPE_GUILD
  1266. End If
  1267.  
  1268. If UserList(UserIndex).flags.NoActualizado Then
  1269.     Call SendData(SendTarget.toindex, UserIndex, 0, "REAU")
  1270. End If
  1271.  
  1272. If Lloviendo Then Call SendData(SendTarget.toindex, UserIndex, 0, "LLU")
  1273.  
  1274. tStr = Guild.a_ObtenerRechazoDeChar(UserList(UserIndex).name)
  1275.  
  1276. If tStr <> vbNullString Then
  1277.     Call SendData(SendTarget.toindex, UserIndex, 0, "!!Tu solicitud de ingreso al clan ha sido rechazada. El clan te explica que: " & tStr & ENDC)
  1278. End If
  1279.  
  1280. Call SendLabels(UserIndex)
  1281. Call SendData(SendTarget.toindex, UserIndex, 0, "XY" & MapInfo(UserList(UserIndex).Pos.Map).name & " [" & UserList(UserIndex).Pos.Map & "]")
  1282. Call MostrarNumUsers
  1283.  
  1284. N = FreeFile
  1285. Open App.Path & "\logs\numusers.log" For Output As N
  1286. Print #N, NumUsers
  1287. Close #N
  1288.  
  1289. N = FreeFile
  1290. 'Log
  1291. Open App.Path & "\logs\Connect.log" For Append Shared As #N
  1292. Print #N, UserList(UserIndex).name & " ha entrado al juego. UserIndex:" & UserIndex & " " & Time & " " & Date
  1293. Close #N
  1294. ERr_HS:
  1295.  
  1296. End Sub
  1297. Sub SendLabels(UserIndex As Integer)
  1298.  
  1299. If UserList(UserIndex).Invent.AnilloEqpObjIndex Then
  1300.     Call SendData(SendTarget.toindex, UserIndex, 0, "RMX" & ObjData(UserList(UserIndex).Invent.AnilloEqpObjIndex).DefensaMagicaMin & "/" & ObjData(UserList(UserIndex).Invent.AnilloEqpObjIndex).DefensaMagicaMax)
  1301. Else
  1302.     Call SendData(SendTarget.toindex, UserIndex, 0, "RMX0/0")
  1303. End If
  1304.  
  1305. If UserList(UserIndex).Invent.ArmourEqpObjIndex Then
  1306.     Call SendData(SendTarget.toindex, UserIndex, 0, "ARM" & ObjData(UserList(UserIndex).Invent.ArmourEqpObjIndex).MinDef & "/" & ObjData(UserList(UserIndex).Invent.ArmourEqpObjIndex).MaxDef)
  1307. Else
  1308.     Call SendData(SendTarget.toindex, UserIndex, 0, "ARM0/0")
  1309. End If
  1310.  
  1311. If UserList(UserIndex).Invent.CascoEqpObjIndex Then
  1312.     Call SendData(SendTarget.toindex, UserIndex, 0, "GHX" & ObjData(UserList(UserIndex).Invent.CascoEqpObjIndex).MinDef & "/" & ObjData(UserList(UserIndex).Invent.CascoEqpObjIndex).MaxDef)
  1313. Else
  1314.     Call SendData(SendTarget.toindex, UserIndex, 0, "GHX0/0")
  1315. End If
  1316.  
  1317. If UserList(UserIndex).Invent.WeaponEqpObjIndex Then
  1318.     Call SendData(SendTarget.toindex, UserIndex, 0, "WEA" & ObjData(UserList(UserIndex).Invent.WeaponEqpObjIndex).MinHIT & "/" & ObjData(UserList(UserIndex).Invent.WeaponEqpObjIndex).MaxHIT)
  1319. Else
  1320.     Call SendData(SendTarget.toindex, UserIndex, 0, "WEA0/0")
  1321. End If
  1322.  
  1323. End Sub
  1324.  
  1325. Sub ResetFacciones(ByVal UserIndex As Integer)
  1326.     With UserList(UserIndex).Faccion
  1327.         .ArmadaReal = 0
  1328.         .FuerzasCaos = 0
  1329.         .CiudadanosMatados = 0
  1330.         .CriminalesMatados = 0
  1331.         .RecibioArmaduraCaos = 0
  1332.         .RecibioArmaduraReal = 0
  1333.         .RecibioExpInicialCaos = 0
  1334.         .RecibioExpInicialReal = 0
  1335.         .RecompensasCaos = 0
  1336.         .RecompensasReal = 0
  1337.         .Reenlistadas = 0
  1338.     End With
  1339. End Sub
  1340. Sub ResetContadores(ByVal UserIndex As Integer)
  1341.     With UserList(UserIndex).Counters
  1342.         .AGUACounter = 0
  1343.         .AttackCounter = 0
  1344.         .Ceguera = 0
  1345.         .COMCounter = 0
  1346.         .Estupidez = 0
  1347.         .Frio = 0
  1348.         .HPCounter = 0
  1349.         .IdleCount = 0
  1350.         .Invisibilidad = 0
  1351.         .Paralisis = 0
  1352.         .Pasos = 0
  1353.         .Pena = 0
  1354.         .PiqueteC = 0
  1355.         .STACounter = 0
  1356.         .Veneno = 0
  1357.         .Trabajando = 0
  1358.         .Ocultando = 0
  1359.  
  1360.         .TimerLanzarSpell = 0
  1361.         .TimerPuedeAtacar = 0
  1362.         .TimerPuedeTrabajar = 0
  1363.         .TimerUsar = 0
  1364.     End With
  1365. End Sub
  1366.  
  1367. Sub ResetCharInfo(ByVal UserIndex As Integer)
  1368. '*************************************************
  1369. 'Author: Unknown
  1370. 'Last modified: 03/15/2006
  1371. 'Resetea todos los valores generales y las stats
  1372. '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
  1373. '*************************************************
  1374.     With UserList(UserIndex).Char
  1375.         .body = 0
  1376.         .CascoAnim = 0
  1377.         .CharIndex = 0
  1378.         .FX = 0
  1379.         .Head = 0
  1380.         .loops = 0
  1381.         .heading = 0
  1382.         .loops = 0
  1383.         .ShieldAnim = 0
  1384.         .WeaponAnim = 0
  1385.     End With
  1386. End Sub
  1387.  
  1388. Sub ResetBasicUserInfo(ByVal UserIndex As Integer)
  1389. '*************************************************
  1390. 'Author: Unknown
  1391. 'Last modified: 03/15/2006
  1392. 'Resetea todos los valores generales y las stats
  1393. '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
  1394. '*************************************************
  1395.     With UserList(UserIndex)
  1396.         .name = ""
  1397.         .modName = ""
  1398.         .Password = ""
  1399.         .Desc = ""
  1400.         .DescRM = ""
  1401.         .Pos.Map = 0
  1402.         .Pos.X = 0
  1403.         .Pos.Y = 0
  1404.         .ip = ""
  1405.         .RDBuffer = ""
  1406.         .clase = ""
  1407.         .email = ""
  1408.         .genero = ""
  1409.         .Hogar = ""
  1410.         .raza = ""
  1411.  
  1412.         .RandKey = ""
  1413.         .PrevCheckSum = 0
  1414.         .PacketNumber = 0
  1415.  
  1416.         .EmpoCont = 0
  1417.         .PartyIndex = 0
  1418.         .PartySolicitud = 0
  1419.        
  1420.         With .Stats
  1421.             .Banco = 0
  1422.             .ELV = 0
  1423.             .ELU = 0
  1424.             .Exp = 0
  1425.             .def = 0
  1426.             .CriminalesMatados = 0
  1427.             .NPCsMuertos = 0
  1428.             .UsuariosMatados = 0
  1429.             .SkillPts = 0
  1430.         End With
  1431.     End With
  1432. End Sub
  1433.  
  1434. Sub ResetReputacion(ByVal UserIndex As Integer)
  1435. '*************************************************
  1436. 'Author: Unknown
  1437. 'Last modified: 03/15/2006
  1438. 'Resetea todos los valores generales y las stats
  1439. '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
  1440. '*************************************************
  1441.     With UserList(UserIndex).Reputacion
  1442.         .AsesinoRep = 0
  1443.         .BandidoRep = 0
  1444.         .BurguesRep = 0
  1445.         .LadronesRep = 0
  1446.         .NobleRep = 0
  1447.         .PlebeRep = 0
  1448.         .NobleRep = 0
  1449.         .Promedio = 0
  1450.     End With
  1451. End Sub
  1452.  
  1453. Sub ResetGuildInfo(ByVal UserIndex As Integer)
  1454.     If UserList(UserIndex).... > 0 Then
  1455.         Call Guild.GMDejaDeEscucharClan(UserIndex, UserList(UserIndex)....)
  1456.  
  1457.  
Zhepelin Ao
135
Aprendiz [4]
Registrado: Años de membresía
Ubicación: San Martin
Mensajes: 338

Nota » 24 Ene 2012 15:34

dije tpc xD eso si noo la flasheo es el mod usuarios o algo asi

Imagen
Ninja en progreso
889
Dragon Ancestral [5]
Registrado: Años de membresía
Ubicación: • olivos •
Mensajes: 4042
Aportes: 13

Nota » 24 Ene 2012 15:38

miqueas150 escribió:dije tpc xD eso si noo la flasheo es el mod usuarios o algo asi



es el tcp :S
Zhepelin Ao
135
Aprendiz [4]
Registrado: Años de membresía
Ubicación: San Martin
Mensajes: 338

Nota » 25 Ene 2012 13:59

AngelDsm escribió:
miqueas150 escribió:
AngelDsm escribió:Hola no tengo el case OLOGIN ni NLOGIN,Uso Semper Widia alguna ayuda?.
:S


Em postea la primer parte del modulo TCP



Aca tenes te deje todo el Modulo por las dudas :P. :

  1. ption Explicit
  2.  
  3. Public TempSerial As String
  4.  
  5. Public Enum SendTarget
  6.     toindex = 0         'Envia a un solo User
  7.     ToAll = 1           'A todos los Users
  8.     ToMap = 2           'Todos los Usuarios en el mapa
  9.     ToPCArea = 3        'Todos los Users en el area de un user determinado
  10.     ToNone = 4          'Ninguno
  11.     ToAllButIndex = 5   'Todos menos el index
  12.     ToMapButIndex = 6   'Todos en el mapa menos el indice
  13.     ToGM = 7
  14.     ToNPCArea = 8       'Todos los Users en el area de un user determinado
  15.     ToGuildMembers = 9
  16.     ToAdmins = 10
  17.     ToPCAreaButIndex = 11
  18.     ToAdminsAreaButConsejeros = 12
  19.     ToDiosesYclan = 13
  20.     ToConsejo = 14
  21.     ToClanArea = 15
  22.     ToConsejoCaos = 16
  23.     ToRolesMasters = 17
  24.     ToDeadArea = 18
  25.     ToCiudadanos = 19
  26.     ToCriminales = 20
  27.     ToPartyArea = 21
  28.     ToReal = 22
  29.     ToCaos = 23
  30.     ToCiudadanosYRMs = 24
  31.     ToCriminalesYRMs = 25
  32.     ToRealYRMs = 26
  33.     ToCaosYRMs = 27
  34. End Enum
  35.  
  36. Sub DarCuerpoYCabeza(ByRef UserBody As Integer, ByRef UserHead As Integer, ByVal raza As String, ByVal Gen As String)
  37. 'TODO: Poner las heads en arrays, así se acceden por índices
  38. 'y no hay problemas de discontinuidad de los índices.
  39. 'También se debe usar enums para raza y sexo
  40. Select Case Gen
  41.    Case "Hombre"
  42.         Select Case raza
  43.             Case "Humano"
  44.                 UserHead = RandomNumber(1, 30)
  45.                 UserBody = 1
  46.             Case "Elfo"
  47.                 UserHead = RandomNumber(1, 13) + 100
  48.                 If UserHead = 113 Then UserHead = 201       'Un índice no es continuo.... :S muy feo
  49.                 UserBody = 2
  50.             Case "Elfo Oscuro"
  51.                 UserHead = RandomNumber(1, 8) + 201
  52.                 UserBody = 3
  53.             Case "Enano"
  54.                 UserHead = RandomNumber(1, 5) + 300
  55.                 UserBody = 52
  56.             Case "Gnomo"
  57.                 UserHead = RandomNumber(1, 6) + 400
  58.                 UserBody = 52
  59.             Case Else
  60.                 UserHead = 1
  61.                 UserBody = 1
  62.         End Select
  63.    Case "Mujer"
  64.         Select Case raza
  65.             Case "Humano"
  66.                 UserHead = RandomNumber(1, 7) + 69
  67.                 UserBody = 1
  68.             Case "Elfo"
  69.                 UserHead = RandomNumber(1, 7) + 169
  70.                 UserBody = 2
  71.             Case "Elfo Oscuro"
  72.                 UserHead = RandomNumber(1, 11) + 269
  73.                 UserBody = 3
  74.             Case "Gnomo"
  75.                 UserHead = RandomNumber(1, 5) + 469
  76.                 UserBody = 52
  77.             Case "Enano"
  78.                 UserHead = RandomNumber(1, 3) + 369
  79.                 UserBody = 52
  80.             Case Else
  81.                 UserHead = 70
  82.                 UserBody = 1
  83.         End Select
  84. End Select
  85.  
  86. End Sub
  87.  
  88. Function AsciiValidos(ByVal cad As String) As Boolean
  89. Dim car As Byte
  90. Dim i As Integer
  91.  
  92. cad = LCase$(cad)
  93.  
  94. For i = 1 To Len(cad)
  95.     car = Asc(mid$(cad, i, 1))
  96.    
  97.     If (car < 97 Or car > 122) And (car <> 255) And (car <> 32) Then
  98.         AsciiValidos = False
  99.         Exit Function
  100.     End If
  101.    
  102. Next i
  103.  
  104. AsciiValidos = True
  105.  
  106. End Function
  107.  
  108. Function Numeric(ByVal cad As String) As Boolean
  109. Dim car As Byte
  110. Dim i As Integer
  111.  
  112. cad = LCase$(cad)
  113.  
  114. For i = 1 To Len(cad)
  115.     car = Asc(mid$(cad, i, 1))
  116.    
  117.     If (car < 48 Or car > 57) Then
  118.         Numeric = False
  119.         Exit Function
  120.     End If
  121.    
  122. Next i
  123.  
  124. Numeric = True
  125.  
  126. End Function
  127.  
  128.  
  129. Function NombrePermitido(ByVal Nombre As String) As Boolean
  130. Dim i As Integer
  131.  
  132. For i = 1 To UBound(ForbidenNames)
  133.     If InStr(Nombre, ForbidenNames(i)) Then
  134.             NombrePermitido = False
  135.             Exit Function
  136.     End If
  137. Next i
  138.  
  139. NombrePermitido = True
  140.  
  141. End Function
  142.  
  143. Function ValidateSkills(ByVal UserIndex As Integer) As Boolean
  144.  
  145. Dim LoopC As Integer
  146.  
  147. For LoopC = 1 To NUMSKILLS
  148.     If UserList(UserIndex).Stats.UserSkills(LoopC) < 0 Then
  149.         Exit Function
  150.         If UserList(UserIndex).Stats.UserSkills(LoopC) > 100 Then UserList(UserIndex).Stats.UserSkills(LoopC) = 100
  151.     End If
  152. Next LoopC
  153.  
  154. ValidateSkills = True
  155.    
  156. End Function
  157.  
  158. Sub ConnectNewUser(UserIndex As Integer, name As String, Password As String, UserRaza As String, UserSexo As String, UserClase As String, _
  159.                     US1 As String, US2 As String, US3 As String, US4 As String, US5 As String, _
  160.                     US6 As String, US7 As String, US8 As String, US9 As String, US10 As String, _
  161.                     US11 As String, US12 As String, US13 As String, US14 As String, US15 As String, _
  162.                     US16 As String, US17 As String, US18 As String, US19 As String, US20 As String, _
  163.                     US21 As String, UserEmail As String, Hogar As String, Cuenta As String, ByVal USerial As String)
  164.  
  165. If FileExist(CharPath & name & ".swao", vbNormal) = True Then
  166.     Call SendData(SendTarget.toindex, UserIndex, 0, "INF" & "Ya existe el personaje.")
  167.     Exit Sub
  168. End If
  169.  
  170. If Not AsciiValidos(name) Then
  171.     Call SendData(SendTarget.toindex, UserIndex, 0, "ERRNombre invalido.")
  172.     Exit Sub
  173. End If
  174.  
  175. Dim LoopC As Integer
  176.  
  177. If UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = 0 Then
  178.     Call SendData(SendTarget.toindex, UserIndex, 0, "ERRDebe tirar los dados antes de poder crear un personaje.")
  179.     Exit Sub
  180. End If
  181.  
  182. UserList(UserIndex).flags.Muerto = 0
  183. UserList(UserIndex).flags.Escondido = 0
  184. UserList(UserIndex).name = name
  185. UserList(UserIndex).clase = UserClase
  186. UserList(UserIndex).raza = UserRaza
  187. UserList(UserIndex).genero = UserSexo
  188. UserList(UserIndex).email = UserEmail
  189. UserList(UserIndex).Hogar = Hogar
  190.  
  191. Select Case UCase$(UserRaza)
  192.     Case "HUMANO"
  193.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 1
  194.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 1
  195.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) + 2
  196.     Case "ELFO"
  197.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 4
  198.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 2
  199.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) + 2
  200.     Case "ELFO OSCURO"
  201.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 2
  202.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 2
  203.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 2
  204.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) - 3
  205.     Case "ENANO"
  206.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 3
  207.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) + 3
  208.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) - 6
  209.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) - 1
  210.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) - 2
  211.     Case "GNOMO"
  212.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) - 4
  213.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 3
  214.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 3
  215.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) + 1
  216. End Select
  217.  
  218. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza)
  219. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad)
  220. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion)
  221. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma)
  222. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)
  223. '/columdruMysql
  224.  
  225. UserList(UserIndex).Stats.UserSkills(1) = Val(US1)
  226. UserList(UserIndex).Stats.UserSkills(2) = Val(US2)
  227. UserList(UserIndex).Stats.UserSkills(3) = Val(US3)
  228. UserList(UserIndex).Stats.UserSkills(4) = Val(US4)
  229. UserList(UserIndex).Stats.UserSkills(5) = Val(US5)
  230. UserList(UserIndex).Stats.UserSkills(6) = Val(US6)
  231. UserList(UserIndex).Stats.UserSkills(7) = Val(US7)
  232. UserList(UserIndex).Stats.UserSkills(8) = Val(US8)
  233. UserList(UserIndex).Stats.UserSkills(9) = Val(US9)
  234. UserList(UserIndex).Stats.UserSkills(10) = Val(US10)
  235. UserList(UserIndex).Stats.UserSkills(11) = Val(US11)
  236. UserList(UserIndex).Stats.UserSkills(12) = Val(US12)
  237. UserList(UserIndex).Stats.UserSkills(13) = Val(US13)
  238. UserList(UserIndex).Stats.UserSkills(14) = Val(US14)
  239. UserList(UserIndex).Stats.UserSkills(15) = Val(US15)
  240. UserList(UserIndex).Stats.UserSkills(16) = Val(US16)
  241. UserList(UserIndex).Stats.UserSkills(17) = Val(US17)
  242. UserList(UserIndex).Stats.UserSkills(18) = Val(US18)
  243. UserList(UserIndex).Stats.UserSkills(19) = Val(US19)
  244. UserList(UserIndex).Stats.UserSkills(20) = Val(US20)
  245. UserList(UserIndex).Stats.UserSkills(21) = Val(US21)
  246.  
  247. Dim Totalskpts As Integer
  248.  
  249. Totalskpts = 0
  250.  
  251. For LoopC = 1 To NUMSKILLS
  252.     Totalskpts = Totalskpts + Abs(UserList(UserIndex).Stats.UserSkills(LoopC))
  253. Next LoopC
  254.  
  255. If Totalskpts > 10 Then
  256.     Call LogHackAttemp(UserList(UserIndex).name & " intento hackear los skills.")
  257.     Call CloseSocket(UserIndex)
  258.     Exit Sub
  259. End If
  260.  
  261. UserList(UserIndex).Password = Password
  262. UserList(UserIndex).Char.heading = eHeading.SOUTH
  263.  
  264. Call DarCuerpoYCabeza(UserList(UserIndex).Char.body, UserList(UserIndex).Char.Head, UserList(UserIndex).raza, UserList(UserIndex).genero)
  265. UserList(UserIndex).OrigChar = UserList(UserIndex).Char
  266.    
  267. UserList(UserIndex).Char.WeaponAnim = NingunArma
  268. UserList(UserIndex).Char.ShieldAnim = NingunEscudo
  269. UserList(UserIndex).Char.CascoAnim = NingunCasco
  270.  
  271. UserList(UserIndex).Stats.MET = 1
  272. Dim MiInt As Long
  273. MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) \ 3)
  274.  
  275. UserList(UserIndex).Stats.MaxHP = 15 + MiInt
  276. UserList(UserIndex).Stats.MinHP = 15 + MiInt
  277.  
  278. MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) \ 6)
  279. If MiInt = 1 Then MiInt = 2
  280.  
  281. UserList(UserIndex).Stats.MaxSta = 20 * MiInt
  282. UserList(UserIndex).Stats.MinSta = 20 * MiInt
  283.  
  284.  
  285. UserList(UserIndex).Stats.MaxAGU = 100
  286. UserList(UserIndex).Stats.MinAGU = 100
  287.  
  288. UserList(UserIndex).Stats.MaxHam = 100
  289. UserList(UserIndex).Stats.MinHam = 100
  290.  
  291.  
  292. '<-----------------MANA----------------------->
  293. If UCase$(UserClase) = "MAGO" Then
  294.     MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)) / 3
  295.     UserList(UserIndex).Stats.MaxMAN = 100 + MiInt
  296.     UserList(UserIndex).Stats.MinMAN = 100 + MiInt
  297. ElseIf UCase$(UserClase) = "CLERIGO" Or UCase$(UserClase) = "DRUIDA" _
  298.     Or UCase$(UserClase) = "BARDO" Or UCase$(UserClase) = "ASESINO" Then
  299.         MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)) / 4
  300.         UserList(UserIndex).Stats.MaxMAN = 50
  301.         UserList(UserIndex).Stats.MinMAN = 50
  302. Else
  303.     UserList(UserIndex).Stats.MaxMAN = 0
  304.     UserList(UserIndex).Stats.MinMAN = 0
  305. End If
  306.  
  307. If UCase$(UserClase) = "MAGO" Or UCase$(UserClase) = "CLERIGO" Or _
  308.    UCase$(UserClase) = "DRUIDA" Or UCase$(UserClase) = "BARDO" Or _
  309.    UCase$(UserClase) = "ASESINO" Or UCase$(UserClase) = "PALADIN" Then
  310.         UserList(UserIndex).Stats.UserHechizos(1) = 2
  311. End If
  312.  
  313. UserList(UserIndex).Stats.MaxHIT = 2
  314. UserList(UserIndex).Stats.MinHIT = 1
  315.  
  316. UserList(UserIndex).Stats.GLD = 0
  317.  
  318. UserList(UserIndex).Stats.Exp = 0
  319. UserList(UserIndex).Stats.ELU = 300
  320. UserList(UserIndex).Stats.ELV = 1
  321.  
  322. UserList(UserIndex).Invent.NroItems = 4
  323.  
  324. UserList(UserIndex).Invent.Object(1).ObjIndex = 467
  325. UserList(UserIndex).Invent.Object(1).Amount = 100
  326.  
  327. UserList(UserIndex).Invent.Object(2).ObjIndex = 468
  328. UserList(UserIndex).Invent.Object(2).Amount = 100
  329. UserList(UserIndex).Ranking.DuelosGanados = 0
  330. UserList(UserIndex).Ranking.DuelosParejaGanados = 0
  331. UserList(UserIndex).Ranking.MaxRondasDesafio = 0
  332. UserList(UserIndex).Ranking.TorneosGanados = 0
  333. UserList(UserIndex).Invent.Object(3).ObjIndex = 460
  334. UserList(UserIndex).Invent.Object(3).Amount = 1
  335. UserList(UserIndex).Invent.Object(3).Equipped = 1
  336.  
  337. If UCase$(UserClase) = "MAGO" Or UCase$(UserClase) = "BARDO" Or _
  338. UCase$(UserClase) = "PALADIN" Or UCase$(UserClase) = "DRUIDA" Or UCase$(UserClase) = "CLERIGO" Then
  339.  
  340. UserList(UserIndex).Invent.Object(5).ObjIndex = 461 'POTA ROJA
  341. UserList(UserIndex).Invent.Object(5).Amount = 150
  342. UserList(UserIndex).Invent.Object(6).ObjIndex = 975 'POTA AZUL
  343. UserList(UserIndex).Invent.Object(6).Amount = 150
  344.  
  345. Else
  346.  
  347. UserList(UserIndex).Invent.Object(5).ObjIndex = 461 'POTA ROJA
  348. UserList(UserIndex).Invent.Object(5).Amount = 150
  349.  
  350. End If
  351.  
  352. If Not UCase$(UserClase) = "MAGO" Then
  353.  
  354. UserList(UserIndex).Invent.Object(7).ObjIndex = 462 'POTA VERDE
  355. UserList(UserIndex).Invent.Object(7).Amount = 150
  356. UserList(UserIndex).Invent.Object(8).ObjIndex = 1078 'POTA AMARILLA
  357. UserList(UserIndex).Invent.Object(8).Amount = 150
  358.  
  359. End If
  360.  
  361.  
  362. Select Case UserRaza
  363.     Case "Humano"
  364.         UserList(UserIndex).Invent.Object(4).ObjIndex = 463
  365.     Case "Elfo"
  366.         UserList(UserIndex).Invent.Object(4).ObjIndex = 464
  367.     Case "Elfo Oscuro"
  368.         UserList(UserIndex).Invent.Object(4).ObjIndex = 465
  369.     Case "Enano"
  370.         UserList(UserIndex).Invent.Object(4).ObjIndex = 466
  371.     Case "Gnomo"
  372.         UserList(UserIndex).Invent.Object(4).ObjIndex = 466
  373. End Select
  374.  
  375. UserList(UserIndex).Invent.Object(4).Amount = 1
  376. UserList(UserIndex).Invent.Object(4).Equipped = 1
  377.  
  378. UserList(UserIndex).Invent.Object(9).ObjIndex = 41
  379. UserList(UserIndex).Invent.Object(9).Amount = 1
  380.  
  381. UserList(UserIndex).Invent.ArmourEqpSlot = 4
  382. UserList(UserIndex).Invent.ArmourEqpObjIndex = UserList(UserIndex).Invent.Object(4).ObjIndex
  383.  
  384. UserList(UserIndex).Invent.WeaponEqpObjIndex = UserList(UserIndex).Invent.Object(3).ObjIndex
  385. UserList(UserIndex).Invent.WeaponEqpSlot = 3
  386. UserList(UserIndex).Stats.TPoints = 0
  387. UserList(UserIndex).FaccionNumber = 2
  388. UserList(UserIndex).flags.Caballero = 0
  389. UserList(UserIndex).flags.IsMaxLevel = False
  390. UserList(UserIndex).Char.Account = Cuenta
  391. Call AddPjCuenta(Cuenta, name)
  392. Call DB_SaveCharacter(UserIndex, name)
  393. Call ConnectUser(UserIndex, name, Password, USerial, Cuenta)
  394. Call SendData(SendTarget.toindex, UserIndex, 0, "CUD" & (1 + 1) & "," & name & "," & UserList(UserIndex).Char.body & "," & UserList(UserIndex).Char.Head)
  395. End Sub
  396. Sub CloseSocket(ByVal UserIndex As Integer)
  397.  
  398. On Error GoTo errhandler
  399.    
  400.     If UserIndex = LastUser Then
  401.         Do Until UserList(LastUser).flags.UserLogged
  402.             LastUser = LastUser - 1
  403.             If LastUser < 1 Then Exit Do
  404.         Loop
  405.     End If
  406.    
  407.     If UserList(UserIndex).ConnID <> -1 Then
  408.         Call CloseSocketSL(UserIndex)
  409.     End If
  410.    
  411.     If UserList(UserIndex).ComUsu.DestUsu > 0 Then
  412.         If UserList(UserList(UserIndex).ComUsu.DestUsu).flags.UserLogged Then
  413.             If UserList(UserList(UserIndex).ComUsu.DestUsu).ComUsu.DestUsu = UserIndex Then
  414.                 Call SendData(SendTarget.toindex, UserList(UserIndex).ComUsu.DestUsu, 0, "||Comercio cancelado por el otro usuario" & FONTTYPE_TALK)
  415.                 Call FinComerciarUsu(UserList(UserIndex).ComUsu.DestUsu)
  416.             End If
  417.         End If
  418.     End If
  419.    
  420.      If UserList(UserIndex).flags.Teleports.Creado = True Then
  421.         UserList(UserIndex).flags.Teleports.Creado = False
  422.        
  423.         Call EraseObj(SendTarget.ToMap, 0, UserList(UserIndex).Pos.Map, 1, UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY)
  424.        
  425.         MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.Map = 0
  426.         MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.X = 0
  427.         MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.Y = 0
  428.    
  429.         UserList(UserIndex).flags.Teleports.tMap = 0
  430.         UserList(UserIndex).flags.Teleports.TimeCount = 0
  431.         UserList(UserIndex).flags.Teleports.tX = 0
  432.         UserList(UserIndex).flags.Teleports.tY = 0
  433.         UserList(UserIndex).flags.Teleports.Creado = False
  434.        
  435.     End If
  436.      
  437.     If UserList(UserIndex).flags.UserLogged Then
  438.         If NumUsers > 0 Then NumUsers = NumUsers - 1
  439.         Call CloseUser(UserIndex)
  440.        
  441.     Else
  442.         Call ResetUserSlot(UserIndex)
  443.     End If
  444.    
  445.     UserList(UserIndex).ConnID = -1
  446.     UserList(UserIndex).ConnIDValida = False
  447.     UserList(UserIndex).NumeroPaquetesPorMiliSec = 0
  448.    
  449. Exit Sub
  450.  
  451. errhandler:
  452.     UserList(UserIndex).ConnID = -1
  453.     UserList(UserIndex).ConnIDValida = False
  454.     UserList(UserIndex).NumeroPaquetesPorMiliSec = 0
  455.     Call ResetUserSlot(UserIndex)
  456.  
  457.     Call LogError("CloseSocket - Error = " & Err.Number & " - Descripción = " & Err.Description & " - UserIndex = " & UserIndex)
  458. End Sub
  459.  
  460. Sub CloseSocketSL(ByVal UserIndex As Integer)
  461.  
  462. If UserList(UserIndex).ConnID <> -1 And UserList(UserIndex).ConnIDValida Then
  463.     Call BorraSlotSock(UserList(UserIndex).ConnID)
  464.     Call WSApiCloseSocket(UserList(UserIndex).ConnID)
  465.     UserList(UserIndex).ConnIDValida = False
  466. End If
  467. End Sub
  468.  
  469. Public Function EnviarDatosASlot(ByVal UserIndex As Integer, Datos As String) As Long
  470.  
  471.     On Error GoTo Err
  472.    
  473.     Dim Ret As Long
  474.        
  475.     Ret = WsApiEnviar(UserIndex, Datos)
  476.    
  477.     If Ret <> 0 And Ret <> WSAEWOULDBLOCK Then
  478.         Call CloseSocketSL(UserIndex)
  479.         Call Cerrar_Usuario(UserIndex)
  480.     End If
  481.     EnviarDatosASlot = Ret
  482.     Exit Function
  483.    
  484. Err:
  485.         'If MainView.SUPERLOG.Value = 1 Then LogCustom ("EnviarDatosASlot:: ERR Handler. userindex=" & UserIndex & " datos=" & Datos & " UL?/CId/CIdV?=" & UserList(UserIndex).flags.UserLogged & "/" & UserList(UserIndex).ConnID & "/" & UserList(UserIndex).ConnIDValida & " ERR: " & Err.Description)
  486. End Function
  487.  
  488. Public Function EnviarDatosASlot2(ByVal UserIndex As Integer, Datos As String) As Long
  489.  
  490. #If UsarQueSocket = 1 Then
  491.     On Error GoTo Err
  492.    
  493.     Dim Ret As Long
  494.    
  495.    
  496.    
  497.     Ret = WsApiEnviar(UserIndex, Datos)
  498.    
  499.     If Ret <> 0 And Ret <> WSAEWOULDBLOCK Then
  500.         Call CloseSocketSL(UserIndex)
  501.         Call Cerrar_Usuario(UserIndex)
  502.     End If
  503.     EnviarDatosASlot2 = Ret
  504.     Exit Function
  505.    
  506. Err:
  507.         'If MainView.SUPERLOG.Value = 1 Then LogCustom ("EnviarDatosASlot:: ERR Handler. userindex=" & UserIndex & " datos=" & Datos & " UL?/CId/CIdV?=" & UserList(UserIndex).flags.UserLogged & "/" & UserList(UserIndex).ConnID & "/" & UserList(UserIndex).ConnIDValida & " ERR: " & Err.Description)
  508.  
  509. #ElseIf UsarQueSocket = 0 Then '**********************************************
  510.  
  511.     Dim Encolar As Boolean
  512.     Encolar = False
  513.    
  514.     EnviarDatosASlot2 = 0
  515.    
  516.     If UserList(UserIndex).ColaSalida.Count <= 0 Then
  517.         If MainView.Socket2(UserIndex).Write(Datos, Len(Datos)) < 0 Then
  518.             If MainView.Socket2(UserIndex).LastError = WSAEWOULDBLOCK Then
  519.                 UserList(UserIndex).SockPuedoEnviar = False
  520.                 Encolar = True
  521.             Else
  522.                 Call Cerrar_Usuario(UserIndex)
  523.             End If
  524.         End If
  525.     Else
  526.         Encolar = True
  527.     End If
  528.    
  529.     If Encolar Then
  530.         Debug.Print "Encolando..."
  531.         UserList(UserIndex).ColaSalida.Add Datos
  532.     End If
  533.  
  534. #ElseIf UsarQueSocket = 2 Then '**********************************************
  535.  
  536. Dim Encolar As Boolean
  537. Dim Ret As Long
  538.    
  539.     Encolar = False
  540.    
  541.     '//
  542.     '// Valores de retorno:
  543.     '//                     0: Todo OK
  544.     '//                     1: WSAEWOULDBLOCK
  545.     '//                     2: Error critico
  546.     '//
  547.     If UserList(UserIndex).ColaSalida.Count <= 0 Then
  548.         Ret = MainView.Serv.Enviar(UserList(UserIndex).ConnID, Datos, Len(Datos))
  549.         If Ret = 1 Then
  550.             Encolar = True
  551.         ElseIf Ret = 2 Then
  552.             Call CloseSocketSL(UserIndex)
  553.             Call Cerrar_Usuario(UserIndex)
  554.         End If
  555.     Else
  556.         Encolar = True
  557.     End If
  558.    
  559.     If Encolar Then
  560.         Debug.Print "Encolando..."
  561.         UserList(UserIndex).ColaSalida.Add Datos
  562.     End If
  563. #End If '**********************************************
  564.  
  565. End Function
  566.  
  567. Sub SendData(ByVal sndRoute As SendTarget, ByVal sndIndex As Integer, ByVal sndMap As Integer, ByVal sndData As String)
  568.  
  569. On Error Resume Next
  570.  
  571. Dim LoopC As Integer
  572. Dim X As Integer
  573. Dim Y As Integer
  574.  
  575. If sndData <> "BUENO" Then
  576. sndData = Security.Security.NSC_Encryption(sndData, Security.Keys(1))
  577. End If
  578. sndData = sndData & ENDC
  579.  
  580. Select Case sndRoute
  581.  
  582.     Case SendTarget.ToPCArea
  583.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  584.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  585.                If InMapBounds(X, Y) Then
  586.                     If MapData(sndMap, X, Y).UserIndex > 0 Then
  587.                        If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  588.                             Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  589.                        End If
  590.                     End If
  591.                End If
  592.             Next X
  593.         Next Y
  594.         Exit Sub
  595.    
  596.     Case SendTarget.toindex
  597.         If UserList(sndIndex).ConnID <> -1 Then
  598.             Call EnviarDatosASlot(sndIndex, sndData)
  599.             Exit Sub
  600.         End If
  601.  
  602.  
  603.     Case SendTarget.ToNone
  604.         Exit Sub
  605.        
  606.        
  607.     Case SendTarget.ToAdmins
  608.         For LoopC = 1 To LastUser
  609.             If UserList(LoopC).ConnID <> -1 Then
  610.                 If UserList(LoopC).flags.Privilegios > 0 Then
  611.                     Call EnviarDatosASlot(LoopC, sndData)
  612.                End If
  613.             End If
  614.         Next LoopC
  615.         Exit Sub
  616.        
  617.     Case SendTarget.ToAll
  618.         For LoopC = 1 To LastUser
  619.             If UserList(LoopC).ConnID <> -1 Then
  620.                 If UserList(LoopC).flags.UserLogged Then 'Esta logeado como usuario?
  621.                     Call EnviarDatosASlot(LoopC, sndData)
  622.                 End If
  623.             End If
  624.         Next LoopC
  625.         Exit Sub
  626.    
  627.     Case SendTarget.ToAllButIndex
  628.         For LoopC = 1 To LastUser
  629.             If (UserList(LoopC).ConnID <> -1) And (LoopC <> sndIndex) Then
  630.                 If UserList(LoopC).flags.UserLogged Then 'Esta logeado como usuario?
  631.                     Call EnviarDatosASlot(LoopC, sndData)
  632.                 End If
  633.             End If
  634.         Next LoopC
  635.         Exit Sub
  636.    
  637.     Case SendTarget.ToMap
  638.         For LoopC = 1 To LastUser
  639.             If (UserList(LoopC).ConnID <> -1) Then
  640.                 If UserList(LoopC).flags.UserLogged Then
  641.                     If UserList(LoopC).Pos.Map = sndMap Then
  642.                         Call EnviarDatosASlot(LoopC, sndData)
  643.                     End If
  644.                 End If
  645.             End If
  646.         Next LoopC
  647.         Exit Sub
  648.      
  649.     Case SendTarget.ToMapButIndex
  650.         For LoopC = 1 To LastUser
  651.             If (UserList(LoopC).ConnID <> -1) And LoopC <> sndIndex Then
  652.                 If UserList(LoopC).Pos.Map = sndMap Then
  653.                     Call EnviarDatosASlot(LoopC, sndData)
  654.                 End If
  655.             End If
  656.         Next LoopC
  657.         Exit Sub
  658.            
  659.     Case SendTarget.ToGuildMembers
  660.        
  661.         LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
  662.         While LoopC > 0
  663.             If (UserList(LoopC).ConnID <> -1) Then
  664.                 Call EnviarDatosASlot(LoopC, sndData)
  665.             End If
  666.             LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
  667.         Wend
  668.        
  669.         Exit Sub
  670.  
  671.  
  672.     Case SendTarget.ToDeadArea
  673.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  674.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  675.                If InMapBounds(X, Y) Then
  676.                     If MapData(sndMap, X, Y).UserIndex > 0 Then
  677.                         If UserList(MapData(sndMap, X, Y).UserIndex).flags.Muerto = 1 Or UserList(MapData(sndMap, X, Y).UserIndex).flags.Privilegios >= 1 Then
  678.                            If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  679.                                 Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  680.                            End If
  681.                         End If
  682.                     End If
  683.                End If
  684.             Next X
  685.         Next Y
  686.         Exit Sub
  687.  
  688.     '[Alejo-18-5]
  689.     Case SendTarget.ToPCAreaButIndex
  690.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  691.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  692.                If InMapBounds(X, Y) Then
  693.                     If (MapData(sndMap, X, Y).UserIndex > 0) And (MapData(sndMap, X, Y).UserIndex <> sndIndex) Then
  694.                        If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  695.                             Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  696.                        End If
  697.                     End If
  698.                End If
  699.             Next X
  700.         Next Y
  701.         Exit Sub
  702.        
  703.     Case SendTarget.ToClanArea
  704.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  705.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  706.                If InMapBounds(X, Y) Then
  707.                     If (MapData(sndMap, X, Y).UserIndex > 0) Then
  708.                         If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  709.                             If UserList(sndIndex).GuildIndex > 0 And UserList(MapData(sndMap, X, Y).UserIndex).GuildIndex = UserList(sndIndex).GuildIndex Then
  710.                                 Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  711.                             End If
  712.                         End If
  713.                     End If
  714.                End If
  715.             Next X
  716.         Next Y
  717.         Exit Sub
  718.  
  719.  
  720.  
  721.     Case SendTarget.ToPartyArea
  722.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  723.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  724.                If InMapBounds(X, Y) Then
  725.                     If (MapData(sndMap, X, Y).UserIndex > 0) Then
  726.                         If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  727.                             If UserList(sndIndex).PartyIndex > 0 And UserList(MapData(sndMap, X, Y).UserIndex).PartyIndex = UserList(sndIndex).PartyIndex Then
  728.                                 Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  729.                             End If
  730.                         End If
  731.                     End If
  732.                End If
  733.             Next X
  734.         Next Y
  735.         Exit Sub
  736.        
  737.     '[CDT 17-02-2004]
  738.     Case SendTarget.ToAdminsAreaButConsejeros
  739.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  740.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  741.                If InMapBounds(X, Y) Then
  742.                     If (MapData(sndMap, X, Y).UserIndex > 0) And (MapData(sndMap, X, Y).UserIndex <> sndIndex) Then
  743.                        If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  744.                             If UserList(MapData(sndMap, X, Y).UserIndex).flags.Privilegios > 1 Then
  745.                                 Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  746.                             End If
  747.                        End If
  748.                     End If
  749.                End If
  750.             Next X
  751.         Next Y
  752.         Exit Sub
  753.     '[/CDT]
  754.  
  755.     Case SendTarget.ToNPCArea
  756.         For Y = Npclist(sndIndex).Pos.Y - MinYBorder + 1 To Npclist(sndIndex).Pos.Y + MinYBorder - 1
  757.             For X = Npclist(sndIndex).Pos.X - MinXBorder + 1 To Npclist(sndIndex).Pos.X + MinXBorder - 1
  758.                If InMapBounds(X, Y) Then
  759.                     If MapData(sndMap, X, Y).UserIndex > 0 Then
  760.                        If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  761.                             Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  762.                        End If
  763.                     End If
  764.                End If
  765.             Next X
  766.         Next Y
  767.         Exit Sub
  768.  
  769.     Case SendTarget.ToDiosesYclan
  770.         LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
  771.         While LoopC > 0
  772.             If (UserList(LoopC).ConnID <> -1) Then
  773.                 Call EnviarDatosASlot(LoopC, sndData)
  774.             End If
  775.             LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
  776.         Wend
  777.  
  778.         LoopC = Guild.Iterador_ProximoGM(sndIndex)
  779.         While LoopC > 0
  780.             If (UserList(LoopC).ConnID <> -1) Then
  781.                 Call EnviarDatosASlot(LoopC, sndData)
  782.             End If
  783.             LoopC = Guild.Iterador_ProximoGM(sndIndex)
  784.         Wend
  785.  
  786.         Exit Sub
  787.  
  788.     Case SendTarget.ToConsejo
  789.         For LoopC = 1 To LastUser
  790.             If (UserList(LoopC).ConnID <> -1) Then
  791.                 If UserList(LoopC).flags.PertAlCons > 0 Then
  792.                     Call EnviarDatosASlot(LoopC, sndData)
  793.                 End If
  794.             End If
  795.         Next LoopC
  796.         Exit Sub
  797.     Case SendTarget.ToConsejoCaos
  798.         For LoopC = 1 To LastUser
  799.             If (UserList(LoopC).ConnID <> -1) Then
  800.                 If UserList(LoopC).flags.PertAlConsCaos > 0 Then
  801.                     Call EnviarDatosASlot(LoopC, sndData)
  802.                 End If
  803.             End If
  804.         Next LoopC
  805.         Exit Sub
  806.     Case SendTarget.ToRolesMasters
  807.         For LoopC = 1 To LastUser
  808.             If (UserList(LoopC).ConnID <> -1) Then
  809.                 If UserList(LoopC).flags.EsRolesMaster Then
  810.                     Call EnviarDatosASlot(LoopC, sndData)
  811.                 End If
  812.             End If
  813.         Next LoopC
  814.         Exit Sub
  815.    
  816.     Case SendTarget.ToCiudadanos
  817.         For LoopC = 1 To LastUser
  818.             If (UserList(LoopC).ConnID <> -1) Then
  819.                 If Not criminal(LoopC) Then
  820.                     Call EnviarDatosASlot(LoopC, sndData)
  821.                 End If
  822.             End If
  823.         Next LoopC
  824.         Exit Sub
  825.    
  826.     Case SendTarget.ToCriminales
  827.         For LoopC = 1 To LastUser
  828.             If (UserList(LoopC).ConnID <> -1) Then
  829.                 If criminal(LoopC) Then
  830.                     Call EnviarDatosASlot(LoopC, sndData)
  831.                 End If
  832.             End If
  833.         Next LoopC
  834.         Exit Sub
  835.    
  836.     Case SendTarget.ToReal
  837.         For LoopC = 1 To LastUser
  838.             If (UserList(LoopC).ConnID <> -1) Then
  839.                 If UserList(LoopC).Faccion.ArmadaReal = 1 Then
  840.                     Call EnviarDatosASlot(LoopC, sndData)
  841.                 End If
  842.             End If
  843.         Next LoopC
  844.         Exit Sub
  845.    
  846.     Case SendTarget.ToCaos
  847.         For LoopC = 1 To LastUser
  848.             If (UserList(LoopC).ConnID <> -1) Then
  849.                 If UserList(LoopC).Faccion.FuerzasCaos = 1 Then
  850.                     Call EnviarDatosASlot(LoopC, sndData)
  851.                 End If
  852.             End If
  853.         Next LoopC
  854.         Exit Sub
  855.        
  856.     Case ToCiudadanosYRMs
  857.         For LoopC = 1 To LastUser
  858.             If (UserList(LoopC).ConnID <> -1) Then
  859.                 If Not criminal(LoopC) Or UserList(LoopC).flags.EsRolesMaster Then
  860.                     Call EnviarDatosASlot(LoopC, sndData)
  861.                 End If
  862.             End If
  863.         Next LoopC
  864.         Exit Sub
  865.    
  866.     Case ToCriminalesYRMs
  867.         For LoopC = 1 To LastUser
  868.             If (UserList(LoopC).ConnID <> -1) Then
  869.                 If criminal(LoopC) Or UserList(LoopC).flags.EsRolesMaster Then
  870.                     Call EnviarDatosASlot(LoopC, sndData)
  871.                 End If
  872.             End If
  873.         Next LoopC
  874.         Exit Sub
  875.    
  876.     Case ToRealYRMs
  877.         For LoopC = 1 To LastUser
  878.             If (UserList(LoopC).ConnID <> -1) Then
  879.                 If UserList(LoopC).Faccion.ArmadaReal = 1 Or UserList(LoopC).flags.EsRolesMaster Then
  880.                     Call EnviarDatosASlot(LoopC, sndData)
  881.                 End If
  882.             End If
  883.         Next LoopC
  884.         Exit Sub
  885.    
  886.     Case ToCaosYRMs
  887.         For LoopC = 1 To LastUser
  888.             If (UserList(LoopC).ConnID <> -1) Then
  889.                 If UserList(LoopC).Faccion.FuerzasCaos = 1 Or UserList(LoopC).flags.EsRolesMaster Then
  890.                     Call EnviarDatosASlot(LoopC, sndData)
  891.                 End If
  892.             End If
  893.         Next LoopC
  894.         Exit Sub
  895. End Select
  896.  
  897. End Sub
  898.  
  899. Sub SendData2(ByVal sndRoute As SendTarget, ByVal sndIndex As Integer, ByVal sndData As String)
  900.  
  901. On Error Resume Next
  902.  
  903. sndData = sndData & ENDC
  904.  
  905. Select Case sndRoute
  906.     Case SendTarget.toindex
  907.         If UserList(sndIndex).ConnID <> -1 Then
  908.              Call EnviarDatosASlot2(sndIndex, sndData)
  909.              Exit Sub
  910.         End If
  911.    
  912. End Select
  913. End Sub
  914. Function EstaPCarea(Index As Integer, Index2 As Integer) As Boolean
  915.  
  916.  
  917. Dim X As Integer, Y As Integer
  918. For Y = UserList(Index).Pos.Y - MinYBorder + 1 To UserList(Index).Pos.Y + MinYBorder - 1
  919.         For X = UserList(Index).Pos.X - MinXBorder + 1 To UserList(Index).Pos.X + MinXBorder - 1
  920.  
  921.             If MapData(UserList(Index).Pos.Map, X, Y).UserIndex = Index2 Then
  922.                 EstaPCarea = True
  923.                 Exit Function
  924.             End If
  925.        
  926.         Next X
  927. Next Y
  928. EstaPCarea = False
  929. End Function
  930.  
  931. Function HayPCarea(Pos As WorldPos) As Boolean
  932.  
  933.  
  934. Dim X As Integer, Y As Integer
  935. For Y = Pos.Y - MinYBorder + 1 To Pos.Y + MinYBorder - 1
  936.         For X = Pos.X - MinXBorder + 1 To Pos.X + MinXBorder - 1
  937.             If X > 0 And Y > 0 And X < 101 And Y < 101 Then
  938.                 If MapData(Pos.Map, X, Y).UserIndex > 0 Then
  939.                     HayPCarea = True
  940.                     Exit Function
  941.                End If
  942.             End If
  943.         Next X
  944. Next Y
  945. HayPCarea = False
  946. End Function
  947.  
  948. Function HayOBJarea(Pos As WorldPos, ObjIndex As Integer) As Boolean
  949.  
  950.  
  951. Dim X As Integer, Y As Integer
  952. For Y = Pos.Y - MinYBorder + 1 To Pos.Y + MinYBorder - 1
  953.         For X = Pos.X - MinXBorder + 1 To Pos.X + MinXBorder - 1
  954.             If MapData(Pos.Map, X, Y).ObjInfo.ObjIndex = ObjIndex Then
  955.                 HayOBJarea = True
  956.                 Exit Function
  957.             End If
  958.        
  959.         Next X
  960. Next Y
  961. HayOBJarea = False
  962. End Function
  963.  
  964. Function ValidateChr(ByVal UserIndex As Integer) As Boolean
  965.  
  966. ValidateChr = UserList(UserIndex).Char.Head <> 0 _
  967.                 And UserList(UserIndex).Char.body <> 0 _
  968.                 And ValidateSkills(UserIndex)
  969.  
  970. End Function
  971.  
  972. Sub ConnectUser(ByVal UserIndex As Integer, name As String, Password As String, ByVal UserSerial As String, Cuenta As String)
  973. Dim N As Integer
  974. Dim tStr As String
  975. On Error GoTo ERr_HS
  976. UserList(UserIndex).flags.Escondido = 0
  977. UserList(UserIndex).flags.Guerra = False
  978. Call SendData(SendTarget.toindex, UserIndex, 0, "|G0")
  979. UserList(UserIndex).flags.TargetNPC = 0
  980. UserList(UserIndex).flags.TargetNpcTipo = eNPCType.Comun
  981. UserList(UserIndex).flags.TargetObj = 0
  982. UserList(UserIndex).flags.TargetUser = 0
  983. UserList(UserIndex).Char.FX = 0
  984. UserList(UserIndex).SerialIndex = UserSerial
  985. UserList(UserIndex).flags.SeguItems = True
  986.  
  987. If NumUsers >= MaxUsers Then
  988.     Call SendData(SendTarget.toindex, UserIndex, 0, "ERREl servidor ha alcanzado el maximo de usuarios soportado, por favor vuelva a intertarlo mas tarde.")
  989.     Call CloseSocket(UserIndex)
  990.     Exit Sub
  991. End If
  992.  
  993. If AllowMultiLogins = 0 Then
  994.     If CheckForSameIP(UserIndex, UserList(UserIndex).ip) = True Then
  995.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERRNo es posible usar mas de un personaje al mismo tiempo.")
  996.         Call CloseSocket(UserIndex)
  997.         Exit Sub
  998.     End If
  999. End If
  1000.  
  1001. Call SendData(SendTarget.toindex, UserIndex, 0, "CUALIPC" & UserList(UserIndex).ip)
  1002.  
  1003. Dim j As Integer
  1004.  
  1005.  
  1006.  
  1007. If CheckForSameName(name) Then
  1008.     If UserList(NameIndex(name)).Counters.Saliendo Then
  1009.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERREl usuario está saliendo.")
  1010.     Else
  1011.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERRPerdon, un usuario con el mismo nombre se há logoeado.")
  1012.     End If
  1013.     Call CloseSocket(UserIndex)
  1014.     Exit Sub
  1015. End If
  1016.  
  1017. Call DB_LoadCharacter(UserIndex, name)
  1018.  
  1019. If Not ValidateChr(UserIndex) Then
  1020.     Call SendData(SendTarget.toindex, UserIndex, 0, "!!Hubo un error al cargar tu personaje, informa esto en nuestros foros http://www.swforos.com/foro/.)
  1021.     Call CloseSocket(UserIndex)
  1022.     Exit Sub
  1023. End If
  1024.  
  1025. If UserList(UserIndex).flags.Ban Then
  1026. Call SendData(SendTarget.toindex, UserIndex, 0, "ERREste personaje se encuentra bajo una suspención, para tenér mas información, visitá http://www.swforos.com.ar/")
  1027. CloseSocket (UserIndex)
  1028. Exit Sub
  1029. End If
  1030.  
  1031. If UserList(UserIndex).Invent.EscudoEqpSlot = 0 Then UserList(UserIndex).Char.ShieldAnim = NingunEscudo
  1032. If UserList(UserIndex).Invent.CascoEqpSlot = 0 Then UserList(UserIndex).Char.CascoAnim = NingunCasco
  1033. If UserList(UserIndex).Invent.WeaponEqpSlot = 0 Then UserList(UserIndex).Char.WeaponAnim = NingunArma
  1034.  
  1035.  
  1036. Call UpdateUserInv(True, UserIndex, 0)
  1037. Call UpdateUserHechizos(True, UserIndex, 0)
  1038.  
  1039. If UserList(UserIndex).flags.Navegando = 1 Then
  1040.      UserList(UserIndex).Char.body = ObjData(UserList(UserIndex).Invent.BarcoObjIndex).Ropaje
  1041.      UserList(UserIndex).Char.Head = 0
  1042.      UserList(UserIndex).Char.WeaponAnim = NingunArma
  1043.      UserList(UserIndex).Char.ShieldAnim = NingunEscudo
  1044.      UserList(UserIndex).Char.CascoAnim = NingunCasco
  1045. End If
  1046.     If UserList(UserIndex).flags.Montando = 1 Then
  1047.          UserList(UserIndex).Char.body = ObjData(UserList(UserIndex).Invent.MonturaObjIndex).Ropaje
  1048.          UserList(UserIndex).Char.Head = UserList(UserIndex).OrigChar.Head
  1049.          UserList(UserIndex).Char.WeaponAnim = NingunArma
  1050.          UserList(UserIndex).Char.ShieldAnim = NingunEscudo
  1051.          UserList(UserIndex).Char.CascoAnim = UserList(UserIndex).Char.CascoAnim
  1052.     End If
  1053. If UserList(UserIndex).flags.Paralizado Then
  1054. #If SeguridadAlkon Then
  1055.     If EncriptarProtocolosCriticos Then
  1056.         Call SendCryptedData(SendTarget.toindex, UserIndex, 0, "PARADOK")
  1057.         Call SendData(SendTarget.toindex, UserIndex, 0, "PU" & UserList(UserIndex).Pos.X & "," & UserList(UserIndex).Pos.Y)
  1058.     Else
  1059. #End If
  1060.         Call SendData(SendTarget.toindex, UserIndex, 0, "PARADOK")
  1061.         Call SendData(SendTarget.toindex, UserIndex, 0, "PU" & UserList(UserIndex).Pos.X & "," & UserList(UserIndex).Pos.Y)
  1062. #If SeguridadAlkon Then
  1063.     End If
  1064. #End If
  1065. End If
  1066.  
  1067. 'Feo, esto tiene que ser parche cliente
  1068. If UserList(UserIndex).flags.Estupidez = 0 Then Call SendData(SendTarget.toindex, UserIndex, 0, "NESTUP")
  1069. '
  1070.  
  1071. 'Posicion de comienzo
  1072. If UserList(UserIndex).Pos.Map = 0 Then
  1073.              UserList(UserIndex).Pos.Map = 60
  1074.              UserList(UserIndex).Pos.X = 45
  1075.              UserList(UserIndex).Pos.Y = 55
  1076. Else
  1077.  
  1078. If Not MapaValido(UserList(UserIndex).Pos.Map) Then
  1079.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERREL PJ se encuenta en un mapa invalido.")
  1080.         Call CloseSocket(UserIndex)
  1081.         Exit Sub
  1082.     End If
  1083.    ''TELEFRAG
  1084.     If MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex <> 0 Then
  1085.         ''si estaba en comercio seguro...
  1086.         If UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu > 0 Then
  1087.             If UserList(UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu).flags.UserLogged Then
  1088.                 Call FinComerciarUsu(UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu)
  1089.                 Call SendData(SendTarget.toindex, UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu, 0, "||Comercio cancelado. El otro usuario se ha desconectado." & FONTTYPE_TALK)
  1090.             End If
  1091.             If UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).flags.UserLogged Then
  1092.                 Call FinComerciarUsu(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex)
  1093.                 Call SendData(SendTarget.toindex, MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex, 0, "ERRAlguien se ha conectado donde te encontrabas, por favor reconéctate...")
  1094.             End If
  1095.         End If
  1096.         Call CloseSocket(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex)
  1097.     End If
  1098.    
  1099.    
  1100.     If UserList(UserIndex).flags.Muerto = 1 Then
  1101.         Call Empollando(UserIndex)
  1102.     End If
  1103. End If
  1104.  
  1105. 'Nombre de sistema
  1106. UserList(UserIndex).name = name
  1107.  
  1108. UserList(UserIndex).Password = Password
  1109.  
  1110. UserList(UserIndex).showName = True 'Por default los nombres son visibles
  1111.  
  1112.  
  1113. Call SendData(SendTarget.toindex, UserIndex, 0, "IU" & UserIndex) 'Enviamos el User index
  1114. Call SendData(SendTarget.toindex, UserIndex, 0, "CM" & UserList(UserIndex).Pos.Map & "," & MapInfo(UserList(UserIndex).Pos.Map).MapVersion) 'Carga el mapa
  1115. Call SendData(SendTarget.toindex, UserIndex, 0, "TM" & MapInfo(UserList(UserIndex).Pos.Map).Music)
  1116.  
  1117. 'Vemos que clase de user es (se lo usa para setear los privilegios alcrear el PJ)
  1118. UserList(UserIndex).flags.EsRolesMaster = EsRolesMaster(name)
  1119. If EsEventM(name) Then
  1120.     UserList(UserIndex).flags.Privilegios = PlayerType.Dios
  1121.     UserList(UserIndex).flags.Rango = 6
  1122.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1123. ElseIf EsDirector(name) Then
  1124.     UserList(UserIndex).flags.Privilegios = PlayerType.DirectorGM
  1125.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1126. ElseIf EsAdmin(name) Then
  1127.     UserList(UserIndex).flags.Privilegios = PlayerType.Admin
  1128.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1129. ElseIf EsDios(name) Then
  1130.     UserList(UserIndex).flags.Privilegios = PlayerType.Dios
  1131.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1132. ElseIf EsSemiDios(name) Then
  1133.     UserList(UserIndex).flags.Privilegios = PlayerType.SemiDios
  1134.     UserList(UserIndex).flags.Rango = 2
  1135.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1136. ElseIf EsConsejero(name) Then
  1137.     UserList(UserIndex).flags.Privilegios = PlayerType.SemiDios ' le doi los privilegios del semi ;)
  1138.     UserList(UserIndex).flags.Rango = 1
  1139.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, True)
  1140. Else
  1141.     UserList(UserIndex).flags.Privilegios = PlayerType.User
  1142. End If
  1143.  
  1144. ''[EL OSO]: TRAIGO ESTO ACA ARRIBA PARA DARLE EL IP!
  1145. UserList(UserIndex).Counters.IdleCount = 0
  1146. Call MakeUserChar(SendTarget.ToMap, 0, UserList(UserIndex).Pos.Map, UserIndex, UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y)
  1147. Call SendData(SendTarget.toindex, UserIndex, 0, "IP" & UserList(UserIndex).Char.CharIndex)
  1148. Call SendUserStatsBox(UserIndex)
  1149.  
  1150. Call EnviarHambreYsed(UserIndex)
  1151.  
  1152. If haciendoBK Then
  1153.     Call SendData(SendTarget.toindex, UserIndex, 0, "BKW")
  1154.     Call SendData(SendTarget.toindex, UserIndex, 0, "||Servidor> Por favor espera algunos segundos, WorldSave esta ejecutandose." & FONTTYPE_SERVER)
  1155. End If
  1156.  
  1157. If EnPausa Then
  1158.     Call SendData(SendTarget.toindex, UserIndex, 0, "BKW")
  1159.     Call SendData(SendTarget.toindex, UserIndex, 0, "||Servidor> Lo sentimos mucho pero el servidor se encuentra actualmente detenido. Intenta ingresar más tarde." & FONTTYPE_SERVER)
  1160. End If
  1161.  
  1162. If EnTesting And UserList(UserIndex).Stats.ELV >= 18 Then
  1163.     Call SendData(SendTarget.toindex, UserIndex, 0, "ERRServidor en Testing por unos minutos, conectese con PJs de nivel menor a 18. No se conecte con Pjs que puedan resultar importantes por ahora pues pueden arruinarse.")
  1164.     Call CloseSocket(UserIndex)
  1165.     Exit Sub
  1166. End If
  1167.  
  1168. NumUsers = NumUsers + 1
  1169. UserList(UserIndex).flags.UserLogged = True
  1170.  
  1171. MapInfo(UserList(UserIndex).Pos.Map).NumUsers = MapInfo(UserList(UserIndex).Pos.Map).NumUsers + 1
  1172.  
  1173. If UserList(UserIndex).Stats.SkillPts > 0 Then
  1174.     Call EnviarSkills(UserIndex)
  1175.     Call EnviarSubirNivel(UserIndex, UserList(UserIndex).Stats.SkillPts)
  1176. End If
  1177.  
  1178. If NumUsers > DayStats.MaxUsuarios Then DayStats.MaxUsuarios = NumUsers
  1179.  
  1180. If NumUsers > recordusuarios Then
  1181.     Call SendData(SendTarget.ToAll, 0, 0, "||Record de usuarios conectados simultaniamente." & "Hay " & NumUsers & " usuarios." & "~240~240~50~1~0")
  1182.     recordusuarios = NumUsers
  1183.     Call WriteVar(IniPath & "Config.bin", "INIT", "Record", str(recordusuarios))
  1184. End If
  1185.  
  1186. Dim i As Integer
  1187.  
  1188. If UserList(UserIndex).NroMacotas > 0 Then
  1189.     For i = 1 To MAXMASCOTAS
  1190.         If UserList(UserIndex).MascotasType(i) > 0 Then
  1191.             UserList(UserIndex).MascotasIndex(i) = SpawnNpc(UserList(UserIndex).MascotasType(i), UserList(UserIndex).Pos, True, True)
  1192.            
  1193.             If UserList(UserIndex).MascotasIndex(i) > 0 Then
  1194.                 Npclist(UserList(UserIndex).MascotasIndex(i)).MaestroUser = UserIndex
  1195.                 Call FollowAmo(UserList(UserIndex).MascotasIndex(i))
  1196.             Else
  1197.                 UserList(UserIndex).MascotasIndex(i) = 0
  1198.             End If
  1199.         End If
  1200.     Next i
  1201. End If
  1202.  
  1203. If UserList(UserIndex).flags.Navegando = 1 Then Call SendData(SendTarget.toindex, UserIndex, 0, "NAVEG")
  1204.     If UserList(UserIndex).flags.Montando = 1 Then Call SendData(SendTarget.toindex, UserIndex, 0, "EQUIT")
  1205.  
  1206. If ServerSoloGMs > 0 Then
  1207.     If UserList(UserIndex).flags.Privilegios < ServerSoloGMs Then
  1208.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERRServidor restringido a administradores de jerarquia mayor o igual a: " & ServerSoloGMs & ". Por favor intente en unos momentos.")
  1209.         Call CloseSocket(UserIndex)
  1210.         Exit Sub
  1211.     End If
  1212. End If
  1213.  
  1214. If UserList(UserIndex).GuildIndex > 0 Then
  1215.     'welcome to the show baby...
  1216.     If Not Guild.m_ConectarMiembroAClan(UserIndex, UserList(UserIndex).GuildIndex) Then
  1217.         Call SendData(SendTarget.toindex, UserIndex, 0, "||Tu estado no te permite entrar al clan." & FONTTYPE_GUILD)
  1218.     End If
  1219. End If
  1220.  
  1221. Call SendData(SendTarget.ToPCArea, UserIndex, UserList(UserIndex).Pos.Map, "CFX" & UserList(UserIndex).Char.CharIndex & "," & FXIDs.FXWARP & "," & 0)
  1222.  
  1223. Call SendData(SendTarget.toindex, UserIndex, 0, "LOGGED")
  1224.  
  1225. UserList(UserIndex).Char.Account = Cuenta
  1226. Call Guild.SendGuildNews(UserIndex)
  1227.  
  1228. Dim fPath As String
  1229.  
  1230. fPath = App.Path & "/don/" & UserList(UserIndex).name
  1231.  
  1232. If FileExist(fPath) Then
  1233.     Call SendData(SendTarget.toindex, UserIndex, 0, "||Gracias por ayudár al servidor, tu donación fue procesada, para recibír tus premios, escribe /DONE " & GetVar(fPath, "Init", "Codigo") & "." & FONTTYPE_GUILD)
  1234. End If
  1235.  
  1236. If UserList(UserIndex).GuildIndex > 0 Then
  1237.     SendData SendTarget.toindex, UserIndex, 0, "||El seguro de CvC se encuentra activado." & "~0~128~0~1~0"
  1238.     UserList(UserIndex).flags.SeguroCvc = True
  1239. End If
  1240.  
  1241. If UserList(UserIndex).flags.MP = False Then
  1242.     SendData SendTarget.toindex, UserIndex, 0, "||Los mensajes privados se encuentran activados." & FONTTYPE_INFO
  1243. Else
  1244.     SendData SendTarget.toindex, UserIndex, 0, "||Los mensajes privados se encuentran desactivados." & FONTTYPE_INFO
  1245. End If
  1246.  
  1247. If UserList(UserIndex).Faccion.RecompensasReal = 4 Then
  1248. UserList(UserIndex).flags.EsCuartaJerarquia = True
  1249. End If
  1250.  
  1251. If HayDesafio = False Then
  1252. UserList(UserIndex).flags.YaParticipoDesafio = 0
  1253. UserList(UserIndex).flags.UltiDesafiante = vbNullString
  1254. Else
  1255. If UserList(UserCreaDesafio).name <> UserList(UserIndex).flags.UltiDesafiante Then
  1256. UserList(UserIndex).flags.UltiDesafiante = vbNullString
  1257. UserList(UserIndex).flags.YaParticipoDesafio = 0
  1258. End If
  1259. End If
  1260.  
  1261. If UserList(UserIndex).GuildIndex > 0 Then
  1262. SendData SendTarget.toindex, UserIndex, 0, "||Castillo Norte pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Norte") & FONTTYPE_GUILD
  1263. SendData SendTarget.toindex, UserIndex, 0, "||Castillo Sur pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Sur") & FONTTYPE_GUILD
  1264. SendData SendTarget.toindex, UserIndex, 0, "||Castillo Este pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Este") & FONTTYPE_GUILD
  1265. SendData SendTarget.toindex, UserIndex, 0, "||Castillo Oeste pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Oeste") & FONTTYPE_GUILD
  1266. End If
  1267.  
  1268. If UserList(UserIndex).flags.NoActualizado Then
  1269.     Call SendData(SendTarget.toindex, UserIndex, 0, "REAU")
  1270. End If
  1271.  
  1272. If Lloviendo Then Call SendData(SendTarget.toindex, UserIndex, 0, "LLU")
  1273.  
  1274. tStr = Guild.a_ObtenerRechazoDeChar(UserList(UserIndex).name)
  1275.  
  1276. If tStr <> vbNullString Then
  1277.     Call SendData(SendTarget.toindex, UserIndex, 0, "!!Tu solicitud de ingreso al clan ha sido rechazada. El clan te explica que: " & tStr & ENDC)
  1278. End If
  1279.  
  1280. Call SendLabels(UserIndex)
  1281. Call SendData(SendTarget.toindex, UserIndex, 0, "XY" & MapInfo(UserList(UserIndex).Pos.Map).name & " [" & UserList(UserIndex).Pos.Map & "]")
  1282. Call MostrarNumUsers
  1283.  
  1284. N = FreeFile
  1285. Open App.Path & "\logs\numusers.log" For Output As N
  1286. Print #N, NumUsers
  1287. Close #N
  1288.  
  1289. N = FreeFile
  1290. 'Log
  1291. Open App.Path & "\logs\Connect.log" For Append Shared As #N
  1292. Print #N, UserList(UserIndex).name & " ha entrado al juego. UserIndex:" & UserIndex & " " & Time & " " & Date
  1293. Close #N
  1294. ERr_HS:
  1295.  
  1296. End Sub
  1297. Sub SendLabels(UserIndex As Integer)
  1298.  
  1299. If UserList(UserIndex).Invent.AnilloEqpObjIndex Then
  1300.     Call SendData(SendTarget.toindex, UserIndex, 0, "RMX" & ObjData(UserList(UserIndex).Invent.AnilloEqpObjIndex).DefensaMagicaMin & "/" & ObjData(UserList(UserIndex).Invent.AnilloEqpObjIndex).DefensaMagicaMax)
  1301. Else
  1302.     Call SendData(SendTarget.toindex, UserIndex, 0, "RMX0/0")
  1303. End If
  1304.  
  1305. If UserList(UserIndex).Invent.ArmourEqpObjIndex Then
  1306.     Call SendData(SendTarget.toindex, UserIndex, 0, "ARM" & ObjData(UserList(UserIndex).Invent.ArmourEqpObjIndex).MinDef & "/" & ObjData(UserList(UserIndex).Invent.ArmourEqpObjIndex).MaxDef)
  1307. Else
  1308.     Call SendData(SendTarget.toindex, UserIndex, 0, "ARM0/0")
  1309. End If
  1310.  
  1311. If UserList(UserIndex).Invent.CascoEqpObjIndex Then
  1312.     Call SendData(SendTarget.toindex, UserIndex, 0, "GHX" & ObjData(UserList(UserIndex).Invent.CascoEqpObjIndex).MinDef & "/" & ObjData(UserList(UserIndex).Invent.CascoEqpObjIndex).MaxDef)
  1313. Else
  1314.     Call SendData(SendTarget.toindex, UserIndex, 0, "GHX0/0")
  1315. End If
  1316.  
  1317. If UserList(UserIndex).Invent.WeaponEqpObjIndex Then
  1318.     Call SendData(SendTarget.toindex, UserIndex, 0, "WEA" & ObjData(UserList(UserIndex).Invent.WeaponEqpObjIndex).MinHIT & "/" & ObjData(UserList(UserIndex).Invent.WeaponEqpObjIndex).MaxHIT)
  1319. Else
  1320.     Call SendData(SendTarget.toindex, UserIndex, 0, "WEA0/0")
  1321. End If
  1322.  
  1323. End Sub
  1324.  
  1325. Sub ResetFacciones(ByVal UserIndex As Integer)
  1326.     With UserList(UserIndex).Faccion
  1327.         .ArmadaReal = 0
  1328.         .FuerzasCaos = 0
  1329.         .CiudadanosMatados = 0
  1330.         .CriminalesMatados = 0
  1331.         .RecibioArmaduraCaos = 0
  1332.         .RecibioArmaduraReal = 0
  1333.         .RecibioExpInicialCaos = 0
  1334.         .RecibioExpInicialReal = 0
  1335.         .RecompensasCaos = 0
  1336.         .RecompensasReal = 0
  1337.         .Reenlistadas = 0
  1338.     End With
  1339. End Sub
  1340. Sub ResetContadores(ByVal UserIndex As Integer)
  1341.     With UserList(UserIndex).Counters
  1342.         .AGUACounter = 0
  1343.         .AttackCounter = 0
  1344.         .Ceguera = 0
  1345.         .COMCounter = 0
  1346.         .Estupidez = 0
  1347.         .Frio = 0
  1348.         .HPCounter = 0
  1349.         .IdleCount = 0
  1350.         .Invisibilidad = 0
  1351.         .Paralisis = 0
  1352.         .Pasos = 0
  1353.         .Pena = 0
  1354.         .PiqueteC = 0
  1355.         .STACounter = 0
  1356.         .Veneno = 0
  1357.         .Trabajando = 0
  1358.         .Ocultando = 0
  1359.  
  1360.         .TimerLanzarSpell = 0
  1361.         .TimerPuedeAtacar = 0
  1362.         .TimerPuedeTrabajar = 0
  1363.         .TimerUsar = 0
  1364.     End With
  1365. End Sub
  1366.  
  1367. Sub ResetCharInfo(ByVal UserIndex As Integer)
  1368. '*************************************************
  1369. 'Author: Unknown
  1370. 'Last modified: 03/15/2006
  1371. 'Resetea todos los valores generales y las stats
  1372. '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
  1373. '*************************************************
  1374.     With UserList(UserIndex).Char
  1375.         .body = 0
  1376.         .CascoAnim = 0
  1377.         .CharIndex = 0
  1378.         .FX = 0
  1379.         .Head = 0
  1380.         .loops = 0
  1381.         .heading = 0
  1382.         .loops = 0
  1383.         .ShieldAnim = 0
  1384.         .WeaponAnim = 0
  1385.     End With
  1386. End Sub
  1387.  
  1388. Sub ResetBasicUserInfo(ByVal UserIndex As Integer)
  1389. '*************************************************
  1390. 'Author: Unknown
  1391. 'Last modified: 03/15/2006
  1392. 'Resetea todos los valores generales y las stats
  1393. '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
  1394. '*************************************************
  1395.     With UserList(UserIndex)
  1396.         .name = ""
  1397.         .modName = ""
  1398.         .Password = ""
  1399.         .Desc = ""
  1400.         .DescRM = ""
  1401.         .Pos.Map = 0
  1402.         .Pos.X = 0
  1403.         .Pos.Y = 0
  1404.         .ip = ""
  1405.         .RDBuffer = ""
  1406.         .clase = ""
  1407.         .email = ""
  1408.         .genero = ""
  1409.         .Hogar = ""
  1410.         .raza = ""
  1411.  
  1412.         .RandKey = ""
  1413.         .PrevCheckSum = 0
  1414.         .PacketNumber = 0
  1415.  
  1416.         .EmpoCont = 0
  1417.         .PartyIndex = 0
  1418.         .PartySolicitud = 0
  1419.        
  1420.         With .Stats
  1421.             .Banco = 0
  1422.             .ELV = 0
  1423.             .ELU = 0
  1424.             .Exp = 0
  1425.             .def = 0
  1426.             .CriminalesMatados = 0
  1427.             .NPCsMuertos = 0
  1428.             .UsuariosMatados = 0
  1429.             .SkillPts = 0
  1430.         End With
  1431.     End With
  1432. End Sub
  1433.  
  1434. Sub ResetReputacion(ByVal UserIndex As Integer)
  1435. '*************************************************
  1436. 'Author: Unknown
  1437. 'Last modified: 03/15/2006
  1438. 'Resetea todos los valores generales y las stats
  1439. '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
  1440. '*************************************************
  1441.     With UserList(UserIndex).Reputacion
  1442.         .AsesinoRep = 0
  1443.         .BandidoRep = 0
  1444.         .BurguesRep = 0
  1445.         .LadronesRep = 0
  1446.         .NobleRep = 0
  1447.         .PlebeRep = 0
  1448.         .NobleRep = 0
  1449.         .Promedio = 0
  1450.     End With
  1451. End Sub
  1452.  
  1453. Sub ResetGuildInfo(ByVal UserIndex As Integer)
  1454.     If UserList(UserIndex).... > 0 Then
  1455.         Call Guild.GMDejaDeEscucharClan(UserIndex, UserList(UserIndex)....)
  1456.  
  1457.  


Estas usando un Mod Semper widia y por eso no encontras el case "OLOGIN" o "NLOGIN"

Imagen
399
Destructor de Mentes [5]
Registrado: Años de membresía
Mensajes: 722
Aportes: 14

Nota » 25 Ene 2012 14:24

Penyair escribió:
AngelDsm escribió:
miqueas150 escribió:
Em postea la primer parte del modulo TCP





Aca tenes te deje todo el Modulo por las dudas :P. :

  1. ption Explicit
  2.  
  3. Public TempSerial As String
  4.  
  5. Public Enum SendTarget
  6.     toindex = 0         'Envia a un solo User
  7.     ToAll = 1           'A todos los Users
  8.     ToMap = 2           'Todos los Usuarios en el mapa
  9.     ToPCArea = 3        'Todos los Users en el area de un user determinado
  10.     ToNone = 4          'Ninguno
  11.     ToAllButIndex = 5   'Todos menos el index
  12.     ToMapButIndex = 6   'Todos en el mapa menos el indice
  13.     ToGM = 7
  14.     ToNPCArea = 8       'Todos los Users en el area de un user determinado
  15.     ToGuildMembers = 9
  16.     ToAdmins = 10
  17.     ToPCAreaButIndex = 11
  18.     ToAdminsAreaButConsejeros = 12
  19.     ToDiosesYclan = 13
  20.     ToConsejo = 14
  21.     ToClanArea = 15
  22.     ToConsejoCaos = 16
  23.     ToRolesMasters = 17
  24.     ToDeadArea = 18
  25.     ToCiudadanos = 19
  26.     ToCriminales = 20
  27.     ToPartyArea = 21
  28.     ToReal = 22
  29.     ToCaos = 23
  30.     ToCiudadanosYRMs = 24
  31.     ToCriminalesYRMs = 25
  32.     ToRealYRMs = 26
  33.     ToCaosYRMs = 27
  34. End Enum
  35.  
  36. Sub DarCuerpoYCabeza(ByRef UserBody As Integer, ByRef UserHead As Integer, ByVal raza As String, ByVal Gen As String)
  37. 'TODO: Poner las heads en arrays, así se acceden por índices
  38. 'y no hay problemas de discontinuidad de los índices.
  39. 'También se debe usar enums para raza y sexo
  40. Select Case Gen
  41.    Case "Hombre"
  42.         Select Case raza
  43.             Case "Humano"
  44.                 UserHead = RandomNumber(1, 30)
  45.                 UserBody = 1
  46.             Case "Elfo"
  47.                 UserHead = RandomNumber(1, 13) + 100
  48.                 If UserHead = 113 Then UserHead = 201       'Un índice no es continuo.... :S muy feo
  49.                 UserBody = 2
  50.             Case "Elfo Oscuro"
  51.                 UserHead = RandomNumber(1, 8) + 201
  52.                 UserBody = 3
  53.             Case "Enano"
  54.                 UserHead = RandomNumber(1, 5) + 300
  55.                 UserBody = 52
  56.             Case "Gnomo"
  57.                 UserHead = RandomNumber(1, 6) + 400
  58.                 UserBody = 52
  59.             Case Else
  60.                 UserHead = 1
  61.                 UserBody = 1
  62.         End Select
  63.    Case "Mujer"
  64.         Select Case raza
  65.             Case "Humano"
  66.                 UserHead = RandomNumber(1, 7) + 69
  67.                 UserBody = 1
  68.             Case "Elfo"
  69.                 UserHead = RandomNumber(1, 7) + 169
  70.                 UserBody = 2
  71.             Case "Elfo Oscuro"
  72.                 UserHead = RandomNumber(1, 11) + 269
  73.                 UserBody = 3
  74.             Case "Gnomo"
  75.                 UserHead = RandomNumber(1, 5) + 469
  76.                 UserBody = 52
  77.             Case "Enano"
  78.                 UserHead = RandomNumber(1, 3) + 369
  79.                 UserBody = 52
  80.             Case Else
  81.                 UserHead = 70
  82.                 UserBody = 1
  83.         End Select
  84. End Select
  85.  
  86. End Sub
  87.  
  88. Function AsciiValidos(ByVal cad As String) As Boolean
  89. Dim car As Byte
  90. Dim i As Integer
  91.  
  92. cad = LCase$(cad)
  93.  
  94. For i = 1 To Len(cad)
  95.     car = Asc(mid$(cad, i, 1))
  96.    
  97.     If (car < 97 Or car > 122) And (car <> 255) And (car <> 32) Then
  98.         AsciiValidos = False
  99.         Exit Function
  100.     End If
  101.    
  102. Next i
  103.  
  104. AsciiValidos = True
  105.  
  106. End Function
  107.  
  108. Function Numeric(ByVal cad As String) As Boolean
  109. Dim car As Byte
  110. Dim i As Integer
  111.  
  112. cad = LCase$(cad)
  113.  
  114. For i = 1 To Len(cad)
  115.     car = Asc(mid$(cad, i, 1))
  116.    
  117.     If (car < 48 Or car > 57) Then
  118.         Numeric = False
  119.         Exit Function
  120.     End If
  121.    
  122. Next i
  123.  
  124. Numeric = True
  125.  
  126. End Function
  127.  
  128.  
  129. Function NombrePermitido(ByVal Nombre As String) As Boolean
  130. Dim i As Integer
  131.  
  132. For i = 1 To UBound(ForbidenNames)
  133.     If InStr(Nombre, ForbidenNames(i)) Then
  134.             NombrePermitido = False
  135.             Exit Function
  136.     End If
  137. Next i
  138.  
  139. NombrePermitido = True
  140.  
  141. End Function
  142.  
  143. Function ValidateSkills(ByVal UserIndex As Integer) As Boolean
  144.  
  145. Dim LoopC As Integer
  146.  
  147. For LoopC = 1 To NUMSKILLS
  148.     If UserList(UserIndex).Stats.UserSkills(LoopC) < 0 Then
  149.         Exit Function
  150.         If UserList(UserIndex).Stats.UserSkills(LoopC) > 100 Then UserList(UserIndex).Stats.UserSkills(LoopC) = 100
  151.     End If
  152. Next LoopC
  153.  
  154. ValidateSkills = True
  155.    
  156. End Function
  157.  
  158. Sub ConnectNewUser(UserIndex As Integer, name As String, Password As String, UserRaza As String, UserSexo As String, UserClase As String, _
  159.                     US1 As String, US2 As String, US3 As String, US4 As String, US5 As String, _
  160.                     US6 As String, US7 As String, US8 As String, US9 As String, US10 As String, _
  161.                     US11 As String, US12 As String, US13 As String, US14 As String, US15 As String, _
  162.                     US16 As String, US17 As String, US18 As String, US19 As String, US20 As String, _
  163.                     US21 As String, UserEmail As String, Hogar As String, Cuenta As String, ByVal USerial As String)
  164.  
  165. If FileExist(CharPath & name & ".swao", vbNormal) = True Then
  166.     Call SendData(SendTarget.toindex, UserIndex, 0, "INF" & "Ya existe el personaje.")
  167.     Exit Sub
  168. End If
  169.  
  170. If Not AsciiValidos(name) Then
  171.     Call SendData(SendTarget.toindex, UserIndex, 0, "ERRNombre invalido.")
  172.     Exit Sub
  173. End If
  174.  
  175. Dim LoopC As Integer
  176.  
  177. If UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = 0 Then
  178.     Call SendData(SendTarget.toindex, UserIndex, 0, "ERRDebe tirar los dados antes de poder crear un personaje.")
  179.     Exit Sub
  180. End If
  181.  
  182. UserList(UserIndex).flags.Muerto = 0
  183. UserList(UserIndex).flags.Escondido = 0
  184. UserList(UserIndex).name = name
  185. UserList(UserIndex).clase = UserClase
  186. UserList(UserIndex).raza = UserRaza
  187. UserList(UserIndex).genero = UserSexo
  188. UserList(UserIndex).email = UserEmail
  189. UserList(UserIndex).Hogar = Hogar
  190.  
  191. Select Case UCase$(UserRaza)
  192.     Case "HUMANO"
  193.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 1
  194.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 1
  195.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) + 2
  196.     Case "ELFO"
  197.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 4
  198.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 2
  199.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) + 2
  200.     Case "ELFO OSCURO"
  201.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 2
  202.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 2
  203.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 2
  204.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) - 3
  205.     Case "ENANO"
  206.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 3
  207.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) + 3
  208.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) - 6
  209.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) - 1
  210.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) - 2
  211.     Case "GNOMO"
  212.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) - 4
  213.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 3
  214.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 3
  215.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) + 1
  216. End Select
  217.  
  218. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza)
  219. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad)
  220. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion)
  221. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma)
  222. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)
  223. '/columdruMysql
  224.  
  225. UserList(UserIndex).Stats.UserSkills(1) = Val(US1)
  226. UserList(UserIndex).Stats.UserSkills(2) = Val(US2)
  227. UserList(UserIndex).Stats.UserSkills(3) = Val(US3)
  228. UserList(UserIndex).Stats.UserSkills(4) = Val(US4)
  229. UserList(UserIndex).Stats.UserSkills(5) = Val(US5)
  230. UserList(UserIndex).Stats.UserSkills(6) = Val(US6)
  231. UserList(UserIndex).Stats.UserSkills(7) = Val(US7)
  232. UserList(UserIndex).Stats.UserSkills(8) = Val(US8)
  233. UserList(UserIndex).Stats.UserSkills(9) = Val(US9)
  234. UserList(UserIndex).Stats.UserSkills(10) = Val(US10)
  235. UserList(UserIndex).Stats.UserSkills(11) = Val(US11)
  236. UserList(UserIndex).Stats.UserSkills(12) = Val(US12)
  237. UserList(UserIndex).Stats.UserSkills(13) = Val(US13)
  238. UserList(UserIndex).Stats.UserSkills(14) = Val(US14)
  239. UserList(UserIndex).Stats.UserSkills(15) = Val(US15)
  240. UserList(UserIndex).Stats.UserSkills(16) = Val(US16)
  241. UserList(UserIndex).Stats.UserSkills(17) = Val(US17)
  242. UserList(UserIndex).Stats.UserSkills(18) = Val(US18)
  243. UserList(UserIndex).Stats.UserSkills(19) = Val(US19)
  244. UserList(UserIndex).Stats.UserSkills(20) = Val(US20)
  245. UserList(UserIndex).Stats.UserSkills(21) = Val(US21)
  246.  
  247. Dim Totalskpts As Integer
  248.  
  249. Totalskpts = 0
  250.  
  251. For LoopC = 1 To NUMSKILLS
  252.     Totalskpts = Totalskpts + Abs(UserList(UserIndex).Stats.UserSkills(LoopC))
  253. Next LoopC
  254.  
  255. If Totalskpts > 10 Then
  256.     Call LogHackAttemp(UserList(UserIndex).name & " intento hackear los skills.")
  257.     Call CloseSocket(UserIndex)
  258.     Exit Sub
  259. End If
  260.  
  261. UserList(UserIndex).Password = Password
  262. UserList(UserIndex).Char.heading = eHeading.SOUTH
  263.  
  264. Call DarCuerpoYCabeza(UserList(UserIndex).Char.body, UserList(UserIndex).Char.Head, UserList(UserIndex).raza, UserList(UserIndex).genero)
  265. UserList(UserIndex).OrigChar = UserList(UserIndex).Char
  266.    
  267. UserList(UserIndex).Char.WeaponAnim = NingunArma
  268. UserList(UserIndex).Char.ShieldAnim = NingunEscudo
  269. UserList(UserIndex).Char.CascoAnim = NingunCasco
  270.  
  271. UserList(UserIndex).Stats.MET = 1
  272. Dim MiInt As Long
  273. MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) \ 3)
  274.  
  275. UserList(UserIndex).Stats.MaxHP = 15 + MiInt
  276. UserList(UserIndex).Stats.MinHP = 15 + MiInt
  277.  
  278. MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) \ 6)
  279. If MiInt = 1 Then MiInt = 2
  280.  
  281. UserList(UserIndex).Stats.MaxSta = 20 * MiInt
  282. UserList(UserIndex).Stats.MinSta = 20 * MiInt
  283.  
  284.  
  285. UserList(UserIndex).Stats.MaxAGU = 100
  286. UserList(UserIndex).Stats.MinAGU = 100
  287.  
  288. UserList(UserIndex).Stats.MaxHam = 100
  289. UserList(UserIndex).Stats.MinHam = 100
  290.  
  291.  
  292. '<-----------------MANA----------------------->
  293. If UCase$(UserClase) = "MAGO" Then
  294.     MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)) / 3
  295.     UserList(UserIndex).Stats.MaxMAN = 100 + MiInt
  296.     UserList(UserIndex).Stats.MinMAN = 100 + MiInt
  297. ElseIf UCase$(UserClase) = "CLERIGO" Or UCase$(UserClase) = "DRUIDA" _
  298.     Or UCase$(UserClase) = "BARDO" Or UCase$(UserClase) = "ASESINO" Then
  299.         MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)) / 4
  300.         UserList(UserIndex).Stats.MaxMAN = 50
  301.         UserList(UserIndex).Stats.MinMAN = 50
  302. Else
  303.     UserList(UserIndex).Stats.MaxMAN = 0
  304.     UserList(UserIndex).Stats.MinMAN = 0
  305. End If
  306.  
  307. If UCase$(UserClase) = "MAGO" Or UCase$(UserClase) = "CLERIGO" Or _
  308.    UCase$(UserClase) = "DRUIDA" Or UCase$(UserClase) = "BARDO" Or _
  309.    UCase$(UserClase) = "ASESINO" Or UCase$(UserClase) = "PALADIN" Then
  310.         UserList(UserIndex).Stats.UserHechizos(1) = 2
  311. End If
  312.  
  313. UserList(UserIndex).Stats.MaxHIT = 2
  314. UserList(UserIndex).Stats.MinHIT = 1
  315.  
  316. UserList(UserIndex).Stats.GLD = 0
  317.  
  318. UserList(UserIndex).Stats.Exp = 0
  319. UserList(UserIndex).Stats.ELU = 300
  320. UserList(UserIndex).Stats.ELV = 1
  321.  
  322. UserList(UserIndex).Invent.NroItems = 4
  323.  
  324. UserList(UserIndex).Invent.Object(1).ObjIndex = 467
  325. UserList(UserIndex).Invent.Object(1).Amount = 100
  326.  
  327. UserList(UserIndex).Invent.Object(2).ObjIndex = 468
  328. UserList(UserIndex).Invent.Object(2).Amount = 100
  329. UserList(UserIndex).Ranking.DuelosGanados = 0
  330. UserList(UserIndex).Ranking.DuelosParejaGanados = 0
  331. UserList(UserIndex).Ranking.MaxRondasDesafio = 0
  332. UserList(UserIndex).Ranking.TorneosGanados = 0
  333. UserList(UserIndex).Invent.Object(3).ObjIndex = 460
  334. UserList(UserIndex).Invent.Object(3).Amount = 1
  335. UserList(UserIndex).Invent.Object(3).Equipped = 1
  336.  
  337. If UCase$(UserClase) = "MAGO" Or UCase$(UserClase) = "BARDO" Or _
  338. UCase$(UserClase) = "PALADIN" Or UCase$(UserClase) = "DRUIDA" Or UCase$(UserClase) = "CLERIGO" Then
  339.  
  340. UserList(UserIndex).Invent.Object(5).ObjIndex = 461 'POTA ROJA
  341. UserList(UserIndex).Invent.Object(5).Amount = 150
  342. UserList(UserIndex).Invent.Object(6).ObjIndex = 975 'POTA AZUL
  343. UserList(UserIndex).Invent.Object(6).Amount = 150
  344.  
  345. Else
  346.  
  347. UserList(UserIndex).Invent.Object(5).ObjIndex = 461 'POTA ROJA
  348. UserList(UserIndex).Invent.Object(5).Amount = 150
  349.  
  350. End If
  351.  
  352. If Not UCase$(UserClase) = "MAGO" Then
  353.  
  354. UserList(UserIndex).Invent.Object(7).ObjIndex = 462 'POTA VERDE
  355. UserList(UserIndex).Invent.Object(7).Amount = 150
  356. UserList(UserIndex).Invent.Object(8).ObjIndex = 1078 'POTA AMARILLA
  357. UserList(UserIndex).Invent.Object(8).Amount = 150
  358.  
  359. End If
  360.  
  361.  
  362. Select Case UserRaza
  363.     Case "Humano"
  364.         UserList(UserIndex).Invent.Object(4).ObjIndex = 463
  365.     Case "Elfo"
  366.         UserList(UserIndex).Invent.Object(4).ObjIndex = 464
  367.     Case "Elfo Oscuro"
  368.         UserList(UserIndex).Invent.Object(4).ObjIndex = 465
  369.     Case "Enano"
  370.         UserList(UserIndex).Invent.Object(4).ObjIndex = 466
  371.     Case "Gnomo"
  372.         UserList(UserIndex).Invent.Object(4).ObjIndex = 466
  373. End Select
  374.  
  375. UserList(UserIndex).Invent.Object(4).Amount = 1
  376. UserList(UserIndex).Invent.Object(4).Equipped = 1
  377.  
  378. UserList(UserIndex).Invent.Object(9).ObjIndex = 41
  379. UserList(UserIndex).Invent.Object(9).Amount = 1
  380.  
  381. UserList(UserIndex).Invent.ArmourEqpSlot = 4
  382. UserList(UserIndex).Invent.ArmourEqpObjIndex = UserList(UserIndex).Invent.Object(4).ObjIndex
  383.  
  384. UserList(UserIndex).Invent.WeaponEqpObjIndex = UserList(UserIndex).Invent.Object(3).ObjIndex
  385. UserList(UserIndex).Invent.WeaponEqpSlot = 3
  386. UserList(UserIndex).Stats.TPoints = 0
  387. UserList(UserIndex).FaccionNumber = 2
  388. UserList(UserIndex).flags.Caballero = 0
  389. UserList(UserIndex).flags.IsMaxLevel = False
  390. UserList(UserIndex).Char.Account = Cuenta
  391. Call AddPjCuenta(Cuenta, name)
  392. Call DB_SaveCharacter(UserIndex, name)
  393. Call ConnectUser(UserIndex, name, Password, USerial, Cuenta)
  394. Call SendData(SendTarget.toindex, UserIndex, 0, "CUD" & (1 + 1) & "," & name & "," & UserList(UserIndex).Char.body & "," & UserList(UserIndex).Char.Head)
  395. End Sub
  396. Sub CloseSocket(ByVal UserIndex As Integer)
  397.  
  398. On Error GoTo errhandler
  399.    
  400.     If UserIndex = LastUser Then
  401.         Do Until UserList(LastUser).flags.UserLogged
  402.             LastUser = LastUser - 1
  403.             If LastUser < 1 Then Exit Do
  404.         Loop
  405.     End If
  406.    
  407.     If UserList(UserIndex).ConnID <> -1 Then
  408.         Call CloseSocketSL(UserIndex)
  409.     End If
  410.    
  411.     If UserList(UserIndex).ComUsu.DestUsu > 0 Then
  412.         If UserList(UserList(UserIndex).ComUsu.DestUsu).flags.UserLogged Then
  413.             If UserList(UserList(UserIndex).ComUsu.DestUsu).ComUsu.DestUsu = UserIndex Then
  414.                 Call SendData(SendTarget.toindex, UserList(UserIndex).ComUsu.DestUsu, 0, "||Comercio cancelado por el otro usuario" & FONTTYPE_TALK)
  415.                 Call FinComerciarUsu(UserList(UserIndex).ComUsu.DestUsu)
  416.             End If
  417.         End If
  418.     End If
  419.    
  420.      If UserList(UserIndex).flags.Teleports.Creado = True Then
  421.         UserList(UserIndex).flags.Teleports.Creado = False
  422.        
  423.         Call EraseObj(SendTarget.ToMap, 0, UserList(UserIndex).Pos.Map, 1, UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY)
  424.        
  425.         MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.Map = 0
  426.         MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.X = 0
  427.         MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.Y = 0
  428.    
  429.         UserList(UserIndex).flags.Teleports.tMap = 0
  430.         UserList(UserIndex).flags.Teleports.TimeCount = 0
  431.         UserList(UserIndex).flags.Teleports.tX = 0
  432.         UserList(UserIndex).flags.Teleports.tY = 0
  433.         UserList(UserIndex).flags.Teleports.Creado = False
  434.        
  435.     End If
  436.      
  437.     If UserList(UserIndex).flags.UserLogged Then
  438.         If NumUsers > 0 Then NumUsers = NumUsers - 1
  439.         Call CloseUser(UserIndex)
  440.        
  441.     Else
  442.         Call ResetUserSlot(UserIndex)
  443.     End If
  444.    
  445.     UserList(UserIndex).ConnID = -1
  446.     UserList(UserIndex).ConnIDValida = False
  447.     UserList(UserIndex).NumeroPaquetesPorMiliSec = 0
  448.    
  449. Exit Sub
  450.  
  451. errhandler:
  452.     UserList(UserIndex).ConnID = -1
  453.     UserList(UserIndex).ConnIDValida = False
  454.     UserList(UserIndex).NumeroPaquetesPorMiliSec = 0
  455.     Call ResetUserSlot(UserIndex)
  456.  
  457.     Call LogError("CloseSocket - Error = " & Err.Number & " - Descripción = " & Err.Description & " - UserIndex = " & UserIndex)
  458. End Sub
  459.  
  460. Sub CloseSocketSL(ByVal UserIndex As Integer)
  461.  
  462. If UserList(UserIndex).ConnID <> -1 And UserList(UserIndex).ConnIDValida Then
  463.     Call BorraSlotSock(UserList(UserIndex).ConnID)
  464.     Call WSApiCloseSocket(UserList(UserIndex).ConnID)
  465.     UserList(UserIndex).ConnIDValida = False
  466. End If
  467. End Sub
  468.  
  469. Public Function EnviarDatosASlot(ByVal UserIndex As Integer, Datos As String) As Long
  470.  
  471.     On Error GoTo Err
  472.    
  473.     Dim Ret As Long
  474.        
  475.     Ret = WsApiEnviar(UserIndex, Datos)
  476.    
  477.     If Ret <> 0 And Ret <> WSAEWOULDBLOCK Then
  478.         Call CloseSocketSL(UserIndex)
  479.         Call Cerrar_Usuario(UserIndex)
  480.     End If
  481.     EnviarDatosASlot = Ret
  482.     Exit Function
  483.    
  484. Err:
  485.         'If MainView.SUPERLOG.Value = 1 Then LogCustom ("EnviarDatosASlot:: ERR Handler. userindex=" & UserIndex & " datos=" & Datos & " UL?/CId/CIdV?=" & UserList(UserIndex).flags.UserLogged & "/" & UserList(UserIndex).ConnID & "/" & UserList(UserIndex).ConnIDValida & " ERR: " & Err.Description)
  486. End Function
  487.  
  488. Public Function EnviarDatosASlot2(ByVal UserIndex As Integer, Datos As String) As Long
  489.  
  490. #If UsarQueSocket = 1 Then
  491.     On Error GoTo Err
  492.    
  493.     Dim Ret As Long
  494.    
  495.    
  496.    
  497.     Ret = WsApiEnviar(UserIndex, Datos)
  498.    
  499.     If Ret <> 0 And Ret <> WSAEWOULDBLOCK Then
  500.         Call CloseSocketSL(UserIndex)
  501.         Call Cerrar_Usuario(UserIndex)
  502.     End If
  503.     EnviarDatosASlot2 = Ret
  504.     Exit Function
  505.    
  506. Err:
  507.         'If MainView.SUPERLOG.Value = 1 Then LogCustom ("EnviarDatosASlot:: ERR Handler. userindex=" & UserIndex & " datos=" & Datos & " UL?/CId/CIdV?=" & UserList(UserIndex).flags.UserLogged & "/" & UserList(UserIndex).ConnID & "/" & UserList(UserIndex).ConnIDValida & " ERR: " & Err.Description)
  508.  
  509. #ElseIf UsarQueSocket = 0 Then '**********************************************
  510.  
  511.     Dim Encolar As Boolean
  512.     Encolar = False
  513.    
  514.     EnviarDatosASlot2 = 0
  515.    
  516.     If UserList(UserIndex).ColaSalida.Count <= 0 Then
  517.         If MainView.Socket2(UserIndex).Write(Datos, Len(Datos)) < 0 Then
  518.             If MainView.Socket2(UserIndex).LastError = WSAEWOULDBLOCK Then
  519.                 UserList(UserIndex).SockPuedoEnviar = False
  520.                 Encolar = True
  521.             Else
  522.                 Call Cerrar_Usuario(UserIndex)
  523.             End If
  524.         End If
  525.     Else
  526.         Encolar = True
  527.     End If
  528.    
  529.     If Encolar Then
  530.         Debug.Print "Encolando..."
  531.         UserList(UserIndex).ColaSalida.Add Datos
  532.     End If
  533.  
  534. #ElseIf UsarQueSocket = 2 Then '**********************************************
  535.  
  536. Dim Encolar As Boolean
  537. Dim Ret As Long
  538.    
  539.     Encolar = False
  540.    
  541.     '//
  542.     '// Valores de retorno:
  543.     '//                     0: Todo OK
  544.     '//                     1: WSAEWOULDBLOCK
  545.     '//                     2: Error critico
  546.     '//
  547.     If UserList(UserIndex).ColaSalida.Count <= 0 Then
  548.         Ret = MainView.Serv.Enviar(UserList(UserIndex).ConnID, Datos, Len(Datos))
  549.         If Ret = 1 Then
  550.             Encolar = True
  551.         ElseIf Ret = 2 Then
  552.             Call CloseSocketSL(UserIndex)
  553.             Call Cerrar_Usuario(UserIndex)
  554.         End If
  555.     Else
  556.         Encolar = True
  557.     End If
  558.    
  559.     If Encolar Then
  560.         Debug.Print "Encolando..."
  561.         UserList(UserIndex).ColaSalida.Add Datos
  562.     End If
  563. #End If '**********************************************
  564.  
  565. End Function
  566.  
  567. Sub SendData(ByVal sndRoute As SendTarget, ByVal sndIndex As Integer, ByVal sndMap As Integer, ByVal sndData As String)
  568.  
  569. On Error Resume Next
  570.  
  571. Dim LoopC As Integer
  572. Dim X As Integer
  573. Dim Y As Integer
  574.  
  575. If sndData <> "BUENO" Then
  576. sndData = Security.Security.NSC_Encryption(sndData, Security.Keys(1))
  577. End If
  578. sndData = sndData & ENDC
  579.  
  580. Select Case sndRoute
  581.  
  582.     Case SendTarget.ToPCArea
  583.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  584.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  585.                If InMapBounds(X, Y) Then
  586.                     If MapData(sndMap, X, Y).UserIndex > 0 Then
  587.                        If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  588.                             Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  589.                        End If
  590.                     End If
  591.                End If
  592.             Next X
  593.         Next Y
  594.         Exit Sub
  595.    
  596.     Case SendTarget.toindex
  597.         If UserList(sndIndex).ConnID <> -1 Then
  598.             Call EnviarDatosASlot(sndIndex, sndData)
  599.             Exit Sub
  600.         End If
  601.  
  602.  
  603.     Case SendTarget.ToNone
  604.         Exit Sub
  605.        
  606.        
  607.     Case SendTarget.ToAdmins
  608.         For LoopC = 1 To LastUser
  609.             If UserList(LoopC).ConnID <> -1 Then
  610.                 If UserList(LoopC).flags.Privilegios > 0 Then
  611.                     Call EnviarDatosASlot(LoopC, sndData)
  612.                End If
  613.             End If
  614.         Next LoopC
  615.         Exit Sub
  616.        
  617.     Case SendTarget.ToAll
  618.         For LoopC = 1 To LastUser
  619.             If UserList(LoopC).ConnID <> -1 Then
  620.                 If UserList(LoopC).flags.UserLogged Then 'Esta logeado como usuario?
  621.                     Call EnviarDatosASlot(LoopC, sndData)
  622.                 End If
  623.             End If
  624.         Next LoopC
  625.         Exit Sub
  626.    
  627.     Case SendTarget.ToAllButIndex
  628.         For LoopC = 1 To LastUser
  629.             If (UserList(LoopC).ConnID <> -1) And (LoopC <> sndIndex) Then
  630.                 If UserList(LoopC).flags.UserLogged Then 'Esta logeado como usuario?
  631.                     Call EnviarDatosASlot(LoopC, sndData)
  632.                 End If
  633.             End If
  634.         Next LoopC
  635.         Exit Sub
  636.    
  637.     Case SendTarget.ToMap
  638.         For LoopC = 1 To LastUser
  639.             If (UserList(LoopC).ConnID <> -1) Then
  640.                 If UserList(LoopC).flags.UserLogged Then
  641.                     If UserList(LoopC).Pos.Map = sndMap Then
  642.                         Call EnviarDatosASlot(LoopC, sndData)
  643.                     End If
  644.                 End If
  645.             End If
  646.         Next LoopC
  647.         Exit Sub
  648.      
  649.     Case SendTarget.ToMapButIndex
  650.         For LoopC = 1 To LastUser
  651.             If (UserList(LoopC).ConnID <> -1) And LoopC <> sndIndex Then
  652.                 If UserList(LoopC).Pos.Map = sndMap Then
  653.                     Call EnviarDatosASlot(LoopC, sndData)
  654.                 End If
  655.             End If
  656.         Next LoopC
  657.         Exit Sub
  658.            
  659.     Case SendTarget.ToGuildMembers
  660.        
  661.         LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
  662.         While LoopC > 0
  663.             If (UserList(LoopC).ConnID <> -1) Then
  664.                 Call EnviarDatosASlot(LoopC, sndData)
  665.             End If
  666.             LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
  667.         Wend
  668.        
  669.         Exit Sub
  670.  
  671.  
  672.     Case SendTarget.ToDeadArea
  673.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  674.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  675.                If InMapBounds(X, Y) Then
  676.                     If MapData(sndMap, X, Y).UserIndex > 0 Then
  677.                         If UserList(MapData(sndMap, X, Y).UserIndex).flags.Muerto = 1 Or UserList(MapData(sndMap, X, Y).UserIndex).flags.Privilegios >= 1 Then
  678.                            If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  679.                                 Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  680.                            End If
  681.                         End If
  682.                     End If
  683.                End If
  684.             Next X
  685.         Next Y
  686.         Exit Sub
  687.  
  688.     '[Alejo-18-5]
  689.     Case SendTarget.ToPCAreaButIndex
  690.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  691.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  692.                If InMapBounds(X, Y) Then
  693.                     If (MapData(sndMap, X, Y).UserIndex > 0) And (MapData(sndMap, X, Y).UserIndex <> sndIndex) Then
  694.                        If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  695.                             Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  696.                        End If
  697.                     End If
  698.                End If
  699.             Next X
  700.         Next Y
  701.         Exit Sub
  702.        
  703.     Case SendTarget.ToClanArea
  704.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  705.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  706.                If InMapBounds(X, Y) Then
  707.                     If (MapData(sndMap, X, Y).UserIndex > 0) Then
  708.                         If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  709.                             If UserList(sndIndex).GuildIndex > 0 And UserList(MapData(sndMap, X, Y).UserIndex).GuildIndex = UserList(sndIndex).GuildIndex Then
  710.                                 Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  711.                             End If
  712.                         End If
  713.                     End If
  714.                End If
  715.             Next X
  716.         Next Y
  717.         Exit Sub
  718.  
  719.  
  720.  
  721.     Case SendTarget.ToPartyArea
  722.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  723.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  724.                If InMapBounds(X, Y) Then
  725.                     If (MapData(sndMap, X, Y).UserIndex > 0) Then
  726.                         If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  727.                             If UserList(sndIndex).PartyIndex > 0 And UserList(MapData(sndMap, X, Y).UserIndex).PartyIndex = UserList(sndIndex).PartyIndex Then
  728.                                 Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  729.                             End If
  730.                         End If
  731.                     End If
  732.                End If
  733.             Next X
  734.         Next Y
  735.         Exit Sub
  736.        
  737.     '[CDT 17-02-2004]
  738.     Case SendTarget.ToAdminsAreaButConsejeros
  739.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  740.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  741.                If InMapBounds(X, Y) Then
  742.                     If (MapData(sndMap, X, Y).UserIndex > 0) And (MapData(sndMap, X, Y).UserIndex <> sndIndex) Then
  743.                        If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  744.                             If UserList(MapData(sndMap, X, Y).UserIndex).flags.Privilegios > 1 Then
  745.                                 Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  746.                             End If
  747.                        End If
  748.                     End If
  749.                End If
  750.             Next X
  751.         Next Y
  752.         Exit Sub
  753.     '[/CDT]
  754.  
  755.     Case SendTarget.ToNPCArea
  756.         For Y = Npclist(sndIndex).Pos.Y - MinYBorder + 1 To Npclist(sndIndex).Pos.Y + MinYBorder - 1
  757.             For X = Npclist(sndIndex).Pos.X - MinXBorder + 1 To Npclist(sndIndex).Pos.X + MinXBorder - 1
  758.                If InMapBounds(X, Y) Then
  759.                     If MapData(sndMap, X, Y).UserIndex > 0 Then
  760.                        If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  761.                             Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  762.                        End If
  763.                     End If
  764.                End If
  765.             Next X
  766.         Next Y
  767.         Exit Sub
  768.  
  769.     Case SendTarget.ToDiosesYclan
  770.         LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
  771.         While LoopC > 0
  772.             If (UserList(LoopC).ConnID <> -1) Then
  773.                 Call EnviarDatosASlot(LoopC, sndData)
  774.             End If
  775.             LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
  776.         Wend
  777.  
  778.         LoopC = Guild.Iterador_ProximoGM(sndIndex)
  779.         While LoopC > 0
  780.             If (UserList(LoopC).ConnID <> -1) Then
  781.                 Call EnviarDatosASlot(LoopC, sndData)
  782.             End If
  783.             LoopC = Guild.Iterador_ProximoGM(sndIndex)
  784.         Wend
  785.  
  786.         Exit Sub
  787.  
  788.     Case SendTarget.ToConsejo
  789.         For LoopC = 1 To LastUser
  790.             If (UserList(LoopC).ConnID <> -1) Then
  791.                 If UserList(LoopC).flags.PertAlCons > 0 Then
  792.                     Call EnviarDatosASlot(LoopC, sndData)
  793.                 End If
  794.             End If
  795.         Next LoopC
  796.         Exit Sub
  797.     Case SendTarget.ToConsejoCaos
  798.         For LoopC = 1 To LastUser
  799.             If (UserList(LoopC).ConnID <> -1) Then
  800.                 If UserList(LoopC).flags.PertAlConsCaos > 0 Then
  801.                     Call EnviarDatosASlot(LoopC, sndData)
  802.                 End If
  803.             End If
  804.         Next LoopC
  805.         Exit Sub
  806.     Case SendTarget.ToRolesMasters
  807.         For LoopC = 1 To LastUser
  808.             If (UserList(LoopC).ConnID <> -1) Then
  809.                 If UserList(LoopC).flags.EsRolesMaster Then
  810.                     Call EnviarDatosASlot(LoopC, sndData)
  811.                 End If
  812.             End If
  813.         Next LoopC
  814.         Exit Sub
  815.    
  816.     Case SendTarget.ToCiudadanos
  817.         For LoopC = 1 To LastUser
  818.             If (UserList(LoopC).ConnID <> -1) Then
  819.                 If Not criminal(LoopC) Then
  820.                     Call EnviarDatosASlot(LoopC, sndData)
  821.                 End If
  822.             End If
  823.         Next LoopC
  824.         Exit Sub
  825.    
  826.     Case SendTarget.ToCriminales
  827.         For LoopC = 1 To LastUser
  828.             If (UserList(LoopC).ConnID <> -1) Then
  829.                 If criminal(LoopC) Then
  830.                     Call EnviarDatosASlot(LoopC, sndData)
  831.                 End If
  832.             End If
  833.         Next LoopC
  834.         Exit Sub
  835.    
  836.     Case SendTarget.ToReal
  837.         For LoopC = 1 To LastUser
  838.             If (UserList(LoopC).ConnID <> -1) Then
  839.                 If UserList(LoopC).Faccion.ArmadaReal = 1 Then
  840.                     Call EnviarDatosASlot(LoopC, sndData)
  841.                 End If
  842.             End If
  843.         Next LoopC
  844.         Exit Sub
  845.    
  846.     Case SendTarget.ToCaos
  847.         For LoopC = 1 To LastUser
  848.             If (UserList(LoopC).ConnID <> -1) Then
  849.                 If UserList(LoopC).Faccion.FuerzasCaos = 1 Then
  850.                     Call EnviarDatosASlot(LoopC, sndData)
  851.                 End If
  852.             End If
  853.         Next LoopC
  854.         Exit Sub
  855.        
  856.     Case ToCiudadanosYRMs
  857.         For LoopC = 1 To LastUser
  858.             If (UserList(LoopC).ConnID <> -1) Then
  859.                 If Not criminal(LoopC) Or UserList(LoopC).flags.EsRolesMaster Then
  860.                     Call EnviarDatosASlot(LoopC, sndData)
  861.                 End If
  862.             End If
  863.         Next LoopC
  864.         Exit Sub
  865.    
  866.     Case ToCriminalesYRMs
  867.         For LoopC = 1 To LastUser
  868.             If (UserList(LoopC).ConnID <> -1) Then
  869.                 If criminal(LoopC) Or UserList(LoopC).flags.EsRolesMaster Then
  870.                     Call EnviarDatosASlot(LoopC, sndData)
  871.                 End If
  872.             End If
  873.         Next LoopC
  874.         Exit Sub
  875.    
  876.     Case ToRealYRMs
  877.         For LoopC = 1 To LastUser
  878.             If (UserList(LoopC).ConnID <> -1) Then
  879.                 If UserList(LoopC).Faccion.ArmadaReal = 1 Or UserList(LoopC).flags.EsRolesMaster Then
  880.                     Call EnviarDatosASlot(LoopC, sndData)
  881.                 End If
  882.             End If
  883.         Next LoopC
  884.         Exit Sub
  885.    
  886.     Case ToCaosYRMs
  887.         For LoopC = 1 To LastUser
  888.             If (UserList(LoopC).ConnID <> -1) Then
  889.                 If UserList(LoopC).Faccion.FuerzasCaos = 1 Or UserList(LoopC).flags.EsRolesMaster Then
  890.                     Call EnviarDatosASlot(LoopC, sndData)
  891.                 End If
  892.             End If
  893.         Next LoopC
  894.         Exit Sub
  895. End Select
  896.  
  897. End Sub
  898.  
  899. Sub SendData2(ByVal sndRoute As SendTarget, ByVal sndIndex As Integer, ByVal sndData As String)
  900.  
  901. On Error Resume Next
  902.  
  903. sndData = sndData & ENDC
  904.  
  905. Select Case sndRoute
  906.     Case SendTarget.toindex
  907.         If UserList(sndIndex).ConnID <> -1 Then
  908.              Call EnviarDatosASlot2(sndIndex, sndData)
  909.              Exit Sub
  910.         End If
  911.    
  912. End Select
  913. End Sub
  914. Function EstaPCarea(Index As Integer, Index2 As Integer) As Boolean
  915.  
  916.  
  917. Dim X As Integer, Y As Integer
  918. For Y = UserList(Index).Pos.Y - MinYBorder + 1 To UserList(Index).Pos.Y + MinYBorder - 1
  919.         For X = UserList(Index).Pos.X - MinXBorder + 1 To UserList(Index).Pos.X + MinXBorder - 1
  920.  
  921.             If MapData(UserList(Index).Pos.Map, X, Y).UserIndex = Index2 Then
  922.                 EstaPCarea = True
  923.                 Exit Function
  924.             End If
  925.        
  926.         Next X
  927. Next Y
  928. EstaPCarea = False
  929. End Function
  930.  
  931. Function HayPCarea(Pos As WorldPos) As Boolean
  932.  
  933.  
  934. Dim X As Integer, Y As Integer
  935. For Y = Pos.Y - MinYBorder + 1 To Pos.Y + MinYBorder - 1
  936.         For X = Pos.X - MinXBorder + 1 To Pos.X + MinXBorder - 1
  937.             If X > 0 And Y > 0 And X < 101 And Y < 101 Then
  938.                 If MapData(Pos.Map, X, Y).UserIndex > 0 Then
  939.                     HayPCarea = True
  940.                     Exit Function
  941.                End If
  942.             End If
  943.         Next X
  944. Next Y
  945. HayPCarea = False
  946. End Function
  947.  
  948. Function HayOBJarea(Pos As WorldPos, ObjIndex As Integer) As Boolean
  949.  
  950.  
  951. Dim X As Integer, Y As Integer
  952. For Y = Pos.Y - MinYBorder + 1 To Pos.Y + MinYBorder - 1
  953.         For X = Pos.X - MinXBorder + 1 To Pos.X + MinXBorder - 1
  954.             If MapData(Pos.Map, X, Y).ObjInfo.ObjIndex = ObjIndex Then
  955.                 HayOBJarea = True
  956.                 Exit Function
  957.             End If
  958.        
  959.         Next X
  960. Next Y
  961. HayOBJarea = False
  962. End Function
  963.  
  964. Function ValidateChr(ByVal UserIndex As Integer) As Boolean
  965.  
  966. ValidateChr = UserList(UserIndex).Char.Head <> 0 _
  967.                 And UserList(UserIndex).Char.body <> 0 _
  968.                 And ValidateSkills(UserIndex)
  969.  
  970. End Function
  971.  
  972. Sub ConnectUser(ByVal UserIndex As Integer, name As String, Password As String, ByVal UserSerial As String, Cuenta As String)
  973. Dim N As Integer
  974. Dim tStr As String
  975. On Error GoTo ERr_HS
  976. UserList(UserIndex).flags.Escondido = 0
  977. UserList(UserIndex).flags.Guerra = False
  978. Call SendData(SendTarget.toindex, UserIndex, 0, "|G0")
  979. UserList(UserIndex).flags.TargetNPC = 0
  980. UserList(UserIndex).flags.TargetNpcTipo = eNPCType.Comun
  981. UserList(UserIndex).flags.TargetObj = 0
  982. UserList(UserIndex).flags.TargetUser = 0
  983. UserList(UserIndex).Char.FX = 0
  984. UserList(UserIndex).SerialIndex = UserSerial
  985. UserList(UserIndex).flags.SeguItems = True
  986.  
  987. If NumUsers >= MaxUsers Then
  988.     Call SendData(SendTarget.toindex, UserIndex, 0, "ERREl servidor ha alcanzado el maximo de usuarios soportado, por favor vuelva a intertarlo mas tarde.")
  989.     Call CloseSocket(UserIndex)
  990.     Exit Sub
  991. End If
  992.  
  993. If AllowMultiLogins = 0 Then
  994.     If CheckForSameIP(UserIndex, UserList(UserIndex).ip) = True Then
  995.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERRNo es posible usar mas de un personaje al mismo tiempo.")
  996.         Call CloseSocket(UserIndex)
  997.         Exit Sub
  998.     End If
  999. End If
  1000.  
  1001. Call SendData(SendTarget.toindex, UserIndex, 0, "CUALIPC" & UserList(UserIndex).ip)
  1002.  
  1003. Dim j As Integer
  1004.  
  1005.  
  1006.  
  1007. If CheckForSameName(name) Then
  1008.     If UserList(NameIndex(name)).Counters.Saliendo Then
  1009.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERREl usuario está saliendo.")
  1010.     Else
  1011.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERRPerdon, un usuario con el mismo nombre se há logoeado.")
  1012.     End If
  1013.     Call CloseSocket(UserIndex)
  1014.     Exit Sub
  1015. End If
  1016.  
  1017. Call DB_LoadCharacter(UserIndex, name)
  1018.  
  1019. If Not ValidateChr(UserIndex) Then
  1020.     Call SendData(SendTarget.toindex, UserIndex, 0, "!!Hubo un error al cargar tu personaje, informa esto en nuestros foros http://www.swforos.com/foro/.)
  1021.     Call CloseSocket(UserIndex)
  1022.     Exit Sub
  1023. End If
  1024.  
  1025. If UserList(UserIndex).flags.Ban Then
  1026. Call SendData(SendTarget.toindex, UserIndex, 0, "ERREste personaje se encuentra bajo una suspención, para tenér mas información, visitá http://www.swforos.com.ar/")
  1027. CloseSocket (UserIndex)
  1028. Exit Sub
  1029. End If
  1030.  
  1031. If UserList(UserIndex).Invent.EscudoEqpSlot = 0 Then UserList(UserIndex).Char.ShieldAnim = NingunEscudo
  1032. If UserList(UserIndex).Invent.CascoEqpSlot = 0 Then UserList(UserIndex).Char.CascoAnim = NingunCasco
  1033. If UserList(UserIndex).Invent.WeaponEqpSlot = 0 Then UserList(UserIndex).Char.WeaponAnim = NingunArma
  1034.  
  1035.  
  1036. Call UpdateUserInv(True, UserIndex, 0)
  1037. Call UpdateUserHechizos(True, UserIndex, 0)
  1038.  
  1039. If UserList(UserIndex).flags.Navegando = 1 Then
  1040.      UserList(UserIndex).Char.body = ObjData(UserList(UserIndex).Invent.BarcoObjIndex).Ropaje
  1041.      UserList(UserIndex).Char.Head = 0
  1042.      UserList(UserIndex).Char.WeaponAnim = NingunArma
  1043.      UserList(UserIndex).Char.ShieldAnim = NingunEscudo
  1044.      UserList(UserIndex).Char.CascoAnim = NingunCasco
  1045. End If
  1046.     If UserList(UserIndex).flags.Montando = 1 Then
  1047.          UserList(UserIndex).Char.body = ObjData(UserList(UserIndex).Invent.MonturaObjIndex).Ropaje
  1048.          UserList(UserIndex).Char.Head = UserList(UserIndex).OrigChar.Head
  1049.          UserList(UserIndex).Char.WeaponAnim = NingunArma
  1050.          UserList(UserIndex).Char.ShieldAnim = NingunEscudo
  1051.          UserList(UserIndex).Char.CascoAnim = UserList(UserIndex).Char.CascoAnim
  1052.     End If
  1053. If UserList(UserIndex).flags.Paralizado Then
  1054. #If SeguridadAlkon Then
  1055.     If EncriptarProtocolosCriticos Then
  1056.         Call SendCryptedData(SendTarget.toindex, UserIndex, 0, "PARADOK")
  1057.         Call SendData(SendTarget.toindex, UserIndex, 0, "PU" & UserList(UserIndex).Pos.X & "," & UserList(UserIndex).Pos.Y)
  1058.     Else
  1059. #End If
  1060.         Call SendData(SendTarget.toindex, UserIndex, 0, "PARADOK")
  1061.         Call SendData(SendTarget.toindex, UserIndex, 0, "PU" & UserList(UserIndex).Pos.X & "," & UserList(UserIndex).Pos.Y)
  1062. #If SeguridadAlkon Then
  1063.     End If
  1064. #End If
  1065. End If
  1066.  
  1067. 'Feo, esto tiene que ser parche cliente
  1068. If UserList(UserIndex).flags.Estupidez = 0 Then Call SendData(SendTarget.toindex, UserIndex, 0, "NESTUP")
  1069. '
  1070.  
  1071. 'Posicion de comienzo
  1072. If UserList(UserIndex).Pos.Map = 0 Then
  1073.              UserList(UserIndex).Pos.Map = 60
  1074.              UserList(UserIndex).Pos.X = 45
  1075.              UserList(UserIndex).Pos.Y = 55
  1076. Else
  1077.  
  1078. If Not MapaValido(UserList(UserIndex).Pos.Map) Then
  1079.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERREL PJ se encuenta en un mapa invalido.")
  1080.         Call CloseSocket(UserIndex)
  1081.         Exit Sub
  1082.     End If
  1083.    ''TELEFRAG
  1084.     If MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex <> 0 Then
  1085.         ''si estaba en comercio seguro...
  1086.         If UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu > 0 Then
  1087.             If UserList(UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu).flags.UserLogged Then
  1088.                 Call FinComerciarUsu(UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu)
  1089.                 Call SendData(SendTarget.toindex, UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu, 0, "||Comercio cancelado. El otro usuario se ha desconectado." & FONTTYPE_TALK)
  1090.             End If
  1091.             If UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).flags.UserLogged Then
  1092.                 Call FinComerciarUsu(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex)
  1093.                 Call SendData(SendTarget.toindex, MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex, 0, "ERRAlguien se ha conectado donde te encontrabas, por favor reconéctate...")
  1094.             End If
  1095.         End If
  1096.         Call CloseSocket(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex)
  1097.     End If
  1098.    
  1099.    
  1100.     If UserList(UserIndex).flags.Muerto = 1 Then
  1101.         Call Empollando(UserIndex)
  1102.     End If
  1103. End If
  1104.  
  1105. 'Nombre de sistema
  1106. UserList(UserIndex).name = name
  1107.  
  1108. UserList(UserIndex).Password = Password
  1109.  
  1110. UserList(UserIndex).showName = True 'Por default los nombres son visibles
  1111.  
  1112.  
  1113. Call SendData(SendTarget.toindex, UserIndex, 0, "IU" & UserIndex) 'Enviamos el User index
  1114. Call SendData(SendTarget.toindex, UserIndex, 0, "CM" & UserList(UserIndex).Pos.Map & "," & MapInfo(UserList(UserIndex).Pos.Map).MapVersion) 'Carga el mapa
  1115. Call SendData(SendTarget.toindex, UserIndex, 0, "TM" & MapInfo(UserList(UserIndex).Pos.Map).Music)
  1116.  
  1117. 'Vemos que clase de user es (se lo usa para setear los privilegios alcrear el PJ)
  1118. UserList(UserIndex).flags.EsRolesMaster = EsRolesMaster(name)
  1119. If EsEventM(name) Then
  1120.     UserList(UserIndex).flags.Privilegios = PlayerType.Dios
  1121.     UserList(UserIndex).flags.Rango = 6
  1122.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1123. ElseIf EsDirector(name) Then
  1124.     UserList(UserIndex).flags.Privilegios = PlayerType.DirectorGM
  1125.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1126. ElseIf EsAdmin(name) Then
  1127.     UserList(UserIndex).flags.Privilegios = PlayerType.Admin
  1128.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1129. ElseIf EsDios(name) Then
  1130.     UserList(UserIndex).flags.Privilegios = PlayerType.Dios
  1131.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1132. ElseIf EsSemiDios(name) Then
  1133.     UserList(UserIndex).flags.Privilegios = PlayerType.SemiDios
  1134.     UserList(UserIndex).flags.Rango = 2
  1135.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1136. ElseIf EsConsejero(name) Then
  1137.     UserList(UserIndex).flags.Privilegios = PlayerType.SemiDios ' le doi los privilegios del semi ;)
  1138.     UserList(UserIndex).flags.Rango = 1
  1139.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, True)
  1140. Else
  1141.     UserList(UserIndex).flags.Privilegios = PlayerType.User
  1142. End If
  1143.  
  1144. ''[EL OSO]: TRAIGO ESTO ACA ARRIBA PARA DARLE EL IP!
  1145. UserList(UserIndex).Counters.IdleCount = 0
  1146. Call MakeUserChar(SendTarget.ToMap, 0, UserList(UserIndex).Pos.Map, UserIndex, UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y)
  1147. Call SendData(SendTarget.toindex, UserIndex, 0, "IP" & UserList(UserIndex).Char.CharIndex)
  1148. Call SendUserStatsBox(UserIndex)
  1149.  
  1150. Call EnviarHambreYsed(UserIndex)
  1151.  
  1152. If haciendoBK Then
  1153.     Call SendData(SendTarget.toindex, UserIndex, 0, "BKW")
  1154.     Call SendData(SendTarget.toindex, UserIndex, 0, "||Servidor> Por favor espera algunos segundos, WorldSave esta ejecutandose." & FONTTYPE_SERVER)
  1155. End If
  1156.  
  1157. If EnPausa Then
  1158.     Call SendData(SendTarget.toindex, UserIndex, 0, "BKW")
  1159.     Call SendData(SendTarget.toindex, UserIndex, 0, "||Servidor> Lo sentimos mucho pero el servidor se encuentra actualmente detenido. Intenta ingresar más tarde." & FONTTYPE_SERVER)
  1160. End If
  1161.  
  1162. If EnTesting And UserList(UserIndex).Stats.ELV >= 18 Then
  1163.     Call SendData(SendTarget.toindex, UserIndex, 0, "ERRServidor en Testing por unos minutos, conectese con PJs de nivel menor a 18. No se conecte con Pjs que puedan resultar importantes por ahora pues pueden arruinarse.")
  1164.     Call CloseSocket(UserIndex)
  1165.     Exit Sub
  1166. End If
  1167.  
  1168. NumUsers = NumUsers + 1
  1169. UserList(UserIndex).flags.UserLogged = True
  1170.  
  1171. MapInfo(UserList(UserIndex).Pos.Map).NumUsers = MapInfo(UserList(UserIndex).Pos.Map).NumUsers + 1
  1172.  
  1173. If UserList(UserIndex).Stats.SkillPts > 0 Then
  1174.     Call EnviarSkills(UserIndex)
  1175.     Call EnviarSubirNivel(UserIndex, UserList(UserIndex).Stats.SkillPts)
  1176. End If
  1177.  
  1178. If NumUsers > DayStats.MaxUsuarios Then DayStats.MaxUsuarios = NumUsers
  1179.  
  1180. If NumUsers > recordusuarios Then
  1181.     Call SendData(SendTarget.ToAll, 0, 0, "||Record de usuarios conectados simultaniamente." & "Hay " & NumUsers & " usuarios." & "~240~240~50~1~0")
  1182.     recordusuarios = NumUsers
  1183.     Call WriteVar(IniPath & "Config.bin", "INIT", "Record", str(recordusuarios))
  1184. End If
  1185.  
  1186. Dim i As Integer
  1187.  
  1188. If UserList(UserIndex).NroMacotas > 0 Then
  1189.     For i = 1 To MAXMASCOTAS
  1190.         If UserList(UserIndex).MascotasType(i) > 0 Then
  1191.             UserList(UserIndex).MascotasIndex(i) = SpawnNpc(UserList(UserIndex).MascotasType(i), UserList(UserIndex).Pos, True, True)
  1192.            
  1193.             If UserList(UserIndex).MascotasIndex(i) > 0 Then
  1194.                 Npclist(UserList(UserIndex).MascotasIndex(i)).MaestroUser = UserIndex
  1195.                 Call FollowAmo(UserList(UserIndex).MascotasIndex(i))
  1196.             Else
  1197.                 UserList(UserIndex).MascotasIndex(i) = 0
  1198.             End If
  1199.         End If
  1200.     Next i
  1201. End If
  1202.  
  1203. If UserList(UserIndex).flags.Navegando = 1 Then Call SendData(SendTarget.toindex, UserIndex, 0, "NAVEG")
  1204.     If UserList(UserIndex).flags.Montando = 1 Then Call SendData(SendTarget.toindex, UserIndex, 0, "EQUIT")
  1205.  
  1206. If ServerSoloGMs > 0 Then
  1207.     If UserList(UserIndex).flags.Privilegios < ServerSoloGMs Then
  1208.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERRServidor restringido a administradores de jerarquia mayor o igual a: " & ServerSoloGMs & ". Por favor intente en unos momentos.")
  1209.         Call CloseSocket(UserIndex)
  1210.         Exit Sub
  1211.     End If
  1212. End If
  1213.  
  1214. If UserList(UserIndex).GuildIndex > 0 Then
  1215.     'welcome to the show baby...
  1216.     If Not Guild.m_ConectarMiembroAClan(UserIndex, UserList(UserIndex).GuildIndex) Then
  1217.         Call SendData(SendTarget.toindex, UserIndex, 0, "||Tu estado no te permite entrar al clan." & FONTTYPE_GUILD)
  1218.     End If
  1219. End If
  1220.  
  1221. Call SendData(SendTarget.ToPCArea, UserIndex, UserList(UserIndex).Pos.Map, "CFX" & UserList(UserIndex).Char.CharIndex & "," & FXIDs.FXWARP & "," & 0)
  1222.  
  1223. Call SendData(SendTarget.toindex, UserIndex, 0, "LOGGED")
  1224.  
  1225. UserList(UserIndex).Char.Account = Cuenta
  1226. Call Guild.SendGuildNews(UserIndex)
  1227.  
  1228. Dim fPath As String
  1229.  
  1230. fPath = App.Path & "/don/" & UserList(UserIndex).name
  1231.  
  1232. If FileExist(fPath) Then
  1233.     Call SendData(SendTarget.toindex, UserIndex, 0, "||Gracias por ayudár al servidor, tu donación fue procesada, para recibír tus premios, escribe /DONE " & GetVar(fPath, "Init", "Codigo") & "." & FONTTYPE_GUILD)
  1234. End If
  1235.  
  1236. If UserList(UserIndex).GuildIndex > 0 Then
  1237.     SendData SendTarget.toindex, UserIndex, 0, "||El seguro de CvC se encuentra activado." & "~0~128~0~1~0"
  1238.     UserList(UserIndex).flags.SeguroCvc = True
  1239. End If
  1240.  
  1241. If UserList(UserIndex).flags.MP = False Then
  1242.     SendData SendTarget.toindex, UserIndex, 0, "||Los mensajes privados se encuentran activados." & FONTTYPE_INFO
  1243. Else
  1244.     SendData SendTarget.toindex, UserIndex, 0, "||Los mensajes privados se encuentran desactivados." & FONTTYPE_INFO
  1245. End If
  1246.  
  1247. If UserList(UserIndex).Faccion.RecompensasReal = 4 Then
  1248. UserList(UserIndex).flags.EsCuartaJerarquia = True
  1249. End If
  1250.  
  1251. If HayDesafio = False Then
  1252. UserList(UserIndex).flags.YaParticipoDesafio = 0
  1253. UserList(UserIndex).flags.UltiDesafiante = vbNullString
  1254. Else
  1255. If UserList(UserCreaDesafio).name <> UserList(UserIndex).flags.UltiDesafiante Then
  1256. UserList(UserIndex).flags.UltiDesafiante = vbNullString
  1257. UserList(UserIndex).flags.YaParticipoDesafio = 0
  1258. End If
  1259. End If
  1260.  
  1261. If UserList(UserIndex).GuildIndex > 0 Then
  1262. SendData SendTarget.toindex, UserIndex, 0, "||Castillo Norte pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Norte") & FONTTYPE_GUILD
  1263. SendData SendTarget.toindex, UserIndex, 0, "||Castillo Sur pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Sur") & FONTTYPE_GUILD
  1264. SendData SendTarget.toindex, UserIndex, 0, "||Castillo Este pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Este") & FONTTYPE_GUILD
  1265. SendData SendTarget.toindex, UserIndex, 0, "||Castillo Oeste pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Oeste") & FONTTYPE_GUILD
  1266. End If
  1267.  
  1268. If UserList(UserIndex).flags.NoActualizado Then
  1269.     Call SendData(SendTarget.toindex, UserIndex, 0, "REAU")
  1270. End If
  1271.  
  1272. If Lloviendo Then Call SendData(SendTarget.toindex, UserIndex, 0, "LLU")
  1273.  
  1274. tStr = Guild.a_ObtenerRechazoDeChar(UserList(UserIndex).name)
  1275.  
  1276. If tStr <> vbNullString Then
  1277.     Call SendData(SendTarget.toindex, UserIndex, 0, "!!Tu solicitud de ingreso al clan ha sido rechazada. El clan te explica que: " & tStr & ENDC)
  1278. End If
  1279.  
  1280. Call SendLabels(UserIndex)
  1281. Call SendData(SendTarget.toindex, UserIndex, 0, "XY" & MapInfo(UserList(UserIndex).Pos.Map).name & " [" & UserList(UserIndex).Pos.Map & "]")
  1282. Call MostrarNumUsers
  1283.  
  1284. N = FreeFile
  1285. Open App.Path & "\logs\numusers.log" For Output As N
  1286. Print #N, NumUsers
  1287. Close #N
  1288.  
  1289. N = FreeFile
  1290. 'Log
  1291. Open App.Path & "\logs\Connect.log" For Append Shared As #N
  1292. Print #N, UserList(UserIndex).name & " ha entrado al juego. UserIndex:" & UserIndex & " " & Time & " " & Date
  1293. Close #N
  1294. ERr_HS:
  1295.  
  1296. End Sub
  1297. Sub SendLabels(UserIndex As Integer)
  1298.  
  1299. If UserList(UserIndex).Invent.AnilloEqpObjIndex Then
  1300.     Call SendData(SendTarget.toindex, UserIndex, 0, "RMX" & ObjData(UserList(UserIndex).Invent.AnilloEqpObjIndex).DefensaMagicaMin & "/" & ObjData(UserList(UserIndex).Invent.AnilloEqpObjIndex).DefensaMagicaMax)
  1301. Else
  1302.     Call SendData(SendTarget.toindex, UserIndex, 0, "RMX0/0")
  1303. End If
  1304.  
  1305. If UserList(UserIndex).Invent.ArmourEqpObjIndex Then
  1306.     Call SendData(SendTarget.toindex, UserIndex, 0, "ARM" & ObjData(UserList(UserIndex).Invent.ArmourEqpObjIndex).MinDef & "/" & ObjData(UserList(UserIndex).Invent.ArmourEqpObjIndex).MaxDef)
  1307. Else
  1308.     Call SendData(SendTarget.toindex, UserIndex, 0, "ARM0/0")
  1309. End If
  1310.  
  1311. If UserList(UserIndex).Invent.CascoEqpObjIndex Then
  1312.     Call SendData(SendTarget.toindex, UserIndex, 0, "GHX" & ObjData(UserList(UserIndex).Invent.CascoEqpObjIndex).MinDef & "/" & ObjData(UserList(UserIndex).Invent.CascoEqpObjIndex).MaxDef)
  1313. Else
  1314.     Call SendData(SendTarget.toindex, UserIndex, 0, "GHX0/0")
  1315. End If
  1316.  
  1317. If UserList(UserIndex).Invent.WeaponEqpObjIndex Then
  1318.     Call SendData(SendTarget.toindex, UserIndex, 0, "WEA" & ObjData(UserList(UserIndex).Invent.WeaponEqpObjIndex).MinHIT & "/" & ObjData(UserList(UserIndex).Invent.WeaponEqpObjIndex).MaxHIT)
  1319. Else
  1320.     Call SendData(SendTarget.toindex, UserIndex, 0, "WEA0/0")
  1321. End If
  1322.  
  1323. End Sub
  1324.  
  1325. Sub ResetFacciones(ByVal UserIndex As Integer)
  1326.     With UserList(UserIndex).Faccion
  1327.         .ArmadaReal = 0
  1328.         .FuerzasCaos = 0
  1329.         .CiudadanosMatados = 0
  1330.         .CriminalesMatados = 0
  1331.         .RecibioArmaduraCaos = 0
  1332.         .RecibioArmaduraReal = 0
  1333.         .RecibioExpInicialCaos = 0
  1334.         .RecibioExpInicialReal = 0
  1335.         .RecompensasCaos = 0
  1336.         .RecompensasReal = 0
  1337.         .Reenlistadas = 0
  1338.     End With
  1339. End Sub
  1340. Sub ResetContadores(ByVal UserIndex As Integer)
  1341.     With UserList(UserIndex).Counters
  1342.         .AGUACounter = 0
  1343.         .AttackCounter = 0
  1344.         .Ceguera = 0
  1345.         .COMCounter = 0
  1346.         .Estupidez = 0
  1347.         .Frio = 0
  1348.         .HPCounter = 0
  1349.         .IdleCount = 0
  1350.         .Invisibilidad = 0
  1351.         .Paralisis = 0
  1352.         .Pasos = 0
  1353.         .Pena = 0
  1354.         .PiqueteC = 0
  1355.         .STACounter = 0
  1356.         .Veneno = 0
  1357.         .Trabajando = 0
  1358.         .Ocultando = 0
  1359.  
  1360.         .TimerLanzarSpell = 0
  1361.         .TimerPuedeAtacar = 0
  1362.         .TimerPuedeTrabajar = 0
  1363.         .TimerUsar = 0
  1364.     End With
  1365. End Sub
  1366.  
  1367. Sub ResetCharInfo(ByVal UserIndex As Integer)
  1368. '*************************************************
  1369. 'Author: Unknown
  1370. 'Last modified: 03/15/2006
  1371. 'Resetea todos los valores generales y las stats
  1372. '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
  1373. '*************************************************
  1374.     With UserList(UserIndex).Char
  1375.         .body = 0
  1376.         .CascoAnim = 0
  1377.         .CharIndex = 0
  1378.         .FX = 0
  1379.         .Head = 0
  1380.         .loops = 0
  1381.         .heading = 0
  1382.         .loops = 0
  1383.         .ShieldAnim = 0
  1384.         .WeaponAnim = 0
  1385.     End With
  1386. End Sub
  1387.  
  1388. Sub ResetBasicUserInfo(ByVal UserIndex As Integer)
  1389. '*************************************************
  1390. 'Author: Unknown
  1391. 'Last modified: 03/15/2006
  1392. 'Resetea todos los valores generales y las stats
  1393. '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
  1394. '*************************************************
  1395.     With UserList(UserIndex)
  1396.         .name = ""
  1397.         .modName = ""
  1398.         .Password = ""
  1399.         .Desc = ""
  1400.         .DescRM = ""
  1401.         .Pos.Map = 0
  1402.         .Pos.X = 0
  1403.         .Pos.Y = 0
  1404.         .ip = ""
  1405.         .RDBuffer = ""
  1406.         .clase = ""
  1407.         .email = ""
  1408.         .genero = ""
  1409.         .Hogar = ""
  1410.         .raza = ""
  1411.  
  1412.         .RandKey = ""
  1413.         .PrevCheckSum = 0
  1414.         .PacketNumber = 0
  1415.  
  1416.         .EmpoCont = 0
  1417.         .PartyIndex = 0
  1418.         .PartySolicitud = 0
  1419.        
  1420.         With .Stats
  1421.             .Banco = 0
  1422.             .ELV = 0
  1423.             .ELU = 0
  1424.             .Exp = 0
  1425.             .def = 0
  1426.             .CriminalesMatados = 0
  1427.             .NPCsMuertos = 0
  1428.             .UsuariosMatados = 0
  1429.             .SkillPts = 0
  1430.         End With
  1431.     End With
  1432. End Sub
  1433.  
  1434. Sub ResetReputacion(ByVal UserIndex As Integer)
  1435. '*************************************************
  1436. 'Author: Unknown
  1437. 'Last modified: 03/15/2006
  1438. 'Resetea todos los valores generales y las stats
  1439. '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
  1440. '*************************************************
  1441.     With UserList(UserIndex).Reputacion
  1442.         .AsesinoRep = 0
  1443.         .BandidoRep = 0
  1444.         .BurguesRep = 0
  1445.         .LadronesRep = 0
  1446.         .NobleRep = 0
  1447.         .PlebeRep = 0
  1448.         .NobleRep = 0
  1449.         .Promedio = 0
  1450.     End With
  1451. End Sub
  1452.  
  1453. Sub ResetGuildInfo(ByVal UserIndex As Integer)
  1454.     If UserList(UserIndex).... > 0 Then
  1455.         Call Guild.GMDejaDeEscucharClan(UserIndex, UserList(UserIndex)....)
  1456.  
  1457.  
  1458.  


Estas usando un Mod Semper widia y por eso no encontras el case "OLOGIN" o "NLOGIN"



Entonces no lo puedo poner?
Zhepelin Ao
135
Aprendiz [4]
Registrado: Años de membresía
Ubicación: San Martin
Mensajes: 338

Nota » 25 Ene 2012 14:54

AngelDsm escribió:
Penyair escribió:
AngelDsm escribió:



Aca tenes te deje todo el Modulo por las dudas :P. :

  1. ption Explicit
  2.  
  3. Public TempSerial As String
  4.  
  5. Public Enum SendTarget
  6.     toindex = 0         'Envia a un solo User
  7.     ToAll = 1           'A todos los Users
  8.     ToMap = 2           'Todos los Usuarios en el mapa
  9.     ToPCArea = 3        'Todos los Users en el area de un user determinado
  10.     ToNone = 4          'Ninguno
  11.     ToAllButIndex = 5   'Todos menos el index
  12.     ToMapButIndex = 6   'Todos en el mapa menos el indice
  13.     ToGM = 7
  14.     ToNPCArea = 8       'Todos los Users en el area de un user determinado
  15.     ToGuildMembers = 9
  16.     ToAdmins = 10
  17.     ToPCAreaButIndex = 11
  18.     ToAdminsAreaButConsejeros = 12
  19.     ToDiosesYclan = 13
  20.     ToConsejo = 14
  21.     ToClanArea = 15
  22.     ToConsejoCaos = 16
  23.     ToRolesMasters = 17
  24.     ToDeadArea = 18
  25.     ToCiudadanos = 19
  26.     ToCriminales = 20
  27.     ToPartyArea = 21
  28.     ToReal = 22
  29.     ToCaos = 23
  30.     ToCiudadanosYRMs = 24
  31.     ToCriminalesYRMs = 25
  32.     ToRealYRMs = 26
  33.     ToCaosYRMs = 27
  34. End Enum
  35.  
  36. Sub DarCuerpoYCabeza(ByRef UserBody As Integer, ByRef UserHead As Integer, ByVal raza As String, ByVal Gen As String)
  37. 'TODO: Poner las heads en arrays, así se acceden por índices
  38. 'y no hay problemas de discontinuidad de los índices.
  39. 'También se debe usar enums para raza y sexo
  40. Select Case Gen
  41.    Case "Hombre"
  42.         Select Case raza
  43.             Case "Humano"
  44.                 UserHead = RandomNumber(1, 30)
  45.                 UserBody = 1
  46.             Case "Elfo"
  47.                 UserHead = RandomNumber(1, 13) + 100
  48.                 If UserHead = 113 Then UserHead = 201       'Un índice no es continuo.... :S muy feo
  49.                 UserBody = 2
  50.             Case "Elfo Oscuro"
  51.                 UserHead = RandomNumber(1, 8) + 201
  52.                 UserBody = 3
  53.             Case "Enano"
  54.                 UserHead = RandomNumber(1, 5) + 300
  55.                 UserBody = 52
  56.             Case "Gnomo"
  57.                 UserHead = RandomNumber(1, 6) + 400
  58.                 UserBody = 52
  59.             Case Else
  60.                 UserHead = 1
  61.                 UserBody = 1
  62.         End Select
  63.    Case "Mujer"
  64.         Select Case raza
  65.             Case "Humano"
  66.                 UserHead = RandomNumber(1, 7) + 69
  67.                 UserBody = 1
  68.             Case "Elfo"
  69.                 UserHead = RandomNumber(1, 7) + 169
  70.                 UserBody = 2
  71.             Case "Elfo Oscuro"
  72.                 UserHead = RandomNumber(1, 11) + 269
  73.                 UserBody = 3
  74.             Case "Gnomo"
  75.                 UserHead = RandomNumber(1, 5) + 469
  76.                 UserBody = 52
  77.             Case "Enano"
  78.                 UserHead = RandomNumber(1, 3) + 369
  79.                 UserBody = 52
  80.             Case Else
  81.                 UserHead = 70
  82.                 UserBody = 1
  83.         End Select
  84. End Select
  85.  
  86. End Sub
  87.  
  88. Function AsciiValidos(ByVal cad As String) As Boolean
  89. Dim car As Byte
  90. Dim i As Integer
  91.  
  92. cad = LCase$(cad)
  93.  
  94. For i = 1 To Len(cad)
  95.     car = Asc(mid$(cad, i, 1))
  96.    
  97.     If (car < 97 Or car > 122) And (car <> 255) And (car <> 32) Then
  98.         AsciiValidos = False
  99.         Exit Function
  100.     End If
  101.    
  102. Next i
  103.  
  104. AsciiValidos = True
  105.  
  106. End Function
  107.  
  108. Function Numeric(ByVal cad As String) As Boolean
  109. Dim car As Byte
  110. Dim i As Integer
  111.  
  112. cad = LCase$(cad)
  113.  
  114. For i = 1 To Len(cad)
  115.     car = Asc(mid$(cad, i, 1))
  116.    
  117.     If (car < 48 Or car > 57) Then
  118.         Numeric = False
  119.         Exit Function
  120.     End If
  121.    
  122. Next i
  123.  
  124. Numeric = True
  125.  
  126. End Function
  127.  
  128.  
  129. Function NombrePermitido(ByVal Nombre As String) As Boolean
  130. Dim i As Integer
  131.  
  132. For i = 1 To UBound(ForbidenNames)
  133.     If InStr(Nombre, ForbidenNames(i)) Then
  134.             NombrePermitido = False
  135.             Exit Function
  136.     End If
  137. Next i
  138.  
  139. NombrePermitido = True
  140.  
  141. End Function
  142.  
  143. Function ValidateSkills(ByVal UserIndex As Integer) As Boolean
  144.  
  145. Dim LoopC As Integer
  146.  
  147. For LoopC = 1 To NUMSKILLS
  148.     If UserList(UserIndex).Stats.UserSkills(LoopC) < 0 Then
  149.         Exit Function
  150.         If UserList(UserIndex).Stats.UserSkills(LoopC) > 100 Then UserList(UserIndex).Stats.UserSkills(LoopC) = 100
  151.     End If
  152. Next LoopC
  153.  
  154. ValidateSkills = True
  155.    
  156. End Function
  157.  
  158. Sub ConnectNewUser(UserIndex As Integer, name As String, Password As String, UserRaza As String, UserSexo As String, UserClase As String, _
  159.                     US1 As String, US2 As String, US3 As String, US4 As String, US5 As String, _
  160.                     US6 As String, US7 As String, US8 As String, US9 As String, US10 As String, _
  161.                     US11 As String, US12 As String, US13 As String, US14 As String, US15 As String, _
  162.                     US16 As String, US17 As String, US18 As String, US19 As String, US20 As String, _
  163.                     US21 As String, UserEmail As String, Hogar As String, Cuenta As String, ByVal USerial As String)
  164.  
  165. If FileExist(CharPath & name & ".swao", vbNormal) = True Then
  166.     Call SendData(SendTarget.toindex, UserIndex, 0, "INF" & "Ya existe el personaje.")
  167.     Exit Sub
  168. End If
  169.  
  170. If Not AsciiValidos(name) Then
  171.     Call SendData(SendTarget.toindex, UserIndex, 0, "ERRNombre invalido.")
  172.     Exit Sub
  173. End If
  174.  
  175. Dim LoopC As Integer
  176.  
  177. If UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = 0 Then
  178.     Call SendData(SendTarget.toindex, UserIndex, 0, "ERRDebe tirar los dados antes de poder crear un personaje.")
  179.     Exit Sub
  180. End If
  181.  
  182. UserList(UserIndex).flags.Muerto = 0
  183. UserList(UserIndex).flags.Escondido = 0
  184. UserList(UserIndex).name = name
  185. UserList(UserIndex).clase = UserClase
  186. UserList(UserIndex).raza = UserRaza
  187. UserList(UserIndex).genero = UserSexo
  188. UserList(UserIndex).email = UserEmail
  189. UserList(UserIndex).Hogar = Hogar
  190.  
  191. Select Case UCase$(UserRaza)
  192.     Case "HUMANO"
  193.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 1
  194.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 1
  195.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) + 2
  196.     Case "ELFO"
  197.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 4
  198.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 2
  199.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) + 2
  200.     Case "ELFO OSCURO"
  201.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 2
  202.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 2
  203.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 2
  204.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) - 3
  205.     Case "ENANO"
  206.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 3
  207.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) + 3
  208.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) - 6
  209.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) - 1
  210.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) - 2
  211.     Case "GNOMO"
  212.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) - 4
  213.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 3
  214.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 3
  215.         UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) + 1
  216. End Select
  217.  
  218. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza)
  219. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad)
  220. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion)
  221. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma)
  222. UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)
  223. '/columdruMysql
  224.  
  225. UserList(UserIndex).Stats.UserSkills(1) = Val(US1)
  226. UserList(UserIndex).Stats.UserSkills(2) = Val(US2)
  227. UserList(UserIndex).Stats.UserSkills(3) = Val(US3)
  228. UserList(UserIndex).Stats.UserSkills(4) = Val(US4)
  229. UserList(UserIndex).Stats.UserSkills(5) = Val(US5)
  230. UserList(UserIndex).Stats.UserSkills(6) = Val(US6)
  231. UserList(UserIndex).Stats.UserSkills(7) = Val(US7)
  232. UserList(UserIndex).Stats.UserSkills(8) = Val(US8)
  233. UserList(UserIndex).Stats.UserSkills(9) = Val(US9)
  234. UserList(UserIndex).Stats.UserSkills(10) = Val(US10)
  235. UserList(UserIndex).Stats.UserSkills(11) = Val(US11)
  236. UserList(UserIndex).Stats.UserSkills(12) = Val(US12)
  237. UserList(UserIndex).Stats.UserSkills(13) = Val(US13)
  238. UserList(UserIndex).Stats.UserSkills(14) = Val(US14)
  239. UserList(UserIndex).Stats.UserSkills(15) = Val(US15)
  240. UserList(UserIndex).Stats.UserSkills(16) = Val(US16)
  241. UserList(UserIndex).Stats.UserSkills(17) = Val(US17)
  242. UserList(UserIndex).Stats.UserSkills(18) = Val(US18)
  243. UserList(UserIndex).Stats.UserSkills(19) = Val(US19)
  244. UserList(UserIndex).Stats.UserSkills(20) = Val(US20)
  245. UserList(UserIndex).Stats.UserSkills(21) = Val(US21)
  246.  
  247. Dim Totalskpts As Integer
  248.  
  249. Totalskpts = 0
  250.  
  251. For LoopC = 1 To NUMSKILLS
  252.     Totalskpts = Totalskpts + Abs(UserList(UserIndex).Stats.UserSkills(LoopC))
  253. Next LoopC
  254.  
  255. If Totalskpts > 10 Then
  256.     Call LogHackAttemp(UserList(UserIndex).name & " intento hackear los skills.")
  257.     Call CloseSocket(UserIndex)
  258.     Exit Sub
  259. End If
  260.  
  261. UserList(UserIndex).Password = Password
  262. UserList(UserIndex).Char.heading = eHeading.SOUTH
  263.  
  264. Call DarCuerpoYCabeza(UserList(UserIndex).Char.body, UserList(UserIndex).Char.Head, UserList(UserIndex).raza, UserList(UserIndex).genero)
  265. UserList(UserIndex).OrigChar = UserList(UserIndex).Char
  266.    
  267. UserList(UserIndex).Char.WeaponAnim = NingunArma
  268. UserList(UserIndex).Char.ShieldAnim = NingunEscudo
  269. UserList(UserIndex).Char.CascoAnim = NingunCasco
  270.  
  271. UserList(UserIndex).Stats.MET = 1
  272. Dim MiInt As Long
  273. MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) \ 3)
  274.  
  275. UserList(UserIndex).Stats.MaxHP = 15 + MiInt
  276. UserList(UserIndex).Stats.MinHP = 15 + MiInt
  277.  
  278. MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) \ 6)
  279. If MiInt = 1 Then MiInt = 2
  280.  
  281. UserList(UserIndex).Stats.MaxSta = 20 * MiInt
  282. UserList(UserIndex).Stats.MinSta = 20 * MiInt
  283.  
  284.  
  285. UserList(UserIndex).Stats.MaxAGU = 100
  286. UserList(UserIndex).Stats.MinAGU = 100
  287.  
  288. UserList(UserIndex).Stats.MaxHam = 100
  289. UserList(UserIndex).Stats.MinHam = 100
  290.  
  291.  
  292. '<-----------------MANA----------------------->
  293. If UCase$(UserClase) = "MAGO" Then
  294.     MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)) / 3
  295.     UserList(UserIndex).Stats.MaxMAN = 100 + MiInt
  296.     UserList(UserIndex).Stats.MinMAN = 100 + MiInt
  297. ElseIf UCase$(UserClase) = "CLERIGO" Or UCase$(UserClase) = "DRUIDA" _
  298.     Or UCase$(UserClase) = "BARDO" Or UCase$(UserClase) = "ASESINO" Then
  299.         MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)) / 4
  300.         UserList(UserIndex).Stats.MaxMAN = 50
  301.         UserList(UserIndex).Stats.MinMAN = 50
  302. Else
  303.     UserList(UserIndex).Stats.MaxMAN = 0
  304.     UserList(UserIndex).Stats.MinMAN = 0
  305. End If
  306.  
  307. If UCase$(UserClase) = "MAGO" Or UCase$(UserClase) = "CLERIGO" Or _
  308.    UCase$(UserClase) = "DRUIDA" Or UCase$(UserClase) = "BARDO" Or _
  309.    UCase$(UserClase) = "ASESINO" Or UCase$(UserClase) = "PALADIN" Then
  310.         UserList(UserIndex).Stats.UserHechizos(1) = 2
  311. End If
  312.  
  313. UserList(UserIndex).Stats.MaxHIT = 2
  314. UserList(UserIndex).Stats.MinHIT = 1
  315.  
  316. UserList(UserIndex).Stats.GLD = 0
  317.  
  318. UserList(UserIndex).Stats.Exp = 0
  319. UserList(UserIndex).Stats.ELU = 300
  320. UserList(UserIndex).Stats.ELV = 1
  321.  
  322. UserList(UserIndex).Invent.NroItems = 4
  323.  
  324. UserList(UserIndex).Invent.Object(1).ObjIndex = 467
  325. UserList(UserIndex).Invent.Object(1).Amount = 100
  326.  
  327. UserList(UserIndex).Invent.Object(2).ObjIndex = 468
  328. UserList(UserIndex).Invent.Object(2).Amount = 100
  329. UserList(UserIndex).Ranking.DuelosGanados = 0
  330. UserList(UserIndex).Ranking.DuelosParejaGanados = 0
  331. UserList(UserIndex).Ranking.MaxRondasDesafio = 0
  332. UserList(UserIndex).Ranking.TorneosGanados = 0
  333. UserList(UserIndex).Invent.Object(3).ObjIndex = 460
  334. UserList(UserIndex).Invent.Object(3).Amount = 1
  335. UserList(UserIndex).Invent.Object(3).Equipped = 1
  336.  
  337. If UCase$(UserClase) = "MAGO" Or UCase$(UserClase) = "BARDO" Or _
  338. UCase$(UserClase) = "PALADIN" Or UCase$(UserClase) = "DRUIDA" Or UCase$(UserClase) = "CLERIGO" Then
  339.  
  340. UserList(UserIndex).Invent.Object(5).ObjIndex = 461 'POTA ROJA
  341. UserList(UserIndex).Invent.Object(5).Amount = 150
  342. UserList(UserIndex).Invent.Object(6).ObjIndex = 975 'POTA AZUL
  343. UserList(UserIndex).Invent.Object(6).Amount = 150
  344.  
  345. Else
  346.  
  347. UserList(UserIndex).Invent.Object(5).ObjIndex = 461 'POTA ROJA
  348. UserList(UserIndex).Invent.Object(5).Amount = 150
  349.  
  350. End If
  351.  
  352. If Not UCase$(UserClase) = "MAGO" Then
  353.  
  354. UserList(UserIndex).Invent.Object(7).ObjIndex = 462 'POTA VERDE
  355. UserList(UserIndex).Invent.Object(7).Amount = 150
  356. UserList(UserIndex).Invent.Object(8).ObjIndex = 1078 'POTA AMARILLA
  357. UserList(UserIndex).Invent.Object(8).Amount = 150
  358.  
  359. End If
  360.  
  361.  
  362. Select Case UserRaza
  363.     Case "Humano"
  364.         UserList(UserIndex).Invent.Object(4).ObjIndex = 463
  365.     Case "Elfo"
  366.         UserList(UserIndex).Invent.Object(4).ObjIndex = 464
  367.     Case "Elfo Oscuro"
  368.         UserList(UserIndex).Invent.Object(4).ObjIndex = 465
  369.     Case "Enano"
  370.         UserList(UserIndex).Invent.Object(4).ObjIndex = 466
  371.     Case "Gnomo"
  372.         UserList(UserIndex).Invent.Object(4).ObjIndex = 466
  373. End Select
  374.  
  375. UserList(UserIndex).Invent.Object(4).Amount = 1
  376. UserList(UserIndex).Invent.Object(4).Equipped = 1
  377.  
  378. UserList(UserIndex).Invent.Object(9).ObjIndex = 41
  379. UserList(UserIndex).Invent.Object(9).Amount = 1
  380.  
  381. UserList(UserIndex).Invent.ArmourEqpSlot = 4
  382. UserList(UserIndex).Invent.ArmourEqpObjIndex = UserList(UserIndex).Invent.Object(4).ObjIndex
  383.  
  384. UserList(UserIndex).Invent.WeaponEqpObjIndex = UserList(UserIndex).Invent.Object(3).ObjIndex
  385. UserList(UserIndex).Invent.WeaponEqpSlot = 3
  386. UserList(UserIndex).Stats.TPoints = 0
  387. UserList(UserIndex).FaccionNumber = 2
  388. UserList(UserIndex).flags.Caballero = 0
  389. UserList(UserIndex).flags.IsMaxLevel = False
  390. UserList(UserIndex).Char.Account = Cuenta
  391. Call AddPjCuenta(Cuenta, name)
  392. Call DB_SaveCharacter(UserIndex, name)
  393. Call ConnectUser(UserIndex, name, Password, USerial, Cuenta)
  394. Call SendData(SendTarget.toindex, UserIndex, 0, "CUD" & (1 + 1) & "," & name & "," & UserList(UserIndex).Char.body & "," & UserList(UserIndex).Char.Head)
  395. End Sub
  396. Sub CloseSocket(ByVal UserIndex As Integer)
  397.  
  398. On Error GoTo errhandler
  399.    
  400.     If UserIndex = LastUser Then
  401.         Do Until UserList(LastUser).flags.UserLogged
  402.             LastUser = LastUser - 1
  403.             If LastUser < 1 Then Exit Do
  404.         Loop
  405.     End If
  406.    
  407.     If UserList(UserIndex).ConnID <> -1 Then
  408.         Call CloseSocketSL(UserIndex)
  409.     End If
  410.    
  411.     If UserList(UserIndex).ComUsu.DestUsu > 0 Then
  412.         If UserList(UserList(UserIndex).ComUsu.DestUsu).flags.UserLogged Then
  413.             If UserList(UserList(UserIndex).ComUsu.DestUsu).ComUsu.DestUsu = UserIndex Then
  414.                 Call SendData(SendTarget.toindex, UserList(UserIndex).ComUsu.DestUsu, 0, "||Comercio cancelado por el otro usuario" & FONTTYPE_TALK)
  415.                 Call FinComerciarUsu(UserList(UserIndex).ComUsu.DestUsu)
  416.             End If
  417.         End If
  418.     End If
  419.    
  420.      If UserList(UserIndex).flags.Teleports.Creado = True Then
  421.         UserList(UserIndex).flags.Teleports.Creado = False
  422.        
  423.         Call EraseObj(SendTarget.ToMap, 0, UserList(UserIndex).Pos.Map, 1, UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY)
  424.        
  425.         MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.Map = 0
  426.         MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.X = 0
  427.         MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.Y = 0
  428.    
  429.         UserList(UserIndex).flags.Teleports.tMap = 0
  430.         UserList(UserIndex).flags.Teleports.TimeCount = 0
  431.         UserList(UserIndex).flags.Teleports.tX = 0
  432.         UserList(UserIndex).flags.Teleports.tY = 0
  433.         UserList(UserIndex).flags.Teleports.Creado = False
  434.        
  435.     End If
  436.      
  437.     If UserList(UserIndex).flags.UserLogged Then
  438.         If NumUsers > 0 Then NumUsers = NumUsers - 1
  439.         Call CloseUser(UserIndex)
  440.        
  441.     Else
  442.         Call ResetUserSlot(UserIndex)
  443.     End If
  444.    
  445.     UserList(UserIndex).ConnID = -1
  446.     UserList(UserIndex).ConnIDValida = False
  447.     UserList(UserIndex).NumeroPaquetesPorMiliSec = 0
  448.    
  449. Exit Sub
  450.  
  451. errhandler:
  452.     UserList(UserIndex).ConnID = -1
  453.     UserList(UserIndex).ConnIDValida = False
  454.     UserList(UserIndex).NumeroPaquetesPorMiliSec = 0
  455.     Call ResetUserSlot(UserIndex)
  456.  
  457.     Call LogError("CloseSocket - Error = " & Err.Number & " - Descripción = " & Err.Description & " - UserIndex = " & UserIndex)
  458. End Sub
  459.  
  460. Sub CloseSocketSL(ByVal UserIndex As Integer)
  461.  
  462. If UserList(UserIndex).ConnID <> -1 And UserList(UserIndex).ConnIDValida Then
  463.     Call BorraSlotSock(UserList(UserIndex).ConnID)
  464.     Call WSApiCloseSocket(UserList(UserIndex).ConnID)
  465.     UserList(UserIndex).ConnIDValida = False
  466. End If
  467. End Sub
  468.  
  469. Public Function EnviarDatosASlot(ByVal UserIndex As Integer, Datos As String) As Long
  470.  
  471.     On Error GoTo Err
  472.    
  473.     Dim Ret As Long
  474.        
  475.     Ret = WsApiEnviar(UserIndex, Datos)
  476.    
  477.     If Ret <> 0 And Ret <> WSAEWOULDBLOCK Then
  478.         Call CloseSocketSL(UserIndex)
  479.         Call Cerrar_Usuario(UserIndex)
  480.     End If
  481.     EnviarDatosASlot = Ret
  482.     Exit Function
  483.    
  484. Err:
  485.         'If MainView.SUPERLOG.Value = 1 Then LogCustom ("EnviarDatosASlot:: ERR Handler. userindex=" & UserIndex & " datos=" & Datos & " UL?/CId/CIdV?=" & UserList(UserIndex).flags.UserLogged & "/" & UserList(UserIndex).ConnID & "/" & UserList(UserIndex).ConnIDValida & " ERR: " & Err.Description)
  486. End Function
  487.  
  488. Public Function EnviarDatosASlot2(ByVal UserIndex As Integer, Datos As String) As Long
  489.  
  490. #If UsarQueSocket = 1 Then
  491.     On Error GoTo Err
  492.    
  493.     Dim Ret As Long
  494.    
  495.    
  496.    
  497.     Ret = WsApiEnviar(UserIndex, Datos)
  498.    
  499.     If Ret <> 0 And Ret <> WSAEWOULDBLOCK Then
  500.         Call CloseSocketSL(UserIndex)
  501.         Call Cerrar_Usuario(UserIndex)
  502.     End If
  503.     EnviarDatosASlot2 = Ret
  504.     Exit Function
  505.    
  506. Err:
  507.         'If MainView.SUPERLOG.Value = 1 Then LogCustom ("EnviarDatosASlot:: ERR Handler. userindex=" & UserIndex & " datos=" & Datos & " UL?/CId/CIdV?=" & UserList(UserIndex).flags.UserLogged & "/" & UserList(UserIndex).ConnID & "/" & UserList(UserIndex).ConnIDValida & " ERR: " & Err.Description)
  508.  
  509. #ElseIf UsarQueSocket = 0 Then '**********************************************
  510.  
  511.     Dim Encolar As Boolean
  512.     Encolar = False
  513.    
  514.     EnviarDatosASlot2 = 0
  515.    
  516.     If UserList(UserIndex).ColaSalida.Count <= 0 Then
  517.         If MainView.Socket2(UserIndex).Write(Datos, Len(Datos)) < 0 Then
  518.             If MainView.Socket2(UserIndex).LastError = WSAEWOULDBLOCK Then
  519.                 UserList(UserIndex).SockPuedoEnviar = False
  520.                 Encolar = True
  521.             Else
  522.                 Call Cerrar_Usuario(UserIndex)
  523.             End If
  524.         End If
  525.     Else
  526.         Encolar = True
  527.     End If
  528.    
  529.     If Encolar Then
  530.         Debug.Print "Encolando..."
  531.         UserList(UserIndex).ColaSalida.Add Datos
  532.     End If
  533.  
  534. #ElseIf UsarQueSocket = 2 Then '**********************************************
  535.  
  536. Dim Encolar As Boolean
  537. Dim Ret As Long
  538.    
  539.     Encolar = False
  540.    
  541.     '//
  542.     '// Valores de retorno:
  543.     '//                     0: Todo OK
  544.     '//                     1: WSAEWOULDBLOCK
  545.     '//                     2: Error critico
  546.     '//
  547.     If UserList(UserIndex).ColaSalida.Count <= 0 Then
  548.         Ret = MainView.Serv.Enviar(UserList(UserIndex).ConnID, Datos, Len(Datos))
  549.         If Ret = 1 Then
  550.             Encolar = True
  551.         ElseIf Ret = 2 Then
  552.             Call CloseSocketSL(UserIndex)
  553.             Call Cerrar_Usuario(UserIndex)
  554.         End If
  555.     Else
  556.         Encolar = True
  557.     End If
  558.    
  559.     If Encolar Then
  560.         Debug.Print "Encolando..."
  561.         UserList(UserIndex).ColaSalida.Add Datos
  562.     End If
  563. #End If '**********************************************
  564.  
  565. End Function
  566.  
  567. Sub SendData(ByVal sndRoute As SendTarget, ByVal sndIndex As Integer, ByVal sndMap As Integer, ByVal sndData As String)
  568.  
  569. On Error Resume Next
  570.  
  571. Dim LoopC As Integer
  572. Dim X As Integer
  573. Dim Y As Integer
  574.  
  575. If sndData <> "BUENO" Then
  576. sndData = Security.Security.NSC_Encryption(sndData, Security.Keys(1))
  577. End If
  578. sndData = sndData & ENDC
  579.  
  580. Select Case sndRoute
  581.  
  582.     Case SendTarget.ToPCArea
  583.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  584.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  585.                If InMapBounds(X, Y) Then
  586.                     If MapData(sndMap, X, Y).UserIndex > 0 Then
  587.                        If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  588.                             Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  589.                        End If
  590.                     End If
  591.                End If
  592.             Next X
  593.         Next Y
  594.         Exit Sub
  595.    
  596.     Case SendTarget.toindex
  597.         If UserList(sndIndex).ConnID <> -1 Then
  598.             Call EnviarDatosASlot(sndIndex, sndData)
  599.             Exit Sub
  600.         End If
  601.  
  602.  
  603.     Case SendTarget.ToNone
  604.         Exit Sub
  605.        
  606.        
  607.     Case SendTarget.ToAdmins
  608.         For LoopC = 1 To LastUser
  609.             If UserList(LoopC).ConnID <> -1 Then
  610.                 If UserList(LoopC).flags.Privilegios > 0 Then
  611.                     Call EnviarDatosASlot(LoopC, sndData)
  612.                End If
  613.             End If
  614.         Next LoopC
  615.         Exit Sub
  616.        
  617.     Case SendTarget.ToAll
  618.         For LoopC = 1 To LastUser
  619.             If UserList(LoopC).ConnID <> -1 Then
  620.                 If UserList(LoopC).flags.UserLogged Then 'Esta logeado como usuario?
  621.                     Call EnviarDatosASlot(LoopC, sndData)
  622.                 End If
  623.             End If
  624.         Next LoopC
  625.         Exit Sub
  626.    
  627.     Case SendTarget.ToAllButIndex
  628.         For LoopC = 1 To LastUser
  629.             If (UserList(LoopC).ConnID <> -1) And (LoopC <> sndIndex) Then
  630.                 If UserList(LoopC).flags.UserLogged Then 'Esta logeado como usuario?
  631.                     Call EnviarDatosASlot(LoopC, sndData)
  632.                 End If
  633.             End If
  634.         Next LoopC
  635.         Exit Sub
  636.    
  637.     Case SendTarget.ToMap
  638.         For LoopC = 1 To LastUser
  639.             If (UserList(LoopC).ConnID <> -1) Then
  640.                 If UserList(LoopC).flags.UserLogged Then
  641.                     If UserList(LoopC).Pos.Map = sndMap Then
  642.                         Call EnviarDatosASlot(LoopC, sndData)
  643.                     End If
  644.                 End If
  645.             End If
  646.         Next LoopC
  647.         Exit Sub
  648.      
  649.     Case SendTarget.ToMapButIndex
  650.         For LoopC = 1 To LastUser
  651.             If (UserList(LoopC).ConnID <> -1) And LoopC <> sndIndex Then
  652.                 If UserList(LoopC).Pos.Map = sndMap Then
  653.                     Call EnviarDatosASlot(LoopC, sndData)
  654.                 End If
  655.             End If
  656.         Next LoopC
  657.         Exit Sub
  658.            
  659.     Case SendTarget.ToGuildMembers
  660.        
  661.         LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
  662.         While LoopC > 0
  663.             If (UserList(LoopC).ConnID <> -1) Then
  664.                 Call EnviarDatosASlot(LoopC, sndData)
  665.             End If
  666.             LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
  667.         Wend
  668.        
  669.         Exit Sub
  670.  
  671.  
  672.     Case SendTarget.ToDeadArea
  673.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  674.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  675.                If InMapBounds(X, Y) Then
  676.                     If MapData(sndMap, X, Y).UserIndex > 0 Then
  677.                         If UserList(MapData(sndMap, X, Y).UserIndex).flags.Muerto = 1 Or UserList(MapData(sndMap, X, Y).UserIndex).flags.Privilegios >= 1 Then
  678.                            If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  679.                                 Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  680.                            End If
  681.                         End If
  682.                     End If
  683.                End If
  684.             Next X
  685.         Next Y
  686.         Exit Sub
  687.  
  688.     '[Alejo-18-5]
  689.     Case SendTarget.ToPCAreaButIndex
  690.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  691.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  692.                If InMapBounds(X, Y) Then
  693.                     If (MapData(sndMap, X, Y).UserIndex > 0) And (MapData(sndMap, X, Y).UserIndex <> sndIndex) Then
  694.                        If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  695.                             Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  696.                        End If
  697.                     End If
  698.                End If
  699.             Next X
  700.         Next Y
  701.         Exit Sub
  702.        
  703.     Case SendTarget.ToClanArea
  704.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  705.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  706.                If InMapBounds(X, Y) Then
  707.                     If (MapData(sndMap, X, Y).UserIndex > 0) Then
  708.                         If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  709.                             If UserList(sndIndex).GuildIndex > 0 And UserList(MapData(sndMap, X, Y).UserIndex).GuildIndex = UserList(sndIndex).GuildIndex Then
  710.                                 Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  711.                             End If
  712.                         End If
  713.                     End If
  714.                End If
  715.             Next X
  716.         Next Y
  717.         Exit Sub
  718.  
  719.  
  720.  
  721.     Case SendTarget.ToPartyArea
  722.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  723.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  724.                If InMapBounds(X, Y) Then
  725.                     If (MapData(sndMap, X, Y).UserIndex > 0) Then
  726.                         If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  727.                             If UserList(sndIndex).PartyIndex > 0 And UserList(MapData(sndMap, X, Y).UserIndex).PartyIndex = UserList(sndIndex).PartyIndex Then
  728.                                 Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  729.                             End If
  730.                         End If
  731.                     End If
  732.                End If
  733.             Next X
  734.         Next Y
  735.         Exit Sub
  736.        
  737.     '[CDT 17-02-2004]
  738.     Case SendTarget.ToAdminsAreaButConsejeros
  739.         For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
  740.             For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
  741.                If InMapBounds(X, Y) Then
  742.                     If (MapData(sndMap, X, Y).UserIndex > 0) And (MapData(sndMap, X, Y).UserIndex <> sndIndex) Then
  743.                        If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  744.                             If UserList(MapData(sndMap, X, Y).UserIndex).flags.Privilegios > 1 Then
  745.                                 Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  746.                             End If
  747.                        End If
  748.                     End If
  749.                End If
  750.             Next X
  751.         Next Y
  752.         Exit Sub
  753.     '[/CDT]
  754.  
  755.     Case SendTarget.ToNPCArea
  756.         For Y = Npclist(sndIndex).Pos.Y - MinYBorder + 1 To Npclist(sndIndex).Pos.Y + MinYBorder - 1
  757.             For X = Npclist(sndIndex).Pos.X - MinXBorder + 1 To Npclist(sndIndex).Pos.X + MinXBorder - 1
  758.                If InMapBounds(X, Y) Then
  759.                     If MapData(sndMap, X, Y).UserIndex > 0 Then
  760.                        If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
  761.                             Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
  762.                        End If
  763.                     End If
  764.                End If
  765.             Next X
  766.         Next Y
  767.         Exit Sub
  768.  
  769.     Case SendTarget.ToDiosesYclan
  770.         LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
  771.         While LoopC > 0
  772.             If (UserList(LoopC).ConnID <> -1) Then
  773.                 Call EnviarDatosASlot(LoopC, sndData)
  774.             End If
  775.             LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
  776.         Wend
  777.  
  778.         LoopC = Guild.Iterador_ProximoGM(sndIndex)
  779.         While LoopC > 0
  780.             If (UserList(LoopC).ConnID <> -1) Then
  781.                 Call EnviarDatosASlot(LoopC, sndData)
  782.             End If
  783.             LoopC = Guild.Iterador_ProximoGM(sndIndex)
  784.         Wend
  785.  
  786.         Exit Sub
  787.  
  788.     Case SendTarget.ToConsejo
  789.         For LoopC = 1 To LastUser
  790.             If (UserList(LoopC).ConnID <> -1) Then
  791.                 If UserList(LoopC).flags.PertAlCons > 0 Then
  792.                     Call EnviarDatosASlot(LoopC, sndData)
  793.                 End If
  794.             End If
  795.         Next LoopC
  796.         Exit Sub
  797.     Case SendTarget.ToConsejoCaos
  798.         For LoopC = 1 To LastUser
  799.             If (UserList(LoopC).ConnID <> -1) Then
  800.                 If UserList(LoopC).flags.PertAlConsCaos > 0 Then
  801.                     Call EnviarDatosASlot(LoopC, sndData)
  802.                 End If
  803.             End If
  804.         Next LoopC
  805.         Exit Sub
  806.     Case SendTarget.ToRolesMasters
  807.         For LoopC = 1 To LastUser
  808.             If (UserList(LoopC).ConnID <> -1) Then
  809.                 If UserList(LoopC).flags.EsRolesMaster Then
  810.                     Call EnviarDatosASlot(LoopC, sndData)
  811.                 End If
  812.             End If
  813.         Next LoopC
  814.         Exit Sub
  815.    
  816.     Case SendTarget.ToCiudadanos
  817.         For LoopC = 1 To LastUser
  818.             If (UserList(LoopC).ConnID <> -1) Then
  819.                 If Not criminal(LoopC) Then
  820.                     Call EnviarDatosASlot(LoopC, sndData)
  821.                 End If
  822.             End If
  823.         Next LoopC
  824.         Exit Sub
  825.    
  826.     Case SendTarget.ToCriminales
  827.         For LoopC = 1 To LastUser
  828.             If (UserList(LoopC).ConnID <> -1) Then
  829.                 If criminal(LoopC) Then
  830.                     Call EnviarDatosASlot(LoopC, sndData)
  831.                 End If
  832.             End If
  833.         Next LoopC
  834.         Exit Sub
  835.    
  836.     Case SendTarget.ToReal
  837.         For LoopC = 1 To LastUser
  838.             If (UserList(LoopC).ConnID <> -1) Then
  839.                 If UserList(LoopC).Faccion.ArmadaReal = 1 Then
  840.                     Call EnviarDatosASlot(LoopC, sndData)
  841.                 End If
  842.             End If
  843.         Next LoopC
  844.         Exit Sub
  845.    
  846.     Case SendTarget.ToCaos
  847.         For LoopC = 1 To LastUser
  848.             If (UserList(LoopC).ConnID <> -1) Then
  849.                 If UserList(LoopC).Faccion.FuerzasCaos = 1 Then
  850.                     Call EnviarDatosASlot(LoopC, sndData)
  851.                 End If
  852.             End If
  853.         Next LoopC
  854.         Exit Sub
  855.        
  856.     Case ToCiudadanosYRMs
  857.         For LoopC = 1 To LastUser
  858.             If (UserList(LoopC).ConnID <> -1) Then
  859.                 If Not criminal(LoopC) Or UserList(LoopC).flags.EsRolesMaster Then
  860.                     Call EnviarDatosASlot(LoopC, sndData)
  861.                 End If
  862.             End If
  863.         Next LoopC
  864.         Exit Sub
  865.    
  866.     Case ToCriminalesYRMs
  867.         For LoopC = 1 To LastUser
  868.             If (UserList(LoopC).ConnID <> -1) Then
  869.                 If criminal(LoopC) Or UserList(LoopC).flags.EsRolesMaster Then
  870.                     Call EnviarDatosASlot(LoopC, sndData)
  871.                 End If
  872.             End If
  873.         Next LoopC
  874.         Exit Sub
  875.    
  876.     Case ToRealYRMs
  877.         For LoopC = 1 To LastUser
  878.             If (UserList(LoopC).ConnID <> -1) Then
  879.                 If UserList(LoopC).Faccion.ArmadaReal = 1 Or UserList(LoopC).flags.EsRolesMaster Then
  880.                     Call EnviarDatosASlot(LoopC, sndData)
  881.                 End If
  882.             End If
  883.         Next LoopC
  884.         Exit Sub
  885.    
  886.     Case ToCaosYRMs
  887.         For LoopC = 1 To LastUser
  888.             If (UserList(LoopC).ConnID <> -1) Then
  889.                 If UserList(LoopC).Faccion.FuerzasCaos = 1 Or UserList(LoopC).flags.EsRolesMaster Then
  890.                     Call EnviarDatosASlot(LoopC, sndData)
  891.                 End If
  892.             End If
  893.         Next LoopC
  894.         Exit Sub
  895. End Select
  896.  
  897. End Sub
  898.  
  899. Sub SendData2(ByVal sndRoute As SendTarget, ByVal sndIndex As Integer, ByVal sndData As String)
  900.  
  901. On Error Resume Next
  902.  
  903. sndData = sndData & ENDC
  904.  
  905. Select Case sndRoute
  906.     Case SendTarget.toindex
  907.         If UserList(sndIndex).ConnID <> -1 Then
  908.              Call EnviarDatosASlot2(sndIndex, sndData)
  909.              Exit Sub
  910.         End If
  911.    
  912. End Select
  913. End Sub
  914. Function EstaPCarea(Index As Integer, Index2 As Integer) As Boolean
  915.  
  916.  
  917. Dim X As Integer, Y As Integer
  918. For Y = UserList(Index).Pos.Y - MinYBorder + 1 To UserList(Index).Pos.Y + MinYBorder - 1
  919.         For X = UserList(Index).Pos.X - MinXBorder + 1 To UserList(Index).Pos.X + MinXBorder - 1
  920.  
  921.             If MapData(UserList(Index).Pos.Map, X, Y).UserIndex = Index2 Then
  922.                 EstaPCarea = True
  923.                 Exit Function
  924.             End If
  925.        
  926.         Next X
  927. Next Y
  928. EstaPCarea = False
  929. End Function
  930.  
  931. Function HayPCarea(Pos As WorldPos) As Boolean
  932.  
  933.  
  934. Dim X As Integer, Y As Integer
  935. For Y = Pos.Y - MinYBorder + 1 To Pos.Y + MinYBorder - 1
  936.         For X = Pos.X - MinXBorder + 1 To Pos.X + MinXBorder - 1
  937.             If X > 0 And Y > 0 And X < 101 And Y < 101 Then
  938.                 If MapData(Pos.Map, X, Y).UserIndex > 0 Then
  939.                     HayPCarea = True
  940.                     Exit Function
  941.                End If
  942.             End If
  943.         Next X
  944. Next Y
  945. HayPCarea = False
  946. End Function
  947.  
  948. Function HayOBJarea(Pos As WorldPos, ObjIndex As Integer) As Boolean
  949.  
  950.  
  951. Dim X As Integer, Y As Integer
  952. For Y = Pos.Y - MinYBorder + 1 To Pos.Y + MinYBorder - 1
  953.         For X = Pos.X - MinXBorder + 1 To Pos.X + MinXBorder - 1
  954.             If MapData(Pos.Map, X, Y).ObjInfo.ObjIndex = ObjIndex Then
  955.                 HayOBJarea = True
  956.                 Exit Function
  957.             End If
  958.        
  959.         Next X
  960. Next Y
  961. HayOBJarea = False
  962. End Function
  963.  
  964. Function ValidateChr(ByVal UserIndex As Integer) As Boolean
  965.  
  966. ValidateChr = UserList(UserIndex).Char.Head <> 0 _
  967.                 And UserList(UserIndex).Char.body <> 0 _
  968.                 And ValidateSkills(UserIndex)
  969.  
  970. End Function
  971.  
  972. Sub ConnectUser(ByVal UserIndex As Integer, name As String, Password As String, ByVal UserSerial As String, Cuenta As String)
  973. Dim N As Integer
  974. Dim tStr As String
  975. On Error GoTo ERr_HS
  976. UserList(UserIndex).flags.Escondido = 0
  977. UserList(UserIndex).flags.Guerra = False
  978. Call SendData(SendTarget.toindex, UserIndex, 0, "|G0")
  979. UserList(UserIndex).flags.TargetNPC = 0
  980. UserList(UserIndex).flags.TargetNpcTipo = eNPCType.Comun
  981. UserList(UserIndex).flags.TargetObj = 0
  982. UserList(UserIndex).flags.TargetUser = 0
  983. UserList(UserIndex).Char.FX = 0
  984. UserList(UserIndex).SerialIndex = UserSerial
  985. UserList(UserIndex).flags.SeguItems = True
  986.  
  987. If NumUsers >= MaxUsers Then
  988.     Call SendData(SendTarget.toindex, UserIndex, 0, "ERREl servidor ha alcanzado el maximo de usuarios soportado, por favor vuelva a intertarlo mas tarde.")
  989.     Call CloseSocket(UserIndex)
  990.     Exit Sub
  991. End If
  992.  
  993. If AllowMultiLogins = 0 Then
  994.     If CheckForSameIP(UserIndex, UserList(UserIndex).ip) = True Then
  995.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERRNo es posible usar mas de un personaje al mismo tiempo.")
  996.         Call CloseSocket(UserIndex)
  997.         Exit Sub
  998.     End If
  999. End If
  1000.  
  1001. Call SendData(SendTarget.toindex, UserIndex, 0, "CUALIPC" & UserList(UserIndex).ip)
  1002.  
  1003. Dim j As Integer
  1004.  
  1005.  
  1006.  
  1007. If CheckForSameName(name) Then
  1008.     If UserList(NameIndex(name)).Counters.Saliendo Then
  1009.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERREl usuario está saliendo.")
  1010.     Else
  1011.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERRPerdon, un usuario con el mismo nombre se há logoeado.")
  1012.     End If
  1013.     Call CloseSocket(UserIndex)
  1014.     Exit Sub
  1015. End If
  1016.  
  1017. Call DB_LoadCharacter(UserIndex, name)
  1018.  
  1019. If Not ValidateChr(UserIndex) Then
  1020.     Call SendData(SendTarget.toindex, UserIndex, 0, "!!Hubo un error al cargar tu personaje, informa esto en nuestros foros http://www.swforos.com/foro/.)
  1021.     Call CloseSocket(UserIndex)
  1022.     Exit Sub
  1023. End If
  1024.  
  1025. If UserList(UserIndex).flags.Ban Then
  1026. Call SendData(SendTarget.toindex, UserIndex, 0, "ERREste personaje se encuentra bajo una suspención, para tenér mas información, visitá http://www.swforos.com.ar/")
  1027. CloseSocket (UserIndex)
  1028. Exit Sub
  1029. End If
  1030.  
  1031. If UserList(UserIndex).Invent.EscudoEqpSlot = 0 Then UserList(UserIndex).Char.ShieldAnim = NingunEscudo
  1032. If UserList(UserIndex).Invent.CascoEqpSlot = 0 Then UserList(UserIndex).Char.CascoAnim = NingunCasco
  1033. If UserList(UserIndex).Invent.WeaponEqpSlot = 0 Then UserList(UserIndex).Char.WeaponAnim = NingunArma
  1034.  
  1035.  
  1036. Call UpdateUserInv(True, UserIndex, 0)
  1037. Call UpdateUserHechizos(True, UserIndex, 0)
  1038.  
  1039. If UserList(UserIndex).flags.Navegando = 1 Then
  1040.      UserList(UserIndex).Char.body = ObjData(UserList(UserIndex).Invent.BarcoObjIndex).Ropaje
  1041.      UserList(UserIndex).Char.Head = 0
  1042.      UserList(UserIndex).Char.WeaponAnim = NingunArma
  1043.      UserList(UserIndex).Char.ShieldAnim = NingunEscudo
  1044.      UserList(UserIndex).Char.CascoAnim = NingunCasco
  1045. End If
  1046.     If UserList(UserIndex).flags.Montando = 1 Then
  1047.          UserList(UserIndex).Char.body = ObjData(UserList(UserIndex).Invent.MonturaObjIndex).Ropaje
  1048.          UserList(UserIndex).Char.Head = UserList(UserIndex).OrigChar.Head
  1049.          UserList(UserIndex).Char.WeaponAnim = NingunArma
  1050.          UserList(UserIndex).Char.ShieldAnim = NingunEscudo
  1051.          UserList(UserIndex).Char.CascoAnim = UserList(UserIndex).Char.CascoAnim
  1052.     End If
  1053. If UserList(UserIndex).flags.Paralizado Then
  1054. #If SeguridadAlkon Then
  1055.     If EncriptarProtocolosCriticos Then
  1056.         Call SendCryptedData(SendTarget.toindex, UserIndex, 0, "PARADOK")
  1057.         Call SendData(SendTarget.toindex, UserIndex, 0, "PU" & UserList(UserIndex).Pos.X & "," & UserList(UserIndex).Pos.Y)
  1058.     Else
  1059. #End If
  1060.         Call SendData(SendTarget.toindex, UserIndex, 0, "PARADOK")
  1061.         Call SendData(SendTarget.toindex, UserIndex, 0, "PU" & UserList(UserIndex).Pos.X & "," & UserList(UserIndex).Pos.Y)
  1062. #If SeguridadAlkon Then
  1063.     End If
  1064. #End If
  1065. End If
  1066.  
  1067. 'Feo, esto tiene que ser parche cliente
  1068. If UserList(UserIndex).flags.Estupidez = 0 Then Call SendData(SendTarget.toindex, UserIndex, 0, "NESTUP")
  1069. '
  1070.  
  1071. 'Posicion de comienzo
  1072. If UserList(UserIndex).Pos.Map = 0 Then
  1073.              UserList(UserIndex).Pos.Map = 60
  1074.              UserList(UserIndex).Pos.X = 45
  1075.              UserList(UserIndex).Pos.Y = 55
  1076. Else
  1077.  
  1078. If Not MapaValido(UserList(UserIndex).Pos.Map) Then
  1079.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERREL PJ se encuenta en un mapa invalido.")
  1080.         Call CloseSocket(UserIndex)
  1081.         Exit Sub
  1082.     End If
  1083.    ''TELEFRAG
  1084.     If MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex <> 0 Then
  1085.         ''si estaba en comercio seguro...
  1086.         If UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu > 0 Then
  1087.             If UserList(UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu).flags.UserLogged Then
  1088.                 Call FinComerciarUsu(UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu)
  1089.                 Call SendData(SendTarget.toindex, UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu, 0, "||Comercio cancelado. El otro usuario se ha desconectado." & FONTTYPE_TALK)
  1090.             End If
  1091.             If UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).flags.UserLogged Then
  1092.                 Call FinComerciarUsu(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex)
  1093.                 Call SendData(SendTarget.toindex, MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex, 0, "ERRAlguien se ha conectado donde te encontrabas, por favor reconéctate...")
  1094.             End If
  1095.         End If
  1096.         Call CloseSocket(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex)
  1097.     End If
  1098.    
  1099.    
  1100.     If UserList(UserIndex).flags.Muerto = 1 Then
  1101.         Call Empollando(UserIndex)
  1102.     End If
  1103. End If
  1104.  
  1105. 'Nombre de sistema
  1106. UserList(UserIndex).name = name
  1107.  
  1108. UserList(UserIndex).Password = Password
  1109.  
  1110. UserList(UserIndex).showName = True 'Por default los nombres son visibles
  1111.  
  1112.  
  1113. Call SendData(SendTarget.toindex, UserIndex, 0, "IU" & UserIndex) 'Enviamos el User index
  1114. Call SendData(SendTarget.toindex, UserIndex, 0, "CM" & UserList(UserIndex).Pos.Map & "," & MapInfo(UserList(UserIndex).Pos.Map).MapVersion) 'Carga el mapa
  1115. Call SendData(SendTarget.toindex, UserIndex, 0, "TM" & MapInfo(UserList(UserIndex).Pos.Map).Music)
  1116.  
  1117. 'Vemos que clase de user es (se lo usa para setear los privilegios alcrear el PJ)
  1118. UserList(UserIndex).flags.EsRolesMaster = EsRolesMaster(name)
  1119. If EsEventM(name) Then
  1120.     UserList(UserIndex).flags.Privilegios = PlayerType.Dios
  1121.     UserList(UserIndex).flags.Rango = 6
  1122.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1123. ElseIf EsDirector(name) Then
  1124.     UserList(UserIndex).flags.Privilegios = PlayerType.DirectorGM
  1125.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1126. ElseIf EsAdmin(name) Then
  1127.     UserList(UserIndex).flags.Privilegios = PlayerType.Admin
  1128.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1129. ElseIf EsDios(name) Then
  1130.     UserList(UserIndex).flags.Privilegios = PlayerType.Dios
  1131.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1132. ElseIf EsSemiDios(name) Then
  1133.     UserList(UserIndex).flags.Privilegios = PlayerType.SemiDios
  1134.     UserList(UserIndex).flags.Rango = 2
  1135.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
  1136. ElseIf EsConsejero(name) Then
  1137.     UserList(UserIndex).flags.Privilegios = PlayerType.SemiDios ' le doi los privilegios del semi ;)
  1138.     UserList(UserIndex).flags.Rango = 1
  1139.     Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, True)
  1140. Else
  1141.     UserList(UserIndex).flags.Privilegios = PlayerType.User
  1142. End If
  1143.  
  1144. ''[EL OSO]: TRAIGO ESTO ACA ARRIBA PARA DARLE EL IP!
  1145. UserList(UserIndex).Counters.IdleCount = 0
  1146. Call MakeUserChar(SendTarget.ToMap, 0, UserList(UserIndex).Pos.Map, UserIndex, UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y)
  1147. Call SendData(SendTarget.toindex, UserIndex, 0, "IP" & UserList(UserIndex).Char.CharIndex)
  1148. Call SendUserStatsBox(UserIndex)
  1149.  
  1150. Call EnviarHambreYsed(UserIndex)
  1151.  
  1152. If haciendoBK Then
  1153.     Call SendData(SendTarget.toindex, UserIndex, 0, "BKW")
  1154.     Call SendData(SendTarget.toindex, UserIndex, 0, "||Servidor> Por favor espera algunos segundos, WorldSave esta ejecutandose." & FONTTYPE_SERVER)
  1155. End If
  1156.  
  1157. If EnPausa Then
  1158.     Call SendData(SendTarget.toindex, UserIndex, 0, "BKW")
  1159.     Call SendData(SendTarget.toindex, UserIndex, 0, "||Servidor> Lo sentimos mucho pero el servidor se encuentra actualmente detenido. Intenta ingresar más tarde." & FONTTYPE_SERVER)
  1160. End If
  1161.  
  1162. If EnTesting And UserList(UserIndex).Stats.ELV >= 18 Then
  1163.     Call SendData(SendTarget.toindex, UserIndex, 0, "ERRServidor en Testing por unos minutos, conectese con PJs de nivel menor a 18. No se conecte con Pjs que puedan resultar importantes por ahora pues pueden arruinarse.")
  1164.     Call CloseSocket(UserIndex)
  1165.     Exit Sub
  1166. End If
  1167.  
  1168. NumUsers = NumUsers + 1
  1169. UserList(UserIndex).flags.UserLogged = True
  1170.  
  1171. MapInfo(UserList(UserIndex).Pos.Map).NumUsers = MapInfo(UserList(UserIndex).Pos.Map).NumUsers + 1
  1172.  
  1173. If UserList(UserIndex).Stats.SkillPts > 0 Then
  1174.     Call EnviarSkills(UserIndex)
  1175.     Call EnviarSubirNivel(UserIndex, UserList(UserIndex).Stats.SkillPts)
  1176. End If
  1177.  
  1178. If NumUsers > DayStats.MaxUsuarios Then DayStats.MaxUsuarios = NumUsers
  1179.  
  1180. If NumUsers > recordusuarios Then
  1181.     Call SendData(SendTarget.ToAll, 0, 0, "||Record de usuarios conectados simultaniamente." & "Hay " & NumUsers & " usuarios." & "~240~240~50~1~0")
  1182.     recordusuarios = NumUsers
  1183.     Call WriteVar(IniPath & "Config.bin", "INIT", "Record", str(recordusuarios))
  1184. End If
  1185.  
  1186. Dim i As Integer
  1187.  
  1188. If UserList(UserIndex).NroMacotas > 0 Then
  1189.     For i = 1 To MAXMASCOTAS
  1190.         If UserList(UserIndex).MascotasType(i) > 0 Then
  1191.             UserList(UserIndex).MascotasIndex(i) = SpawnNpc(UserList(UserIndex).MascotasType(i), UserList(UserIndex).Pos, True, True)
  1192.            
  1193.             If UserList(UserIndex).MascotasIndex(i) > 0 Then
  1194.                 Npclist(UserList(UserIndex).MascotasIndex(i)).MaestroUser = UserIndex
  1195.                 Call FollowAmo(UserList(UserIndex).MascotasIndex(i))
  1196.             Else
  1197.                 UserList(UserIndex).MascotasIndex(i) = 0
  1198.             End If
  1199.         End If
  1200.     Next i
  1201. End If
  1202.  
  1203. If UserList(UserIndex).flags.Navegando = 1 Then Call SendData(SendTarget.toindex, UserIndex, 0, "NAVEG")
  1204.     If UserList(UserIndex).flags.Montando = 1 Then Call SendData(SendTarget.toindex, UserIndex, 0, "EQUIT")
  1205.  
  1206. If ServerSoloGMs > 0 Then
  1207.     If UserList(UserIndex).flags.Privilegios < ServerSoloGMs Then
  1208.         Call SendData(SendTarget.toindex, UserIndex, 0, "ERRServidor restringido a administradores de jerarquia mayor o igual a: " & ServerSoloGMs & ". Por favor intente en unos momentos.")
  1209.         Call CloseSocket(UserIndex)
  1210.         Exit Sub
  1211.     End If
  1212. End If
  1213.  
  1214. If UserList(UserIndex).GuildIndex > 0 Then
  1215.     'welcome to the show baby...
  1216.     If Not Guild.m_ConectarMiembroAClan(UserIndex, UserList(UserIndex).GuildIndex) Then
  1217.         Call SendData(SendTarget.toindex, UserIndex, 0, "||Tu estado no te permite entrar al clan." & FONTTYPE_GUILD)
  1218.     End If
  1219. End If
  1220.  
  1221. Call SendData(SendTarget.ToPCArea, UserIndex, UserList(UserIndex).Pos.Map, "CFX" & UserList(UserIndex).Char.CharIndex & "," & FXIDs.FXWARP & "," & 0)
  1222.  
  1223. Call SendData(SendTarget.toindex, UserIndex, 0, "LOGGED")
  1224.  
  1225. UserList(UserIndex).Char.Account = Cuenta
  1226. Call Guild.SendGuildNews(UserIndex)
  1227.  
  1228. Dim fPath As String
  1229.  
  1230. fPath = App.Path & "/don/" & UserList(UserIndex).name
  1231.  
  1232. If FileExist(fPath) Then
  1233.     Call SendData(SendTarget.toindex, UserIndex, 0, "||Gracias por ayudár al servidor, tu donación fue procesada, para recibír tus premios, escribe /DONE " & GetVar(fPath, "Init", "Codigo") & "." & FONTTYPE_GUILD)
  1234. End If
  1235.  
  1236. If UserList(UserIndex).GuildIndex > 0 Then
  1237.     SendData SendTarget.toindex, UserIndex, 0, "||El seguro de CvC se encuentra activado." & "~0~128~0~1~0"
  1238.     UserList(UserIndex).flags.SeguroCvc = True
  1239. End If
  1240.  
  1241. If UserList(UserIndex).flags.MP = False Then
  1242.     SendData SendTarget.toindex, UserIndex, 0, "||Los mensajes privados se encuentran activados." & FONTTYPE_INFO
  1243. Else
  1244.     SendData SendTarget.toindex, UserIndex, 0, "||Los mensajes privados se encuentran desactivados." & FONTTYPE_INFO
  1245. End If
  1246.  
  1247. If UserList(UserIndex).Faccion.RecompensasReal = 4 Then
  1248. UserList(UserIndex).flags.EsCuartaJerarquia = True
  1249. End If
  1250.  
  1251. If HayDesafio = False Then
  1252. UserList(UserIndex).flags.YaParticipoDesafio = 0
  1253. UserList(UserIndex).flags.UltiDesafiante = vbNullString
  1254. Else
  1255. If UserList(UserCreaDesafio).name <> UserList(UserIndex).flags.UltiDesafiante Then
  1256. UserList(UserIndex).flags.UltiDesafiante = vbNullString
  1257. UserList(UserIndex).flags.YaParticipoDesafio = 0
  1258. End If
  1259. End If
  1260.  
  1261. If UserList(UserIndex).GuildIndex > 0 Then
  1262. SendData SendTarget.toindex, UserIndex, 0, "||Castillo Norte pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Norte") & FONTTYPE_GUILD
  1263. SendData SendTarget.toindex, UserIndex, 0, "||Castillo Sur pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Sur") & FONTTYPE_GUILD
  1264. SendData SendTarget.toindex, UserIndex, 0, "||Castillo Este pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Este") & FONTTYPE_GUILD
  1265. SendData SendTarget.toindex, UserIndex, 0, "||Castillo Oeste pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Oeste") & FONTTYPE_GUILD
  1266. End If
  1267.  
  1268. If UserList(UserIndex).flags.NoActualizado Then
  1269.     Call SendData(SendTarget.toindex, UserIndex, 0, "REAU")
  1270. End If
  1271.  
  1272. If Lloviendo Then Call SendData(SendTarget.toindex, UserIndex, 0, "LLU")
  1273.  
  1274. tStr = Guild.a_ObtenerRechazoDeChar(UserList(UserIndex).name)
  1275.  
  1276. If tStr <> vbNullString Then
  1277.     Call SendData(SendTarget.toindex, UserIndex, 0, "!!Tu solicitud de ingreso al clan ha sido rechazada. El clan te explica que: " & tStr & ENDC)
  1278. End If
  1279.  
  1280. Call SendLabels(UserIndex)
  1281. Call SendData(SendTarget.toindex, UserIndex, 0, "XY" & MapInfo(UserList(UserIndex).Pos.Map).name & " [" & UserList(UserIndex).Pos.Map & "]")
  1282. Call MostrarNumUsers
  1283.  
  1284. N = FreeFile
  1285. Open App.Path & "\logs\numusers.log" For Output As N
  1286. Print #N, NumUsers
  1287. Close #N
  1288.  
  1289. N = FreeFile
  1290. 'Log
  1291. Open App.Path & "\logs\Connect.log" For Append Shared As #N
  1292. Print #N, UserList(UserIndex).name & " ha entrado al juego. UserIndex:" & UserIndex & " " & Time & " " & Date
  1293. Close #N
  1294. ERr_HS:
  1295.  
  1296. End Sub
  1297. Sub SendLabels(UserIndex As Integer)
  1298.  
  1299. If UserList(UserIndex).Invent.AnilloEqpObjIndex Then
  1300.     Call SendData(SendTarget.toindex, UserIndex, 0, "RMX" & ObjData(UserList(UserIndex).Invent.AnilloEqpObjIndex).DefensaMagicaMin & "/" & ObjData(UserList(UserIndex).Invent.AnilloEqpObjIndex).DefensaMagicaMax)
  1301. Else
  1302.     Call SendData(SendTarget.toindex, UserIndex, 0, "RMX0/0")
  1303. End If
  1304.  
  1305. If UserList(UserIndex).Invent.ArmourEqpObjIndex Then
  1306.     Call SendData(SendTarget.toindex, UserIndex, 0, "ARM" & ObjData(UserList(UserIndex).Invent.ArmourEqpObjIndex).MinDef & "/" & ObjData(UserList(UserIndex).Invent.ArmourEqpObjIndex).MaxDef)
  1307. Else
  1308.     Call SendData(SendTarget.toindex, UserIndex, 0, "ARM0/0")
  1309. End If
  1310.  
  1311. If UserList(UserIndex).Invent.CascoEqpObjIndex Then
  1312.     Call SendData(SendTarget.toindex, UserIndex, 0, "GHX" & ObjData(UserList(UserIndex).Invent.CascoEqpObjIndex).MinDef & "/" & ObjData(UserList(UserIndex).Invent.CascoEqpObjIndex).MaxDef)
  1313. Else
  1314.     Call SendData(SendTarget.toindex, UserIndex, 0, "GHX0/0")
  1315. End If
  1316.  
  1317. If UserList(UserIndex).Invent.WeaponEqpObjIndex Then
  1318.     Call SendData(SendTarget.toindex, UserIndex, 0, "WEA" & ObjData(UserList(UserIndex).Invent.WeaponEqpObjIndex).MinHIT & "/" & ObjData(UserList(UserIndex).Invent.WeaponEqpObjIndex).MaxHIT)
  1319. Else
  1320.     Call SendData(SendTarget.toindex, UserIndex, 0, "WEA0/0")
  1321. End If
  1322.  
  1323. End Sub
  1324.  
  1325. Sub ResetFacciones(ByVal UserIndex As Integer)
  1326.     With UserList(UserIndex).Faccion
  1327.         .ArmadaReal = 0
  1328.         .FuerzasCaos = 0
  1329.         .CiudadanosMatados = 0
  1330.         .CriminalesMatados = 0
  1331.         .RecibioArmaduraCaos = 0
  1332.         .RecibioArmaduraReal = 0
  1333.         .RecibioExpInicialCaos = 0
  1334.         .RecibioExpInicialReal = 0
  1335.         .RecompensasCaos = 0
  1336.         .RecompensasReal = 0
  1337.         .Reenlistadas = 0
  1338.     End With
  1339. End Sub
  1340. Sub ResetContadores(ByVal UserIndex As Integer)
  1341.     With UserList(UserIndex).Counters
  1342.         .AGUACounter = 0
  1343.         .AttackCounter = 0
  1344.         .Ceguera = 0
  1345.         .COMCounter = 0
  1346.         .Estupidez = 0
  1347.         .Frio = 0
  1348.         .HPCounter = 0
  1349.         .IdleCount = 0
  1350.         .Invisibilidad = 0
  1351.         .Paralisis = 0
  1352.         .Pasos = 0
  1353.         .Pena = 0
  1354.         .PiqueteC = 0
  1355.         .STACounter = 0
  1356.         .Veneno = 0
  1357.         .Trabajando = 0
  1358.         .Ocultando = 0
  1359.  
  1360.         .TimerLanzarSpell = 0
  1361.         .TimerPuedeAtacar = 0
  1362.         .TimerPuedeTrabajar = 0
  1363.         .TimerUsar = 0
  1364.     End With
  1365. End Sub
  1366.  
  1367. Sub ResetCharInfo(ByVal UserIndex As Integer)
  1368. '*************************************************
  1369. 'Author: Unknown
  1370. 'Last modified: 03/15/2006
  1371. 'Resetea todos los valores generales y las stats
  1372. '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
  1373. '*************************************************
  1374.     With UserList(UserIndex).Char
  1375.         .body = 0
  1376.         .CascoAnim = 0
  1377.         .CharIndex = 0
  1378.         .FX = 0
  1379.         .Head = 0
  1380.         .loops = 0
  1381.         .heading = 0
  1382.         .loops = 0
  1383.         .ShieldAnim = 0
  1384.         .WeaponAnim = 0
  1385.     End With
  1386. End Sub
  1387.  
  1388. Sub ResetBasicUserInfo(ByVal UserIndex As Integer)
  1389. '*************************************************
  1390. 'Author: Unknown
  1391. 'Last modified: 03/15/2006
  1392. 'Resetea todos los valores generales y las stats
  1393. '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
  1394. '*************************************************
  1395.     With UserList(UserIndex)
  1396.         .name = ""
  1397.         .modName = ""
  1398.         .Password = ""
  1399.         .Desc = ""
  1400.         .DescRM = ""
  1401.         .Pos.Map = 0
  1402.         .Pos.X = 0
  1403.         .Pos.Y = 0
  1404.         .ip = ""
  1405.         .RDBuffer = ""
  1406.         .clase = ""
  1407.         .email = ""
  1408.         .genero = ""
  1409.         .Hogar = ""
  1410.         .raza = ""
  1411.  
  1412.         .RandKey = ""
  1413.         .PrevCheckSum = 0
  1414.         .PacketNumber = 0
  1415.  
  1416.         .EmpoCont = 0
  1417.         .PartyIndex = 0
  1418.         .PartySolicitud = 0
  1419.        
  1420.         With .Stats
  1421.             .Banco = 0
  1422.             .ELV = 0
  1423.             .ELU = 0
  1424.             .Exp = 0
  1425.             .def = 0
  1426.             .CriminalesMatados = 0
  1427.             .NPCsMuertos = 0
  1428.             .UsuariosMatados = 0
  1429.             .SkillPts = 0
  1430.         End With
  1431.     End With
  1432. End Sub
  1433.  
  1434. Sub ResetReputacion(ByVal UserIndex As Integer)
  1435. '*************************************************
  1436. 'Author: Unknown
  1437. 'Last modified: 03/15/2006
  1438. 'Resetea todos los valores generales y las stats
  1439. '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
  1440. '*************************************************
  1441.     With UserList(UserIndex).Reputacion
  1442.         .AsesinoRep = 0
  1443.         .BandidoRep = 0
  1444.         .BurguesRep = 0
  1445.         .LadronesRep = 0
  1446.         .NobleRep = 0
  1447.         .PlebeRep = 0
  1448.         .NobleRep = 0
  1449.         .Promedio = 0
  1450.     End With
  1451. End Sub
  1452.  
  1453. Sub ResetGuildInfo(ByVal UserIndex As Integer)
  1454.     If UserList(UserIndex).... > 0 Then
  1455.         Call Guild.GMDejaDeEscucharClan(UserIndex, UserList(UserIndex)....)
  1456.  
  1457.  
  1458.  
  1459.  


Estas usando un Mod Semper widia y por eso no encontras el case "OLOGIN" o "NLOGIN"



Entonces no lo puedo poner?


Buscá Lojjin, ;) y en el Servidor busca NLOGIN que seguro te aparecen :P

SALUDOS!!

Imagen

Ilaisa
<Aprendiendo a Programar>
227
Newbie [4]
Registrado: Diciembre 2011
Mensajes: 128

Nota » 25 Ene 2012 16:07

Ilaisa escribió:
AngelDsm escribió:
Penyair escribió:
Estas usando un Mod Semper widia y por eso no encontras el case "OLOGIN" o "NLOGIN"



Entonces no lo puedo poner?


Buscá Lojjin, ;) y en el Servidor busca NLOGIN que seguro te aparecen :P

SALUDOS!!



Nada :S.
Zhepelin Ao
135
Aprendiz [4]
Registrado: Años de membresía
Ubicación: San Martin
Mensajes: 338

Nota » 25 Ene 2012 17:08

Pone para buscar "Sub Login" y seguramente abajo te aparesca.

~ Si te critican sentite superior a ellos, sabiendo que te tienen envidia ~
<-Ó.Ó->
194
Newbie [4]
Registrado: Años de membresía
Mensajes: 103

Anterior

Volver a AO 0.11.5

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados