summaryrefslogtreecommitdiff
path: root/scripts/toy/social.groovy
blob: 9617b654a71600f3040d9980621719117e7a8678 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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();
}