
Moderadores: Moderadores de Argentum, Especialistas de Argentum, Especialistas de Programación
135![Aprendiz [4] Aprendiz [4]](./images/ranks/Rango9.gif)
AngelDsm escribió:Hola no tengo el case OLOGIN ni NLOGIN,Uso Semper Widia alguna ayuda?.
889![Dragon Ancestral [5] Dragon Ancestral [5]](./images/ranks/Rango34.gif)
miqueas150 escribió:AngelDsm escribió:Hola no tengo el case OLOGIN ni NLOGIN,Uso Semper Widia alguna ayuda?.
Em postea la primer parte del modulo TCP
135![Aprendiz [4] Aprendiz [4]](./images/ranks/Rango9.gif)
889![Dragon Ancestral [5] Dragon Ancestral [5]](./images/ranks/Rango34.gif)
miqueas150 escribió:dije tpceso si noo la flasheo es el mod usuarios o algo asi
135![Aprendiz [4] Aprendiz [4]](./images/ranks/Rango9.gif)
AngelDsm escribió:miqueas150 escribió:AngelDsm escribió:Hola no tengo el case OLOGIN ni NLOGIN,Uso Semper Widia alguna ayuda?.
Em postea la primer parte del modulo TCP
Aca tenes te deje todo el Modulo por las dudas. :
- ption Explicit
- Public TempSerial As String
- Public Enum SendTarget
- toindex = 0 'Envia a un solo User
- ToAll = 1 'A todos los Users
- ToMap = 2 'Todos los Usuarios en el mapa
- ToPCArea = 3 'Todos los Users en el area de un user determinado
- ToNone = 4 'Ninguno
- ToAllButIndex = 5 'Todos menos el index
- ToMapButIndex = 6 'Todos en el mapa menos el indice
- ToGM = 7
- ToNPCArea = 8 'Todos los Users en el area de un user determinado
- ToGuildMembers = 9
- ToAdmins = 10
- ToPCAreaButIndex = 11
- ToAdminsAreaButConsejeros = 12
- ToDiosesYclan = 13
- ToConsejo = 14
- ToClanArea = 15
- ToConsejoCaos = 16
- ToRolesMasters = 17
- ToDeadArea = 18
- ToCiudadanos = 19
- ToCriminales = 20
- ToPartyArea = 21
- ToReal = 22
- ToCaos = 23
- ToCiudadanosYRMs = 24
- ToCriminalesYRMs = 25
- ToRealYRMs = 26
- ToCaosYRMs = 27
- End Enum
- Sub DarCuerpoYCabeza(ByRef UserBody As Integer, ByRef UserHead As Integer, ByVal raza As String, ByVal Gen As String)
- 'TODO: Poner las heads en arrays, así se acceden por índices
- 'y no hay problemas de discontinuidad de los índices.
- 'También se debe usar enums para raza y sexo
- Select Case Gen
- Case "Hombre"
- Select Case raza
- Case "Humano"
- UserHead = RandomNumber(1, 30)
- UserBody = 1
- Case "Elfo"
- UserHead = RandomNumber(1, 13) + 100
- If UserHead = 113 Then UserHead = 201 'Un índice no es continuo.... :S muy feo
- UserBody = 2
- Case "Elfo Oscuro"
- UserHead = RandomNumber(1, 8) + 201
- UserBody = 3
- Case "Enano"
- UserHead = RandomNumber(1, 5) + 300
- UserBody = 52
- Case "Gnomo"
- UserHead = RandomNumber(1, 6) + 400
- UserBody = 52
- Case Else
- UserHead = 1
- UserBody = 1
- End Select
- Case "Mujer"
- Select Case raza
- Case "Humano"
- UserHead = RandomNumber(1, 7) + 69
- UserBody = 1
- Case "Elfo"
- UserHead = RandomNumber(1, 7) + 169
- UserBody = 2
- Case "Elfo Oscuro"
- UserHead = RandomNumber(1, 11) + 269
- UserBody = 3
- Case "Gnomo"
- UserHead = RandomNumber(1, 5) + 469
- UserBody = 52
- Case "Enano"
- UserHead = RandomNumber(1, 3) + 369
- UserBody = 52
- Case Else
- UserHead = 70
- UserBody = 1
- End Select
- End Select
- End Sub
- Function AsciiValidos(ByVal cad As String) As Boolean
- Dim car As Byte
- Dim i As Integer
- cad = LCase$(cad)
- For i = 1 To Len(cad)
- car = Asc(mid$(cad, i, 1))
- If (car < 97 Or car > 122) And (car <> 255) And (car <> 32) Then
- AsciiValidos = False
- Exit Function
- End If
- Next i
- AsciiValidos = True
- End Function
- Function Numeric(ByVal cad As String) As Boolean
- Dim car As Byte
- Dim i As Integer
- cad = LCase$(cad)
- For i = 1 To Len(cad)
- car = Asc(mid$(cad, i, 1))
- If (car < 48 Or car > 57) Then
- Numeric = False
- Exit Function
- End If
- Next i
- Numeric = True
- End Function
- Function NombrePermitido(ByVal Nombre As String) As Boolean
- Dim i As Integer
- For i = 1 To UBound(ForbidenNames)
- If InStr(Nombre, ForbidenNames(i)) Then
- NombrePermitido = False
- Exit Function
- End If
- Next i
- NombrePermitido = True
- End Function
- Function ValidateSkills(ByVal UserIndex As Integer) As Boolean
- Dim LoopC As Integer
- For LoopC = 1 To NUMSKILLS
- If UserList(UserIndex).Stats.UserSkills(LoopC) < 0 Then
- Exit Function
- If UserList(UserIndex).Stats.UserSkills(LoopC) > 100 Then UserList(UserIndex).Stats.UserSkills(LoopC) = 100
- End If
- Next LoopC
- ValidateSkills = True
- End Function
- Sub ConnectNewUser(UserIndex As Integer, name As String, Password As String, UserRaza As String, UserSexo As String, UserClase As String, _
- US1 As String, US2 As String, US3 As String, US4 As String, US5 As String, _
- US6 As String, US7 As String, US8 As String, US9 As String, US10 As String, _
- US11 As String, US12 As String, US13 As String, US14 As String, US15 As String, _
- US16 As String, US17 As String, US18 As String, US19 As String, US20 As String, _
- US21 As String, UserEmail As String, Hogar As String, Cuenta As String, ByVal USerial As String)
- If FileExist(CharPath & name & ".swao", vbNormal) = True Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "INF" & "Ya existe el personaje.")
- Exit Sub
- End If
- If Not AsciiValidos(name) Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERRNombre invalido.")
- Exit Sub
- End If
- Dim LoopC As Integer
- If UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = 0 Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERRDebe tirar los dados antes de poder crear un personaje.")
- Exit Sub
- End If
- UserList(UserIndex).flags.Muerto = 0
- UserList(UserIndex).flags.Escondido = 0
- UserList(UserIndex).name = name
- UserList(UserIndex).clase = UserClase
- UserList(UserIndex).raza = UserRaza
- UserList(UserIndex).genero = UserSexo
- UserList(UserIndex).email = UserEmail
- UserList(UserIndex).Hogar = Hogar
- Select Case UCase$(UserRaza)
- Case "HUMANO"
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 1
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 1
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) + 2
- Case "ELFO"
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 4
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 2
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) + 2
- Case "ELFO OSCURO"
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 2
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 2
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 2
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) - 3
- Case "ENANO"
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 3
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) + 3
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) - 6
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) - 1
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) - 2
- Case "GNOMO"
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) - 4
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 3
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 3
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) + 1
- End Select
- UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza)
- UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad)
- UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion)
- UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma)
- UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)
- '/columdruMysql
- UserList(UserIndex).Stats.UserSkills(1) = Val(US1)
- UserList(UserIndex).Stats.UserSkills(2) = Val(US2)
- UserList(UserIndex).Stats.UserSkills(3) = Val(US3)
- UserList(UserIndex).Stats.UserSkills(4) = Val(US4)
- UserList(UserIndex).Stats.UserSkills(5) = Val(US5)
- UserList(UserIndex).Stats.UserSkills(6) = Val(US6)
- UserList(UserIndex).Stats.UserSkills(7) = Val(US7)
- UserList(UserIndex).Stats.UserSkills(8) = Val(US8)
- UserList(UserIndex).Stats.UserSkills(9) = Val(US9)
- UserList(UserIndex).Stats.UserSkills(10) = Val(US10)
- UserList(UserIndex).Stats.UserSkills(11) = Val(US11)
- UserList(UserIndex).Stats.UserSkills(12) = Val(US12)
- UserList(UserIndex).Stats.UserSkills(13) = Val(US13)
- UserList(UserIndex).Stats.UserSkills(14) = Val(US14)
- UserList(UserIndex).Stats.UserSkills(15) = Val(US15)
- UserList(UserIndex).Stats.UserSkills(16) = Val(US16)
- UserList(UserIndex).Stats.UserSkills(17) = Val(US17)
- UserList(UserIndex).Stats.UserSkills(18) = Val(US18)
- UserList(UserIndex).Stats.UserSkills(19) = Val(US19)
- UserList(UserIndex).Stats.UserSkills(20) = Val(US20)
- UserList(UserIndex).Stats.UserSkills(21) = Val(US21)
- Dim Totalskpts As Integer
- Totalskpts = 0
- For LoopC = 1 To NUMSKILLS
- Totalskpts = Totalskpts + Abs(UserList(UserIndex).Stats.UserSkills(LoopC))
- Next LoopC
- If Totalskpts > 10 Then
- Call LogHackAttemp(UserList(UserIndex).name & " intento hackear los skills.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- UserList(UserIndex).Password = Password
- UserList(UserIndex).Char.heading = eHeading.SOUTH
- Call DarCuerpoYCabeza(UserList(UserIndex).Char.body, UserList(UserIndex).Char.Head, UserList(UserIndex).raza, UserList(UserIndex).genero)
- UserList(UserIndex).OrigChar = UserList(UserIndex).Char
- UserList(UserIndex).Char.WeaponAnim = NingunArma
- UserList(UserIndex).Char.ShieldAnim = NingunEscudo
- UserList(UserIndex).Char.CascoAnim = NingunCasco
- UserList(UserIndex).Stats.MET = 1
- Dim MiInt As Long
- MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) \ 3)
- UserList(UserIndex).Stats.MaxHP = 15 + MiInt
- UserList(UserIndex).Stats.MinHP = 15 + MiInt
- MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) \ 6)
- If MiInt = 1 Then MiInt = 2
- UserList(UserIndex).Stats.MaxSta = 20 * MiInt
- UserList(UserIndex).Stats.MinSta = 20 * MiInt
- UserList(UserIndex).Stats.MaxAGU = 100
- UserList(UserIndex).Stats.MinAGU = 100
- UserList(UserIndex).Stats.MaxHam = 100
- UserList(UserIndex).Stats.MinHam = 100
- '<-----------------MANA----------------------->
- If UCase$(UserClase) = "MAGO" Then
- MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)) / 3
- UserList(UserIndex).Stats.MaxMAN = 100 + MiInt
- UserList(UserIndex).Stats.MinMAN = 100 + MiInt
- ElseIf UCase$(UserClase) = "CLERIGO" Or UCase$(UserClase) = "DRUIDA" _
- Or UCase$(UserClase) = "BARDO" Or UCase$(UserClase) = "ASESINO" Then
- MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)) / 4
- UserList(UserIndex).Stats.MaxMAN = 50
- UserList(UserIndex).Stats.MinMAN = 50
- Else
- UserList(UserIndex).Stats.MaxMAN = 0
- UserList(UserIndex).Stats.MinMAN = 0
- End If
- If UCase$(UserClase) = "MAGO" Or UCase$(UserClase) = "CLERIGO" Or _
- UCase$(UserClase) = "DRUIDA" Or UCase$(UserClase) = "BARDO" Or _
- UCase$(UserClase) = "ASESINO" Or UCase$(UserClase) = "PALADIN" Then
- UserList(UserIndex).Stats.UserHechizos(1) = 2
- End If
- UserList(UserIndex).Stats.MaxHIT = 2
- UserList(UserIndex).Stats.MinHIT = 1
- UserList(UserIndex).Stats.GLD = 0
- UserList(UserIndex).Stats.Exp = 0
- UserList(UserIndex).Stats.ELU = 300
- UserList(UserIndex).Stats.ELV = 1
- UserList(UserIndex).Invent.NroItems = 4
- UserList(UserIndex).Invent.Object(1).ObjIndex = 467
- UserList(UserIndex).Invent.Object(1).Amount = 100
- UserList(UserIndex).Invent.Object(2).ObjIndex = 468
- UserList(UserIndex).Invent.Object(2).Amount = 100
- UserList(UserIndex).Ranking.DuelosGanados = 0
- UserList(UserIndex).Ranking.DuelosParejaGanados = 0
- UserList(UserIndex).Ranking.MaxRondasDesafio = 0
- UserList(UserIndex).Ranking.TorneosGanados = 0
- UserList(UserIndex).Invent.Object(3).ObjIndex = 460
- UserList(UserIndex).Invent.Object(3).Amount = 1
- UserList(UserIndex).Invent.Object(3).Equipped = 1
- If UCase$(UserClase) = "MAGO" Or UCase$(UserClase) = "BARDO" Or _
- UCase$(UserClase) = "PALADIN" Or UCase$(UserClase) = "DRUIDA" Or UCase$(UserClase) = "CLERIGO" Then
- UserList(UserIndex).Invent.Object(5).ObjIndex = 461 'POTA ROJA
- UserList(UserIndex).Invent.Object(5).Amount = 150
- UserList(UserIndex).Invent.Object(6).ObjIndex = 975 'POTA AZUL
- UserList(UserIndex).Invent.Object(6).Amount = 150
- Else
- UserList(UserIndex).Invent.Object(5).ObjIndex = 461 'POTA ROJA
- UserList(UserIndex).Invent.Object(5).Amount = 150
- End If
- If Not UCase$(UserClase) = "MAGO" Then
- UserList(UserIndex).Invent.Object(7).ObjIndex = 462 'POTA VERDE
- UserList(UserIndex).Invent.Object(7).Amount = 150
- UserList(UserIndex).Invent.Object(8).ObjIndex = 1078 'POTA AMARILLA
- UserList(UserIndex).Invent.Object(8).Amount = 150
- End If
- Select Case UserRaza
- Case "Humano"
- UserList(UserIndex).Invent.Object(4).ObjIndex = 463
- Case "Elfo"
- UserList(UserIndex).Invent.Object(4).ObjIndex = 464
- Case "Elfo Oscuro"
- UserList(UserIndex).Invent.Object(4).ObjIndex = 465
- Case "Enano"
- UserList(UserIndex).Invent.Object(4).ObjIndex = 466
- Case "Gnomo"
- UserList(UserIndex).Invent.Object(4).ObjIndex = 466
- End Select
- UserList(UserIndex).Invent.Object(4).Amount = 1
- UserList(UserIndex).Invent.Object(4).Equipped = 1
- UserList(UserIndex).Invent.Object(9).ObjIndex = 41
- UserList(UserIndex).Invent.Object(9).Amount = 1
- UserList(UserIndex).Invent.ArmourEqpSlot = 4
- UserList(UserIndex).Invent.ArmourEqpObjIndex = UserList(UserIndex).Invent.Object(4).ObjIndex
- UserList(UserIndex).Invent.WeaponEqpObjIndex = UserList(UserIndex).Invent.Object(3).ObjIndex
- UserList(UserIndex).Invent.WeaponEqpSlot = 3
- UserList(UserIndex).Stats.TPoints = 0
- UserList(UserIndex).FaccionNumber = 2
- UserList(UserIndex).flags.Caballero = 0
- UserList(UserIndex).flags.IsMaxLevel = False
- UserList(UserIndex).Char.Account = Cuenta
- Call AddPjCuenta(Cuenta, name)
- Call DB_SaveCharacter(UserIndex, name)
- Call ConnectUser(UserIndex, name, Password, USerial, Cuenta)
- Call SendData(SendTarget.toindex, UserIndex, 0, "CUD" & (1 + 1) & "," & name & "," & UserList(UserIndex).Char.body & "," & UserList(UserIndex).Char.Head)
- End Sub
- Sub CloseSocket(ByVal UserIndex As Integer)
- On Error GoTo errhandler
- If UserIndex = LastUser Then
- Do Until UserList(LastUser).flags.UserLogged
- LastUser = LastUser - 1
- If LastUser < 1 Then Exit Do
- Loop
- End If
- If UserList(UserIndex).ConnID <> -1 Then
- Call CloseSocketSL(UserIndex)
- End If
- If UserList(UserIndex).ComUsu.DestUsu > 0 Then
- If UserList(UserList(UserIndex).ComUsu.DestUsu).flags.UserLogged Then
- If UserList(UserList(UserIndex).ComUsu.DestUsu).ComUsu.DestUsu = UserIndex Then
- Call SendData(SendTarget.toindex, UserList(UserIndex).ComUsu.DestUsu, 0, "||Comercio cancelado por el otro usuario" & FONTTYPE_TALK)
- Call FinComerciarUsu(UserList(UserIndex).ComUsu.DestUsu)
- End If
- End If
- End If
- If UserList(UserIndex).flags.Teleports.Creado = True Then
- UserList(UserIndex).flags.Teleports.Creado = False
- 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)
- MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.Map = 0
- MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.X = 0
- MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.Y = 0
- UserList(UserIndex).flags.Teleports.tMap = 0
- UserList(UserIndex).flags.Teleports.TimeCount = 0
- UserList(UserIndex).flags.Teleports.tX = 0
- UserList(UserIndex).flags.Teleports.tY = 0
- UserList(UserIndex).flags.Teleports.Creado = False
- End If
- If UserList(UserIndex).flags.UserLogged Then
- If NumUsers > 0 Then NumUsers = NumUsers - 1
- Call CloseUser(UserIndex)
- Else
- Call ResetUserSlot(UserIndex)
- End If
- UserList(UserIndex).ConnID = -1
- UserList(UserIndex).ConnIDValida = False
- UserList(UserIndex).NumeroPaquetesPorMiliSec = 0
- Exit Sub
- errhandler:
- UserList(UserIndex).ConnID = -1
- UserList(UserIndex).ConnIDValida = False
- UserList(UserIndex).NumeroPaquetesPorMiliSec = 0
- Call ResetUserSlot(UserIndex)
- Call LogError("CloseSocket - Error = " & Err.Number & " - Descripción = " & Err.Description & " - UserIndex = " & UserIndex)
- End Sub
- Sub CloseSocketSL(ByVal UserIndex As Integer)
- If UserList(UserIndex).ConnID <> -1 And UserList(UserIndex).ConnIDValida Then
- Call BorraSlotSock(UserList(UserIndex).ConnID)
- Call WSApiCloseSocket(UserList(UserIndex).ConnID)
- UserList(UserIndex).ConnIDValida = False
- End If
- End Sub
- Public Function EnviarDatosASlot(ByVal UserIndex As Integer, Datos As String) As Long
- On Error GoTo Err
- Dim Ret As Long
- Ret = WsApiEnviar(UserIndex, Datos)
- If Ret <> 0 And Ret <> WSAEWOULDBLOCK Then
- Call CloseSocketSL(UserIndex)
- Call Cerrar_Usuario(UserIndex)
- End If
- EnviarDatosASlot = Ret
- Exit Function
- Err:
- '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)
- End Function
- Public Function EnviarDatosASlot2(ByVal UserIndex As Integer, Datos As String) As Long
- #If UsarQueSocket = 1 Then
- On Error GoTo Err
- Dim Ret As Long
- Ret = WsApiEnviar(UserIndex, Datos)
- If Ret <> 0 And Ret <> WSAEWOULDBLOCK Then
- Call CloseSocketSL(UserIndex)
- Call Cerrar_Usuario(UserIndex)
- End If
- EnviarDatosASlot2 = Ret
- Exit Function
- Err:
- '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)
- #ElseIf UsarQueSocket = 0 Then '**********************************************
- Dim Encolar As Boolean
- Encolar = False
- EnviarDatosASlot2 = 0
- If UserList(UserIndex).ColaSalida.Count <= 0 Then
- If MainView.Socket2(UserIndex).Write(Datos, Len(Datos)) < 0 Then
- If MainView.Socket2(UserIndex).LastError = WSAEWOULDBLOCK Then
- UserList(UserIndex).SockPuedoEnviar = False
- Encolar = True
- Else
- Call Cerrar_Usuario(UserIndex)
- End If
- End If
- Else
- Encolar = True
- End If
- If Encolar Then
- Debug.Print "Encolando..."
- UserList(UserIndex).ColaSalida.Add Datos
- End If
- #ElseIf UsarQueSocket = 2 Then '**********************************************
- Dim Encolar As Boolean
- Dim Ret As Long
- Encolar = False
- '//
- '// Valores de retorno:
- '// 0: Todo OK
- '// 1: WSAEWOULDBLOCK
- '// 2: Error critico
- '//
- If UserList(UserIndex).ColaSalida.Count <= 0 Then
- Ret = MainView.Serv.Enviar(UserList(UserIndex).ConnID, Datos, Len(Datos))
- If Ret = 1 Then
- Encolar = True
- ElseIf Ret = 2 Then
- Call CloseSocketSL(UserIndex)
- Call Cerrar_Usuario(UserIndex)
- End If
- Else
- Encolar = True
- End If
- If Encolar Then
- Debug.Print "Encolando..."
- UserList(UserIndex).ColaSalida.Add Datos
- End If
- #End If '**********************************************
- End Function
- Sub SendData(ByVal sndRoute As SendTarget, ByVal sndIndex As Integer, ByVal sndMap As Integer, ByVal sndData As String)
- On Error Resume Next
- Dim LoopC As Integer
- Dim X As Integer
- Dim Y As Integer
- If sndData <> "BUENO" Then
- sndData = Security.Security.NSC_Encryption(sndData, Security.Keys(1))
- End If
- sndData = sndData & ENDC
- Select Case sndRoute
- Case SendTarget.ToPCArea
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If MapData(sndMap, X, Y).UserIndex > 0 Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- Case SendTarget.toindex
- If UserList(sndIndex).ConnID <> -1 Then
- Call EnviarDatosASlot(sndIndex, sndData)
- Exit Sub
- End If
- Case SendTarget.ToNone
- Exit Sub
- Case SendTarget.ToAdmins
- For LoopC = 1 To LastUser
- If UserList(LoopC).ConnID <> -1 Then
- If UserList(LoopC).flags.Privilegios > 0 Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToAll
- For LoopC = 1 To LastUser
- If UserList(LoopC).ConnID <> -1 Then
- If UserList(LoopC).flags.UserLogged Then 'Esta logeado como usuario?
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToAllButIndex
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) And (LoopC <> sndIndex) Then
- If UserList(LoopC).flags.UserLogged Then 'Esta logeado como usuario?
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToMap
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).flags.UserLogged Then
- If UserList(LoopC).Pos.Map = sndMap Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToMapButIndex
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) And LoopC <> sndIndex Then
- If UserList(LoopC).Pos.Map = sndMap Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToGuildMembers
- LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
- While LoopC > 0
- If (UserList(LoopC).ConnID <> -1) Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
- Wend
- Exit Sub
- Case SendTarget.ToDeadArea
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If MapData(sndMap, X, Y).UserIndex > 0 Then
- If UserList(MapData(sndMap, X, Y).UserIndex).flags.Muerto = 1 Or UserList(MapData(sndMap, X, Y).UserIndex).flags.Privilegios >= 1 Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- '[Alejo-18-5]
- Case SendTarget.ToPCAreaButIndex
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If (MapData(sndMap, X, Y).UserIndex > 0) And (MapData(sndMap, X, Y).UserIndex <> sndIndex) Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- Case SendTarget.ToClanArea
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If (MapData(sndMap, X, Y).UserIndex > 0) Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- If UserList(sndIndex).GuildIndex > 0 And UserList(MapData(sndMap, X, Y).UserIndex).GuildIndex = UserList(sndIndex).GuildIndex Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- Case SendTarget.ToPartyArea
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If (MapData(sndMap, X, Y).UserIndex > 0) Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- If UserList(sndIndex).PartyIndex > 0 And UserList(MapData(sndMap, X, Y).UserIndex).PartyIndex = UserList(sndIndex).PartyIndex Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- '[CDT 17-02-2004]
- Case SendTarget.ToAdminsAreaButConsejeros
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If (MapData(sndMap, X, Y).UserIndex > 0) And (MapData(sndMap, X, Y).UserIndex <> sndIndex) Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- If UserList(MapData(sndMap, X, Y).UserIndex).flags.Privilegios > 1 Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- '[/CDT]
- Case SendTarget.ToNPCArea
- For Y = Npclist(sndIndex).Pos.Y - MinYBorder + 1 To Npclist(sndIndex).Pos.Y + MinYBorder - 1
- For X = Npclist(sndIndex).Pos.X - MinXBorder + 1 To Npclist(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If MapData(sndMap, X, Y).UserIndex > 0 Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- Case SendTarget.ToDiosesYclan
- LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
- While LoopC > 0
- If (UserList(LoopC).ConnID <> -1) Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
- Wend
- LoopC = Guild.Iterador_ProximoGM(sndIndex)
- While LoopC > 0
- If (UserList(LoopC).ConnID <> -1) Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- LoopC = Guild.Iterador_ProximoGM(sndIndex)
- Wend
- Exit Sub
- Case SendTarget.ToConsejo
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).flags.PertAlCons > 0 Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToConsejoCaos
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).flags.PertAlConsCaos > 0 Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToRolesMasters
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).flags.EsRolesMaster Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToCiudadanos
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If Not criminal(LoopC) Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToCriminales
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If criminal(LoopC) Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToReal
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).Faccion.ArmadaReal = 1 Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToCaos
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).Faccion.FuerzasCaos = 1 Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case ToCiudadanosYRMs
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If Not criminal(LoopC) Or UserList(LoopC).flags.EsRolesMaster Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case ToCriminalesYRMs
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If criminal(LoopC) Or UserList(LoopC).flags.EsRolesMaster Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case ToRealYRMs
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).Faccion.ArmadaReal = 1 Or UserList(LoopC).flags.EsRolesMaster Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case ToCaosYRMs
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).Faccion.FuerzasCaos = 1 Or UserList(LoopC).flags.EsRolesMaster Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- End Select
- End Sub
- Sub SendData2(ByVal sndRoute As SendTarget, ByVal sndIndex As Integer, ByVal sndData As String)
- On Error Resume Next
- sndData = sndData & ENDC
- Select Case sndRoute
- Case SendTarget.toindex
- If UserList(sndIndex).ConnID <> -1 Then
- Call EnviarDatosASlot2(sndIndex, sndData)
- Exit Sub
- End If
- End Select
- End Sub
- Function EstaPCarea(Index As Integer, Index2 As Integer) As Boolean
- Dim X As Integer, Y As Integer
- For Y = UserList(Index).Pos.Y - MinYBorder + 1 To UserList(Index).Pos.Y + MinYBorder - 1
- For X = UserList(Index).Pos.X - MinXBorder + 1 To UserList(Index).Pos.X + MinXBorder - 1
- If MapData(UserList(Index).Pos.Map, X, Y).UserIndex = Index2 Then
- EstaPCarea = True
- Exit Function
- End If
- Next X
- Next Y
- EstaPCarea = False
- End Function
- Function HayPCarea(Pos As WorldPos) As Boolean
- Dim X As Integer, Y As Integer
- For Y = Pos.Y - MinYBorder + 1 To Pos.Y + MinYBorder - 1
- For X = Pos.X - MinXBorder + 1 To Pos.X + MinXBorder - 1
- If X > 0 And Y > 0 And X < 101 And Y < 101 Then
- If MapData(Pos.Map, X, Y).UserIndex > 0 Then
- HayPCarea = True
- Exit Function
- End If
- End If
- Next X
- Next Y
- HayPCarea = False
- End Function
- Function HayOBJarea(Pos As WorldPos, ObjIndex As Integer) As Boolean
- Dim X As Integer, Y As Integer
- For Y = Pos.Y - MinYBorder + 1 To Pos.Y + MinYBorder - 1
- For X = Pos.X - MinXBorder + 1 To Pos.X + MinXBorder - 1
- If MapData(Pos.Map, X, Y).ObjInfo.ObjIndex = ObjIndex Then
- HayOBJarea = True
- Exit Function
- End If
- Next X
- Next Y
- HayOBJarea = False
- End Function
- Function ValidateChr(ByVal UserIndex As Integer) As Boolean
- ValidateChr = UserList(UserIndex).Char.Head <> 0 _
- And UserList(UserIndex).Char.body <> 0 _
- And ValidateSkills(UserIndex)
- End Function
- Sub ConnectUser(ByVal UserIndex As Integer, name As String, Password As String, ByVal UserSerial As String, Cuenta As String)
- Dim N As Integer
- Dim tStr As String
- On Error GoTo ERr_HS
- UserList(UserIndex).flags.Escondido = 0
- UserList(UserIndex).flags.Guerra = False
- Call SendData(SendTarget.toindex, UserIndex, 0, "|G0")
- UserList(UserIndex).flags.TargetNPC = 0
- UserList(UserIndex).flags.TargetNpcTipo = eNPCType.Comun
- UserList(UserIndex).flags.TargetObj = 0
- UserList(UserIndex).flags.TargetUser = 0
- UserList(UserIndex).Char.FX = 0
- UserList(UserIndex).SerialIndex = UserSerial
- UserList(UserIndex).flags.SeguItems = True
- If NumUsers >= MaxUsers Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERREl servidor ha alcanzado el maximo de usuarios soportado, por favor vuelva a intertarlo mas tarde.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- If AllowMultiLogins = 0 Then
- If CheckForSameIP(UserIndex, UserList(UserIndex).ip) = True Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERRNo es posible usar mas de un personaje al mismo tiempo.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- End If
- Call SendData(SendTarget.toindex, UserIndex, 0, "CUALIPC" & UserList(UserIndex).ip)
- Dim j As Integer
- If CheckForSameName(name) Then
- If UserList(NameIndex(name)).Counters.Saliendo Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERREl usuario está saliendo.")
- Else
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERRPerdon, un usuario con el mismo nombre se há logoeado.")
- End If
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- Call DB_LoadCharacter(UserIndex, name)
- If Not ValidateChr(UserIndex) Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "!!Hubo un error al cargar tu personaje, informa esto en nuestros foros http://www.swforos.com/foro/.)
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- If UserList(UserIndex).flags.Ban Then
- 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/")
- CloseSocket (UserIndex)
- Exit Sub
- End If
- If UserList(UserIndex).Invent.EscudoEqpSlot = 0 Then UserList(UserIndex).Char.ShieldAnim = NingunEscudo
- If UserList(UserIndex).Invent.CascoEqpSlot = 0 Then UserList(UserIndex).Char.CascoAnim = NingunCasco
- If UserList(UserIndex).Invent.WeaponEqpSlot = 0 Then UserList(UserIndex).Char.WeaponAnim = NingunArma
- Call UpdateUserInv(True, UserIndex, 0)
- Call UpdateUserHechizos(True, UserIndex, 0)
- If UserList(UserIndex).flags.Navegando = 1 Then
- UserList(UserIndex).Char.body = ObjData(UserList(UserIndex).Invent.BarcoObjIndex).Ropaje
- UserList(UserIndex).Char.Head = 0
- UserList(UserIndex).Char.WeaponAnim = NingunArma
- UserList(UserIndex).Char.ShieldAnim = NingunEscudo
- UserList(UserIndex).Char.CascoAnim = NingunCasco
- End If
- If UserList(UserIndex).flags.Montando = 1 Then
- UserList(UserIndex).Char.body = ObjData(UserList(UserIndex).Invent.MonturaObjIndex).Ropaje
- UserList(UserIndex).Char.Head = UserList(UserIndex).OrigChar.Head
- UserList(UserIndex).Char.WeaponAnim = NingunArma
- UserList(UserIndex).Char.ShieldAnim = NingunEscudo
- UserList(UserIndex).Char.CascoAnim = UserList(UserIndex).Char.CascoAnim
- End If
- If UserList(UserIndex).flags.Paralizado Then
- #If SeguridadAlkon Then
- If EncriptarProtocolosCriticos Then
- Call SendCryptedData(SendTarget.toindex, UserIndex, 0, "PARADOK")
- Call SendData(SendTarget.toindex, UserIndex, 0, "PU" & UserList(UserIndex).Pos.X & "," & UserList(UserIndex).Pos.Y)
- Else
- #End If
- Call SendData(SendTarget.toindex, UserIndex, 0, "PARADOK")
- Call SendData(SendTarget.toindex, UserIndex, 0, "PU" & UserList(UserIndex).Pos.X & "," & UserList(UserIndex).Pos.Y)
- #If SeguridadAlkon Then
- End If
- #End If
- End If
- 'Feo, esto tiene que ser parche cliente
- If UserList(UserIndex).flags.Estupidez = 0 Then Call SendData(SendTarget.toindex, UserIndex, 0, "NESTUP")
- '
- 'Posicion de comienzo
- If UserList(UserIndex).Pos.Map = 0 Then
- UserList(UserIndex).Pos.Map = 60
- UserList(UserIndex).Pos.X = 45
- UserList(UserIndex).Pos.Y = 55
- Else
- If Not MapaValido(UserList(UserIndex).Pos.Map) Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERREL PJ se encuenta en un mapa invalido.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- ''TELEFRAG
- If MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex <> 0 Then
- ''si estaba en comercio seguro...
- If UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu > 0 Then
- If UserList(UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu).flags.UserLogged Then
- Call FinComerciarUsu(UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu)
- 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)
- End If
- If UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).flags.UserLogged Then
- Call FinComerciarUsu(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex)
- 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...")
- End If
- End If
- Call CloseSocket(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex)
- End If
- If UserList(UserIndex).flags.Muerto = 1 Then
- Call Empollando(UserIndex)
- End If
- End If
- 'Nombre de sistema
- UserList(UserIndex).name = name
- UserList(UserIndex).Password = Password
- UserList(UserIndex).showName = True 'Por default los nombres son visibles
- Call SendData(SendTarget.toindex, UserIndex, 0, "IU" & UserIndex) 'Enviamos el User index
- Call SendData(SendTarget.toindex, UserIndex, 0, "CM" & UserList(UserIndex).Pos.Map & "," & MapInfo(UserList(UserIndex).Pos.Map).MapVersion) 'Carga el mapa
- Call SendData(SendTarget.toindex, UserIndex, 0, "TM" & MapInfo(UserList(UserIndex).Pos.Map).Music)
- 'Vemos que clase de user es (se lo usa para setear los privilegios alcrear el PJ)
- UserList(UserIndex).flags.EsRolesMaster = EsRolesMaster(name)
- If EsEventM(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.Dios
- UserList(UserIndex).flags.Rango = 6
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
- ElseIf EsDirector(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.DirectorGM
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
- ElseIf EsAdmin(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.Admin
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
- ElseIf EsDios(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.Dios
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
- ElseIf EsSemiDios(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.SemiDios
- UserList(UserIndex).flags.Rango = 2
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
- ElseIf EsConsejero(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.SemiDios ' le doi los privilegios del semi ;)
- UserList(UserIndex).flags.Rango = 1
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, True)
- Else
- UserList(UserIndex).flags.Privilegios = PlayerType.User
- End If
- ''[EL OSO]: TRAIGO ESTO ACA ARRIBA PARA DARLE EL IP!
- UserList(UserIndex).Counters.IdleCount = 0
- Call MakeUserChar(SendTarget.ToMap, 0, UserList(UserIndex).Pos.Map, UserIndex, UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y)
- Call SendData(SendTarget.toindex, UserIndex, 0, "IP" & UserList(UserIndex).Char.CharIndex)
- Call SendUserStatsBox(UserIndex)
- Call EnviarHambreYsed(UserIndex)
- If haciendoBK Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "BKW")
- Call SendData(SendTarget.toindex, UserIndex, 0, "||Servidor> Por favor espera algunos segundos, WorldSave esta ejecutandose." & FONTTYPE_SERVER)
- End If
- If EnPausa Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "BKW")
- Call SendData(SendTarget.toindex, UserIndex, 0, "||Servidor> Lo sentimos mucho pero el servidor se encuentra actualmente detenido. Intenta ingresar más tarde." & FONTTYPE_SERVER)
- End If
- If EnTesting And UserList(UserIndex).Stats.ELV >= 18 Then
- 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.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- NumUsers = NumUsers + 1
- UserList(UserIndex).flags.UserLogged = True
- MapInfo(UserList(UserIndex).Pos.Map).NumUsers = MapInfo(UserList(UserIndex).Pos.Map).NumUsers + 1
- If UserList(UserIndex).Stats.SkillPts > 0 Then
- Call EnviarSkills(UserIndex)
- Call EnviarSubirNivel(UserIndex, UserList(UserIndex).Stats.SkillPts)
- End If
- If NumUsers > DayStats.MaxUsuarios Then DayStats.MaxUsuarios = NumUsers
- If NumUsers > recordusuarios Then
- Call SendData(SendTarget.ToAll, 0, 0, "||Record de usuarios conectados simultaniamente." & "Hay " & NumUsers & " usuarios." & "~240~240~50~1~0")
- recordusuarios = NumUsers
- Call WriteVar(IniPath & "Config.bin", "INIT", "Record", str(recordusuarios))
- End If
- Dim i As Integer
- If UserList(UserIndex).NroMacotas > 0 Then
- For i = 1 To MAXMASCOTAS
- If UserList(UserIndex).MascotasType(i) > 0 Then
- UserList(UserIndex).MascotasIndex(i) = SpawnNpc(UserList(UserIndex).MascotasType(i), UserList(UserIndex).Pos, True, True)
- If UserList(UserIndex).MascotasIndex(i) > 0 Then
- Npclist(UserList(UserIndex).MascotasIndex(i)).MaestroUser = UserIndex
- Call FollowAmo(UserList(UserIndex).MascotasIndex(i))
- Else
- UserList(UserIndex).MascotasIndex(i) = 0
- End If
- End If
- Next i
- End If
- If UserList(UserIndex).flags.Navegando = 1 Then Call SendData(SendTarget.toindex, UserIndex, 0, "NAVEG")
- If UserList(UserIndex).flags.Montando = 1 Then Call SendData(SendTarget.toindex, UserIndex, 0, "EQUIT")
- If ServerSoloGMs > 0 Then
- If UserList(UserIndex).flags.Privilegios < ServerSoloGMs Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERRServidor restringido a administradores de jerarquia mayor o igual a: " & ServerSoloGMs & ". Por favor intente en unos momentos.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- End If
- If UserList(UserIndex).GuildIndex > 0 Then
- 'welcome to the show baby...
- If Not Guild.m_ConectarMiembroAClan(UserIndex, UserList(UserIndex).GuildIndex) Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "||Tu estado no te permite entrar al clan." & FONTTYPE_GUILD)
- End If
- End If
- Call SendData(SendTarget.ToPCArea, UserIndex, UserList(UserIndex).Pos.Map, "CFX" & UserList(UserIndex).Char.CharIndex & "," & FXIDs.FXWARP & "," & 0)
- Call SendData(SendTarget.toindex, UserIndex, 0, "LOGGED")
- UserList(UserIndex).Char.Account = Cuenta
- Call Guild.SendGuildNews(UserIndex)
- Dim fPath As String
- fPath = App.Path & "/don/" & UserList(UserIndex).name
- If FileExist(fPath) Then
- 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)
- End If
- If UserList(UserIndex).GuildIndex > 0 Then
- SendData SendTarget.toindex, UserIndex, 0, "||El seguro de CvC se encuentra activado." & "~0~128~0~1~0"
- UserList(UserIndex).flags.SeguroCvc = True
- End If
- If UserList(UserIndex).flags.MP = False Then
- SendData SendTarget.toindex, UserIndex, 0, "||Los mensajes privados se encuentran activados." & FONTTYPE_INFO
- Else
- SendData SendTarget.toindex, UserIndex, 0, "||Los mensajes privados se encuentran desactivados." & FONTTYPE_INFO
- End If
- If UserList(UserIndex).Faccion.RecompensasReal = 4 Then
- UserList(UserIndex).flags.EsCuartaJerarquia = True
- End If
- If HayDesafio = False Then
- UserList(UserIndex).flags.YaParticipoDesafio = 0
- UserList(UserIndex).flags.UltiDesafiante = vbNullString
- Else
- If UserList(UserCreaDesafio).name <> UserList(UserIndex).flags.UltiDesafiante Then
- UserList(UserIndex).flags.UltiDesafiante = vbNullString
- UserList(UserIndex).flags.YaParticipoDesafio = 0
- End If
- End If
- If UserList(UserIndex).GuildIndex > 0 Then
- SendData SendTarget.toindex, UserIndex, 0, "||Castillo Norte pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Norte") & FONTTYPE_GUILD
- SendData SendTarget.toindex, UserIndex, 0, "||Castillo Sur pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Sur") & FONTTYPE_GUILD
- SendData SendTarget.toindex, UserIndex, 0, "||Castillo Este pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Este") & FONTTYPE_GUILD
- SendData SendTarget.toindex, UserIndex, 0, "||Castillo Oeste pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Oeste") & FONTTYPE_GUILD
- End If
- If UserList(UserIndex).flags.NoActualizado Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "REAU")
- End If
- If Lloviendo Then Call SendData(SendTarget.toindex, UserIndex, 0, "LLU")
- tStr = Guild.a_ObtenerRechazoDeChar(UserList(UserIndex).name)
- If tStr <> vbNullString Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "!!Tu solicitud de ingreso al clan ha sido rechazada. El clan te explica que: " & tStr & ENDC)
- End If
- Call SendLabels(UserIndex)
- Call SendData(SendTarget.toindex, UserIndex, 0, "XY" & MapInfo(UserList(UserIndex).Pos.Map).name & " [" & UserList(UserIndex).Pos.Map & "]")
- Call MostrarNumUsers
- N = FreeFile
- Open App.Path & "\logs\numusers.log" For Output As N
- Print #N, NumUsers
- Close #N
- N = FreeFile
- 'Log
- Open App.Path & "\logs\Connect.log" For Append Shared As #N
- Print #N, UserList(UserIndex).name & " ha entrado al juego. UserIndex:" & UserIndex & " " & Time & " " & Date
- Close #N
- ERr_HS:
- End Sub
- Sub SendLabels(UserIndex As Integer)
- If UserList(UserIndex).Invent.AnilloEqpObjIndex Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "RMX" & ObjData(UserList(UserIndex).Invent.AnilloEqpObjIndex).DefensaMagicaMin & "/" & ObjData(UserList(UserIndex).Invent.AnilloEqpObjIndex).DefensaMagicaMax)
- Else
- Call SendData(SendTarget.toindex, UserIndex, 0, "RMX0/0")
- End If
- If UserList(UserIndex).Invent.ArmourEqpObjIndex Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ARM" & ObjData(UserList(UserIndex).Invent.ArmourEqpObjIndex).MinDef & "/" & ObjData(UserList(UserIndex).Invent.ArmourEqpObjIndex).MaxDef)
- Else
- Call SendData(SendTarget.toindex, UserIndex, 0, "ARM0/0")
- End If
- If UserList(UserIndex).Invent.CascoEqpObjIndex Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "GHX" & ObjData(UserList(UserIndex).Invent.CascoEqpObjIndex).MinDef & "/" & ObjData(UserList(UserIndex).Invent.CascoEqpObjIndex).MaxDef)
- Else
- Call SendData(SendTarget.toindex, UserIndex, 0, "GHX0/0")
- End If
- If UserList(UserIndex).Invent.WeaponEqpObjIndex Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "WEA" & ObjData(UserList(UserIndex).Invent.WeaponEqpObjIndex).MinHIT & "/" & ObjData(UserList(UserIndex).Invent.WeaponEqpObjIndex).MaxHIT)
- Else
- Call SendData(SendTarget.toindex, UserIndex, 0, "WEA0/0")
- End If
- End Sub
- Sub ResetFacciones(ByVal UserIndex As Integer)
- With UserList(UserIndex).Faccion
- .ArmadaReal = 0
- .FuerzasCaos = 0
- .CiudadanosMatados = 0
- .CriminalesMatados = 0
- .RecibioArmaduraCaos = 0
- .RecibioArmaduraReal = 0
- .RecibioExpInicialCaos = 0
- .RecibioExpInicialReal = 0
- .RecompensasCaos = 0
- .RecompensasReal = 0
- .Reenlistadas = 0
- End With
- End Sub
- Sub ResetContadores(ByVal UserIndex As Integer)
- With UserList(UserIndex).Counters
- .AGUACounter = 0
- .AttackCounter = 0
- .Ceguera = 0
- .COMCounter = 0
- .Estupidez = 0
- .Frio = 0
- .HPCounter = 0
- .IdleCount = 0
- .Invisibilidad = 0
- .Paralisis = 0
- .Pasos = 0
- .Pena = 0
- .PiqueteC = 0
- .STACounter = 0
- .Veneno = 0
- .Trabajando = 0
- .Ocultando = 0
- .TimerLanzarSpell = 0
- .TimerPuedeAtacar = 0
- .TimerPuedeTrabajar = 0
- .TimerUsar = 0
- End With
- End Sub
- Sub ResetCharInfo(ByVal UserIndex As Integer)
- '*************************************************
- 'Author: Unknown
- 'Last modified: 03/15/2006
- 'Resetea todos los valores generales y las stats
- '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
- '*************************************************
- With UserList(UserIndex).Char
- .body = 0
- .CascoAnim = 0
- .CharIndex = 0
- .FX = 0
- .Head = 0
- .loops = 0
- .heading = 0
- .loops = 0
- .ShieldAnim = 0
- .WeaponAnim = 0
- End With
- End Sub
- Sub ResetBasicUserInfo(ByVal UserIndex As Integer)
- '*************************************************
- 'Author: Unknown
- 'Last modified: 03/15/2006
- 'Resetea todos los valores generales y las stats
- '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
- '*************************************************
- With UserList(UserIndex)
- .name = ""
- .modName = ""
- .Password = ""
- .Desc = ""
- .DescRM = ""
- .Pos.Map = 0
- .Pos.X = 0
- .Pos.Y = 0
- .ip = ""
- .RDBuffer = ""
- .clase = ""
- .email = ""
- .genero = ""
- .Hogar = ""
- .raza = ""
- .RandKey = ""
- .PrevCheckSum = 0
- .PacketNumber = 0
- .EmpoCont = 0
- .PartyIndex = 0
- .PartySolicitud = 0
- With .Stats
- .Banco = 0
- .ELV = 0
- .ELU = 0
- .Exp = 0
- .def = 0
- .CriminalesMatados = 0
- .NPCsMuertos = 0
- .UsuariosMatados = 0
- .SkillPts = 0
- End With
- End With
- End Sub
- Sub ResetReputacion(ByVal UserIndex As Integer)
- '*************************************************
- 'Author: Unknown
- 'Last modified: 03/15/2006
- 'Resetea todos los valores generales y las stats
- '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
- '*************************************************
- With UserList(UserIndex).Reputacion
- .AsesinoRep = 0
- .BandidoRep = 0
- .BurguesRep = 0
- .LadronesRep = 0
- .NobleRep = 0
- .PlebeRep = 0
- .NobleRep = 0
- .Promedio = 0
- End With
- End Sub
- Sub ResetGuildInfo(ByVal UserIndex As Integer)
- If UserList(UserIndex).... > 0 Then
- Call Guild.GMDejaDeEscucharClan(UserIndex, UserList(UserIndex)....)


399![Destructor de Mentes [5] Destructor de Mentes [5]](./images/ranks/Rango17.gif)
Penyair escribió:AngelDsm escribió:miqueas150 escribió:
Em postea la primer parte del modulo TCP
Aca tenes te deje todo el Modulo por las dudas. :
- ption Explicit
- Public TempSerial As String
- Public Enum SendTarget
- toindex = 0 'Envia a un solo User
- ToAll = 1 'A todos los Users
- ToMap = 2 'Todos los Usuarios en el mapa
- ToPCArea = 3 'Todos los Users en el area de un user determinado
- ToNone = 4 'Ninguno
- ToAllButIndex = 5 'Todos menos el index
- ToMapButIndex = 6 'Todos en el mapa menos el indice
- ToGM = 7
- ToNPCArea = 8 'Todos los Users en el area de un user determinado
- ToGuildMembers = 9
- ToAdmins = 10
- ToPCAreaButIndex = 11
- ToAdminsAreaButConsejeros = 12
- ToDiosesYclan = 13
- ToConsejo = 14
- ToClanArea = 15
- ToConsejoCaos = 16
- ToRolesMasters = 17
- ToDeadArea = 18
- ToCiudadanos = 19
- ToCriminales = 20
- ToPartyArea = 21
- ToReal = 22
- ToCaos = 23
- ToCiudadanosYRMs = 24
- ToCriminalesYRMs = 25
- ToRealYRMs = 26
- ToCaosYRMs = 27
- End Enum
- Sub DarCuerpoYCabeza(ByRef UserBody As Integer, ByRef UserHead As Integer, ByVal raza As String, ByVal Gen As String)
- 'TODO: Poner las heads en arrays, así se acceden por índices
- 'y no hay problemas de discontinuidad de los índices.
- 'También se debe usar enums para raza y sexo
- Select Case Gen
- Case "Hombre"
- Select Case raza
- Case "Humano"
- UserHead = RandomNumber(1, 30)
- UserBody = 1
- Case "Elfo"
- UserHead = RandomNumber(1, 13) + 100
- If UserHead = 113 Then UserHead = 201 'Un índice no es continuo.... :S muy feo
- UserBody = 2
- Case "Elfo Oscuro"
- UserHead = RandomNumber(1, 8) + 201
- UserBody = 3
- Case "Enano"
- UserHead = RandomNumber(1, 5) + 300
- UserBody = 52
- Case "Gnomo"
- UserHead = RandomNumber(1, 6) + 400
- UserBody = 52
- Case Else
- UserHead = 1
- UserBody = 1
- End Select
- Case "Mujer"
- Select Case raza
- Case "Humano"
- UserHead = RandomNumber(1, 7) + 69
- UserBody = 1
- Case "Elfo"
- UserHead = RandomNumber(1, 7) + 169
- UserBody = 2
- Case "Elfo Oscuro"
- UserHead = RandomNumber(1, 11) + 269
- UserBody = 3
- Case "Gnomo"
- UserHead = RandomNumber(1, 5) + 469
- UserBody = 52
- Case "Enano"
- UserHead = RandomNumber(1, 3) + 369
- UserBody = 52
- Case Else
- UserHead = 70
- UserBody = 1
- End Select
- End Select
- End Sub
- Function AsciiValidos(ByVal cad As String) As Boolean
- Dim car As Byte
- Dim i As Integer
- cad = LCase$(cad)
- For i = 1 To Len(cad)
- car = Asc(mid$(cad, i, 1))
- If (car < 97 Or car > 122) And (car <> 255) And (car <> 32) Then
- AsciiValidos = False
- Exit Function
- End If
- Next i
- AsciiValidos = True
- End Function
- Function Numeric(ByVal cad As String) As Boolean
- Dim car As Byte
- Dim i As Integer
- cad = LCase$(cad)
- For i = 1 To Len(cad)
- car = Asc(mid$(cad, i, 1))
- If (car < 48 Or car > 57) Then
- Numeric = False
- Exit Function
- End If
- Next i
- Numeric = True
- End Function
- Function NombrePermitido(ByVal Nombre As String) As Boolean
- Dim i As Integer
- For i = 1 To UBound(ForbidenNames)
- If InStr(Nombre, ForbidenNames(i)) Then
- NombrePermitido = False
- Exit Function
- End If
- Next i
- NombrePermitido = True
- End Function
- Function ValidateSkills(ByVal UserIndex As Integer) As Boolean
- Dim LoopC As Integer
- For LoopC = 1 To NUMSKILLS
- If UserList(UserIndex).Stats.UserSkills(LoopC) < 0 Then
- Exit Function
- If UserList(UserIndex).Stats.UserSkills(LoopC) > 100 Then UserList(UserIndex).Stats.UserSkills(LoopC) = 100
- End If
- Next LoopC
- ValidateSkills = True
- End Function
- Sub ConnectNewUser(UserIndex As Integer, name As String, Password As String, UserRaza As String, UserSexo As String, UserClase As String, _
- US1 As String, US2 As String, US3 As String, US4 As String, US5 As String, _
- US6 As String, US7 As String, US8 As String, US9 As String, US10 As String, _
- US11 As String, US12 As String, US13 As String, US14 As String, US15 As String, _
- US16 As String, US17 As String, US18 As String, US19 As String, US20 As String, _
- US21 As String, UserEmail As String, Hogar As String, Cuenta As String, ByVal USerial As String)
- If FileExist(CharPath & name & ".swao", vbNormal) = True Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "INF" & "Ya existe el personaje.")
- Exit Sub
- End If
- If Not AsciiValidos(name) Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERRNombre invalido.")
- Exit Sub
- End If
- Dim LoopC As Integer
- If UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = 0 Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERRDebe tirar los dados antes de poder crear un personaje.")
- Exit Sub
- End If
- UserList(UserIndex).flags.Muerto = 0
- UserList(UserIndex).flags.Escondido = 0
- UserList(UserIndex).name = name
- UserList(UserIndex).clase = UserClase
- UserList(UserIndex).raza = UserRaza
- UserList(UserIndex).genero = UserSexo
- UserList(UserIndex).email = UserEmail
- UserList(UserIndex).Hogar = Hogar
- Select Case UCase$(UserRaza)
- Case "HUMANO"
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 1
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 1
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) + 2
- Case "ELFO"
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 4
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 2
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) + 2
- Case "ELFO OSCURO"
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 2
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 2
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 2
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) - 3
- Case "ENANO"
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 3
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) + 3
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) - 6
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) - 1
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) - 2
- Case "GNOMO"
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) - 4
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 3
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 3
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) + 1
- End Select
- UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza)
- UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad)
- UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion)
- UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma)
- UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)
- '/columdruMysql
- UserList(UserIndex).Stats.UserSkills(1) = Val(US1)
- UserList(UserIndex).Stats.UserSkills(2) = Val(US2)
- UserList(UserIndex).Stats.UserSkills(3) = Val(US3)
- UserList(UserIndex).Stats.UserSkills(4) = Val(US4)
- UserList(UserIndex).Stats.UserSkills(5) = Val(US5)
- UserList(UserIndex).Stats.UserSkills(6) = Val(US6)
- UserList(UserIndex).Stats.UserSkills(7) = Val(US7)
- UserList(UserIndex).Stats.UserSkills(8) = Val(US8)
- UserList(UserIndex).Stats.UserSkills(9) = Val(US9)
- UserList(UserIndex).Stats.UserSkills(10) = Val(US10)
- UserList(UserIndex).Stats.UserSkills(11) = Val(US11)
- UserList(UserIndex).Stats.UserSkills(12) = Val(US12)
- UserList(UserIndex).Stats.UserSkills(13) = Val(US13)
- UserList(UserIndex).Stats.UserSkills(14) = Val(US14)
- UserList(UserIndex).Stats.UserSkills(15) = Val(US15)
- UserList(UserIndex).Stats.UserSkills(16) = Val(US16)
- UserList(UserIndex).Stats.UserSkills(17) = Val(US17)
- UserList(UserIndex).Stats.UserSkills(18) = Val(US18)
- UserList(UserIndex).Stats.UserSkills(19) = Val(US19)
- UserList(UserIndex).Stats.UserSkills(20) = Val(US20)
- UserList(UserIndex).Stats.UserSkills(21) = Val(US21)
- Dim Totalskpts As Integer
- Totalskpts = 0
- For LoopC = 1 To NUMSKILLS
- Totalskpts = Totalskpts + Abs(UserList(UserIndex).Stats.UserSkills(LoopC))
- Next LoopC
- If Totalskpts > 10 Then
- Call LogHackAttemp(UserList(UserIndex).name & " intento hackear los skills.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- UserList(UserIndex).Password = Password
- UserList(UserIndex).Char.heading = eHeading.SOUTH
- Call DarCuerpoYCabeza(UserList(UserIndex).Char.body, UserList(UserIndex).Char.Head, UserList(UserIndex).raza, UserList(UserIndex).genero)
- UserList(UserIndex).OrigChar = UserList(UserIndex).Char
- UserList(UserIndex).Char.WeaponAnim = NingunArma
- UserList(UserIndex).Char.ShieldAnim = NingunEscudo
- UserList(UserIndex).Char.CascoAnim = NingunCasco
- UserList(UserIndex).Stats.MET = 1
- Dim MiInt As Long
- MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) \ 3)
- UserList(UserIndex).Stats.MaxHP = 15 + MiInt
- UserList(UserIndex).Stats.MinHP = 15 + MiInt
- MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) \ 6)
- If MiInt = 1 Then MiInt = 2
- UserList(UserIndex).Stats.MaxSta = 20 * MiInt
- UserList(UserIndex).Stats.MinSta = 20 * MiInt
- UserList(UserIndex).Stats.MaxAGU = 100
- UserList(UserIndex).Stats.MinAGU = 100
- UserList(UserIndex).Stats.MaxHam = 100
- UserList(UserIndex).Stats.MinHam = 100
- '<-----------------MANA----------------------->
- If UCase$(UserClase) = "MAGO" Then
- MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)) / 3
- UserList(UserIndex).Stats.MaxMAN = 100 + MiInt
- UserList(UserIndex).Stats.MinMAN = 100 + MiInt
- ElseIf UCase$(UserClase) = "CLERIGO" Or UCase$(UserClase) = "DRUIDA" _
- Or UCase$(UserClase) = "BARDO" Or UCase$(UserClase) = "ASESINO" Then
- MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)) / 4
- UserList(UserIndex).Stats.MaxMAN = 50
- UserList(UserIndex).Stats.MinMAN = 50
- Else
- UserList(UserIndex).Stats.MaxMAN = 0
- UserList(UserIndex).Stats.MinMAN = 0
- End If
- If UCase$(UserClase) = "MAGO" Or UCase$(UserClase) = "CLERIGO" Or _
- UCase$(UserClase) = "DRUIDA" Or UCase$(UserClase) = "BARDO" Or _
- UCase$(UserClase) = "ASESINO" Or UCase$(UserClase) = "PALADIN" Then
- UserList(UserIndex).Stats.UserHechizos(1) = 2
- End If
- UserList(UserIndex).Stats.MaxHIT = 2
- UserList(UserIndex).Stats.MinHIT = 1
- UserList(UserIndex).Stats.GLD = 0
- UserList(UserIndex).Stats.Exp = 0
- UserList(UserIndex).Stats.ELU = 300
- UserList(UserIndex).Stats.ELV = 1
- UserList(UserIndex).Invent.NroItems = 4
- UserList(UserIndex).Invent.Object(1).ObjIndex = 467
- UserList(UserIndex).Invent.Object(1).Amount = 100
- UserList(UserIndex).Invent.Object(2).ObjIndex = 468
- UserList(UserIndex).Invent.Object(2).Amount = 100
- UserList(UserIndex).Ranking.DuelosGanados = 0
- UserList(UserIndex).Ranking.DuelosParejaGanados = 0
- UserList(UserIndex).Ranking.MaxRondasDesafio = 0
- UserList(UserIndex).Ranking.TorneosGanados = 0
- UserList(UserIndex).Invent.Object(3).ObjIndex = 460
- UserList(UserIndex).Invent.Object(3).Amount = 1
- UserList(UserIndex).Invent.Object(3).Equipped = 1
- If UCase$(UserClase) = "MAGO" Or UCase$(UserClase) = "BARDO" Or _
- UCase$(UserClase) = "PALADIN" Or UCase$(UserClase) = "DRUIDA" Or UCase$(UserClase) = "CLERIGO" Then
- UserList(UserIndex).Invent.Object(5).ObjIndex = 461 'POTA ROJA
- UserList(UserIndex).Invent.Object(5).Amount = 150
- UserList(UserIndex).Invent.Object(6).ObjIndex = 975 'POTA AZUL
- UserList(UserIndex).Invent.Object(6).Amount = 150
- Else
- UserList(UserIndex).Invent.Object(5).ObjIndex = 461 'POTA ROJA
- UserList(UserIndex).Invent.Object(5).Amount = 150
- End If
- If Not UCase$(UserClase) = "MAGO" Then
- UserList(UserIndex).Invent.Object(7).ObjIndex = 462 'POTA VERDE
- UserList(UserIndex).Invent.Object(7).Amount = 150
- UserList(UserIndex).Invent.Object(8).ObjIndex = 1078 'POTA AMARILLA
- UserList(UserIndex).Invent.Object(8).Amount = 150
- End If
- Select Case UserRaza
- Case "Humano"
- UserList(UserIndex).Invent.Object(4).ObjIndex = 463
- Case "Elfo"
- UserList(UserIndex).Invent.Object(4).ObjIndex = 464
- Case "Elfo Oscuro"
- UserList(UserIndex).Invent.Object(4).ObjIndex = 465
- Case "Enano"
- UserList(UserIndex).Invent.Object(4).ObjIndex = 466
- Case "Gnomo"
- UserList(UserIndex).Invent.Object(4).ObjIndex = 466
- End Select
- UserList(UserIndex).Invent.Object(4).Amount = 1
- UserList(UserIndex).Invent.Object(4).Equipped = 1
- UserList(UserIndex).Invent.Object(9).ObjIndex = 41
- UserList(UserIndex).Invent.Object(9).Amount = 1
- UserList(UserIndex).Invent.ArmourEqpSlot = 4
- UserList(UserIndex).Invent.ArmourEqpObjIndex = UserList(UserIndex).Invent.Object(4).ObjIndex
- UserList(UserIndex).Invent.WeaponEqpObjIndex = UserList(UserIndex).Invent.Object(3).ObjIndex
- UserList(UserIndex).Invent.WeaponEqpSlot = 3
- UserList(UserIndex).Stats.TPoints = 0
- UserList(UserIndex).FaccionNumber = 2
- UserList(UserIndex).flags.Caballero = 0
- UserList(UserIndex).flags.IsMaxLevel = False
- UserList(UserIndex).Char.Account = Cuenta
- Call AddPjCuenta(Cuenta, name)
- Call DB_SaveCharacter(UserIndex, name)
- Call ConnectUser(UserIndex, name, Password, USerial, Cuenta)
- Call SendData(SendTarget.toindex, UserIndex, 0, "CUD" & (1 + 1) & "," & name & "," & UserList(UserIndex).Char.body & "," & UserList(UserIndex).Char.Head)
- End Sub
- Sub CloseSocket(ByVal UserIndex As Integer)
- On Error GoTo errhandler
- If UserIndex = LastUser Then
- Do Until UserList(LastUser).flags.UserLogged
- LastUser = LastUser - 1
- If LastUser < 1 Then Exit Do
- Loop
- End If
- If UserList(UserIndex).ConnID <> -1 Then
- Call CloseSocketSL(UserIndex)
- End If
- If UserList(UserIndex).ComUsu.DestUsu > 0 Then
- If UserList(UserList(UserIndex).ComUsu.DestUsu).flags.UserLogged Then
- If UserList(UserList(UserIndex).ComUsu.DestUsu).ComUsu.DestUsu = UserIndex Then
- Call SendData(SendTarget.toindex, UserList(UserIndex).ComUsu.DestUsu, 0, "||Comercio cancelado por el otro usuario" & FONTTYPE_TALK)
- Call FinComerciarUsu(UserList(UserIndex).ComUsu.DestUsu)
- End If
- End If
- End If
- If UserList(UserIndex).flags.Teleports.Creado = True Then
- UserList(UserIndex).flags.Teleports.Creado = False
- 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)
- MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.Map = 0
- MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.X = 0
- MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.Y = 0
- UserList(UserIndex).flags.Teleports.tMap = 0
- UserList(UserIndex).flags.Teleports.TimeCount = 0
- UserList(UserIndex).flags.Teleports.tX = 0
- UserList(UserIndex).flags.Teleports.tY = 0
- UserList(UserIndex).flags.Teleports.Creado = False
- End If
- If UserList(UserIndex).flags.UserLogged Then
- If NumUsers > 0 Then NumUsers = NumUsers - 1
- Call CloseUser(UserIndex)
- Else
- Call ResetUserSlot(UserIndex)
- End If
- UserList(UserIndex).ConnID = -1
- UserList(UserIndex).ConnIDValida = False
- UserList(UserIndex).NumeroPaquetesPorMiliSec = 0
- Exit Sub
- errhandler:
- UserList(UserIndex).ConnID = -1
- UserList(UserIndex).ConnIDValida = False
- UserList(UserIndex).NumeroPaquetesPorMiliSec = 0
- Call ResetUserSlot(UserIndex)
- Call LogError("CloseSocket - Error = " & Err.Number & " - Descripción = " & Err.Description & " - UserIndex = " & UserIndex)
- End Sub
- Sub CloseSocketSL(ByVal UserIndex As Integer)
- If UserList(UserIndex).ConnID <> -1 And UserList(UserIndex).ConnIDValida Then
- Call BorraSlotSock(UserList(UserIndex).ConnID)
- Call WSApiCloseSocket(UserList(UserIndex).ConnID)
- UserList(UserIndex).ConnIDValida = False
- End If
- End Sub
- Public Function EnviarDatosASlot(ByVal UserIndex As Integer, Datos As String) As Long
- On Error GoTo Err
- Dim Ret As Long
- Ret = WsApiEnviar(UserIndex, Datos)
- If Ret <> 0 And Ret <> WSAEWOULDBLOCK Then
- Call CloseSocketSL(UserIndex)
- Call Cerrar_Usuario(UserIndex)
- End If
- EnviarDatosASlot = Ret
- Exit Function
- Err:
- '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)
- End Function
- Public Function EnviarDatosASlot2(ByVal UserIndex As Integer, Datos As String) As Long
- #If UsarQueSocket = 1 Then
- On Error GoTo Err
- Dim Ret As Long
- Ret = WsApiEnviar(UserIndex, Datos)
- If Ret <> 0 And Ret <> WSAEWOULDBLOCK Then
- Call CloseSocketSL(UserIndex)
- Call Cerrar_Usuario(UserIndex)
- End If
- EnviarDatosASlot2 = Ret
- Exit Function
- Err:
- '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)
- #ElseIf UsarQueSocket = 0 Then '**********************************************
- Dim Encolar As Boolean
- Encolar = False
- EnviarDatosASlot2 = 0
- If UserList(UserIndex).ColaSalida.Count <= 0 Then
- If MainView.Socket2(UserIndex).Write(Datos, Len(Datos)) < 0 Then
- If MainView.Socket2(UserIndex).LastError = WSAEWOULDBLOCK Then
- UserList(UserIndex).SockPuedoEnviar = False
- Encolar = True
- Else
- Call Cerrar_Usuario(UserIndex)
- End If
- End If
- Else
- Encolar = True
- End If
- If Encolar Then
- Debug.Print "Encolando..."
- UserList(UserIndex).ColaSalida.Add Datos
- End If
- #ElseIf UsarQueSocket = 2 Then '**********************************************
- Dim Encolar As Boolean
- Dim Ret As Long
- Encolar = False
- '//
- '// Valores de retorno:
- '// 0: Todo OK
- '// 1: WSAEWOULDBLOCK
- '// 2: Error critico
- '//
- If UserList(UserIndex).ColaSalida.Count <= 0 Then
- Ret = MainView.Serv.Enviar(UserList(UserIndex).ConnID, Datos, Len(Datos))
- If Ret = 1 Then
- Encolar = True
- ElseIf Ret = 2 Then
- Call CloseSocketSL(UserIndex)
- Call Cerrar_Usuario(UserIndex)
- End If
- Else
- Encolar = True
- End If
- If Encolar Then
- Debug.Print "Encolando..."
- UserList(UserIndex).ColaSalida.Add Datos
- End If
- #End If '**********************************************
- End Function
- Sub SendData(ByVal sndRoute As SendTarget, ByVal sndIndex As Integer, ByVal sndMap As Integer, ByVal sndData As String)
- On Error Resume Next
- Dim LoopC As Integer
- Dim X As Integer
- Dim Y As Integer
- If sndData <> "BUENO" Then
- sndData = Security.Security.NSC_Encryption(sndData, Security.Keys(1))
- End If
- sndData = sndData & ENDC
- Select Case sndRoute
- Case SendTarget.ToPCArea
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If MapData(sndMap, X, Y).UserIndex > 0 Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- Case SendTarget.toindex
- If UserList(sndIndex).ConnID <> -1 Then
- Call EnviarDatosASlot(sndIndex, sndData)
- Exit Sub
- End If
- Case SendTarget.ToNone
- Exit Sub
- Case SendTarget.ToAdmins
- For LoopC = 1 To LastUser
- If UserList(LoopC).ConnID <> -1 Then
- If UserList(LoopC).flags.Privilegios > 0 Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToAll
- For LoopC = 1 To LastUser
- If UserList(LoopC).ConnID <> -1 Then
- If UserList(LoopC).flags.UserLogged Then 'Esta logeado como usuario?
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToAllButIndex
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) And (LoopC <> sndIndex) Then
- If UserList(LoopC).flags.UserLogged Then 'Esta logeado como usuario?
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToMap
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).flags.UserLogged Then
- If UserList(LoopC).Pos.Map = sndMap Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToMapButIndex
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) And LoopC <> sndIndex Then
- If UserList(LoopC).Pos.Map = sndMap Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToGuildMembers
- LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
- While LoopC > 0
- If (UserList(LoopC).ConnID <> -1) Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
- Wend
- Exit Sub
- Case SendTarget.ToDeadArea
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If MapData(sndMap, X, Y).UserIndex > 0 Then
- If UserList(MapData(sndMap, X, Y).UserIndex).flags.Muerto = 1 Or UserList(MapData(sndMap, X, Y).UserIndex).flags.Privilegios >= 1 Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- '[Alejo-18-5]
- Case SendTarget.ToPCAreaButIndex
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If (MapData(sndMap, X, Y).UserIndex > 0) And (MapData(sndMap, X, Y).UserIndex <> sndIndex) Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- Case SendTarget.ToClanArea
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If (MapData(sndMap, X, Y).UserIndex > 0) Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- If UserList(sndIndex).GuildIndex > 0 And UserList(MapData(sndMap, X, Y).UserIndex).GuildIndex = UserList(sndIndex).GuildIndex Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- Case SendTarget.ToPartyArea
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If (MapData(sndMap, X, Y).UserIndex > 0) Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- If UserList(sndIndex).PartyIndex > 0 And UserList(MapData(sndMap, X, Y).UserIndex).PartyIndex = UserList(sndIndex).PartyIndex Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- '[CDT 17-02-2004]
- Case SendTarget.ToAdminsAreaButConsejeros
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If (MapData(sndMap, X, Y).UserIndex > 0) And (MapData(sndMap, X, Y).UserIndex <> sndIndex) Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- If UserList(MapData(sndMap, X, Y).UserIndex).flags.Privilegios > 1 Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- '[/CDT]
- Case SendTarget.ToNPCArea
- For Y = Npclist(sndIndex).Pos.Y - MinYBorder + 1 To Npclist(sndIndex).Pos.Y + MinYBorder - 1
- For X = Npclist(sndIndex).Pos.X - MinXBorder + 1 To Npclist(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If MapData(sndMap, X, Y).UserIndex > 0 Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- Case SendTarget.ToDiosesYclan
- LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
- While LoopC > 0
- If (UserList(LoopC).ConnID <> -1) Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
- Wend
- LoopC = Guild.Iterador_ProximoGM(sndIndex)
- While LoopC > 0
- If (UserList(LoopC).ConnID <> -1) Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- LoopC = Guild.Iterador_ProximoGM(sndIndex)
- Wend
- Exit Sub
- Case SendTarget.ToConsejo
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).flags.PertAlCons > 0 Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToConsejoCaos
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).flags.PertAlConsCaos > 0 Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToRolesMasters
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).flags.EsRolesMaster Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToCiudadanos
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If Not criminal(LoopC) Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToCriminales
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If criminal(LoopC) Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToReal
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).Faccion.ArmadaReal = 1 Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToCaos
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).Faccion.FuerzasCaos = 1 Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case ToCiudadanosYRMs
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If Not criminal(LoopC) Or UserList(LoopC).flags.EsRolesMaster Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case ToCriminalesYRMs
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If criminal(LoopC) Or UserList(LoopC).flags.EsRolesMaster Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case ToRealYRMs
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).Faccion.ArmadaReal = 1 Or UserList(LoopC).flags.EsRolesMaster Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case ToCaosYRMs
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).Faccion.FuerzasCaos = 1 Or UserList(LoopC).flags.EsRolesMaster Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- End Select
- End Sub
- Sub SendData2(ByVal sndRoute As SendTarget, ByVal sndIndex As Integer, ByVal sndData As String)
- On Error Resume Next
- sndData = sndData & ENDC
- Select Case sndRoute
- Case SendTarget.toindex
- If UserList(sndIndex).ConnID <> -1 Then
- Call EnviarDatosASlot2(sndIndex, sndData)
- Exit Sub
- End If
- End Select
- End Sub
- Function EstaPCarea(Index As Integer, Index2 As Integer) As Boolean
- Dim X As Integer, Y As Integer
- For Y = UserList(Index).Pos.Y - MinYBorder + 1 To UserList(Index).Pos.Y + MinYBorder - 1
- For X = UserList(Index).Pos.X - MinXBorder + 1 To UserList(Index).Pos.X + MinXBorder - 1
- If MapData(UserList(Index).Pos.Map, X, Y).UserIndex = Index2 Then
- EstaPCarea = True
- Exit Function
- End If
- Next X
- Next Y
- EstaPCarea = False
- End Function
- Function HayPCarea(Pos As WorldPos) As Boolean
- Dim X As Integer, Y As Integer
- For Y = Pos.Y - MinYBorder + 1 To Pos.Y + MinYBorder - 1
- For X = Pos.X - MinXBorder + 1 To Pos.X + MinXBorder - 1
- If X > 0 And Y > 0 And X < 101 And Y < 101 Then
- If MapData(Pos.Map, X, Y).UserIndex > 0 Then
- HayPCarea = True
- Exit Function
- End If
- End If
- Next X
- Next Y
- HayPCarea = False
- End Function
- Function HayOBJarea(Pos As WorldPos, ObjIndex As Integer) As Boolean
- Dim X As Integer, Y As Integer
- For Y = Pos.Y - MinYBorder + 1 To Pos.Y + MinYBorder - 1
- For X = Pos.X - MinXBorder + 1 To Pos.X + MinXBorder - 1
- If MapData(Pos.Map, X, Y).ObjInfo.ObjIndex = ObjIndex Then
- HayOBJarea = True
- Exit Function
- End If
- Next X
- Next Y
- HayOBJarea = False
- End Function
- Function ValidateChr(ByVal UserIndex As Integer) As Boolean
- ValidateChr = UserList(UserIndex).Char.Head <> 0 _
- And UserList(UserIndex).Char.body <> 0 _
- And ValidateSkills(UserIndex)
- End Function
- Sub ConnectUser(ByVal UserIndex As Integer, name As String, Password As String, ByVal UserSerial As String, Cuenta As String)
- Dim N As Integer
- Dim tStr As String
- On Error GoTo ERr_HS
- UserList(UserIndex).flags.Escondido = 0
- UserList(UserIndex).flags.Guerra = False
- Call SendData(SendTarget.toindex, UserIndex, 0, "|G0")
- UserList(UserIndex).flags.TargetNPC = 0
- UserList(UserIndex).flags.TargetNpcTipo = eNPCType.Comun
- UserList(UserIndex).flags.TargetObj = 0
- UserList(UserIndex).flags.TargetUser = 0
- UserList(UserIndex).Char.FX = 0
- UserList(UserIndex).SerialIndex = UserSerial
- UserList(UserIndex).flags.SeguItems = True
- If NumUsers >= MaxUsers Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERREl servidor ha alcanzado el maximo de usuarios soportado, por favor vuelva a intertarlo mas tarde.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- If AllowMultiLogins = 0 Then
- If CheckForSameIP(UserIndex, UserList(UserIndex).ip) = True Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERRNo es posible usar mas de un personaje al mismo tiempo.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- End If
- Call SendData(SendTarget.toindex, UserIndex, 0, "CUALIPC" & UserList(UserIndex).ip)
- Dim j As Integer
- If CheckForSameName(name) Then
- If UserList(NameIndex(name)).Counters.Saliendo Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERREl usuario está saliendo.")
- Else
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERRPerdon, un usuario con el mismo nombre se há logoeado.")
- End If
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- Call DB_LoadCharacter(UserIndex, name)
- If Not ValidateChr(UserIndex) Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "!!Hubo un error al cargar tu personaje, informa esto en nuestros foros http://www.swforos.com/foro/.)
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- If UserList(UserIndex).flags.Ban Then
- 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/")
- CloseSocket (UserIndex)
- Exit Sub
- End If
- If UserList(UserIndex).Invent.EscudoEqpSlot = 0 Then UserList(UserIndex).Char.ShieldAnim = NingunEscudo
- If UserList(UserIndex).Invent.CascoEqpSlot = 0 Then UserList(UserIndex).Char.CascoAnim = NingunCasco
- If UserList(UserIndex).Invent.WeaponEqpSlot = 0 Then UserList(UserIndex).Char.WeaponAnim = NingunArma
- Call UpdateUserInv(True, UserIndex, 0)
- Call UpdateUserHechizos(True, UserIndex, 0)
- If UserList(UserIndex).flags.Navegando = 1 Then
- UserList(UserIndex).Char.body = ObjData(UserList(UserIndex).Invent.BarcoObjIndex).Ropaje
- UserList(UserIndex).Char.Head = 0
- UserList(UserIndex).Char.WeaponAnim = NingunArma
- UserList(UserIndex).Char.ShieldAnim = NingunEscudo
- UserList(UserIndex).Char.CascoAnim = NingunCasco
- End If
- If UserList(UserIndex).flags.Montando = 1 Then
- UserList(UserIndex).Char.body = ObjData(UserList(UserIndex).Invent.MonturaObjIndex).Ropaje
- UserList(UserIndex).Char.Head = UserList(UserIndex).OrigChar.Head
- UserList(UserIndex).Char.WeaponAnim = NingunArma
- UserList(UserIndex).Char.ShieldAnim = NingunEscudo
- UserList(UserIndex).Char.CascoAnim = UserList(UserIndex).Char.CascoAnim
- End If
- If UserList(UserIndex).flags.Paralizado Then
- #If SeguridadAlkon Then
- If EncriptarProtocolosCriticos Then
- Call SendCryptedData(SendTarget.toindex, UserIndex, 0, "PARADOK")
- Call SendData(SendTarget.toindex, UserIndex, 0, "PU" & UserList(UserIndex).Pos.X & "," & UserList(UserIndex).Pos.Y)
- Else
- #End If
- Call SendData(SendTarget.toindex, UserIndex, 0, "PARADOK")
- Call SendData(SendTarget.toindex, UserIndex, 0, "PU" & UserList(UserIndex).Pos.X & "," & UserList(UserIndex).Pos.Y)
- #If SeguridadAlkon Then
- End If
- #End If
- End If
- 'Feo, esto tiene que ser parche cliente
- If UserList(UserIndex).flags.Estupidez = 0 Then Call SendData(SendTarget.toindex, UserIndex, 0, "NESTUP")
- '
- 'Posicion de comienzo
- If UserList(UserIndex).Pos.Map = 0 Then
- UserList(UserIndex).Pos.Map = 60
- UserList(UserIndex).Pos.X = 45
- UserList(UserIndex).Pos.Y = 55
- Else
- If Not MapaValido(UserList(UserIndex).Pos.Map) Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERREL PJ se encuenta en un mapa invalido.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- ''TELEFRAG
- If MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex <> 0 Then
- ''si estaba en comercio seguro...
- If UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu > 0 Then
- If UserList(UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu).flags.UserLogged Then
- Call FinComerciarUsu(UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu)
- 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)
- End If
- If UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).flags.UserLogged Then
- Call FinComerciarUsu(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex)
- 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...")
- End If
- End If
- Call CloseSocket(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex)
- End If
- If UserList(UserIndex).flags.Muerto = 1 Then
- Call Empollando(UserIndex)
- End If
- End If
- 'Nombre de sistema
- UserList(UserIndex).name = name
- UserList(UserIndex).Password = Password
- UserList(UserIndex).showName = True 'Por default los nombres son visibles
- Call SendData(SendTarget.toindex, UserIndex, 0, "IU" & UserIndex) 'Enviamos el User index
- Call SendData(SendTarget.toindex, UserIndex, 0, "CM" & UserList(UserIndex).Pos.Map & "," & MapInfo(UserList(UserIndex).Pos.Map).MapVersion) 'Carga el mapa
- Call SendData(SendTarget.toindex, UserIndex, 0, "TM" & MapInfo(UserList(UserIndex).Pos.Map).Music)
- 'Vemos que clase de user es (se lo usa para setear los privilegios alcrear el PJ)
- UserList(UserIndex).flags.EsRolesMaster = EsRolesMaster(name)
- If EsEventM(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.Dios
- UserList(UserIndex).flags.Rango = 6
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
- ElseIf EsDirector(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.DirectorGM
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
- ElseIf EsAdmin(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.Admin
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
- ElseIf EsDios(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.Dios
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
- ElseIf EsSemiDios(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.SemiDios
- UserList(UserIndex).flags.Rango = 2
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
- ElseIf EsConsejero(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.SemiDios ' le doi los privilegios del semi ;)
- UserList(UserIndex).flags.Rango = 1
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, True)
- Else
- UserList(UserIndex).flags.Privilegios = PlayerType.User
- End If
- ''[EL OSO]: TRAIGO ESTO ACA ARRIBA PARA DARLE EL IP!
- UserList(UserIndex).Counters.IdleCount = 0
- Call MakeUserChar(SendTarget.ToMap, 0, UserList(UserIndex).Pos.Map, UserIndex, UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y)
- Call SendData(SendTarget.toindex, UserIndex, 0, "IP" & UserList(UserIndex).Char.CharIndex)
- Call SendUserStatsBox(UserIndex)
- Call EnviarHambreYsed(UserIndex)
- If haciendoBK Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "BKW")
- Call SendData(SendTarget.toindex, UserIndex, 0, "||Servidor> Por favor espera algunos segundos, WorldSave esta ejecutandose." & FONTTYPE_SERVER)
- End If
- If EnPausa Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "BKW")
- Call SendData(SendTarget.toindex, UserIndex, 0, "||Servidor> Lo sentimos mucho pero el servidor se encuentra actualmente detenido. Intenta ingresar más tarde." & FONTTYPE_SERVER)
- End If
- If EnTesting And UserList(UserIndex).Stats.ELV >= 18 Then
- 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.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- NumUsers = NumUsers + 1
- UserList(UserIndex).flags.UserLogged = True
- MapInfo(UserList(UserIndex).Pos.Map).NumUsers = MapInfo(UserList(UserIndex).Pos.Map).NumUsers + 1
- If UserList(UserIndex).Stats.SkillPts > 0 Then
- Call EnviarSkills(UserIndex)
- Call EnviarSubirNivel(UserIndex, UserList(UserIndex).Stats.SkillPts)
- End If
- If NumUsers > DayStats.MaxUsuarios Then DayStats.MaxUsuarios = NumUsers
- If NumUsers > recordusuarios Then
- Call SendData(SendTarget.ToAll, 0, 0, "||Record de usuarios conectados simultaniamente." & "Hay " & NumUsers & " usuarios." & "~240~240~50~1~0")
- recordusuarios = NumUsers
- Call WriteVar(IniPath & "Config.bin", "INIT", "Record", str(recordusuarios))
- End If
- Dim i As Integer
- If UserList(UserIndex).NroMacotas > 0 Then
- For i = 1 To MAXMASCOTAS
- If UserList(UserIndex).MascotasType(i) > 0 Then
- UserList(UserIndex).MascotasIndex(i) = SpawnNpc(UserList(UserIndex).MascotasType(i), UserList(UserIndex).Pos, True, True)
- If UserList(UserIndex).MascotasIndex(i) > 0 Then
- Npclist(UserList(UserIndex).MascotasIndex(i)).MaestroUser = UserIndex
- Call FollowAmo(UserList(UserIndex).MascotasIndex(i))
- Else
- UserList(UserIndex).MascotasIndex(i) = 0
- End If
- End If
- Next i
- End If
- If UserList(UserIndex).flags.Navegando = 1 Then Call SendData(SendTarget.toindex, UserIndex, 0, "NAVEG")
- If UserList(UserIndex).flags.Montando = 1 Then Call SendData(SendTarget.toindex, UserIndex, 0, "EQUIT")
- If ServerSoloGMs > 0 Then
- If UserList(UserIndex).flags.Privilegios < ServerSoloGMs Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERRServidor restringido a administradores de jerarquia mayor o igual a: " & ServerSoloGMs & ". Por favor intente en unos momentos.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- End If
- If UserList(UserIndex).GuildIndex > 0 Then
- 'welcome to the show baby...
- If Not Guild.m_ConectarMiembroAClan(UserIndex, UserList(UserIndex).GuildIndex) Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "||Tu estado no te permite entrar al clan." & FONTTYPE_GUILD)
- End If
- End If
- Call SendData(SendTarget.ToPCArea, UserIndex, UserList(UserIndex).Pos.Map, "CFX" & UserList(UserIndex).Char.CharIndex & "," & FXIDs.FXWARP & "," & 0)
- Call SendData(SendTarget.toindex, UserIndex, 0, "LOGGED")
- UserList(UserIndex).Char.Account = Cuenta
- Call Guild.SendGuildNews(UserIndex)
- Dim fPath As String
- fPath = App.Path & "/don/" & UserList(UserIndex).name
- If FileExist(fPath) Then
- 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)
- End If
- If UserList(UserIndex).GuildIndex > 0 Then
- SendData SendTarget.toindex, UserIndex, 0, "||El seguro de CvC se encuentra activado." & "~0~128~0~1~0"
- UserList(UserIndex).flags.SeguroCvc = True
- End If
- If UserList(UserIndex).flags.MP = False Then
- SendData SendTarget.toindex, UserIndex, 0, "||Los mensajes privados se encuentran activados." & FONTTYPE_INFO
- Else
- SendData SendTarget.toindex, UserIndex, 0, "||Los mensajes privados se encuentran desactivados." & FONTTYPE_INFO
- End If
- If UserList(UserIndex).Faccion.RecompensasReal = 4 Then
- UserList(UserIndex).flags.EsCuartaJerarquia = True
- End If
- If HayDesafio = False Then
- UserList(UserIndex).flags.YaParticipoDesafio = 0
- UserList(UserIndex).flags.UltiDesafiante = vbNullString
- Else
- If UserList(UserCreaDesafio).name <> UserList(UserIndex).flags.UltiDesafiante Then
- UserList(UserIndex).flags.UltiDesafiante = vbNullString
- UserList(UserIndex).flags.YaParticipoDesafio = 0
- End If
- End If
- If UserList(UserIndex).GuildIndex > 0 Then
- SendData SendTarget.toindex, UserIndex, 0, "||Castillo Norte pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Norte") & FONTTYPE_GUILD
- SendData SendTarget.toindex, UserIndex, 0, "||Castillo Sur pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Sur") & FONTTYPE_GUILD
- SendData SendTarget.toindex, UserIndex, 0, "||Castillo Este pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Este") & FONTTYPE_GUILD
- SendData SendTarget.toindex, UserIndex, 0, "||Castillo Oeste pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Oeste") & FONTTYPE_GUILD
- End If
- If UserList(UserIndex).flags.NoActualizado Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "REAU")
- End If
- If Lloviendo Then Call SendData(SendTarget.toindex, UserIndex, 0, "LLU")
- tStr = Guild.a_ObtenerRechazoDeChar(UserList(UserIndex).name)
- If tStr <> vbNullString Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "!!Tu solicitud de ingreso al clan ha sido rechazada. El clan te explica que: " & tStr & ENDC)
- End If
- Call SendLabels(UserIndex)
- Call SendData(SendTarget.toindex, UserIndex, 0, "XY" & MapInfo(UserList(UserIndex).Pos.Map).name & " [" & UserList(UserIndex).Pos.Map & "]")
- Call MostrarNumUsers
- N = FreeFile
- Open App.Path & "\logs\numusers.log" For Output As N
- Print #N, NumUsers
- Close #N
- N = FreeFile
- 'Log
- Open App.Path & "\logs\Connect.log" For Append Shared As #N
- Print #N, UserList(UserIndex).name & " ha entrado al juego. UserIndex:" & UserIndex & " " & Time & " " & Date
- Close #N
- ERr_HS:
- End Sub
- Sub SendLabels(UserIndex As Integer)
- If UserList(UserIndex).Invent.AnilloEqpObjIndex Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "RMX" & ObjData(UserList(UserIndex).Invent.AnilloEqpObjIndex).DefensaMagicaMin & "/" & ObjData(UserList(UserIndex).Invent.AnilloEqpObjIndex).DefensaMagicaMax)
- Else
- Call SendData(SendTarget.toindex, UserIndex, 0, "RMX0/0")
- End If
- If UserList(UserIndex).Invent.ArmourEqpObjIndex Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ARM" & ObjData(UserList(UserIndex).Invent.ArmourEqpObjIndex).MinDef & "/" & ObjData(UserList(UserIndex).Invent.ArmourEqpObjIndex).MaxDef)
- Else
- Call SendData(SendTarget.toindex, UserIndex, 0, "ARM0/0")
- End If
- If UserList(UserIndex).Invent.CascoEqpObjIndex Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "GHX" & ObjData(UserList(UserIndex).Invent.CascoEqpObjIndex).MinDef & "/" & ObjData(UserList(UserIndex).Invent.CascoEqpObjIndex).MaxDef)
- Else
- Call SendData(SendTarget.toindex, UserIndex, 0, "GHX0/0")
- End If
- If UserList(UserIndex).Invent.WeaponEqpObjIndex Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "WEA" & ObjData(UserList(UserIndex).Invent.WeaponEqpObjIndex).MinHIT & "/" & ObjData(UserList(UserIndex).Invent.WeaponEqpObjIndex).MaxHIT)
- Else
- Call SendData(SendTarget.toindex, UserIndex, 0, "WEA0/0")
- End If
- End Sub
- Sub ResetFacciones(ByVal UserIndex As Integer)
- With UserList(UserIndex).Faccion
- .ArmadaReal = 0
- .FuerzasCaos = 0
- .CiudadanosMatados = 0
- .CriminalesMatados = 0
- .RecibioArmaduraCaos = 0
- .RecibioArmaduraReal = 0
- .RecibioExpInicialCaos = 0
- .RecibioExpInicialReal = 0
- .RecompensasCaos = 0
- .RecompensasReal = 0
- .Reenlistadas = 0
- End With
- End Sub
- Sub ResetContadores(ByVal UserIndex As Integer)
- With UserList(UserIndex).Counters
- .AGUACounter = 0
- .AttackCounter = 0
- .Ceguera = 0
- .COMCounter = 0
- .Estupidez = 0
- .Frio = 0
- .HPCounter = 0
- .IdleCount = 0
- .Invisibilidad = 0
- .Paralisis = 0
- .Pasos = 0
- .Pena = 0
- .PiqueteC = 0
- .STACounter = 0
- .Veneno = 0
- .Trabajando = 0
- .Ocultando = 0
- .TimerLanzarSpell = 0
- .TimerPuedeAtacar = 0
- .TimerPuedeTrabajar = 0
- .TimerUsar = 0
- End With
- End Sub
- Sub ResetCharInfo(ByVal UserIndex As Integer)
- '*************************************************
- 'Author: Unknown
- 'Last modified: 03/15/2006
- 'Resetea todos los valores generales y las stats
- '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
- '*************************************************
- With UserList(UserIndex).Char
- .body = 0
- .CascoAnim = 0
- .CharIndex = 0
- .FX = 0
- .Head = 0
- .loops = 0
- .heading = 0
- .loops = 0
- .ShieldAnim = 0
- .WeaponAnim = 0
- End With
- End Sub
- Sub ResetBasicUserInfo(ByVal UserIndex As Integer)
- '*************************************************
- 'Author: Unknown
- 'Last modified: 03/15/2006
- 'Resetea todos los valores generales y las stats
- '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
- '*************************************************
- With UserList(UserIndex)
- .name = ""
- .modName = ""
- .Password = ""
- .Desc = ""
- .DescRM = ""
- .Pos.Map = 0
- .Pos.X = 0
- .Pos.Y = 0
- .ip = ""
- .RDBuffer = ""
- .clase = ""
- .email = ""
- .genero = ""
- .Hogar = ""
- .raza = ""
- .RandKey = ""
- .PrevCheckSum = 0
- .PacketNumber = 0
- .EmpoCont = 0
- .PartyIndex = 0
- .PartySolicitud = 0
- With .Stats
- .Banco = 0
- .ELV = 0
- .ELU = 0
- .Exp = 0
- .def = 0
- .CriminalesMatados = 0
- .NPCsMuertos = 0
- .UsuariosMatados = 0
- .SkillPts = 0
- End With
- End With
- End Sub
- Sub ResetReputacion(ByVal UserIndex As Integer)
- '*************************************************
- 'Author: Unknown
- 'Last modified: 03/15/2006
- 'Resetea todos los valores generales y las stats
- '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
- '*************************************************
- With UserList(UserIndex).Reputacion
- .AsesinoRep = 0
- .BandidoRep = 0
- .BurguesRep = 0
- .LadronesRep = 0
- .NobleRep = 0
- .PlebeRep = 0
- .NobleRep = 0
- .Promedio = 0
- End With
- End Sub
- Sub ResetGuildInfo(ByVal UserIndex As Integer)
- If UserList(UserIndex).... > 0 Then
- Call Guild.GMDejaDeEscucharClan(UserIndex, UserList(UserIndex)....)
Estas usando un Mod Semper widia y por eso no encontras el case "OLOGIN" o "NLOGIN"
135![Aprendiz [4] Aprendiz [4]](./images/ranks/Rango9.gif)
AngelDsm escribió:Penyair escribió:AngelDsm escribió:
Aca tenes te deje todo el Modulo por las dudas. :
- ption Explicit
- Public TempSerial As String
- Public Enum SendTarget
- toindex = 0 'Envia a un solo User
- ToAll = 1 'A todos los Users
- ToMap = 2 'Todos los Usuarios en el mapa
- ToPCArea = 3 'Todos los Users en el area de un user determinado
- ToNone = 4 'Ninguno
- ToAllButIndex = 5 'Todos menos el index
- ToMapButIndex = 6 'Todos en el mapa menos el indice
- ToGM = 7
- ToNPCArea = 8 'Todos los Users en el area de un user determinado
- ToGuildMembers = 9
- ToAdmins = 10
- ToPCAreaButIndex = 11
- ToAdminsAreaButConsejeros = 12
- ToDiosesYclan = 13
- ToConsejo = 14
- ToClanArea = 15
- ToConsejoCaos = 16
- ToRolesMasters = 17
- ToDeadArea = 18
- ToCiudadanos = 19
- ToCriminales = 20
- ToPartyArea = 21
- ToReal = 22
- ToCaos = 23
- ToCiudadanosYRMs = 24
- ToCriminalesYRMs = 25
- ToRealYRMs = 26
- ToCaosYRMs = 27
- End Enum
- Sub DarCuerpoYCabeza(ByRef UserBody As Integer, ByRef UserHead As Integer, ByVal raza As String, ByVal Gen As String)
- 'TODO: Poner las heads en arrays, así se acceden por índices
- 'y no hay problemas de discontinuidad de los índices.
- 'También se debe usar enums para raza y sexo
- Select Case Gen
- Case "Hombre"
- Select Case raza
- Case "Humano"
- UserHead = RandomNumber(1, 30)
- UserBody = 1
- Case "Elfo"
- UserHead = RandomNumber(1, 13) + 100
- If UserHead = 113 Then UserHead = 201 'Un índice no es continuo.... :S muy feo
- UserBody = 2
- Case "Elfo Oscuro"
- UserHead = RandomNumber(1, 8) + 201
- UserBody = 3
- Case "Enano"
- UserHead = RandomNumber(1, 5) + 300
- UserBody = 52
- Case "Gnomo"
- UserHead = RandomNumber(1, 6) + 400
- UserBody = 52
- Case Else
- UserHead = 1
- UserBody = 1
- End Select
- Case "Mujer"
- Select Case raza
- Case "Humano"
- UserHead = RandomNumber(1, 7) + 69
- UserBody = 1
- Case "Elfo"
- UserHead = RandomNumber(1, 7) + 169
- UserBody = 2
- Case "Elfo Oscuro"
- UserHead = RandomNumber(1, 11) + 269
- UserBody = 3
- Case "Gnomo"
- UserHead = RandomNumber(1, 5) + 469
- UserBody = 52
- Case "Enano"
- UserHead = RandomNumber(1, 3) + 369
- UserBody = 52
- Case Else
- UserHead = 70
- UserBody = 1
- End Select
- End Select
- End Sub
- Function AsciiValidos(ByVal cad As String) As Boolean
- Dim car As Byte
- Dim i As Integer
- cad = LCase$(cad)
- For i = 1 To Len(cad)
- car = Asc(mid$(cad, i, 1))
- If (car < 97 Or car > 122) And (car <> 255) And (car <> 32) Then
- AsciiValidos = False
- Exit Function
- End If
- Next i
- AsciiValidos = True
- End Function
- Function Numeric(ByVal cad As String) As Boolean
- Dim car As Byte
- Dim i As Integer
- cad = LCase$(cad)
- For i = 1 To Len(cad)
- car = Asc(mid$(cad, i, 1))
- If (car < 48 Or car > 57) Then
- Numeric = False
- Exit Function
- End If
- Next i
- Numeric = True
- End Function
- Function NombrePermitido(ByVal Nombre As String) As Boolean
- Dim i As Integer
- For i = 1 To UBound(ForbidenNames)
- If InStr(Nombre, ForbidenNames(i)) Then
- NombrePermitido = False
- Exit Function
- End If
- Next i
- NombrePermitido = True
- End Function
- Function ValidateSkills(ByVal UserIndex As Integer) As Boolean
- Dim LoopC As Integer
- For LoopC = 1 To NUMSKILLS
- If UserList(UserIndex).Stats.UserSkills(LoopC) < 0 Then
- Exit Function
- If UserList(UserIndex).Stats.UserSkills(LoopC) > 100 Then UserList(UserIndex).Stats.UserSkills(LoopC) = 100
- End If
- Next LoopC
- ValidateSkills = True
- End Function
- Sub ConnectNewUser(UserIndex As Integer, name As String, Password As String, UserRaza As String, UserSexo As String, UserClase As String, _
- US1 As String, US2 As String, US3 As String, US4 As String, US5 As String, _
- US6 As String, US7 As String, US8 As String, US9 As String, US10 As String, _
- US11 As String, US12 As String, US13 As String, US14 As String, US15 As String, _
- US16 As String, US17 As String, US18 As String, US19 As String, US20 As String, _
- US21 As String, UserEmail As String, Hogar As String, Cuenta As String, ByVal USerial As String)
- If FileExist(CharPath & name & ".swao", vbNormal) = True Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "INF" & "Ya existe el personaje.")
- Exit Sub
- End If
- If Not AsciiValidos(name) Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERRNombre invalido.")
- Exit Sub
- End If
- Dim LoopC As Integer
- If UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = 0 Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERRDebe tirar los dados antes de poder crear un personaje.")
- Exit Sub
- End If
- UserList(UserIndex).flags.Muerto = 0
- UserList(UserIndex).flags.Escondido = 0
- UserList(UserIndex).name = name
- UserList(UserIndex).clase = UserClase
- UserList(UserIndex).raza = UserRaza
- UserList(UserIndex).genero = UserSexo
- UserList(UserIndex).email = UserEmail
- UserList(UserIndex).Hogar = Hogar
- Select Case UCase$(UserRaza)
- Case "HUMANO"
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 1
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 1
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) + 2
- Case "ELFO"
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 4
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 2
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) + 2
- Case "ELFO OSCURO"
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 2
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 2
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 2
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) - 3
- Case "ENANO"
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) + 3
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) + 3
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) - 6
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) - 1
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) - 2
- Case "GNOMO"
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza) - 4
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia) + 3
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) + 3
- UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma) + 1
- End Select
- UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Fuerza) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Fuerza)
- UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Agilidad) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad)
- UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Constitucion) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion)
- UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Carisma) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma)
- UserList(UserIndex).Stats.UserAtributosBackUP(eAtributos.Inteligencia) = UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)
- '/columdruMysql
- UserList(UserIndex).Stats.UserSkills(1) = Val(US1)
- UserList(UserIndex).Stats.UserSkills(2) = Val(US2)
- UserList(UserIndex).Stats.UserSkills(3) = Val(US3)
- UserList(UserIndex).Stats.UserSkills(4) = Val(US4)
- UserList(UserIndex).Stats.UserSkills(5) = Val(US5)
- UserList(UserIndex).Stats.UserSkills(6) = Val(US6)
- UserList(UserIndex).Stats.UserSkills(7) = Val(US7)
- UserList(UserIndex).Stats.UserSkills(8) = Val(US8)
- UserList(UserIndex).Stats.UserSkills(9) = Val(US9)
- UserList(UserIndex).Stats.UserSkills(10) = Val(US10)
- UserList(UserIndex).Stats.UserSkills(11) = Val(US11)
- UserList(UserIndex).Stats.UserSkills(12) = Val(US12)
- UserList(UserIndex).Stats.UserSkills(13) = Val(US13)
- UserList(UserIndex).Stats.UserSkills(14) = Val(US14)
- UserList(UserIndex).Stats.UserSkills(15) = Val(US15)
- UserList(UserIndex).Stats.UserSkills(16) = Val(US16)
- UserList(UserIndex).Stats.UserSkills(17) = Val(US17)
- UserList(UserIndex).Stats.UserSkills(18) = Val(US18)
- UserList(UserIndex).Stats.UserSkills(19) = Val(US19)
- UserList(UserIndex).Stats.UserSkills(20) = Val(US20)
- UserList(UserIndex).Stats.UserSkills(21) = Val(US21)
- Dim Totalskpts As Integer
- Totalskpts = 0
- For LoopC = 1 To NUMSKILLS
- Totalskpts = Totalskpts + Abs(UserList(UserIndex).Stats.UserSkills(LoopC))
- Next LoopC
- If Totalskpts > 10 Then
- Call LogHackAttemp(UserList(UserIndex).name & " intento hackear los skills.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- UserList(UserIndex).Password = Password
- UserList(UserIndex).Char.heading = eHeading.SOUTH
- Call DarCuerpoYCabeza(UserList(UserIndex).Char.body, UserList(UserIndex).Char.Head, UserList(UserIndex).raza, UserList(UserIndex).genero)
- UserList(UserIndex).OrigChar = UserList(UserIndex).Char
- UserList(UserIndex).Char.WeaponAnim = NingunArma
- UserList(UserIndex).Char.ShieldAnim = NingunEscudo
- UserList(UserIndex).Char.CascoAnim = NingunCasco
- UserList(UserIndex).Stats.MET = 1
- Dim MiInt As Long
- MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Constitucion) \ 3)
- UserList(UserIndex).Stats.MaxHP = 15 + MiInt
- UserList(UserIndex).Stats.MinHP = 15 + MiInt
- MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Agilidad) \ 6)
- If MiInt = 1 Then MiInt = 2
- UserList(UserIndex).Stats.MaxSta = 20 * MiInt
- UserList(UserIndex).Stats.MinSta = 20 * MiInt
- UserList(UserIndex).Stats.MaxAGU = 100
- UserList(UserIndex).Stats.MinAGU = 100
- UserList(UserIndex).Stats.MaxHam = 100
- UserList(UserIndex).Stats.MinHam = 100
- '<-----------------MANA----------------------->
- If UCase$(UserClase) = "MAGO" Then
- MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)) / 3
- UserList(UserIndex).Stats.MaxMAN = 100 + MiInt
- UserList(UserIndex).Stats.MinMAN = 100 + MiInt
- ElseIf UCase$(UserClase) = "CLERIGO" Or UCase$(UserClase) = "DRUIDA" _
- Or UCase$(UserClase) = "BARDO" Or UCase$(UserClase) = "ASESINO" Then
- MiInt = RandomNumber(1, UserList(UserIndex).Stats.UserAtributos(eAtributos.Inteligencia)) / 4
- UserList(UserIndex).Stats.MaxMAN = 50
- UserList(UserIndex).Stats.MinMAN = 50
- Else
- UserList(UserIndex).Stats.MaxMAN = 0
- UserList(UserIndex).Stats.MinMAN = 0
- End If
- If UCase$(UserClase) = "MAGO" Or UCase$(UserClase) = "CLERIGO" Or _
- UCase$(UserClase) = "DRUIDA" Or UCase$(UserClase) = "BARDO" Or _
- UCase$(UserClase) = "ASESINO" Or UCase$(UserClase) = "PALADIN" Then
- UserList(UserIndex).Stats.UserHechizos(1) = 2
- End If
- UserList(UserIndex).Stats.MaxHIT = 2
- UserList(UserIndex).Stats.MinHIT = 1
- UserList(UserIndex).Stats.GLD = 0
- UserList(UserIndex).Stats.Exp = 0
- UserList(UserIndex).Stats.ELU = 300
- UserList(UserIndex).Stats.ELV = 1
- UserList(UserIndex).Invent.NroItems = 4
- UserList(UserIndex).Invent.Object(1).ObjIndex = 467
- UserList(UserIndex).Invent.Object(1).Amount = 100
- UserList(UserIndex).Invent.Object(2).ObjIndex = 468
- UserList(UserIndex).Invent.Object(2).Amount = 100
- UserList(UserIndex).Ranking.DuelosGanados = 0
- UserList(UserIndex).Ranking.DuelosParejaGanados = 0
- UserList(UserIndex).Ranking.MaxRondasDesafio = 0
- UserList(UserIndex).Ranking.TorneosGanados = 0
- UserList(UserIndex).Invent.Object(3).ObjIndex = 460
- UserList(UserIndex).Invent.Object(3).Amount = 1
- UserList(UserIndex).Invent.Object(3).Equipped = 1
- If UCase$(UserClase) = "MAGO" Or UCase$(UserClase) = "BARDO" Or _
- UCase$(UserClase) = "PALADIN" Or UCase$(UserClase) = "DRUIDA" Or UCase$(UserClase) = "CLERIGO" Then
- UserList(UserIndex).Invent.Object(5).ObjIndex = 461 'POTA ROJA
- UserList(UserIndex).Invent.Object(5).Amount = 150
- UserList(UserIndex).Invent.Object(6).ObjIndex = 975 'POTA AZUL
- UserList(UserIndex).Invent.Object(6).Amount = 150
- Else
- UserList(UserIndex).Invent.Object(5).ObjIndex = 461 'POTA ROJA
- UserList(UserIndex).Invent.Object(5).Amount = 150
- End If
- If Not UCase$(UserClase) = "MAGO" Then
- UserList(UserIndex).Invent.Object(7).ObjIndex = 462 'POTA VERDE
- UserList(UserIndex).Invent.Object(7).Amount = 150
- UserList(UserIndex).Invent.Object(8).ObjIndex = 1078 'POTA AMARILLA
- UserList(UserIndex).Invent.Object(8).Amount = 150
- End If
- Select Case UserRaza
- Case "Humano"
- UserList(UserIndex).Invent.Object(4).ObjIndex = 463
- Case "Elfo"
- UserList(UserIndex).Invent.Object(4).ObjIndex = 464
- Case "Elfo Oscuro"
- UserList(UserIndex).Invent.Object(4).ObjIndex = 465
- Case "Enano"
- UserList(UserIndex).Invent.Object(4).ObjIndex = 466
- Case "Gnomo"
- UserList(UserIndex).Invent.Object(4).ObjIndex = 466
- End Select
- UserList(UserIndex).Invent.Object(4).Amount = 1
- UserList(UserIndex).Invent.Object(4).Equipped = 1
- UserList(UserIndex).Invent.Object(9).ObjIndex = 41
- UserList(UserIndex).Invent.Object(9).Amount = 1
- UserList(UserIndex).Invent.ArmourEqpSlot = 4
- UserList(UserIndex).Invent.ArmourEqpObjIndex = UserList(UserIndex).Invent.Object(4).ObjIndex
- UserList(UserIndex).Invent.WeaponEqpObjIndex = UserList(UserIndex).Invent.Object(3).ObjIndex
- UserList(UserIndex).Invent.WeaponEqpSlot = 3
- UserList(UserIndex).Stats.TPoints = 0
- UserList(UserIndex).FaccionNumber = 2
- UserList(UserIndex).flags.Caballero = 0
- UserList(UserIndex).flags.IsMaxLevel = False
- UserList(UserIndex).Char.Account = Cuenta
- Call AddPjCuenta(Cuenta, name)
- Call DB_SaveCharacter(UserIndex, name)
- Call ConnectUser(UserIndex, name, Password, USerial, Cuenta)
- Call SendData(SendTarget.toindex, UserIndex, 0, "CUD" & (1 + 1) & "," & name & "," & UserList(UserIndex).Char.body & "," & UserList(UserIndex).Char.Head)
- End Sub
- Sub CloseSocket(ByVal UserIndex As Integer)
- On Error GoTo errhandler
- If UserIndex = LastUser Then
- Do Until UserList(LastUser).flags.UserLogged
- LastUser = LastUser - 1
- If LastUser < 1 Then Exit Do
- Loop
- End If
- If UserList(UserIndex).ConnID <> -1 Then
- Call CloseSocketSL(UserIndex)
- End If
- If UserList(UserIndex).ComUsu.DestUsu > 0 Then
- If UserList(UserList(UserIndex).ComUsu.DestUsu).flags.UserLogged Then
- If UserList(UserList(UserIndex).ComUsu.DestUsu).ComUsu.DestUsu = UserIndex Then
- Call SendData(SendTarget.toindex, UserList(UserIndex).ComUsu.DestUsu, 0, "||Comercio cancelado por el otro usuario" & FONTTYPE_TALK)
- Call FinComerciarUsu(UserList(UserIndex).ComUsu.DestUsu)
- End If
- End If
- End If
- If UserList(UserIndex).flags.Teleports.Creado = True Then
- UserList(UserIndex).flags.Teleports.Creado = False
- 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)
- MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.Map = 0
- MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.X = 0
- MapData(UserList(UserIndex).flags.Teleports.tMap, UserList(UserIndex).flags.Teleports.tX, UserList(UserIndex).flags.Teleports.tY).TileExit.Y = 0
- UserList(UserIndex).flags.Teleports.tMap = 0
- UserList(UserIndex).flags.Teleports.TimeCount = 0
- UserList(UserIndex).flags.Teleports.tX = 0
- UserList(UserIndex).flags.Teleports.tY = 0
- UserList(UserIndex).flags.Teleports.Creado = False
- End If
- If UserList(UserIndex).flags.UserLogged Then
- If NumUsers > 0 Then NumUsers = NumUsers - 1
- Call CloseUser(UserIndex)
- Else
- Call ResetUserSlot(UserIndex)
- End If
- UserList(UserIndex).ConnID = -1
- UserList(UserIndex).ConnIDValida = False
- UserList(UserIndex).NumeroPaquetesPorMiliSec = 0
- Exit Sub
- errhandler:
- UserList(UserIndex).ConnID = -1
- UserList(UserIndex).ConnIDValida = False
- UserList(UserIndex).NumeroPaquetesPorMiliSec = 0
- Call ResetUserSlot(UserIndex)
- Call LogError("CloseSocket - Error = " & Err.Number & " - Descripción = " & Err.Description & " - UserIndex = " & UserIndex)
- End Sub
- Sub CloseSocketSL(ByVal UserIndex As Integer)
- If UserList(UserIndex).ConnID <> -1 And UserList(UserIndex).ConnIDValida Then
- Call BorraSlotSock(UserList(UserIndex).ConnID)
- Call WSApiCloseSocket(UserList(UserIndex).ConnID)
- UserList(UserIndex).ConnIDValida = False
- End If
- End Sub
- Public Function EnviarDatosASlot(ByVal UserIndex As Integer, Datos As String) As Long
- On Error GoTo Err
- Dim Ret As Long
- Ret = WsApiEnviar(UserIndex, Datos)
- If Ret <> 0 And Ret <> WSAEWOULDBLOCK Then
- Call CloseSocketSL(UserIndex)
- Call Cerrar_Usuario(UserIndex)
- End If
- EnviarDatosASlot = Ret
- Exit Function
- Err:
- '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)
- End Function
- Public Function EnviarDatosASlot2(ByVal UserIndex As Integer, Datos As String) As Long
- #If UsarQueSocket = 1 Then
- On Error GoTo Err
- Dim Ret As Long
- Ret = WsApiEnviar(UserIndex, Datos)
- If Ret <> 0 And Ret <> WSAEWOULDBLOCK Then
- Call CloseSocketSL(UserIndex)
- Call Cerrar_Usuario(UserIndex)
- End If
- EnviarDatosASlot2 = Ret
- Exit Function
- Err:
- '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)
- #ElseIf UsarQueSocket = 0 Then '**********************************************
- Dim Encolar As Boolean
- Encolar = False
- EnviarDatosASlot2 = 0
- If UserList(UserIndex).ColaSalida.Count <= 0 Then
- If MainView.Socket2(UserIndex).Write(Datos, Len(Datos)) < 0 Then
- If MainView.Socket2(UserIndex).LastError = WSAEWOULDBLOCK Then
- UserList(UserIndex).SockPuedoEnviar = False
- Encolar = True
- Else
- Call Cerrar_Usuario(UserIndex)
- End If
- End If
- Else
- Encolar = True
- End If
- If Encolar Then
- Debug.Print "Encolando..."
- UserList(UserIndex).ColaSalida.Add Datos
- End If
- #ElseIf UsarQueSocket = 2 Then '**********************************************
- Dim Encolar As Boolean
- Dim Ret As Long
- Encolar = False
- '//
- '// Valores de retorno:
- '// 0: Todo OK
- '// 1: WSAEWOULDBLOCK
- '// 2: Error critico
- '//
- If UserList(UserIndex).ColaSalida.Count <= 0 Then
- Ret = MainView.Serv.Enviar(UserList(UserIndex).ConnID, Datos, Len(Datos))
- If Ret = 1 Then
- Encolar = True
- ElseIf Ret = 2 Then
- Call CloseSocketSL(UserIndex)
- Call Cerrar_Usuario(UserIndex)
- End If
- Else
- Encolar = True
- End If
- If Encolar Then
- Debug.Print "Encolando..."
- UserList(UserIndex).ColaSalida.Add Datos
- End If
- #End If '**********************************************
- End Function
- Sub SendData(ByVal sndRoute As SendTarget, ByVal sndIndex As Integer, ByVal sndMap As Integer, ByVal sndData As String)
- On Error Resume Next
- Dim LoopC As Integer
- Dim X As Integer
- Dim Y As Integer
- If sndData <> "BUENO" Then
- sndData = Security.Security.NSC_Encryption(sndData, Security.Keys(1))
- End If
- sndData = sndData & ENDC
- Select Case sndRoute
- Case SendTarget.ToPCArea
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If MapData(sndMap, X, Y).UserIndex > 0 Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- Case SendTarget.toindex
- If UserList(sndIndex).ConnID <> -1 Then
- Call EnviarDatosASlot(sndIndex, sndData)
- Exit Sub
- End If
- Case SendTarget.ToNone
- Exit Sub
- Case SendTarget.ToAdmins
- For LoopC = 1 To LastUser
- If UserList(LoopC).ConnID <> -1 Then
- If UserList(LoopC).flags.Privilegios > 0 Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToAll
- For LoopC = 1 To LastUser
- If UserList(LoopC).ConnID <> -1 Then
- If UserList(LoopC).flags.UserLogged Then 'Esta logeado como usuario?
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToAllButIndex
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) And (LoopC <> sndIndex) Then
- If UserList(LoopC).flags.UserLogged Then 'Esta logeado como usuario?
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToMap
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).flags.UserLogged Then
- If UserList(LoopC).Pos.Map = sndMap Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToMapButIndex
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) And LoopC <> sndIndex Then
- If UserList(LoopC).Pos.Map = sndMap Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToGuildMembers
- LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
- While LoopC > 0
- If (UserList(LoopC).ConnID <> -1) Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
- Wend
- Exit Sub
- Case SendTarget.ToDeadArea
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If MapData(sndMap, X, Y).UserIndex > 0 Then
- If UserList(MapData(sndMap, X, Y).UserIndex).flags.Muerto = 1 Or UserList(MapData(sndMap, X, Y).UserIndex).flags.Privilegios >= 1 Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- '[Alejo-18-5]
- Case SendTarget.ToPCAreaButIndex
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If (MapData(sndMap, X, Y).UserIndex > 0) And (MapData(sndMap, X, Y).UserIndex <> sndIndex) Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- Case SendTarget.ToClanArea
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If (MapData(sndMap, X, Y).UserIndex > 0) Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- If UserList(sndIndex).GuildIndex > 0 And UserList(MapData(sndMap, X, Y).UserIndex).GuildIndex = UserList(sndIndex).GuildIndex Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- Case SendTarget.ToPartyArea
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If (MapData(sndMap, X, Y).UserIndex > 0) Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- If UserList(sndIndex).PartyIndex > 0 And UserList(MapData(sndMap, X, Y).UserIndex).PartyIndex = UserList(sndIndex).PartyIndex Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- '[CDT 17-02-2004]
- Case SendTarget.ToAdminsAreaButConsejeros
- For Y = UserList(sndIndex).Pos.Y - MinYBorder + 1 To UserList(sndIndex).Pos.Y + MinYBorder - 1
- For X = UserList(sndIndex).Pos.X - MinXBorder + 1 To UserList(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If (MapData(sndMap, X, Y).UserIndex > 0) And (MapData(sndMap, X, Y).UserIndex <> sndIndex) Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- If UserList(MapData(sndMap, X, Y).UserIndex).flags.Privilegios > 1 Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- '[/CDT]
- Case SendTarget.ToNPCArea
- For Y = Npclist(sndIndex).Pos.Y - MinYBorder + 1 To Npclist(sndIndex).Pos.Y + MinYBorder - 1
- For X = Npclist(sndIndex).Pos.X - MinXBorder + 1 To Npclist(sndIndex).Pos.X + MinXBorder - 1
- If InMapBounds(X, Y) Then
- If MapData(sndMap, X, Y).UserIndex > 0 Then
- If UserList(MapData(sndMap, X, Y).UserIndex).ConnID <> -1 Then
- Call EnviarDatosASlot(MapData(sndMap, X, Y).UserIndex, sndData)
- End If
- End If
- End If
- Next X
- Next Y
- Exit Sub
- Case SendTarget.ToDiosesYclan
- LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
- While LoopC > 0
- If (UserList(LoopC).ConnID <> -1) Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- LoopC = Guild.m_Iterador_ProximoUserIndex(sndIndex)
- Wend
- LoopC = Guild.Iterador_ProximoGM(sndIndex)
- While LoopC > 0
- If (UserList(LoopC).ConnID <> -1) Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- LoopC = Guild.Iterador_ProximoGM(sndIndex)
- Wend
- Exit Sub
- Case SendTarget.ToConsejo
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).flags.PertAlCons > 0 Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToConsejoCaos
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).flags.PertAlConsCaos > 0 Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToRolesMasters
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).flags.EsRolesMaster Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToCiudadanos
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If Not criminal(LoopC) Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToCriminales
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If criminal(LoopC) Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToReal
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).Faccion.ArmadaReal = 1 Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case SendTarget.ToCaos
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).Faccion.FuerzasCaos = 1 Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case ToCiudadanosYRMs
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If Not criminal(LoopC) Or UserList(LoopC).flags.EsRolesMaster Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case ToCriminalesYRMs
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If criminal(LoopC) Or UserList(LoopC).flags.EsRolesMaster Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case ToRealYRMs
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).Faccion.ArmadaReal = 1 Or UserList(LoopC).flags.EsRolesMaster Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- Case ToCaosYRMs
- For LoopC = 1 To LastUser
- If (UserList(LoopC).ConnID <> -1) Then
- If UserList(LoopC).Faccion.FuerzasCaos = 1 Or UserList(LoopC).flags.EsRolesMaster Then
- Call EnviarDatosASlot(LoopC, sndData)
- End If
- End If
- Next LoopC
- Exit Sub
- End Select
- End Sub
- Sub SendData2(ByVal sndRoute As SendTarget, ByVal sndIndex As Integer, ByVal sndData As String)
- On Error Resume Next
- sndData = sndData & ENDC
- Select Case sndRoute
- Case SendTarget.toindex
- If UserList(sndIndex).ConnID <> -1 Then
- Call EnviarDatosASlot2(sndIndex, sndData)
- Exit Sub
- End If
- End Select
- End Sub
- Function EstaPCarea(Index As Integer, Index2 As Integer) As Boolean
- Dim X As Integer, Y As Integer
- For Y = UserList(Index).Pos.Y - MinYBorder + 1 To UserList(Index).Pos.Y + MinYBorder - 1
- For X = UserList(Index).Pos.X - MinXBorder + 1 To UserList(Index).Pos.X + MinXBorder - 1
- If MapData(UserList(Index).Pos.Map, X, Y).UserIndex = Index2 Then
- EstaPCarea = True
- Exit Function
- End If
- Next X
- Next Y
- EstaPCarea = False
- End Function
- Function HayPCarea(Pos As WorldPos) As Boolean
- Dim X As Integer, Y As Integer
- For Y = Pos.Y - MinYBorder + 1 To Pos.Y + MinYBorder - 1
- For X = Pos.X - MinXBorder + 1 To Pos.X + MinXBorder - 1
- If X > 0 And Y > 0 And X < 101 And Y < 101 Then
- If MapData(Pos.Map, X, Y).UserIndex > 0 Then
- HayPCarea = True
- Exit Function
- End If
- End If
- Next X
- Next Y
- HayPCarea = False
- End Function
- Function HayOBJarea(Pos As WorldPos, ObjIndex As Integer) As Boolean
- Dim X As Integer, Y As Integer
- For Y = Pos.Y - MinYBorder + 1 To Pos.Y + MinYBorder - 1
- For X = Pos.X - MinXBorder + 1 To Pos.X + MinXBorder - 1
- If MapData(Pos.Map, X, Y).ObjInfo.ObjIndex = ObjIndex Then
- HayOBJarea = True
- Exit Function
- End If
- Next X
- Next Y
- HayOBJarea = False
- End Function
- Function ValidateChr(ByVal UserIndex As Integer) As Boolean
- ValidateChr = UserList(UserIndex).Char.Head <> 0 _
- And UserList(UserIndex).Char.body <> 0 _
- And ValidateSkills(UserIndex)
- End Function
- Sub ConnectUser(ByVal UserIndex As Integer, name As String, Password As String, ByVal UserSerial As String, Cuenta As String)
- Dim N As Integer
- Dim tStr As String
- On Error GoTo ERr_HS
- UserList(UserIndex).flags.Escondido = 0
- UserList(UserIndex).flags.Guerra = False
- Call SendData(SendTarget.toindex, UserIndex, 0, "|G0")
- UserList(UserIndex).flags.TargetNPC = 0
- UserList(UserIndex).flags.TargetNpcTipo = eNPCType.Comun
- UserList(UserIndex).flags.TargetObj = 0
- UserList(UserIndex).flags.TargetUser = 0
- UserList(UserIndex).Char.FX = 0
- UserList(UserIndex).SerialIndex = UserSerial
- UserList(UserIndex).flags.SeguItems = True
- If NumUsers >= MaxUsers Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERREl servidor ha alcanzado el maximo de usuarios soportado, por favor vuelva a intertarlo mas tarde.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- If AllowMultiLogins = 0 Then
- If CheckForSameIP(UserIndex, UserList(UserIndex).ip) = True Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERRNo es posible usar mas de un personaje al mismo tiempo.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- End If
- Call SendData(SendTarget.toindex, UserIndex, 0, "CUALIPC" & UserList(UserIndex).ip)
- Dim j As Integer
- If CheckForSameName(name) Then
- If UserList(NameIndex(name)).Counters.Saliendo Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERREl usuario está saliendo.")
- Else
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERRPerdon, un usuario con el mismo nombre se há logoeado.")
- End If
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- Call DB_LoadCharacter(UserIndex, name)
- If Not ValidateChr(UserIndex) Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "!!Hubo un error al cargar tu personaje, informa esto en nuestros foros http://www.swforos.com/foro/.)
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- If UserList(UserIndex).flags.Ban Then
- 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/")
- CloseSocket (UserIndex)
- Exit Sub
- End If
- If UserList(UserIndex).Invent.EscudoEqpSlot = 0 Then UserList(UserIndex).Char.ShieldAnim = NingunEscudo
- If UserList(UserIndex).Invent.CascoEqpSlot = 0 Then UserList(UserIndex).Char.CascoAnim = NingunCasco
- If UserList(UserIndex).Invent.WeaponEqpSlot = 0 Then UserList(UserIndex).Char.WeaponAnim = NingunArma
- Call UpdateUserInv(True, UserIndex, 0)
- Call UpdateUserHechizos(True, UserIndex, 0)
- If UserList(UserIndex).flags.Navegando = 1 Then
- UserList(UserIndex).Char.body = ObjData(UserList(UserIndex).Invent.BarcoObjIndex).Ropaje
- UserList(UserIndex).Char.Head = 0
- UserList(UserIndex).Char.WeaponAnim = NingunArma
- UserList(UserIndex).Char.ShieldAnim = NingunEscudo
- UserList(UserIndex).Char.CascoAnim = NingunCasco
- End If
- If UserList(UserIndex).flags.Montando = 1 Then
- UserList(UserIndex).Char.body = ObjData(UserList(UserIndex).Invent.MonturaObjIndex).Ropaje
- UserList(UserIndex).Char.Head = UserList(UserIndex).OrigChar.Head
- UserList(UserIndex).Char.WeaponAnim = NingunArma
- UserList(UserIndex).Char.ShieldAnim = NingunEscudo
- UserList(UserIndex).Char.CascoAnim = UserList(UserIndex).Char.CascoAnim
- End If
- If UserList(UserIndex).flags.Paralizado Then
- #If SeguridadAlkon Then
- If EncriptarProtocolosCriticos Then
- Call SendCryptedData(SendTarget.toindex, UserIndex, 0, "PARADOK")
- Call SendData(SendTarget.toindex, UserIndex, 0, "PU" & UserList(UserIndex).Pos.X & "," & UserList(UserIndex).Pos.Y)
- Else
- #End If
- Call SendData(SendTarget.toindex, UserIndex, 0, "PARADOK")
- Call SendData(SendTarget.toindex, UserIndex, 0, "PU" & UserList(UserIndex).Pos.X & "," & UserList(UserIndex).Pos.Y)
- #If SeguridadAlkon Then
- End If
- #End If
- End If
- 'Feo, esto tiene que ser parche cliente
- If UserList(UserIndex).flags.Estupidez = 0 Then Call SendData(SendTarget.toindex, UserIndex, 0, "NESTUP")
- '
- 'Posicion de comienzo
- If UserList(UserIndex).Pos.Map = 0 Then
- UserList(UserIndex).Pos.Map = 60
- UserList(UserIndex).Pos.X = 45
- UserList(UserIndex).Pos.Y = 55
- Else
- If Not MapaValido(UserList(UserIndex).Pos.Map) Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERREL PJ se encuenta en un mapa invalido.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- ''TELEFRAG
- If MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex <> 0 Then
- ''si estaba en comercio seguro...
- If UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu > 0 Then
- If UserList(UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu).flags.UserLogged Then
- Call FinComerciarUsu(UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).ComUsu.DestUsu)
- 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)
- End If
- If UserList(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex).flags.UserLogged Then
- Call FinComerciarUsu(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex)
- 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...")
- End If
- End If
- Call CloseSocket(MapData(UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y).UserIndex)
- End If
- If UserList(UserIndex).flags.Muerto = 1 Then
- Call Empollando(UserIndex)
- End If
- End If
- 'Nombre de sistema
- UserList(UserIndex).name = name
- UserList(UserIndex).Password = Password
- UserList(UserIndex).showName = True 'Por default los nombres son visibles
- Call SendData(SendTarget.toindex, UserIndex, 0, "IU" & UserIndex) 'Enviamos el User index
- Call SendData(SendTarget.toindex, UserIndex, 0, "CM" & UserList(UserIndex).Pos.Map & "," & MapInfo(UserList(UserIndex).Pos.Map).MapVersion) 'Carga el mapa
- Call SendData(SendTarget.toindex, UserIndex, 0, "TM" & MapInfo(UserList(UserIndex).Pos.Map).Music)
- 'Vemos que clase de user es (se lo usa para setear los privilegios alcrear el PJ)
- UserList(UserIndex).flags.EsRolesMaster = EsRolesMaster(name)
- If EsEventM(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.Dios
- UserList(UserIndex).flags.Rango = 6
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
- ElseIf EsDirector(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.DirectorGM
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
- ElseIf EsAdmin(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.Admin
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
- ElseIf EsDios(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.Dios
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
- ElseIf EsSemiDios(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.SemiDios
- UserList(UserIndex).flags.Rango = 2
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, False)
- ElseIf EsConsejero(name) Then
- UserList(UserIndex).flags.Privilegios = PlayerType.SemiDios ' le doi los privilegios del semi ;)
- UserList(UserIndex).flags.Rango = 1
- Call LogGM(UserList(UserIndex).name, "Se conecto con ip:" & UserList(UserIndex).ip, True)
- Else
- UserList(UserIndex).flags.Privilegios = PlayerType.User
- End If
- ''[EL OSO]: TRAIGO ESTO ACA ARRIBA PARA DARLE EL IP!
- UserList(UserIndex).Counters.IdleCount = 0
- Call MakeUserChar(SendTarget.ToMap, 0, UserList(UserIndex).Pos.Map, UserIndex, UserList(UserIndex).Pos.Map, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y)
- Call SendData(SendTarget.toindex, UserIndex, 0, "IP" & UserList(UserIndex).Char.CharIndex)
- Call SendUserStatsBox(UserIndex)
- Call EnviarHambreYsed(UserIndex)
- If haciendoBK Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "BKW")
- Call SendData(SendTarget.toindex, UserIndex, 0, "||Servidor> Por favor espera algunos segundos, WorldSave esta ejecutandose." & FONTTYPE_SERVER)
- End If
- If EnPausa Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "BKW")
- Call SendData(SendTarget.toindex, UserIndex, 0, "||Servidor> Lo sentimos mucho pero el servidor se encuentra actualmente detenido. Intenta ingresar más tarde." & FONTTYPE_SERVER)
- End If
- If EnTesting And UserList(UserIndex).Stats.ELV >= 18 Then
- 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.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- NumUsers = NumUsers + 1
- UserList(UserIndex).flags.UserLogged = True
- MapInfo(UserList(UserIndex).Pos.Map).NumUsers = MapInfo(UserList(UserIndex).Pos.Map).NumUsers + 1
- If UserList(UserIndex).Stats.SkillPts > 0 Then
- Call EnviarSkills(UserIndex)
- Call EnviarSubirNivel(UserIndex, UserList(UserIndex).Stats.SkillPts)
- End If
- If NumUsers > DayStats.MaxUsuarios Then DayStats.MaxUsuarios = NumUsers
- If NumUsers > recordusuarios Then
- Call SendData(SendTarget.ToAll, 0, 0, "||Record de usuarios conectados simultaniamente." & "Hay " & NumUsers & " usuarios." & "~240~240~50~1~0")
- recordusuarios = NumUsers
- Call WriteVar(IniPath & "Config.bin", "INIT", "Record", str(recordusuarios))
- End If
- Dim i As Integer
- If UserList(UserIndex).NroMacotas > 0 Then
- For i = 1 To MAXMASCOTAS
- If UserList(UserIndex).MascotasType(i) > 0 Then
- UserList(UserIndex).MascotasIndex(i) = SpawnNpc(UserList(UserIndex).MascotasType(i), UserList(UserIndex).Pos, True, True)
- If UserList(UserIndex).MascotasIndex(i) > 0 Then
- Npclist(UserList(UserIndex).MascotasIndex(i)).MaestroUser = UserIndex
- Call FollowAmo(UserList(UserIndex).MascotasIndex(i))
- Else
- UserList(UserIndex).MascotasIndex(i) = 0
- End If
- End If
- Next i
- End If
- If UserList(UserIndex).flags.Navegando = 1 Then Call SendData(SendTarget.toindex, UserIndex, 0, "NAVEG")
- If UserList(UserIndex).flags.Montando = 1 Then Call SendData(SendTarget.toindex, UserIndex, 0, "EQUIT")
- If ServerSoloGMs > 0 Then
- If UserList(UserIndex).flags.Privilegios < ServerSoloGMs Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ERRServidor restringido a administradores de jerarquia mayor o igual a: " & ServerSoloGMs & ". Por favor intente en unos momentos.")
- Call CloseSocket(UserIndex)
- Exit Sub
- End If
- End If
- If UserList(UserIndex).GuildIndex > 0 Then
- 'welcome to the show baby...
- If Not Guild.m_ConectarMiembroAClan(UserIndex, UserList(UserIndex).GuildIndex) Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "||Tu estado no te permite entrar al clan." & FONTTYPE_GUILD)
- End If
- End If
- Call SendData(SendTarget.ToPCArea, UserIndex, UserList(UserIndex).Pos.Map, "CFX" & UserList(UserIndex).Char.CharIndex & "," & FXIDs.FXWARP & "," & 0)
- Call SendData(SendTarget.toindex, UserIndex, 0, "LOGGED")
- UserList(UserIndex).Char.Account = Cuenta
- Call Guild.SendGuildNews(UserIndex)
- Dim fPath As String
- fPath = App.Path & "/don/" & UserList(UserIndex).name
- If FileExist(fPath) Then
- 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)
- End If
- If UserList(UserIndex).GuildIndex > 0 Then
- SendData SendTarget.toindex, UserIndex, 0, "||El seguro de CvC se encuentra activado." & "~0~128~0~1~0"
- UserList(UserIndex).flags.SeguroCvc = True
- End If
- If UserList(UserIndex).flags.MP = False Then
- SendData SendTarget.toindex, UserIndex, 0, "||Los mensajes privados se encuentran activados." & FONTTYPE_INFO
- Else
- SendData SendTarget.toindex, UserIndex, 0, "||Los mensajes privados se encuentran desactivados." & FONTTYPE_INFO
- End If
- If UserList(UserIndex).Faccion.RecompensasReal = 4 Then
- UserList(UserIndex).flags.EsCuartaJerarquia = True
- End If
- If HayDesafio = False Then
- UserList(UserIndex).flags.YaParticipoDesafio = 0
- UserList(UserIndex).flags.UltiDesafiante = vbNullString
- Else
- If UserList(UserCreaDesafio).name <> UserList(UserIndex).flags.UltiDesafiante Then
- UserList(UserIndex).flags.UltiDesafiante = vbNullString
- UserList(UserIndex).flags.YaParticipoDesafio = 0
- End If
- End If
- If UserList(UserIndex).GuildIndex > 0 Then
- SendData SendTarget.toindex, UserIndex, 0, "||Castillo Norte pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Norte") & FONTTYPE_GUILD
- SendData SendTarget.toindex, UserIndex, 0, "||Castillo Sur pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Sur") & FONTTYPE_GUILD
- SendData SendTarget.toindex, UserIndex, 0, "||Castillo Este pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Este") & FONTTYPE_GUILD
- SendData SendTarget.toindex, UserIndex, 0, "||Castillo Oeste pertenece al clan: " & GetVar(CastPath, "CASTILLOS", "Oeste") & FONTTYPE_GUILD
- End If
- If UserList(UserIndex).flags.NoActualizado Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "REAU")
- End If
- If Lloviendo Then Call SendData(SendTarget.toindex, UserIndex, 0, "LLU")
- tStr = Guild.a_ObtenerRechazoDeChar(UserList(UserIndex).name)
- If tStr <> vbNullString Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "!!Tu solicitud de ingreso al clan ha sido rechazada. El clan te explica que: " & tStr & ENDC)
- End If
- Call SendLabels(UserIndex)
- Call SendData(SendTarget.toindex, UserIndex, 0, "XY" & MapInfo(UserList(UserIndex).Pos.Map).name & " [" & UserList(UserIndex).Pos.Map & "]")
- Call MostrarNumUsers
- N = FreeFile
- Open App.Path & "\logs\numusers.log" For Output As N
- Print #N, NumUsers
- Close #N
- N = FreeFile
- 'Log
- Open App.Path & "\logs\Connect.log" For Append Shared As #N
- Print #N, UserList(UserIndex).name & " ha entrado al juego. UserIndex:" & UserIndex & " " & Time & " " & Date
- Close #N
- ERr_HS:
- End Sub
- Sub SendLabels(UserIndex As Integer)
- If UserList(UserIndex).Invent.AnilloEqpObjIndex Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "RMX" & ObjData(UserList(UserIndex).Invent.AnilloEqpObjIndex).DefensaMagicaMin & "/" & ObjData(UserList(UserIndex).Invent.AnilloEqpObjIndex).DefensaMagicaMax)
- Else
- Call SendData(SendTarget.toindex, UserIndex, 0, "RMX0/0")
- End If
- If UserList(UserIndex).Invent.ArmourEqpObjIndex Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "ARM" & ObjData(UserList(UserIndex).Invent.ArmourEqpObjIndex).MinDef & "/" & ObjData(UserList(UserIndex).Invent.ArmourEqpObjIndex).MaxDef)
- Else
- Call SendData(SendTarget.toindex, UserIndex, 0, "ARM0/0")
- End If
- If UserList(UserIndex).Invent.CascoEqpObjIndex Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "GHX" & ObjData(UserList(UserIndex).Invent.CascoEqpObjIndex).MinDef & "/" & ObjData(UserList(UserIndex).Invent.CascoEqpObjIndex).MaxDef)
- Else
- Call SendData(SendTarget.toindex, UserIndex, 0, "GHX0/0")
- End If
- If UserList(UserIndex).Invent.WeaponEqpObjIndex Then
- Call SendData(SendTarget.toindex, UserIndex, 0, "WEA" & ObjData(UserList(UserIndex).Invent.WeaponEqpObjIndex).MinHIT & "/" & ObjData(UserList(UserIndex).Invent.WeaponEqpObjIndex).MaxHIT)
- Else
- Call SendData(SendTarget.toindex, UserIndex, 0, "WEA0/0")
- End If
- End Sub
- Sub ResetFacciones(ByVal UserIndex As Integer)
- With UserList(UserIndex).Faccion
- .ArmadaReal = 0
- .FuerzasCaos = 0
- .CiudadanosMatados = 0
- .CriminalesMatados = 0
- .RecibioArmaduraCaos = 0
- .RecibioArmaduraReal = 0
- .RecibioExpInicialCaos = 0
- .RecibioExpInicialReal = 0
- .RecompensasCaos = 0
- .RecompensasReal = 0
- .Reenlistadas = 0
- End With
- End Sub
- Sub ResetContadores(ByVal UserIndex As Integer)
- With UserList(UserIndex).Counters
- .AGUACounter = 0
- .AttackCounter = 0
- .Ceguera = 0
- .COMCounter = 0
- .Estupidez = 0
- .Frio = 0
- .HPCounter = 0
- .IdleCount = 0
- .Invisibilidad = 0
- .Paralisis = 0
- .Pasos = 0
- .Pena = 0
- .PiqueteC = 0
- .STACounter = 0
- .Veneno = 0
- .Trabajando = 0
- .Ocultando = 0
- .TimerLanzarSpell = 0
- .TimerPuedeAtacar = 0
- .TimerPuedeTrabajar = 0
- .TimerUsar = 0
- End With
- End Sub
- Sub ResetCharInfo(ByVal UserIndex As Integer)
- '*************************************************
- 'Author: Unknown
- 'Last modified: 03/15/2006
- 'Resetea todos los valores generales y las stats
- '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
- '*************************************************
- With UserList(UserIndex).Char
- .body = 0
- .CascoAnim = 0
- .CharIndex = 0
- .FX = 0
- .Head = 0
- .loops = 0
- .heading = 0
- .loops = 0
- .ShieldAnim = 0
- .WeaponAnim = 0
- End With
- End Sub
- Sub ResetBasicUserInfo(ByVal UserIndex As Integer)
- '*************************************************
- 'Author: Unknown
- 'Last modified: 03/15/2006
- 'Resetea todos los valores generales y las stats
- '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
- '*************************************************
- With UserList(UserIndex)
- .name = ""
- .modName = ""
- .Password = ""
- .Desc = ""
- .DescRM = ""
- .Pos.Map = 0
- .Pos.X = 0
- .Pos.Y = 0
- .ip = ""
- .RDBuffer = ""
- .clase = ""
- .email = ""
- .genero = ""
- .Hogar = ""
- .raza = ""
- .RandKey = ""
- .PrevCheckSum = 0
- .PacketNumber = 0
- .EmpoCont = 0
- .PartyIndex = 0
- .PartySolicitud = 0
- With .Stats
- .Banco = 0
- .ELV = 0
- .ELU = 0
- .Exp = 0
- .def = 0
- .CriminalesMatados = 0
- .NPCsMuertos = 0
- .UsuariosMatados = 0
- .SkillPts = 0
- End With
- End With
- End Sub
- Sub ResetReputacion(ByVal UserIndex As Integer)
- '*************************************************
- 'Author: Unknown
- 'Last modified: 03/15/2006
- 'Resetea todos los valores generales y las stats
- '03/15/2006 Maraxus - Uso de With para mayor performance y claridad.
- '*************************************************
- With UserList(UserIndex).Reputacion
- .AsesinoRep = 0
- .BandidoRep = 0
- .BurguesRep = 0
- .LadronesRep = 0
- .NobleRep = 0
- .PlebeRep = 0
- .NobleRep = 0
- .Promedio = 0
- End With
- End Sub
- Sub ResetGuildInfo(ByVal UserIndex As Integer)
- If UserList(UserIndex).... > 0 Then
- Call Guild.GMDejaDeEscucharClan(UserIndex, UserList(UserIndex)....)
Estas usando un Mod Semper widia y por eso no encontras el case "OLOGIN" o "NLOGIN"
Entonces no lo puedo poner?

227![Newbie [4] Newbie [4]](./images/ranks/Rango3.gif)
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
![]()
SALUDOS!!
135![Aprendiz [4] Aprendiz [4]](./images/ranks/Rango9.gif)
194![Newbie [4] Newbie [4]](./images/ranks/Rango3.gif)
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados