Códigos Para Servidores

Información Extraída De Alkon

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)

  

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:
 
 
Public Const STAT_MAXELV = 99
Public Const STAT_MAXHP = 999
Public Const STAT_MAXSTA = 999
Public Const STAT_MAXMAN = 2000
Public Const STAT_MAXHIT = 99
Public Const STAT_MAXDEF = 99
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:
 
 
Public Const STAT_MAXELV = 150
Public Const STAT_MAXHP = 1299
Public Const STAT_MAXSTA = 999
Public Const STAT_MAXMAN = 3500
Public Const STAT_MAXHIT = 99
Public Const STAT_MAXDEF = 99
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:
 
 
Npclist(NpcIndex).GiveEXP = val(GetVar(npcfile, "NPC" & NpcNumber, "GiveEXP"))
Y
 
 
Npclist(NpcIndex).GiveGLD = val(GetVar(npcfile, "NPC" & NpcNumber, "GiveGLD"))
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:
 
 
Npclist(NpcIndex).GiveEXP = val(GetVar(npcfile, "NPC" & NpcNumber, "GiveEXP")) * 10
Y
 
 
Npclist(NpcIndex).GiveGLD = val(GetVar(npcfile, "NPC" & NpcNumber, "GiveGLD")) * 7
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:
 
 
If UserList(UserIndex).Stats.ELV < 25 Then
Call SendData(ToIndex, UserIndex, 0, "||" & vbWhite & "°" & "Para unirte a nuestras fuerzas debes ser al menos de nivel 25!!!" & "°" & str(Npclist(UserList(UserIndex).flags.TargetNPC).C har.charindex))
Exit Sub
End If
Y Ahi Modificamos Lo Siguiente:
 
 
If UserList(UserIndex).Stats.ELV < 15 Then
Call SendData(ToIndex, UserIndex, 0, "||" & vbWhite & "°" & "Para unirte a nuestras fuerzas debes ser al menos de nivel 15!!!" & "°" & str(Npclist(UserList(UserIndex).flags.TargetNPC).C har.charindex))
Exit Sub
End If
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:
 
 
If UserList(UserIndex).Faccion.CriminalesMatados < 30 Then
Call SendData(ToIndex, UserIndex, 0, "||" & vbWhite & "°" & "Para unirte a nuestras fuerzas debes matar al menos 30 criminales, solo has matado " & UserList(UserIndex).Faccion.CriminalesMatados & "°" & str(Npclist(UserList(UserIndex).flags.TargetNPC).C har.charindex))
Exit Sub
End If
Ahora Supongamos Que Quiero Que Se Necesitan 50 Criminales Para Ingresar A La Armada Real Como Hago?

 
 
If UserList(UserIndex).Faccion.CriminalesMatados < 60 Then
Call SendData(ToIndex, UserIndex, 0, "||" & vbWhite & "°" & "Para unirte a nuestras fuerzas debes matar al menos 60 criminales, solo has matado " & UserList(UserIndex).Faccion.CriminalesMatados & "°" & str(Npclist(UserList(UserIndex).flags.TargetNPC).C har.charindex))
Exit Sub
End If
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:
 
 
Public Function TituloReal(ByVal UserIndex As Integer) As String

Select Case UserList(UserIndex).Faccion.RecompensasReal
Case 0
TituloReal = "Aprendiz "
Case 1
TituloReal = "Escudero"
Case 2
TituloReal = "Caballero"
Case 3
TituloReal = "Capitan"
Case 4
TituloReal = "Teniente"
Case 5
TituloReal = "Comandante"
Case 6
TituloReal = "Mariscal"
Case 7
TituloReal = "Senescal"
Case 8
TituloReal = "Protector"
Case 9
TituloReal = "Guardian del Bien"
Case Else
TituloReal = "Campeón de la Luz"
End Select

End Function
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:
 
 
Case "TIRDAD"

UserList(UserIndex).Stats.UserAtributos(1) = Int(RandomNumber(3, 6) + RandomNumber(3, 6) + RandomNumber(1, 6))
UserList(UserIndex).Stats.UserAtributos(2) = Int(RandomNumber(3, 6) + RandomNumber(3, 6) + RandomNumber(1, 6))
UserList(UserIndex).Stats.UserAtributos(3) = Int(RandomNumber(6, 6) + RandomNumber(3, 6) + RandomNumber(3, 6))
UserList(UserIndex).Stats.UserAtributos(4) = Int(RandomNumber(3, 6) + RandomNumber(3, 6) + RandomNumber(1, 6))
UserList(UserIndex).Stats.UserAtributos(5) = Int(RandomNumber(6, 6) + RandomNumber(3, 6) + RandomNumber(3, 6))
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:
 
 
Case "TIRDAD"

UserList(UserIndex).Stats.UserAtributos(1) = Int(RandomNumber(16, 18))
UserList(UserIndex).Stats.UserAtributos(2) = Int(RandomNumber(16, 18))
UserList(UserIndex).Stats.UserAtributos(3) = Int(RandomNumber(16, 18))
UserList(UserIndex).Stats.UserAtributos(4) = Int(RandomNumber(16, 18))
UserList(UserIndex).Stats.UserAtributos(5) = Int(RandomNumber(16, 18))
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:
 
 
Case "TIRDAD"

UserList(UserIndex).Stats.UserAtributos(1) = Int(RandomNumber(16, 25))
UserList(UserIndex).Stats.UserAtributos(2) = Int(RandomNumber(16, 25))
UserList(UserIndex).Stats.UserAtributos(3) = Int(RandomNumber(16, 18))
UserList(UserIndex).Stats.UserAtributos(4) = Int(RandomNumber(16, 18))
UserList(UserIndex).Stats.UserAtributos(5) = Int(RandomNumber(16, 18))
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
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:
 
 
Private Function MineralesParaLingote(ByVal Lingote As iMinerales) As Integer
Select Case Lingote
Case iMinerales.HierroCrudo
MineralesParaLingote = 13
Case iMinerales.PlataCruda
MineralesParaLingote = 25
Case iMinerales.OroCrudo
MineralesParaLingote = 50
Case Else
MineralesParaLingote = 10000
End Select
End Function
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:
 
 
Private Function MineralesParaLingote(ByVal Lingote As iMinerales) As Integer
Select Case Lingote
Case iMinerales.HierroCrudo
MineralesParaLingote = 5
Case iMinerales.PlataCruda
MineralesParaLingote = 25
Case iMinerales.OroCrudo
MineralesParaLingote = 30
Case Else
MineralesParaLingote = 10000
End Select
End Function
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:
 
 
If UserList(UserIndex).Clase = "Leñador" Then
MiObj.Amount = RandomNumber(1, 5)
Else
MiObj.Amount = 1
End If
Lo Que Tenemos Que Hacer Es Cambiar El Valor De MiObj.Amount. Por Ejemplo Asi:
 
 
If UserList(UserIndex).Clase = "Leñador" Then
MiObj.Amount = RandomNumber(3, 7)
Else
MiObj.Amount = 1
End If
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?

 
 
If UserList(UserIndex).Clase = "Leñador" Then
MiObj.Amount = RandomNumber(3, 7)
Else
MiObj.Amount = RandomNumber(1, 2)
End If
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:
 
 
If UserList(UserIndex).Clase = "Minero" Then
MiObj.Amount = RandomNumber(1, 6)
Else
MiObj.Amount = 1
End If
Ahora Supongamos Que Buscamos Hacer Que El Minero Sake Entre 2 Y 10 Minerales Esto Seria Asi:
 
 
If UserList(UserIndex).Clase = "Minero" Then
MiObj.Amount = RandomNumber(2, 10)
Else
MiObj.Amount = 1
End If
16 - Como Modifico El Tiempo De Carcel Por Pikete?

Bueno Esto Es Muy Simple Vamos Al Mudulo Declares.bas Y Buscamos:
 
 
Public Const TIEMPO_CARCEL_PIQUETE = 10
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:
 
 
Public Const MAXMASCOTASENTRENADOR = 7
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:
 
 
Public Const MAXMASCOTAS = 3
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)
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

 

 

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

Primero Tienen Que Ir A Las Propiedades Del Proyecto

Luego Les Va A Aparecer La Siguiente Ventana:

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

Cuidado, modificar ...
Public Const MAX_INVENTORY_OBJS As Integer = 10000
tambien necesita modificarse el Cliente, sino veremos unos bugs alucinantes.
 

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

 
Codigo:

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

 

 

Pasar de nivel en todos los golpes a NPC


Tiene que hacer esto...
Busacas esto:

 
Codigo:

 

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

 
Codigo:

 

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

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

 

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

 

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.

Información extraída De Alkon-Foro

By El Rola

 

 

 

1