Sistema de Muertes por Usuarios (SMU)
Función del sistema :
Introducción :
•Al iniciarse el servidor... por medio de un timer, se selecciona un usuario al azar de TODOS los que se encuentren conectados. El sistema está hecho para que se seleccione a un usuario considerablemente poderoso según sus status. (Nivel, oro,etc). Al seleccionarse este usuario, el mismo será denominado como 'Buscado' de las tierras del Argentum.
¿Que función cumple este código/sistema?
•La función que cumple principalmente es fomentar la matanzas entre usuarios (agite).
Otros...
•El personaje buscado no podrá acceder a mapas seguros, si lo hace, no será más un usuario buscado y se seleccionará a otro automáticamente.
•Si el personaje buscado desconecta del servidor, el mismo buscará a otro personaje.
•Si el personaje buscado, es asesinado por otro personaje, el buscado pederá 1.000.000 monedas de oros, mientras que el que lo asesinó las ganará. Luego de esto el servidor seleccionará a un nuevo usuario random que se encuentre conectado.
A todo esto... ¿De que sirve ser un personaje buscado si tenés tantas contras?
El personaje que tenga la característica de ser buscado, tendrá como recompensa 1.000.000 monedas de oros cada 10/15 minutos de supervivencia, sin embargo, hay un tiempo límite, una vez llegado a los 40 minutos de supervivencia, se seleccionará a un nuevo usuario o bien personaje. (Está permitido que sólo se entregue tres (3) veces la recompensa, por ende ganará 3KK (3.000.000 monedas de oros).
Requisitos para ser usuario buscado
•Ser criminal.
•En su defecto, ser nivel máximo o 5 niveles menos.
•Tener posesión de 1.000.000 monedas de oros o más. (Pueden cambiar la cantidad ya que se guarda en una constante en el módulo del sistema).
•Encontrarse en un mapa INSEGURO.
•No estar muerto.
•Y no ser ADMINISTRADOR (GM).
Si no hay un usuario con estas características conectado, no se seleccionará a ninguno. Cualquier error sin importancia podria ser 'ignorado' por asi decirlo ya que se utiliza goto error.
SERVIDOR
1-Creamos un nuevo módulo con cualquier nombre (yo lo nombré como "mod_Busquedas" sin las comillas"), y ponemos en su interior lo siguiente:
'
- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
- '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
- 'Author: J.A.O (Juan Agu$tín Oliva) / AGUSHH
- 'mod_Buscados
- ' ---
- 'MODULO FUNCTION ; CAZA DE PERSONAJES ONLINE
- '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
- '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
- Option Explicit
- Public Const RECOMPENZA_BUSCADO = 999999
- Public Const MINUTOS_BUSQUEDA = 40
- '///JAO/// _
- Con esto verificamos que no exista ningún usuario buscado, asi evitamos _
- buguear todo =P / A ESTA FUNCIÓN NO LE DAMOS USO EN ESTE CÓDIGO.
- Private Function ExisteUserBuscado(ByVal UserIndex As Integer) As Boolean
- If UserList(UserIndex).Buscado > 0 Then
- ExisteUserBuscado = True
- Else
- ExisteUserBuscado = False
- End If
- End Function
- Public Sub BuscaUsuarioACazar()
- On Error GoTo jao
- Dim i As Integer
- Dim UserCazado As Byte
- For i = 1 To LastUser
- If i < 1 Then Exit Sub
- With UserList(i)
- If BuscadoExistente = True Then Exit Sub
- If Criminal(i) = True And UserList(i).Stats.ELV >= STAT_MAXELV - 5 And UserList(i).Stats.GLD > RECOMPENZA_BUSCADO And MapInfo(.Pos.Map).Pk = True And UserList(i).flags.Muerto = 0 And UserList(i).flags.Privilegios < PlayerType.Consejero Then ' 1kk JAO
- UserCazado = 1
- Else
- UserCazado = 0
- End If
- If UltimoIndexBuscado = i Then UserCazado = 0
- '''''''JAO'''''''
- If UserCazado > 0 Then
- UserList(i).Buscado = 1
- UserList(i).TiempoBuscado = 0
- UltimoIndexBuscado = i
- BuscadoExistente = True
- Call SendData(SendTarget.ToIndex, UserIndex, 0, "||" & UCase$(UserList(i).name) & " es el nuevo buscado de las tierras de Argentum." & FONTTYPE_CENTINELA)
- Else
- 'Call SendData(SendTarget.ToIndex, UserIndex, 0, "||No hay ningún buscado en este momento..." & FONTTYPE_CENTINELA)
- End If
- End With
- Next i
- jao: 'JAO
- End Sub
- 'FUNCIÓN DEL CÓDIGO : _
- Cada X tiempo se verifica que no exista ningún personaje buscado, si es asi se selecciona uno al azar de todos los personajes onlines existentes. El personaje buscado tiene muchos beneficios, por ejemplo, cada X cantidad de tiempo se le otorga una considerable cantidad de oro. La contra es que al ser asesinado, perderá 1.000.000 monedas de oros (no es una gran perdida ya que ganaría cerca de 3kk). El usuario buscado tiene un límite de 40 minutos con esta caracteristica, una vez concurridos esos 40 minutos, se elije a un nuevo usuario.
- 'CONDICIONES ... _
- Si un usuario asesina al usuario buscado, se elejirá otro usuario al azar. El usuario que asesinó al usuario buscado ganará 1kk, mientras que el usuario buscado los perderá. _
- Si el usuario buscado se desconecta, busca a uno nuevo _
- El usuario buscado debe estar en un mapa inseguro, no ser newbie, ser criminal y no ser administrador/gm. _
- Solo puede existir un personaje buscado .
2-Buscamos:
- If MapData(Map, X, Y).TileExit.Map > 0 Then
Y debajo ponemos:
- 'SMU (Adaptacion)
- If UserList(UserIndex).Buscado > 0 And MapInfo(UserList(UserIndex).Pos.Map).Pk = True Then
- 'Damos el mensaje de que el usuario 'escapoó'
- Call SendData(SendTarget.ToIndex, UserIndex, 0, "||" & UserList(UserIndex).name & " ha escapado..." & FONTTYPE_INFO)
- UserList(UserIndex).Buscado = 0
- UserList(UserIndex).TiempoBuscado = 0
- BuscadoExistente = False
- 'Buscamos uno nuevo ;-)
- Call BuscaUsuarioACazar
- End If
3-Buscamos:
- Sub ContarMuerte(ByVal Muerto As Integer, ByVal Atacante As Integer)
Y en el mismo sub, buscamos:
- If EsNewbie(Muerto) Then Exit Sub
y debajo ponemos:
- If UserList(Muerto).Buscado > 0 Then
- UserList(Atacante).Stats.GLD = UserList(Atacante).Stats.GLD + val(RECOMPENZA_BUSCADO + 1)
- UserList(Muerto).Stats.GLD = UserList(Muerto).Stats.GLD - val(RECOMPENZA_BUSCADO + 1)
- UserList(Muerto).Buscado = 0
- UserList(Muerto).TiempoBuscado = 0
- BuscadoExistente = False
- Call BuscaUsuarioACazar ' buscamos otro... JAO
- End If
4-Buscamos:
- Public Type User
y debajo ponemos:
- Buscado As Byte
- TiempoBuscado As Byte
5-En el módulo declaraciones, debajo del Option Explicit agregamos lo siguiente:
- Public BuscadoExistente As Boolean
- Public UltimoIndexBuscado As Integer
6-Creamos un Timer en el Frmmain del Servidor con el nombre timBusquedas y con un intervalo de 10000 (Enable = True)
Una ves Creado el Timer, le ponemos de codigo:
- Dim i As Integer
- For i = 1 To LastUser
- 'JAO : _
- Con esto buscamos a un usuario, si no habia ningúno...
- If UserList(i).Buscado < 1 Then
- Call BuscaUsuarioACazar
- End If
- If UserList(i).Buscado > 0 Then
- UserList(i).TiempoBuscado = UserList(i).TiempoBuscado + 1
- End If
- Dim JAOK As Byte
- JAOK = JAOK + 1
- If JAOK = 12 And UserList(i).Buscado > 0 Then
- Call SendData(SendTarget.ToAll, i, 0, "|Buscados> " & UCase$(UserList(i).name) & " se ubica en el mapa " & UserList(i).pos.map & ". Aquél que logre asesinarlo, al pasar el tiempo obtendrá grandes recompensas." & FONTTYPE_CENTINELA)
- JAOK = 0
- End If
- If UserList(i).TiempoBuscado = MINUTOS_BUSQUEDA - 30 Then
- UserList(i).Stats.gld = UserList(i).Stats.gld + val(RECOMPENZA_BUSCADO + 1)
- Call SendUserStatsBox(i)
- Call SendData(SendTarget.ToAll, i, 0, "||Recibes " & RECOMPENZA_BUSCADO + 1 & " monedas de oros por supervivir." & FONTTYPE_CENTINELA)
- ElseIf UserList(i).TiempoBuscado = MINUTOS_BUSQUEDA / 2 Then
- UserList(i).Stats.gld = UserList(i).Stats.gld + val(RECOMPENZA_BUSCADO + 1)
- Call SendUserStatsBox(i)
- Call SendData(SendTarget.ToAll, i, 0, "||Recibes " & RECOMPENZA_BUSCADO + 1 & " monedas de oros por supervivir." & FONTTYPE_CENTINELA)
- ElseIf UserList(i).TiempoBuscado = MINUTOS_BUSQUEDA - 5 Then
- UserList(i).Stats.gld = UserList(i).Stats.gld + val(RECOMPENZA_BUSCADO + 1)
- Call SendUserStatsBox(i)
- Call SendData(SendTarget.ToAll, i, 0, "||Recibes " & RECOMPENZA_BUSCADO + 1 & " monedas de oros por supervivir." & FONTTYPE_CENTINELA)
- End If
- If UserList(i).TiempoBuscado >= MINUTOS_BUSQUEDA Then
- UserList(i).Buscado = 0
- UserList(i).TiempoBuscado = 0
- BuscadoExistente = False
- Call BuscaUsuarioACazar
- End If
- Next i
7-Buscamos:
- Sub CloseSocket(ByVal UserIndex As Integer)
Y en el mismo sub, buscamos:
- If Centinela.RevisandoUserIndex = UserIndex Then _
- Call modCentinela.CentinelaUserLogout
Y debajo ponemos:
- If UserList(UserIndex).Buscado > 0 Then
- UserList(UserIndex).Buscado = 0
- UserList(UserIndex).TiempoBuscado = 0
- BuscadoExistente = False
- Call BuscaUsuarioACazar
- End If
Todos los Créditos a Agushh por hacer este sistema, yo solo lo adapte.
Espero que les sirva, Nos vemos!
Gran parte del código es funcional, ya que lo Testie, cualquier cosa comenten que repararemos el error






414![Destructor de Mentes [5] Destructor de Mentes [5]](./images/ranks/Rango17.gif)





![Dragon Ancestral [1] Dragon Ancestral [1]](./images/ranks/Rango30.gif)

![Dragon Ancestral [2] Dragon Ancestral [2]](./images/ranks/Rango31.gif)

![Aprendiz [1] Aprendiz [1]](./images/ranks/Rango6.gif)

![Dragon Ancestral [5] Dragon Ancestral [5]](./images/ranks/Rango34.gif)


![Aprendiz [6] Aprendiz [6]](./images/ranks/Rango11.gif)

![Oraculo [1] Oraculo [1]](./images/ranks/Rango25.gif)

![Oraculo [5] Oraculo [5]](./images/ranks/Rango29.gif)









![Destructor de Mentes [6] Destructor de Mentes [6]](./images/ranks/Rango18.gif)
