-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRndSHead.chai
117 lines (102 loc) · 2.85 KB
/
RndSHead.chai
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
/*
Script randomly places stone heads on land with random discovery and trigger properties.
Made by MrKosjaK.
*/
global rndAngle = [
0,
512,
1024,
1536
];
global pickSpell = [
M_SPELL_BLAST,
M_SPELL_INSECT_PLAGUE,
M_SPELL_LAND_BRIDGE,
M_SPELL_LIGHTNING_BOLT,
M_SPELL_SHIELD,
M_SPELL_INVISIBILITY,
M_SPELL_HYPNOTISM,
M_SPELL_SWAMP,
M_SPELL_EROSION,
M_SPELL_EARTHQUAKE,
M_SPELL_FIRESTORM
];
global discVect = Vector();
global stonehVect = Vector();
global amount = 5 + G_RANDOM(16);
global realstones = 0;
global incr = 0;
def FindLandSpot()
{
var tries = 16;
var coord = Coord3D();
coord.Xpos = G_RANDOM(65536);
coord.Zpos = G_RANDOM(65536);
while (tries > 0)
{
var me_pos = world_coord3d_to_map_ptr(coord);
if (is_map_elem_sea_or_coast(me_pos) == 0)
{
++realstones;
break;
}
else
{
coord.Xpos = G_RANDOM(65536);
coord.Zpos = G_RANDOM(65536);
}
--tries;
}
return coord;
}
def MakeDiscovery(coord)
{
var discovery = createThing(T_GENERAL, M_GENERAL_DISCOVERY, TRIBE_HOSTBOT, coord, false, false);
discovery.u.Discovery.DiscoveryType = 11;
var random_spell = G_RANDOM(pickSpell.size());
discovery.u.Discovery.DiscoveryModel = pickSpell[random_spell];
discovery.u.Discovery.AvailabilityType = 3;
discovery.u.Discovery.TriggerType = 1;
discVect.push_back(ObjectProxy(discovery));
}
def MakeStoneHead(coord)
{
var head = createThing(T_SCENERY, M_SCENERY_HEAD, TRIBE_HOSTBOT, coord, false, false);
head.u.Scenery.HeadType = 2;
var random = G_RANDOM(rndAngle.size());
head.AngleXZ = rndAngle[random];
stonehVect.push_back(ObjectProxy(head));
}
def MakeTrigger(coord, headtolink, thing1)
{
var trigger = createThing(T_GENERAL, M_GENERAL_TRIGGER, TRIBE_HOSTBOT, coord, false, false);
trigger.u.Trigger.Flags = 33;
trigger.u.Trigger.TriggerType = TRIGGER_TYPE_PROXIMITY;
trigger.u.Trigger.CellRadius = 1;
trigger.u.Trigger.NumOccurences = 1 + G_RANDOM(6);
trigger.u.Trigger.TriggerCount = 1 + G_RANDOM(6);
trigger.u.Trigger.InactiveTime = 1;
trigger.u.Trigger.PrayTime = 30 + G_RANDOM(270);
trigger.u.Trigger.CreatePlayerOwned = 1;
trigger.u.Trigger.HeadThingIdx = (headtolink.getThingNum());
var this_thing = thing1.get();
gsi.SpellsPresentOnLevel |= (1 << this_thing.u.Discovery.DiscoveryModel);
uninit_thing(this_thing);
trigger.u.Trigger.EditorThingIdxs[0] = thing1.getThingNum();
}
for (var i = 0; i < amount; ++i)
{
var c3d = FindLandSpot();
var c2dp = Coord2D();
coord3D_to_coord2D(c3d, c2dp);
if (is_map_point_land(c2dp) == 1)
{
centre_coord3d_on_block(c3d);
MakeDiscovery(c3d);
MakeStoneHead(c3d);
MakeTrigger(c3d, stonehVect[incr], discVect[incr]);
++incr
}
}
notify_user("Spawned " + realstones.to_string() + " stone heads.");
exit();