Gameplay content

Clubs and circles

Groups of people who meet again and again, led by the player or by someone else, with real membership, meetings in the agenda and honest attendance.

Clubs keeps the groups: who is in them, when they meet, and who actually came.

lualocal M = "ynl_Nightlife"

Clubs:create(M, "quiz_team", { name = "The Thursday quiz team", tags = { "pub" }, fee = 4 })
local why = Clubs:invite(M, "quiz_team", person)   -- nil, or "Noor is at work then."...
if not why then Clubs:respond(M, "quiz_team", person, likesQuizzes(person)) end
Clubs:schedule(M, "quiz_team", nextThursdayAt19)  -- a plan in the player's agenda

-- At the pub, in the meeting's window:
local r = Clubs:meet(M, "quiz_team")
if not r.ok then return r.reason end
for _, id in ipairs(r.came) do People:get(id):record("ynl_quiz_night", People:player()) end
for _, a in ipairs(r.absent) do Game:Narrate(a.reason) end   -- "Ben has other plans then."
  • Any number of clubs per mod, each with a key. The leader is the player by default, or a person (leader = person): a circle the player can be invited into (Clubs:invite(mod, key) without a person invites the player).
  • Invitations consult the person's time. If a meeting is planned, an invitation is refused with the reason when they cannot make it: other plans, at work then (their routine), or no longer a contact. Whether they say yes is your mod's decision, through respond.
  • Meetings are plans. The next meeting is in the player's agenda, with a reminder, and reserves the members who are free then. A member who becomes busy is simply not expected.
  • Attendance is honest. Clubs:meet checks the player is at the meeting place in its window, says who came and who did not and why, takes the fee through the wallet only then, and plans the next meeting. Give rewards and history lines to r.came only.
  • Missed meetings (nobody met in the window) are recorded once each, however many weeks passed, and the next one is planned. Members who are blocked or deleted leave the club.
  • Clubs:skip cancels the next meeting and keeps the slot; Clubs:disband closes the club and frees everyone's plans; its record stays.
Call Does
Clubs:create(mod, key, { name, topic, leader, tags, building, fee, interval, duration }) nil, or why not. interval defaults to a week.
Clubs:get(mod, key), Clubs:list([mod]), Clubs:of([person]) Club tables: members (with attended, missed), invites, next, meetings...
Clubs:invite(mod, key [, person]), Clubs:respond(mod, key, person, accept) nil, or why not.
Clubs:leave(mod, key, person) Removes a member.
Clubs:schedule(mod, key, atHours) nil, or why not (the player's own agenda decides).
Clubs:meet(mod, key) { ok, reason, came, absent = { { id, reason } } }
Clubs:skip(mod, key [, reason]), Clubs:disband(mod, key)
Clubs:available(person, atHours) nil, or why they could not come then.
Clubs:version() The API version, 1.