Foro especializado en Warcraft III y su editor
 
BuscarEntrar al ChatboxPortal del foroÍndiceSpellsRegistrarseConectarse
Eventos Actuales
No hay eventos actualmente
¡ Bienvenido Invitado !

Editar Perfil

Tus temas
Tus Mensajes ()

Enlaces rápidos








Comparte
 

 Inventario Extendido + Equipamiento avanzado

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
Satoshi
Soldado
Satoshi


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 67
Reputación Reputación : 0
Monedas de oro : 340
Monedas de Platino : 0 Inventario Extendido + Equipamiento avanzado Empty

Inventario :
Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10
Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10

Inventario Extendido + Equipamiento avanzado Empty
Mensaje(#) Tema: Inventario Extendido + Equipamiento avanzado Inventario Extendido + Equipamiento avanzado Clock10Jue Mar 11, 2021 3:27 am

Hola warcrafteros!!! hola  Hoy les traigo un mapa tutorial que creo les servirá de mucho a los creadores de mapas RPG. Se trata de un inventario extendido, es decir, un sistema que nos permita burlar los tradicionales seis slots a los que Warcraft nos ha tenido sometidos por toda la eternidad Razz
El sistema nos permite tener hasta cuarenta items (el limite no es fijo, si quieren pueden ponerle variarlo) a los que se puede acceder a través de una unidad "baúl" que podemos invocar y cerrar en cualquier momento. La única pega es que debemos sacrificar un slot de nuestro ya reducido inventario normal del héroe, por una razón que espero todos comprendan que a la larga va a ser mucho más beneficiosa: cuando un item entra en el inventario llenándolo (o sea que este ya tiene los seis items) el item se traslada automáticamente al baúl, y podemos seguir cogiendo objetos aunque no caigan en nuestro inventario "normal" Very Happy pues van al baúl. Además así se evitan los molestísimos mensajes de "El inventario está lleno" de Warcraft (salvo cuando se nos llene el baúl  xD )

Además, hay otro sistema que está desactivado en el mapa de ejemplo (pueden activarlo reemplazando un detonador por otro) que incluí junto con el del baúl cuando los hice la primera vez, se trata de un sistema de equipamiento avanzado, algo así como un  método para que el héroe no pueda tener equipadas cuatro hachas de batalla y cinco corazas al mismo tiempo xD , y que el juego sea más realista en general. El sistema se basa en las clases de objetos para clasificarlos (Cargado para los Cascos, Artefacto para las armas a una mano, y así) pero los he visto que usan el nivel del objeto, ustedes los pueden hacer como quieran Very Happy , solo les pido que si usan mi sistema me señalen como su autor, les agradecería muchísimo Very Happy
Bueno, espero que les sea útil, gracias

(Nota: si no les sale el link es porque deben comentar, creo)



Última edición por Satoshi el Vie Mar 12, 2021 6:53 am, editado 1 vez
Volver arriba Ir abajo
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3569
Reputación Reputación : 687
Monedas de oro : 11143
Monedas de Platino : 0 Inventario Extendido + Equipamiento avanzado Empty

Inventario :
Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10
Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10

Inventario Extendido + Equipamiento avanzado Empty
Mensaje(#) Tema: Re: Inventario Extendido + Equipamiento avanzado Inventario Extendido + Equipamiento avanzado Clock10Jue Mar 11, 2021 12:01 pm

Está bueno el funcionamiento, aunque tienes varios errores, empezando por las fugas de memoria:

[gui]Unidad - Create 1 Baúl for (Owner of (Triggering unit)) at ((Position of (Triggering unit)) offset by 100.00 towards (Facing of (Triggering unit)) degrees) facing Vista edificio predeterminada (270.0) degrees
[/gui]
[gui]Objeto - Move aux_item to (Center of misc )
[/gui]
[gui]Unidad - Move baul instantly to ((Position of (Triggering unit)) offset by 100.00 towards (Facing of (Triggering unit)) degrees)
[/gui]
[ljass]call SetItemPositionLoc( GetLastRemovedItem(), GetRectCenter(gg_rct_misc) )[/ljass]

Todos esos tienen leaks de puntos

Luego en los detos cerrar baúl y actualizar baúl tienes tu función reload_items

[gui]Cerrar baul
Acontecimientos
Unidad - A unit Vende un objeto (de la tienda)
Condiciones
(Item-type of (Sold Item)) Igual a (==) Cerrar el baúl
Acciones
Custom script: call reload_items(GetTriggerUnit(), GetSpellAbilityUnit())
Unidad - Kill baul
Set baul = Ninguna unidad
Selección - Select Kael 0000 for (Owner of (Selling unit))
[/gui]

Donde "GetSpellAbilityUnit()" no es ninguna unidad porque eso solo existe en los eventos de habilidad y este es de vender objetos

Quizás vos quieres "GetBuyingUnit()" pero no estoy seguro de tu intención con esa función en esos detos

Luego hay cosas que no son problemas realmente pero podrías mejorar usando un bucle For para hacerlo más corto por ejemplo

esto ->
[gui]
-------- Cargar items --------
Héroe - Give Baul[((baul_scr x 5) - 4)] to (Triggering unit)
Héroe - Give Baul[((baul_scr x 5) - 3)] to (Triggering unit)
Héroe - Give Baul[((baul_scr x 5) - 2)] to (Triggering unit)
Héroe - Give Baul[((baul_scr x 5) - 1)] to (Triggering unit)
Héroe - Give Baul[((baul_scr x 5) - 0)] to (Triggering unit)
[/gui]

pasa a esto ->
[gui] Do Multiple ActionsFor each (Integer A) from 1 to 5, do (Actions)
Bucle: Acciones
Héroe - Give Baul[(((baul_scr - 1) x 5) + (Integer A))] to (Triggering unit)
[/gui]

Esto te dará los mismos números, pero cambiamos ligeramente la operación para que funcione mejor con el bucle for

También cambié esto:
[gui]Acciones
If (((Real(baul_lenght)) / 5.00) Menor que o igual a (<=) 8.00) then do (Set baul_scr = Cool else do (Do nothing)
If (((Real(baul_lenght)) / 5.00) Menor que o igual a (<=) 7.00) then do (Set baul_scr = 7) else do (Do nothing)
If (((Real(baul_lenght)) / 5.00) Menor que o igual a (<=) 6.00) then do (Set baul_scr = 6) else do (Do nothing)
If (((Real(baul_lenght)) / 5.00) Menor que o igual a (<=) 5.00) then do (Set baul_scr = 5) else do (Do nothing)
If (((Real(baul_lenght)) / 5.00) Menor que o igual a (<=) 4.00) then do (Set baul_scr = 4) else do (Do nothing)
If (((Real(baul_lenght)) / 5.00) Menor que o igual a (<=) 3.00) then do (Set baul_scr = 3) else do (Do nothing)
If (((Real(baul_lenght)) / 5.00) Menor que o igual a (<=) 2.00) then do (Set baul_scr = 2) else do (Do nothing)
If (((Real(baul_lenght)) / 5.00) Menor que o igual a (<=) 1.00) then do (Set baul_scr = 1) else do (Do nothing)
[/gui]

a esto:
[gui]Otros: Acciones
Set Real = ((Real(baul_lenght)) / 5.00)
Set NumeroEntero = (Integer((Real + 0.99)))
Set baul_scr = NumeroEntero
[/gui]

En cuanto a pequeñas optimizaciones de código, eso es lo que te puedo ayudar, luego vienen mis observaciones del funcionamiento ingame del sistema:

- El baúl no toma automáticamente los objetos del héroe a pesar de que aparentemente hay un detonador encargado de eso
- La cantidad de objetos por "página" del baúl es variable, a veces una pestaña tiene 3, otras 4 y a veces 5 objetos en total, no sé si así lo planeaste o simplemente así salió
- Y el verdadero problema con el sistema es que sólo funciona para un héroe en el mapa, siendo que esta clase de sistemas es genial para mapas RPG. Funciona para singleplayer, pero eso no es suficiente para aprobarlo, mínimo el sistema tiene que ser funcional para cada jugador para poder aprobarlo
Volver arriba Ir abajo
Satoshi
Soldado
Satoshi


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 67
Reputación Reputación : 0
Monedas de oro : 340
Monedas de Platino : 0 Inventario Extendido + Equipamiento avanzado Empty

Inventario :
Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10
Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10

Inventario Extendido + Equipamiento avanzado Empty
Mensaje(#) Tema: Re: Inventario Extendido + Equipamiento avanzado Inventario Extendido + Equipamiento avanzado Clock10Jue Mar 11, 2021 5:41 pm

Hmm... ahí como lo veo esta repleto de problemas, pero gracias por señalarmelos, es cierto que algunos eran muy evidentes y eso de las memory leaks en verdad que se me había escapado. * se va a arreglarlos ahora mismo... *

Aunque la verdad no entiendo muy bien de que se tratan estos leaks de puntos y como arreglarlos, he visto en otros casos que utilizan [gui]RemoveLocation()[\gui] pero aquí no sé cómo aplicarlo (si no usé variables?) Me gustaría que me ayudaras en eso, parece que soy mas novato de lo que creía jsjs

Con respecto a los señalamientos que hiciste del funcionamiento ingame, aquí van mis excusas... xD
1. Cuando el baúl esta invocado, es verdad que no se le transfieren automáticamente los objetos que el héroe no puede llevar y para ello implemente la función de actualizar, no obstante creo que podría hacerlo como tú dices (es cierto que así seria todo mas visual) con un detonador que ahora mismo voy a programar...
2. El baúl tiene un máximo de 5 objetos por página, (esto es así para que también funcione con el el sistema de que si le das objetos y la página se llena estos se transfieran hasta la otra página para que el pueda seguir recibiendo objetos) por supuesto que todas las páginas van a tener cinco objetos hasta la última usada, que va a tener menos. Por ejemplo, si tienes ocho objetos, van a salir cinco en la primera página y tres en la segunda. Aclarar que los objetos de una página y otra no son los mismos (fue un bug que me pasaba mucho al principio) aunque pueda parecerlo por el escaso número de objetos del mapa.
3. Eso es verdad, y también se puede solucionar (haciendo varios arrays de inventario, tal vez?) No obstante, no funciona solo para un héroe: en el mapa original donde implementé ese sistema, el jugador controlaba varias unidades y cada una de ellas tenia la habilidad que le daba acceso al baúl (si bien el baúl era el mismo para todas, y solo una podía tener el baúl a la vez) Pero la verdad es, que desde que me dio la idea de crear este sistema, solo pensé en singleplayer. La razón es que he venido teniendo problemas con la conexión a battle.net desde hace un tiempo, por lo que al no poder probar mapas multi-player decidi meterme a los de solo player exclusivamente. Disculpen si alguien lo necesitaba para multiplayer, pero ese es mi sistema, además creo que no es tan difícil de modificar para que cumpla esos requisitos. (Eso no significa que no lo vaya a probar)

Muchas gracias Marcos_M por las críticas y sugerencias, voy a ver si subo un nuevo mapa con todo esto arreglado
Volver arriba Ir abajo
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3569
Reputación Reputación : 687
Monedas de oro : 11143
Monedas de Platino : 0 Inventario Extendido + Equipamiento avanzado Empty

Inventario :
Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10
Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10

Inventario Extendido + Equipamiento avanzado Empty
Mensaje(#) Tema: Re: Inventario Extendido + Equipamiento avanzado Inventario Extendido + Equipamiento avanzado Clock10Jue Mar 11, 2021 6:21 pm

Con lo de los leaks de memoria es muy sencillo, si no tienes una variable, entonces 100% es un leak de memoria, siempre necesitas una variable cuando se trata de puntos. En JASS existe la función:

[ljass]SetItemPosition( item , x, y)[/ljass]
que usa coordenadas en lugar de puntos, eso te evita tener que usar variables, y en jass las variables de puntos no se usan directamente porque las coordenadas son más rápidas y cómodas.


Y con lo de a veces tenía 3, a veces 4 y a veces 5 me refería a las páginas intermedias, no solamente a la última página, no sé si a ti nunca te pasó en lo que testeaste

Como un extra aparte:
https://www.youtube.com/watch?v=dms1y7jjs0s

los iconos verdes son muy feos, y aquí puedes ver como evitarlos si es que no lo sabes
Volver arriba Ir abajo
Satoshi
Soldado
Satoshi


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 67
Reputación Reputación : 0
Monedas de oro : 340
Monedas de Platino : 0 Inventario Extendido + Equipamiento avanzado Empty

Inventario :
Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10
Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10

Inventario Extendido + Equipamiento avanzado Empty
Mensaje(#) Tema: Re: Inventario Extendido + Equipamiento avanzado Inventario Extendido + Equipamiento avanzado Clock10Vie Mar 12, 2021 6:49 am

Muchas gracias por todo @Marcos_M, he estado arreglando este sistema con los tips que me diste y la verdad que ya está mucho mejor. Eliminé los leaks de memoria (de no ser por ti todavía seguría sin saber qué son) y optimicé las operaciones demasiado largas con bucles, además lo mejoré para que cuando el héroe adquiera un objeto y este sea mandado al baúl, si el baúl está invocado en ese momento se ponga automáticamente en su inventario actual ("visible") en ese momento y que no haya que actualizar para verlo. No me ha aparecido el error que señalabas, de 3 o 4 objetos en páginas intermedias, aunque lo de que no se transferían al baúl directamente cuando los adquirías ya lo arreglé, era porque se me había olvidado setear una variable xD aunque en la versión con equipamiento, que era la original que hice, sí funcionaba.

Sin embargo, lo más importante es que ya le habilité el modo para baúl multiplayer, ahora más de un jugador o héroe podrá acceder a baúles diferentes, con 40 objetos en el inventario virtual para cada jugador. Esto me ha costado algunas horas, pero finalmente está completado, así que, si encuentras algunas otras deficiencias o errores, no dudes en responderme. Estaré atento.

Y bueno, el link...

Volver arriba Ir abajo
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3569
Reputación Reputación : 687
Monedas de oro : 11143
Monedas de Platino : 0 Inventario Extendido + Equipamiento avanzado Empty

Inventario :
Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10
Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10

Inventario Extendido + Equipamiento avanzado Empty
Mensaje(#) Tema: Re: Inventario Extendido + Equipamiento avanzado Inventario Extendido + Equipamiento avanzado Clock10Sáb Mar 13, 2021 6:46 pm

Pues te olvidaste de una cosa con los leaks de punto en el GUI:

[gui]Set aux_point_2 = (Position of (Triggering unit))
Set aux_point = (aux_point_2 offset by 100.00 towards (Facing of (Casting unit)) degrees)
[/gui]

Si usas la función "Point with polar offset" necesitas 2 puntos, uno para el punto inicial, y otro para el punto con el offset

También podrías cambiar tu "Select Kael 0000 " por una variable así:

[gui]Selección - Select heroeBaul[aux_int] for (Owner of (Selling unit))
[/gui]

Simplemente usas Set variable para este heroeBaul en el detonador de "Abrir baúl"

Todo lo demás anda perfecto, así que lo paso a la parte de Mapa-tutoriales
Volver arriba Ir abajo
Satoshi
Soldado
Satoshi


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 67
Reputación Reputación : 0
Monedas de oro : 340
Monedas de Platino : 0 Inventario Extendido + Equipamiento avanzado Empty

Inventario :
Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10
Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10 Inventario Extendido + Equipamiento avanzado Empysl10

Inventario Extendido + Equipamiento avanzado Empty
Mensaje(#) Tema: Re: Inventario Extendido + Equipamiento avanzado Inventario Extendido + Equipamiento avanzado Clock10Sáb Mar 13, 2021 9:28 pm

Pos que bien, Marcos! Parece que siempre se puede aprender un poco más, to mismo me consideraba un genio en detonadores antes de entrar a este foro xP
Arreglé lo del segundo leak (que molestos son estos puntitos...) pero me gustaría saber de un modo mas profundo en que consisten las fugas de memoria en Warcraft y como evitarlas, me podrías indicar un tutorial sobre esto? Te lo agradecería.
Lo del heroBaul es cierto, pero dado que en el mapa solo está Kael, no creo que sea necesario hacer un array solo para el, aunque es cierto que a la hora de implementarlo el sistema se agradecería, no obstante creo que ese cambio es muy fácil de aplicar, así que quien quiera usar este sistema que lo aplique xD

Nada más que decir, muchas gracias por haber aprobado mi mapa
Volver arriba Ir abajo
Contenido patrocinado




Inventario Extendido + Equipamiento avanzado Empty
Mensaje(#) Tema: Re: Inventario Extendido + Equipamiento avanzado Inventario Extendido + Equipamiento avanzado Clock10

Volver arriba Ir abajo
 

Inventario Extendido + Equipamiento avanzado

Ver el tema anterior Ver el tema siguiente Volver arriba 
Página 1 de 1.

 Temas similares

-
» Inventario
» cambio/vendo
» Modern: Confirmado nuevo formato oficial
» Ayuda con mazo verde rojo.
» India crea el DNI más avanzado del mundo

Permisos de este foro:No puedes responder a temas en este foro.
Warcraft III - WorldEditor :: Academia :: Area GUI :: Mapas-Tutoriales-