Page 1 of 1

rental script help

PostPosted: Sun Feb 21, 2010 8:04 pm
by jakeman0074
here is the script i need help with thanks.

Code: Select all
string DEFAULT_TEXTURE = "cb8a501d-8d11-4f8c-96a5-382c1bd0c14b";
string RENTED_TEXTURE  = "4f301545-847c-4afa-b406-e92f84b1c4c0";


string NEW_TENNANT_PG = "";
string NEW_TENNANT = "";
string EXPIRED = "";
string INFO = "";
key id;
list splitwith;
list splitname;
string ownername;
integer not_registered = TRUE;
vector original_location;
vector original_scale;
integer objects = 50; // objects
integer price = 100; // price
integer weeks = 1; // weeks
vector offset = <0, 0, 0>;
integer mature = 0;
string rentor;
string rentorkey;
integer rented = FALSE;
string rentperiod;
integer numListen;
integer randchannel;
integer editmode;
integer stopper;
string daterented;
integer rentedweeks;
integer timerevent;

integer menu_channel;
integer menu_handler;

 

menu(key user,string title,list buttons)//make dialog easy, pick a channel by itself and destroy it after 5 seconds
{
    llListenRemove(menu_handler);
    menu_channel = (integer)(llFrand(99999.0) * -1);//yup a different channel at each use
    menu_handler = llListen(menu_channel,"",user,"");
    llDialog(user,title,buttons,menu_channel);
}

 


RENTED()
{
    if(rented)
    {   
    integer weeks2 = timerevent / 7 / 24 / 60 / 60;
    integer  days = timerevent / 24 / 60 / 60 - (weeks2 * 7);
    integer  hours = timerevent / 60 / 60 - (weeks2 * 7 * 24) - (days * 24);
    integer  mins = timerevent / 60  - (weeks2 * 7 * 24 * 60) - (days * 24 * 60) - (hours * 60);
   
    llSetText("Occupied by: " + rentor + "\n ___________\nTime Remaining\n" + (string)weeks2 + " weeks | " + (string)days + " days | " + (string)hours + " hours | " + (string)mins+" minutes",<1,1,1>,1);
    }
    else
    {
       integer monthprice=price*weeks;
       llSetText(llGetObjectDesc()+"\n Available for rent\n \nm$"+(string)monthprice+" per "+(string)weeks +" week\n \n Prims:"+(string)objects,<1,1,1>,1);   
    }   
}


default
{
    on_rez(integer change)
    {
       
        llSetTexture(DEFAULT_TEXTURE, ALL_SIDES);
        llRequestPermissions(llGetOwner(), PERMISSION_DEBIT);
        llListen(0,"","","");
        editmode = 0;
        timerevent = 0;
        rented = FALSE;
        RENTED();
        }
    listen(integer c, string n, key id, string m)
    {   
        stopper = 0;
        string objectname;
        objectname = llGetObjectName();
        if (m == "View ToS" && c == randchannel && rented == TRUE)
        {
          llGiveInventory(rentorkey,"Rentals Terms of Service"); 
        }
       
        if (m == "View Info" && c == randchannel && rented == TRUE)
        {
          llGiveInventory(rentorkey,"Rental Information"); 
        }
       
         
       
       
        if (m == "Vacate" && c == randchannel && id == llGetOwner() && rented == TRUE)
        {
             
            llSetTexture(DEFAULT_TEXTURE, ALL_SIDES);
            llSetPos(original_location);
            llSetScale(original_scale);   
            llListenRemove(numListen);
            numListen = llListen(0, "", "", "" ); 
            rentperiod = "";
            rentor = "";
            rentorkey = NULL_KEY;
            rented = FALSE;
            RENTED();
            daterented = "";
            rentedweeks = 0;
            timerevent = 0;
            llSetTimerEvent(0);
            llSay(0, objectname + " is Vacant");
        }
        if (m == "Mature" && c == randchannel && id == llGetOwner())
        {
        mature = 1;
        llSay(0,"set to Mature Area");
        }
        if (m == "Renter info" && c == randchannel && id == llGetOwner())
        {
        integer weeks2;
    weeks2 = timerevent / 7 / 24 / 60 / 60;
    integer days;
    days = timerevent / 24 / 60 / 60 - (weeks2 * 7);
    integer hours;
    hours = timerevent / 60 / 60 - (weeks2 * 7 * 24) - (days * 24);
    integer mins;
    mins = timerevent / 60  - (weeks2 * 7 * 24 * 60) - (days * 24 * 60) - (hours * 60);
    integer seconds;
    seconds = timerevent - (weeks2 * 7 * 24 * 60 * 60) - (days * 24 * 60 * 60) - (hours * 60 * 60) - (mins * 60);
        llOwnerSay("Renter name: " + rentor);
        llOwnerSay("Rented Date: " + daterented);
        llOwnerSay("Rented Left: " + (string)weeks2 + " weeks | " + (string)days + " days | " + (string)hours + ":" + (string)mins + ";" +(string)seconds);
        if (rentedweeks >= 2)
        {
        llOwnerSay("Rented amount: " + (string)rentedweeks + " weeks");
        }
        if (rentedweeks == 1)
        {
        llOwnerSay("Rented amount: " + (string)rentedweeks + " week");
        }
        if (rentedweeks <= 0)
        {
        llOwnerSay("Rented amount: N/A");
        }
        }
        if (m == "PG" && c == randchannel && id == llGetOwner())
        {
        mature = 0;
        llSay(0,"set to PG Area"); 
        }
        if (m == "Status" && c == randchannel && id == llGetOwner())
        {
            string mit;
         llOwnerSay("Prim's set to " + (string)objects);
         llOwnerSay("Week's set to " + (string)weeks);
         llOwnerSay("Offset set to " + (string)offset);           
         if (mature == 1)
         {
           mit = "Yes";
            }
            else
            {
              mit = "No";   
            }
         llOwnerSay("Region Mature: " + (string)mit);
        }
        if(m == "Edit Mode" && editmode == 0 && stopper == 0 &&  c == randchannel && id == llGetOwner())
        {
        stopper = 1;
        editmode = 1;
        llOwnerSay("editmode on");
        }
        if(m == "Edit Mode" && editmode == 1 && stopper == 0 && c == randchannel && id == llGetOwner())
        {
        stopper = 1;
        editmode = 0;
        llOwnerSay("editmode off");
        }
       
        if (m == "Help" && c == randchannel && llGetOwner() == id )
        {
        llGiveInventory(llGetOwner(), "Rentals Help");
        }
        if (llGetSubString(m,0,8) == "set weeks" && id==llGetOwner()  && editmode == 1)
        {
        weeks = (integer)llGetSubString(m,9,llStringLength(m));
        llSay(0,"weeks set to " + (string)weeks);   
        }
        if (llGetSubString(m,0,10) == "set renter " && id==llGetOwner()  && editmode == 1)
        {
        rentor = llGetSubString(m,11,llStringLength(m));
        llSay(0,"renter set to " + rentor);   
        }
       
         if (llGetSubString(m,0,9) == "set split " && id==llGetOwner()  && editmode == 1)
        {
        key SPLIT = (key)llGetSubString(m,10,llStringLength(m));
        splitwith += SPLIT;
        splitname += llKey2Name(SPLIT);
        llSay(0,llKey2Name(SPLIT) + " added to split with list");   
        }
       
         if (llGetSubString(m,0,12) == "split remove " && id==llGetOwner()  && editmode == 1)
        {
        string name = llGetSubString(m,13,llStringLength(m));
        integer finddata = llListFindList(splitname,(list)name);
        if(finddata == -1)
        {
         llSay(0,"sorry " + name + " not found");   
        }else
        {
         llDeleteSubList(splitwith,finddata,finddata);
         llDeleteSubList(splitname,finddata,finddata);
         llSay(0,name +" removed from shared list");
        }
        }
        if (llGetSubString(m,0,13) == "set rentedfor " && id==llGetOwner()  && editmode == 1)
        {
        string date = llGetTimestamp();
        daterented = llGetSubString(date,8,9) + "/" + llGetSubString(date,5,6) + "/" + llGetSubString(date,0,3) + " | Time " + llGetSubString(date,11,15);
        if(!rented)
        {
        original_scale = llGetScale();
        original_location = llGetPos();
        }
        list renttime = llParseStringKeepNulls(llGetSubString(m,14,llStringLength(m)), [":"], []);
        integer days = llList2Integer(renttime,0);
        integer hours = llList2Integer(renttime,1);
        integer minites = llList2Integer(renttime,2);
        integer seconds = llList2Integer(renttime,3);
        integer total;
        total = (days * 24 * 60 * 60) + (hours * 60 * 60) + (minites * 60) + (seconds);
        llSetTexture(RENTED_TEXTURE, ALL_SIDES);
        llSetPos(original_location + offset);
        llSetScale(<0.236,0.236,0.236>);
        timerevent = total;
        llSetTimerEvent(60);
        llWhisper(0,"set to " + (string)days + " days " + (string)hours + " hours " + (string)minites + " mins " + (string)seconds + " seconds");
        rented = TRUE;     
        }
        if (llGetSubString(m,0,10) == "set offset " && id==llGetOwner()  && editmode == 1)
        {
        offset = (vector)llGetSubString(m,11,llStringLength(m));
        llSay(0,"Offset set to " + (string)offset);   
        }
        if (llGetSubString(m,0,8) == "set prims" && id==llGetOwner() && editmode == 1)
        {
        objects = (integer)llGetSubString(m,9,llStringLength(m));
        llSay(0,"Prims set to " + (string)objects);   
        }
        if (llGetSubString(m,0,8) == "set price" && id==llGetOwner() && editmode == 1)
        {
        price = (integer)llGetSubString(m,9,llStringLength(m));
        llSay(0,"Price set to m$" + (string)price);   
        }
        if(id==llGetOwner() ||id==rentorkey)
        {
            RENTED();
        }
        llSetPayPrice(PAY_HIDE, [price,price*2,price*3,price*4]);
    }
    state_entry()
    {
        editmode = 0;
        randchannel = (integer)llFrand(10000000);
        llWhisper(0, "Activating...");
        ownername = llKey2Name(llGetOwner());
        llWhisper(0, "Asking for permission from owner " + ownername + ".");       
        llRequestPermissions(llGetOwner(), PERMISSION_DEBIT);       
        original_location = llGetPos();
        original_scale = llGetScale();
        llListenRemove(numListen);
        rentedweeks = 0;
        numListen = llListen(0, "", "", "" );
        llListen(randchannel,"","","");
        timerevent = 0; 
        llSetTexture(DEFAULT_TEXTURE, ALL_SIDES);
    }

    run_time_permissions(integer type)
    {
        if (type == PERMISSION_DEBIT)
        {
             
            ownername = llKey2Name(llGetOwner());
            llSetPayPrice(PAY_HIDE, [price,price*2,price*3,price*4]);
            llWhisper(0, "This space is now available for rent.");
            integer monthprice=price*weeks;
            llSetText(llGetObjectDesc()+"\n Available for rent\n \nm$"+(string)monthprice+" per "+(string)weeks +" week\n \n Prims:"+(string)objects,<1,1,1>,1);
            not_registered = FALSE;
        }
    }
   
    timer() {
        llListenRemove(menu_handler);
        timerevent = timerevent - 60;
        if (timerevent > 0)
        {   
        RENTED();
        }
        else
        {
        if(rentorkey != NULL_KEY)
        {
        llInstantMessage(rentorkey,"Your rental at " + llGetRegionName() + " has expired");
        }
           
        llSay(0,"rental expired");
        string objectname;       
        objectname = llGetObjectName();
        llSetTexture(DEFAULT_TEXTURE, ALL_SIDES);
        llSetPos(original_location);
        llSetScale(original_scale);       
        numListen = llListen(0, "", "", "" ); 
        rentperiod = "";
        rentor = "";
        rentorkey = NULL_KEY;
        daterented = "";
        rentedweeks = 0;
        rented = FALSE;
        timerevent = 0;
        llSetTimerEvent(0);
        RENTED();         
    }
}
   
    touch_start(integer total_number)
    {
     
         
    if(llDetectedKey(0) == rentorkey)
    {
     llDialog(rentorkey,"User's Menu\n_______________\n VIEW ToS= View the Terms of Service\nVIEW INFO= View the rentals info",["View ToS","View Info"],randchannel);
    }
   
   
   
    if(llDetectedKey(0) == llGetOwner())
   
    {
    string edit;
    if (editmode == 0)
    {
     edit = "off";
    }
    if (editmode == 1)
    {
     edit = "on"; 
    }
    llDialog(llGetOwner(),"Rentals editor \n editmode is set to: " + edit,["Mature","PG","Vacate","Edit Mode","Renter info","Help","Status"],randchannel);
}
else
{
        if(rented == FALSE)
        {
        llWhisper(0, "This space is for rent. The price is $" +(string)price+ " per week. Prim limit is "+(string)objects+" prims. Please observe the Terms of Service to avoid termination of agreement. Rent is refundable at our discretion.");
       
        llGiveInventory(llDetectedKey(0),"Rental Terms of Service");
       
        llWhisper(0, "Right click and pay to rent this space. Minimum rental period is "+(string)weeks+" weeks, at $" +(string)(price*weeks)+". If you have any questions or need help, please feel free to IM " + ownername + ".");
        }
        else
        {
        llWhisper(0, "This space is occupied by " + rentor);
        }
    }
    }
   
    money(key giver, integer amount)
    {
        integer amount2 = amount%price;
        integer weeks = amount/price;
        if(amount>=price*weeks && amount2==0 && rented == FALSE)
        {
            rentedweeks = amount/price;
            string date = llGetTimestamp();
            daterented = llGetSubString(date,8,9) + "/" + llGetSubString(date,5,6) + "/" + llGetSubString(date,0,3) + " | Time " + llGetSubString(date,11,15);
            original_scale = llGetScale();
            original_location = llGetPos();
            timerevent = 604800*weeks;
            rentor = llKey2Name(giver);
            rented = TRUE;
            RENTED();
            rentperiod = (string)weeks;
           
            llWhisper(0, "Thank you for your custom! You have paid for "+(string)weeks+" weeks rental of "+llGetObjectDesc()+". Feel free to put your stuff in now!");

            llSetTexture(RENTED_TEXTURE, ALL_SIDES);
            llSetPos(original_location + offset);
            llSetScale(<0.236,0.236,0.236>);
            rentorkey = giver;
            llGiveInventory(rentorkey,"Rental Information");
            llGiveInventory(rentorkey,"Rental Terms of Service");
            llSetTimerEvent(60);
            if(splitwith ==[])
            {
              llInstantMessage(llGetOwner(),rentor +" paid m$"+ (string)amount +" for "+(string)weeks +" weeks rental of "+llGetObjectDesc()); 
            }
           else if (splitwith != [])
            {
            integer devide = llGetListLength(splitwith) + 1;
            integer totatogive = amount/devide;   
            integer no;
            while(no < llGetListLength(splitwith))
            {
            key dest = llList2Key(splitwith,no);
            llGiveMoney(dest,totatogive);
            llInstantMessage(dest,"you have been paid m$"+ (string)totatogive +" by " + llGetObjectName());
            no ++;
            }
            }
        }
        else if(rented == TRUE)
        {
            if (llKey2Name(giver) == rentor && amount>=price*weeks && amount2==0)
            {     
            timerevent += (604800*weeks);
            llSay(0, "you have increased your rental by " + (string)weeks + " weeks");
            rentedweeks += weeks;
            if(splitwith != [])
            {
            integer devide = llGetListLength(splitwith) + 1;
            integer totatogive = amount/devide;   
            integer no;
            while(no < llGetListLength(splitwith))
            {
            key dest = llList2Key(splitwith,no);
            llGiveMoney(dest,totatogive);
        llInstantMessage(dest,"you have been paid m$"+ (string)totatogive +" by " + llGetObjectName());
            no ++;
            }
            }
        }
            else
            {
             llGiveMoney(giver, amount);
             llSay(0,"Please check Rental! Giving money back.");
            }
       
        }
       
        else
        {
            llWhisper(0, "Minimum rental period is "+(string)weeks+" weeks, at m$" +(string)(price*weeks)+ ". If you have any questions, please feel free to IM" + ownername + ".");
            llWhisper(0, "Giving money back.");
            llGiveMoney(giver, amount);
        }
    }
}

Re: rental script help

PostPosted: Sun Feb 21, 2010 9:27 pm
by Potter
I Changed the textures uuid you should change this textures if you need it
the object is .5X.5x.5 and change to .3x.3x.3x when rented.
you need add to the object the follow note cards:
name them to:
Rental Information
Rental Terms of Service
Rentals Help

hope that help!

Code: Select all
string DEFAULT_TEXTURE = "f9b9f8fa-deb5-43a9-9ead-87c40cfa9296";
string RENTED_TEXTURE = "7a11f2cd-f004-431c-b5c5-0666064e830c";


string NEW_TENNANT_PG = "";
string NEW_TENNANT = "";
string EXPIRED = "";
string INFO = "";
key id;
list splitwith;
list splitname;
string ownername;
integer not_registered = TRUE;
vector original_location;
vector original_scale;
integer objects = 50; // objects
integer price = 100; // price
integer weeks = 1; // weeks
vector offset = <0, 0, 0>;
integer mature = 0;
string rentor;
string rentorkey;
integer rented = FALSE;
string rentperiod;
integer numListen;
integer randchannel;
integer editmode;
integer stopper;
string daterented;
integer rentedweeks;
integer timerevent;

integer menu_channel;
integer menu_handler;



menu(key user,string title,list buttons)//make dialog easy, pick a channel by itself and destroy it after 5 seconds
{
    llListenRemove(menu_handler);
    menu_channel = (integer)(llFrand(99999.0) * -1);//yup a different channel at each use
    menu_handler = llListen(menu_channel,"",user,"");
    llDialog(user,title,buttons,menu_channel);
}




RENTED()
{
    if(rented)
    {
        integer weeks2 = timerevent / 7 / 24 / 60 / 60;
        integer days = timerevent / 24 / 60 / 60 - (weeks2 * 7);
        integer hours = timerevent / 60 / 60 - (weeks2 * 7 * 24) - (days * 24);
        integer mins = timerevent / 60 - (weeks2 * 7 * 24 * 60) - (days * 24 * 60) - (hours * 60);
       
        llSetText("Occupied by: " + rentor + "\n ___________\nTime Remaining\n" + (string)weeks2 + "
        weeks | " + (string)days + " days | " + (string)hours + " hours | " + (string)mins+" minutes"
        ,<1,1,1>,1);
    }
    else
    {
        integer monthprice=price*weeks;
        llSetText(llGetObjectDesc()+"\n Available for rent\n \nM$"+(string)monthprice+" per "+(string)weeks +"
        week\n \n Prims:"+(string)objects,<1,1,1>,1);
    }
}


default
{
    on_rez(integer change)
    {
        llSetTexture(DEFAULT_TEXTURE, ALL_SIDES);
        llRequestPermissions(llGetOwner(), PERMISSION_DEBIT);
        llListen(0,"","","");
        editmode = 0;
        timerevent = 0;
        rented = FALSE;
        RENTED();
    }
   
    listen(integer c, string n, key id, string m)
    {
        stopper = 0;
        string objectname;
        objectname = llGetObjectName();
        if (m == "View ToS" && c == randchannel && rented == TRUE)
        {
            llGiveInventory(rentorkey,"Rentals Terms of Service");
        }
       
        if (m == "View Info" && c == randchannel && rented == TRUE)
        {
            llGiveInventory(rentorkey,"Rental Information");
        }
       
        if (m == "Vacate" && c == randchannel && id == llGetOwner() && rented == TRUE)
        {
            llSetTexture(DEFAULT_TEXTURE, ALL_SIDES);
            llSetPos(original_location);
            llSetScale(original_scale);
            llListenRemove(numListen);
            numListen = llListen(0, "", "", "" );
            rentperiod = "";
            rentor = "";
            rentorkey = NULL_KEY;
            rented = FALSE;
            RENTED();
            daterented = "";
            rentedweeks = 0;
            timerevent = 0;
            llSetTimerEvent(0);
            llSay(0, objectname + " is Vacant");
        }
       
        if (m == "Mature" && c == randchannel && id == llGetOwner())
        {
            mature = 1;
            llSay(0,"set to Mature Area");
        }
       
        if (m == "Renter info" && c == randchannel && id == llGetOwner())
        {
            integer weeks2;
            weeks2 = timerevent / 7 / 24 / 60 / 60;
            integer days;
            days = timerevent / 24 / 60 / 60 - (weeks2 * 7);
            integer hours;
            hours = timerevent / 60 / 60 - (weeks2 * 7 * 24) - (days * 24);
            integer mins;
            mins = timerevent / 60 - (weeks2 * 7 * 24 * 60) - (days * 24 * 60) - (hours * 60);
            integer seconds;
            seconds = timerevent - (weeks2 * 7 * 24 * 60 * 60) - (days * 24 * 60 * 60) - (hours * 60 * 60) - (mins *
            60);
            llOwnerSay("Renter name: " + rentor);
            llOwnerSay("Rented Date: " + daterented);
            llOwnerSay("Rented Left: " + (string)weeks2 + " weeks | " + (string)days + " days | " + (string)hours +
            ":" + (string)mins + ";" +(string)seconds);
           
            if (rentedweeks >= 2)
            {
                llOwnerSay("Rented amount: " + (string)rentedweeks + " weeks");
            }
           
            if (rentedweeks == 1)
            {
                llOwnerSay("Rented amount: " + (string)rentedweeks + " week");
            }
           
            if (rentedweeks <= 0)
            {
                llOwnerSay("Rented amount: N/A");
            }
        }
       
        if (m == "PG" && c == randchannel && id == llGetOwner())
        {
            mature = 0;
            llSay(0,"set to PG Area");
        }
       
        if (m == "Status" && c == randchannel && id == llGetOwner())
        {
            string mit;
            llOwnerSay("Prim's set to " + (string)objects);
            llOwnerSay("Week's set to " + (string)weeks);
            llOwnerSay("Offset set to " + (string)offset);
           
            if (mature == 1)
            {
                mit = "Yes";
            }
            else
            {
                mit = "No";
            }
           
            llOwnerSay("Region Mature: " + (string)mit);
        }
       
        if(m == "Edit Mode" && editmode == 0 && stopper == 0 && c == randchannel && id == llGetOwner())
        {
            stopper = 1;
            editmode = 1;
            llOwnerSay("editmode on");
        }
       
        if(m == "Edit Mode" && editmode == 1 && stopper == 0 && c == randchannel && id == llGetOwner())
        {
            stopper = 1;
            editmode = 0;
            llOwnerSay("editmode off");
        }
       
        if (m == "Help" && c == randchannel && llGetOwner() == id )
        {
            llGiveInventory(llGetOwner(), "Rentals Help");
        }
       
        if (llGetSubString(m,0,8) == "set weeks" && id==llGetOwner() && editmode == 1)
        {
            weeks = (integer)llGetSubString(m,9,llStringLength(m));
            llSay(0,"weeks set to " + (string)weeks);
        }
       
        if (llGetSubString(m,0,10) == "set renter " && id==llGetOwner() && editmode == 1)
        {
            rentor = llGetSubString(m,11,llStringLength(m));
            llSay(0,"renter set to " + rentor);
        }
       
        if (llGetSubString(m,0,9) == "set split " && id==llGetOwner() && editmode == 1)
        {
            key SPLIT = (key)llGetSubString(m,10,llStringLength(m));
            splitwith += SPLIT;
            splitname += llKey2Name(SPLIT);
            llSay(0,llKey2Name(SPLIT) + " added to split with list");
        }
       
        if (llGetSubString(m,0,12) == "split remove " && id==llGetOwner() && editmode == 1)
        {
            string name = llGetSubString(m,13,llStringLength(m));
            integer finddata = llListFindList(splitname,(list)name);
            if(finddata == -1)
            {
                llSay(0,"sorry " + name + " not found");
            }
            else
            {
                llDeleteSubList(splitwith,finddata,finddata);
                llDeleteSubList(splitname,finddata,finddata);
                llSay(0,name +" removed from shared list");
            }
        }
       
        if (llGetSubString(m,0,13) == "set rentedfor " && id==llGetOwner() && editmode == 1)
        {
            string date = llGetTimestamp();
            daterented = llGetSubString(date,8,9) + "/" + llGetSubString(date,5,6) + "/" + llGetSubString(date,0,3)
            + " | Time " + llGetSubString(date,11,15);
           
            if(!rented)
            {
                original_scale = <0.500,0.500,0.500>;//llGetScale();
                original_location = llGetPos();
            }
           
            list renttime = llParseStringKeepNulls(llGetSubString(m,14,llStringLength(m)), [":"], []);
            integer days = llList2Integer(renttime,0);
            integer hours = llList2Integer(renttime,1);
            integer minites = llList2Integer(renttime,2);
            integer seconds = llList2Integer(renttime,3);
            integer total;
            total = (days * 24 * 60 * 60) + (hours * 60 * 60) + (minites * 60) + (seconds);
            llSetTexture(RENTED_TEXTURE, ALL_SIDES);
            llSetPos(original_location + offset);
            llSetScale(<0.300,0.300,0.300>);
            timerevent = total;
            llSetTimerEvent(60);
            llWhisper(0,"set to " + (string)days + " days " + (string)hours + " hours " + (string)minites + " mins "
            + (string)seconds + " seconds");
            rented = TRUE;
        }
       
        if (llGetSubString(m,0,10) == "set offset " && id==llGetOwner() && editmode == 1)
        {
            offset = (vector)llGetSubString(m,11,llStringLength(m));
            llSay(0,"Offset set to " + (string)offset);
        }
       
        if (llGetSubString(m,0,8) == "set prims" && id==llGetOwner() && editmode == 1)
        {
            objects = (integer)llGetSubString(m,9,llStringLength(m));
            llSay(0,"Prims set to " + (string)objects);
        }
       
        if (llGetSubString(m,0,8) == "set price" && id==llGetOwner() && editmode == 1)
        {
            price = (integer)llGetSubString(m,9,llStringLength(m));
            llSay(0,"Price set to M$" + (string)price);
        }
       
        if(id==llGetOwner() ||id==rentorkey)
        {
            RENTED();
        }
       
        llSetPayPrice(PAY_HIDE, [price,price*2,price*3,price*4]);
}

state_entry()
{
    editmode = 0;
    randchannel = (integer)llFrand(10000000);
    llWhisper(0, "Activating...");
    ownername = llKey2Name(llGetOwner());
    llWhisper(0, "Asking for permission from owner " + ownername + ".");
    llRequestPermissions(llGetOwner(), PERMISSION_DEBIT);
    original_location = llGetPos();
    original_scale = llGetScale();
    llListenRemove(numListen);
    rentedweeks = 0;
    numListen = llListen(0, "", "", "" );
    llListen(randchannel,"","","");
    timerevent = 0;
    llSetTexture(DEFAULT_TEXTURE, ALL_SIDES);
}

run_time_permissions(integer type)
{
    if (type == PERMISSION_DEBIT)
    {
        ownername = llKey2Name(llGetOwner());
        llSetPayPrice(PAY_HIDE, [price,price*2,price*3,price*4]);
        llWhisper(0, "This space is now available for rent.");
        integer monthprice=price*weeks;
        llSetText(llGetObjectDesc()+"\n Available for rent\n \nM$"+(string)monthprice+" per "+(string)weeks +" week\n \n Prims:"+(string)objects,<1,1,1>,1);
        not_registered = FALSE;
    }
}

timer()
{
    llListenRemove(menu_handler);
    timerevent = timerevent - 60;
    if (timerevent > 0)
    {
        RENTED();
    }
    else
    {
        if(rentorkey != NULL_KEY)
        {
            llInstantMessage(rentorkey,"Your rental at " + llGetRegionName() + " has expired");
        }
       
        llSay(0,"rental expired");
        string objectname;
        objectname = llGetObjectName();
        llSetTexture(DEFAULT_TEXTURE, ALL_SIDES);
        llSetPos(original_location);
        llSetScale(original_scale);
        numListen = llListen(0, "", "", "" );
        rentperiod = "";
        rentor = "";
        rentorkey = NULL_KEY;
        daterented = "";
        rentedweeks = 0;
        rented = FALSE;
        timerevent = 0;
        llSetTimerEvent(0);
        RENTED();
    }
}

touch_start(integer total_number)
{
    if(llDetectedKey(0) == rentorkey)
    {
        llDialog(rentorkey,"User's Menu\n_______________\n VIEW ToS= View the Terms of Service\nVIEW INFO= View the rentals info",["View ToS","View Info"],randchannel);
    }
   
    if(llDetectedKey(0) == llGetOwner())
    {
        string edit;
        if (editmode == 0)
        {
            edit = "off";
        }
        if (editmode == 1)
        {
            edit = "on";
        }
       
        llDialog(llGetOwner(),"Rentals editor \n editmode is set to: " + edit,["Mature","PG","Vacate","Edit Mode","Renter info","Help","Status"],randchannel);
       
    }
    else
    {
        if(rented == FALSE)
        {
            llWhisper(0, "This space is for rent. The price is M$" +(string)price+ " per week. Prim limit is "+(string)objects+" prims. Please observe the Terms of Service to avoid termination of agreement. Rent is refundable at our discretion.");
           
            llGiveInventory(llDetectedKey(0),"Rental Terms of Service");
           
            llWhisper(0, "Right click and pay to rent this space. Minimum rental period is "+(string)weeks+" weeks, at M$" +(string)(price*weeks)+". If you have any questions or need help, please feel free to IM " + ownername + ".");

        }
        else
        {
            llWhisper(0, "This space is occupied by " + rentor);
        }
    }
}

money(key giver, integer amount)
{
    integer amount2 = amount%price;
    integer weeks = amount/price;
    if(amount>=price*weeks && amount2==0 && rented == FALSE)
    {
        rentedweeks = amount/price;
        string date = llGetTimestamp();
        daterented = llGetSubString(date,8,9) + "/" + llGetSubString(date,5,6) + "/" + llGetSubString(date,0,3) + " | Time " + llGetSubString(date,11,15);
        original_scale = llGetScale();
        original_location = llGetPos();
        timerevent = 604800*weeks;
        rentor = llKey2Name(giver);
        rented = TRUE;
        RENTED();
        rentperiod = (string)weeks;
       
        llWhisper(0, "Thank you for your custom! You have paid for "+(string)weeks+" weeks rental of "+llGetObjectDesc()+". Feel free to put your stuff in now!");
       
        llSetTexture(RENTED_TEXTURE, ALL_SIDES);
        llSetPos(original_location + offset);
        llSetScale(<0.300,0.300,0.300>);
        rentorkey = giver;
        llGiveInventory(rentorkey,"Rental Information");
        llGiveInventory(rentorkey,"Rental Terms of Service");
        llSetTimerEvent(60);
        if(splitwith ==[])
        {
            llInstantMessage(llGetOwner(),rentor +" paid M$"+ (string)amount +" for "+(string)weeks +" weeks rental of "+llGetObjectDesc());
        }
        else if (splitwith != [])
        {
            integer devide = llGetListLength(splitwith) + 1;
            integer totatogive = amount/devide;
            integer no;
            while(no < llGetListLength(splitwith))
            {
                key dest = llList2Key(splitwith,no);
                llGiveMoney(dest,totatogive);
                llInstantMessage(dest,"you have been paid M$"+ (string)totatogive +" by " + llGetObjectName());
                no ++;
            }
        }
    }
    else if(rented == TRUE)
    {
        if (llKey2Name(giver) == rentor && amount>=price*weeks && amount2==0)
        {
            timerevent += (604800*weeks);
            llSay(0, "you have increased your rental by " + (string)weeks + " weeks");
            rentedweeks += weeks;
            if(splitwith != [])
            {
                integer devide = llGetListLength(splitwith) + 1;
                integer totatogive = amount/devide;
                integer no;
                while(no < llGetListLength(splitwith))
                {
                    key dest = llList2Key(splitwith,no);
                    llGiveMoney(dest,totatogive);
                    llInstantMessage(dest,"you have been paid M$"+ (string)totatogive +" by " + llGetObjectName());
                    no ++;
                }
            }
        }
        else
        {
            llGiveMoney(giver, amount);
            llSay(0,"Please check Rental! Giving money back.");
        }
    }
    else
    {
        llWhisper(0, "Minimum rental period is "+(string)weeks+" weeks, at M$" +(string)(price*weeks)+ ". If you have any questions, please feel free to IM" + ownername + ".");
        llWhisper(0, "Giving money back.");
        llGiveMoney(giver, amount);
    }
}
}