User Tag List

Resultados 1 al 9 de 9
  1. #1
    Copé DM Staff

    Fecha de Ingreso
    01 jul, 14
    Mensajes
    182
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Programación Básica de Servidores.-

    Originalmente publicado por Norimaro.-

    Cita Iniciado por Norimaro
    Aclaracion por (Pato)²: Esto es una guia, esta PROHIBIDO hacer preguntas o agradecimientos en este thread, para eso creen otros.
    Solo se permiten aportes

    Antes Que Nada Aclaro Que Es Necesario Tener Visual Basic 6 Para Hacer Todo Esto ^^


    Parte 1 (Nivel Basico)


    1 - Quiero Aumentar La Vida Que Una Clase Gana Por Nivel Como Hago?


    Supongamos Que Buscamos Aumentar La Vida Ganada Por Nivel De Un Paladin Lo Primero Que Hay Que Hacer Es Ir A Modulo_UsUaRiOs.bas Y Dirigirnos Al Sub CheckUserLevel
    Ahora Buscamos:
    Select Case UserList(UserIndex).Clase
    Ahi Es Donde Comienza Todo Lo Que Es Modificadores Por Nivel Ahora Nos Dirigimos A Donde Tenemos Que Ir En Este Caso Buscamos Modificar El Aumento De Vida Del Paladin Asiq Buscamos:
    Case "Paladin"
    Y Nos Encontraremos Con Lo Siguiente:
    Case "Paladin"
    Select Case UserList(UserIndex).Stats.UserAtributos(Constituci on)
    Case 21
    AumentoHP = RandomNumber(9, 11)
    Case 20
    AumentoHP = RandomNumber(7, 11)
    Case 19, 18
    AumentoHP = RandomNumber(6, 11)
    Case Else
    AumentoHP = RandomNumber(4, UserList(UserIndex).Stats.UserAtributos(Constituci on) \ 2) + AdicionalHPCazador
    End Select

    AumentoHIT = IIf(UserList(UserIndex).Stats.ELV > 35, 1, 3)
    AumentoMANA = UserList(UserIndex).Stats.UserAtributos(Inteligenc ia)
    AumentoSTA = AumentoSTDef
    Debajo De Paladin Encontraremos Case 21, Case 20, Etc Esos Son Los Atributos Osea Si Tenemos Ej 21 De Constitucion Nuestro Pala Gana Desde Un Minimo De 9 Hasta Un Maximo De 11


    Bueno Ahora Supongamos Que Queremos Que No Sea Asi Queremos Que Con 21 De Constitucion Gane Entre 10 y 15 De Vida Como Hacemos?
    Pues Simple Buscamos Dentro Del Paladin El Case 21 Y Donde Dice:
    AumentoHP = RandomNumber(9, 11)
    Lo Modificamos Y Ponemos:
    AumentoHP = RandomNumber(10, 15)

    2 - Quiero Modificar El Daño Fisico (No Magico) Que Gana Una Clase Por Nivel Como Hago?


    Simple Buscas La Clase Que Queres Modificarle El Daño De Golpe Y Buscas:
    AumentoHIT = IIf(UserList(UserIndex).Stats.ELV > 35, 1, 3)
    Ahi Lo Que Dice Es Que Si Es Menor A Nivel 35 Su Daño De Golpe Aumenta Entre 1 y 3
    Supongamos Que Queremos Que Aumente Si Es Menor A 40 Entre 2 y 5
    AumentoHIT = IIf(UserList(UserIndex).Stats.ELV > 40, 2, 5)
    Y Supongamos Que Queremos Que Hasta 35 Sea De 1 a 3 y Luego Hasta 40 Sea De 2 a 5 El Incremento Como Seria:
    AumentoHIT = IIf(UserList(UserIndex).Stats.ELV > 35, 1, 3)
    AumentoHIT = IIf(UserList(UserIndex).Stats.ELV > 40, 2, 5)

    3 - Queremos Que Al Crear Personaje El Humano Tenga + 3 De Constitucion +2 De Agilidad Y + 1 De Fuerza Como Podemos Hacer?


    Facil, Dirijansen Al Modulo TCP.bas Y Busquen El Sub ConnectNewUser Y Busquen:
    Case "HUMANO"
    UserList(UserIndex).Stats.UserAtributos(Fuerza) = UserList(UserIndex).Stats.UserAtributos(Fuerza) + 1
    UserList(UserIndex).Stats.UserAtributos(Agilidad) = UserList(UserIndex).Stats.UserAtributos(Agilidad) + 1
    UserList(UserIndex).Stats.UserAtributos(Constituci on) = UserList(UserIndex).Stats.UserAtributos(Constituci on) + 2
    Y Solo Tienen Que Modificar Los Valores Asi:
    Case "HUMANO"
    UserList(UserIndex).Stats.UserAtributos(Fuerza) = UserList(UserIndex).Stats.UserAtributos(Fuerza) + 1
    UserList(UserIndex).Stats.UserAtributos(Agilidad) = UserList(UserIndex).Stats.UserAtributos(Agilidad) + 2
    UserList(UserIndex).Stats.UserAtributos(Constituci on) = UserList(UserIndex).Stats.UserAtributos(Constituci on) + 3
    Y Supongamos Que Queremos Que Gane Tmb 1 De Inteligencia Que Tenemos Que Hacer?


    Simple Y Solo Tienen Que Modificar Los Valores Asi:
    Case "HUMANO"
    UserList(UserIndex).Stats.UserAtributos(Fuerza) = UserList(UserIndex).Stats.UserAtributos(Fuerza) + 1
    UserList(UserIndex).Stats.UserAtributos(Agilidad) = UserList(UserIndex).Stats.UserAtributos(Agilidad) + 2
    UserList(UserIndex).Stats.UserAtributos(Constituci on) = UserList(UserIndex).Stats.UserAtributos(Constituci on) + 3
    UserList(UserIndex).Stats.UserAtributos(Inteligenc ia) = UserList(UserIndex).Stats.UserAtributos(Inteligenc ia) + 1
    Ahi Esta.


    4 - Buscamos Hacer Que Al Crear Personajes Los Usuarios Comiencen Con Algo De Dinero Como Hacemos?


    Simple En El Mismo Sub Que Antes Buscamos:
    UserList(UserIndex).Stats.GLD = 0
    Y El 0 Lo Reemplazamos Por El Valor De Oro Que Querramos Que Tengasn Al Comenzar EJ:
    UserList(UserIndex).Stats.GLD = 500
    Ahi Comenzarian Con 500 De Oro En Su Billetera


    5 - Como Modifico Los Skills Ganados Por Nivel?


    Simple, Lo Primero Que Hacemos Es Ir A Modulo_UsUaRiOs.Bas Y Vamos Nuevamente A CheckUserLevel, Ahi Buscamos:
    If UserList(UserIndex).Stats.ELV = 1 Then
    Pts = 10

    Else
    Pts = 5
    End If
    Ahi Lo Que Dice Es QUe Si Somos Nivel 1 Cuando pasemos De Nivel Ganamos 10 Skill, Sino Ganamos 5 Skills Por Nivel.
    Ahora Supongamos Que Buscamos Hacer Que Gane 30 Skills Por Nivel Como Hacemos?


    Asi:
    If UserList(UserIndex).Stats.ELV = 1 Then
    Pts = 10

    Else
    Pts = 30
    End If
    Ahi Ganaria 30 Skills A Esepcion De Si Es Nivel 1 Y Pasa A 2 Que En Ese Caso Ganaria Solo 10


    6 - Como Hacemos Para Aumentar La Dificultad Para Ganar Exp?


    Simple, Lo Primero Que Hacemos Es Ir A Modulo_UsUaRiOs.Bas Y Vamos Nuevamente A CheckUserLevel, Ahi Buscamos:
    If UserList(UserIndex).Stats.ELV < 11 Then
    UserList(UserIndex).Stats.ELU = UserList(UserIndex).Stats.ELU * 1.5
    ElseIf UserList(UserIndex).Stats.ELV < 25 Then
    UserList(UserIndex).Stats.ELU = UserList(UserIndex).Stats.ELU * 1.3
    Else
    UserList(UserIndex).Stats.ELU = UserList(UserIndex).Stats.ELU * 1.2
    End If
    Yo Voy A Tomar Un Segmento Y Lo Voy A Explicar:
    If UserList(UserIndex).Stats.ELV < 11 Then
    UserList(UserIndex).Stats.ELU = UserList(UserIndex).Stats.ELU * 1.5
    ElseIf UserList(UserIndex).Stats.ELV < 25 Then
    UserList(UserIndex).Stats.ELU = UserList(UserIndex).Stats.ELU * 1.3
    Ahi Lo Que Dice Es QUe Si Nuestro Nivel Es Menor A 11 Entonces La Experiencia Necesaria Para Subir De Nivel Sera La Exp Requerida Por 1.5, Pero Si Nuestro Nivel Es Menor A 25 Y A La Vez Mayor O Igual A 11 Entonces La Experiencia Necesaria Para Subir De Nivel Sera La Exp Requerida Por 1.3.


    Ahora Supongamos Que Yo Porq Soy Muy Mañoso =P Quiero Que Sea 1.5 hasta Nivel 14 Y Luego Hasta Nivel 20 Sea 1.4, Luego Hasta 30 1.3 Y Sino Que La Dificultad Sea 1.2 Como Hago?


    Seria Asi:
    If UserList(UserIndex).Stats.ELV < 14 Then
    UserList(UserIndex).Stats.ELU = UserList(UserIndex).Stats.ELU * 1.5
    ElseIf UserList(UserIndex).Stats.ELV < 20 Then
    UserList(UserIndex).Stats.ELU = UserList(UserIndex).Stats.ELU * 1.4
    ElseIf UserList(UserIndex).Stats.ELV < 30 Then
    UserList(UserIndex).Stats.ELU = UserList(UserIndex).Stats.ELU * 1.3
    Else
    UserList(UserIndex).Stats.ELU = UserList(UserIndex).Stats.ELU * 1.2
    End If
    Bueno Todo Esto Hasta Ahora Fue En El Servidor Ahora Hagamos Una Que Se Preguntan Muy Frecuentemente La Gran Mayoria Para Hacerle A Su Cliente


    7 - Como Hago Que Mi Cliente Posea Macro Incluido (F1, F2, Etc)?


    Simple Solo Abris El Codigo Fuente De Tu Cliente Y Te Drijis A FrmMain.frm Y Ahi Buscas El Private Sub Form_KeyUp Y Dentro De El Buscamos:
    Case vbKeyF5:
    Call frmOpciones.Show(vbModeless, frmMain)
    Ahora Supongamos Que Queremos Que El F1 Sea /Comerciar Y Que El F2 Sea Por Ejemplo /Online Como Hacemos?


    Simple Arriba De Case vbKeyF5: Agregamos:
    Case vbKeyF1:
    Call SendData("/COMERCIAR")
    Case vbKeyF5:
    Call SendData("/ONLINE")
    Case vbKeyF5:
    Call frmOpciones.Show(vbModeless, frmMain)

  2. #2
    Copé DM Staff

    Fecha de Ingreso
    01 jul, 14
    Mensajes
    182
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Continuación:

    Cita Iniciado por Norimaro Ver Mensaje
    8 - Como Hago Para Modificar Los Stats Maximos De Mi Servidor (Vida/Mana/Defensa/Daño/Stamina/Nivel)?


    Simple, En El Codigo Fuente Del Servidor Nos Dirigimos Al Modulo Declares.bas Y Ahi Buscamos:




    Ahora Supongamos Que Buscamos Que El Nivel Maximo De Nuestro Servidor Sea 150, La vida Sea 1299 Y El Mana Maximo Sea 3500 Como Hacemos?


    Simple Modificamos Los Valores Maximos En Este Caso Nos Quedaria Asi:




    9 - Quiero Aumentar El Oro Y La Exp De Los Bichos En Mi Servidor Como Hago?


    Simple Nos Dirijimos Al Modulo FileIO.bas Y Ahi Buscamos El Sub CargarNpcBackUp Ahora Lo Unico Que Hay Que Hacer Es Buscar Estas Lineas:


    Y


    Ahora Viene La Parte Entretenida ^^ Que Es Que Tenemos Que Hacer Con Estas Lineas Y Eso Es Facil ^^


    Supongamos Que Queremos Aumentar La Exp De Los Bichos x10 Y El Oro x7 Y No Tenemos Todo El Tiempo para Modificar El Dateado =P Como Hacemos?


    Simple, Asi:


    Y




    10 - Como Cambio El Nivel Que necesito Tener Para Ingresar A Una Armada?


    Esto Es Facil Tmb Lo Unico Que Hay Que Hacer Es Ir Al Modulo ModFacciones.bas Y Dependiendo Que Faccion Querramos Modificar Vamos A EnlistarArmadaReal O EnlistarCaos


    Supongamos Que Buscamos Cambiar El Nivel Para Ingresar A La Armada Real A 15 Como Hacemos?


    Simple, Nos Dirigimos Al Sub EnlistarArmadaReal Y Buscamos:


    Y Ahi Modificamos Lo Siguiente:


    Listo Ya Esta ^^


    11 - Quiero Modificar El Numero de Muertes Para Ingresar A Una Faccion Como Hago?


    Eso Es Similar A La Anterior Buscamos En El Mismo Sub Anterior:




    Ahora Supongamos Que Quiero Que Se Necesitan 50 Criminales Para Ingresar A La Armada Real Como Hago?






    12 - Quiero Cambiar Los Titulos De Las Facciones Como Hago?


    En El Mismo Modulo Que Antes Buscamos la Funcion TituloReal, Ahi Se Encuentran Todos Los Titulos De La Armada Real Y Para Legion Del Caos Buscamos La Funcion TituloCaos


    Ahora Supongamos Que Buscamos Cambiar Los Titulos De La Armada Como Hacemos?


    Simplemente Buscamos La Funciona Correspondiente En este Caso TituloReal Que Es Asi:


    Y Modificamos Los Titulos Que Estan Entre Comillas Ej: "Campeón de la Luz" Lo Modificamos Por "Guerrero De La Paz"


    13 - Como Hago Para Cambiar Los Valores De Los Dados?


    Simple Vamos Al Modulo Del Servidor TCP.bas Y Nos Dirijimos A l Sub HandleData Y Ahi Buscamos:


    Y Ahi Reemplazamos Por Los Valores Que Querramos.
    Por Ejemplo Si Queremos Que Los Valores Salgan Siempre Entre 16 Y 18 Lo Que Tenemos Que Hacer Es:




    Ahora Supongamos Que Queremos Que No Sea Tan Asi Queremos Que Fuerza Y Agilidad Lleguen Hasta 25 Al Crear Personajes Como Se hace Esto?


    Asi:




    Explicaciones En General:


    UserList(UserIndex).Stats.UserAtributos(1) Esto Equivale A Fuerza
    UserList(UserIndex).Stats.UserAtributos(2) Esto Equivale A Agilidad
    UserList(UserIndex).Stats.UserAtributos(3) Esto Equivale A Inteligencia
    UserList(UserIndex).Stats.UserAtributos(4) Esto Equivale A Carisma
    UserList(UserIndex).Stats.UserAtributos(5) Esto Equivale A Constitucion
    UserList(UserIndex).Stats.ELV Esto Equivale A Nivel

    -2- .
    --
    =====
    --
    Cita Iniciado por Norimaro
    14 - Quiero Modificar La cantidad De Minerales Para Hacer Lingotes Como hago?


    Vamos Al Modulo Trabajo.bas Y buscamos La Funcion MineralesParaLingote Y Nos Encontraremos Con Esto:




    Como Los Modifico Ahora Que Se Donde Estan Yo Quiero Que Para Lingotes De Hierro Se necesiten Solo 5 Y Que Para Lingotes De Oro Se Necesiten 30 Como Hago?


    Asi:




    15 - Como Hago Paa Que Los Leñadores Saquen Mas De Madera Al Talar?


    Simple No Dirigimos Al Mismo Modulo Que Antes Y Buscamos El Sub DoTalar Y Ahi Buscamos:


    Lo Que Tenemos Que Hacer Es Cambiar El Valor De MiObj.Amount. Por Ejemplo Asi:


    Ahi El Leñador Sacaria Minimo 3 De Madera Y Maximo 7 ^^


    Ahora Supongamos Que Queremos Que El Resto De Las Clases Saquen Entre 1 Y 2 De Madera Como Hacemos?




    Ahi Esta Asi De Simple ^^


    16 - Como Modifico Los Valores De Minerales Que Sacamos Al Minar?


    Esto Es Similar Al Anterior Buscamos En El Mismo Modulo Que Antes El Sub DoMineria Y En El Buscamos:


    Ahora Supongamos Que Buscamos Hacer Que El Minero Sake Entre 2 Y 10 Minerales Esto Seria Asi:




    16 - Como Modifico El Tiempo De Carcel Por Pikete?


    Bueno Esto Es Muy Simple Vamos Al Mudulo Declares.bas Y Buscamos:


    Y Reemplazamos El 10 Por La Cantidad De Minutos Que Querramos Que se Apliquen De Carcel


    17 - Como Hago Que El Entrenador De Bander Me Deje Sacar Mas Criaturas De Lo Normal?


    Simple Buscamos En El Mismo Modulo Que Antes:


    Ahi Lo Que Dice Es Q El Maximo De Criaturas Que Podesmos Sakar Del Entrenador Es 7 Asiq Modificamos Ese 7 Por El Numero Total De Criaturas Que Querramos Que Se Puedan Sakar Del Entrenador


    18 - Como Modifico El Numero Maximo De Mascotas Que Podemos Tener?


    Simple Buscamos En El Mismo Modulo Que Antes:


    Y Ahi Solamente Cambiamos El 3 Por El Numero De Mascotas Que Querramos Que Se Puedan Tener (Los Elementales Cuentan Como Mascota, Solo Lo Aclaro Por El Tema De Que Piensenlo Porq Si Lo Aumentan Mucho Pueden Desvalancear Mucho)

  3. #3
    Copé DM Staff

    Fecha de Ingreso
    01 jul, 14
    Mensajes
    182
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Continuación:

    Cita Iniciado por Norimaro
    19 - Cambiar Nivel Necesario Para Poder Crear Un Clan?


    Simple, Vamos Al Modulo modClanes Y Buscamos La Funcion Function CanCreateGuild Y Buscamos:
    If UserList(UserIndex).Stats.ELV < 25 Then
    CanCreateGuild = False
    Call SendData(ToIndex, UserIndex, 0, "||Para fundar un clan debes de ser nivel 25 o superior." & FONTTYPE_GUILD)
    Exit Function
    End If
    Aca Lo Que Dice Es QUe Para Poder Crear Un Clan Necesitas Ser Nivel 25 O Superior.


    Ahora Supongamos Que Queremos Que El Nivel Para Crear Un Clan Sea 19 Como Tenemos Que Hacer?


    If UserList(UserIndex).Stats.ELV < 19 Then
    CanCreateGuild = False
    Call SendData(ToIndex, UserIndex, 0, "||Para fundar un clan debes de ser nivel 19 o superior." & FONTTYPE_GUILD)
    Exit Function
    End If

    20 - Cambiar Puntos De Liderazgo Necesarios Para Poder Crear Un Clan?


    En La Misma Funcion De Antes Buscamos:
    If UserList(UserIndex).Stats.UserSkills(Liderazgo) < 90 Then
    CanCreateGuild = False
    Call SendData(ToIndex, UserIndex, 0, "||Para fundar un clan necesitas al menos 90 pts en liderazgo" & FONTTYPE_GUILD)
    Exit Function
    End If
    Y Ahora Como Hicimos Antes Es Lo Mismo.


    Ahora Supongamos Que Queremos Que Se Necesiten Solo 50 Puntos Para Fundar Clan Como Hacemos?


    Asi:
    If UserList(UserIndex).Stats.UserSkills(Liderazgo) < 50 Then
    CanCreateGuild = False
    Call SendData(ToIndex, UserIndex, 0, "||Para fundar un clan necesitas al menos 50 pts en liderazgo" & FONTTYPE_GUILD)
    Exit Function
    End If

    Los NPC No Te TIran El Oro, Aka Te Doy La Solucion


    Como Vi Que Muchos No Se Dieron Cuenta Lo Paso A Explicar ^^
    Hay Un Limite Para Que Un NPC Tire Oro Y Ese Limite Lo Podemos Encontrar En Declares.bas Y Ahi Buscamos:
    Public Const MAX_INVENTORY_OBJS As Integer = 10000
    El Limite Normalmente Es De 10k Como Se Ve Ahi Pero Para Poder Explicarlo De Forma Sencilla Lo Voy A Explicar Con Un Ejemplo


    Supongamos Que Matamos Un Sacerdote Pretoriano En Un Server Que Tiene Aumentado El Oro x4


    Un Sacerdote Pretoriano En Un Server Normal (Exp x1) Da: 5k De Oro
    Pero Si El Oro Se Encuentra Multiplicado Por 4 Como EN Este Caso El Sacerdote Pretoriano Nos Daria un Total De: 20k De Oro (De Una Osea Tendria Que Aparecer El Grafico De Las Moneditas Con Un Total De 20k) Pero Como El Limite Es Solo 10k El NPC No Nos Tira El Oro


    Esa Seria La Explicacion Despues Si Todabia No Lo Entendieron Lo Mas Sencillo Seria Cambiar:
    Public Const MAX_INVENTORY_OBJS As Integer = 10000
    Por:
    Un Valor Mayor A 10k


    Info Extra Por ^[GS]^


    Se Usa As Integer Hasta 32k
    Se Usa As Long Hasta 2kk
    Se Usa As Double Hasta 4kk
    -4- .

  4. #4
    Copé DM Staff

    Fecha de Ingreso
    01 jul, 14
    Mensajes
    182
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Continuación:

    Cita Iniciado por Norimaro
    Parte 2 (Nivel Medio)


    Esta Parte Quizas Sea Un Poco mas Complicada De Explicar ^^ Pero Voy A Tratar De Hacerla Lo Mas Simple Posible


    1 - Como Hago Para Evitar El Uso De Macros Y Clientes Externos?


    En EL Codigo Fuente Tanto Del Cliente Como Del Servidor Encontraresmo:


    "NOVER" Es Estado Invi U Oculto
    "CC" Es Crear un Personaje
    "SKILLS" Son Los Skills Del Personaje
    "ATR" Son Los Atributos Del Personaje
    "HO" Crear Un Objeto
    "CP" Cambiar Apariencia Del Personaje
    "PU" Actualiza Posicion Del Usuario
    "LC" Click Izquierdo
    "LH" Lanzar Hechizo
    "TI" Tirar Item
    "AG" Agarrar Item
    "AT" Atacar
    "M" Mover


    La Forma Mas Facil De Evitar Tanto Clientes Truchos Como Macros Como El K33 Y Otros Tantos Seria Modificar Tanto En El Servidor Como En El Cliente Esas Acciones.


    Ahora Como Hacemos Para Hacerlo De Forma Rapida?


    Facil, Vamos a Edicion >>> Reemplace Ponemos Arriba La Parabra A buscar Y Abajo Por Lo Que La Vamos A Reemplazar. Ejemplo:
    Buscmos "M" Y Lo Reemplazamos Por "kM" Recuerden Revizar Que La Variable Nueva No Coinciada Con Alguna Vieja


    2 - Para Que Sirbe El GenCrC?


    El GenCrC Es Otro Sistema De Seguridad Vastante Antigua Pero Siempre Fue La Primera Barrera Para Evitar Clientes AoT Y Otros Clientes Externos.


    Los GenCrC Mas Comunes Son 1 Y 12345 Aunque Podemos Usar Cualquier Numero.
    Tambien Tenemos Que Tener En Cuenta Que Dependiendo De La Cifra Tardara Mas O Menos En Verificarla, Aunque Solamente Afecta Al Ingresar No Durante El Juego.
    Otra Cosa Que Tenemos QUe Tener En Cuenta Es Que Debe Coincidir Tanto En El Cliente Como En El Servidor Esta Cifra
    Para Dificultar Tambien El Acceso Tambien Podemos Usar Del Lado Del Cliente Una Formula Que De Como Resultado El GenCrC Por Ejemplo Si Tenemos En El Servidor:
    GenCrC = 4
    Podemos Poner En El Cliente:
    GenCrC = 2 * 2
    O Bien Tambien Podriamos Haber Puesto:
    GenCrC = 2 + 2
    O Tambien
    GenCrC = 6 - 4 + 2
    O
    GenCrC = 6 - 4 * 2
    O Cualquier Cosa Que Se Nos Ubiese Ocurrido Esto Sirbe Para Dificultar A Los Que usan Debuguers Para Averiguar Como Hacer Un Cliente Trucho Para Poder Saltar La Seguridad Del Servidor


    Como Veran Siempre Da El Mismo Valor Del GenCrC Que Requiere Verificar


    3 - Como Hago Para Que Mi Servidor Posea AlphaBleeding?


    Eso Es Bastante Facil Usando Screens Para Mostrar Como Se Hace ^^, Ya Q Aunq Muchos No Lo Sabian Y Otros Se Habian Olbidado Que Existia Era Muy Simple De Aplicar ^^


    1)Primero Tienen Que Ir A Las Propiedades Del Proyecto

    2)Luego Les Va A Aparecer La Siguiente Ventana:

    3)Ahora Tienen Que Ir A La Solapa Make

    Ahora Donde Dice "Conditionals Compilation Arguments:" Van A Ver Que Dice:
    UsarWrench = 1 : ConMenuseConextuales = 0 : ConAlfaB = 0
    Ahora Para Hacer Que Tenga Alphableeding Tenemos Que Hacer Lo Siguiente:
    UsarWrench = 1 : ConMenuseConextuales = 0 : ConAlfaB = 1
    Eso Es Todo Asi De Simple ^^


    4 - Como Hago Para Que Los Nombres Esten Siempre Visibles?


    Facil, Busquen En El Codigo Del Cliente:
    If Nombres And Abs(nX - X) < 2 And (Abs(nY - Y)) < 2 Then
    Y Reemplasenlo Por:
    If Nombres Then

    -5- .
    --
    =====
    --
    Cita Iniciado por (Pato)² Ver Mensaje
    Subir skills sin limete desde nivel uno y con un 100% de efectividad:


    Código:
    Sub SubirSkill(ByVal UserIndex As Integer, ByVal Skill As Integer)
    
    
        If UserList(UserIndex).Stats.UserSkills(Skill) = MAXSKILLPOINTS Then Exit Sub
        
        UserList(UserIndex).Stats.UserSkills(Skill) = UserList(UserIndex).Stats.UserSkills(Skill) + 1
        Call SendData(SendTarget.ToIndex, UserIndex, 0, "||¡Has mejorado tu skill " & SkillsNames(Skill) & " en un punto!. Ahora tienes " & UserList(UserIndex).Stats.UserSkills(Skill) & " pts." & FONTTYPE_INFO)
            
        UserList(UserIndex).Stats.Exp = UserList(UserIndex).Stats.Exp + 50
        If UserList(UserIndex).Stats.Exp > MAXEXP Then UserList(UserIndex).Stats.Exp = MAXEXP
            
        Call SendData(SendTarget.ToIndex, UserIndex, 0, "||¡Has ganado 50 puntos de experiencia!" & FONTTYPE_FIGHT)
        Call CheckUserLevel(UserIndex)
    
    
    End Sub
    -6- .
    Última edición por Argentum Online; 18/01/2015 a las 21:24

  5. #5
    Copé DM Staff

    Fecha de Ingreso
    01 jul, 14
    Mensajes
    182
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Continuación:

    Cita Iniciado por (Pato)² Ver Mensaje
    Pasar de nivel en todos los golpes a NPC



    Tiene que hacer esto...
    Busacas esto:


    Código:
    '[KEVIN]
            If MiNPC.flags.ExpCount > 0 Then
                If UserList(UserIndex).PartyIndex > 0 Then
                    Call mdParty.ObtenerExito(UserIndex, MiNPC.flags.ExpCount, MiNPC.Pos.Map, MiNPC.Pos.X, MiNPC.Pos.Y)
                Else
                    UserList(UserIndex).Stats.Exp = UserList(UserIndex).Stats.Exp + MiNPC.flags.ExpCount
                    If UserList(UserIndex).Stats.Exp > MAXEXP Then _
                        UserList(UserIndex).Stats.Exp = MAXEXP
                    Call SendData(SendTarget.ToIndex, UserIndex, 0, "||Has ganado " & MiNPC.flags.ExpCount & " puntos de experiencia." & FONTTYPE_FIGHT)
                End If
                MiNPC.flags.ExpCount = 0
            Else
                Call SendData(SendTarget.ToIndex, UserIndex, 0, "||No has ganado experiencia al matar la criatura." & FONTTYPE_FIGHT)
            End If

    Y replazalo por esto:


    Código:
            '[KEVIN]
            If MiNPC.flags.ExpCount > 0 Then
                UserList(UserIndex).Stats.Exp = UserList(UserIndex).Stats.ELU
                Call SendData(SendTarget.ToIndex, UserIndex, 0, "||Has ganado " & UserList(UserIndex).Stats.ELU & " puntos de experiencia." & FONTTYPE_FIGHT)
                MiNPC.flags.ExpCount = 0
            Else
                Call SendData(SendTarget.ToIndex, UserIndex, 0, "||No has ganado experiencia al matar la criatura." & FONTTYPE_FIGHT)
            End If

    Creo que eso anda bien.


    Suerte!
    -7- .
    --
    =====
    --
    Cita Iniciado por Norimaro Ver Mensaje
    ¿Cómo hago para que aparezca el numero sobre mana vida y todo eso?


    Se Hace Creando Un Label Transparente En El Ejemplo Con El Nombre HitPoint (Nombre Del Caption) Nuevo Y Luego En TCP.bas Busca:
    Código:
    UserMaxHP = Val(ReadField(1, Rdata, 44))
    UserMinHP = Val(ReadField(2, Rdata, 44))
    UserMaxMAN = Val(ReadField(3, Rdata, 44))
    UserMinMAN = Val(ReadField(4, Rdata, 44))
    UserMaxSTA = Val(ReadField(5, Rdata, 44))
    UserMinSTA = Val(ReadField(6, Rdata, 44))
    Abajo agregas:
    Código:
    frmMain.HitPoint.Caption = "" & UserMinHP & " / " & UserMaxHP & ""
    Asi Seria Para La Vida, Ahi Tenes Un Ejemplo, Despues Arreglate.


    Aclaraion: El Label Se Ubica Justo Ensima Del Label De La Vida.


    No Doy Mucha Explicacion Porq Esto No Es Algo Que Sea Para Una Persona Recien Iniciada.
    -8- .
    --
    =====
    --
    Cita Iniciado por ThunderBolt Ver Mensaje
    Anti-SpeedHack




    Todos sabemos que la mayoria de los speedhacks lo que hacen es acelerar el intervalo de los timers, las fps y etc..



    En el cliente



    En el frmmain al timer Second le agregamos:
    Código:
    Call SendData("ANTISH")

    Esto lo que hara es que cada segundo envia la data "ANTISH".


    Luego buscamos:
    Código:
    Case "RNL"
                Rdata = Right$(Rdata, Len(Rdata) - 3)
                'rdata2 = ReadField(1, Rdata, 44)
                frmCrearPersonaje.txtNombre.Text = Rdata
                Exit Sub
    y abajo ponemos:
    Código:
    Case "SHB"
                MsgBox "Porfavor no utilize speedhacks.", vbCritical, "ERROR CRITICO."
                Exit Sub

    Esto lo que hace es avisarte que se descubrio que usas speedhack.







    En el servidor



    Buscamos:
    Código:
    Case "SEG" 'Activa / desactiva el seguro
               If UserList(UserIndex).flags.Seguro Then
                    Call SendData(ToIndex, UserIndex, 0, "SEGOFF")
                Else
                    Call SendData(ToIndex, UserIndex, 0, "SEGON")
                End If
                UserList(UserIndex).flags.Seguro = Not UserList(UserIndex).flags.Seguro
                Exit Sub
    Y abajo colocamos:
    Código:
    Case "ANTISH"
                UserList(UserIndex).flags.AntiSh = UserList(UserIndex).flags.AntiSh + 1
                Exit Sub

    Esto lo que hara es cada vez que el cliente envie la data "ANTISH" se vayan acumulando numeros.


    Vamos al frmmain y creamos un timer de nombre:
    Código:
    AntiSh
    y con interval "5000" ( 5 segundos )
    y como funcion le ponemos:
    Código:
    Dim LagaUi As Integer
    
    
    For LagaUi = 1 To MaxUsers
        If UserList(LagaUi).flags.AntiSh > 5 Then
            Call SendData(ToIndex, LagaUi, 0, "SHB")
            CloseSocket (LagaUi)
        Else
            UserList(LagaUi).flags.AntiSh = 0
        End If
    Next LagaUi

    Esto lo que hara es que cada 5 segundos se limpie la flag antish y si es mayor a 5, estonces echa al usuario del juego.
    Osea que cada 5 segundos, si el cliente mando mas de 1 data por segundo esta usando sh.



    Echa al usuario porque aveses puede que no este usando sh, este codigo DEBERIA funcionar correctamente.


    Si alguien lo prueba digame si le funciono, sino me dicen que lo arreglo.
    -9- .

  6. #6
    Copé DM Staff

    Fecha de Ingreso
    01 jul, 14
    Mensajes
    182
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Continuación:

    Cita Iniciado por ThunderBolt Ver Mensaje
    Subastas



    Este codigo lo cree yo para mi server blizzardao, y hoy lo comparto con uds para que puedan mejorar sus servidores, y comprender mas algunas funciones del visual basic.


    Como funciona? Yo lo que hice fue medio raro, para no complicarme las cosas cree un modulo aparte y un ini donde se guarde la informacion de vendedores y compradores.


    En el servidor


    En el frmmain creamos un timer de nombre:
    Código:
    SubastaTIMER
    con un intervalo de
    Código:
    1500
    de codigo le ponemos:
    Código:
    Dim LagaHubOfertaB
    LagaHubOfertaB = GetVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Ofertaron")
    If LagaHubOfertaB = 0 Then
    'Call SendData(ToAll, 0, 0, "||Si nadie hace una oferta, la subasta se cierra en " & frmMain.SubastaLabel.Caption & " Segundos." & FONTTYPE_INFO)
    
    
    If frmMain.SubastaLabel > 0 Then
        'If frmMain.SubastaLabel = 240 Then
            'Call SendData(ToAll, 0, 0, "||La subasta terminara en 4 minutos." & FONTTYPE_SUBASTA)
        'ElseIf frmMain.SubastaLabel = 180 Then
            'Call SendData(ToAll, 0, 0, "||La subasta terminara en 3 minutos." & FONTTYPE_SUBASTA)
        If frmMain.SubastaLabel = 120 Then
            Call SendData(ToAll, 0, 0, "||La subasta terminara en 2 minutos." & FONTTYPE_SUBASTA)
        ElseIf frmMain.SubastaLabel = 60 Then
            Call SendData(ToAll, 0, 0, "||La subasta terminara en 1 minuto." & FONTTYPE_SUBASTA)
        End If
    frmMain.SubastaLabel = frmMain.SubastaLabel - 1
    Else
    Call SendData(ToAll, 0, 0, "||La subasta se a cerrado, disculpen las molestias." & FONTTYPE_SUBASTA)
    Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Activa", "0")
    frmMain.SubastaTIMER.Enabled = False
    End If
    
    
    Else
    
    
    Dim LagaNombreA
    LagaNombreA = GetVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Comprador")
    Dim LagaNombreB
    LagaNombreB = GetVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Vendedor")
    
    
    Dim LagaCompradorB
    LagaCompradorB = NameIndex(LagaNombreA)
    Dim LagaVendedorB
    LagaVendedorB = NameIndex(LagaNombreB)
    
    
    Dim LagaValorFinalB
    LagaValorFinalB = GetVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Valor")
    
    
    If frmMain.SubastaLabel > 0 Then
        If frmMain.SubastaLabel = 240 Then
            Call SendData(ToAll, 0, 0, "||La subasta terminara en 4 minutos." & FONTTYPE_SUBASTA)
        'ElseIf frmMain.SubastaLabel = 180 Then
            'Call SendData(ToAll, 0, 0, "||La subasta terminara en 3 minutos." & FONTTYPE_SUBASTA)
        ElseIf frmMain.SubastaLabel = 120 Then
            Call SendData(ToAll, 0, 0, "||La subasta terminara en 2 minutos." & FONTTYPE_SUBASTA)
        ElseIf frmMain.SubastaLabel = 60 Then
            Call SendData(ToAll, 0, 0, "||La subasta terminara en 1 minuto." & FONTTYPE_SUBASTA)
        End If
    frmMain.SubastaLabel = frmMain.SubastaLabel - 1
    Else
    
    
    If EstaConectado(LagaVendedorB) And EstaConectado(LagaCompradorB) Then
    If TieneObjetos(LagaObj.ObjIndex, LagaObj.Amount, LagaVendedorB) Then
    If TieneOro(LagaCompradorB, LagaValorFinalB) Then
    
    
    'Call SendData(ToAll, 0, 0, "||Se esta transferiendo el item y el oro." & FONTTYPE_SUBASTA)
    Call PasarItemsyOro(LagaCompradorB, LagaVendedorB, LagaValorFinalB)
            
    Else
        Call SendData(ToAll, 0, 0, "||La subasta se a cancelado debido a que el usuario " & LagaNombreA & " ya no posee las " & LagaValorFinalB & " Monedas de oro acordadas para esta venta." & FONTTYPE_SUBASTA)
        Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Activa", "0")
    frmMain.SubastaTIMER.Enabled = False
        Exit Sub
    End If
    
    
    Else
        Call SendData(ToAll, 0, 0, "||La subasta se a cancelado debido a que el usuario " & LagaNombreB & " ya no posee los Items acordados para esta venta." & FONTTYPE_SUBASTA)
        Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Activa", "0")
    frmMain.SubastaTIMER.Enabled = False
        Exit Sub
    End If
    
    
    Else
        Call SendData(ToAll, 0, 0, "||La subasta se a cancelado debido a el o los usuarios que acordaron la venta se han desconectado." & FONTTYPE_SUBASTA)
        Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Activa", "0")
    frmMain.SubastaTIMER.Enabled = False
        Exit Sub
    End If
    
    
    
    
    Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Activa", "0")
    frmMain.SubastaTIMER.Enabled = False
    
    
            
    End If
    
    
    End If
    End Sub

    Esto lo que hace es leer el comprador, el vendedor, el item, el precio y la cantidad de oro acordada de un archivo de texto, y despues revisar si se poseen todavia los objetos acordados, tambien avisar en cuanto tiempo terminara la subasta.


    Creamos un nuevo modulo, y en el pondremos las siguientes funciones que son IMPORTANTES para que la transaccion se lleve a cabo.


    Código:
    Function EstaConectado(ByVal User As Integer) As Boolean
    
    
    If UserList(User).ConnID <> -1 And UserList(User).flags.UserLogged Then
    EstaConectado = True
    Exit Function
    End If
    
    
    EstaConectado = False
    End Function
    
    
    Function TieneOro(ByVal User As Integer, ByVal oro As Long) As Boolean
    
    
    If UserList(User).Stats.GLD >= oro Then
    TieneOro = True
    Exit Function
    End If
    
    
    TieneOro = False
    End Function
    
    
    Sub PasarItemsyOro(ByVal Comprador As Integer, ByVal Vendedor As Integer, ByVal oro As Long)
    
    
    Dim LagaObjB As Obj
    LagaObjB.ObjIndex = GetVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Objeto")
    LagaObjB.Amount = GetVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Cantidad")
    
    
        UserList(Comprador).Stats.GLD = UserList(Comprador).Stats.GLD - oro
        UserList(Vendedor).Stats.GLD = UserList(Vendedor).Stats.GLD + oro
        Call MeterItemEnInventario(Comprador, LagaObjB)
        Call QuitarObjetos(LagaObjB.ObjIndex, LagaObjB.Amount, Vendedor)
        Call SendData(ToAll, 0, 0, "||El usuario " & UserList(Comprador).Name & " a comprado " & LagaObjB.Amount & " " & ObjData(LagaObjB.ObjIndex).Name & " a " & oro & " Monedas de oro!!!" & FONTTYPE_SUBASTA)
        Call SendUserStatsBox(Comprador)
        Call SendUserStatsBox(Vendedor)
        Call UpdateUserInv(True, Vendedor, 0)
    Exit Sub
    
    
    End Sub

    Estas funciones revisan si se posee el oro, si los usuarios estan conectados y tambien producen es traslado de los items y el oro.




    Luego cuando termina el
    Código:
    Case "Boveda"
    ponemos esto:
    Código:
    Case "/INFOSUBASTA"
                Dim LagaSubActivaC
            LagaSubActivaC = GetVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Activa")
        If LagaSubActivaC = 0 Then
            Call SendData(ToIndex, UserIndex, 0, "||No hay ninguna subasta activa!." & FONTTYPE_INFO)
            Exit Sub
        End If
    Dim LagaPrecioC
    Dim LagaObjC As Obj
    Dim LagaCompradorC
    Dim LagaVendedorC
    LagaObjC.ObjIndex = GetVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Objeto")
    LagaObjC.Amount = GetVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Cantidad")
    LagaPrecioC = GetVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Valor")
    LagaVendedorC = GetVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Vendedor")
    LagaCompradorC = GetVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Comprador")
    Call SendData(ToIndex, UserIndex, 0, "||" & LagaVendedorC & " esta vendiendo " & LagaObj.Amount & " " & ObjData(LagaObj.ObjIndex).Name & "" & FONTTYPE_SUBASTA)
    Call SendData(ToIndex, UserIndex, 0, "||Hasta ahora " & LagaCompradorC & " lidera la subasta ofertando " & LagaPrecioC & " Monedas de oro" & FONTTYPE_SUBASTA)
    Call SendData(ToIndex, UserIndex, 0, "||Para ofertar escribe /Cantidad." & FONTTYPE_SUBASTA)
                Exit Sub
            Case "/CERRARSUBASTA"
                If UserList(UserIndex).flags.Privilegios < 2 Then
                    If Not UserList(UserIndex).Name = GetVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Vendedor") Then
                        Call SendData(ToIndex, UserIndex, 0, "||No puedes cerrar la subasta si no eres el creador de la misma." & FONTTYPE_SUBASTA)
                    Else
                        Call SendData(ToIndex, UserIndex, 0, "||La subasta se a cerrado debido a la descicion de su creador." & FONTTYPE_SUBASTA)
                        Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Activa", "0")
                        frmMain.SubastaTIMER.Enabled = False
                    End If
                Else
                    Call SendData(ToIndex, UserIndex, 0, "||La subasta se a cerrado debido a la descicion de " & UserList(UserIndex).Name & "." & FONTTYPE_SUBASTA)
                    Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Activa", "0")
                    frmMain.SubastaTIMER.Enabled = False
                End If
                Exit Sub

    Esto lo que hace es cerrar la subasta si sos el dueño, o brindar informacion de la misma a los posibles compradores.


    Ahora hay que hacer lo siguente
    1* Al SubastaTimer ponerle de propiedad
    Código:
    Enabled = False
    2* Crear un label "SubastaActivada" con caption
    Código:
    1
    3* Crear un label "SubastaLabel" con caption
    Código:
    180
    4* Crear un label "SubastaLabel2" con caption
    Código:
    180
    5* Creamos un .ini que contenga esta informacion:


    Código:
    [Subasta]
    Activa=0
    Ofertaron=0
    Valor=0
    Vendedor=0
    Comprador=0
    Objeto=0
    Cantidad=0

    SIGUE ABAJO
    -10- .

  7. #7
    Copé DM Staff

    Fecha de Ingreso
    01 jul, 14
    Mensajes
    182
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Continuación:

    Cita Iniciado por ThunderBolt Ver Mensaje
    Ahora lo que nos falta hacer es el comando para crear subastas, para participar en una subasta, para cerrar una subasta y para ver la informacion de la subasta asi que ahora hacemos esto.


    Abajo del comando:
    Código:
    If UCase$(Left$(rdata, 6)) = "/PMSG " Then
            Call mdParty.BroadCastParty(UserIndex, Mid$(rdata, 7))
            Exit Sub
        End If
    ponemos estos comandos:
    Código:
    'Subastar
    If UCase$(Left$(rdata, 10)) = "/SUBASTAR " Then
    rdata = Right$(rdata, Len(rdata) - 10)
    
    
        If Not UserList(UserIndex).Stats.UserSkills(Comerciar) >= 50 Then
            Call SendData(ToIndex, UserIndex, 0, "||Nesesitas almenos 50 puntos en comercio para poder subastar." & FONTTYPE_INFO)
            Exit Sub
        End If
    
    
        If frmMain.subastaActivada.Caption = 0 Then
            Call SendData(ToIndex, UserIndex, 0, "||Los gms han desactivado el sistema de subastas, porfavor espera un rato y vuelve a intentar." & FONTTYPE_INFO)
            Exit Sub
        End If
        
        If UserList(UserIndex).Stats.ELV < 15 Then
        Call SendData(ToIndex, UserIndex, 0, "||Nesesitas nivel 25 para organizar una subasta." & FONTTYPE_INFO)
        Exit Sub
        End If
    
    
    'Gracias gs por la ayuda con algunos parametros.
    ' [GS]
        If InStr(rdata, "@") = False Then
        Call SendData(ToIndex, UserIndex, 0, "||Debes usar @ para separar los terminos." & FONTTYPE_INFO)
        Exit Sub
        End If
        If Numeric(ReadField(1, rdata, Asc("@"))) = False Or Numeric(ReadField(2, rdata, Asc("@"))) = False Or Numeric(ReadField(3, rdata, Asc("@"))) = False Then
        Call SendData(ToIndex, UserIndex, 0, "||Uno de tus parametros no es numericos." & FONTTYPE_INFO)
        Exit Sub
        End If
        If ReadField(1, rdata, Asc("@")) < 1 Or ReadField(1, rdata, Asc("@")) > 20 Or ReadField(2, rdata, Asc("@")) < 1 Or ReadField(2, rdata, Asc("@")) > 10000 Or ReadField(3, rdata, Asc("@")) < 1 Then
        Call SendData(ToIndex, UserIndex, 0, "||Uno de tus parametros es invalido." & FONTTYPE_INFO)
        Exit Sub
        End If
    ' [/GS]
    
    
    
    
        Dim LagaIndex
        LagaIndex = ReadField(1, rdata, Asc("@")) ' SLOT
        
        If UserList(UserIndex).Invent.Object(LagaIndex).Amount > 0 Then
            LagaObj.ObjIndex = UserList(UserIndex).Invent.Object(LagaIndex).ObjIndex
        Else
            Call SendData(ToIndex, UserIndex, 0, "||No hay ningun item en ese slot!." & FONTTYPE_INFO)
            Exit Sub
        End If
        
        If UserList(UserIndex).Invent.Object(LagaIndex).Equipped > 0 Then
            Call SendData(ToIndex, UserIndex, 0, "||No puedes subastar ese item porque lo estas usando!." & FONTTYPE_INFO)
            Exit Sub
        End If
            
        LagaObj.Amount = ReadField(2, rdata, Asc("@")) ' CANTIDAD
        
        Dim LagaInicial
        LagaInicial = ReadField(3, rdata, Asc("@")) ' VALOR INICIAL
    
    
    
    
    'If (Not IsNumeric(ReadField(1, rdata, Asc("@")))) Or LagaObj.Amount = "" Or LagaInicial = "" Then
    '        Call SendData(ToIndex, UserIndex, 0, "||Utilice /Subastar Slot@Cantidad@Precio" & FONTTYPE_INFO)
    '        Exit Sub
    '    End If
    
    
    Dim LagaSubActivaA
    LagaSubActivaA = GetVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Activa")
    
    
    If LagaSubActivaA = 1 Then
        Call SendData(ToIndex, UserIndex, 0, "||Ya hay una subasta activa en estos momentos!." & FONTTYPE_INFO)
        Exit Sub
    End If
    
    
    If Not ObjData(LagaObj.ObjIndex).Subastable = 1 Then
        Call SendData(ToIndex, UserIndex, 0, "||Este objeto no puede ser subastado!." & FONTTYPE_INFO)
        Exit Sub
    End If
    If Not TieneObjetos(LagaObj.ObjIndex, LagaObj.Amount, UserIndex) Then
        Call SendData(ToIndex, UserIndex, 0, "||No posees el objeto o la cantidad que deseas subastar." & FONTTYPE_INFO)
        Exit Sub
    End If
        
    Dim LagaNombre
        LagaNombre = ObjData(LagaObj.ObjIndex).Name
    
    
    frmMain.SubastaLabel2 = 180
    frmMain.SubastaLabel = 180
    
    
    Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Activa", "1")
    Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Ofertaron", "0")
    Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Valor", "" & LagaInicial & "")
    Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Vendedor", "" & UserList(UserIndex).Name & "")
    Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Comprador", "0")
    Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Objeto", "" & LagaObj.ObjIndex & "")
    Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Cantidad", "" & LagaObj.Amount & "")
    
    
    Call SendData(ToAll, 0, 0, "||" & UserList(UserIndex).Name & " esta subastando " & LagaObj.Amount & " " & LagaNombre & " con un valor inicial de " & LagaInicial & " monedas de oro, Para participar escribe /Ofertar Cantidad, les recuerdo que solamente tienen 5 minuto para ofertar." & FONTTYPE_SUBASTA)
    frmMain.SubastaTIMER.Enabled = True
    
    
    Exit Sub
    End If
    
    
    If UCase$(Left$(rdata, 9)) = "/OFERTAR " Then
        Dim LagaOro As Long
            LagaOro = Right$(rdata, Len(rdata) - 9)
        
        Dim LagaSubActiva
            LagaSubActiva = GetVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Activa")
        Dim LagaValorFinalXI As Long
            LagaValorFinalXI = GetVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Valor")
        
        If UserList(UserIndex).Stats.ELV < 15 Then
            Call SendData(ToIndex, UserIndex, 0, "||Nesesitas almenos tener nivel 15 para poder participar en una subasta." & FONTTYPE_INFO)
            Exit Sub
        End If
        
        If Not UserList(UserIndex).Stats.UserSkills(Comerciar) >= 20 Then
            Call SendData(ToIndex, UserIndex, 0, "||Nesesitas tener almenos 20 puntos en comercio para poder participar en una subasta." & FONTTYPE_INFO)
            Exit Sub
        End If
    
    
        If LagaSubActiva = 0 Then
            Call SendData(ToIndex, UserIndex, 0, "||No hay ninguna subasta activa!." & FONTTYPE_INFO)
            Exit Sub
        End If
        
        If LagaOro > UserList(UserIndex).Stats.GLD Then
            Call SendData(ToIndex, UserIndex, 0, "||No posees esa cantidad de oro." & FONTTYPE_INFO)
            Exit Sub
        End If
        
        If Not LagaOro > LagaValorFinalXI + 499 Then
            Call SendData(ToIndex, UserIndex, 0, "||Debe haber almenos una diferencia de 500 monedas a la ultima oferta!." & FONTTYPE_INFO)
            Exit Sub
        End If
        
        If LagaOro > LagaValorFinalXI Then
    
    
        
        LagaValorFinalXI = LagaOro
        Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Valor", "" & LagaValorFinalXI & "")
        
        Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Comprador", "" & UserList(UserIndex).Name & "")
        
        Call SendData(ToAll, 0, 0, "||" & UserList(UserIndex).Name & " a superado la oferta anterior ofreciendo " & LagaValorFinalXI & " Monedas de oro, Para participar escribe /Ofertar Cantidad." & FONTTYPE_SUBASTA)
    
    
        Call WriteVar(App.Path & "\Dat\" & "Subasta.ini", "Subasta", "Ofertaron", "1")
        
        Else
        Call SendData(ToIndex, UserIndex, 0, "||Losiento, ya hay una oferta mayor o igual a la tuya." & FONTTYPE_INFO)
            Exit Sub
        End If
        
    Exit Sub
    End If

    Estos comandos lo que hacen son almacenar informacion en el ini del cual se va a leer la informacion cuando termine la subasta.




    Y listo, terminamos..


    Para subastar se hace /Subastar SLOT@CANTIDAD@PRECIO
    Para ofertar /Ofertar CANTIDAD
    Para ver informacion /Infosubasta
    Para cerrar la subasta /CerrarSubasta




    FALTA 1 COSA


    Buscamos:
    Código:
    Public Const FONTTYPE_SERVER = "~0~185~0~0~0"
    y abajo ponemos:
    Código:
    Public Const FONTTYPE_SUBASTA = "~255~255~0~1~1"
    -11- .

  8. #8
    Copé DM Staff

    Fecha de Ingreso
    01 jul, 14
    Mensajes
    182
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Continuación:

    Cita Iniciado por Norimaro
    Sakar Funcion Ctrl+I


    Codigo Para El Cliente


    Viendo Que Muchas Veces Preguntan Lo Mismo Decidi Hacer Este Post.


    1 - Vamos Al Cliente Al FrmConect.frm Y Buscamos:
    Código:
    Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    
    
    'Make Server IP and Port box visible
    If KeyCode = vbKeyI And Shift = vbCtrlMask Then
        
        'Port
        PortTxt.Visible = True
        'Label4.Visible = True
        
        'Server IP
        PortTxt.Text = "7666"
        IPTxt.Text = "192.168.0.2"
        IPTxt.Visible = True
        'Label5.Visible = True
        
        KeyCode = 0
        Exit Sub
    End If
    
    
    End Sub
    2 - Seleccionamos Todo Eso Y Lo Borramos
    3 - Listo Ya No Esta La Funcion Ctrl+I Que Mostraba La IP Y El Puerto
    Cita Iniciado por Norimaro
    Manual Visual Basic





    Download
    -12- .
    --
    =====
    --
    Cita Iniciado por Norimaro
    Código:
    Sub LoadMapData()
    
    
    If frmMain.Visible Then frmMain.txStatus.Caption = "Cargando mapas..."
    
    
    Dim Map As Integer
    Dim TempInt As Integer
    Dim tFileName As String
    Dim npcfile As String
    
    
    On Error GoTo man
        
        '[Shura] Aki Se Edita El Numero De Mapas
        NumMaps = 188
        Call InitAreas
        
        frmCargando.cargar.min = 0
        frmCargando.cargar.max = NumMaps
        frmCargando.cargar.value = 0
        
        '[Shura] Aki Se Edita La Carpeta Donde Se Encuentran Los Mapas
        MapPath = "\Maps\"
        
        
        ReDim MapData(1 To NumMaps, XMinMapSize To XMaxMapSize, YMinMapSize To YMaxMapSize) As MapBlock
        ReDim MapInfo(1 To NumMaps) As MapInfo
          
        For Map = 1 To NumMaps
            
            tFileName = App.Path & MapPath & "Mapa" & Map
            Call CargarMapa(Map, tFileName)
            
            frmCargando.cargar.value = frmCargando.cargar.value + 1
            DoEvents
        Next Map
    
    
    Exit Sub
    
    
    man:
        MsgBox ("Error durante la carga de mapas, el mapa " & Map & " contiene errores")
        Call LogError(Date & " " & Err.description & " " & Err.HelpContext & " " & Err.HelpFile & " " & Err.source)
    
    
    End Sub

    De Esta Forma Sakamos El Map.dat Ubicado En La Carpeta Dat
    Cita Iniciado por Norimaro
    Complete Idiots Guide to Visual Basic 6





    Download
    -13- .
    Última edición por Argentum Online; 18/01/2015 a las 21:23

  9. #9
    Copé DM Staff

    Fecha de Ingreso
    01 jul, 14
    Mensajes
    182
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Continuación:

    Cita Iniciado por Norimaro Ver Mensaje
    Código:
    Sub LoadMapData()
    
    
    If frmMain.Visible Then frmMain.txStatus.Caption = "Cargando mapas..."
    
    
    Dim Map As Integer
    Dim TempInt As Integer
    Dim tFileName As String
    Dim npcfile As String
    
    
    On Error GoTo man
        
        '[Shura] Aki Se Edita El Numero De Mapas
        NumMaps = 188
        Call InitAreas
        
        frmCargando.cargar.min = 0
        frmCargando.cargar.max = NumMaps
        frmCargando.cargar.value = 0
        
        '[Shura] Aki Se Edita La Carpeta Donde Se Encuentran Los Mapas
        MapPath = "\Maps\"
        
        
        ReDim MapData(1 To NumMaps, XMinMapSize To XMaxMapSize, YMinMapSize To YMaxMapSize) As MapBlock
        ReDim MapInfo(1 To NumMaps) As MapInfo
          
        For Map = 1 To NumMaps
            
            tFileName = App.Path & MapPath & "Mapa" & Map
            Call CargarMapa(Map, tFileName)
            
            frmCargando.cargar.value = frmCargando.cargar.value + 1
            DoEvents
        Next Map
    
    
    Exit Sub
    
    
    man:
        MsgBox ("Error durante la carga de mapas, el mapa " & Map & " contiene errores")
        Call LogError(Date & " " & Err.description & " " & Err.HelpContext & " " & Err.HelpFile & " " & Err.source)
    
    
    End Sub

    De Esta Forma Sakamos El Map.dat Ubicado En La Carpeta Dat
    Cita Iniciado por Norimaro
    Advance Microsoft Visual Basic 6.0 2nd Edition


    Download
    Cita Iniciado por cocoKPO
    para arrancar con las skills en 100 y lvl max xD
    sub connectnewuser


    abajo de
    Select Case UCase$(UserRaza)
    bla bla bla
    end select

    ponen:
    for i = 1 to max_elv -1
    userlist(userindex).stats.exp = userlist(userindex).stats.elu
    next I


    for I = 0 to maxskills
    userlist(userindex).stats.userskills(I) = 100
    next I



    y borran esto
    For LoopC = 1 To NUMSKILLS
    totalskpts = totalskpts + abs(UserList(UserIndex).Stats.UserSkills(LoopC))
    Next LoopC
    -14- .
    Última edición por Argentum Online; 18/01/2015 a las 21:21



Thread Footer

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •