Sei sulla pagina 1di 30

Temp/Sensor

Rezzer (Part IV)


ALI – Accademia delle Land
Italiane Dicembre 2008
1 your name
In generale
• 4a lezione di rezzer a pyramid 23
Dicembre ore 22
• TempRezzer e sensor rezzer

2 your name
Temp Rezzer
• Sono rezzer che sfruttano i prim non
ancora utilizzati della sim
• consentono di superare il totale di
prim consentito per la singola
parcella
• Inutili se la sim è già piena
• Scomodi per sit e case (avatar
vengono scacciati o cadono)
3 your name
Lo script sull’oggetto 1/3
// Canale di chat. (Al rez)
integer commChannel;
Default {
state_entry(){
// rende l’oggetto TEMP!
llSetPrimitiveParams([PRIM_TEMP_ON_
REZ, TRUE]);
}

4 your name
Lo script sull’oggetto 2/3
on_rez(integer param){
if (!param)
// se rezzato A MANO!!

llSetPrimitiveParams([PRIM_TEMP_ON_
REZ, FALSE]);
else {
// Ascolta sul CANALE
commChannel = param;
llListen(commChannel,
"", NULL_KEY, "");
}
5 your name
Lo script sull’oggetto 3/3
listen(integer channel, string name,
key id, string message)
{
// Soltanto il mio OWNER
if (llGetOwnerKey(id) !=
llGetOwner())
return;
if (message == "derez")
llDie();
}
}
6 your name
Lo script per il Menu 1
integer CHANNEL; // Menu dinamico
list dynMenu = [];
string power = “Accendi";
string avSensor = "Sensore";
Default {
state_entry() {
CHANNEL =
(integer)llFrand(2000000000.0);
llListen(CHANNEL, "",
NULL_KEY, "");
}
7 your name
il Menu 2 (touch)
touch_start(integer total_number){
list dynMenu = ["Reset", avSensor,
power];
if (llDetectedKey(0) ==
llGetOwner())

llDialog(llDetectedKey(0), “Cosa
vuoi fare?", dynMenu, CHANNEL);
}

8 your name
il Menu 3 (reset)
listen(integer channel, string
name, key id, string message) {
llOwnerSay(message);
if (message == "Reset“){
llMessageLinked(LINK_THIS, 1000, "",
NULL_KEY);
llMessageLinked(LINK_THIS, 1500, "",
NULL_KEY);
power = “Accendi";
avSensor = "Sensore";
}
9 your name
il Menu 4 (accendi/spegni)
else if (message == “Acceso"){
llMessageLinked(LINK_THIS, 1200, "",
NULL_KEY);
power = “Spegni";
}
else if (message ==
“Spegni") {
llMessageLinked(LINK_THIS, 1300, "",
NULL_KEY);
power = “Accendi";
}
10 your name
il Menu 5 (sensore)
else if (message == "Sensore“){
llMessageLinked(LINK_THIS, 1400, "",
NULL_KEY);
avSensor = “NO
Sensore”;
} else if (message == “NO
Sensore") {
llMessageLinked(LINK_THIS, 1500, "",
NULL_KEY);
avSensor = “Sensore";
}
}
11 your name
il Menu 6 (rez/changed)
on_rez(integer start_param){
llResetScript();
}

changed(integer change) {
if (change & CHANGED_OWNER)
{
llResetScript();
}
}
}
12 your name
Main 1 (variabili)
vector rezPosition = <0,0,0>;
rotation rezRotation = <0,0,0,0>;
string commandDerez = "derez";
integer commChannel;
key childKey = NULL_KEY;
float sensorTime = 1;
integer lifeTime = 50;
integer startTime = 0;
integer tick;
integer avSensor = FALSE;

13 your name
Main 2 (Controlla Inventory)
integer InventoryCheck(){
if
(llGetInventoryNumber(INVENTORY_OBJ
ECT) > 1) {
llOwnerSay(“Troppi oggetti");
return 1;
} else if
(llGetInventoryNumber(INVENTORY_OBJ
ECT) == 0) {
llOwnerSay(“Almeno 1!");
return 1;
}
14 your name
Main 3 (Permissions)
if
(llGetInventoryPermMask(llGetInvent
oryName(INVENTORY_OBJECT, 0),
MASK_OWNER) & PERM_COPY)
return 0; // OK permissions
else
{
llOwnerSay(“Manca copy!");
return 1;
}
}
15 your name
Main 4 (Rez <0,0,0>)
integer rez() {
llSay(commChannel, commandDerez);
llSetTimerEvent(0);
childKey = NULL_KEY;
if (rezPosition== <0,0,0>) {

llRezAtRoot(llGetInventoryName(INVE
NTORY_OBJECT, 0), llGetPos(),
ZERO_VECTOR, rezRotation,
commChannel);
return 0;
}
16 your name
Main 5 (Rez at pos)
else {
if (llVecDist(llGetPos(),
rezPosition) > 10) {
llOwnerSay(“Troppo Lontano!");
return 1;
}
llRezAtRoot(llGetInventoryName(INVE
NTORY_OBJECT, 0), rezPosition,
ZERO_VECTOR, rezRotation,
commChannel);
return 0;
}
17 your name
Main 6 (Rez / change inv)
Default {
state_entry() {
llSetAlpha(1.0, ALL_SIDES);
childKey = NULL_KEY;
}
changed(integer change) {
if (change &
CHANGED_INVENTORY) {
if (!InventoryCheck())
llOwnerSay("Ready to
run");
} 18 your name
Main 7 (change owner cmd)
if (change & CHANGED_OWNER){
llOwnerSay(“Nuovo Owner");
llResetScript();}}
link_message(integer sender, integer
num, string message, key id) {
if (num == 1200){ // Accendi!
if (!InventoryCheck())
state running; }
else if (num == 1400){// Sensore!
avSensor = TRUE;
}
19 your name
Main 8 (nosensor, running)
else if (num == 1500){// NO Sensor
avSensor = FALSE;
} else {
llOwnerSay(“Sono spento");
}}}
state running{
state_entry()
{
llOwnerSay(“Acceso!");
childKey = NULL_KEY;
llSetTimerEvent(0.0);
20 your name
Main 9 (rezzing effettivo!)
llSetAlpha(0.0, ALL_SIDES);
commChannel =
(integer)llFrand(2000000000.0);
if (!avSensor) if (rez() == 1)
state default; }
// quando l’oggetto è rezzato!
object_rez(key child){
childKey = child;
startTime = llGetUnixTime();
llSetTimerEvent(sensorTime);
}
21 your name
Main 10 (Timer+sensor)
timer(){
if (llGetUnixTime() >= (startTime
+ lifeTime)) {
llSay(commChannel, commandDerez);
rez();
} else
llSensor("", childKey,
SCRIPTED, 96, PI);
}

22 your name
Main 11 (check è spostato?)
sensor(integer num_detected){
if (tick >= 5) {
tick = 0;
if(rezPosition!=llDetectedPos(0)){
if (llVecDist(llGetPos(),
llDetectedPos(0)) > 10) {
llSay(commChannel, commandDerez);
state default; }
rezPosition = llDetectedPos(0);}

23 your name
Main 12 (ripristina)
if (rezRotation != llDetectedRot(0){
rezRotation =
llDetectedRot(0); }
} else tick++; }
no_sensor() {
rez();
}
on_rez(integer param) {
state default;
}

24 your name
Main 13 (cambio inv/reset)
changed(integer change){
if (change & CHANGED_INVENTORY){
if (InventoryCheck())
state default; }}
link_message(integer sender, integer
num, string message, key id){
if (num == 1000) { // RESET
llSay(commChannel, commandDerez);
llResetScript();
}

25 your name
Main 14 (accendi spegni)
else if (num == 1200) { // accendi
llOwnerSay(“Già acceso”); }
else if (num == 1300) { // spegni
llSay(commChannel, commandDerez);

llMessageLinked(LINK_THIS, 1500,
"", NULL_KEY);
state default;
}

26 your name
Main 15 (accendi spegni)
else if (num == 1400){ // SENSOR
avSensor = TRUE; }
else if (num == 1500) {// NO SENSOR
avSensor = FALSE; }
else if (num == 2000){//un AV vicino
if (childKey == NULL_KEY) rez();}
else if (num == 2100){//nessun AV
llSetTimerEvent(0.0);
llSay(commChannel,
commandDerez);
childKey = NULL_KEY;
} }} 27 your name
Sensor 1 (link_message)
integer active = FALSE;
integer sensorPeriod = 10;
integer sensorDist = 20;
integer avDetected = FALSE;
default {
link_message(integer sender,
integer num, string message, key
id){
if (num == 1400) // SENSOR {
avDetected = FALSE;
llSensorRepeat("", NULL_KEY, AGENT,
sensorDist, PI, sensorPeriod);}
28 your name
Sensor 2 (an AV!)
else if (num == 1500) { // NO Sensor
avDetected = FALSE;
llSensorRemove(); }}
sensor(integer total_number){
if (!avDetected){
llMessageLinked(LINK_THIS, 2000, "",
NULL_KEY);
avDetected = TRUE;
}
}

29 your name
Sensor 3 (no AV!)
no_sensor(){
if (avDetected) { // disabilita!
llMessageLinked(LINK_THIS, 2100, "",
NULL_KEY); avDetected = FALSE; }}

changed(integer change){
if (change & CHANGED_OWNER){
llResetScript();
}
}
}
30 your name

Potrebbero piacerti anche