Date: 2014/12/11 20:41:52 UTC-08:00
Type: Denizen Script
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
dRegions_Commands_List:
type: task
script: no thanks
list:
# /drg list (page#) -r region -w world -p player
- define args '<c.args.remove[1]>'
# Check the specified player
- if <def[args].find[-p].is[OR_MORE].than[0]||false> {
- if !<player.has_permission[dregions.admin]||true> {
- run s@dRegions_Msg 'def:<&c>You may not list other players regions!'
- queue clear
}
- define player '<def[args].get[<def[args].find[-p].add[1].as_int>].escaped||null>'
- if <util.player_is_valid[<def[player]>].not||true> {
- run s@dRegions_Msg 'def:<&c>Invalid player specfied!'
- queue clear
}
- define filterPlayer ''
- define args '<def[args].remove[<def[args].find[-p].add[1].as_int>].exclude[-p]||li@>'
}
# else define player '<player.name||null>'
else {
- if <context.server.not> define player '<player.name>'
else define player 'null'
}
# Check the specified world
- if <def[args].find[-w].is[OR_MORE].than[0]||false> {
- define world '<def[args].get[<def[args].find[-w].add[1].as_int>].as_world.name.escaped||null>'
- if <def[world].is[==].to[null]||true> {
- run s@dRegions_Msg 'def:<&c>Invalid world specfied!'
- queue clear
}
- define filterWorld ''
- define args '<def[args].remove[<def[args].find[-w].add[1].as_int>].exclude[-w]||li@>'
}
# else define world '<player.world.name||null>'
else {
- if <context.server.not> define world '<player.world.name>'
else define world 'null'
}
# Do we want to show results for ALL worlds?
- if <def[args].find[-a].is[OR_MORE].than[0]||false> {
- define worlds '<server.list_worlds.parse[name]>'
- define getAll ''
- define args '<def[args].remove[<def[args].find[-a]>]||li@>'
}
# Check the specified region name
- if <def[args].find[-r].is[OR_MORE].than[0]||false> {
- define region '<def[args].get[<def[args].find[-r].add[1].as_int>].escaped||null>'
- if <def[region].is[!=].to[null]||true> {
- define exists '<proc[dRegions_RegionExists].context[<def[region]>|<def[world]>]>'
- if <def[exists].is[==].to[orphan]> {
- run s@dRegions_Msg 'def:<&c>There is an orphaned region by this name!'
- run s@dRegions_Msg 'def:<&c>Please notify an admin!'
- queue clear
}
else if <def[exists].not> {
- run s@dRegions_Msg 'def:<&c>There is no region by this name!'
- queue clear
}
- if !<player.has_permission[dregions.admin]||true> {
- if <proc[dRegions_IsOwner].context[<def[region]>|<def[world]>|<player>].not> {
- run s@dRegions_Msg 'def:<&c>You are not an owner of this region!'
- queue clear
}
}
}
else {
- run s@dRegions_Msg 'def:<&c>You must specify a valid region ID when using the -r switch!'
- queue clear
}
- define filterRegion ''
- define args '<def[args].remove[<def[args].find[-r].add[1].as_int>].exclude[-r]||li@>'
}
# OK, we've validated all the user input, let's get the regions and apply filters
- if <def[getAll].exists> {
- define regions li@
- foreach %worlds% {
- define world %value%
- define worldRegions '<yaml[dRegions_%world%_regions].list_keys[regions].exclude[__global__].alphanumeric||li@>'
- if <def[filterRegion].exists||false> {
- foreach %worldRegions% {
- define worldRegion '%value%'
- if <yaml[dRegions_%world%_regions].read[regions.%worldRegion%.parent].is[!=].to[<def[region%]>||false> {
- define worldRegions '<def[worldRegions].remove[%loop_index%]||<def[worldRegions]>>'
}
}
}
- if <def[filterPlayer].exists||false> {
- foreach %worldRegions% {
- define worldRegion '%value%'
- if <proc[dRegions_IsOwner].context[<def[worldRegion]>|<def[world]>|<def[player].as_player>]> {
- define regions '<def[regions].include[<def[world]>/<def[worldRegion]>/owner]||<def[regions]>>'
}
else if <proc[dRegions_IsMember].context[<def[worldRegion]>|<def[world]>|<def[player].as_player>]> {
- define regions '<def[regions].include[<def[world]>/<def[worldRegion]>/member]||<def[regions]>>'
}
}
}
}
}
- define regions <yaml[dRegions_%world%_regions].list_keys[regions].exclude[__global__].alphanumeric||li@>
# Display the list
- define page '<def[args].get[1].replace[-].escaped||1>'
- if <def[page].is[MATCHES].to[number].not> {
- define page '1'
}
- define pages '<def[regions].size.div[14].round_up>'
- if <def[page].is[MORE].than[%pages%]> {
- define page '%pages%'
}
- define highNumber '<def[page].mul[14].as_int>'
- define lowNumber '<def[highNumber].sub[13].as_int>'
- define msgsHeaderTitle '<&e>Region List <el@val[<&7><&o>Page <&f><&o>%page% <&7><&o>of %pages%].pad_left[30]>'
- inject locally msgsHeader instantly
- foreach <def[regions].get[%lowNumber%].to[%highNumber%]||li@> {
- narrate "<&5>|<&sp><&7><el@val[<el@val[<def[lowNumber].add[<def[loop_index].sub[1]>].as_int>.].pad_left[4].with[<&sp>]>].pad_right[5].with[<&sp>]> <&f>%value%"
}
- narrate "<&5>|"
- inject locally msgsFooter instantly