diff options
Diffstat (limited to 'scripts/toy/social.groovy')
-rw-r--r-- | scripts/toy/social.groovy | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/scripts/toy/social.groovy b/scripts/toy/social.groovy new file mode 100644 index 0000000..9617b65 --- /dev/null +++ b/scripts/toy/social.groovy @@ -0,0 +1,88 @@ +{ toy -> + final LUNCH = "lunch", SHOPPING = "shopping", PARTY = "party"; + final BEGINPLAN = "beginPlan", ENDPLAN = "endPlan"; + final FRIENDS = [ "Tori", "Sophie", "Krystal" ]; + + toy.metaClass.setupPlan { plan, float startmin, float startmax, float endmin, float endmax -> + final timeWindow = { float min, float max -> (int)((min * HOUR) - localTimeOffset() + getRandom((int)((max - min) * HOUR))) }; + final friendName = FRIENDS[getRandom(FRIENDS.size())]; + final day = getDay() + ((getRandom(3) + 1) * DAY); + addEventIfMissing(plan, day + timeWindow(startmin, startmax), BEGINPLAN, + [friendName: friendName, returnTime: day + timeWindow(endmin, endmax)]); + } + + toy.metaClass.setupPlans { + save("toy.plan", null); + setupPlan(LUNCH, 11.5, 12.5, 13.0, 14.0) + setupPlan(SHOPPING, 14.5, 15.5, 16.0, 18.0) + setupPlan(PARTY, 19, 20, 22.0, 25.0) + }; + + toy.metaClass.leaveNote { msg, instr -> + save("toy.note", msg); + save("toy.noteInstr", instr); + }; + + toy.metaClass.readNote { + leaveNote(null, null); + }; + + toy.metaClass.beginPlan { rt, plan, args -> + addEvent(plan, args.returnTime, ENDPLAN, args.friendName); + dress([[DRESSED,nTEASE], [DRESSED,TEASE]]); + if (rt && sessionSummon([DRESSED,nTEASE])) { + present([DRESSED,nTEASE], [ + [ "I'm going out now, toy.", "$plan time!" ], + [ "Will you be good while I'm gone?", "You will behave as I expect?" ]]); + wait(10); + postChastity(); + def toys = TOYTOYS.findAll { t -> stateIs(t) }; + Collections.shuffle(toys); + toys.each { removeToy(it, [DRESSED,nTEASE]) }; + removeEvent(REDRESS); + set(NAKED, false); + present([DRESSED,TEASE], [ + [ "Back later!", "See you soon, toy" ]]); + wait(5); + } + else if (has(CHASTITY) && !stateIs(CHASTE)) { + leaveNote("I want you in chastity until I return!", CHASTE); + } + DOMME = loadDomme(OWNER); + setAway(plan); + removeEvent(PLAY); + showLounge(); + }; + + toy.metaClass.endPlan { rt -> + save("toy.owner.outfitTime", getTime()); + setAway(null); + if (rt && sessionSummon([DRESSED])) { + present([DRESSED], [["Hello, toy!"], ["I'm back home now."]]); + wait(10); + showLounge(); + } + readNote(); + playSchedule(); + setupPlans(); + }; + + toy.metaClass.showCalendar { + final events = loadEvents(); + show( + [LUNCH, SHOPPING, PARTY].collect { + final event = events[it]; + if (!event) return ""; + def s = event.time; + def f = event.arg.friendName; + def timeStr = localTimeOf(s).format(soonFormatter); + return "$it with $f on $timeStr.\n".capitalize(); + }.join()); + showButton("OK"); + }; + + toy.addNamedEvent(BEGINPLAN, { name, arg, schedTime, rt -> toy.beginPlan(rt, name, arg) }); + toy.addNamedEvent(ENDPLAN, { name, arg, schedTime, rt -> toy.endPlan(rt) }); + toy.addRequestable("calendar", "Calendar", { toy.showCalendar() }); + toy.setupPlans(); +} |