Advertisement
Luciano_fuentes

Venta/compra de personajes

Mar 15th, 2017
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.56 KB | None | 0 0
  1. Option Explicit
  2.  
  3. 'TODO PUBLICO PARA UN FUTURO SISTEMA DE CAMBIOS Y PARA LOS PAQUETES :D
  4.  
  5. Public Const Max_Ventas As Byte = 50 'Cantidad máxima de usuarios a la venta
  6.  
  7. Public Type tBoveda
  8. Objetos(1 To MAX_BANCOINVENTORY_SLOTS) As UserObj
  9. Oro As Long
  10. End Type
  11.  
  12. Public Type tDatos
  13. Status As Byte
  14. Nombre As String
  15. Vida As Integer
  16. Mana As Integer
  17. raza As Byte
  18. clase As Byte
  19. Nivel As Byte
  20. Porcentaje As Double
  21. Skills(1 To NUMSKILLS) As Byte
  22. Atributos(1 To NUMATRIBUTOS) As Byte
  23. Privado As String
  24. Candado As Byte
  25. Objetos(1 To MAX_NORMAL_INVENTORY_SLOTS) As Obj
  26. Hechizos(1 To MAXUSERHECHIZOS) As Integer
  27. Boveda As tBoveda
  28. Oro As Long
  29. End Type
  30.  
  31. Private Type tVentas
  32. Precio As Long
  33. Dato As tDatos
  34. Recibe As String
  35. End Type
  36.  
  37. Public Ventas(1 To Max_Ventas) As tVentas
  38.  
  39. Public Sub Carga_Ventas()
  40.  
  41. Dim LoopC As Long
  42. Dim LoopX As Long
  43. Dim loopZ As Long
  44. Dim LoopI As Long
  45. Dim LoopA As Long
  46. Dim LoopO As Long
  47.  
  48. Dim Leer As clsIniReader
  49.  
  50. Set Leer = New clsIniReader
  51. Call Leer.Initialize(App.Path & "\Dat\Ventas.dat")
  52.  
  53. For LoopC = 1 To Max_Ventas
  54. With Ventas(LoopC)
  55. With Ventas(LoopC).Dato
  56. .Candado = CByte(Leer.GetValue("VENTA#" & LoopC, "Candado"))
  57. .clase = CByte(Leer.GetValue("VENTA#" & LoopC, "Clase"))
  58. .Mana = CInt(Leer.GetValue("VENTA#" & LoopC, "Mana"))
  59. .Vida = CInt(Leer.GetValue("VENTA#" & LoopC, "Vida"))
  60. .Nivel = CByte(Leer.GetValue("VENTA#" & LoopC, "Nivel"))
  61. .raza = CByte(Leer.GetValue("VENTA#" & LoopC, "Raza"))
  62. .Nombre = Leer.GetValue("VENTA#" & LoopC, "Nombre")
  63. .Porcentaje = CDbl(Leer.GetValue("VENTA#" & LoopC, "Porcentaje"))
  64. .Privado = Leer.GetValue("VENTA#" & LoopC, "Privado")
  65. .Oro = CLng(Leer.GetValue("VENTA#" & LoopC, "Oro_Inventario"))
  66. .Status = CByte(Leer.GetValue("VENTA#" & LoopC, "Status"))
  67.  
  68. For LoopX = 1 To MAXUSERHECHIZOS
  69. .Hechizos(LoopX) = CInt(Leer.GetValue("VENTA#" & LoopC, "Hechizo#" & LoopX))
  70. Next LoopX
  71.  
  72. For loopZ = 1 To MAX_NORMAL_INVENTORY_SLOTS
  73. .Objetos(loopZ).ObjIndex = CInt(ReadField(1, Leer.GetValue("VENTA#" & LoopC, "Objeto#" & loopZ), 45))
  74. .Objetos(loopZ).Amount = CInt(ReadField(2, (Leer.GetValue("VENTA#" & LoopC, "Objeto#" & loopZ)), 45))
  75. Next loopZ
  76.  
  77. For LoopI = 1 To NUMSKILLS
  78. .Skills(LoopI) = CByte(Leer.GetValue("VENTA#" & LoopC, "Skill#" & LoopI))
  79. Next LoopI
  80.  
  81. For LoopA = 1 To MAX_BANCOINVENTORY_SLOTS
  82. .Boveda.Objetos(LoopA).ObjIndex = CInt(ReadField(1, (Leer.GetValue("VENTA#" & LoopC, "OBJETO_BOVEDA#" & loopZ)), 45))
  83. .Boveda.Objetos(LoopA).Amount = CInt(ReadField(2, (Leer.GetValue("VENTA#" & LoopC, "OBJETO_BOVEDA#" & loopZ)), 45))
  84. Next LoopA
  85.  
  86. For LoopO = 1 To NUMATRIBUTOS
  87. .Atributos(LoopO) = CByte(Leer.GetValue("VENTA#" & LoopC, "Atributo#" & LoopO))
  88. Next LoopO
  89. End With
  90. .Dato.Boveda.Oro = CLng(Leer.GetValue("VENTA#" & LoopC, "Oro_Boveda"))
  91. .Precio = CLng(Leer.GetValue("VENTA#" & LoopC, "Precio"))
  92. .Recibe = Leer.GetValue("VENTA#" & LoopC, "Recibe")
  93. End With
  94. Next LoopC
  95. End Sub
  96.  
  97. Public Sub Publicar_Personaje(ByVal ID As Integer, ByVal Precio As Long, ByVal Privado As String, ByVal Candado As Byte, ByVal PIN As String, ByVal Recibe As String)
  98.  
  99. Dim Archivo As String
  100. Dim EnVenta As Byte
  101. Dim PIN_Leida As String
  102.  
  103. Archivo = CharPath & UCase$(UserList(ID).name) & ".chr"
  104. PIN_Leida = GetVar(Archivo, "INIT", "PIN")
  105.  
  106. If UCase$(PIN_Leida) <> UCase$(PIN) Then
  107. Call WriteConsoleMsg(ID, "PIN incorrecta.", FontTypeNames.FONTTYPE_GUILD)
  108. Exit Sub
  109. End If
  110.  
  111. If Precio < 1 Then
  112. Call WriteConsoleMsg(ID, "El precio mínimo de una venta debe ser de 1 moneda.", FontTypeNames.FONTTYPE_GUILD)
  113. Exit Sub
  114. End If
  115.  
  116. If Not FileExist(CharPath & UCase$(Recibe) & ".chr", vbNormal) Then
  117. Call WriteConsoleMsg(ID, "El personaje que especificaste en tu venta para que reciba el oro no existe.", FontTypeNames.FONTTYPE_GUILD)
  118. Exit Sub
  119. End If
  120.  
  121. Call WriteConsoleMsg(ID, "Tu personaje fue puesto en venta.", FontTypeNames.FONTTYPE_GUILD)
  122.  
  123. EnVenta = Dame_ID_Venta
  124.  
  125. With Ventas(EnVenta)
  126. .Precio = Precio
  127. .Dato.Candado = Candado
  128. .Dato.Privado = Privado
  129. .Recibe = Recibe
  130. End With
  131.  
  132. Call Setear_Venta(EnVenta, ID)
  133. Call Guardar_Venta(EnVenta)
  134.  
  135. UserList(ID).flags.EnVenta = EnVenta
  136.  
  137. If Ventas(EnVenta).Dato.Candado > 0 Then
  138. UserList(ID).flags.EnCandado = 1
  139. Call CloseSocket(ID)
  140. End If
  141. End Sub
  142.  
  143. Public Sub Quitar_Persona(ByVal Venta_ID As Byte)
  144.  
  145. Dim Archivo As String
  146.  
  147. Dim ID As Integer
  148. With Ventas(Venta_ID)
  149. Archivo = CharPath & UCase$(Ventas(Venta_ID).Dato.Nombre) & ".chr"
  150. Erase .Dato.Atributos()
  151. Erase .Dato.Boveda.Objetos()
  152. Erase .Dato.Hechizos()
  153. Erase .Dato.Objetos()
  154. Erase .Dato.Skills()
  155. .Precio = 0
  156. .Dato.Candado = 0
  157. .Dato.clase = 0
  158. .Dato.Mana = 0
  159. .Dato.Nivel = 0
  160. .Dato.Nombre = vbNullString
  161. .Dato.Oro = 0
  162. .Dato.Porcentaje = 0
  163. .Dato.Privado = 0
  164. .Dato.raza = 0
  165. .Dato.Vida = 0
  166. .Dato.Boveda.Oro = 0
  167. .Recibe = vbNullString
  168. Guardar_Venta (Venta_ID)
  169. WriteVar Archivo, "FLAGS", "EnCandado", 0
  170. WriteVar Archivo, "FLAGS", "EnVenta", 0
  171. End With
  172.  
  173. End Sub
  174.  
  175. Public Sub Guardar_Venta(ByVal ID_Venta As Byte)
  176.  
  177. Dim LoopC As Long
  178. Dim LoopX As Long
  179. Dim loopZ As Long
  180. Dim LoopI As Long
  181. Dim LoopA As Long
  182. Dim Archivo As String
  183. Archivo = App.Path & "\Dat\Ventas.dat"
  184.  
  185. With Ventas(ID_Venta).Dato
  186.  
  187. For LoopC = 1 To MAXUSERHECHIZOS
  188. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Hechizo#" & LoopC, CStr(.Hechizos(LoopC)))
  189. Next LoopC
  190.  
  191. For LoopX = 1 To MAX_NORMAL_INVENTORY_SLOTS
  192. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Objeto#" & LoopX, CStr(.Objetos(LoopX).ObjIndex) & "-" & CStr(.Objetos(LoopX).Amount))
  193. Next LoopX
  194.  
  195. For loopZ = 1 To NUMSKILLS
  196. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Skill#" & loopZ, CStr(.Skills(loopZ)))
  197. Next loopZ
  198.  
  199. For LoopI = 1 To NUMATRIBUTOS
  200. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Atributo#" & LoopI, CStr(.Atributos(LoopI)))
  201. Next LoopI
  202.  
  203. For LoopA = 1 To MAX_BANCOINVENTORY_SLOTS
  204. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "OBJETO_BOVEDA#" & LoopA, CStr(.Boveda.Objetos(LoopA).ObjIndex) & "-" & CStr(.Boveda.Objetos(LoopA).Amount))
  205. Next LoopA
  206.  
  207. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Precio", CStr(Ventas(ID_Venta).Precio))
  208. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Candado", CStr(Ventas(ID_Venta).Dato.Status))
  209. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Privado", Ventas(ID_Venta).Dato.Privado)
  210. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Status", CStr(Ventas(ID_Venta).Dato.Status))
  211. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Recibe", Ventas(ID_Venta).Recibe)
  212. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Vida", CStr(.Vida))
  213. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Mana", CStr(.Mana))
  214. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Clase", CStr(.clase))
  215. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Nivel", CStr(.Nivel))
  216. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Nombre", .Nombre)
  217. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Oro_Inventario", CStr(.Oro))
  218. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Oro_Boveda", CStr(.Boveda.Oro))
  219. Call WriteVar(Archivo, "VENTA#" & ID_Venta, "Porcentaje", CStr(.Porcentaje))
  220.  
  221. End With
  222. End Sub
  223.  
  224. Public Sub Setear_Venta(ByVal ID_Venta, ByVal ID As Integer)
  225.  
  226. Dim LoopC As Long
  227. Dim LoopX As Long
  228. Dim loopZ As Long
  229. Dim LoopI As Long
  230. Dim LoopA As Long
  231.  
  232. With Ventas(ID_Venta).Dato
  233. .Vida = UserList(ID).Stats.MaxHp
  234. .Mana = UserList(ID).Stats.MaxMAN
  235. .clase = UserList(ID).clase
  236. .Nivel = UserList(ID).Stats.ELV
  237. .Nombre = UserList(ID).name
  238. .Oro = UserList(ID).Stats.GLD
  239. .Porcentaje = FormatNumber(Porcentaje(UserList(ID).Stats.ELU, UserList(ID).Stats.Exp), 2)
  240. .Boveda.Oro = UserList(ID).Stats.Banco
  241. .Status = IIf(UserList(ID).Reputacion.Promedio > 0, 1, 2)
  242.  
  243. For LoopC = 1 To MAXUSERHECHIZOS
  244. .Hechizos(LoopC) = UserList(ID).Stats.UserHechizos(LoopC)
  245. Next LoopC
  246.  
  247. For LoopX = 1 To MAX_NORMAL_INVENTORY_SLOTS
  248. .Objetos(LoopX).ObjIndex = UserList(ID).Invent.Object(LoopX).ObjIndex
  249. .Objetos(LoopX).Amount = UserList(ID).Invent.Object(LoopX).Amount
  250. Next LoopX
  251.  
  252. For loopZ = 1 To NUMSKILLS
  253. .Skills(loopZ) = UserList(ID).Stats.UserSkills(loopZ)
  254. Next loopZ
  255.  
  256. For LoopI = 1 To NUMATRIBUTOS
  257. .Atributos(LoopI) = UserList(ID).Stats.UserAtributos(LoopI)
  258. Next LoopI
  259.  
  260. For LoopA = 1 To MAX_BANCOINVENTORY_SLOTS
  261. .Boveda.Objetos(LoopA) = UserList(ID).BancoInvent.Object(LoopA)
  262. Next LoopA
  263. End With
  264. End Sub
  265.  
  266. Public Sub Comprar_Personaje(ByVal ID As Integer, ByVal ID_Venta As Byte, ByVal Privado As String, ByVal Nombre As String)
  267.  
  268. Dim Archivo As String
  269. Dim PIN As String
  270. Dim Pass As String
  271. Dim email As String
  272. Dim ID_Comprado As Integer
  273. Dim Oro_Leido As Long
  274.  
  275. With Ventas(ID_Venta)
  276.  
  277. If UCase$(UserList(ID).name) = UCase$(Nombre) Then
  278. Call WriteConsoleMsg(ID, "No puedes comprar tu mismo personaje", FontTypeNames.FONTTYPE_GUILD)
  279. Exit Sub
  280. End If
  281.  
  282. If UCase$(UserList(ID).name) = UCase$(.Recibe) Then
  283. Call WriteConsoleMsg(ID, "No puedes comprar tu mismo personaje", FontTypeNames.FONTTYPE_GUILD)
  284. Exit Sub
  285. End If
  286.  
  287. If UCase$(Nombre) <> UCase$(.Dato.Nombre) Then
  288. Call WriteConsoleMsg(ID, "El personaje que deseas comprar ya no está a la venta.", FontTypeNames.FONTTYPE_GUILD)
  289. Exit Sub
  290. End If
  291.  
  292. If UserList(ID).Stats.GLD < .Precio Then
  293. Call WriteConsoleMsg(ID, "No tienes la cantidad de oro para comprar este personaje.", FontTypeNames.FONTTYPE_GUILD)
  294. Exit Sub
  295. End If
  296.  
  297. If Len(.Dato.Privado) > 0 Then
  298. If Not UCase$(Privado) = UCase$(.Dato.Privado) Then
  299. Call WriteConsoleMsg(ID, "Contraseña de la venta incorrecta.", FontTypeNames.FONTTYPE_GUILD)
  300. Exit Sub
  301. End If
  302. End If
  303.  
  304. UserList(ID).Stats.GLD = UserList(ID).Stats.GLD - .Precio
  305.  
  306. If NameIndex(.Dato.Nombre) > 0 Then
  307. Call CloseSocket(NameIndex(.Dato.Nombre))
  308. End If
  309.  
  310. Archivo = CharPath & UCase$(UserList(ID).name) & ".chr"
  311. PIN = GetVar(Archivo, "INIT", "PIN")
  312. Pass = GetVar(Archivo, "INIT", "Password")
  313. email = GetVar(Archivo, "CONTACTO", "Email")
  314.  
  315. Archivo = CharPath & UCase$(.Dato.Nombre) & ".chr"
  316. WriteVar Archivo, "INIT", "PIN", PIN
  317. WriteVar Archivo, "INIT", "Password", Pass
  318. WriteVar Archivo, "CONTACTO", "Email", email
  319.  
  320. ID_Comprado = NameIndex(.Recibe)
  321.  
  322. If ID_Comprado > 0 Then
  323. Call WriteConsoleMsg(ID_Comprado, "Tu personaje " & .Dato.Nombre & " fue comprado satisfactoriamente por " & .Precio & " monedas de oro, el oro ya está en la bóveda de este personaje. Felicidades.", FontTypeNames.FONTTYPE_GUILD)
  324. UserList(ID_Comprado).Stats.Banco = UserList(ID_Comprado).Stats.Banco + .Precio
  325. Call WriteUpdateBankGold(ID_Comprado)
  326. Else
  327. Archivo = CharPath & UCase$(.Recibe) & ".chr"
  328. Oro_Leido = GetVar(Archivo, "STATS", "GLD")
  329. Oro_Leido = Oro_Leido + .Precio
  330. WriteVar Archivo, "STATS", "GLD", Oro_Leido
  331. End If
  332.  
  333. Call Quitar_Persona(ID_Venta)
  334. Call WriteConsoleMsg(ID, "Personaje comprado satisfactoriamente, los datos del personaje comprado ahora son los de tu personaje", FontTypeNames.FONTTYPE_GUILD)
  335. Call WriteUpdateGold(ID)
  336. End With
  337. End Sub
  338.  
  339. Private Function Dame_ID_Venta() As Byte
  340. Dim LoopC As Long
  341. For LoopC = 1 To Max_Ventas
  342. With Ventas(LoopC)
  343. If .Precio = 0 Then
  344. Dame_ID_Venta = LoopC
  345. Exit Function
  346. End If
  347. End With
  348. Next LoopC
  349. End Function
  350.  
  351. Public Sub Quitar_Personaje(ByVal ID As Integer, ByVal ID_Venta As Byte, ByVal PIN As String)
  352.  
  353. With Ventas(ID_Venta)
  354.  
  355. Dim Archivo As String
  356. Dim PIN_Leida As String
  357.  
  358. Archivo = CharPath & UCase$(.Dato.Nombre) & ".chr"
  359. PIN_Leida = GetVar(Archivo, "INIT", "PIN")
  360.  
  361. If UCase$(PIN) <> UCase$(PIN_Leida) Then
  362. Call WriteConsoleMsg(ID, "PIN Incorrecta", FontTypeNames.FONTTYPE_GUILD)
  363. Exit Sub
  364. End If
  365.  
  366. Call Quitar_Persona(ID_Venta)
  367. Call WriteConsoleMsg(ID, "Personaje quitado de la venta correctamente.", FontTypeNames.FONTTYPE_GUILD)
  368. End With
  369.  
  370. End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement