Newsgroup: it.comp.giochi.avventure.testuali
Titolo: [Inform] esaminare oggetti multipli

Ho ripreso a studiacchiare inform, e mi ritrovo col seguente problema:
ho diverse locazioni desertiche, dove voglio sia possibile raccogliere 
se si vuole una pietra (fino ad un massimo di 50), ora ecco il mio codice,
Class obj_pietre (50)
	with	name 'roccia' 'pietra' 'rocce//p' 'pietre//p',
		short_name "pietra",
		plural "pietre",
		description "^E' una semplice pietra lavica.",
	has	female;
Object obj_pietra "pietra"
	with	name 'roccia' 'pietra' 'rocce//p' 'pietre//p',
		found_in room_1 room_2 etc...,
		before [nuova_pietra;
			take:
				nuova_pietra = obj_pietre.create();
				if (nuova_pietra == nothing) "^Ne hai abbastanza di sassi rocce e 
pietruzze varie.";
				move nuova_pietra to location;
				<<take nuova_pietra>>;
		],
	has	static concealed female;
ecco i miei problemi:
-se possiedo già una pietra non me ne fa raccogliere un'altra (la cosa 
andrebbe anche bene, ma come dovrei sistemare il codice per fare in modo 
che invece ne raccolga una seconda o per far chiedere "Vuoi raccogliere 
un'altra pietra?" e nel caso si risponda si la raccoglie?)
-come faccio ad abilitare il comando "esamina pietre"? al mometno mi 
dice che il verbo non può essere usato con oggetti multipli.
-poniamo che voglia aggiungere come sinonimo anche il vocabolo "sasso" 
(di genere diverso) quale sarebbe la soluzione migliore?
ciao e grazie,
marco

 (di genere diverso) quale sarebbe la soluzione migliore?
questa e' una di quelle questioni che mi sono riproposto di risolvere in 
modo *automatico* in una delle prossime versioni di INFIT. L'idea era 
quella di creare due nuove proprieta', una per i nomi di genere maschile 
e una per quelli di genere femminile da sostituire alla proprieta' NAME 
  nel caso di presenza di nomi di entrambi i generi. Naturalmente poi 
devo  lavorare un po' sul parser per gestirle...
HAPPY INFORMING
Giovanni

 devo  lavorare un po' sul parser per gestirle...
quindi per adesso l'unico sistema è creare un nuovo oggetto?

 (di genere diverso) quale sarebbe la soluzione migliore?
 > PRENDI SASSO
(Presa)
non e' il massimo... Potresti usare una after per sostituire il 
messaggio con uno piu' generico...
bye
-- 
Paolo Lucchesi
email: plucchesi(at)tin(dot)it
home page: 
http://www.paololucchesi.it
"Tempus Edax Rerum"


mhhh, qui non saprei....
bai
t

 prendi n pietre
bai
t

 perche'... ;-)
effettivamente funziona, perchè?
e come potrei inserire in questo modo la richiesta ne vuoi prendere 
un'altra? come posso controllare se e quante ne possiede il giocatore 
nell'inventario?
c'è un'altra cosa che non capisco,se non esiste ancora l'oggetto pietra 
(in evidenza) e si esamina la pietra mi risponde "non vedo altro che la 
pietra" (messaggio standard della libreria), mentre se l'oggetto è in 
evidenza allora dai la mia descrizione "nientaltro che pietra lavica".

 t
ma devo aggiungere anche un oggetto bottiglia (nel mio caso pietra)? o 
basta solo la classe?
ciao
m

riktik ha scritto:
....
cut
scusate le lettere mancanti qui e la, devo cambiare tastira
ciao

 basta solo la classe?
basta la classe e una create
bai
t

 oggetti disponibili nella locazione...
ovviamente puoi usare la create in diverse locazioni, oppure spostandoli
da una locazione all'altra e il tutto funge automaticamente!!!
bai
t

 da una locazione all'altra e il tutto funge automaticamente!!!
dunque sono riuscito a far funzionare correttamente il tuo script(e mi 
paice molto la possiilità di raccogliere un certo numero di bottiglie 
con un unico comando), solo che dovrei modificarlo per rispondere alle 
diverse necessità che ho io e non so se ne sono capace.
In particolare ecco ciò che vorrei è:
nel mio gioco c'è un limite di 6 oggetti trasportabili, ora mi sembra 
che lo script tratti le bottiglie come un unico oggetto con attributo 
numerico pertanto al momento posso raccogliere 5 oggetti e una quantità 
innumerevole di bottiglie (considera che nel mio gioco al posto delle 
bottiglie ho i sassi e che in un deserto roccioso il loro numero è 
praticamente infinito), come potrei limitare il numero di bottiglie che 
il giocatore può raccogliere (ad esempio a 3)?
poniamo che il giocatore beva il wisky di una bottiglia, si ritroverebbe 
con una bottiglia vuota (mmm, potrei creare una seconda classe 
cEmptyBottle), ma come farei a togliere una bottlia piena al numero di 
quelle possedute dal giocatore e non a quelle presenti nella locazione 
(che sono gestibili con adjust)?

 (che sono gestibili con adjust)?
Sai da noi come si dice, "mo vu asseih",
ora vuoi troppo!! Scherzo, è da studiare e soprattutto c'è bisogno
di tempo, cosa che al momento non ho, arghhhhhhhhhhhh!!!
ho nostalgia di inform...
bai
t

    objectloop(obj in player) {
a questo punto conviene aggiunge un campo bottiglie_portate nell'oggetto 
player e aggiornarlo quando si prende/molla una bottiglia... no?
ciao
S

Stefano Gaburri wrote:

si, forse č + elegante!!!
bai
t

>player e aggiornarlo quando si prende/molla una bottiglia... no?
per creare la proprietà bottiglie_portate nell'oggetto player devo 
modificare la libreria o c'è modo di farlo attraverso il sorgente?

    }
no cosi' non funziona, continua a prendere bottiglie a iosa...

riktik wrote:

Nessuna modifca, aggiungi questo:
Object pNewplayer "tu, riktik" with
 name 'me' ' stesso' riktik'..ect,
!... tutte le propeirtà che vuoi
bottiglie_prese 0,
 description
 [;
"Una tua descrizione...";
 ],
 before
 [;
 ],
 Life
 [;
 ],
 daemon
 [;
 ],
 has concealed animate proper transparent; !!! necessariamente questi
attributi
Ho lasciato volontariamente before, life, etc.. per farti notare che è un
oggetto
come gli altri!!!
Nell'Initialise, credo, ci va un ChangePlayer(pNewPlayer, 0);
Ah dimenticavo, pNewPlayer lo poni nella location di partenza.
bai
t

 Object pNewplayer "tu, riktik" with
a parte gli attributi che mi hai segnalato rispetto al player originale 
un nuovo giocatore non deve avere nessuna propietą/demon/altro definita?
dove č l'oggetto player originale nelle librerie, non mi č riuscito di 
trovarlo...
ciao

riktik wrote:

Mhh, va raffinato, ad occhio mi sa che funziona solo se
il player possiede esattamente n bottiglie...
bai
t

 trovarlo...
non te lo so dire...
bai
t

 trovarlo...
non lo trovi perché non si chiama player l'oggetto in questione. player 
è una variabile globale assegnata dal parser all'inizio del gioco a 
quest'oggetto qua:
Object selfobj "(self object)"
   with short_name
        [;  return L__M(##Miscellany, 18);
        ],
        description
        [;  return L__M(##Miscellany, 19);
        ],
        before NULL,   after NULL,    life NULL,    each_turn NULL,
        time_out NULL, describe NULL,
        capacity 100, parse_name 0,
        orders 0, number 0,
   has  concealed animate proper transparent;
lo trovi nel file parserm.h, riga 428.
HAPPY INFORMING
Giovanni

 modificare la libreria o c'è modo di farlo attraverso il sorgente?
no, è banalissimo: un oggetto player si può sempre creare e serve a 
mille cose (ad es. a cambiare la tua descrizione...)
ad esempio:
Object Newplayer "yourself" <locazione_iniziale>
          with description "Looking good... kinda like gaburri",
          number 0,
          add_to_scope hand, ! così posso dire di infilare la mano da
		            ! qualche parte... ovviamente va definita
          has  concealed animate proper transparent;
e poi
[ Initialise ;
lookmode = 2; ! sets verbose as default
ChangePlayer (Newplayer, 0);  !  <-------------------
! eccetera...
];

>>Object pNewplayer "tu, riktik" with
ok, sono riuscito a limitare a tre il numero massimo di bottiglie con la 
proprietà "bottiglie_possedute" del nuovo player.
continuo a rompere per qualche altra cosina:
perchè quando prendo più di una bottiglia il parser prima della risposta 
mi mette:
 > prendi due bottiglie
(le bottiglie)
Hai preso due bottiglie.
non so se centra ma rispetto al tuo codice ho aggiunto l'attributo 
concealed.
come è che posso efficentemente spostare le bottiglie da una locazione 
all'altra (ma non in tutte le locazioni solo in alcune) quando si sposta 
il giocatore (questa risposta sono quasi sicuro che stava sull'ibg ma 
non ricordo dove)
ciao.
marco

   has  concealed animate proper transparent;
ok, ridefinendo il giocatore quindi non devo riportare queste definizioni...

                     ! qualche parte... ovviamente va definita
la mano l'aggiungerň piů in la nel caso serva...
grazie
ciao

 definizioni...
Fai semplicemente come ti hanno già indicato. Ridefinisci (before, 
after, ecc.) solo quello di cui hai bisogno. In effetti qualsiasi cosa 
tu farai sarà senz'altro più di quello che già c'è. Come puoi vedere non 
c'è molto in selfobj.
Solo gli attributi li devi necessariamente mettere come ti ha già detto 
Tommaso.
HAPPY INFORMING
Giovanni

 la mano l'aggiungerò più in la nel caso serva...
beh è ovvio, quella era nel mio codice perché pensavo di permettere di 
infilarla in un buco così veniva giù una lama, te lo troncava e morivi :)

 nel mio gioco c'č un limite di 6 oggetti trasportabili, 
non c'entra con la programmazione e non voglio romperti le palle, ma sai 
che le limitazioni all'inventario sono una delle cose che piů 
infastidiscono i giocatori, no? :)
cosě, era tanto per dire...
ciao
S

Stefano Gaburri ha scritto:

tipo bocca della verità...

 
ci sono tre motivi perchè nel mio esempio per limitare l'inventario, ma 
probabilmente non te ne piacerà neanche uno:
- il numero di oggetti complessivi è piuttosto basso, quindi 
difficilmente il giocatore dovrà lasciare qualcosa di utile per tornare 
poi a prenderlo
- si veste i panni di un 6-enne con le tasche piccole
- il gioco si presenta con un'interfaccia grafica, che lascia spazio a 
solo 6 immagini/oggetti dell'inventario.
comunque nel complesso è una avventura piuttosto scarsa visto che la 
porto avanti solo per testare glulx e inform.

 non ricordo dove)
Prova cosi' (cvado sempre a tentativi non potendolo provare...)
Aggiungi nell'oggetto player
 add_to_scope [; return AggiungiAScope(); ],
Poi la procedura
[ AggiungiAScope;
 if ((location == 'quella che vuoi tu') && (~~IndirectlyContains(location,
oBottiglie)) {
  AddToScope(oBottiglie);
 }
];
bai
t

 ];
mmm, si ma io seguendo l'esempio delle bottiglie non ho un oggetto 
bottiglie "oBottiglie",
ma ho solo una classe cBottle e un 
cBottle.create(10,primaLocazione)[quest'ultimo nella routine 
initialise], che faccio al posto di oBottiglie ci metto cBottle?
ciao,
marco


Mhh, troppo complicato, allora vai sul sito di Roger
e cerca qualcosa come from_location to location,
cioč un piccolo esempio di come gestire la provenienza,
in questo modo ti sposti gli oggetti ciclando e testando
obj ofclass cBottle dalla locazione di partenza
bai
t

 cioè un piccolo esempio di come gestire la provenienza,
ho cercato nel sito di roger, ma non mi sembra di aver trovato nulla su 
from_location to location, ho visto qualche esempio sullo scope e uno 
sulla gestione di liquidi con una bottiglia, ma non mi sembra affronti 
il mio problema.
 > in questo modo ti sposti gli oggetti ciclando e testando
 > obj ofclass cBottle dalla locazione di partenza
sinceramente non ci sto capendo più nulla, poniamo che io intenda 
rendere disponibili in tutto il gioco al massimo 30 pietre (e poi dare 
un messaggio tipo "basta giocare con le pietre"), che tali pietre siano 
disponibili in più locazioni, che il giocatore ne possa portare 3 assieme.
Ora con il tuo esempio "bottiglie" sono riuscito a fare tutto
ad eccezione di quello di rendere le bottiglie/pietre disponibili in più 
locazioni (nel mio caso deserto).
Da quanto ho capito io creo le 30 pietre iniziali, poi quando il 
giocatore si sposta in un'altra locazione desertica
[e qui potrei creare una proprieta "deserto" nelle locazioni interessate 
e poi nell'entry point new room vedere se la locazione è un deserto]
devo spostare le mie  30 pietre, ed è qui che è il problema in quanto 
esse non un nome o sbaglio?

riktik ha scritto:

esse non hanno un nome


Con 30 intendi un totale (5 qui, 7 là, etc...) o 30 disponibili in ogni
locazione?
Banalmente puoi fare:
cBottle.create(locazione1, q1);
...
cBottle.create(locazionen, qn);
dove 30 = q1 + ... + qn
e ti togli daglii impicci!!!
bai
t

 locazione?
non posso fare così, altrimenti il giocatore potrebbe raccogliere le 5 
pietre disponibili in una locazione e spostarle in un'altra...
finirei quindi per avere una locazione "deserto" senza pietre e un'altra 
locazione sempre "deserto" dove invece sono disponibili,
certo a mali estremi potrei creare 30 pietre in ogni locazione desertica 
e visto che uso glulx non dovrei avere problemi di memoria giusto? ma 
non mi sembra una soluzione molto ortodossa.

riktik ha scritto:

adesso che ci penso, forse non posso fare neanche in questo modo, come 
faccio infatti a controllare quante pietre il giocatore ha sparso in 
giro? sto seriamente meditando di lasciar perdere il tutto.

Se ci sara' l'angolo del rompiballe (e NON ci sara')
sulla rivista, lo becchi di sicuro! :))
Rob
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG