Difference between revisions of "User:Kephra Nurmi/lsDistributor"

From Second Life Wiki
Jump to navigation Jump to search
m
Line 10: Line 10:
The object description must start with L$ to configure the price. Dont forget to mark them as [x] show in search, to include every product in second life search. The system does not support multi prim, multi product vendors. IMHO those are a bad idea, since search allows to search for objects. So the object name and description became one of the most important advertising opportunities you can get for nearly cheap.
The object description must start with L$ to configure the price. Dont forget to mark them as [x] show in search, to include every product in second life search. The system does not support multi prim, multi product vendors. IMHO those are a bad idea, since search allows to search for objects. So the object name and description became one of the most important advertising opportunities you can get for nearly cheap.
   
   
<pre>
<lsl>
// .lsDistributor client (c) 2008-2009 by Kephra Nurmi under Creative Commons Attribution-Share Alike 3.0 License
// .lsDistributor client (c) 2008-2009 by Kephra Nurmi under Creative Commons Attribution-Share Alike 3.0 License


Line 35: Line 35:
     }
     }
}
}
</pre>
</lsl>


== Script: .lsDistributor server ==
== Script: .lsDistributor server ==
Line 41: Line 41:
The server could be used as a plugin for the SLX magic box, so you can sell the same products to SLX and in game from the same server box. The objects in the box, must have the same name as the object names of the vendor clients.
The server could be used as a plugin for the SLX magic box, so you can sell the same products to SLX and in game from the same server box. The objects in the box, must have the same name as the object names of the vendor clients.


<pre>
<lsl>
// .lsDistributor server (c) 2008-2009 by Kephra Nurmi under Creative Commons Attribution-Share Alike 3.0 License
// .lsDistributor server (c) 2008-2009 by Kephra Nurmi under Creative Commons Attribution-Share Alike 3.0 License


Line 71: Line 71:
     }
     }
}
}
</pre>
</lsl>


== Script: .lsDistributor share,10,2682eb10-ee55-46a6-bc49-0f09a39d152b ==
== Script: .lsDistributor share,10,2682eb10-ee55-46a6-bc49-0f09a39d152b ==
Line 77: Line 77:
This script could be used as a plugin for the vendor clients to pay commission. The script is configures by its own name to pay a percentage. It would pay 10% to me, in this example case. So please change the uuid before use.
This script could be used as a plugin for the vendor clients to pay commission. The script is configures by its own name to pay a percentage. It would pay 10% to me, in this example case. So please change the uuid before use.


<pre>
<lsl>
// .lsDistributor share (c) 2008-2009 by Kephra Nurmi under Creative Commons Attribution-Share Alike 3.0 License
// .lsDistributor share (c) 2008-2009 by Kephra Nurmi under Creative Commons Attribution-Share Alike 3.0 License


Line 104: Line 104:
     }
     }
}
}
</pre>
</lsl>


== Script: .lsDistributor lautsprecher ==
== Script: .lsDistributor lautsprecher ==
Line 110: Line 110:
The 'try' part of the vendor really depends on the kind of product you want to sell. It could be a rezzer, a notecard or demo giver, or anything you can imagine. The following example implements a speaker to play sounds.
The 'try' part of the vendor really depends on the kind of product you want to sell. It could be a rezzer, a notecard or demo giver, or anything you can imagine. The following example implements a speaker to play sounds.


<pre>
<lsl>
// .lsDistributor lautsprecher (c) 2008-2009 by Kephra Nurmi under Creative Commons Attribution-Share Alike 3.0 License
// .lsDistributor lautsprecher (c) 2008-2009 by Kephra Nurmi under Creative Commons Attribution-Share Alike 3.0 License


Line 135: Line 135:
     }
     }
}
}
</pre>
</lsl>

Revision as of 18:20, 3 May 2009

lsDistributor

lsDistributor is a simple 'try' and 'buy' vendor system. I once wrote a complex vendor system, a notecard driven feature ridden beast. But then I found a much simpler solution, compatible with SLX magic box and a setup that does not require any notecards!

The idea is a simulator wide client server system using llRegionSay. The server script could be a plugin in the SLX magic box, while the clients are configured by object name and object description.

Script: .lsDistributor client

The client script will sell a product with same name as the object name, for a price named in object description. The object description must start with L$ to configure the price. Dont forget to mark them as [x] show in search, to include every product in second life search. The system does not support multi prim, multi product vendors. IMHO those are a bad idea, since search allows to search for objects. So the object name and description became one of the most important advertising opportunities you can get for nearly cheap.

<lsl> // .lsDistributor client (c) 2008-2009 by Kephra Nurmi under Creative Commons Attribution-Share Alike 3.0 License

integer channel = -19; integer price = 0; string product = "";

default {

   state_entry() {
       string s = llList2String(llCSV2List(llGetObjectDesc()),0);
       if ((llGetSubString(s,0,1) == "L$") || (llGetSubString(s,0,1) == "l$")) {
           product = ","+llGetObjectName();
           price = (integer)llGetSubString(s,2,-1);
           llSetPayPrice(PAY_HIDE, [price, PAY_HIDE, PAY_HIDE, PAY_HIDE]);
       } else
           llSetPayPrice(PAY_HIDE, [PAY_HIDE, PAY_HIDE, PAY_HIDE, PAY_HIDE]);
   }
   touch_start(integer n) {
       key av = llDetectedKey(0);
       llRegionSay(channel,"try,"+(string)av+","+llKey2Name(av)+product);
   }
   money(key id, integer amount) {
       llRegionSay(channel,"buy,"+(string)id+","+llKey2Name(id)+product);
   }

} </lsl>

Script: .lsDistributor server

The server could be used as a plugin for the SLX magic box, so you can sell the same products to SLX and in game from the same server box. The objects in the box, must have the same name as the object names of the vendor clients.

<lsl> // .lsDistributor server (c) 2008-2009 by Kephra Nurmi under Creative Commons Attribution-Share Alike 3.0 License

integer channel = -19;

default {

   state_entry() {
       llListen( channel, "", NULL_KEY, "" );
   }
   listen( integer channel, string name, key id, string msg ) {
       key k = id;
       if (llGetAgentInfo(k)<=0) k = llGetOwnerKey(k);
       if (llGetOwner() != k) return;
       list tmp = llCSV2List(msg);
       string cmd = llList2String(tmp,0);
       if ("buy" == cmd) {
           key av = llList2Key(tmp,1);
           string name = llList2String(tmp,2);
           string item = llList2String(tmp,3);
           if (llGetInventoryType(item) != INVENTORY_NONE) {
               llGiveInventory(av,item);
               llInstantMessage(llGetOwner(),name+" purchased "+item);
               llInstantMessage(av,"Thanks for buying "+item);
           } else {
               llInstantMessage(llGetOwner(),"ERROR: Item sold to "+name+" does not exist: "+item);
               llInstantMessage(av,"ERROR: Item sold to "+name+" does not exist: "+item+"   ... please inform the owner of the vendor.");
           }
       }
   }

} </lsl>

Script: .lsDistributor share,10,2682eb10-ee55-46a6-bc49-0f09a39d152b

This script could be used as a plugin for the vendor clients to pay commission. The script is configures by its own name to pay a percentage. It would pay 10% to me, in this example case. So please change the uuid before use.

<lsl> // .lsDistributor share (c) 2008-2009 by Kephra Nurmi under Creative Commons Attribution-Share Alike 3.0 License

default {

   state_entry() {
       llRequestPermissions( llGetOwner(), PERMISSION_DEBIT );
   }
   run_time_permissions(integer perms) {
       if (perms & PERMISSION_DEBIT) state running;
   }
   changed(integer change) {
       if (change & CHANGED_OWNER) llResetScript();
   }

}

state running {

   money(key id, integer amount) {
       list tmp = llCSV2List(llGetScriptName());
       if (llGetListLength(tmp) != 3) return;
       integer give = amount * llList2Integer(tmp,1) / 100;
       if (0 < give)
           llGiveMoney(llList2Key(tmp,2), give);
   }
   changed(integer change) {
       if (change & CHANGED_OWNER) llResetScript();
   }

} </lsl>

Script: .lsDistributor lautsprecher

The 'try' part of the vendor really depends on the kind of product you want to sell. It could be a rezzer, a notecard or demo giver, or anything you can imagine. The following example implements a speaker to play sounds.

<lsl> // .lsDistributor lautsprecher (c) 2008-2009 by Kephra Nurmi under Creative Commons Attribution-Share Alike 3.0 License

integer channel = -19;

default {

   state_entry() {
       llListen( channel, "", NULL_KEY, "" );
   }
   listen( integer channel, string name, key id, string msg ) {
       key k = id;
       if (llGetAgentInfo(k)<=0) k = llGetOwnerKey(k);
       if (llGetOwner() != k) return;
       list tmp = llCSV2List(msg);
       string cmd = llList2String(tmp,0);
       if ("try" == cmd) {
           key av = llList2Key(tmp,1);
           string name = llList2String(tmp,2);
           string item = llList2String(tmp,3);
           if (llGetInventoryType(item) == INVENTORY_SOUND) {
               llPlaySound(item,1.0);
           }
       }
   }

} </lsl>