Spoiler 
 
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
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
- Initialize the script and define global variables
addhook("startround", "td_init")
function td_init()
    td_startmoney = 100  -- Player's starting money
    td_wave = 0  -- Current monster wave
    td_waveactive = false  -- State of the monster wave
    td_monsters = {}  -- Table to store active monsters
    td_soldiers = {}  -- Table to store soldiers
    td_monster_hp = {50, 100, 150}  -- Monster health points per wave
    td_monster_armor = {0, 5, 10}  -- Monster armor per wave
    td_soldier_damage = {10, 20, 30}  -- Soldier weapon damage
    td_soldier_armor_penetration = {5, 10, 15}  -- Soldier weapon armor penetration
    td_soldier_cost = {50, 100, 150}  -- Soldier cost
end
-- Create a monster with health and armor defined by the wave
function td_createmonster(id, wave)
    local monster = {}
    monster.id = id
    monster.hp = td_monster_hp[wave]
    monster.armor = td_monster_armor[wave]
    td_monsters[id] = monster
end
-- Create a soldier
function td_createsoldier(id, type, x, y)
    local soldier = {}
    soldier.id = id
    soldier.type = type
    soldier.x = x
    soldier.y = y
    soldier.damage = td_soldier_damage[type]
    soldier.armor_penetration = td_soldier_armor_penetration[type]
    td_soldiers[id] = soldier
end
-- Handle soldier attacking a monster
function td_attack(monster_id, soldier_id)
    local monster = td_monsters[monster_id]
    local soldier = td_soldiers[soldier_id]
    
    -- Calculate damage considering monster's armor and soldier's armor penetration
    local effective_armor = monster.armor - soldier.armor_penetration
    if effective_armor < 0 then
        effective_armor = 0
    end
    local effective_damage = soldier.damage - effective_armor
    if effective_damage < 0 then
        effective_damage = 0
    end
    
    monster.hp = monster.hp - effective_damage
    
    if monster.hp <= 0 then
        td_monsters[monster_id] = nil  -- Remove the monster if its health is zero or less
        parse("killobject "..monster_id)  -- Kill the monster object in the game
    end
end
-- Function called when a new wave starts
function td_newwave()
    td_wave = td_wave + 1
    td_waveactive = true
    
    -- Create monsters for the new wave
    for i = 1, 10 do
        local monster_id = math.random(1000, 9999)
        td_createmonster(monster_id, td_wave)
        parse("spawnobject 3 "..monster_id)  -- Create a monster object in the game
    end
end
-- Function called when the player creates a soldier
addhook("buy", "td_buysoldier")
function td_buysoldier(id, type, x, y)
    if player(id, "money") >= td_soldier_cost[type] then
        local soldier_id = math.random(1000, 9999)
        td_createsoldier(soldier_id, type, x, y)
        parse("spawnobject 1 "..soldier_id.." "..x.." "..y)  -- Create a soldier object in the game
        parse("setmoney "..id.." "..(player(id, "money") - td_soldier_cost[type]))  -- Deduct the soldier cost from the player's money
    else
        msg2(id, "You don't have enough money to buy this soldier.")
    end
end
-- Function called on every game tick to manage attacks
addhook("always", "td_gameupdate")
function td_gameupdate()
    if td_waveactive then
        for monster_id, monster in pairs(td_monsters) do
            for soldier_id, soldier in pairs(td_soldiers) do
                -- Check if the monster is within the soldier's range (implement your own range logic here)
                local distance = math.sqrt((soldier.x - monster.x)^2 + (soldier.y - monster.y)^2)
                if distance < 100 then
                    td_attack(monster_id, soldier_id)
                end
            end
        end
    end
end
 
  CS2D
 CS2D  Tower Defense Script Request
 Tower Defense Script Request 
  1
 1 
 Tower Defense Script Request
 Tower Defense Script Request Offline
 Offline
 Mami Tomoe
 Mami Tomoe 
  §4.3 - Only English/German (depending on section) is allowed
 §4.3 - Only English/German (depending on section) is allowed 
 