-
Notifications
You must be signed in to change notification settings - Fork 0
/
claymore.txt
110 lines (93 loc) · 3.07 KB
/
claymore.txt
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
; (load "https://phunanon.github.io/InsituxScripts/claymore.txt")
(function p-info name
(let prefix (str "dl.players." name))
{:name name
:pos (position prefix)
:team (team prefix)
:hp (health prefix)})
;Remove upon Insitux 0914 in favour of `push`
(function -drop-key kv (!= (0 kv) rem-key))
(function drop-key d key
(var rem-key key)
(let filtered (filter -drop-key d))
(if (empty? filtered) {}
(.. .. dict (filter -drop-key d))))
(function is-near? x0 y0 z0 x1 y1 z1 dist
(> dist (sqrt
(+ (** (- x0 x1))
(** (- y0 y1))
(** (- z0 z1))))))
;{123 {:id 123 :team "name" :by "name" :pos [x y z]}}
;Use (symbols) in the future to check if already defined
(var plants {})
(function boom p
(dl.util.explosion (:pos (1 p)) "TestGrenade"))
(var off false)
(function on-msg sender channel message
(when (= message "on")
(ticked.connect on-tick)
(print "ok"))
(when (= message "off")
(var off true)
(dl.util.fmessage "Claymore script disabled."))
(when (= message "boom")
(map boom plants)
(var plants {})
(dl.util.fmessage "All claymores detonated!"))
(when (= message "plant")
(let player (p-info sender))
(let team (:team player))
(let pos (:pos player))
(let id (time))
(var plants (push plants id {:id id :team team :by sender :pos pos}))
(dl.util.fmessage "Claymore planted. " (str (len plants) " set."))))
(function player-claymore player-pos-team
(let name (0 player-pos-team))
(let pos (1 player-pos-team))
(let team (2 player-pos-team))
(when (and (!= (:by plant) name)
(or is-tk (!= (:team plant) team))
(.. is-near? pos (:pos plant) 6))
;use `push` to remove key upon Insitux version 0914
(var plants (drop-key plants (:id plant)))
(dl.util.explosion (:pos plant) "TestGrenade")
(dl.util.fmessage
(str name " tripped " (:by plant) "'s claymore! "
(len plants) " left."))))
;Upon Deadline fix use `for`
(function as-prefix player
(str "dl.players." player))
;Upon Deadline fix use `for`
(function claymore -plant
(var plant (1 -plant))
(map player-claymore players))
;Remove if Insitux can ever map over external functions
(function -position x (position x))
(function -team x (team x))
(function is-alive? player
((str "dl.players." player ".is_alive")))
(function quarter-second
(print "tick")
(var is-tk $dl.globals.team_kill)
(var players (filter is-alive? (dl.list_players)))
(var p-infos (map as-prefix players))
(let positions (map -position p-infos))
(let teams (map -team p-infos))
(var players (map vec players positions teams))
;Upon Deadline fix use `for`
(map claymore plants))
(function on-tick
(ticked.kill)
(var n 0)
(clear)
(print "first tick")
(while (and (< n 30) (! off))
(wait 0.25)
(var n (inc n))
(quarter-second))
(if (! off) (ticked.connect on-tick)))
(ticked.kill)
(dl.events.on_chat_message.kill)
(dl.events.on_chat_message.connect on-msg)
(dl.util.fmessage "Claymore Insitux script active. Use 'plant' in the chat to plant one.")
(on-tick)