integer noteLine = 0;
key noteQuery;
string letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
integer luckyLetter=0;
string prizeString;
key av;
integer TIMER=600;
integer PRIZETYPE=0; // 0=cash 1=gift
integer CASH=0; // cash prize amount
integer VOLUME=0; // 0=say 1=shout
list particles;
integer Handle;
talk(string message)
{
if(VOLUME==0)
llSay(0,message);
else
llShout(0,message);
}
newLuckyLetter()
{
luckyLetter=llRound(llFrand(25.0));
llMessageLinked(2,luckyLetter,"",NULL_KEY);
talk("Es wird ein neuer Glücksbuchstabe ausgesucht!");
llSleep(1);
if(PRIZETYPE==0) // cash
{
prizeString=(string)CASH + "L$!";
}else{ // gift
// get a random object from the inventory
integer size=llGetInventoryNumber(INVENTORY_ALL);
integer index=0;
integer object_ready=0;
if(size==2) // must be only the script and notecard
{
prizeString="";
}
else
{
while(!object_ready) // make sure we dont select the script and notecard
{
index=llRound(llFrand((float)(size - 1)));
if(llGetInventoryName(INVENTORY_ALL,index)!="Lucky Letter Chair" &&
llGetInventoryName(INVENTORY_ALL,index)!="settings")
object_ready=1;
}
prizeString = llGetInventoryName(INVENTORY_ALL,index);
}
}
talk("Der nächste Lucky Letter Chair Preis ist " + prizeString);
llSleep(1);
talk("Wir suchen jetzt einen Namen, der mit dem Buchstaben >" +
llGetSubString(letters,luckyLetter,luckyLetter) + "< anfängt!");
}
default
{
state_entry()
{
llParticleSystem([]);
llOwnerSay("Initializing settings, please wait...");
particles = [ PSYS_PART_MAX_AGE,20.0,
PSYS_PART_FLAGS,PSYS_PART_EMISSIVE_MASK | PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK|PSYS_PART_BOUNCE_MASK ,
PSYS_PART_START_COLOR, <1,1,0>,
PSYS_PART_END_COLOR, <1,0,0>,
PSYS_PART_START_SCALE,<0.05,0.05,0>,
PSYS_PART_END_SCALE,<0.8,0.8,0.8>,
PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_EXPLODE,
PSYS_SRC_BURST_RATE,0.1,
PSYS_SRC_ACCEL, <0,0,0>,
PSYS_SRC_BURST_PART_COUNT,12,
PSYS_SRC_BURST_RADIUS,0.0,
PSYS_SRC_BURST_SPEED_MIN,1.0,
PSYS_SRC_BURST_SPEED_MAX,1.0,
PSYS_SRC_INNERANGLE,0.3,
PSYS_SRC_OUTERANGLE,0.0,
PSYS_SRC_OMEGA, <0,0,0>,
PSYS_SRC_MAX_AGE,8.0,
PSYS_SRC_TEXTURE, "",
PSYS_PART_START_ALPHA, 1.0,
PSYS_PART_END_ALPHA, 0.01
];
vector eul = <190,0,90>;
eul *= DEG_TO_RAD;
llSitTarget(<0.01,-0.2,-1.3>,llEuler2Rot(eul));
av=NULL_KEY;
// Load settings
noteLine = 0;
noteQuery = llGetNotecardLine("settings", 0);
}
run_time_permissions(integer perm) {
if (perm & PERMISSION_DEBIT) {
// We got permission to pay, start up
state running;
}
}
dataserver(key queryid, string data) {
if (queryid == noteQuery) {
if (data == EOF) {
// No more settings
llOwnerSay("Initialized, checking for payment permission....");
if (llGetPermissions() & PERMISSION_DEBIT)
state running;
else
llRequestPermissions(llGetOwner(), PERMISSION_DEBIT);
} else {
// New line of settings
list parts = llParseString2List(data, [":"], []);
string setting = llList2String(parts, 0);
string value = llList2String(parts, 1);
// No need to be picky about case
setting = llToLower(setting);
if (setting == "timer") TIMER = (integer)value;
if (setting == "volume") VOLUME = (integer)value;
if (setting == "prizetype") PRIZETYPE = (integer)value;
if (setting == "cash") CASH = (integer)value;
// Get next line of settings
noteLine++;
noteQuery = llGetNotecardLine("settings", noteLine);
}
}
}
on_rez(integer param)
{
llResetScript();
}
}
state running
{
state_entry()
{
av=NULL_KEY;
newLuckyLetter();
llSetTimerEvent(TIMER*60);
llParticleSystem([]);
}
timer()
{
newLuckyLetter();
}
changed(integer change) {
if (change & CHANGED_INVENTORY) {
llResetScript();
}
if (change & CHANGED_LINK) {
av = llAvatarOnSitTarget();
if (av != NULL_KEY) {
string name = llKey2Name(av);
string letter = llGetSubString(llToUpper(name),0,0);
llSleep(2);
talk("Hallo " + name);
llSleep(1);
talk("Dein Name fängt an mit einem >" + letter + "< an und wir suchen einen Name der mit einem >" + llGetSubString(letters,luckyLetter,luckyLetter) + "< anfängt!");
llSleep(1);
if(letter==llGetSubString(letters,luckyLetter,luckyLetter))
{
state winner;
}else{
talk("Tut mit leid!");
llUnSit(av);
av=NULL_KEY;
}
}
}
}
touch(integer count)
{
if(llDetectedKey(0)==llGetOwner())
{
Handle = llListen(9638,"",llGetOwner(),"");
llDialog(llGetOwner(),"Do you wish to reset the Lucky Letter Chair?",["Reset"],9638);
}
}
listen(integer channel, string name, key id, string message)
{
if(id==llGetOwner() && message=="Reset")
{
llListenRemove(Handle);
llResetScript();
}
}
on_rez(integer param)
{
llResetScript();
}
}
state winner
{
state_entry()
{
if(av!=NULL_KEY)
{
talk("Wir haben einen Gewinner!");
// do particles
// deliver item or cash
if(PRIZETYPE==0) // cash
{
llParticleSystem(particles);
llGiveMoney(av,CASH);
}else{
llParticleSystem(particles);
llGiveInventory(av,prizeString);
}
llSleep(5);
llParticleSystem([]);
llUnSit(av);
av=NULL_KEY;
llSleep(7);
}
state running;
}
on_rez(integer param)
{
llResetScript();
}
}