Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

Discussion: Rent-All rental cube script

Rizado DaSilva
Merchant
Join date: 12 May 2005
Posts: 30
02-13-2006 11:29
Found a small piece of code for a rental box and modified it to do what I needed it to do (more like a Rent-O-Matic but not, cause the Rent-O-Matic doesn't do what I wanted either). There was no header in the code so, I pass along my changes. If it can be done better, please send the modified code so I can learn, thanks.

A complete 100% FREE version of this with all norecards and textures is available in my store in Wingo (64,73) - right click it and take a copy.

Anyways, this is configurable from a notecard;
CODE
# Edit the configuation items below. Some are optional, some are not.
# Once done, save the config file and then left click the Rent-All!
# From the menu, chose "Re-Config" which will re-read the configuration
# file and set the values. You can re-configure your Rent-All! at any
# time, even when rented. The new settings will take effect immediately.

# (OPTIONAL) Owner Email (If you want emails instead of IM notifications of rentals due)
owner_email=myname@mydoman.com

# (OPTIONAL) Mall Manager (This name is the person to contact with questions about the Mall and/or Rules.)
# If you don't have a Mall manager, put the Owner's name here.
mall_manager=Joe Dodger

# (OPTIONAL) Mall Manager's Key (This is so that the Mall Manager is IM'd with notices as well as the Rent-All! owner.)
# If you don't have a Mall manager, you can leave this blank or commented out.
manager_key=999a9aa9-a999-999a-99a9-a9999a9999aa

# (OPTIONAL) Mall Manager's Cut (This is the percent of the rent that will be taken off the top and paid
# to the Mall Manager for Managing your Mall. It is taken BEFORE any splits between other owners.)
# IMPORTANT: This must be entered as a percent by using a "." (0.######) where ###### may
# be up to 6 digits. Entering a .5 equals 50% while entering a .05 equals 5 percent, etc.
manager_cut=.10

# (REQUIRED) Rules notecard name (This is the name of the notecard given to people when they
# touch the Rent-All! and request the rules.)
rules_card=Rental Stall Rules

# (REQUIRED) Rent Help (This is the name of the notecard given to people when they request
# help about how to rent the space.)
rent_help=How to Rent this Stall

# (REQUIRED) Rent Sign (This is the name of the texture being used for the UN-RENTED Rent-All!)
# Note that you can have one for "Reserved Space" and one for regular "Rent me now!".
# rent_texture=Reserved
rent_texture=ForRent

# (REQUIRED) Info Sign (This is the texture for the RENTED Rent-All! - Typically an "i" sign.)
info_texture=Info

# (REQUIRED) Mall Name (This is the name of your Mall.)
mall_name=My SL Mall!

# (REQUIRED) Max Prims (The maximum number of prims allowed for the space you are renting.)
prims=10

# (REQUIRED) Weekly Rental Price (The weekly price you are charging for this space.)
rent_price=75

# (REQUIRED) Minimum weeks the Rent-All! space can be rented for.
min_weeks=2

# (REQUIRED) Maximum weeks the Rent-All! space can be rented for.
max_weeks=13

# (REQUIRED) Offset of info box (after rented) (Must be in vector format -> <1.25,0,2.25> )
offset=<0,0,.5>


and the code;
CODE
// Rent-All!
//
// This code was based on a piece of code found (I think by Phoenix Behemoth) and modified heavily by Rizado DaSilva.
//
// Rent-All comes with ABSOLUTELY NO WARRANTY or SUPPORT OF ANY KIND. This is free software, and you are welcome
// to use the code, change the code and redistribute it under certain conditions;
//
// 1: You may NEVER SELL this code, in part or whole, or any parts (textures, notecards, etc.) distributed in the object.
// (You may charge a 1L distrubution fee for a freebie item.)
//
// 2: If you make changes to this code, you MUST send a copy of the new code to Rizado DaSilva.
//
// 3: You MUST leave both Phoenix Behemoth and Rizado DaSilva's names in the CODE header as contributing authors as well as
// the GNU GENERAL PUBLIC LICENSE identifier.
//
// 4: You MUST leave the code properties MODIFY/COPY/TRANSFER.
//
// Rent-All! - Rental Cube for renting vender spaces in malls, stores or renting land.
//
// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
//
// A copy of the GNU General Public License is NOT included with this program, HOWEVER, it is available at;
// http://www.gnu.org/copyleft/gpl.html
// OR
// Write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor
// Boston, MA 02110-1301, USA.

string owner_email = "";
string mall_mgr = "";
key mall_mgr_key = NULL_KEY;
float mall_mgr_cut = 0;
string rulecard = "";
string renthelp = "";
string r_sign = "ForRent";
string i_sign = "Info";
string mall_name = "My Mall";
integer maxPrims = 20;
integer price = 100;
integer minWeeks = 2;
integer maxWeeks = 13;
vector offset = <0, 0, 3>;
list split_with;
list split_name;
string owner_name;
integer no_reg = TRUE;
vector orig_loc;
vector orig_scale;
integer weeks;
string renter;
string renter_key;
integer rented = FALSE;
string rent_period;
integer num_Listen;
integer rand_chan;
integer edit_mode = 0;
string rent_date;
integer rent_weeks = 0;
integer timerevent;
integer sev_day = FALSE;
integer thr_day = FALSE;
integer one_day = FALSE;
integer one_hour = FALSE;
integer done = FALSE;
integer line;
string notecard = "_config_";

get_perms() {
llOwnerSay("Asking for permission to handle your money. " +
"This allows the script to collect money for you and refund incorrect amounts.");
llRequestPermissions(llGetOwner(), PERMISSION_DEBIT);
}

read_config() {
llOwnerSay("Reading configuration...");
done = FALSE;
line = 0;
llGetNotecardLine(notecard, line);
}

default {

state_entry() {
edit_mode = 0;
rented = FALSE;
rand_chan = (integer)llFrand(10000000);
llOwnerSay("Activating...");
orig_loc = llGetPos();
orig_scale = llGetScale();
owner_name = llKey2Name(llGetOwner());
llListenRemove(num_Listen);
num_Listen = llListen(9,"","","");
llListen(rand_chan,"","","");
timerevent = 0;
read_config();
}

on_rez(integer change) {
llOwnerSay("For help, left click the Rent-All! then select help from menu.");
llSetTexture(r_sign, ALL_SIDES);
llListen(9,"","","");
rand_chan = (integer)llFrand(10000000);
llListen(rand_chan,"","","");
timerevent = 0;
read_config();
}

run_time_permissions(integer type) {
if (type == PERMISSION_DEBIT) {
owner_name = llKey2Name(llGetOwner());
llOwnerSay("This space is now available for rent.");
no_reg = FALSE;
}
}

touch_start(integer total_number) {
if (llDetectedKey(0) == llGetOwner()) {
string edit;
if (edit_mode == 0) {
edit = "off";
}
if (edit_mode == 1) {
edit = "on";
}
llDialog(llGetOwner(),mall_name + "\n" +
"Edit mode is set to: " + edit,
["Rules","Memory","Vacate","Edit Mode","Rent Info",
"Owner Help","Re-Config","Manager"],rand_chan);
} else if ((rented == TRUE) && (llDetectedKey(0) == renter_key)) {
llDialog(llDetectedKey(0),mall_name + "\n" +
"Price for this space is L$" + (string)price + " per week.\n" +
"Max Prims is: " + (string)maxPrims + "\n" +
"Please choose from the following menu:",
["Rules","Rent Help","Vacate","Rent Info","Manager"],rand_chan);
} else if ((rented == TRUE) && (llDetectedKey(0) == mall_mgr_key)) {
llDialog(llDetectedKey(0),mall_name + "\n" +
"Max Prims is: " + (string)maxPrims + "\n" +
"Please choose from the following menu:",
["Rules","Rent Help","Vacate","Rent Info"],rand_chan);
} else if (rented == FALSE) {
integer temp = price * minWeeks;
llDialog(llDetectedKey(0),mall_name + "\n" +
"Price for this space is L$" + (string)price + " per week.\n" +
"Minimum rental period is " +
(string)minWeeks + "weeks " + "(L$" + (string)temp + ").\n" +
"Max Prims is: " + (string)maxPrims + "\n" +
"Please choose from the following menu:",
["Rules","Rent Help","Manager"], rand_chan);
}
}

listen(integer channel, string name, key id, string message) {
integer halt = 0;
if (id == llGetOwner() && edit_mode == 1) {
if (llGetSubString(llToLower(message),0,10) == "set renter ") {
if (timerevent == 0) {
return;
} else {
renter = llGetSubString(message,48,llStringLength(message));
renter_key = (key)llGetSubString(message,11,46);
llOwnerSay("renter set to " + renter);
}
} else if (llGetSubString(llToLower(message),0,9) == "addsplit ") {
split_name += llGetSubString(message,48,llStringLength(message));
split_with += (key)llGetSubString(message,11,46);
llOwnerSay(llKey2Name(llGetSubString(message,48,llStringLength(message))) + " added to split with list");
} else if (llGetSubString(llToLower(message),0,12) == "split remove ") {
name = llGetSubString(message,13,llStringLength(message));
integer finddata = llListFindList(split_name,(list)name);
if(finddata == -1) {
llOwnerSay("sorry " + name + " not found");
} else {
llDeleteSubList(split_with,finddata,finddata);
llDeleteSubList(split_name,finddata,finddata);
llOwnerSay(name +" removed from shared list");
}
} else if (llGetSubString(llToLower(message),0,7) == "addtime " && rented == TRUE) {
integer days = (integer)llGetSubString(message,8,llStringLength(message));
integer total = (days * 24 * 60 * 60);
timerevent = timerevent + total;
llWhisper(0,"Added " + (string)days + " days.");
} else if (llGetSubString(llToLower(message),0,3) == "done") {
halt = 0;
edit_mode = 0;
llOwnerSay("Edit Mode Off");
}
} else if (id == llGetOwner()) {
if (message == "Re-Config") {
read_config();
} else if (message == "Owner Help") {
llGiveInventory(id,"Vendor Help");
} else if (message == "Memory") {
llOwnerSay("Free memory: " + (string)llGetFreeMemory());
} else if (message == "Edit Mode" && edit_mode == 0 && halt == 0) {
if (!halt) {
halt = 1;
edit_mode = 1;
llOwnerSay("Edit Mode: On");
}
}
}
if (message == "Rent Help") {
llGiveInventory(id,renthelp);
} else if (message == "Manager") {
llWhisper(0,"The current Manager of " + mall_name + " is " + mall_mgr + ".");
} else if (message == "Rules") {
llGiveInventory(id,rulecard);
} else if (message == "Rent Info" && rented == TRUE) {
if (id == llGetOwner() || id == renter_key || id == mall_mgr_key) {
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,"Renter name: " + renter);
llWhisper(0,"Rented Date: " + rent_date);
llWhisper(0,"Rent time left: " +
(string)weeks2 + " weeks, " +
(string)days + " days, " +
(string)hours + " hours, " +
(string)mins + " minutes, " +
(string)seconds + " seconds.");
} else {
llWhisper(0,"Sorry, you don't rent here.");
}
} else if (message == "Vacate" && rented == TRUE) {
if (id == renter_key || id == llGetOwner() || id == mall_mgr_key) {
llSetTexture(r_sign, ALL_SIDES);
llSetPos(orig_loc);
llSetScale(orig_scale);
llListenRemove(num_Listen);
num_Listen = llListen(9, "", "", "" );
rent_period = "";
renter = "";
renter_key = NULL_KEY;
rented = FALSE;
rent_date = "";
rent_weeks = 0;
timerevent = 0;
llSetTimerEvent(0);
llWhisper(0,"This unit is now vacant.");
}else {
llWhisper(0,"Sorry, you don't rent here.");
}
}
}

timer() {
timerevent--;
if(renter_key != NULL_KEY) {
if ((timerevent <= 604800) && (timerevent >= 259201) && (sev_day == FALSE)) {
sev_day = TRUE;
llInstantMessage(renter_key,"Your rental booth at " + mall_name + " (" +
llGetRegionName() + ") has less than 7 days left before it expires.");
if (owner_email) {
llEmail(owner_email,"Rental Due for " + renter,
"Less than 7 days left for " + renter +
"'s area at " + mall_name + " (" + llGetRegionName() + ").");
} else {
llInstantMessage(llDetectedOwner(0),"Less than 7 days left for " + renter +
"'s area at " + mall_name + " (" + llGetRegionName() + ").");
}
if(mall_mgr_key != NULL_KEY) {
llInstantMessage(mall_mgr_key,"Less than 7 days left for " + renter +
"'s area at " + mall_name + " (" + llGetRegionName() + ").");
}
} else if ((timerevent <= 259200) && (timerevent >= 86401) && (thr_day == FALSE)) {
thr_day = TRUE;
llInstantMessage(renter_key,"Your rental at " + mall_name + " (" + llGetRegionName() +
") has less than 3 days left before it expires.");
if (owner_email) {
llEmail(owner_email,"Rental Due for " + renter,
"Less than 3 days left for " + renter +
"'s area at " + mall_name + " (" + llGetRegionName() + ").");
} else {
llInstantMessage(llDetectedOwner(0),"Less than 3 days left for " + renter +
"'s area at " + mall_name + " (" + llGetRegionName() + ").");
}
if(mall_mgr_key != NULL_KEY) {
llInstantMessage(mall_mgr_key,"Less than 3 days left for " + renter +
"'s area at " + mall_name + " (" + llGetRegionName() + ").");
}
} else if ((timerevent <= 86400) && (timerevent >= 3601) && (one_day == FALSE)) {
one_day = TRUE;
llInstantMessage(renter_key,"Your rental at " + mall_name + " (" + llGetRegionName() +
") has less than 1 day left before it expires.");
if (owner_email) {
llEmail(owner_email,"Rental Due for " + renter,
"Less than 1 day left for " + renter +
"'s area at " + mall_name + " (" + llGetRegionName() + ").");
} else {
llInstantMessage(llDetectedOwner(0),"Less than 1 day left for " + renter +
"'s area at " + mall_name + " (" + llGetRegionName() + ").");
}
if(mall_mgr_key != NULL_KEY) {
llInstantMessage(mall_mgr_key,"Less than 1 day left for " + renter +
"'s area at " + mall_name + " (" + llGetRegionName() + ").");
}
} else if ((timerevent <= 3600) && (timerevent >= 1) && (one_hour == FALSE)) {
one_hour = TRUE;
llInstantMessage(renter_key,"Your rental at " + mall_name + " (" + llGetRegionName() +
") has less than 1 hour left before it expires.");
if (owner_email) {
llEmail(owner_email,"Rental Due for " + renter,
"Less than 1 hour left for " + renter +
"'s area at " + mall_name + " (" + llGetRegionName() + ").");
} else {
llInstantMessage(llDetectedOwner(0),"Less than 1 hour left for " + renter +
"'s area at " + mall_name + " (" + llGetRegionName() + ").");
}
if(mall_mgr_key != NULL_KEY) {
llInstantMessage(mall_mgr_key,"Less than 1 hour left for " + renter +
"'s area at " + mall_name + " (" + llGetRegionName() + ").");
}
} else if (timerevent <= 0) {
llInstantMessage(renter_key,"Your rental at " + mall_name + " (" + llGetRegionName() +
") has now expired, all items will be returned to you shortly.");
if (owner_email) {
llEmail(owner_email,"Rental Expired for " + renter,
"Rental has expired for " + renter +
"'s area at " + mall_name + " (" + llGetRegionName() + ")." +
"Renter has neen notified. Clean-up may be required.");
} else {
llInstantMessage(llDetectedOwner(0),"Rental Expired for " + renter +
"'s area at " + mall_name + " (" + llGetRegionName() + ")." +
"Renter has neen notified. Clean-up may be required.");
}
if(mall_mgr_key != NULL_KEY) {
llInstantMessage(mall_mgr_key,"Rental Expired for " + renter +
"'s area at " + mall_name + " (" + llGetRegionName() + ")." +
"Renter has neen notified. Clean-up may be required.");
}
string objectname;
objectname = llGetObjectName();
llSetTexture(r_sign, ALL_SIDES);
llSetPos(orig_loc);
llSetScale(orig_scale);
num_Listen = llListen(0, "", "", "" );
rent_period = "";
renter = "";
renter_key = NULL_KEY;
rent_date = "";
rent_weeks = 0;
rented = FALSE;
timerevent = 0;
llSetTimerEvent(0);
}
}
}

money(key giver, integer amount) {
integer amount2 = amount % price;
if ((rented == FALSE) && (amount < price * minWeeks)) {
llWhisper(0,"Minimum rental period is " + (string)minWeeks + " weeks, for $" + (string)(price * minWeeks) +
". If you have any questions, please feel free to IM " + mall_mgr + ".");
llWhisper(0,"Giving back L$" + (string)amount + ".");
llGiveMoney(giver, amount);
} else if ((rented == FALSE) && (amount >= price * minWeeks)) {
amount = amount - amount2;
weeks = amount / price;
integer maxTempB = maxWeeks * 604800;
integer maxTempR = weeks * 604800;
if (maxTempR > maxTempB) {
llWhisper(0,"Sorry, that exceeds the maximum rental period (" + (string)maxWeeks +
" weeks) set by the owner of this Rent-All! Returning money.");
llGiveMoney(giver, amount);
} else if (amount2 > 0) {
llWhisper(0,"Too much money, giving back " + (string)amount2 + ".");
llGiveMoney(giver, amount2);
amount2 = 0;
}
timerevent = 604800 * weeks;
rent_weeks = amount / price;
string date = llGetTimestamp();
rent_date = llGetSubString(date,8,9) +
"/" + llGetSubString(date,5,6) +
"/" + llGetSubString(date,0,3) +
" / Time " + llGetSubString(date,11,15);
orig_scale = llGetScale();
orig_loc = llGetPos();
llWhisper(0, "Correct amount");
renter = llKey2Name(giver);
rented = TRUE;
rent_period = (string)weeks;
llWhisper(0, "Prim limit is " + (string)maxPrims + " prims.");
llWhisper(0, "Keep prim limits or risk termination of agreement.");
llWhisper(0,"Rent may be non-refundable. IM " + mall_mgr + " with questions.");
llWhisper(0, "Thank you for renting from " + mall_name + ". Please contact " + mall_mgr + " with any questions.");
llGiveInventory(llDetectedKey(0),rulecard);
llSetTexture("Info", ALL_SIDES);
llSetPos(orig_loc + offset);
llSetScale(<0.230,0.230,0.230>);
renter_key = giver;
llSetTimerEvent(1);
if (mall_mgr_key != NULL_KEY) {
float manage_cut = (integer)amount * (float)mall_mgr_cut;
amount = amount - llCeil(manage_cut);
llGiveMoney(mall_mgr_key,llCeil(manage_cut));
llInstantMessage(mall_mgr_key,renter + " just rented " + llGetObjectName() + " at " + mall_name + ".");
llInstantMessage(mall_mgr_key,"L$" + (string)llCeil(manage_cut) + " bonus paid to you.");
}
if(split_with != []) {
integer divide = llGetListLength(split_with) + 1;
integer total_to_give = amount/divide;
integer no;
while(no < llGetListLength(split_with)) {
key dest = llList2Key(split_with,no);
llGiveMoney(dest,total_to_give);
llInstantMessage(dest,"you have been payed L$"+ (string)total_to_give +" by " + llGetObjectName());
no ++;
}
}
if (owner_email) {
llEmail(owner_email,"New Rental - " + renter + " - " + mall_name,renter + " just rented " + llGetObjectName() + " at " + mall_name + ".\n" +
"Renter Key: " + renter_key + "\nAmount Paid: " + (string)amount);
} else {
llInstantMessage(llDetectedOwner(0),renter + " just rented " + llGetObjectName() + " at " + mall_name + ".\n" +
"Renter Key: " + renter_key + "\nAmount Paid: " + (string)amount);
}
} else if (rented == TRUE) {
if (llKey2Name(giver) == renter && amount >= price) {
amount = amount - amount2;
weeks = amount / price;
integer maxTempB = maxWeeks * 604800;
integer maxTempR = weeks * 604800;
integer timerevent2 = timerevent + maxTempR;
if (timerevent2 > maxTempB) {
llWhisper(0,"Sorry, that exceeds the maximum rental period (" + (string)maxWeeks +
" weeks) set by the owner of this Rent-All! Returning money.");
llGiveMoney(giver, amount);
} else if (amount2 > 0) {
amount = amount - amount2;
llWhisper(0,"Too much money, giving back " + (string)amount2 + ".");
llGiveMoney(giver, amount2);
amount2 = 0;
}
timerevent += (604800*weeks);
sev_day = FALSE;
thr_day = FALSE;
one_day = FALSE;
one_hour = FALSE;
llWhisper(0, "you have incresed your rental by " + (string)weeks + " weeks");
rent_weeks += weeks;
if (mall_mgr_key != NULL_KEY) {
float manage_cut = (integer)amount * (float)mall_mgr_cut;
amount = amount - llCeil(manage_cut);
llGiveMoney(mall_mgr_key,llCeil(manage_cut));
llInstantMessage(mall_mgr_key,renter + " just rented " + llGetObjectName() + " at " + mall_name + ".");
llInstantMessage(mall_mgr_key,"L$" + (string)llCeil(manage_cut) + " bonus paid to you.");
}
if(split_with != []) {
integer divide = llGetListLength(split_with) + 1;
integer total_to_give = amount/divide;
integer no;
while(no < llGetListLength(split_with)) {
key dest = llList2Key(split_with,no);
llGiveMoney(dest,total_to_give);
llInstantMessage(dest,"you have been payed L$"+ (string)total_to_give +" by " + llGetObjectName());
no ++;
}
}
if (owner_email) {
llEmail(owner_email,"New Rental - " + renter + " - " + mall_name,renter +
" just renewed " + llGetObjectName() + " at " + mall_name + ".\n" +
"Amount Paid: " + (string)amount);
} else {
llInstantMessage(llDetectedOwner(0),renter + " just renewed " + llGetObjectName() + " at " + mall_name + ".\n" +
"Amount Paid: " + (string)amount);
}
} else {
if (llKey2Name(giver) != renter) {
llWhisper(0,"Sorry, you aren't the renter of this stall.");
llGiveMoney(giver, amount);
} else if (amount < price) {
llWhisper(0,"Wrong amount of money, please make sure it is equal to or more than " +
(string)price + " multiplied by the number of weeks you wish to add to your rent.");
llGiveMoney(giver, amount);
}
}
}
}
dataserver(key query, string data) {
string config_item;
string config_data;
if (data == EOF) {
if (done == FALSE) {
llOwnerSay("Finished reading notecard.");
done = TRUE;
config_item = "";
config_data = "";
data = "";
if (no_reg == TRUE) {
get_perms();
}
if ((mall_mgr == "") && (mall_mgr_key == NULL_KEY)) {
mall_mgr = owner_name;
} else if ((mall_mgr == "") && (mall_mgr_key != NULL_KEY)) {
mall_mgr = llKey2Name(mall_mgr_key);
}
return;
}
} else {
integer i = llSubStringIndex(data, "=");
config_item = llGetSubString(data, 0, i - 1);
config_data = llGetSubString(data, i + 1, llStringLength(data) - 1);
if (config_item == "owner_email") {
owner_email = config_data;
} else if (config_item == "mall_manager") {
mall_mgr = config_data;
} else if (config_item == "manager_key") {
mall_mgr_key = (key)config_data;
} else if (config_item == "manager_cut") {
mall_mgr_cut = (float)config_data;
} else if (config_item == "rules_card") {
rulecard = config_data;
} else if (config_item == "rent_help") {
renthelp = config_data;
} else if (config_item == "rent_texture") {
r_sign = config_data;
if (renter == "") {
llSetTexture(r_sign,ALL_SIDES);
}
} else if (config_item == "info_texture") {
i_sign = config_data;
if (renter != "") {
llSetTexture(i_sign,ALL_SIDES);
}
} else if (config_item == "mall_name") {
mall_name = config_data;
} else if (config_item == "prims") {
maxPrims = (integer)config_data;
} else if (config_item == "rent_price") {
price = (integer)config_data;
} else if (config_item == "min_weeks") {
minWeeks = (integer)config_data;
} else if (config_item == "max_weeks") {
maxWeeks = (integer)config_data;
} else if (config_item == "offset") {
offset = (vector)config_data;
}
line = line + 1;
llGetNotecardLine("_config_", line);
}
}
}


Hope it's useful to someone.

=Riz
Nada Epoch
The Librarian
Join date: 4 Nov 2002
Posts: 1,423
original thread
02-13-2006 15:24
/15/ca/88078/1.html
_____________________
i've got nothing. ;)
Rizado DaSilva
Merchant
Join date: 12 May 2005
Posts: 30
02-15-2006 13:29
Forgot to add the split_with code in the money() routine. Added in above, here is the missing section;
CODE
if(split_with != []) {
integer divide = llGetListLength(split_with) + 1;
integer total_to_give = amount/divide;
integer no;
while(no < llGetListLength(split_with)) {
key dest = llList2Key(split_with,no);
llGiveMoney(dest,total_to_give);
llInstantMessage(dest,"you have been payed L$"+ (string)total_to_give +" by " + llGetObjectName());
no ++;
}
}


=Riz
Pratyeka Muromachi
Meditating Avatar
Join date: 14 Apr 2005
Posts: 642
02-19-2006 08:51
integer maxPrims = 20;
integer price = 100;
integer minWeeks = 2;
integer maxWeeks = 13;

Changing any of these in the notecard has no effect. Have to change the values in the script itself.
_____________________
gone to Openlife Grid and OpenSim standalone, your very own sim on your PC, 45,000 prims, huge prims at will up to 100m, yes, run your own grid on your PC, FOR FREE!
The Spork
Nobody
Join date: 8 Feb 2006
Posts: 100
04-23-2006 13:20
Two errors in the code.

At Line 169, Column 68:
"ll StringLength" should be "llStringLength"
And Line 181, Column 83:
"m essage" should be "message"

After that you get:

Object: Activating...
Object: Reading configuration...
Object: Script run-time error
Object: Stack-Heap Collision

I'm guessing it's a 1.9.0 thing or another error that the editor doesn't catch.
_____________________
Thank You For Playing!
The Spork
Eloise Pasteur
Curious Individual
Join date: 14 Jul 2004
Posts: 1,952
04-23-2006 18:06
It's more likely autospacing. I can't remember where (every 64 characters I think) the vBulletin software will insert a space if there's not been one. It messes up most scripts...
Dragon Keen
Registered User
Join date: 24 Apr 2006
Posts: 245
06-01-2006 14:55
anyone manage to fix the stack-heap collision error, if so how?
SkullZ Barragar
Registered User
Join date: 29 Jun 2006
Posts: 1
07-25-2006 09:07
From: Dragon Keen
anyone manage to fix the stack-heap collision error, if so how?


If you edit the script and press the reset button, it should work. Did for me after making a few slight mods to the text outputs.
Dzonatas Sol
Visual Learner
Join date: 16 Oct 2006
Posts: 507
12-13-2006 21:04
From: Dragon Keen
anyone manage to fix the stack-heap collision error, if so how?


near line 512 modify it to look like this:

CODE
		} else {
integer i = llSubStringIndex(data, "=");
if( i == -1 )
{
line = line + 1;
llGetNotecardLine("_config_", line);
return ;
}
config_item = llGetSubString(data, 0, i - 1);
config_data = llGetSubString(data, i + 1, llStringLength(data) - 1);
_____________________
L$1 Rental Special - Every Week - Limit one per resident
http://slurl.com/secondlife/Haenim/30/30/705
Prat Delcon
Registered User
Join date: 14 Dec 2006
Posts: 2
Enforcing Prim Limit and dealing with Auto Return
01-02-2007 07:37
The script does'nt seem to be enforcing the Prim limit on vendors. The Limit is just displayed to the renter. Owner will have to enforce Prim Limits manually?

What happens if there is an auto return policy on the land. The script does'nt deal with it, so it will return the objects placed by the renters on their rented land.
Sterling Whitcroft
Registered User
Join date: 2 Jul 2006
Posts: 678
01-02-2007 15:17
Prat,
I've not seen a good scripted solution to enforcing prim limits where multiple tenants share a property (like in a mall).

As for AutoReturn, the usual solution is to establish a new group, "XYZ Mall", with an owner of the group and 'tenants'. Tenants are added to the group by invite only. The land is deeded to the group. (only the owner can SELL, but 'tenants' can build). Tenants wear their group name tags when placing their vendors in their stalls--effectively making the vendo machine owned by that tenant and the group.

Adding Tenants to the group is done manually by the owner.

Search the forums for a more detailed answer.
Salindria Thunders
Registered User
Join date: 11 Jun 2006
Posts: 29
03-25-2007 15:42
This is actually being sold on SL Exchange, thanks for the scripts now I might be able to help get improvents on somethings too.