Sei sulla pagina 1di 25

Salahzar/Stenvaag

Pyramid Rezzer
Part I
ALI – Accademia delle Land
Italiane Dicembre 2008
your name
I concetti base dei rezzer:
L’inventory locale
• Oggetti scriptati possono rezzare il
contenuto del loro inventory

– llRezAtRoot(nome oggetto, posizione,


rotazione, velocità, parametro)
– llGetInventoryXXX per esplorare
l’inventory dell’oggetto

2 your name
Come si usa il rezzer
per i creatori di ambienti
• Si crea un ambiente che possa
essere linkato unicamente
• Si linka assieme alla base 20x20
dove c’è lo script “cancella”
• Si fa attenzione ad allinearlo sulla
freccia che indica la “finestra” dentro
il caffè
3 your name
Come si inserisce l’oggetto
linkato
• Viene semplicemente messo dentro
il “telecomando” come oggetto
unico.

4 your name
Come si usa il telecomando
• + o – per spostarsi di canale o di
ambiente (viene visualizzato il nome
dell’ambiente)
• Tasto centrale per rezzare
l’ambiente in questione
• Tasto di blocco per evitare che gli
avatar cambino l’ambiente mentre lo
si usa. 5 your name
Attenzione al rez
• Oggetti NOCOPY una volta rezzati
spariscono dall’inventory
• llRezAtRoot rezza il root prim alle
coordinate indicate
• llRezObject rezza il “centro
dell’oggetto” alle coordinate indicate

6 your name
Gli oggetti rezzati
• Possono essere prim singoli, linked
set o “aggregati” (coalesced)
• Singoli o linked devono essere, oltre
che copy, anche MODIFY, perchè
dobbiamo inserirci uno script dentro
• Lo script come minimo ascolta su un
canale chat ed è in grado di far
sparire l’oggetto (llDie).
7 your name
Il rezzer di Pyramid
• E’ composto da
– un telecomando, per scegliere gli
ambienti
– una base (linkati assieme)
• Dentro l’inventory del
telecomando/rezzer ci sono gli script
di comando e tutti gli AMBIENTI
8 your name
Schema a blocchi
Base rezzata con oggetti linked

Rez /
Inventory Cancella
con + -
scenari
Blocca

Base Telecomando (rezzer) Rezza

9 your name
Riepilogo comunicazioni
Gli oggetti comunicano (di norma) con i seguenti due sistemi:

llSay/llListen: usati dal rezzer per indicare alla base rezzata con
l’ambientazione linkata di CANCELLARSI

llLinkMessage/message_linked: usati fra i tasti del telecomando


(+, -, lock, tasto centrale=rezzer => script centrale) per
indicare i seguenti eventi:
- avanza nella lista di scenari
- torna indietro nella lista di scenari
- blocca/sblocca rezzer
- rezza effettivamente
- usato anche per impostare la scritta sul telecomando!!!
10 your name
Gli Ambienti da rezzare
• Sono costituiti da:
– Tutti gli oggetti forniti dal “creatore”
ambiente (devono essere copy e
modify per poter essere linkati)
– Una base (superprim 20x20) con lo
script di autocancellazione
– Il tutto LINKATO facendo attenzione
che la base superprim sia ROOT
11 your name
Lo script nella base
integer cancella=-1010;
Default {
state_entry(){
llListen(cancella,"telecomando",NULL_KEY,"CAN
CELLA");
} // imposta llListen su canale -1010
on_rez(integer start_param){
llListen(cancella,"telecomando",NULL_KEY,"CANCELL
A");
} // idem
listen(integer channel,string name,key
id,string message){
llDie();}} // quando arriva qualcosa
cancella il prim!! 12 your name
Lo script nel telecomando
(tasto centrale) globals
integer CHANNEL_CAMBIA=0;
integer CHANNEL_TEXT=1;
integer CHANNEL_REZZA=2;
integer CHANNEL_BLOCCA=3;

integer UNLOCK=TRUE;

integer total_number=0;
list nomi_scenari;
integer index=0;
integer cancella=-1010;
vector posizione=<107.715,181.310,724.853>;
13 your name
Lo script nel telecomando
ricerca scenari
aggiorna(){
nomi_scenari=[];

total_number=llGetInventoryNumber(INVENTORY_OBJEC
T);
integer i;
for(i=0;i<total_number;i++)

nomi_scenari+=llGetInventoryName(INVENTORY_OBJECT
,i);
}

14 your name
Lo script nel telecomando
reset/changed =>aggiorna
default
{
state_entry(){
aggiorna();
}

changed(integer change){
if(change==CHANGED_INVENTORY){
aggiorna();
}
}

15 your name
Lo script nel telecomando
risposta a “+”
link_message(integer sender_num,integer
num,string str,key id){
if(total_number>0 && num==CHANNEL_CAMBIA &&
UNLOCK>0){
if(str=="PIU"){
if(index==total_number-1)
index=0;
else
index++;

llMessageLinked(LINK_ALL_OTHERS,CHANNEL_TEXT,llLi
st2String(nomi_scenari,index),NULL_KEY);
16 your name
}
Lo script nel telecomando
risposta a “-”
else if(str=="MENO"){
if(index==0)
index=total_number-1;
else
index--;

llMessageLinked(LINK_ALL_OTHERS,CHANNEL_TEXT,llLi
st2String(nomi_scenari,index),NULL_KEY);
}
}

17 your name
Lo script nel telecomando
risposta a “rezza” e “blocca”
else if(num==CHANNEL_REZZA){
llSay(cancella,"CANCELLA");

llRezAtRoot(llList2String(nomi_scenari,index),pos
izione,ZERO_VECTOR,llEuler2Rot(<0,0,-PI/2>),0);
}
else if(num==CHANNEL_BLOCCA){
UNLOCK=~UNLOCK;
}
}
}

18 your name
Tasto blocca telecomando
//list members=[ "JonnyBee Cioc",
// "magicflute Oh",
// "Vision Raymaker",
// "Maryva Mayo",
// "Vitto Writer",
// "Albus Cimino",
// "Evaluna Sperber” ];
integer CHANNEL_CAMBIA=0;
integer CHANNEL_TEXT=1;
integer CHANNEL_REZZA=2;
integer CHANNEL_BLOCCA=3;
integer UNLOCK=TRUE;
string msg; 19 your name
Tasto blocca telecomando
reset/status
scrivi(){
if(UNLOCK>0)
msg="Unlocked";
else
msg="Locked";
llSetText(msg,<1,1,0>,1);
}

default
{
state_entry(){
scrivi();
} 20 your name
Tasto centrale telecomando
integer CHANNEL_CAMBIA=0; // “+” O “-”
integer CHANNEL_TEXT=1; // CAMBIA LLSETTEXT
integer CHANNEL_REZZA=2; // ORDINA DI REZZARE
integer CHANNEL_BLOCCA=3; // BLOCCO TELECOMANDO

integer UNLOCK=TRUE; // TELECOMANDO LIBERO

scrivi(string s){ // SCRIVI TESTO


llSetText(s,<1,1,1>,1);
}

21 your name
Tasto centrale telecomando
(touch)
default
{
touch_start(integer total_number){
if(UNLOCK>0) // SOLO SE LIBERO!!!

llMessageLinked(LINK_ALL_OTHERS,CHANNEL_REZZA,"",
NULL_KEY); // FA IL REZ
else
llInstantMessage(llDetectedKey(0),"Una
persona del guppo Pyramid Cafe' ha bloccato lo
scorrimento degli scenari");
}

22 your name
Tasto centrale telecomando
(link_message)
link_message(integer sender_num,integer num,string
str,key id){
if(num==CHANNEL_TEXT){ // RISPONDE A TEXT
scrivi(str);
}
else if(num==CHANNEL_BLOCCA){ // RISPONDE A
BLOCCO
UNLOCK=~UNLOCK;
}
}
}

23 your name
Tasto “+” “-”
default
{
touch_start(integer total_number){

llMessageLinked(LINK_ALL_OTHERS,0,”PIU/MENO",llDe
tectedKey(0));
}
}

24 your name
Difetti del rezzer pyramid
cosa non si può fare
• Inserire scene multiple composte da più linked set (Esempio:
scene con sedie distinte)
• Gestire gli aggregati (coalesced objects)
• Gestire di Scene interne ed Esterne
• Gestire ambienti complessi ruotati.

NB: Un rezzer (Holodeck, Hypercube) etc. Può essere venduto a


5000, 10000 L$.

Nelle prossime lezioni vediamo come farlo da noi ed


eventualmente migliorare il rezzer di pyramid.

25 your name

Potrebbero piacerti anche