Other available versions. Ordered by newest to oldest versions:
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.
# █▄▄ █▀▀ ▀█▀ ▀█▀ █▀▀ █▀█ █▀█ █▀▀ █▀█ █▀█ █▀█ ▀█▀ █▀
# █▄█ ██▄ █ █ ██▄ █▀▄ █▀▄ ██▄ █▀▀ █▄█ █▀▄ █ ▄█ beta 0.4
# by PandaDevs
# Fancy text generator: http://fsymbols.com/generators/tarty/
# Changelog
# v0.4
# add /deletereport
# add /vr <id> optimisations
#
# TODO:
# add more customizations
# get report by name
# requires dependecies!
# skript-yaml and skript-mirror, for now.
# note to server administrator:
# v0.4 beta is intended for servers running 1.9+ using Skript 2.4.1+. (download will be betterreports.sk)
# v0.4.1 beta is intended for servers running 1.8+ using Skript 2.2dev26. (download will be betterreports-legacy.sk) (found only on github release page)
on script load:
send "&f█▄▄ █▀▀ ▀█▀ ▀█▀ █▀▀ █▀█ █▀█ █▀▀ █▀█ █▀█ █▀█ ▀█▀ █▀" to console
send "&f█▄█ ██▄ █ █ ██▄ █▀▄ █▀▄ ██▄ █▀▀ █▄█ █▀▄ █ ▄█ beta 0.4 (designed for 1.9+)" to console
send "" to console
send "&bCreated by PandaDevs (rentedpanda)" to console
send "" to console
load yaml "plugins/betterreports/config.yml" as "plugins/betterreports/config.yml"
load yaml "plugins/betterreports/reports.yml" as "plugins/betterreports/reports.yml"
skript-yaml "plugins/betterreports/config.yml" is empty:
send "&bBetter Reports» &cconfig.yml does not exist or is outdated, creating one now..." to console
set skript-yaml value "cver" from "plugins/betterreports/config.yml" to 2
set skript-yaml value "Logs.Chat" from "plugins/betterreports/config.yml" to true
set skript-yaml value "Logs.Commands" from "plugins/betterreports/config.yml" to true
set skript-yaml value "Permission.sendReport" from "plugins/betterreports/config.yml" to "br.send"
set skript-yaml value "Permission.viewReport" from "plugins/betterreports/config.yml" to "br.view"
set skript-yaml value "Permission.actReport" from "plugins/betterreports/config.yml" to "br.act"
set skript-yaml value "Permissions.delReport" from "plugins/betterreports/config.yml" to "br.delete"
set skript-yaml value "Permission.notifyReport" from "plugins/betterreports/config.yml" to "br.notify"
set skript-yaml value "Messages.Prefix" from "plugins/betterreports/config.yml" to "&cReports»"
set skript-yaml value "Messages.reportReceived" from "plugins/betterreports/config.yml" to "&aThank you for your report. Your report was saved. Please save the Report ID for your reference."
set skript-yaml value "Messages.reportViewer" from "plugins/betterreports/config.yml" to "&fHere are the details of the report."
set skript-yaml value "Messages.reportDeleted" from "plugins/betterreports/config.yml" to "&aThe report was successfully deleted."
set skript-yaml value "Messages.errorType.invalidArg" from "plugins/betterreports/config.yml" to "&fThere was an error processing your request. Please try again. &4(error) &7invalid_arg"
set skript-yaml value "Messages.errorType.invalidID" from "plugins/betterreports/config.yml" to "&fThere was an error processing your request. Please try again. &4(error) &7invalid_id"
set skript-yaml value "Messages.errorType.noPerms" from "plugins/betterreports/config.yml" to "&cI'm sorry, but you do not have permission to perform this command. Please contact the server administrators if you believe that this is in error."
save yaml "plugins/betterreports/config.yml"
send "&bBetter Reports» &aconfig.yml was successfully created!" to console
if yaml value "cver" from "plugins/betterreports/config.yml" is not 2:
send "&bBetter Reports» &cconfig.yml is outdated, updating now..." to console
set skript-yaml value "cver" from "plugins/betterreports/config.yml" to 2
set skript-yaml value "Permissions.delReport" from "plugins/betterreports/config.yml" to "br.delete"
set skript-yaml value "Messages.reportDeleted" from "plugins/betterreports/config.yml" to "&aThe report was successfully deleted."
save yaml "plugins/betterreports/config.yml"
send "&bBetter Reports» &aconfig.yml was successfully updated!" to console
skript-yaml "plugins/betterreports/reports.yml" is empty:
send "&bBetter Reports» &creports.yml does not exist or is outdated, creating one now..." to console
set skript-yaml value "rver" from "plugins/betterreports/reports.yml" to 1
set skript-yaml value "Reports" from "plugins/betterreports/reports.yml" to ""
save yaml "plugins/betterreports/reports.yml"
send "&bBetter Reports» &areports.yml was successfully created!" to console
send "&bBetter Reports» &aconfig.yml was successfully loaded!" to console
send "&bBetter Reports» &areports.yml was successfully loaded!" to console
function getConfig(m: string) :: string:
return yaml value "%{_m}%" from "plugins/betterreports/config.yml"
on chat:
if yaml value "Logs.Chat" from "plugins/betterreports/config.yml" is true:
log "[%now formatted human-readable%] %player%: %message%" to "betterreports/globalchat.log"
on command:
if yaml value "Logs.Commands" from "plugins/betterreports/config.yml" is true:
log "[%now formatted human-readable%] %player% executed command %command%" to "betterreports/globalcommands.log"
command /sendreport [<offline player>] [<text>]:
aliases: /report, /sr, /createreport, /cr
description: Report a player for any reason.
trigger:
set {_sendperm} to getConfig("Permission.sendReport")
if player has permission "%{_sendperm}%":
set {_prefix} to getConfig("Messages.Prefix")
if arg 1 or arg 2 is not set:
send "%{_prefix}% &bCorrect Usage: &e/report <player> <reason>"
send "%{_prefix}% &eReport a player for any reason."
else:
set {_id} to random integer between 100000000 and 999999999
set skript-yaml value "Reports.R-%{_id}%.Status" from "plugins/betterreports/reports.yml" to "active"
set skript-yaml value "Reports.R-%{_id}%.Timestamp" from "plugins/betterreports/reports.yml" to now formatted human-readable
set skript-yaml value "Reports.R-%{_id}%.Player" from "plugins/betterreports/reports.yml" to "%arg 1%"
set skript-yaml value "Reports.R-%{_id}%.UUID" from "plugins/betterreports/reports.yml" to "%uuid of arg 1%"
set skript-yaml value "Reports.R-%{_id}%.reportedBy" from "plugins/betterreports/reports.yml" to "%player%"
set skript-yaml value "Reports.R-%{_id}%.Reason" from "plugins/betterreports/reports.yml" to arg 2
save yaml "plugins/betterreports/reports.yml"
set {_reprec} to getConfig("Messages.reportReceived")
send "%{_prefix}% %{_reprec}%"
send "&c=================================================="
send "&7Report ID: &fR-%{_id}% &7Status: &factive"
send " "
send "&7Timestamp: &f%now formatted human-readable%"
send "&7Player: &f%arg 1%"
send "&7UUID: &f%uuid of arg 1%"
send "&7Reported by: &f%player%"
send "&7Reason: &f%arg 2%"
send "&c=================================================="
loop all players:
set {_notifyperm} to getConfig("Permission.notifyReport")
if loop-player has permission "%{_notifyperm}%":
send formatted "%{_prefix}% &fA report has been submitted. <tooltip:View R-%{_id}%><run command:/viewreport R-%{_id}%>&bClick here<reset> &fto view the details." to loop-player
else:
set {_msg} to getConfig("Messages.errorType.noPerms")
send "%{_msg}%" to player
#thank you AsuDev for this snippet here!
function checkForSpecifiedPage(slot: number, guiSize: number, list: objects) :: boolean:
set {_counter} and {_format} to 0
loop {_list::*}:
if {_counter}+1 is between {_slot} and {_slot}+({_guiSize}-1):
add 1 to {_format}
add 1 to {_counter}
if {_format} is 0:
return false
else:
return true
command /viewreport [<string>] [<integer>]:
aliases: /vr
description: View player reports by ID.
trigger:
set {_viewperm} to getConfig("Permission.sendReport")
if player has permission "%{_viewperm}%":
set {_prefix} to getConfig("Messages.Prefix")
if arg 1 is not set:
send "%{_prefix}% &bCorrect Usage: &e/viewreport <id>"
send "%{_prefix}% &eView player reports by ID."
else:
if arg 1 is "global":
if sender is console:
send "&cThis feature is intended for in-game usage only. Please access the local file instead."
else:
if arg 2 is not set:
make player execute command "/vr global 1"
stop
else:
loop node keys "Reports" from "plugins/betterreports/reports.yml":
add loop-value to {_global::*}
#thank you AsuDev for this snippet here! (paginated GUIs)
set {_msg2} to getConfig("Messages.errorType.invalidArg")
if arg 2 is less than or equal to 0:
send "%{_msg2}%"
send "&7acceptable parameters: positive nonzero integer"
stop
set {_guiSize} to 36
set {_slot} to ((arg 2 * {_guiSize}) + 1) - {_guiSize}
if checkForSpecifiedPage({_slot}, {_guiSize}, {_global::*}) is false:
close player's inventory
set {_availablePages} to ceil(size of {_global::*}/{_guiSize})
send "%{_msg2}%"
send "&7available pages: &b%{_availablePages}%"
stop
set {_rows} to ({_guiSize}/9)+2
# open chest inventory with {_rows} rows named "&4Global Reports - Page %arg 2%" to player - legacy
set metadata tag "globalReports" of player to chest inventory with {_rows} rows named "&4Global Reports - Page %arg 2%"
loop numbers from 36 to 44:
set slot loop-number of metadata tag "globalReports" of player to black stained glass pane named "&f "
set slot {_guiSize}+12 of metadata tag "globalReports" of player to ("MHF_ArrowLeft" parsed as offline player)'s skull named "&c&l<- PREVIOUS PAGE&r"
set slot {_guiSize}+13 of metadata tag "globalReports" of player to red stained clay named "&7Cancel"
set slot {_guiSize}+14 of metadata tag "globalReports" of player to ("MHF_ArrowRight" parsed as offline player)'s skull named "&a&lNEXT PAGE ->&r"
set {_counter} and {_format} to 0
loop {_global::*}:
if {_counter}+1 is between {_slot} and {_slot}+({_guiSize}-1):
set {_status} to yaml value "Reports.%loop-value%.Status" from "plugins/betterreports/reports.yml"
set {_timestamp} to yaml value "Reports.%loop-value%.Timestamp" from "plugins/betterreports/reports.yml"
set {_player} to yaml value "Reports.%loop-value%.Player" from "plugins/betterreports/reports.yml"
set {_reportedby} to yaml value "Reports.%loop-value%.reportedBy" from "plugins/betterreports/reports.yml"
set {_reason} to yaml value "Reports.%loop-value%.Reason" from "plugins/betterreports/reports.yml"
if {_status} is "active":
set {_status} to "&aactive"
else if {_status} is "flagged":
set {_status} to "&cflagged"
else:
set {_status} to "&f%{_status}%"
set {_lore::*} to "&7Status: %{_status}%" and "&7 " and "&7Timestamp: &f%{_timestamp}%" and "&7Player: &f%{_player}%" and "&7Reported by: &f%{_reportedBy}%" and "&7Reason: &f%{_reason}%" and "&7 " and "&bLeft-click to view report." and "&eRight-click to act on report."
set slot {_format} of metadata tag "globalReports" of player to paper named "%loop-value%" with lore {_lore::*}
add 1 to {_format}
add 1 to {_counter}
open (metadata tag "globalReports" of player) to player
else:
if yaml path "Reports.%arg 1%" from "plugins/betterreports/reports.yml" exists:
set {_status} to yaml value "Reports.%arg 1%.Status" from "plugins/betterreports/reports.yml"
set {_timestamp} to yaml value "Reports.%arg 1%.Timestamp" from "plugins/betterreports/reports.yml"
set {_player} to yaml value "Reports.%arg 1%.Player" from "plugins/betterreports/reports.yml"
set {_uuid} to yaml value "Reports.%arg 1%.UUID" from "plugins/betterreports/reports.yml"
set {_reportedby} to yaml value "Reports.%arg 1%.reportedBy" from "plugins/betterreports/reports.yml"
set {_reason} to yaml value "Reports.%arg 1%.Reason" from "plugins/betterreports/reports.yml"
set {_actionby} to yaml value "Reports.%arg 1%.actionTakenBy" from "plugins/betterreports/reports.yml"
set {_action} to yaml value "Reports.%arg 1%.Action" from "plugins/betterreports/reports.yml"
set {_lastaction} to yaml value "Reports.%arg 1%.lastActionDate" from "plugins/betterreports/reports.yml"
send "%{_prefix}% &fViewing report:"
send "&c=================================================="
send "&7Report ID: &f%arg 1% &7Status: &f%{_status}%"
send " "
send "&7Timestamp: &f%{_timestamp}%"
send "&7Player: &f%{_player}%"
send "&7UUID: &f%{_uuid}%"
send "&7Reported by: &f%{_reportedby}%"
send "&7Reason: &f%{_reason}%"
send " "
send "&7Action taken by: &f%{_actionby}%"
send "&7Action: &f%{_action}%"
send "&7Last action timestamp: &f%{_lastaction}%"
send "&c=================================================="
set {_actperm} to getConfig("Permission.actReport")
if player has permission "%{_actperm}%":
send " "
send formatted "%{_prefix}% <run command:/ar %arg 1%>&bClick here<reset> &fto act on the report."
else:
set {_msg2} to getConfig("Messages.errorType.invalidArg")
send "%{_msg2}%" to player
else:
set {_msg} to getConfig("Messages.errorType.noPerms")
send "%{_msg}%" to player
on inventory click:
event-inventory = (metadata tag "globalReports" of player)
cancel event
if name of clicked item is "&a&lNEXT PAGE ->&r" or "&c&l<- PREVIOUS PAGE&r":
cancel event
set {_getCurrentPage} to event.getView().getTitle()
replace all "&4Global Reports - Page " with "" in {_getCurrentPage}
set {_getCurrentPage} to {_getCurrentPage} parsed as integer
if name of clicked item is "&a&lNEXT PAGE ->&r":
add 1 to {_getCurrentPage}
else:
remove 1 from {_getCurrentPage}
if {_getCurrentPage} is 0:
close player's inventory
send "&cNo more pages to see!"
stop
make player execute command "/viewreport global %{_getCurrentPage}%"
if clicked slot < 36:
if clicked item is paper:
set {_getid} to name of event-slot
if click type is left mouse button:
execute player command "/viewreport %{_getid}%"
close player's inventory
if click type is right mouse button:
close player's inventory
execute player command "/actreport %{_getid}%"
if event-slot is black stained glass pane:
cancel event
if event-slot is red stained clay:
cancel event
close player's inventory
command /actreport [<string>] [<text>]:
aliases: /ar
description: Act on a player report. (staff)
trigger:
set {_actperm} to getConfig("Permission.actReport")
if player has permission "%{_actperm}%":
set {_prefix} to getConfig("Messages.Prefix")
if arg 1 is not set:
send "%{_prefix}% &bCorrect Usage: &e/viewreport <id> [<action>]"
send "%{_prefix}% &eAct on a player report. (staff)"
send " "
send "%{_prefix}% &bList of actions"
send "&factive (!ac), pending review (!pr), insufficent evidence (!ie), to punish (!pu), &fflag for inappropriate report (!fl), closed - other reasons (!cl)"
else if arg 2 is not set:
# open chest inventory with 3 rows named "Select an action: %arg 1%" to player - legacy
set metadata tag "actReport" of player to chest inventory with 3 rows named "Select an action: %arg 1%"
set slot 10 of metadata tag "actReport" of player to light green dye named "!ac" with lore "&aActive" and "&7Set the report status to active."
set slot 11 of metadata tag "actReport" of player to light gray dye named "!pr" with lore "&fPending review" and "&7Set the report status to pending review."
set slot 12 of metadata tag "actReport" of player to yellow dye named "!ie" with lore "&fInsufficient evidence" and "&7Close the report due to insufficient evidence."
set slot 13 of metadata tag "actReport" of player to pink dye named "!pu" with lore "&cPunish" and "&7Close the report and prepare to punish player."
set slot 14 of metadata tag "actReport" of player to red dye named "!fl" with lore "&cFlag for inappropriate report" and "&7Flag the report for inappropriate report."
set slot 15 of metadata tag "actReport" of player to orange dye named "!cl" with lore "&fClose - other reasons" and "&7Close the report for other reasons."
set slot 16 of metadata tag "actReport" of player to red stained clay named "&7Cancel"
loop numbers from 0 to 9:
set slot loop-number of metadata tag "actReport" of player to black stained glass pane named "&f "
loop numbers from 17 to 26:
set slot loop-number of metadata tag "actReport" of player to black stained glass pane named "&f "
open (metadata tag "actReport" of player) to player
else:
if yaml path "Reports.%arg 1%" from "plugins/betterreports/reports.yml" exists:
if arg 2 is "!ac" or "!pr" or "!ie" or "!pu" or "!fl" or "!cl":
if arg 2 is "!pr":
set skript-yaml value "Reports.%arg 1%.Status" from "plugins/betterreports/reports.yml" to "pending"
else if arg 2 is "!fl":
set skript-yaml value "Reports.%arg 1%.Status" from "plugins/betterreports/reports.yml" to "flagged"
else if arg 2 is "!ac":
set skript-yaml value "Reports.%arg 1%.Status" from "plugins/betterreports/reports.yml" to "active"
else:
set skript-yaml value "Reports.%arg 1%.Status" from "plugins/betterreports/reports.yml" to "closed"
set skript-yaml value "Reports.%arg 1%.actionTakenBy" from "plugins/betterreports/reports.yml" to player
set skript-yaml value "Reports.%arg 1%.Action" from "plugins/betterreports/reports.yml" to arg 2
set skript-yaml value "Reports.%arg 1%.lastActionDate" from "plugins/betterreports/reports.yml" to now formatted human-readable
save yaml "plugins/betterreports/reports.yml"
set {_status} to yaml value "Reports.%arg 1%.Status" from "plugins/betterreports/reports.yml"
set {_timestamp} to yaml value "Reports.%arg 1%.Timestamp" from "plugins/betterreports/reports.yml"
set {_player} to yaml value "Reports.%arg 1%.Player" from "plugins/betterreports/reports.yml"
set {_uuid} to yaml value "Reports.%arg 1%.UUID" from "plugins/betterreports/reports.yml"
set {_reportedby} to yaml value "Reports.%arg 1%.reportedBy" from "plugins/betterreports/reports.yml"
set {_reason} to yaml value "Reports.%arg 1%.Reason" from "plugins/betterreports/reports.yml"
set {_actionby} to yaml value "Reports.%arg 1%.actionTakenBy" from "plugins/betterreports/reports.yml"
set {_action} to yaml value "Reports.%arg 1%.Action" from "plugins/betterreports/reports.yml"
set {_lastaction} to yaml value "Reports.%arg 1%.lastActionDate" from "plugins/betterreports/reports.yml"
send "%{_prefix}% &fYour action &b%arg 2% &fhas been saved. Here are the details:"
send "&c=================================================="
send "&7Report ID: &f%arg 1% &7Status: &f%{_status}%"
send " "
send "&7Timestamp: &f%{_timestamp}%"
send "&7Player: &f%{_player}%"
send "&7UUID: &f%{_uuid}%"
send "&7Reported by: &f%{_reportedby}%"
send "&7Reason: &f%{_reason}%"
send " "
send "&7Action taken by: &f%{_actionby}%"
send "&7Action: &f%{_action}%"
send "&7Last action timestamp: &f%{_lastaction}%"
send "&c=================================================="
loop all players:
set {_notifyperm} to getConfig("Permission.notifyReport")
if loop-player has permission "%{_notifyperm}%":
send formatted "%{_prefix}% &fReport ID %arg 1% was updated. <run command:/viewreport %arg 1%>&bClick here<reset> &fto view this report." to loop-player
else:
set {_msg2} to getConfig("Messages.errorType.invalidArg")
send "%{_msg2}%" to player
else:
set {_msg3} to getConfig("Messages.errorType.invalidID")
send "%{_msg3}%" to player
else:
set {_msg} to getConfig("Messages.errorType.noPerms")
send "%{_msg}%" to player
on inventory click:
event-inventory = (metadata tag "actReport" of player)
cancel event
if event-slot is black stained glass pane:
cancel event
if event-slot is red stained clay:
cancel event
close player's inventory
if name of clicked item contains "!":
cancel event
set {_id} to event.getView().getTitle()
replace all "Select an action: " with "" in {_id}
set {_action} to name of clicked item
close player's inventory
make player execute command "/ar %{_id}% %{_action}%"
command /deletereport [<string>]:
aliases: /delreport, /dr
description: Delete a player report. (staff)
trigger:
set {_delperm} to getConfig("Permission.delReport")
if player has permission "%{_delperm}%":
set {_prefix} to getConfig("Messages.Prefix")
if arg 1 is not set:
send "%{_prefix}% &bCorrect Usage: &e/deletereport <id>"
send "%{_prefix}% &eDelete a player report. (staff)"
else:
if yaml path "Reports.%arg 1%" from "plugins/betterreports/reports.yml" exists:
delete yaml value "Reports.%arg 1%" from "plugins/betterreports/reports.yml"
save yaml "plugins/betterreports/reports.yml"
set {_repdel} to getConfig("Messages.reportDeleted")
send "%{_prefix}% %{_repdel}%"
else:
set {_msg2} to getConfig("Messages.errorType.invalidID")
send "%{_msg2}%" to player
else:
set {_msg} to getConfig("Messages.errorType.noPerms")
send "%{_msg}%" to player