party.sk

Created by Unknown

Just so you know, we don't know the file format for every file. If it's just a bunch of random characters, it's probably a .zip or .jar.

options:
	prefix: &3Party &8ยป &7

	notInAParty: You are not in a party
	notPartyLeader: You are not the party leader
	arg2NotSet: Arg-2 is not set
	cantInviteYourself: You cannot invite yourself
	arg2IsNotOnline: %arg-2% is not online
	arg2AlreadyInvited: %arg-2% has already been invited
	arg2AlreadyInParty: %arg-2% is already in a party
	alreadyInParty: You are already in a party
	noInvite: You have not received an invite
	joinedArg2Party:You have joined %arg-2%'s party
	playerJoinedParty: %player% has joined your party
	arg2InvitedToParty: Invited %arg-2% to party
	invitedToParty: You have been invited to <cmd:/party join %player%>&n%player%'s party (CLICK)
	notInvited: You have not been invited to that party
	arg2NotInYourParty: %arg-2% is not in your party
	arg2NotInParty: %arg-2% is not in a party
	availableCommands: Available Commands >
	nextPage: Next page
	cmdHelpInvite: invite a player to your party
	cmdHelpJoin: join a party you were invited to
	cmdHelpLeave: leave the party you're in
	cmdHelpDisband: disband your party
	cmdHelpInfo: show info about you or specific player
	CmdHelp: show commands and description
	infoLeader: Leader >
	infoMembers: Members >
	partyDisbanded: The party was disbanded
	leaveParty: You left the party
	leftParty: %{_p}% left the party

#
# * Checks if offlineplayer is in a party
# * Returns a boolean:
# *  - true <if offlineplayer is in a party>
# *  - false <if offlineplayer is not in a party>
#
function isInParty(p: offlineplayer) :: boolean:
	set {_uuid} to uuid of {_p}
	return true if {party::inparty::%{_uuid}%} is set else false

#
# * Checks if uuid of a player is in a party
# * Returns a boolean:
# *  - true <if uuid of a player is in a party>
# *  - false <if uuid of a player is not in a party>
#
function isInPartyUUID(uuid: text) :: boolean:
	return true if {party::inparty::%{_uuid}%} is set else false

#
# * Checks if offlineplayer is a party leader
# * Returns a boolean:
# *  - true <if offlineplayer is a party leader>
# *  - false <if offlineplayer is not a party leader>
#
function isPartyLeader(p: offlineplayer) :: boolean:
	set {_uuid} to uuid of {_p}
	return true if {party::parties::%{_uuid}%::leader} = {_uuid} else false

#
# * Checks if uuid of player is a party leader
# * Returns a boolean:
# *  - true <if uuid of player is a party leader>
# *  - false <if uuid of player is not a party leader>
#
function isPartyLeaderUUID(uuid: text) :: boolean:
	return true if {party::parties::%{_uuid}%::leader} = {_uuid} else false

#
# * Gets party from a player
# * Returns a text:
# *  - text <if party exists>
# *  - null <if party doesn't exist>
#
function getPartyOfPlayer(p: offlineplayer) :: text:
	set {_uuid} to uuid of {_p}
	return {party::inparty::%{_uuid}%}

#
# * Gets party from a uuid of player
# * Returns a text:
# *  - text <if party exists>
# *  - null <if party doesn't exist>
#
function getPartyOfUUID(uuid: text) :: text:
	return {party::inparty::%{_uuid}%}

#
# * Gets party leader from a party
# * Returns an offlineplayer:
# *  - offlineplayer <if party exists>
# *  - null <if party doesn't exist>
#
function getPartyLeader(party: text) :: offlineplayer:
	return {party::parties::%{_party}%::leader} parsed as offlineplayer

#
# * Gets party members from a party
# * Returns a list of offlineplayer objects:
# *  - offlineplayers <if party exists>
# *  - null <if party doesn't exist>
#
function getPartyMembers(party: text) :: offlineplayers:
	loop {party::parties::%{_party}%::members::*}:
		set {_members::%loop-index%} to loop-value parsed as offlineplayer
	return {_members::*}

#
# * Disbands inputted party and sends
# * messages to leader and members
# * Returns a boolean:
# * - true <if party existed>
# * - false <if party didn't exist>
#
function partyDisband(party: text) :: boolean:
	{party::parties::%{_party}%::leader} is set:
		loop {party::parties::%{_party}%::members::*}:
			clear {party::inparty::%loop-value%}
			send "{@prefix}{@partyDisbanded}" to loop-value parsed as player
		set {_partyLeader} to {_party} parsed as player
		send "{@prefix}{@partyDisbanded}" to {_partyLeader}
		clear {party::parties::%{_party}%::*}
		clear {party::inparty::%{_party}%}
		loop all indexes of {party::invites::*}:
			clear {party::invites::%loop-value%::%{_partyLeader}%}
		return true
	return false

#
# * Removes offlineplayer from their party
# * Returns a boolean:
# * - true <if offlineplayer was in a party>
# * - false <if offlineplayer wasn't in a party>
#
function removePlayerFromParty(p: offlineplayer) :: boolean:
	isInParty({_p}) = true:
		set {_uuid} to uuid of {_p}
		set {_party} to getPartyOfPlayer({_p})
		send "{@prefix}{@leaveParty}" to {_p}
		set {_partyLeader} to {_party} parsed as player
		send "{@prefix}{@leftParty}" to {_partyLeader} and {party::parties::%{_party}%::members::*} where [input != {_uuid}]
		size of {party::parties::%{_party}%::members::*} - 1 = 0:
			partyDisband({_party})
		else:
			remove {_uuid} from {party::parties::%{_party}%::members::*}
			clear {party::inparty::%{_uuid}%}
		return true
	return false


command party [<text>] [<text>]:
	trigger:
		arg-1 = "invite":
			arg-2 is set:
				arg-2 != "%player%":
					isInParty(player) = true:
						isPartyLeader(player) = false:
							send "{@prefix}{@notPartyLeader}"
							stop
					set {_invitedPlayer} to arg-2 parsed as offlineplayer
					{_invitedPlayer} is online:
						set {_uuid} to uuid of {_invitedPlayer}
						isInPartyUUID({_uuid}) = false:
							{party::invites::%arg-2%::%player%} is not set:
								set {party::invites::%arg-2%::%player%} to true
								send "{@prefix}{@invitedToParty}" to {_invitedPlayer}
								send "{@prefix}{@arg2InvitedToParty}"
								wait 60 seconds
								clear {party::invites::%arg-2%::%player%}
							else:
								send "{@prefix}{@arg2AlreadyInvited}"
						else:
							send "{@prefix}{@arg2AlreadyInParty}"
					else:
						send "{@prefix}{@arg2IsNotOnline}"
				else:
					send "{@prefix}{@cantInviteYourself}"
			else:
				send "{@prefix}{@arg2NotSet}"
		arg-1 = "accept" or "join":
			isInParty(player):
				send "{@prefix}{@alreadyInParty}"
			else if size of {party::invites::%player%::*} = 0:
				send "{@prefix}{@noInvite}"
			else if arg-2 is set:
				{party::invites::%player%::%arg-2%} is set:
					clear {party::invites::%player%::*}
					clear {party::invites::%arg-2%::*}
					send "{@prefix}{@joinedArg2Party}"
					set {_PartyLeader} to arg-2 parsed as offlineplayer
					send "{@prefix}{@playerJoinedParty}" to {_PartyLeader} and {party::parties::%{_uuid}%::members::*}
					set {_uuid} to uuid of {_PartyLeader}
					size of {party::parties::%{_uuid}%::members::*} = 0:
						set {party::parties::%{_uuid}%::leader} to {_uuid}
						set {party::inparty::%{_uuid}%} to {_uuid}
					add uuid of player to {party::parties::%{_uuid}%::members::*}
					set {party::inparty::%uuid of player%} to {_uuid}
				else:
					send "{@prefix}{@notInvited}"
			else:
				send "{@prefix}{@arg2NotSet}"
		arg-1 = "leave":
			isPartyLeader(player) = true:
				player command "party disband"
			else if isInParty(player) = true:
				removePlayerFromParty(player)
			else:
				send "{@prefix}{@notInAParty}"
		arg-1 = "disband":
			isInParty(player) = true:
				isPartyLeader(player) = true:
					partyDisband(getPartyOfPlayer(player))
				else:
					send "{@prefix}{@notPartyLeader}"
			else:
				send "{@prefix}{@notInAParty}"
		arg-1 = "kick":
			isInParty(player) = true:
				arg-2 is set:
					isPartyLeader(player) = true:
						set {_playerToKick} to arg-2 parsed as offlineplayer
						getPartyOfPlayer(player) = getPartyOfPlayer({_playerToKick}):
							removePlayerFromParty({_playerToKick})
						else:
							send "{@prefix}{@arg2NotInYourParty}"
					else:
						send "{@prefix}{@notPartyLeader}"
				else:
					send "{@prefix}{@arg2NotSet}"
			else:
				send "{@prefix}{@notInAParty}"
		arg-1 = "show" or "info":
			arg-2 is not set:
				isInParty(player) = true:
					set {_party} to getPartyOfPlayer(player)
					send "{@prefix}{@infoLeader} %getPartyLeader({_party})%"
					send "{@prefix}{@infoMembers} %getPartyMembers({_party})%"
				else:
					send "{@prefix}{@notInAParty}"
			else:
				set {_playerToCheck} to arg-2 parsed as offlineplayer
				isInParty({_playerToCheck}) = true:
					set {_party} to getPartyOfPlayer({_playerToCheck})
					send "{@prefix}{@infoLeader} %getPartyLeader({_party})%"
					send "{@prefix}{@infoMembers} %getPartyMembers({_party})%"
				else:
					send "{@prefix}{@arg2NotInParty}"
		arg-1 is not set:
			isInParty(player) = true:
				player command "party show"
			else:
				player command "party help 1"
		arg-1 = "help":
			arg-2 is not set:
				player command "party help 1"
			else:
				set {_max} to (arg-2 parsed as integer) * 9
				set {_min} to {_max} - 8
				set {_commands::names::*} to "invite", "accept/join", "leave", "disband", "show/info" and "help"
				set {_commands::desc::*} to "{@cmdHelpInvite}", "{@cmdHelpJoin}", "{@cmdHelpLeave}", "{@cmdHelpDisband}", "{@cmdHelpInfo}" and "{@CmdHelp}"
				{_commands::names::%{_min}%} is set
				send "{@prefix}{@availableCommands}"
				loop numbers from {_min} to {_max}:
					{_commands::names::%loop-value-1%} is not set:
						stop loop
					send "{@prefix}%{_commands::names::%loop-value-1%}% &7&l- &r%{_commands::desc::%loop-value-1%}%"
					mod((loop-value-1),9) = 0:
						{_commands::names::%(loop-value-1) + 1%} is set
						send "{@prefix}{@nextPage} /party help %((loop-value-1) / 9) + 1%"
						stop loop

on load:
	clear {party::invites::*}