Rental Script

From Second Life Wiki
Jump to navigation Jump to search

Rental Script... list splitwith; list splitname; string ownername; integer not_registered = TRUE; vector original_location; vector original_scale; integer objects = 25; // objects integer price = 350; // price integer weeks = 1; // weaks vector offset = <0, 0, 2>; 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;

default {

   on_rez(integer change)
   {
   llInstantMessage(llGetOwner(),"for help click item then select help from menu");
       llSetTexture("rentit", ALL_SIDES);
       
       llListen(0,"","","");
       randchannel = (integer)llFrand(10000000);
       llListen(randchannel,"","","");
       editmode = 0;
       timerevent = 0;
       rented == FALSE;
       }
   listen(integer c, string n, key id, string m)
   {
       stopper = 0;
       string objectname;
       objectname = llGetObjectName();
       if (m == "Vacent" && c == randchannel && id == llGetOwner() && rented == TRUE)
       {
           llSetTexture("rentit", ALL_SIDES);
           llSetPos(original_location);
           llSetScale(original_scale);   
           llListenRemove(numListen);
           numListen = llListen(0, "", "", "" );  
           rentperiod = "";
           rentor = "";
           rentorkey = NULL_KEY;
           rented = FALSE;
           daterented = "";
           rentedweeks = 0;
           timerevent = 0;
           llSetTimerEvent(0);
           llSay(0, objectname + " is vacent");
       }
       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);
       llInstantMessage(llGetOwner(),"Renter name: " + rentor);
       llInstantMessage(llGetOwner(),"Rented Date: " + daterented);
       llInstantMessage(llGetOwner(),"Rented Left: " + (string)weeks2 + " weeks | " + (string)days + " days | " + (string)hours + ":" + (string)mins + ";" +(string)seconds);
       if (rentedweeks >= 2)
       {
       llInstantMessage(llGetOwner(),"Rented amount: " + (string)rentedweeks + " weeks");
       }
       if (rentedweeks == 1)
       {
       llInstantMessage(llGetOwner(),"Rented amount: " + (string)rentedweeks + " week");
       }
       if (rentedweeks <= 0)
       {
       llInstantMessage(llGetOwner(),"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;
        llInstantMessage(llGetOwner(),"Prim's set to " + (string)objects);
        llInstantMessage(llGetOwner(),"Week's set to " + (string)weeks);
        llInstantMessage(llGetOwner(),"Offset set to " + (string)offset);            
        if (mature == 1)
        {
          mit = "Yes";
           }
           else
           {
             mit = "No";   
           }
        llInstantMessage(llGetOwner(),"Regen Mature: " + (string)mit);
       }
       if(m == "Edit Mode" && editmode == 0 && stopper == 0 &&  c == randchannel && id == llGetOwner())
       {
       stopper = 1;
       editmode = 1;
       llInstantMessage(llGetOwner(),"editmode on");
       }
       if(m == "Edit Mode" && editmode == 1 && stopper == 0 && c == randchannel && id == llGetOwner())
       {
       stopper = 1;
       editmode = 0;
       llInstantMessage(llGetOwner(),"editmode off");
       }
       
       if (m == "Help" && c == randchannel && id == llGetOwner())
       {
       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 id = (key)llGetSubString(m,10,llStringLength(m));
       splitwith += id;
       splitname += llKey2Name(id);
       llSay(0,llKey2Name(id) + " 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);
       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("info", ALL_SIDES);
       llSetPos(original_location + offset);
       llSetScale(<0.236,0.236,0.236>);
       timerevent = total;
       llSetTimerEvent(1);
       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 L$" + (string)price);   
       }
       
   }
   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;  
   }
   run_time_permissions(integer type)
   {
       if (type == PERMISSION_DEBIT)
       {
           ownername = llKey2Name(llGetOwner());
           llWhisper(0, "This space is now available for rent.");  
           not_registered = FALSE;
       }
   }
   
   timer() {
       timerevent--;
       if (timerevent != 0)
       {   
       }
       else
       {
       if(rentorkey != NULL_KEY)
       {
       llInstantMessage(rentorkey,"Your rental at " + llGetRegionName() + " has expired");
       }
       llSay(0,"rental expired");
       string objectname;        
       objectname = llGetObjectName();
       llSetTexture("rentit", 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);         
   }

}

   touch_start(integer total_number)
   {
   if(llDetectedKey(0) == llGetOwner())
   
   {
   string edit;
   if (editmode == 0)
   {
    edit = "off"; 
   }
   if (editmode == 1)
   {
    edit = "on";  
   }
   llDialog(llGetOwner(),"vender editor \n editmode is set to: " + edit,["Mature","PG","Vacent","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. Obey prim limits to avoid termination of agreement. Rent is non-refundable.");
       if (mature == 1)
       {
       llWhisper(0, "Usage Restrictions:  This spot is for comercial use.  Keep within prim limits or face termination of lease.");

} else { llWhisper(0, "Usage Restrictions: This spot is for comercial use. Keep within prim limits or face termination of lease. Keep To PG Rules as in PG Sim"); }

       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, please feel free to IM " + ownername + ". For Help please IM " + ownername + ".");
       }
       else 
       {
        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);
       llWhisper(0, "This space is occupied by " + rentor + " for " + (string)weeks2 + " weeks | " + (string)days + " days | " + (string)hours + ":" + (string)mins + ";" +(string)seconds);
       
       llWhisper(0, "Max prims is " + (string)objects + ". For help please IM " + ownername + ".");
       }
   }
   }
   
   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;
           //vector offset = <-2, 0, -1>;
           llWhisper(0, "Correct amount");
           rentor = llKey2Name(giver);
           rented = TRUE;
           rentperiod = (string)weeks;
           llWhisper(0, "Prim limit is "+(string)objects+" prims.");
           llWhisper(0, "Keep prim limits or risk termination of agreement.Rent is non-refundable. IM " + ownername + " with questions.");
           llWhisper(0, "Thank you for renting this space . Thank You For Purchasing "+(string)weeks+" weeks . Feel Free To Put Your stuff in now");
           llSetTexture("info", ALL_SIDES);
           llSetPos(original_location + offset);
           llSetScale(<0.236,0.236,0.236>);
           rentorkey = giver;
           llSetTimerEvent(1);
           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 bee payed L$"+ (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 incresed 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 bee payed L$"+ (string)totatogive +" by " + llGetObjectName());
           no ++; 
           } 
           }
       }
           else
           {
            llGiveMoney(giver, amount);
            llSay(0,"sorry please check rental");
           }
       
       }
       
       else
       {
           llWhisper(0, "Minimum rental period is "+(string)weeks+" weeks, at $" +(string)(price*weeks)+ ". If you have any questions, please feel free to IM" + ownername + ".");
           llWhisper(0, "Giving money back.");
           llGiveMoney(giver, amount);
       }
   }

}