PDA

Ver la Versión Completa : Programación Básica de Servidores.-



Argentum Online
05/07/2014, 00:37
Originalmente publicado 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)

Argentum Online
05/07/2014, 00:37
Continuación:


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- .
--
=====
--

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)

Argentum Online
05/07/2014, 00:38
Continuación:


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- .

Argentum Online
05/07/2014, 00:38
Continuación:


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- .
--
=====
--

Subir skills sin limete desde nivel uno y con un 100% de efectividad:



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- .

Argentum Online
05/07/2014, 00:39
Continuación:



Pasar de nivel en todos los golpes a NPC


Tiene que hacer esto...
Busacas esto:



'[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:



'[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- .
--
=====
--


¿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:

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:

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- .
--
=====
--


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:
Call SendData("ANTISH")


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


Luego buscamos:
Case "RNL"
Rdata = Right$(Rdata, Len(Rdata) - 3)
'rdata2 = ReadField(1, Rdata, 44)
frmCrearPersonaje.txtNombre.Text = Rdata
Exit Sub
y abajo ponemos:
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:
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:
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:
AntiSh y con interval "5000" ( 5 segundos )
y como funcion le ponemos:
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- .

Argentum Online
05/07/2014, 00:39
Continuación:



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:
SubastaTIMER con un intervalo de
1500
de codigo le ponemos:
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.



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
Case "Boveda"
ponemos esto:
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
Enabled = False
2* Crear un label "SubastaActivada" con caption
1
3* Crear un label "SubastaLabel" con caption
180
4* Crear un label "SubastaLabel2" con caption
180
5* Creamos un .ini que contenga esta informacion:



[Subasta]
Activa=0
Ofertaron=0
Valor=0
Vendedor=0
Comprador=0
Objeto=0
Cantidad=0


SIGUE ABAJO


-10- .

Argentum Online
05/07/2014, 00:39
Continuación:


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:
If UCase$(Left$(rdata, 6)) = "/PMSG " Then
Call mdParty.BroadCastParty(UserIndex, Mid$(rdata, 7))
Exit Sub
End If
ponemos estos comandos:
'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.
'
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
'




Dim LagaIndex
LagaIndex = ReadField(1, rdata, Asc("@")) ' SLOT

If UserList(UserIndex).Invent.Object(LagaIndex).Amoun t > 0 Then
LagaObj.ObjIndex = UserList(UserIndex).Invent.Object(LagaIndex).ObjIn dex
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).Equip ped > 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:
Public Const FONTTYPE_SERVER = "~0~185~0~0~0"
y abajo ponemos:
Public Const FONTTYPE_SUBASTA = "~255~255~0~1~1"


-11- .

Argentum Online
05/07/2014, 00:39
Continuación:


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:

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


Manual Visual Basic


http://www.deitel.com/books/vb6HTP1/images/vb6HTP1_large.jpg


Download


-12- .
--
=====
--


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


Complete Idiots Guide to Visual Basic 6


http://i131.photobucket.com/albums/p296/files100014/078971812.jpg


Download


-13- .

Argentum Online
05/07/2014, 00:40
Continuación:



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


Advance Microsoft Visual Basic 6.0 2nd Edition


Download


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- .