SpikeL Comunidad
Hola, bienvenido a SpikeL Foro.

Si eres nuevo, deves registrarte.

Si ya tienes una cuenta, deves ingresar.

¡Muchas gracias!

PD: Si te has registrado pero no puedes logear tienes que activar tu cuenta desde tu e-mail.


Unirse al foro, es rápido y fácil

SpikeL Comunidad
Hola, bienvenido a SpikeL Foro.

Si eres nuevo, deves registrarte.

Si ya tienes una cuenta, deves ingresar.

¡Muchas gracias!

PD: Si te has registrado pero no puedes logear tienes que activar tu cuenta desde tu e-mail.
SpikeL Comunidad
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Sistema de subastas

Ir abajo

Sistema de subastas Empty Sistema de subastas

Mensaje por santi55 Lun Dic 20, 2010 3:41 pm

TODO EN EL SERVIDOR..

Empecemos:

Abrimos el frmMain creamos un Timer con las siguientes caracteristicas:

Nombre: SubastaTIMER
Intervalo: 1500
Enabled = False


Le hacemos Doble CLICK y le ponemos lo siguiente:

Dim LagaHubOfertaB
LagaHubOfertaB = GetVar(App.Path & "Dat" & "Subasta.ini", "Subasta", "Ofertaron")
If LagaHubOfertaB = 0 Then
'Call SendData(SendTarget.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(SendTarget.ToAll, 0, 0, "||La subasta terminara en 4 minutos." & FONTTYPE_SUBASTA)
'ElseIf frmMain.SubastaLabel = 180 Then
'Call SendData(SendTarget.ToAll, 0, 0, "||La subasta terminara en 3 minutos." & FONTTYPE_SUBASTA)
If frmMain.SubastaLabel = 120 Then
Call SendData(SendTarget.ToAll, 0, 0, "||La subasta terminara en 2 minutos." & FONTTYPE_SUBASTA)
ElseIf frmMain.SubastaLabel = 60 Then
Call SendData(SendTarget.ToAll, 0, 0, "||La subasta terminara en 1 minuto." & FONTTYPE_SUBASTA)
End If
frmMain.SubastaLabel = frmMain.SubastaLabel - 1
Else
Call SendData(SendTarget.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 As String
LagaNombreA = GetVar(App.Path & "Dat" & "Subasta.ini", "Subasta", "Comprador")
Dim LagaNombreB As String
LagaNombreB = GetVar(App.Path & "Dat" & "Subasta.ini", "Subasta", "Vendedor")

Dim LagaCompradorB As String
LagaCompradorB = NameIndex(LagaNombreA)
Dim LagaVendedorB As String
LagaVendedorB = NameIndex(LagaNombreB)

Dim LagaValorFinalB As String
LagaValorFinalB = GetVar(App.Path & "Dat" & "Subasta.ini", "Subasta", "Valor")

If frmMain.SubastaLabel > 0 Then
If frmMain.SubastaLabel = 240 Then
Call SendData(SendTarget.ToAll, 0, 0, "||La subasta terminara en 4 minutos." & FONTTYPE_SUBASTA)
'ElseIf frmMain.SubastaLabel = 180 Then
'Call SendData(SendTarget.ToAll, 0, 0, "||La subasta terminara en 3 minutos." & FONTTYPE_SUBASTA)
ElseIf frmMain.SubastaLabel = 120 Then
Call SendData(SendTarget.ToAll, 0, 0, "||La subasta terminara en 2 minutos." & FONTTYPE_SUBASTA)
ElseIf frmMain.SubastaLabel = 60 Then
Call SendData(SendTarget.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(SendTarget.ToAll, 0, 0, "||Se esta transferiendo el item y el oro." & FONTTYPE_SUBASTA)
Call PasarItemsyOro(LagaCompradorB, LagaVendedorB, LagaValorFinalB)

Else
Call SendData(SendTarget.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(SendTarget.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(SendTarget.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


Ahora creamos un nuevo modulo y le ponemos de nombre " SUBASTAS " y en el ponemos el siguiente codigo:

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


Luego donde termina el Case "/boveda" debajo ponemos :

Case "/INFOSUBASTA"
Dim LagaSubActivaC
LagaSubActivaC = GetVar(App.Path & "Dat" & "Subasta.ini", "Subasta", "Activa")
If LagaSubActivaC = 0 Then
Call SendData(SendTarget.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(SendTarget.ToIndex, UserIndex, 0, "||" & LagaVendedorC & " esta vendiendo " & LagaObj.Amount & " " & ObjData(LagaObj.ObjIndex).Name & "" & FONTTYPE_SUBASTA)
Call SendData(SendTarget.ToIndex, UserIndex, 0, "||Hasta ahora " & LagaCompradorC & " lidera la subasta ofertando " & LagaPrecioC & " Monedas de oro" & FONTTYPE_SUBASTA)
Call SendData(SendTarget.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(SendTarget.ToIndex, UserIndex, 0, "||No puedes cerrar la subasta si no eres el creador de la misma." & FONTTYPE_SUBASTA)
Else
Call SendData(SendTarget.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(SendTarget.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


Ahora en el fmrMain del SERVIDOR agregamos 3 labels:

Al primero lo llamamos: "SubastaActivada" con caption "1"

Alsegundo lo llamamos: "SubastaLabel" con caption "180"

Al tercero lo llamamos: "SubastaLabel2" con caption "180"

Luego...Abajo De:

If UCase$(Left$(rdata, 6)) = "/PMSG " Then
Call mdParty.BroadCastParty(UserIndex, Mid$(rdata, 7))
Exit Sub
End If


Ponemos:

'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(SendTarget.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(SendTarget.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(SendTarget.ToIndex, UserIndex, 0, "||Nesesitas nivel 15 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(SendTarget.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(SendTarget.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(SendTarget.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(SendTarget.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(SendTarget.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(SendTarget.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(SendTarget.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(SendTarget.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(SendTarget.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(SendTarget.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(SendTarget.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(SendTarget.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(SendTarget.ToIndex, UserIndex, 0, "||No hay ninguna subasta activa!." & FONTTYPE_INFO)
Exit Sub
End If

If LagaOro > UserList(UserIndex).Stats.GLD Then
Call SendData(SendTarget.ToIndex, UserIndex, 0, "||No posees esa cantidad de oro." & FONTTYPE_INFO)
Exit Sub
End If

If Not LagaOro > LagaValorFinalXI + 499 Then
Call SendData(SendTarget.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(SendTarget.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(SendTarget.ToIndex, UserIndex, 0, "||Losiento, ya hay una oferta mayor o igual a la tuya." & FONTTYPE_INFO)
Exit Sub
End If

Exit Sub
End If


Buscamos..

Public Const FONTTYPE_SERVER = "~0~185~0~0~0"


Ponemos:

Public Const FONTTYPE_SUBASTA = "~255~255~0~1~1"


Vamos a modulo Declaraciones y ponemos:

Public LagaObj as obj


y luego vamos al sub LoadObjData y abajo de :

ObjData(Object).Newbie = val(Leer.GetValue("OBJ" & Object, "Newbie"))


Ponemos..

ObjData(Object).Subastable = val(Leer.GetValue("OBJ" & Object, "Subastable"))



Vamos de nuevo al modulo Declaraciones y buscamos:

Newbie As Integer


Abajo Ponemos:

Subastable As Integer


Lo ultimo q hay q hacer es, abrir un bloc de notas y pegar lo siguiente dentro:


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


Y lo guardamos en la carpeta Dats del servidor con el nombre Subasta.ini

Comandos de la subasta:

Para subastar se hace /Subastar SLOT@CANTIDAD@PRECIO

Para ofertar /Ofertar CANTIDAD

Para ver informacion /Infosubasta

Para cerrar la subasta /CerrarSubasta
santi55
santi55
Nivel 12
Nivel 12

Medallas
Sistema de subastas Prensa1

Advertencias Advertencias : 1
Mensajes Mensajes : 156
Puntos Puntos : 49387
Reputación Reputación : 1
Fecha de inscripción Fecha de inscripción : 19/12/2010
País País : Argentina


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.