Date: 2025/08/18 17:29:09 UTC-07: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
assignplayerchunklogin:
type: world
debug: true
events:
on player login:
- wait 2s
#Find player's current chunk coordinates. Save them to a player flag.
- flag player playerchunkstrx:<player.location.x.div[16].round_down>
- flag player playerchunkstrz:<player.location.z.div[16].round_down>
- define current_player_chunk_def_str "<player.flag[playerchunkstrx]>, <player.flag[playerchunkstrz]>"
- flag player current_player_chunk_str:<[current_player_chunk_def_str]>
#Assign player holding flags if they don't exist
- if !<player.has_flag[player_domainnameflag]>:
- flag player player_domainnameflag:null
- if !<player.has_flag[player_baronynameflag]>:
- flag player player_domainnameflag:null
- if !<player.has_flag[player_countynameflag]>:
- flag player player_countynameflag:null
- if !<player.has_flag[player_duchynameflag]>:
- flag player player_duchynameflag:null
- flag player chunktrackercooldown
chunktracker:
type: world
events:
after player walks flagged:chunktrackercooldown:
- foreach <server.online_players> as:player:
- flag player chunktrackercooldown:!
# Find player location, translate to chunk coords by dividing by 16
- flag player playerchunkstrx:<player.location.x.div[16].round_down>
- flag player playerchunkstrz:<player.location.z.div[16].round_down>
# Temporarily store calculated player chunk location
- define new_player_chunk_temp_str "<player.flag[playerchunkstrx]>,<player.flag[playerchunkstrz]>"
#Compare new chunk coords with stored chunk coords
- if <[new_player_chunk_temp_str]> != <player.flag[current_player_chunk_str]>:
#If the new chunk is different from the old chunk, check if
#the player has moved into a new holding. Save the new chunk
#coords for next comparison.
- flag player current_player_chunk_str:<[new_player_chunk_temp_str]>
- narrate "New Chunk! <player.flag[current_player_chunk_str]>"
# WILDERNESS AND TITLE LOGIC
- define currchunk <chunk[<[new_player_chunk_temp_str]>,world4]>
- if <[currchunk].flag[chunk_domainnameflag]> != <player.flag[player_domainnameflag]>:
- flag player player_domainnameflag:<[currchunk]>.flag[chunk_domainnameflag]>
- title title:<gold><player.flag[player_domainnameflag]> subtitle:<&7>The<&sp><&2>Domain stay:2s targets:<[player]>
- if <[currchunk]>.flag[chunk_baronynameflag]> != <player.flag[player_baronynameflag]>:
- flag player player_baronynameflag:<[currchunk]>.flag[chunk_baronynameflag]>
- if <[currchunk]>.flag[chunk_countynameflag]> != <player.flag[player_countynameflag]>:
# - flag player player_countynameflag:<[currchunk]>.flag[chunk_countynameflag]>
#- if <[currchunk]>.flag[chunk_duchynameflag]> != <player.flag[player_duchynameflag]>:
# - flag player player_duchynameflag:<[currchunk]>.flag[chunk_duchynameflag]>
- wait 56t
- flag player chunktrackercooldown
build_chunk_map_command:
type: command
name: buildchunkmap
description: Reads fealty_data.yml and builds the chunk lookup map.
usage: /buildchunkmap
permission: denizen.buildchunkmap
script:
- narrate "<green>Starting chunk map build from fealty_data.yml..."
- narrate "<yellow>This is a one-time process and may take a moment. The server will freeze during the initial load."
- fileread path:data/regionstest.yml save:raw_file_content
- define decoded_content <entry[raw_file_content].data.utf8_decode>
- define parsed_yaml <[decoded_content].parse_yaml>
- define fealty_data <[parsed_yaml].get[fealty_data]>
- flag server fealty_data:<[fealty_data]>
- narrate "<aqua>YAML loaded successfully. Found <[fealty_data].size> territory entries."
read_fealty_data:
type: command
name: readfealtydata
description: Reads fealty_data.yml and reads from it.
usage: /readfealtydata
permission: denizen.readfealty
script:
- define worldname world4
- foreach <server.flag[fealty_data]> as:holdinginfo key:holdingid:
- define holdingname <[holdinginfo].get[name]>
- narrate "The name of territory ID <gold><[holdingid]> <white>is <aqua><[holdingname]>."
- define holdinglevel <[holdinginfo].get[level]>
- if <[holdinglevel]> == domain:
- define chunk_set <[holdinginfo].get[chunk_set]>
- narrate "Getting Chunk Set:"
- else:
- define chunk_set <[holdinginfo].get[demesne_set]>
- narrate "Getting Demesne Set:"
- narrate "This territory contains <yellow><[chunk_set].size> <white>chunks."
- define chunkcounter 1
- foreach <[chunk_set]> as:chunk_coord:
- if <[chunkcounter]> > 5:
- foreach stop
- define current_chunk_x <[chunk_coord].get[1]>
- define current_chunk_z <[chunk_coord].get[2]>
- define chunk_str "<[current_chunk_x]>,<[current_chunk_z]>"
- narrate "Chunk <green><[chunkcounter]>: <red><[chunk_str]>"
- define currchunk <chunk[<[chunk_str]>,world4]>
- flag <[currchunk]> fealtyflag
- choose <[holdinglevel]>:
- case domain:
- flag <[currchunk]> chunk_domainnameflag:<[holdingname]>
- case barony:
- flag <[currchunk]> chunk_baronynameflag:<[holdingname]>
- case county:
- flag <[currchunk]> chunk_countynameflag:<[holdingname]>
- case duchy:
- flag <[currchunk]> chunk_duchynameflag:<[holdingname]>
- define chunkcounter:++
- wait 5t