// Wolf Roleplay example - MARKET STALL. Owned by the game's owner (or a no-modify copy made by // them). Every trade is ONE wolfGameExchange: the goods and the money move together or not at // all, so a player can never pay and not get the seeds, or sell wheat and not get paid. list TRADES = [ // button, take, give "Sell 10 wheat", "wheat|10", "$|25", "Buy 5 seeds", "$|10", "seed|5", "Buy pet food", "$|8", "pet_food|5" ]; integer MENU_CH; integer gMenu; list parse(string s) { list p = llParseString2List(s, ["|"], []); return [llList2String(p, 0), (integer)llList2String(p, 1)]; } default { state_entry() { MENU_CH = -3000000 - (integer)llFrand(1000000); llSetText("Market stall\nTouch to trade", <1, 1, 1>, 1.0); } touch_start(integer n) { key av = llDetectedKey(0); if (!wolfGameIsPlaying(av)) { llRegionSayTo(av, 0, "Join the game first."); return; } list buttons = llList2ListStrided(TRADES, 0, -1, 3); llListenRemove(gMenu); gMenu = llListen(MENU_CH, "", av, ""); // The player's own Wolf viewer shows the dialog; the answer comes back here as chat. if (!wolfGameDialog(av, "Market stall", "You have " + (string)wolfGameItemCount(av, "wheat") + " wheat and " + (string)wolfGameBalance(av) + " coins.", buttons, MENU_CH)) llDialog(av, "Market stall", buttons, MENU_CH); // not a Wolf viewer, or refused } listen(integer ch, string name, key av, string msg) { integer i = llListFindList(TRADES, [msg]); if (i == -1 || i % 3 != 0) return; if (wolfGameExchange(av, parse(llList2String(TRADES, i + 1)), parse(llList2String(TRADES, i + 2)), msg)) wolfGameNotify(av, "Market", msg + " - done.", "success"); else wolfGameNotify(av, "Market", "Not done: " + wolfGetLastError(), "warning"); } }