User:Daemonika Nightfire/Scripts/Vendor

From Second Life Wiki
< User:Daemonika Nightfire
Revision as of 13:07, 19 May 2013 by Daemonika Nightfire (talk | contribs) (Created page with "==Default Vendor== blabla <LSL> /* *DS* Vendor by Daemonika Nightfire Bei diesem Vendor Script handelt es sich um die reinen Grundlagen, die in keinem Vendor fehlen…")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Default Vendor

blabla

<LSL> /*

   *DS* Vendor by Daemonika Nightfire
   
   Bei diesem Vendor Script handelt es sich um die reinen Grundlagen, die in keinem Vendor fehlen duerfen.
   
   Warum habe ich mich dazu entschlossen die Produkte mit dem Vendor in einer Box zu verkaufen?
   Das hat folgenden Grund:
   Ein Copybot kann nur das klauen was er sieht. Wenn nun ein Copybot in den Vendor rein sieht, findet er nur eine Box.
   Der inhalt dieser Box ist fuer den Copybot unsichtbar und kann nicht kopiert werden, weil er es nicht sieht.
   Bei normalen Verkaufs-Boxen mit losem Inhalt, besteht die gefahr, das ein Copybot sich alles heraus kopiert.
   
   Zusaetzlich habe ich eine Abfrage eingebaut, die verhindert, das jemand das Zahlfeld mit einem gehackten Viewer ueberlistet.
  • /

integer prize = 10; // hier wird der Preis fuer das Produkt eingegeben. string object;

default {

   state_entry()
   {
       // Solange der Vendor leer ist, sind aus sicherheitsgruenden die Zahlungsmethoden und das Zahlfeld deaktiviert.
       llSetClickAction(CLICK_ACTION_NONE);
       llSetPayPrice(PAY_HIDE, [PAY_HIDE, PAY_HIDE, PAY_HIDE, PAY_HIDE]);
       
       if(llGetInventoryNumber(INVENTORY_OBJECT) > 0)
       {
           object = llGetInventoryName(INVENTORY_OBJECT, 0);
           
           // Erst hier wird die Zahlungsmethode und das Zahlfeld aktiviert.
           llSetClickAction(CLICK_ACTION_PAY);
           // Im Zahlfeld sollte zum einzahlen nur ein einziger Button angezeigt werden.
           llSetPayPrice(PAY_HIDE, [prize, PAY_HIDE, PAY_HIDE, PAY_HIDE]);
           
           llOwnerSay("Ready, the prize of this product is " + (string)prize + "L$.");
       }
   }
   money(key id, integer payment)
   {
       // Absolut wichtig! Nur wenn die Zahlung mit dem Preis ueberein stimmt, sollte das Produkt ausgegeben werden!
       if(payment == prize)
       {
           llGiveInventory(id, object);
       }
       else if(payment != prize) // <--- *** Anti Hacker Option ***
       {
           // Sollte es dennoch jemand mit einem gehackten Viewer schaffen sich das manuelle Zahlfeld anzeigen zu lassen,
           // bedankt sich der Vendor hoeflich fuer die Spende und gibt kein Produkt aus.
           llShout(0,"Thanks for your donation, " + llKey2Name(id) + "!");
       }
   }
   
   changed(integer change)
   {
       if(change & CHANGED_INVENTORY)
       {
           // resettet das Script, sobald sich der Inhalt des Objects aendert.
           llResetScript();
       }
   }
   
   on_rez(integer Dae)
   {
       // resettet das Script, sobald es gerezzt wird.
       llResetScript();
   }

} </LSL>

Split-pay Vendor

blabla

<LSL> /*

   *DS* Vendor by Daemonika Nightfire
   
   Dieser Vendor verfuegt ueber die selben Grundlagen wie die (v1.0.00) Version, jedoch besitz dieses Script einen Partner-Split.
   
   Sobald in diesem Script ein PartnerKey eingetragen wird, fordert das Script die bestaetigung der Permission Debit.
   Das bedeutet, das Script benoetigt die Erlaubnis Geld von deinem Konto ab zu ziehen und an den eingetragenen PartnerKey zu ueberweisen.
   
   Warum habe ich mich dazu entschlossen die Produkte mit dem Vendor in einer Box zu verkaufen?
   Das hat folgenden Grund:
   Ein Copybot kann nur das klauen was er sieht. Wenn nun ein Copybot in den Vendor rein sieht, findet er nur eine Box.
   Der inhalt dieser Box ist fuer den Copybot unsichtbar und kann nicht kopiert werden, weil er es nicht sieht.
   Bei normalen Verkaufs-Boxen mit losem Inhalt, besteht die gefahr, das ein Copybot sich alles heraus kopiert.
   
   Zusaetzlich habe ich eine Abfrage eingebaut, die verhindert, das jemand das Zahlfeld mit einem gehackten Viewer ueberlistet.
  • /

key owner;

integer prize = 10; // hier wird der Preis fuer das Produkt eingegeben.

key partner = ""; // trage hier den AvatarKey (UUID "00000000-0000-0000-0000-000000000000") ein, mit dem du den Umsatz teilen willst. integer percent = 50; // trage hier die Prozente fuer deinen Partner ohne Prozent-Zeichen % ein

string object;

// Diesmal habe ich mich dazu entschlossen, die Zahlungsmethoden als Funktion zu verwenden, weil sie 2x benoetigt wird. Payment_Option() // <--- Funktion {

   // Erst hier wird die Zahlungsmethode und das Zahlfeld aktiviert.
   llSetClickAction(CLICK_ACTION_PAY);
   // Im Zahlfeld sollte zum einzahlen nur ein einziger Button angezeigt werden.
   llSetPayPrice(PAY_HIDE, [prize, PAY_HIDE, PAY_HIDE, PAY_HIDE]);

}

default {

   state_entry()
   {
       // speichert den OwnerKey (UUID)
       owner = llGetOwner();
       
       // Solange der Vendor leer ist, sind aus sicherheitsgruenden die Zahlungsmethoden und das Zahlfeld deaktiviert.
       llSetClickAction(CLICK_ACTION_NONE);
       llSetPayPrice(PAY_HIDE, [PAY_HIDE, PAY_HIDE, PAY_HIDE, PAY_HIDE]);
       
       if(llGetInventoryNumber(INVENTORY_OBJECT) > 0)
       {
           object = llGetInventoryName(INVENTORY_OBJECT, 0);
           
           // wird nur ausgefuehrt, wenn ein PartnerKey angegeben ist.
           if(partner != "")
           {
               // Diese Funktion fordert die Bestaetigung der Permission Debit Abfrage.
               llRequestPermissions(owner,PERMISSION_DEBIT);
               
               // Wichtig!
               // Das Fenster was dabei aufgerufen wird, sollte sorgfaeltig gelesen und nur dann bestaetigt werden,
               // wenn man genau weiss wofuer die Abfrage benoetigt wird.
               // Wenn dich also ein Stuhl, ein Attachment oder was weiss ich nicht danach fragt,
               // solltest du den Ersteller des Objects sofort bei Linden Lab mit einem Abuse Report melden.
           }
           else
           {
               Payment_Option(); // <--- Funktion
               llOwnerSay("Ready, the prize of this product is " + (string)prize + "L$.");
           }
       }
   }
   
   run_time_permissions(integer permissions)
   {
       if(permissions & PERMISSION_DEBIT)
       {
           Payment_Option(); // <--- Funktion
           llOwnerSay("Ready, the prize of this product is " + (string)prize + "L$ your Partner will receive " + (string)percent + "%.");
       }
       else
       {
           llOwnerSay("Permission debit required to share amount!");
           llResetScript();
       }
   }
   money(key id, integer payment)
   {
       // Absolut wichtig! Nur wenn die Zahlung mit dem Preis ueberein stimmt, sollte das Produkt ausgegeben werden!
       if(payment == prize)
       {
           llGiveInventory(id, object);
           
           if(partner != "" & payment != 1 && percent <= 100)
           {
               integer split = llRound(payment * percent / 100);
               if(split <= 1)
               {
                   split = 1;
               }
               llGiveMoney(partner, split);
           }
           if(llGetInventoryNumber(INVENTORY_OBJECT) < 1)
           {
               // Solange der Vendor leer ist, sind aus sicherheitsgruenden die Zahlungsmethoden und das Zahlfeld deaktiviert.
               llSetClickAction(CLICK_ACTION_NONE);
               llSetPayPrice(PAY_HIDE, [PAY_HIDE, PAY_HIDE, PAY_HIDE, PAY_HIDE]);
           }
       }
       else if(payment != prize) // <--- *** Anti Hacker Option ***
       {
           // Sollte es dennoch jemand mit einem gehackten Viewer schaffen sich das manuelle Zahlfeld anzeigen zu lassen,
           // bedankt sich der Vendor hoeflich fuer die Spende und gibt kein Produkt aus.
           llShout(0,"Thanks for your donation, " + llKey2Name(id) + "!");
       }
   }
   
   changed(integer change)
   {
       if(change & CHANGED_INVENTORY)
       {
           // resettet das Script, sobald sich der Inhalt des Objects aendert.
           llResetScript();
       }
   }
   
   on_rez(integer Dae)
   {
       // resettet das Script, sobald es gerezzt wird.
       llResetScript();
   }

} </LSL>