Pagina 2 di 2

Re: Inventario

Inviato: 20/03/2014, 14:56
da Kimera_V2
Ok grazie mille homunculs il tuo inventario andava bene ma per i motivi indicati prima ho dovuto rinunciare, se mi posti un progetto dove il personaggio prende gli oggeti cn il tasto ctrl e vengono insriti nell inventario e dove nell inventario ce un cursore che alla pressione del tasto invio mi diminuisce l oggetto che collide con esso sarebbe una manna dal cielo xke
mi basterebbe poco per editarlo per il mio caso grazie ancora

Re: Inventario

Inviato: 20/03/2014, 15:03
da Homunculus
Ti sto facendo una versione super semplificata del mio inventario, in questo modo dovrebbe essere semplice per te capire come funziona ed estenderlo in base alle tue necessità.

Re: Inventario

Inviato: 20/03/2014, 15:06
da Kimera_V2
Ok grazie mille

Re: Inventario

Inviato: 20/03/2014, 15:38
da gameplay_extreme
mentre aspetti la versione semplificata di homu se ti va da un'occhiata qui...l'ho copia-incollato (e commentato) quando ancora non ti eri messo daccordo con homu...
Spoiler
se ti interessa ti posto il codice del mio gioco:
premetto che la lista di oggetti è in pratica semplicemente un elenco di stringhe e che è un inventario da di pochi posti (diciamo 10, puoi aumentali ma non so se ci stanno visto che è prevista un' unica schermata) però chi sa, magari ti aiuta a capire la logica della cosa...

eccoti il codice:

Codice: Seleziona tutto

Information about object: oInv // inv = inventario

Sprite: <no sprite>
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent: <no parent>
Mask: <same as sprite>

Create Event:
execute code:
//avvio dell 'inventario
instance_deactivate_all(true) //disattiva tutti gli altri oggetti
instance_activate_object(oSempreAttivo) //questo invece sarà SEMPRE attivo
pos = 0 //nessuna voce è selezionata
io_clear( ) //cancella lo stato della tastiera e del mouse
sound_stop(soPassiPg) //ferma il suono dei passi (utile se si entra nell'inventario quando il giocatore ancora non è fermo)


Destroy Event:
execute code:
//uscita dall' inventario
instance_activate_all() //tutti gli oggetti vengono riavviati


Draw Event:
//visualizzo l'inventario
set the font for drawing text to fArial18 and align center
execute code:
//coordinate relative alla posizione della view
xleft = view_xview
ytop = view_yview
xright = view_xview + 640
ydown = view_yview + 480

// sfondo inventario
draw_set_color(c_black)
draw_rectangle(global.xleft,global.ytop,global.xright,global.ydown,false)

draw_set_color(c_white)
draw_text (global.xc, global.ytop+40,"OGGETTI DISPONIBILI:")

//elenco degli oggetti
for (k=1; k<=global.max_ogg; k +=1)
 draw_text(global.xc,global.ytop+60+(k*30),global.inv[k])
 
// comandi disponibili
draw_text(global.xc,global.ytop+60+(10*30)+40,"Frecce = SELEZIONA, SPAZIO = USA")
draw_text(global.xc,global.ytop+60+(10*30)+80,"Backspace/Esc = ESCI") 

// "cursore" (rettangolo che cerchia la voce selezionata)
if pos != 0
{
draw_set_color(c_red)
draw_rectangle(global.xleft+30,global.ytop+60+(pos*30),global.xright - 30, global.ytop+60+(pos*30)+25,true)
}




Key Press Event for <Backspace> Key:
execute code:
// backspace per uscire
instance_destroy()


Key Press Event for <Escape> Key:
execute code:
// esc per uscire (metodo alternativo)
instance_destroy()


Key Press Event for <Space> Key:
execute code:
// "USA" oggetto selezionato
if pos != 0
{
if global.inv[pos] != ""
 {
  if global.inv[pos] = "OGGETTO1"   
   {oSempreAttivo.Alarm[1] = 3}
  if global.inv[pos] = "OGGETTO2"
   {oSempreAttivo.Alarm[2] = 3}
  if global.inv[pos] = "OGGETTO3"
   {oSempreAttivo.Alarm[3] = 3}
  if global.inv[pos] = "OGGETTO4"
   {oSempreAttivo.Alarm[4] = 3}
    if global.inv[pos] = "OGGETTO5"
   {oSempreAttivo.Alarm[5] = 3}
   //ecc.
   //le azioni che vengono eseguite in caso di check positivo le ho poi messe in degli alarm_event di oSempreAttivo 
  instance_destroy() //quando "USI" un oggetto l'inventario subito dopo si richiude e iniziano le azioni coorispondenti (es: se usi l'insetticida sul "ragno gigante" questo muore e l'oggetto insetticida viene eliminato dall' inventario)
 }
}


Key Press Event for <Up> Key:
execute code:
//spostati tra le voci
if pos > 1   pos -= 1


Key Press Event for <Down> Key:
execute code:
//spostati tra le voci
if pos < global.max_ogg   pos += 1

---fine oggetto oInv---

per preparare l'array (vuoto)
global.max_ogg = 10 //numero massimo voci
for (k=1; k<=global.max_ogg;k+=1) //preparo l'aarray...
 global.inv[k] = ""

per avviare l'inventario
 if (keyboard_check_pressed(vk_tasto_avvio_inventory))
  {
   instance_create(0,0,oInv)
  }

per raccogliere un oggetto
in collisione tra oMani e il parent oItem (padre di tutti gli oggetti raccoglibili)
if keyboard_check_pressed(ord("C"))
 {
   if other.object_index = oChiave1 
    {
     global.inv[scrFindEmpty()] = "CHIAVE1"
     show_message2("Hai preso la chiave 1") 
      with (other) instance_destroy()
    }
   //ecc.
 }

---
script vari:

scrFindEmpty( ) //trova il primo posto vuoto
var k;
k = 1
while global.inv[k] != ""
 {
  k += 1
 }
return k

scrFindOb (nome_oggetto) //verifica la presenza dell'oggetto nell' inventario
var k;
k = 1
for (k = 1; k <= global.max_ogg; k += 1)
 {
  if global.inv[k] = argument0
   return true
 }
return false

scrFindOb2 (nome_oggetto) // trova in quale posizione si trova l'oggetto nell' inventario
var k;
k = 1
for (k = 1; k <= global.max_ogg; k += 1)
 {
  if global.inv[k] = argument0
   return k
 }
return noone

Re: Inventario

Inviato: 20/03/2014, 15:57
da Kimera_V2
Grazie gameplay appena torno a casa mi metto al pc e do un occhiata al tuo script spero di capirci qualcosa

Re: Inventario

Inviato: 20/03/2014, 16:40
da Homunculus
Ehm, ho un piccolo problema. Non ho più GM8 e ho visto che l'esempio utilizza funzionalità che in studio non esistono più... quindi in sostanza non riesco a modificartelo.
Penso che dovrai provare con quanto suggerito da gameplay_extreme, non avendo GM8 e non potendo modificare il mio esempio non posso nemmeno prepararti qualcosa ex novo purtroppo.

Re: Inventario

Inviato: 20/03/2014, 17:56
da Kimera_V2
Grazie ugualmente homunculus vi terro informati sullo sviluppo del menu

Re: Inventario

Inviato: 21/03/2014, 9:38
da Kimera_V2
Problema risolto inventario pozioni finito ora tocca quelle degli oggetti.
Ho risolto a modo mio cn variabi, variabili globali,costrutto if ed else if e un bel po di script.
Ho visto l esempio proposta da gameplay e ho capito un bel po di cose ma alla fine per non modificare troppe cose nel gioco ho deciso d procedere a modo mio credo di usare questo esempio per un altro gioco o piu avati qnd dovro fare il menu delle carte visto che ci sn troppi oggetti da questire.
Grazie a tutti dell aiuto che mi avete dato.

Re: Inventario

Inviato: 26/03/2014, 17:01
da Kimera_V2
Scusate se faccio un piccolo out ma mi sembrava sbaglito aprire un altra discussione, comunque leggendo il manuale ho visto che nell evento draw_healthbar si puo impostare un valore da 0 a 100 alla vita.
Quindi mi e sorto un dubbio, visto che nel mio gioco man mano che si prosege e si sale di livello l ammontare della vita sale progressivamente di tot punti imbase al livello raggiunto,non vorrei che quando la vita sale oltre i 100 punti si crei un orrore o il programma riconosce il codice tranquillamente?
Se si crea un orrore come posso risolvere?

Re: Inventario

Inviato: 26/03/2014, 17:24
da Slime
Devi tenere in considerazione la vita massima.
draw_healthbar(x1,y1,x2,y2, vita * 100/vita_max, [...] )
Così sei sicuro che il valore si aggirerà tra 0 e 100 e sarà proporzionato con la vita massima ;)

Re: Inventario

Inviato: 26/03/2014, 19:14
da gameplay_extreme
ho visto che nell evento draw_healthbar si puo impostare un valore da 0 a 100 alla vita.
[modalità pignolo attivata]
tu vuoi dire:
"ho visto che nell evento draw, inserendo la funzione draw_healthbar, si puo impostare un valore da 0 a 100 alla vita."
[fine modalità pignolo]

comunque non ho capito: questa barra indica l'energia fisica del giocatore ? o a che livello si trova il giocatore ?

in embrambi i casi risolvi (per non sforare il 100) con una proporzione come dice Slime...

però se ti trovi nel primo caso c'è da dire una cosa: praticamente con l'aumentare del livello del pg suppongo aumenti vita_max, quindi l'energia fisica anche se non variata sembrerà diminuire.
Soluzione1) metti vicino alla barra una draw_text di vita/vita_max così il giocatore si rende conto meglio della situazione...
Soluzione2) oltre a aumentare vita_max aumenta anche la lunghezza complessiva della barra.

Come tocco finale impedisci che si possa avere un' energia fisica superiore a vita_max.
Resterebbe infine da stabilire come correli vita_max al livello (mi ricordo che in RPG maker si potevano impostare varie "curve di relazione" diverse tra loro).

tutto questo sperando di aver capito bene cosa vuoi fare...

EDIT: ho controllato adesso rpg maker (ver rpgm-xp), ha risolto il problema della barra alla radice: non c'è nessuna barra (sia in battaglia che fuori dalla battaglia), c'è solo la scritta "valore attuale / valore massimo"
EDIT2: controllato adesso: il gioco "tales of Banalia" ha solo la "barra di attesa" (intendo quella che prima di attaccare devi aspettare che si riempia)

Re: Inventario

Inviato: 27/03/2014, 0:12
da Kimera_V2
gameplay_extreme ha scritto:
ho visto che nell evento draw_healthbar si puo impostare un valore da 0 a 100 alla vita.
[modalità pignolo attivata]
tu vuoi dire:
"ho visto che nell evento draw, inserendo la funzione draw_healthbar, si puo impostare un valore da 0 a 100 alla vita."
[fine modalità pignolo]

comunque non ho capito: questa barra indica l'energia fisica del giocatore ? o a che livello si trova il giocatore ?

in embrambi i casi risolvi (per non sforare il 100) con una proporzione come dice Slime...

però se ti trovi nel primo caso c'è da dire una cosa: praticamente con l'aumentare del livello del pg suppongo aumenti vita_max, quindi l'energia fisica anche se non variata sembrerà diminuire.
Soluzione1) metti vicino alla barra una draw_text di vita/vita_max così il giocatore si rende conto meglio della situazione...
Soluzione2) oltre a aumentare vita_max aumenta anche la lunghezza complessiva della barra.

Come tocco finale impedisci che si possa avere un' energia fisica superiore a vita_max.
Resterebbe infine da stabilire come correli vita_max al livello (mi ricordo che in RPG maker si potevano impostare varie "curve di relazione" diverse tra loro).

tutto questo sperando di aver capito bene cosa vuoi fare...

EDIT: ho controllato adesso rpg maker (ver rpgm-xp), ha risolto il problema della barra alla radice: non c'è nessuna barra (sia in battaglia che fuori dalla battaglia), c'è solo la scritta "valore attuale / valore massimo"
EDIT2: controllato adesso: il gioco "tales of Banalia" ha solo la "barra di attesa" (intendo quella che prima di attaccare devi aspettare che si riempia)
Grazie per aver risolto il mio dubbio, comunque gameplay avevo gia pensato di settare la vita come mi hai suggerito grazie ugualmete per l interessamento, si in rpg maker si potevano settare i valori con le curve di relazione credo che nel mio gioco settero la vita max con delle variabili in base al livello che si trova il pg.
Per provare su tutto funge ho creato questo piccolo eseguibile che funziona alla perfezione spero vi piaccia.
Download healthbar prova:
https://www.mediafire.com/?heba1sx0dqvxs83

Grazie ancora per l aiuto siete grandi.

Re: Inventario

Inviato: 03/04/2014, 11:47
da Kimera_V2
Ciao raga, visto che devo creare un nuovo inventario questa volta più ampio diciamo con 300 o 400 oggetti, non mi va di farlo tramite variabili ripetitive,lunghe e noiose da fare,questo metodo mi stava bene finche si trattava di aggiungere 10 oggetti.
Diciamo che il modo per farlo l ho trovato,tramite array mi creo la lista degli oggetti e con delle variabili inserisco gli oggetti nei vari slot. Fin qui tutto ok, il problema mi è sorto quando cambio room, cioè gli oggetti inseriti nei vari slot spariscono, e ciò è normale visto che gli oggetti non sono persistent.
Non voglio usare il persistent perchè gli oggetti che raccolgo sono gli stessi oggetti che vanno inseriti nell inventario(per farmi capire meglio sono gli stessi object), quindi settandoli come persistenti quando ritorno nella stessa room che l ho raccolti me li ritrovo li perchè la room non è settata come persistent non voglio settarla per non perdere le animazioni dei vari personaggi e poi mi crea degli errori con il pg quando cambio room.
Quindi avevo pensato di creare uno script da avviare ogni volta che vado nel menu per farmi inserire gli oggetti al posto giusto, ma non so come fare a far capire al programma quali oggetti avevo raccolto in precedenza.

Re: Inventario

Inviato: 06/04/2014, 11:02
da Kimera_V2
Inventario modificato, ora funziona bene ma non riesco a non far aggiungere lo stesso oggetto, quando prendo due oggetti simili me lo aggiunge in un altro slot e non so come fare per risolvere.
Vi posto il proggetto cosi ci date un occhiata. Ho provato in vari modi ma sono in un vicolo cieco e non so come uscirne. :spat:
inventario_carte.gmk
Proggetto
(45.63 KiB) Scaricato 146 volte

Re: Inventario

Inviato: 06/04/2014, 12:41
da gameplay_extreme
modifica il create_event del player cosi:

Codice: Seleziona tutto

globalvar my_item_slot0, my_item_slot1, my_item_slot2;

{
my_item_slot0 = 0
my_item_slot1 = 0
my_item_slot2 = 0
}
modifica lo script inventario così:

Codice: Seleziona tutto

globalvar id_oggetti,
{

}

//array oggetti inventario
oggetto[0,1]=obj_cuore
oggetto[0,2]=obj_energia
oggetto[0,3]=obj_croce

if my_item_slot0 = 0 || my_item_slot0 = id_oggetti //se lo slot_0 è vuoto
{
 room_instance_add(Menu_gioco,32,96,oggetto[0,id_oggetti])//mi aggiunge l'oggetto
 my_item_slot0 = id_oggetti
}

else if my_item_slot1 = 0 || my_item_slot1 = id_oggetti//se slot_2 è vuoto 
{
 room_instance_add(Menu_gioco,64,96,oggetto[0,id_oggetti])//mi aggiunge l'oggetto
 my_item_slot1 = id_oggetti
}


else if my_item_slot2 = 0 || my_item_slot1 = id_oggetti //se slot_3 è vuoto
{
 room_instance_add(Menu_gioco,96,96,oggetto[0,id_oggetti])//mi aggiunge l'oggetto
 my_item_slot2 = id_oggetti
}
ps: ma quante volte hai dichiarato la variabile globale id_oggetti ??... in realtà basterebbe che la dichiari (una sola volta) all'avvio del gioco...

Re: Inventario

Inviato: 06/04/2014, 14:48
da Kimera_V2
Grazie gameplay cmq la variabile globale l ho dikiarata cosi tante volte xke nn me la riconosceva in altri script e mi dava errore, quindi se la dikiaro all inizio del gioco nn ce bisogno di dikiarala nuovamente?
Grazie ancora x l aiuto appena provo t faccio sapere come e andata.

Re: Inventario

Inviato: 06/04/2014, 16:46
da Kimera_V2
Gameplay il codice ke mi hai sugerito funziona alla grande ma mi da un problema qnd vado ad usare gli oggetti, x esempio se ho 5 cuori e premo ctrl me gli scende a 0 e come se ripete il codice un casino di volte.
Se metto un evento al tasto ctrl mi scende il valore di uno ma tramite codice non so cm fare per impostare la collisione fra due oggetti overo tra cursore menu e il cuore.
Grazie dell aiuto ke mi stai dando.

Re: Inventario

Inviato: 06/04/2014, 17:43
da gameplay_extreme
risolto, il problema era nello script inventario (come avevo fatto prima, per es., se prendevi 3 cuori, nell'inventario comparivano 3 cuori sovrapposti)

Codice: Seleziona tutto

globalvar id_oggetti,
{

}

//array oggetti inventario
oggetto[0,1]=obj_cuore
oggetto[0,2]=obj_energia
oggetto[0,3]=obj_croce

if my_item_slot0 = 0 || my_item_slot0 = id_oggetti //se lo slot_0 è vuoto
{
 if my_item_slot0 = 0 
   room_instance_add(Menu_gioco,32,96,oggetto[0,id_oggetti])//mi aggiunge l'oggetto
 my_item_slot0 = id_oggetti
}

else if my_item_slot1 = 0 || my_item_slot1 = id_oggetti//se slot_2 è vuoto 
{
 if my_item_slot1 = 0  
   room_instance_add(Menu_gioco,64,96,oggetto[0,id_oggetti])//mi aggiunge l'oggetto
 my_item_slot1 = id_oggetti
}


else if my_item_slot2 = 0 || my_item_slot1 = id_oggetti //se slot_3 è vuoto
{
 if my_item_slot2 = 0 
   room_instance_add(Menu_gioco,96,96,oggetto[0,id_oggetti])//mi aggiunge l'oggetto
 my_item_slot2 = id_oggetti
}

Re: Inventario

Inviato: 07/04/2014, 0:21
da Kimera_V2
Grazie sei un grande appena possibile provo e t faccio sapere, cmq se riesco a finire il gioco in tempo per il concorso t citero nei crediti, grazie ancora x tt il tuo aiuto

Re: Inventario

Inviato: 08/04/2014, 11:08
da Kimera_V2
Gamepkay funziona tutto alla grande, grazie mille del tuo aiuto.