summaryrefslogtreecommitdiff
path: root/scripts/toy/social.groovy
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/toy/social.groovy')
-rw-r--r--scripts/toy/social.groovy88
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();
+}