View difference between Paste ID: 8GpZ4W8P and eGE4JBJJ
SHOW: | | - or go back to the newest paste.
1
# Конец разработки 25.06.19
2
# на
3
# options:
4
  # file: /home/Airdrop/config.yml
5
aliases:
6
  ordinary airdrop = minecraft:white_shulker_box {Damage: 1}
7
  rare airdrop = minecraft:lime_shulker_box {Damage: 1}
8
  very rare airdrop = minecraft:light_blue_shulker_box {Damage: 1}
9
  mythic airdrop = minecraft:magenta_shulker_box {Damage: 1}
10
11
on join:
12
  delete {temp::%player%::deleteAll}
13
14
every 45 minutes:
15
  if size of all players >= 2:
16
    execute console command "/airdrop s"
17
18
command airdrop [<text>] [<number>]:
19
  aliases: a, air
20
  trigger:
21
    if executor is op or console:
22
      # if arg 1 is "d" or "delete":
23
        # if {airdrop::data::blocks::*} is set:
24
          # if {temp::%player%::deleteAll} is set:
25
            # delete {airdrop::data::blocks::*}
26
            # delete {temp::%player%::deleteAll}
27
            # send "&a✔ &fВы успешно удалили все блоки!"
28
            # stop
29
          # else:
30
            # send "&e⚠ &fВы собираетесь удалить все блоки для аирдропа. Напишите эту команду ещё раз, что бы удалить!"
31
            # add 1 to {temp::%player%::deleteAll}
32
            # wait 15 minutes
33
            # delete {temp::%player%::deleteAll}
34
        # else:
35
          # send "&c⚠ &fМассив с блоками для аирдропа не был обнаружен."
36
      if arg 1 is "forcecancel" or "fc":
37
        if {worker::airdrop::*} is not set:
38
          send "&e⚠ &fНи одного работающего Airdrop-Worker не было обнаруженого."
39
          stop
40
        else:
41
          delete {worker::airdrop::*}
42
          send "&a✔ &fВы успешно удалили все аирдропы."
43
          stop
44
      if arg 1 is "c" or "cancel":
45
        if {worker::airdrop::*} is not set:
46
          send "&e⚠ &fНи одного работающего Airdrop-Worker не было обнаруженого."
47
          stop
48
        else:
49
          # loop {worker::airdrop::*}:
50
          loop {worker::airdrop::*}:
51
            set {worker::airdrop::%loop-value%} to "canceled"
52
          # delete {worker::airdrop::*}
53
          # set {worker::airdrop::*} to "canceled"
54
          send "&a✔ &fСигнал об отмене был успешно отправлен всем аирдропам."
55
          stop
56
      if arg 1 is "s" or "start":
57
        set {_location::1} to 1
58
        set {_location::2} to 2
59
60
        if {_location::1} or {_location::2} is not set:
61
          send "&c⚠ &fКакая-то из позиций не была установленна."
62
        else:
63
          replace all " " in {_location::1} and {_location::2} with ""
64
          set {_locations::1::*} to {_location::1} split at ","
65
          set {_locations::2::*} to {_location::2} split at ","
66
67
          # broadcast "&e⚐ &fРассчитываем позицию для аирдропа... Возможны небольшие лаги."
68
          set {_code} to random integer between 0 and 100000
69
70
          # Аирдропы. Типы и бла-бла-бла
71
          # Расчитываем...
72
          #
73
          if arg-2 is set:
74
            set {_number} to "%arg-2%"
75
76
            if {_number} contains "9":
77
              set {_location} to location of player
78
79
              replace all "9" in {_number} with ""
80
              set {_number} to {_number} parsed as number
81
            else:
82
              set {_number} to "%arg-2%" parsed as number
83
84
85
              if {airdrop::data::blocks::*} is not set:
86
                broadcast "&c⚠ &fБлижайший аирдроп был отменён потому, что в системе не был найдён список всех блоков."
87
                delete {worker::airdrop::%{_code}%}
88
                stop
89
              set {_finding} to true
90
              while {_finding} is true:
91
                set {_location} to random element of {airdrop::data::blocks::*}
92
                if {_location} is within border:
93
                  set {_finding} to false
94
                else:
95
                  set {_location} to random element of {airdrop::data::blocks::*}
96
97-
            if {_number} is 1:
97+
		  set {_airdrop::type} to "&7Обычный"
98-
              set {_airdrop::type} to "&7Обычный"
98+
99-
            else if {_number} is 2:
99+
100-
              set {_airdrop::type} to "&aРедкий"
100+
101-
            else if {_number} is 3:
101+
102-
              set {_airdrop::type} to "&bОчень редкий"
102+
103-
            else if {_number} is 4:
103+
104-
              set {_airdrop::type} to "&dМифический"
104+
105
          if {_airdrop::type} is "&bОчень редкий":
106-
              set {_airdrop::type} to "&7Обычный"
106+
107
          if {_airdrop::type} is "&dМифический":
108
            set {_airdrop::type::visualIcon} to "&d⚃"
109
110-
          else:
110+
111-
            chance of 75%:
111+
112-
              set {_airdrop::type} to "&7Обычный"
112+
113-
            chance of 8%:
113+
114-
              if size of all players >= 3:
114+
115-
                set {_airdrop::type} to "&aРедкий"
115+
116-
                chance of 3%:
116+
117-
                  if size of all players >= 6:
117+
118-
                    set {_airdrop::type} to "&bОчень редкий"
118+
119-
            chance of 2%:
119+
120-
              if size of all players >= 12:
120+
121-
                set {_airdrop::type} to "&dМифический"
121+
122
          # add 45 minute to {_airdrop::times::*}
123-
          if {_airdrop::type} is not set:
123+
124-
            stop
124+
125
          set {_airdrop::time} to random element of {_airdrop::times::*}
126
          set {_airdrop::time::visual} to "%{_airdrop::time}%"
127
128
          replace all "and ", "," and "and" in {_airdrop::time::visual}  with ""
129
          replace all "seconds", "second" in {_airdrop::time::visual}  with "с."
130
          replace all "minutes", "minute" in {_airdrop::time::visual}  with "м."
131
          replace all "hours", "hour" in {_airdrop::time::visual}  with "ч."
132
          replace all "days", "day" in {_airdrop::time::visual}  with "д."
133
134
          replace all "s" in {_airdrop::time::visual} with ""
135
          if {_airdrop::time::visual} contains ".":
136
            set {_prep::*} to {_airdrop::time::visual} split at " "
137
            loop {_prep::*}:
138
              set {_tmp::loop-value} to loop-value
139
              if {_tmp::loop-value} contains ".":
140
                if {_tmp::loop-value} contains "д." or "ч." or "м." or "с.":
141
                  add 1 to {_nothing}
142
                else:
143
                  set {_prep2::*} to {_tmp::loop-value} split at "."
144
                  set {_erase} to {_prep2::2}
145
146
                  set {_erase} to ".%{_prep2::2}%"
147
                  replace all "%{_erase}%" in {_airdrop::time::visual} with ""
148
149
150
          # Подготавливаем координатц аирдропа | Визуальный вид
151
          set {_location::visual::x} to x coordinate of {_location}
152
          set {_location::visual::y} to "?"
153
          set {_location::visual::z} to z coordinate of {_location}
154
155
          set {_airdrop::coordinates::visual} to "%{_location::visual::x}%, %{_location::visual::y}%, %{_location::visual::z}%"
156
          set {airdrop::%{_code}%::coordinates::visual} to {_airdrop::coordinates::visual}
157
158
          broadcast "&e⚑ &fАирдроп вида %{_airdrop::type}% &fприземлится на координаты &e%{_airdrop::coordinates::visual}%&f через %{_airdrop::time::visual}%"
159
160
161
          # Расчитываем позицию внизу...
162
          set {_found} to false
163
          while {_found} is false:
164
            if {_location::find} is not set:
165
              set {_location::find} to {_location}
166
            reduce y coordinate of {_location::find} by 1
167
            if block at {_location::find} is not air:
168
              set {_block} to block at {_location::find}
169
              set {_found} to true
170
171
            wait 1 tick
172
173
          loop all blocks in radius 10 around {_location::find}:
174
            set {airdrop::%{_code}%::block::%location of loop-block%::breakable} to false
175
176
          # Airdrop-Worker
177
          set {worker::airdrop::%{_code}%} to "%{_code}%"
178
          while {worker::airdrop::%{_code}%} is set:
179
            if {worker::airdrop::%{_code}%} is "canceled":
180
              # broadcast "&c⚠ &fAirdrop-Worker был выключен. Ближайший аирдроп был отменён."
181
              stopEffect id "airdrop-portal"
182
              stopEffect id "airdrop-shulker"
183
              delete {worker::airdrop::%{_code}%}
184
              delete {airdrop::%{_code}%::*}
185
              stop
186
            # Анимация.
187
188
            if {_airdrop::time} <= 0 seconds:
189
190
              if {_send} is not set:
191
                broadcast "%{_airdrop::type::visualIcon}% %{_airdrop::type}% &fаирдроп уже летит! Берегитесь! &7(Координаты: %{_airdrop::coordinates::visual}%)"
192
                set {_send} to true
193
194
              if {_animated} is not set:
195
                # Анимируем
196
                set {_animating} to true
197
                while {_animating} is true:
198
                  if {_location::animating} is not set:
199
200
                    set {_location::animating} to {_location}
201
                    set {_x} to random integer between -80 and 80
202
                    add {_x} to x coordinate of {_location::animating}
203
204
                    set {_z} to random integer between -80 and 80
205
                    add {_z} to z coordinate of {_location::animating}
206
                    add 150 to y coordinate of {_location::animating}
207
208
                    set {_location::end} to {_location::find}
209
210
                    set {_locations::animation::*} to line({_location::animating}, {_location::end}, 60)
211
212
                  # Сама анимация.
213
214
                    # Подготовка
215
                  set {_s} to size of {_locations::animation::*}
216
                  set {_end} to {_locations::animation::%{_s}%}
217
                  # broadcast "END: %{_end}% || S: %{_s}%"
218
219
                  # delete {worker::airdrop}
220
                  # stop
221
                  loop {_locations::animation::*}:
222
                    drawDot count 1, particle "explosionhuge", center loop-value, visibleRange 2526, keepFor 1 second
223
                    # play sound
224
                    play sound "entity.generic.burn" with volume 1.2 and pitch 2 at loop-value
225
                    play sound "entity.generic.explode" with volume 1.2 and pitch 2 at loop-value
226
227
228
                    # broadcast "Yeah"
229
                    if "%loop-value%" contains "%{_end}%":
230
                      delete {_locations::animation::*}
231
                      set {_animating} to false
232
                      exit 1 loop
233
                    # else:
234
                      # broadcast "LOOP: %loop-value% || %{_end}%"
235
                    wait 1 tick
236
                  # Идём дальше..
237
                  # reduce y coordinate of {_location::animating} by 1
238
239
                set {_animated} to true
240
241
242
              # Ставим шалкер с ресами.
243
              # set {_block} to block at {_location::find}
244
              # if block at {_location::find} is not bedrock:
245
                # set {_block::end} to block at {_location::find}
246
                # set block at {_location::find} to bedrock
247
248
              set {_location::shulker} to {_location::find}
249
              add 1 to y coordinate of {_location::shulker}
250
251
              if {_looted} is true:
252
                set {_block} to block at {_location::shulker}
253
254
                loop all items in {_block}'s inventory:
255
                  add 1 to {_exist}
256
                if {_exist} is not set:
257
                  if {_setted} is not set:
258
                    set {_airdrop::wait::time} to 15 seconds
259
                    set {_setted} to  true
260
                  # set {airdrop::%{_code}%::wait::time} to {_airdrop::wait::time}
261
                delete {_exist}
262
              else:
263
                set {_block::air} to block at {_location::shulker}
264
                if {_airdrop::type} is "&7Обычный":
265
                  set {_block} to ordinary airdrop
266
267
                  # Готовим слоты
268
                  add 0,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 to {_slots::*}
269
270
                  # if block at {_location::shulker} is not {_block}:
271
                  set block at {_location::shulker} to ordinary airdrop
272
273
                  set {_block} to block at {_location::shulker}
274
                  # Подготавливаем ресы для шалкера
275
                  if {_looted} is not set:
276
					chance of 100%:
277
                      set {_rand} to random integer between 1 and 15
278
                      set {_item} to {_rand} of iron ingot
279
280
                      set {_slot} to random element of {_slots::*}
281
                      remove {_slot} from {_slots::*}
282
283
                      # broadcast "&cdebug &fЛут: %{_rand}% железа."
284
                      set slot {_slot} of {_block}'s inventory to {_item}
285
286
              # Мини-анимация
287
              drawComplexSpiral particle "redstone", center {_location::shulker}, id "airdrop-shulker", rainbowMode false, clockwise true, scan true, radius 2, density 50, height 6, effectMod .05, start 0, visibleRange 30
288
              reduce {_airdrop::wait::time} by 1 second
289
290
291
            if {_airdrop::wait::time} <= 0 seconds:
292
              delete block at {_location::shulker}
293
              set block at {_location::find} to {_block::end}
294
              set {worker::airdrop::%{_code}%} to "canceled"
295
296
            if {_airdrop::wait::time} is not set:
297
              set {_airdrop::wait::time} to 30 minutes
298
            set {airdrop::%{_code}%::wait::time} to {_airdrop::wait::time}
299
            set {airdrop::%{_code}%::time} to {_airdrop::time}
300
301
            if {airdrop::%{_code}%::time} = 5 minutes:
302
303
              #Force the advancement to be awarded
304
              loop all players:
305-
                      set {_item} to "%{_rand}% of iron ingot" parsed as item
305+
306
                if {_setting} is 404:
307
                  set {_setting} to 1
308
                if {_setting} is 1:
309
                  send title "&e⚠ &fУведомление об Аирдропе!" with subtitle "&7Посмотри в таб на время! Ты чуть его не пропустил." to loop-player for 6 seconds with 1 second fade in and 1 second fade out
310
                  play sound "block.note.pling" with volume 2 with pitch 2 at loop-player for loop-player
311
312
            if {_airdrop::time} >= 1 second:
313-
                if {_airdrop::type} is "&aРедкий":
313+
314
              set {data::effectlib::loc::location} to {_location}
315
              execute console command "/effectLib wave loc"
316
            reduce {_airdrop::time} by 1 second
317
            wait 1 second
318-
                  set block at {_location::shulker} to rare airdrop
318+
319
320
321
      # if arg 1 is "p" or "pos" or "position" or "setPosition" or "setpos" or "позицияБлять":
322
      #   if arg 2 is not set:
323
      #     send "&c⚠ &fВ втором аргументе вам нужно указать номер позиции. (1 или 2)"
324-
                    # ЛУТ РЕДКОГО АИРА
324+
325
      #   else:
326-
                    loop all items in {_block}'s inventory:
326+
327-
                      add 1 to {_exist}
327+
328-
                    if {_exist} is not set:
328+
329-
                      set slot {_slot} of {_block}'s inventory to {_item} 
329+
330-
                    set {_looted} to true
330+
331
      #       set {_locations::y} to y coordinate of {_location}
332-
                if {_airdrop::type} is "&bОчень редкий":
332+
333
      #
334
      #       set skript-yaml value "locations.1" from "{@file}" to "%{_locations::x}%,%{_locations::y}%,%{_locations::z}%"
335
      #       save yaml "{@file}"
336
      #       load yaml "{@file}" as "{@file}"
337-
                  set block at {_location::shulker} to very rare airdrop
337+
338
      #     else if arg 2 is 2:
339
      #       send title "&a✔ &fУспешно!" with subtitle "&fВы успешно установили &aвторую позицию&f." to player for 3 seconds
340
      #
341
      #       set {_location} to player's location
342
      #       set {_locations::x} to x coordinate of {_location}
343-
                    # ЛУТ ОЧЕНЬ РЕДКОГО АИРА
343+
344
      #       set {_locations::z} to z coordinate of {_location}
345-
                    loop all items in {_block}'s inventory:
345+
346-
                      add 1 to {_exist}
346+
347-
                    if {_exist} is not set:
347+
348-
                      set slot 13 of {_block}'s inventory to stone named "&9☃ &fУпс, тут пусто."
348+
349-
                    set {_looted} to true
349+
350-
                if {_airdrop::type} is "&dМифический":
350+
351
      #       send "&c⚠ &fПозиция &c%arg 2% &fне была обнаружена. Используйте позиции 1 или 2."
352
      #       stop
353
    else:
354
      send "&c⚠ &fУ вас нету доступа к этой команде."
355-
                  set block at {_location::shulker} to mythic airdrop
355+
356
on block break:
357
  if {worker::airdrop::*} is set:
358
    loop {worker::airdrop::*}:
359
      if {airdrop::%loop-value%::block::%location of event-block%::breakable} is false:
360
        cancel event
361-
                    # ЛУТ МИФИЧЕСКОГО АИРА
361+
362
on block place:
363-
                    loop all items in {_block}'s inventory:
363+
364-
                      add 1 to {_exist}
364+
365-
                    if {_exist} is not set:
365+
366-
                      set slot 13 of {_block}'s inventory to stone named "&9☃ &fУпс, тут пусто."
366+