Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
@@ -0,0 +1,187 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class BlackthornBaseAddon : BaseAddon
|
||||
{
|
||||
[Constructable]
|
||||
public BlackthornBaseAddon()
|
||||
{
|
||||
}
|
||||
|
||||
public BlackthornBaseAddon(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource)
|
||||
{
|
||||
AddComplexComponent(addon, item, xoffset, yoffset, zoffset, hue, lightsource, null, 1);
|
||||
}
|
||||
|
||||
public static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource, string name, int amount)
|
||||
{
|
||||
AddonComponent ac;
|
||||
ac = new AddonComponent(item);
|
||||
if (name != null && name.Length > 0)
|
||||
ac.Name = name;
|
||||
if (hue != 0)
|
||||
ac.Hue = hue;
|
||||
if (amount > 1)
|
||||
{
|
||||
ac.Stackable = true;
|
||||
ac.Amount = amount;
|
||||
}
|
||||
if (lightsource != -1)
|
||||
ac.Light = (LightType)lightsource;
|
||||
addon.AddComponent(ac, xoffset, yoffset, zoffset);
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0); // Version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class BlackthornEntry : BlackthornBaseAddon
|
||||
{
|
||||
public static BlackthornEntry InstanceTram { get; set; }
|
||||
public static BlackthornEntry InstanceFel { get; set; }
|
||||
|
||||
private static int[,] m_AddOnSimpleComponents = new int[,]
|
||||
{
|
||||
{6923, 7, 3, 0}, {12906, -5, 12, 0}, {12906, -4, 12, 0}// 10 18 19
|
||||
, {12906, -4, 11, 0}, {12906, -5, 11, 0}, {12906, -6, 11, 0}// 20 21 22
|
||||
, {12906, -7, 11, 0}, {12906, -8, 11, 0}, {12906, -7, 12, 0}// 23 24 25
|
||||
, {12906, -6, 12, 0}, {12906, -6, 13, 0}, {12906, -5, 13, 0}// 26 27 28
|
||||
, {12906, -4, 13, 0}, {12906, -3, 12, 0}, {12906, -3, 13, 0}// 29 30 31
|
||||
, {12906, -3, 14, 0}, {12906, -2, 14, 0}, {12906, -2, 13, 0}// 32 33 34
|
||||
, {12906, -2, 12, 0}, {12906, -2, 11, 0}, {12906, -3, 11, 0}// 35 36 37
|
||||
, {4952, -1, 14, 0}, {4956, -1, 13, 0}, {4967, -1, 12, 5}// 38 39 40
|
||||
, {4962, -1, 12, 0}, {4963, -1, 11, 5}, {4962, -1, 11, 0}// 41 42 43
|
||||
, {4288, -9, 4, 10}, {6875, -8, -5, 0}, {6873, -8, -4, 0}// 44 46 47
|
||||
, {3545, 6, -2, 0}, {3545, -5, -1, 0}, {3545, 1, -5, 0}// 49 50 51
|
||||
, {3545, 2, 2, 0}, {3545, 6, 2, 0}, {12906, 3, 0, 0}// 52 53 63
|
||||
, {12906, 4, 0, 0}, {12906, 4, -1, 0}, {12906, 3, -1, 0}// 64 65 66
|
||||
, {12906, 2, -2, 0}, {12906, 3, -2, 0}, {12906, 3, -4, 0}// 67 68 69
|
||||
, {12906, -1, -4, 0}, {12906, 1, -4, 0}, {12906, 3, -3, 0}// 70 71 72
|
||||
, {12906, 2, -3, 0}, {12906, 1, -3, 0}, {12906, 1, -2, 0}// 73 74 75
|
||||
, {12906, 0, -2, 0}, {12906, 0, -3, 0}, {12906, -1, -3, 0}// 76 77 78
|
||||
, {12906, -2, -4, 0}, {12906, -2, -3, 0}, {12906, -3, -2, 0}// 79 80 81
|
||||
, {12906, -2, -2, 0}, {12906, -3, -3, 0}, {12906, -3, -5, 0}// 82 83 84
|
||||
, {12906, -3, -4, 0}, {12906, -4, -4, 0}, {12906, -4, -5, 0}// 85 86 87
|
||||
, {4960, -1, -1, 0}, {4952, 0, -1, 0}, {4945, 2, -1, 0}// 88 89 90
|
||||
, {4954, 3, 0, 0}, {4973, 2, 1, 0}, {4967, 3, 1, 0}// 91 92 93
|
||||
, {4970, 4, 1, 0}, {4963, 5, 1, 0}, {4967, 5, 0, 0}// 94 95 96
|
||||
, {4963, 5, -1, 0}, {4970, 4, -2, 0}, {4963, 4, -2, 0}// 97 98 99
|
||||
, {4963, 4, -3, 0}, {4970, 4, -4, 0}, {4960, 3, -4, 0}// 100 101 102
|
||||
, {4967, 2, -4, 0}, {4967, 1, -4, 0}, {4959, 0, -4, 0}// 103 104 105
|
||||
, {4962, 0, -4, 0}, {4967, -1, -4, 0}, {4957, -1, -4, 0}// 106 107 108
|
||||
, {4943, -1, -5, 0}, {6011, -4, -5, 2}, {6008, -5, -5, 0}// 109 110 111
|
||||
, {4955, -2, -1, 0}, {4955, -3, -2, 0}, {4955, -4, -3, 0}// 112 113 114
|
||||
, {4961, -5, -4, 0}, {6008, -4, -4, 0}, {12906, -4, 10, 0}// 115 116 117
|
||||
, {12906, -5, 10, 0}, {12906, -6, 10, 0}, {12906, -7, 10, 0}// 118 119 120
|
||||
, {12906, -8, 10, 0}, {12906, -9, 10, 0}, {12906, -9, 9, 0}// 121 122 123
|
||||
, {12906, -8, 9, 0}, {12906, -7, 9, 0}, {12906, -6, 9, 0}// 124 125 126
|
||||
, {12906, -5, 9, 0}, {12906, -4, 9, 0}, {12906, -5, 8, 0}// 127 128 129
|
||||
, {12906, -6, 8, 0}, {12906, -7, 8, 0}, {12906, -8, 8, 0}// 130 131 132
|
||||
, {12906, -9, 8, 0}, {4962, -1, 10, 0}, {4962, -2, 10, 0}// 133 134 135
|
||||
, {4967, -3, 10, 0}, {4967, -3, 9, 0}, {4962, -3, 8, 0}// 136 137 138
|
||||
, {4962, -4, 8, 0}, {4967, -5, 7, 0}, {4963, -7, 7, 0}// 139 140 141
|
||||
, {4962, -7, 7, 0}, {4962, -8, 7, 0}, {4967, -9, 7, 0}// 142 143 144
|
||||
, {4962, -9, 7, 0}, {12906, 0, -13, 0}, {12906, -1, -13, 0}// 145 146 147
|
||||
, {12906, 0, -14, 0}, {12906, 0, -15, 0}, {12906, -1, -15, 0}// 148 149 150
|
||||
, {12906, -1, -14, 0}, {4968, 0, -16, 2}, {4970, 1, -16, 0}// 151 152 153
|
||||
, {4970, -1, -16, 5}, {4970, 0, -16, 2}, {4968, -1, -16, 5}// 154 155 156
|
||||
, {4965, 0, -16, 5}, {4965, -1, -16, 5}, {4967, 0, -16, 0}// 157 158 159
|
||||
, {4964, 0, -16, 0}, {4960, -1, -16, 0}, {12906, -4, -6, 0}// 160 161 162
|
||||
, {12906, -3, -6, 0}, {12906, -2, -6, 0}, {12906, -1, -7, 0}// 163 164 165
|
||||
, {12906, -1, -8, 0}, {12906, -2, -8, 0}, {12906, -2, -7, 0}// 166 167 168
|
||||
, {12906, -3, -7, 0}, {12906, -4, -7, 0}, {12906, -4, -8, 0}// 169 170 171
|
||||
, {12906, -3, -9, 0}, {12906, -3, -8, 0}, {12906, -2, -9, 0}// 172 173 174
|
||||
, {12906, -1, -9, 0}, {12906, -1, -10, 0}, {12906, 0, -9, 0}// 175 176 177
|
||||
, {12906, 0, -10, 0}, {12906, 1, -9, 0}, {12906, 2, -9, 0}// 178 179 180
|
||||
, {12906, 3, -8, 0}, {12906, 3, -9, 0}, {12906, 1, -10, 0}// 181 182 183
|
||||
, {12906, 3, -10, 0}, {12906, 2, -10, 0}, {12906, 2, -11, 0}// 184 185 186
|
||||
, {12906, 1, -11, 0}, {12906, 0, -11, 0}, {12906, -1, -11, 0}// 187 188 189
|
||||
, {12906, 1, -12, 0}, {12906, 0, -12, 0}, {12906, -1, -12, 0}// 190 191 192
|
||||
, {4959, -1, -6, 0}, {4967, 0, -7, 0}, {4967, 0, -8, 0}// 193 194 195
|
||||
, {4967, 1, -8, 0}, {4967, 2, -8, 0}, {4960, 4, -8, 0}// 196 197 198
|
||||
, {4956, 4, -9, 0}, {4956, 4, -10, 0}, {4955, -4, -6, 0}// 199 200 201
|
||||
, {4961, -5, -7, 0}, {4961, -4, -7, 4}, {4967, -5, -8, 0}// 202 203 204
|
||||
, {4963, -4, -8, 0}, {4961, -4, -9, 0}, {4967, -3, -9, 0}// 205 206 207
|
||||
, {4286, -11, 6, 10}, {4287, -10, 5, 10}, {4967, -11, 5, 0}// 208 209 210
|
||||
, {12906, -10, 9, 0}, {12906, -10, 8, 0}, {12906, -10, 7, 0}// 211 212 213
|
||||
, {12906, -11, 7, 0}, {12906, -11, 8, 0}, {4962, -10, 6, 0}// 214 215 216
|
||||
, {4954, -11, 7, 0}// 217
|
||||
};
|
||||
|
||||
[Constructable]
|
||||
public BlackthornEntry()
|
||||
{
|
||||
for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++)
|
||||
AddComponent(new AddonComponent(m_AddOnSimpleComponents[i, 0]), m_AddOnSimpleComponents[i, 1], m_AddOnSimpleComponents[i, 2], m_AddOnSimpleComponents[i, 3]);
|
||||
|
||||
AddComplexComponent((BaseAddon)this, 954, 7, -2, 0, 1175, -1, "", 1);// 1
|
||||
AddComplexComponent((BaseAddon)this, 964, 7, -1, 0, 1175, -1, "", 1);// 2
|
||||
AddComplexComponent((BaseAddon)this, 956, 7, -1, 0, 1175, -1, "", 1);// 3
|
||||
AddComplexComponent((BaseAddon)this, 954, 8, -1, 0, 1175, -1, "", 1);// 4
|
||||
AddComplexComponent((BaseAddon)this, 963, 9, -1, 0, 1175, -1, "", 1);// 5
|
||||
AddComplexComponent((BaseAddon)this, 960, 10, -1, 0, 1175, -1, "", 1);// 6
|
||||
AddComplexComponent((BaseAddon)this, 965, 12, -1, 0, 1175, -1, "", 1);// 7
|
||||
AddComplexComponent((BaseAddon)this, 963, 11, -1, 0, 1175, -1, "", 1);// 8
|
||||
AddComplexComponent((BaseAddon)this, 3387, 9, -3, 0, 1109, -1, "", 1);// 9
|
||||
AddComplexComponent((BaseAddon)this, 7392, 9, 6, 0, 2500, -1, "", 1);// 11
|
||||
AddComplexComponent((BaseAddon)this, 3388, 10, 2, 0, 1109, -1, "", 1);// 12
|
||||
AddComplexComponent((BaseAddon)this, 3388, 3, 12, 0, 1109, -1, "", 1);// 13
|
||||
AddComplexComponent((BaseAddon)this, 3392, 0, 16, 10, 1920, -1, "", 1);// 14
|
||||
AddComplexComponent((BaseAddon)this, 3392, 0, 16, 5, 1920, -1, "", 1);// 15
|
||||
AddComplexComponent((BaseAddon)this, 3392, 0, 16, 0, 1920, -1, "", 1);// 16
|
||||
AddComplexComponent((BaseAddon)this, 3392, 0, 16, 0, 1920, -1, "", 1);// 17
|
||||
AddComplexComponent((BaseAddon)this, 3387, -9, -1, 0, 1109, -1, "", 1);// 45
|
||||
AddComplexComponent((BaseAddon)this, 3566, -7, -3, 0, 2500, -1, "", 1);// 48
|
||||
AddComplexComponent((BaseAddon)this, 3389, 4, 2, 0, 1109, -1, "", 1);// 54
|
||||
AddComplexComponent((BaseAddon)this, 3566, 6, -4, 3, 2500, -1, "", 1);// 55
|
||||
AddComplexComponent((BaseAddon)this, 953, 6, -4, 0, 1175, -1, "", 1);// 56
|
||||
AddComplexComponent((BaseAddon)this, 953, 6, -3, 0, 1175, -1, "", 1);// 57
|
||||
AddComplexComponent((BaseAddon)this, 951, 6, -2, 0, 1175, -1, "", 1);// 58
|
||||
AddComplexComponent((BaseAddon)this, 7396, -8, 3, 0, 2500, -1, "", 1);// 59
|
||||
AddComplexComponent((BaseAddon)this, 3388, -8, 6, 0, 2500, -1, "", 1);// 60
|
||||
AddComplexComponent((BaseAddon)this, 7390, 1, 8, 0, 2500, -1, "", 1);// 61
|
||||
AddComplexComponent((BaseAddon)this, 6053, 5, -2, 0, 2548, -1, "", 1);// 62
|
||||
}
|
||||
|
||||
public BlackthornEntry(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0); // Version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,443 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class BlackthornStep2 : BlackthornBaseAddon
|
||||
{
|
||||
public static BlackthornStep2 InstanceTram { get; set; }
|
||||
public static BlackthornStep2 InstanceFel { get; set; }
|
||||
|
||||
private static int[,] m_AddOnSimpleComponents = new int[,]
|
||||
{
|
||||
{15874, 6, 13, 0}, {15874, 7, 13, 0}, {15874, 8, 13, 0}// 6 7 8
|
||||
, {15874, 9, 13, 0}, {15874, 10, 13, 0}, {15874, 11, 13, 0}// 9 10 11
|
||||
, {6584, 20, 15, 0}, {6584, 21, 16, 1}, {17729, 13, 13, 0}// 18 22 53
|
||||
, {41325, 6, -2, 6}, {15874, 6, 5, 0}, {15874, 7, 5, 0}// 54 55 56
|
||||
, {15874, 8, 5, 0}, {15874, 9, 5, 0}, {15874, 10, 5, 0}// 57 58 59
|
||||
, {15874, 11, 5, 0}, {4309, 6, -8, 6}, {17081, -1, 19, 0}// 60 152 153
|
||||
, {17077, 5, 25, 12}, {17088, 1, 25, 13}, {40737, 4, 26, 1}// 154 155 156
|
||||
, {17082, -1, 26, 0}, {40735, -1, 24, 1}, {40737, -1, 20, 1}// 157 158 159
|
||||
, {16388, 1, 21, 13}, {17083, 5, 21, 13}, {40738, 4, 19, 1}// 160 161 162
|
||||
, {16649, 1, 17, 0}, {15874, -4, 13, 0}, {15874, -3, 13, 0}// 163 164 165
|
||||
, {15874, -2, 13, 0}, {15874, -5, 13, 0}, {15874, -6, 13, 0}// 166 167 168
|
||||
, {4306, 0, -2, 2}, {4306, 2, -4, 5}, {41195, 1, 1, 0}// 171 172 173
|
||||
, {41156, 0, 7, 0}, {12906, -10, 9, 0}, {12906, -9, -4, 0}// 174 175 179
|
||||
, {12906, -9, -3, 0}, {12906, -10, -4, 0}, {12906, -10, -3, 0}// 180 181 182
|
||||
, {12906, -9, -2, 0}, {12906, -10, -2, 0}, {12906, -10, -1, 0}// 183 184 185
|
||||
, {12906, -9, -1, 0}, {12906, -9, 0, 0}, {12906, -9, 1, 0}// 186 187 188
|
||||
, {12906, -10, 0, 0}, {12906, -10, 1, 0}, {12906, -8, 3, 0}// 189 190 191
|
||||
, {12906, -9, 2, 0}, {12906, -10, 2, 0}, {12906, -10, 3, 0}// 192 193 194
|
||||
, {12906, -9, 3, 0}, {12906, -9, 4, 0}, {12906, -8, 4, 0}// 195 196 197
|
||||
, {4963, -10, 4, 0}, {4967, -7, 5, 0}, {15874, -6, 5, 0}// 199 205 206
|
||||
, {15874, -5, 5, 0}, {15874, -4, 5, 0}, {15874, -3, 5, 0}// 207 208 209
|
||||
, {15874, -2, 5, 0}, {15874, -1, 5, 0}, {15874, 0, 5, 0}// 210 211 212
|
||||
, {15874, 1, 4, 0}, {15874, 2, 4, 0}, {15719, 2, -5, 6}// 213 214 215
|
||||
, {4317, -1, -10, 2}, {4313, -1, -10, 0}, {41317, 2, -9, 6}// 216 217 218
|
||||
, {16642, 4, -10, 0}, {12906, -9, -20, 0}, {12906, -10, -20, 0}// 219 220 221
|
||||
, {12906, -10, -19, 0}, {12906, -9, -19, 0}, {12906, -9, -18, 0}// 222 223 224
|
||||
, {12906, -10, -18, 0}, {12906, -10, -17, 0}, {12906, -9, -17, 0}// 225 226 227
|
||||
, {12906, -9, -16, 0}, {12906, -10, -16, 0}, {12906, -10, -15, 0}// 228 229 230
|
||||
, {12906, -9, -15, 0}, {12906, -9, -14, 0}, {12906, -10, -14, 0}// 231 232 233
|
||||
, {12906, -10, -13, 0}, {12906, -9, -13, 0}, {12906, -9, -12, 0}// 234 235 236
|
||||
, {12906, -10, -12, 0}, {12906, -10, -11, 0}, {12906, -9, -11, 0}// 237 238 239
|
||||
, {12906, -9, -10, 0}, {12906, -10, -10, 0}, {12906, -10, -8, 0}// 240 241 242
|
||||
, {12906, -9, -8, 0}, {12906, -9, -9, 0}, {12906, -10, -9, 0}// 243 244 245
|
||||
, {12906, -10, -7, 0}, {12906, -9, -7, 0}, {12906, -9, -6, 0}// 246 247 248
|
||||
, {12906, -10, -6, 0}, {12906, -10, -5, 0}, {12906, -9, -5, 0}// 249 250 251
|
||||
, {4410, -9, -22, 0}, {12906, -10, -21, 0}, {12906, -10, -22, 0}// 252 253 254
|
||||
, {12906, -9, -22, 0}, {12906, -9, -21, 0}, {12906, -9, -23, 0}// 255 256 257
|
||||
, {12906, -10, -23, 0}, {12906, -10, -24, 0}, {12906, -9, -24, 0}// 258 259 260
|
||||
, {12906, -9, -25, 0}, {12906, -10, -25, 0}, {12906, -11, 12, 0}// 261 262 263
|
||||
, {12906, -12, 12, 0}, {12906, -13, 12, 0}, {12906, -14, 12, 0}// 264 265 266
|
||||
, {12906, -15, 12, 0}, {12906, -16, 12, 0}, {12906, -17, 12, 0}// 267 268 269
|
||||
, {12906, -18, 12, 0}, {12906, -19, 12, 0}, {12906, -20, 12, 0}// 270 271 272
|
||||
, {12906, -21, 12, 0}, {12906, -22, 12, 0}, {40364, -16, 9, 0}// 273 274 275
|
||||
, {19100, -18, 9, 0}, {15800, -14, 11, 0}, {12865, -19, -4, 0}// 276 277 278
|
||||
, {12865, -21, -3, 0}, {12865, -21, -1, 0}, {12865, -20, 0, 0}// 279 280 281
|
||||
, {12865, -20, 3, 0}, {12865, -21, 2, 0}, {12865, -21, 5, 0}// 282 283 284
|
||||
, {12865, -19, 4, 0}, {12865, -20, 7, 0}, {12865, -21, 8, 0}// 285 286 287
|
||||
, {12865, -20, 9, 0}, {12865, -20, 10, 0}, {12865, -21, 10, 0}// 288 289 290
|
||||
, {12906, -11, 10, 0}, {12906, -12, 11, 0}, {12906, -11, 11, 0}// 291 292 293
|
||||
, {12906, -13, 9, 0}, {12906, -12, 10, 0}, {12906, -13, 11, 0}// 294 295 296
|
||||
, {12906, -14, 11, 0}, {12906, -14, 10, 0}, {12906, -14, 9, 0}// 297 298 299
|
||||
, {12906, -13, 10, 0}, {12906, -15, 10, 0}, {12906, -15, 11, 0}// 300 301 302
|
||||
, {12906, -16, 11, 0}, {12906, -16, 10, 0}, {12906, -17, 10, 0}// 303 304 305
|
||||
, {12906, -17, 11, 0}, {12906, -17, 8, 0}, {12906, -16, 9, 0}// 306 307 308
|
||||
, {12906, -17, 9, 0}, {12906, -18, 8, 0}, {12906, -18, 9, 0}// 309 310 311
|
||||
, {12906, -18, 9, 0}, {12906, -19, 7, 0}, {12906, -19, 6, 0}// 312 313 314
|
||||
, {12906, -19, 5, 0}, {12906, -19, 4, 0}, {12906, -19, 3, 0}// 315 316 317
|
||||
, {12906, -19, 2, 0}, {12906, -19, 1, 0}, {12906, -19, 0, 0}// 318 319 320
|
||||
, {12906, -19, -1, 0}, {12906, -19, -2, 0}, {12906, -19, -3, 0}// 321 322 323
|
||||
, {12906, -19, -4, 0}, {12906, -20, -4, 0}, {12906, -21, -4, 0}// 324 325 326
|
||||
, {12906, -22, -4, 0}, {12906, -22, -3, 0}, {12906, -21, -3, 0}// 327 328 329
|
||||
, {12906, -20, -3, 0}, {12906, -20, -2, 0}, {12906, -20, -1, 0}// 330 331 332
|
||||
, {12906, -20, 0, 0}, {12906, -20, 1, 0}, {12906, -20, 2, 0}// 333 334 335
|
||||
, {12906, -20, 3, 0}, {12906, -20, 4, 0}, {12906, -20, 5, 0}// 336 337 338
|
||||
, {12906, -20, 6, 0}, {12906, -20, 7, 0}, {12906, -20, 9, 0}// 339 340 341
|
||||
, {12906, -20, 8, 0}, {12906, -19, 8, 0}, {12906, -19, 9, 0}// 342 343 344
|
||||
, {12906, -19, 11, 0}, {12906, -19, 10, 0}, {12906, -20, 10, 0}// 345 346 347
|
||||
, {12906, -20, 11, 0}, {12906, -21, 11, 0}, {12906, -21, 10, 0}// 348 349 350
|
||||
, {12906, -21, 9, 0}, {12906, -21, 8, 0}, {12906, -21, 7, 0}// 351 352 353
|
||||
, {12906, -21, 6, 0}, {12906, -21, 5, 0}, {12906, -21, 4, 0}// 354 355 356
|
||||
, {12906, -21, 3, 0}, {12906, -21, 2, 0}, {12906, -21, 1, 0}// 357 358 359
|
||||
, {12906, -21, 0, 0}, {12906, -21, -1, 0}, {12906, -21, -2, 0}// 360 361 362
|
||||
, {12906, -22, -2, 0}, {12906, -22, -1, 0}, {12906, -22, 0, 0}// 363 364 365
|
||||
, {12906, -22, 1, 0}, {12906, -22, 2, 0}, {12906, -22, 3, 0}// 366 367 368
|
||||
, {12906, -22, 4, 0}, {12906, -22, 5, 0}, {12906, -22, 6, 0}// 369 370 371
|
||||
, {12906, -22, 7, 0}, {12906, -22, 8, 0}, {12906, -22, 9, 0}// 372 373 374
|
||||
, {12906, -22, 10, 0}, {12906, -22, 11, 0}, {12906, -18, 10, 0}// 375 376 377
|
||||
, {12906, -18, 11, 0}, {4963, -18, 3, 0}, {4963, -18, 7, 0}// 378 392 396
|
||||
, {12906, -11, -3, 0}, {12906, -11, -4, 0}, {12906, -12, -4, 0}// 406 407 408
|
||||
, {12906, -12, -3, 0}, {12906, -13, -4, 0}, {12906, -14, -4, 0}// 409 410 411
|
||||
, {12906, -14, -3, 0}, {12906, -13, -3, 0}, {12906, -11, -2, 0}// 412 413 414
|
||||
, {12906, -12, -2, 0}, {12906, -12, -1, 0}, {12906, -11, -1, 0}// 415 416 417
|
||||
, {12906, -11, 0, 0}, {12906, -11, 1, 0}, {12906, -12, 1, 0}// 418 419 420
|
||||
, {12906, -12, 0, 0}, {12906, -14, -2, 0}, {12906, -13, -2, 0}// 421 422 423
|
||||
, {12906, -14, -1, 0}, {12906, -13, -1, 0}, {12906, -14, 0, 0}// 424 425 426
|
||||
, {12906, -13, 0, 0}, {12906, -14, 1, 0}, {12906, -13, 1, 0}// 427 428 429
|
||||
, {12906, -13, 1, 0}, {12906, -12, 2, 0}, {12906, -11, 2, 0}// 430 431 432
|
||||
, {4969, -14, -3, 0}, {4971, -14, -1, 0}, {12865, -21, -5, 0}// 437 438 451
|
||||
, {12906, -20, -13, 0}, {12906, -20, -14, 0}, {12906, -20, -15, 0}// 452 453 454
|
||||
, {12906, -20, -16, 0}, {12906, -20, -17, 0}, {12906, -20, -18, 0}// 455 456 457
|
||||
, {12906, -20, -19, 0}, {12906, -20, -20, 0}, {12906, -21, -20, 0}// 458 459 460
|
||||
, {12906, -21, -19, 0}, {12906, -21, -19, 0}, {12906, -21, -18, 0}// 461 462 463
|
||||
, {12906, -21, -17, 0}, {12906, -21, -16, 0}, {12906, -21, -15, 0}// 464 465 466
|
||||
, {12906, -21, -14, 0}, {12906, -21, -13, 0}, {12906, -22, -13, 0}// 467 468 469
|
||||
, {12906, -22, -14, 0}, {12906, -22, -15, 0}, {12906, -22, -16, 0}// 470 471 472
|
||||
, {12906, -22, -17, 0}, {12906, -22, -18, 0}, {12906, -22, -19, 0}// 473 474 475
|
||||
, {12906, -22, -20, 0}, {12906, -19, -12, 0}, {12906, -20, -12, 0}// 476 477 478
|
||||
, {12906, -21, -12, 0}, {12906, -22, -12, 0}, {12906, -22, -11, 0}// 479 480 481
|
||||
, {12906, -21, -11, 0}, {12906, -20, -11, 0}, {12906, -19, -11, 0}// 482 483 484
|
||||
, {12906, -19, -10, 0}, {12906, -20, -10, 0}, {12906, -21, -10, 0}// 485 486 487
|
||||
, {12906, -22, -10, 0}, {12906, -22, -9, 0}, {12906, -21, -9, 0}// 488 489 490
|
||||
, {12906, -20, -9, 0}, {12906, -20, -9, 0}, {12906, -19, -9, 0}// 491 492 493
|
||||
, {12906, -19, -8, 0}, {12906, -20, -8, 0}, {12906, -21, -8, 0}// 494 495 496
|
||||
, {12906, -22, -8, 0}, {12906, -22, -7, 0}, {12906, -21, -7, 0}// 497 498 499
|
||||
, {12906, -20, -7, 0}, {12906, -19, -7, 0}, {12906, -19, -6, 0}// 500 501 502
|
||||
, {12906, -20, -6, 0}, {12906, -21, -6, 0}, {12906, -22, -6, 0}// 503 504 505
|
||||
, {12906, -22, -5, 0}, {12906, -21, -5, 0}, {12906, -20, -5, 0}// 506 507 508
|
||||
, {12906, -19, -5, 0}, {19121, -12, -16, 0}, {12906, -14, -12, 0}// 509 532 533
|
||||
, {12906, -14, -11, 0}, {12906, -14, -15, 0}, {12906, -14, -16, 0}// 534 535 536
|
||||
, {12906, -14, -19, 0}, {12906, -13, -19, 0}, {12906, -14, -20, 0}// 537 538 539
|
||||
, {12906, -11, -10, 0}, {12906, -11, -11, 0}, {12906, -11, -12, 0}// 540 541 542
|
||||
, {12906, -11, -13, 0}, {12906, -11, -14, 0}, {12906, -11, -15, 0}// 543 544 545
|
||||
, {12906, -11, -16, 0}, {12906, -11, -17, 0}, {12906, -11, -18, 0}// 546 547 548
|
||||
, {12906, -11, -19, 0}, {12906, -11, -20, 0}, {12906, -12, -20, 0}// 549 550 551
|
||||
, {12906, -12, -19, 0}, {12906, -12, -18, 0}, {12906, -12, -17, 0}// 552 553 554
|
||||
, {12906, -12, -16, 0}, {12906, -12, -15, 0}, {12906, -12, -14, 0}// 555 556 557
|
||||
, {12906, -12, -13, 0}, {12906, -12, -12, 0}, {12906, -12, -11, 0}// 558 559 560
|
||||
, {12906, -12, -10, 0}, {12906, -13, -20, 0}, {12906, -13, -19, 0}// 561 562 563
|
||||
, {12906, -13, -18, 0}, {12906, -13, -17, 0}, {12906, -13, -16, 0}// 564 565 566
|
||||
, {12906, -13, -15, 0}, {12906, -13, -14, 0}, {12906, -13, -13, 0}// 567 568 569
|
||||
, {12906, -13, -12, 0}, {12906, -13, -11, 0}, {12906, -13, -10, 0}// 570 571 572
|
||||
, {12906, -11, -9, 0}, {12906, -12, -9, 0}, {12906, -13, -9, 0}// 573 574 575
|
||||
, {12906, -14, -9, 0}, {12906, -14, -8, 0}, {12906, -13, -8, 0}// 576 577 578
|
||||
, {12906, -12, -8, 0}, {12906, -11, -8, 0}, {12906, -11, -7, 0}// 579 580 581
|
||||
, {12906, -11, -6, 0}, {12906, -12, -6, 0}, {12906, -12, -7, 0}// 582 583 584
|
||||
, {12906, -13, -7, 0}, {12906, -14, -7, 0}, {12906, -14, -5, 0}// 585 586 587
|
||||
, {12906, -13, -6, 0}, {12906, -13, -5, 0}, {12906, -12, -5, 0}// 588 589 590
|
||||
, {12906, -11, -5, 0}, {4966, -14, -6, 0}, {4971, -14, -14, 0}// 591 604 613
|
||||
, {4971, -14, -13, 0}, {12906, -22, -21, 0}, {12906, -21, -21, 0}// 614 624 625
|
||||
, {12906, -21, -22, 0}, {12906, -22, -22, 0}, {12906, -22, -23, 0}// 626 627 628
|
||||
, {12906, -21, -24, 0}, {12906, -21, -23, 0}, {12906, -22, -24, 0}// 629 630 631
|
||||
, {12906, -22, -25, 0}, {15716, -12, -21, 0}, {12906, -14, -23, 0}// 632 641 642
|
||||
, {12906, -14, -24, 0}, {12906, -11, -21, 0}, {12906, -11, -22, 0}// 643 644 645
|
||||
, {12906, -12, -22, 0}, {12906, -12, -21, 0}, {12906, -11, -23, 0}// 646 647 648
|
||||
, {12906, -12, -23, 0}, {12906, -12, -24, 0}, {12906, -11, -24, 0}// 649 650 651
|
||||
, {12906, -11, -25, 0}, {12906, -12, -25, 0}, {12906, -13, -25, 0}// 652 653 654
|
||||
, {12906, -13, -24, 0}, {12906, -13, -23, 0}, {12906, -13, -22, 0}// 655 656 657
|
||||
, {12906, -13, -21, 0}, {4971, -14, -22, 0}// 658 667
|
||||
};
|
||||
|
||||
[Constructable]
|
||||
public BlackthornStep2()
|
||||
{
|
||||
for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++)
|
||||
AddComponent(new AddonComponent(m_AddOnSimpleComponents[i, 0]), m_AddOnSimpleComponents[i, 1], m_AddOnSimpleComponents[i, 2], m_AddOnSimpleComponents[i, 3]);
|
||||
|
||||
AddComplexComponent((BaseAddon)this, 22000, 22, 11, 0, 667, -1, "", 1);// 1
|
||||
AddComplexComponent((BaseAddon)this, 22000, 22, 10, 0, 667, -1, "", 1);// 2
|
||||
AddComplexComponent((BaseAddon)this, 22000, 22, 9, 0, 667, -1, "", 1);// 3
|
||||
AddComplexComponent((BaseAddon)this, 22000, 22, 7, 0, 667, -1, "", 1);// 4
|
||||
AddComplexComponent((BaseAddon)this, 22000, 22, 8, 0, 667, -1, "", 1);// 5
|
||||
AddComplexComponent((BaseAddon)this, 6585, 19, 16, 1, 2721, -1, "", 1);// 12
|
||||
AddComplexComponent((BaseAddon)this, 6585, 20, 16, 1, 2721, -1, "", 1);// 13
|
||||
AddComplexComponent((BaseAddon)this, 6585, 21, 16, 1, 2721, -1, "", 1);// 14
|
||||
AddComplexComponent((BaseAddon)this, 6585, 21, 16, 0, 2721, -1, "", 1);// 15
|
||||
AddComplexComponent((BaseAddon)this, 6585, 20, 16, 1, 2721, -1, "", 1);// 16
|
||||
AddComplexComponent((BaseAddon)this, 6585, 20, 16, 0, 2721, -1, "", 1);// 17
|
||||
AddComplexComponent((BaseAddon)this, 6584, 19, 16, 0, 2721, -1, "", 1);// 19
|
||||
AddComplexComponent((BaseAddon)this, 6584, 20, 16, 0, 2721, -1, "", 1);// 20
|
||||
AddComplexComponent((BaseAddon)this, 6584, 21, 16, 1, 2721, -1, "", 1);// 21
|
||||
AddComplexComponent((BaseAddon)this, 6586, 21, 16, 0, 2721, -1, "", 1);// 23
|
||||
AddComplexComponent((BaseAddon)this, 6586, 20, 16, 0, 2721, -1, "", 1);// 24
|
||||
AddComplexComponent((BaseAddon)this, 6586, 19, 16, 0, 2721, -1, "", 1);// 25
|
||||
AddComplexComponent((BaseAddon)this, 6585, 21, 15, 0, 2721, -1, "", 1);// 26
|
||||
AddComplexComponent((BaseAddon)this, 6585, 20, 15, 0, 2721, -1, "", 1);// 27
|
||||
AddComplexComponent((BaseAddon)this, 6585, 19, 15, 0, 2721, -1, "", 1);// 28
|
||||
AddComplexComponent((BaseAddon)this, 17738, 13, 12, 0, 1910, -1, "", 1);// 29
|
||||
AddComplexComponent((BaseAddon)this, 22000, 21, 12, 0, 667, -1, "", 1);// 30
|
||||
AddComplexComponent((BaseAddon)this, 22000, 21, 13, 0, 667, -1, "", 1);// 31
|
||||
AddComplexComponent((BaseAddon)this, 22000, 21, 14, 0, 667, -1, "", 1);// 32
|
||||
AddComplexComponent((BaseAddon)this, 22000, 16, 13, 0, 667, -1, "", 1);// 33
|
||||
AddComplexComponent((BaseAddon)this, 22000, 15, 13, 0, 667, -1, "", 1);// 34
|
||||
AddComplexComponent((BaseAddon)this, 22000, 14, 13, 0, 667, -1, "", 1);// 35
|
||||
AddComplexComponent((BaseAddon)this, 22000, 20, 12, 0, 667, -1, "", 1);// 36
|
||||
AddComplexComponent((BaseAddon)this, 22000, 19, 12, 0, 667, -1, "", 1);// 37
|
||||
AddComplexComponent((BaseAddon)this, 22000, 19, 13, 0, 667, -1, "", 1);// 38
|
||||
AddComplexComponent((BaseAddon)this, 22000, 20, 13, 0, 667, -1, "", 1);// 39
|
||||
AddComplexComponent((BaseAddon)this, 22000, 20, 14, 0, 667, -1, "", 1);// 40
|
||||
AddComplexComponent((BaseAddon)this, 22000, 19, 14, 0, 667, -1, "", 1);// 41
|
||||
AddComplexComponent((BaseAddon)this, 22000, 18, 14, 0, 667, -1, "", 1);// 42
|
||||
AddComplexComponent((BaseAddon)this, 22000, 18, 13, 0, 667, -1, "", 1);// 43
|
||||
AddComplexComponent((BaseAddon)this, 22000, 18, 12, 0, 667, -1, "", 1);// 44
|
||||
AddComplexComponent((BaseAddon)this, 22000, 17, 13, 0, 667, -1, "", 1);// 45
|
||||
AddComplexComponent((BaseAddon)this, 22000, 17, 12, 0, 667, -1, "", 1);// 46
|
||||
AddComplexComponent((BaseAddon)this, 22000, 16, 12, 0, 667, -1, "", 1);// 47
|
||||
AddComplexComponent((BaseAddon)this, 22000, 15, 12, 0, 667, -1, "", 1);// 48
|
||||
AddComplexComponent((BaseAddon)this, 22000, 14, 12, 0, 667, -1, "", 1);// 49
|
||||
AddComplexComponent((BaseAddon)this, 17729, 13, 13, 5, 1910, -1, "", 1);// 50
|
||||
AddComplexComponent((BaseAddon)this, 17724, 13, 12, 5, 1910, -1, "", 1);// 51
|
||||
AddComplexComponent((BaseAddon)this, 17729, 13, 12, 0, 1910, -1, "", 1);// 52
|
||||
AddComplexComponent((BaseAddon)this, 6585, 21, 4, 0, 2721, -1, "", 1);// 61
|
||||
AddComplexComponent((BaseAddon)this, 6585, 21, 5, 0, 2721, -1, "", 1);// 62
|
||||
AddComplexComponent((BaseAddon)this, 6585, 20, 4, 2, 2721, -1, "", 1);// 63
|
||||
AddComplexComponent((BaseAddon)this, 6584, 20, 4, 1, 2721, -1, "", 1);// 64
|
||||
AddComplexComponent((BaseAddon)this, 6584, 20, 3, 0, 2721, -1, "", 1);// 65
|
||||
AddComplexComponent((BaseAddon)this, 6584, 20, 4, 1, 2721, -1, "", 1);// 66
|
||||
AddComplexComponent((BaseAddon)this, 6584, 19, 4, 0, 2721, -1, "", 1);// 67
|
||||
AddComplexComponent((BaseAddon)this, 6584, 19, 5, 1, 2721, -1, "", 1);// 68
|
||||
AddComplexComponent((BaseAddon)this, 6585, 19, 5, 0, 2721, -1, "", 1);// 69
|
||||
AddComplexComponent((BaseAddon)this, 6585, 19, 4, 0, 2721, -1, "", 1);// 70
|
||||
AddComplexComponent((BaseAddon)this, 6585, 20, 5, 0, 2721, -1, "", 1);// 71
|
||||
AddComplexComponent((BaseAddon)this, 6585, 19, 4, 0, 2721, -1, "", 1);// 72
|
||||
AddComplexComponent((BaseAddon)this, 6571, 19, 10, 0, 0, 1, "", 1);// 73
|
||||
AddComplexComponent((BaseAddon)this, 6571, 14, 6, 0, 0, 1, "", 1);// 74
|
||||
AddComplexComponent((BaseAddon)this, 40832, 18, 10, 0, 2076, -1, "", 1);// 75
|
||||
AddComplexComponent((BaseAddon)this, 22000, 21, 10, 0, 667, -1, "", 1);// 76
|
||||
AddComplexComponent((BaseAddon)this, 22000, 21, 11, 0, 667, -1, "", 1);// 77
|
||||
AddComplexComponent((BaseAddon)this, 22000, 21, 5, 0, 667, -1, "", 1);// 78
|
||||
AddComplexComponent((BaseAddon)this, 22000, 19, 7, 0, 667, -1, "", 1);// 79
|
||||
AddComplexComponent((BaseAddon)this, 22000, 19, 8, 0, 667, -1, "", 1);// 80
|
||||
AddComplexComponent((BaseAddon)this, 22000, 20, 8, 0, 667, -1, "", 1);// 81
|
||||
AddComplexComponent((BaseAddon)this, 22000, 20, 7, 0, 667, -1, "", 1);// 82
|
||||
AddComplexComponent((BaseAddon)this, 22000, 21, 6, 0, 667, -1, "", 1);// 83
|
||||
AddComplexComponent((BaseAddon)this, 22000, 21, 7, 0, 667, -1, "", 1);// 84
|
||||
AddComplexComponent((BaseAddon)this, 22000, 21, 8, 0, 667, -1, "", 1);// 85
|
||||
AddComplexComponent((BaseAddon)this, 22000, 21, 9, 0, 667, -1, "", 1);// 86
|
||||
AddComplexComponent((BaseAddon)this, 22000, 20, 9, 0, 667, -1, "", 1);// 87
|
||||
AddComplexComponent((BaseAddon)this, 22000, 19, 9, 0, 667, -1, "", 1);// 88
|
||||
AddComplexComponent((BaseAddon)this, 22000, 20, 10, 0, 667, -1, "", 1);// 89
|
||||
AddComplexComponent((BaseAddon)this, 22000, 19, 10, 0, 667, -1, "", 1);// 90
|
||||
AddComplexComponent((BaseAddon)this, 22000, 19, 11, 0, 667, -1, "", 1);// 91
|
||||
AddComplexComponent((BaseAddon)this, 22000, 20, 11, 0, 667, -1, "", 1);// 92
|
||||
AddComplexComponent((BaseAddon)this, 22000, 18, 11, 0, 667, -1, "", 1);// 93
|
||||
AddComplexComponent((BaseAddon)this, 22000, 18, 10, 0, 667, -1, "", 1);// 94
|
||||
AddComplexComponent((BaseAddon)this, 22000, 18, 9, 0, 667, -1, "", 1);// 95
|
||||
AddComplexComponent((BaseAddon)this, 22000, 18, 8, 0, 667, -1, "", 1);// 96
|
||||
AddComplexComponent((BaseAddon)this, 22000, 18, 7, 0, 667, -1, "", 1);// 97
|
||||
AddComplexComponent((BaseAddon)this, 22000, 17, 11, 0, 667, -1, "", 1);// 98
|
||||
AddComplexComponent((BaseAddon)this, 22000, 17, 10, 0, 667, -1, "", 1);// 99
|
||||
AddComplexComponent((BaseAddon)this, 22000, 17, 9, 0, 667, -1, "", 1);// 100
|
||||
AddComplexComponent((BaseAddon)this, 22000, 17, 8, 0, 667, -1, "", 1);// 101
|
||||
AddComplexComponent((BaseAddon)this, 22000, 17, 7, 0, 667, -1, "", 1);// 102
|
||||
AddComplexComponent((BaseAddon)this, 22000, 18, 6, 0, 667, -1, "", 1);// 103
|
||||
AddComplexComponent((BaseAddon)this, 22000, 19, 6, 0, 667, -1, "", 1);// 104
|
||||
AddComplexComponent((BaseAddon)this, 22000, 20, 6, 0, 667, -1, "", 1);// 105
|
||||
AddComplexComponent((BaseAddon)this, 22000, 20, 5, 0, 667, -1, "", 1);// 106
|
||||
AddComplexComponent((BaseAddon)this, 22000, 19, 5, 0, 667, -1, "", 1);// 107
|
||||
AddComplexComponent((BaseAddon)this, 22000, 18, 5, 0, 667, -1, "", 1);// 108
|
||||
AddComplexComponent((BaseAddon)this, 22000, 17, 6, 0, 667, -1, "", 1);// 109
|
||||
AddComplexComponent((BaseAddon)this, 22000, 16, 6, 0, 667, -1, "", 1);// 110
|
||||
AddComplexComponent((BaseAddon)this, 22000, 16, 7, 0, 667, -1, "", 1);// 111
|
||||
AddComplexComponent((BaseAddon)this, 22000, 16, 8, 0, 667, -1, "", 1);// 112
|
||||
AddComplexComponent((BaseAddon)this, 22000, 16, 9, 0, 667, -1, "", 1);// 113
|
||||
AddComplexComponent((BaseAddon)this, 22000, 16, 10, 0, 667, -1, "", 1);// 114
|
||||
AddComplexComponent((BaseAddon)this, 22000, 16, 11, 0, 667, -1, "", 1);// 115
|
||||
AddComplexComponent((BaseAddon)this, 22000, 15, 11, 0, 667, -1, "", 1);// 116
|
||||
AddComplexComponent((BaseAddon)this, 22000, 15, 10, 0, 667, -1, "", 1);// 117
|
||||
AddComplexComponent((BaseAddon)this, 22000, 15, 9, 0, 667, -1, "", 1);// 118
|
||||
AddComplexComponent((BaseAddon)this, 22000, 15, 8, 0, 667, -1, "", 1);// 119
|
||||
AddComplexComponent((BaseAddon)this, 22000, 15, 7, 0, 667, -1, "", 1);// 120
|
||||
AddComplexComponent((BaseAddon)this, 22000, 15, 6, 0, 667, -1, "", 1);// 121
|
||||
AddComplexComponent((BaseAddon)this, 22000, 17, 5, 0, 667, -1, "", 1);// 122
|
||||
AddComplexComponent((BaseAddon)this, 22000, 16, 5, 0, 667, -1, "", 1);// 123
|
||||
AddComplexComponent((BaseAddon)this, 22000, 15, 5, 0, 667, -1, "", 1);// 124
|
||||
AddComplexComponent((BaseAddon)this, 22000, 14, 5, 0, 667, -1, "", 1);// 125
|
||||
AddComplexComponent((BaseAddon)this, 22000, 14, 6, 0, 667, -1, "", 1);// 126
|
||||
AddComplexComponent((BaseAddon)this, 22000, 14, 7, 0, 667, -1, "", 1);// 127
|
||||
AddComplexComponent((BaseAddon)this, 22000, 14, 9, 0, 667, -1, "", 1);// 128
|
||||
AddComplexComponent((BaseAddon)this, 22000, 14, 10, 0, 667, -1, "", 1);// 129
|
||||
AddComplexComponent((BaseAddon)this, 22000, 14, 11, 0, 667, -1, "", 1);// 130
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 11, 0, 667, -1, "", 1);// 131
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 10, 0, 667, -1, "", 1);// 132
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 9, 0, 667, -1, "", 1);// 133
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 8, 0, 667, -1, "", 1);// 134
|
||||
AddComplexComponent((BaseAddon)this, 22000, 14, 8, 0, 667, -1, "", 1);// 135
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 7, 0, 667, -1, "", 1);// 136
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 6, 0, 667, -1, "", 1);// 137
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 5, 0, 667, -1, "", 1);// 138
|
||||
AddComplexComponent((BaseAddon)this, 17724, 13, 11, 5, 1910, -1, "", 1);// 139
|
||||
AddComplexComponent((BaseAddon)this, 17724, 13, 10, 10, 1910, -1, "", 1);// 140
|
||||
AddComplexComponent((BaseAddon)this, 17724, 13, 9, 5, 1910, -1, "", 1);// 141
|
||||
AddComplexComponent((BaseAddon)this, 17734, 13, 8, 10, 1910, -1, "", 1);// 142
|
||||
AddComplexComponent((BaseAddon)this, 17714, 13, 7, 5, 1910, -1, "", 1);// 143
|
||||
AddComplexComponent((BaseAddon)this, 17725, 13, 6, 0, 1910, -1, "", 1);// 144
|
||||
AddComplexComponent((BaseAddon)this, 17738, 13, 11, 0, 1910, -1, "", 1);// 145
|
||||
AddComplexComponent((BaseAddon)this, 17741, 13, 10, 0, 1910, -1, "", 1);// 146
|
||||
AddComplexComponent((BaseAddon)this, 17739, 13, 9, 0, 1910, -1, "", 1);// 147
|
||||
AddComplexComponent((BaseAddon)this, 17737, 13, 8, 0, 1910, -1, "", 1);// 148
|
||||
AddComplexComponent((BaseAddon)this, 17732, 13, 7, 0, 1910, -1, "", 1);// 149
|
||||
AddComplexComponent((BaseAddon)this, 17730, 13, 6, 0, 1910, -1, "", 1);// 150
|
||||
AddComplexComponent((BaseAddon)this, 17747, 13, 5, 0, 1910, -1, "", 1);// 151
|
||||
AddComplexComponent((BaseAddon)this, 4958, -9, 12, 0, 2429, -1, "", 1);// 169
|
||||
AddComplexComponent((BaseAddon)this, 4957, -9, 13, 0, 2429, -1, "", 1);// 170
|
||||
AddComplexComponent((BaseAddon)this, 4960, -10, 9, 0, 2429, -1, "", 1);// 176
|
||||
AddComplexComponent((BaseAddon)this, 4953, -9, 9, 0, 2429, -1, "", 1);// 177
|
||||
AddComplexComponent((BaseAddon)this, 4952, -9, 11, 0, 2429, -1, "", 1);// 178
|
||||
AddComplexComponent((BaseAddon)this, 4960, -7, 5, 4, 2429, -1, "", 1);// 198
|
||||
AddComplexComponent((BaseAddon)this, 4963, -7, 5, 0, 2429, -1, "", 1);// 200
|
||||
AddComplexComponent((BaseAddon)this, 4962, -8, 5, 2, 2429, -1, "", 1);// 201
|
||||
AddComplexComponent((BaseAddon)this, 4952, -9, 5, 2, 2429, -1, "", 1);// 202
|
||||
AddComplexComponent((BaseAddon)this, 4970, -7, 5, 2, 2429, -1, "", 1);// 203
|
||||
AddComplexComponent((BaseAddon)this, 4967, -8, 5, 0, 2429, -1, "", 1);// 204
|
||||
AddComplexComponent((BaseAddon)this, 4957, -17, 8, 3, 2429, -1, "", 1);// 379
|
||||
AddComplexComponent((BaseAddon)this, 4958, -14, 9, 3, 2429, -1, "", 1);// 380
|
||||
AddComplexComponent((BaseAddon)this, 4962, -18, 0, 3, 2429, -1, "", 1);// 381
|
||||
AddComplexComponent((BaseAddon)this, 4950, -18, 3, 3, 2429, -1, "", 1);// 382
|
||||
AddComplexComponent((BaseAddon)this, 4962, -18, 7, 3, 2429, -1, "", 1);// 383
|
||||
AddComplexComponent((BaseAddon)this, 4960, -18, -2, 3, 2429, -1, "", 1);// 384
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, -4, 0, 2429, -1, "", 1);// 385
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, -3, 0, 2429, -1, "", 1);// 386
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, -2, 0, 2429, -1, "", 1);// 387
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, -1, 0, 2429, -1, "", 1);// 388
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, 0, 0, 2429, -1, "", 1);// 389
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, 1, 0, 2429, -1, "", 1);// 390
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, 2, 0, 2429, -1, "", 1);// 391
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, 4, 0, 2429, -1, "", 1);// 393
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, 5, 0, 2429, -1, "", 1);// 394
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, 6, 0, 2429, -1, "", 1);// 395
|
||||
AddComplexComponent((BaseAddon)this, 4963, -17, 7, 0, 2429, -1, "", 1);// 397
|
||||
AddComplexComponent((BaseAddon)this, 4963, -17, 8, 0, 2429, -1, "", 1);// 398
|
||||
AddComplexComponent((BaseAddon)this, 4963, -16, 8, 0, 2429, -1, "", 1);// 399
|
||||
AddComplexComponent((BaseAddon)this, 4963, -15, 8, 0, 2429, -1, "", 1);// 400
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, 9, 0, 2429, -1, "", 1);// 401
|
||||
AddComplexComponent((BaseAddon)this, 4963, -13, 9, 0, 2429, -1, "", 1);// 402
|
||||
AddComplexComponent((BaseAddon)this, 4963, -12, 9, 0, 2429, -1, "", 1);// 403
|
||||
AddComplexComponent((BaseAddon)this, 4963, -11, 9, 0, 2429, -1, "", 1);// 404
|
||||
AddComplexComponent((BaseAddon)this, 4961, -11, 9, 0, 2429, -1, "", 1);// 405
|
||||
AddComplexComponent((BaseAddon)this, 4960, -12, 3, 3, 2429, -1, "", 1);// 433
|
||||
AddComplexComponent((BaseAddon)this, 4950, -14, -2, 3, 2429, -1, "", 1);// 434
|
||||
AddComplexComponent((BaseAddon)this, 4967, -14, -1, 0, 2429, -1, "", 1);// 435
|
||||
AddComplexComponent((BaseAddon)this, 4967, -14, -3, 0, 2429, -1, "", 1);// 436
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, -4, 0, 2429, -1, "", 1);// 439
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, -2, 0, 2429, -1, "", 1);// 440
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, 0, 0, 2429, -1, "", 1);// 441
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, 1, 0, 2429, -1, "", 1);// 442
|
||||
AddComplexComponent((BaseAddon)this, 4944, -14, 2, 0, 2429, -1, "", 1);// 443
|
||||
AddComplexComponent((BaseAddon)this, 4963, -13, 2, 0, 2429, -1, "", 1);// 444
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, 3, 0, 2429, -1, "", 1);// 445
|
||||
AddComplexComponent((BaseAddon)this, 4963, -13, 3, 0, 2429, -1, "", 1);// 446
|
||||
AddComplexComponent((BaseAddon)this, 4963, -12, 3, 0, 2429, -1, "", 1);// 447
|
||||
AddComplexComponent((BaseAddon)this, 4963, -11, 3, 0, 2429, -1, "", 1);// 448
|
||||
AddComplexComponent((BaseAddon)this, 4963, -11, 3, 5, 2429, -1, "", 1);// 449
|
||||
AddComplexComponent((BaseAddon)this, 4956, -11, 3, 0, 2429, -1, "", 1);// 450
|
||||
AddComplexComponent((BaseAddon)this, 4960, -19, -14, 3, 2429, -1, "", 1);// 510
|
||||
AddComplexComponent((BaseAddon)this, 4950, -18, -5, 3, 2429, -1, "", 1);// 511
|
||||
AddComplexComponent((BaseAddon)this, 4962, -19, -20, 3, 2429, -1, "", 1);// 512
|
||||
AddComplexComponent((BaseAddon)this, 4962, -18, -12, 3, 2429, -1, "", 1);// 513
|
||||
AddComplexComponent((BaseAddon)this, 4962, -19, -17, 3, 2429, -1, "", 1);// 514
|
||||
AddComplexComponent((BaseAddon)this, 4960, -18, -8, 3, 2429, -1, "", 1);// 515
|
||||
AddComplexComponent((BaseAddon)this, 4963, -19, -20, 0, 2429, -1, "", 1);// 516
|
||||
AddComplexComponent((BaseAddon)this, 4963, -19, -19, 0, 2429, -1, "", 1);// 517
|
||||
AddComplexComponent((BaseAddon)this, 4963, -19, -18, 0, 2429, -1, "", 1);// 518
|
||||
AddComplexComponent((BaseAddon)this, 4963, -19, -17, 0, 2429, -1, "", 1);// 519
|
||||
AddComplexComponent((BaseAddon)this, 4963, -19, -16, 0, 2429, -1, "", 1);// 520
|
||||
AddComplexComponent((BaseAddon)this, 4963, -19, -15, 0, 2429, -1, "", 1);// 521
|
||||
AddComplexComponent((BaseAddon)this, 4963, -19, -14, 0, 2429, -1, "", 1);// 522
|
||||
AddComplexComponent((BaseAddon)this, 4963, -19, -13, 0, 2429, -1, "", 1);// 523
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, -12, 0, 2429, -1, "", 1);// 524
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, -11, 0, 2429, -1, "", 1);// 525
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, -10, 0, 2429, -1, "", 1);// 526
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, -9, 0, 2429, -1, "", 1);// 527
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, -8, 0, 2429, -1, "", 1);// 528
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, -7, 0, 2429, -1, "", 1);// 529
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, -6, 0, 2429, -1, "", 1);// 530
|
||||
AddComplexComponent((BaseAddon)this, 4963, -18, -5, 0, 2429, -1, "", 1);// 531
|
||||
AddComplexComponent((BaseAddon)this, 4960, -14, -16, 2, 2429, -1, "", 1);// 592
|
||||
AddComplexComponent((BaseAddon)this, 4960, -14, -15, 2, 2429, -1, "", 1);// 593
|
||||
AddComplexComponent((BaseAddon)this, 4960, -14, -10, 3, 2429, -1, "", 1);// 594
|
||||
AddComplexComponent((BaseAddon)this, 4960, -14, -19, 3, 2429, -1, "", 1);// 595
|
||||
AddComplexComponent((BaseAddon)this, 4949, -14, -13, 2, 2429, -1, "", 1);// 596
|
||||
AddComplexComponent((BaseAddon)this, 4946, -14, -18, 3, 2429, -1, "", 1);// 597
|
||||
AddComplexComponent((BaseAddon)this, 4950, -14, -6, 0, 2429, -1, "", 1);// 598
|
||||
AddComplexComponent((BaseAddon)this, 4966, -14, -20, 3, 2429, -1, "", 1);// 599
|
||||
AddComplexComponent((BaseAddon)this, 4966, -14, -17, 3, 2429, -1, "", 1);// 600
|
||||
AddComplexComponent((BaseAddon)this, 4966, -14, -12, 3, 2429, -1, "", 1);// 601
|
||||
AddComplexComponent((BaseAddon)this, 4966, -14, -11, 3, 2429, -1, "", 1);// 602
|
||||
AddComplexComponent((BaseAddon)this, 4966, -14, -8, 3, 2429, -1, "", 1);// 603
|
||||
AddComplexComponent((BaseAddon)this, 4967, -14, -9, 0, 2429, -1, "", 1);// 605
|
||||
AddComplexComponent((BaseAddon)this, 4967, -14, -7, 0, 2429, -1, "", 1);// 606
|
||||
AddComplexComponent((BaseAddon)this, 4967, -14, -14, 0, 2429, -1, "", 1);// 607
|
||||
AddComplexComponent((BaseAddon)this, 4967, -14, -13, 0, 2429, -1, "", 1);// 608
|
||||
AddComplexComponent((BaseAddon)this, 4967, -14, -15, 0, 2429, -1, "", 1);// 609
|
||||
AddComplexComponent((BaseAddon)this, 4967, -14, -16, 0, 2429, -1, "", 1);// 610
|
||||
AddComplexComponent((BaseAddon)this, 4969, -14, -16, 0, 2429, -1, "", 1);// 611
|
||||
AddComplexComponent((BaseAddon)this, 4969, -14, -15, 0, 2429, -1, "", 1);// 612
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, -20, 0, 2429, -1, "", 1);// 615
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, -19, 0, 2429, -1, "", 1);// 616
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, -18, 0, 2429, -1, "", 1);// 617
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, -17, 0, 2429, -1, "", 1);// 618
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, -12, 0, 2429, -1, "", 1);// 619
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, -11, 0, 2429, -1, "", 1);// 620
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, -10, 0, 2429, -1, "", 1);// 621
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, -8, 0, 2429, -1, "", 1);// 622
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, -5, 0, 2429, -1, "", 1);// 623
|
||||
AddComplexComponent((BaseAddon)this, 4960, -20, -24, 3, 2429, -1, "", 1);// 633
|
||||
AddComplexComponent((BaseAddon)this, 4960, -21, -24, 3, 2429, -1, "", 1);// 634
|
||||
AddComplexComponent((BaseAddon)this, 4963, -21, -25, 0, 2429, -1, "", 1);// 635
|
||||
AddComplexComponent((BaseAddon)this, 4963, -21, -24, 0, 2429, -1, "", 1);// 636
|
||||
AddComplexComponent((BaseAddon)this, 4963, -20, -24, 0, 2429, -1, "", 1);// 637
|
||||
AddComplexComponent((BaseAddon)this, 4963, -20, -23, 0, 2429, -1, "", 1);// 638
|
||||
AddComplexComponent((BaseAddon)this, 4963, -20, -22, 0, 2429, -1, "", 1);// 639
|
||||
AddComplexComponent((BaseAddon)this, 4963, -20, -21, 0, 2429, -1, "", 1);// 640
|
||||
AddComplexComponent((BaseAddon)this, 4950, -14, -21, 7, 2429, -1, "", 1);// 659
|
||||
AddComplexComponent((BaseAddon)this, 4961, -14, -21, 2, 2429, -1, "", 1);// 660
|
||||
AddComplexComponent((BaseAddon)this, 4960, -14, -24, 2, 2429, -1, "", 1);// 661
|
||||
AddComplexComponent((BaseAddon)this, 4960, -14, -25, 3, 2429, -1, "", 1);// 662
|
||||
AddComplexComponent((BaseAddon)this, 4948, -14, -22, 2, 2429, -1, "", 1);// 663
|
||||
AddComplexComponent((BaseAddon)this, 4966, -14, -23, 3, 2429, -1, "", 1);// 664
|
||||
AddComplexComponent((BaseAddon)this, 4967, -14, -21, 0, 2429, -1, "", 1);// 665
|
||||
AddComplexComponent((BaseAddon)this, 4967, -14, -24, 0, 2429, -1, "", 1);// 666
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, -25, 0, 2429, -1, "", 1);// 668
|
||||
AddComplexComponent((BaseAddon)this, 4963, -14, -23, 0, 2429, -1, "", 1);// 669
|
||||
}
|
||||
|
||||
public BlackthornStep2(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0); // Version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,532 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class BlackthornStep3 : BlackthornBaseAddon
|
||||
{
|
||||
public static BlackthornStep3 InstanceTram { get; set; }
|
||||
public static BlackthornStep3 InstanceFel { get; set; }
|
||||
|
||||
private static int[,] m_AddOnSimpleComponents = new int[,]
|
||||
{
|
||||
{6093, 11, -4, 0}, {6093, 12, 0, 0}, {6093, 10, 1, 0}// 1 2 3
|
||||
, {6093, 10, -2, 0}, {6670, 10, -9, 0}, {6093, 12, -7, 0}// 4 55 67
|
||||
, {6093, 10, -7, 0}, {6093, 9, 3, 0}, {6093, 8, 3, 0}// 68 88 89
|
||||
, {6093, 9, 5, 0}, {6093, 7, 5, 0}, {6093, 7, 0, 0}// 90 91 92
|
||||
, {6093, 5, 1, 0}, {6093, 8, -2, 0}, {6093, 5, -2, 0}// 93 94 95
|
||||
, {6093, 9, -5, 0}, {6093, 6, -5, 0}, {6093, 4, -5, 0}// 96 97 98
|
||||
, {6093, 2, -3, 0}, {6093, 1, -5, 0}, {6093, -3, -4, 0}// 99 100 101
|
||||
, {6093, -2, -2, 0}, {6093, -4, -2, 0}, {6093, -6, -5, 0}// 102 103 104
|
||||
, {6093, 3, 0, 0}, {6093, 4, 0, 0}, {6093, 4, 1, 0}// 105 106 107
|
||||
, {6093, 2, 1, 0}, {6093, 1, 0, 0}, {6093, -1, 0, 0}// 108 109 110
|
||||
, {6093, -3, 0, 0}, {6093, -5, 1, 0}, {6093, 8, -7, 0}// 111 112 281
|
||||
, {6093, 7, -8, 0}, {6093, 5, -8, 0}, {6093, 3, -8, 0}// 282 283 284
|
||||
, {6093, 0, -6, 0}, {6093, -1, -8, 0}, {6093, -4, -6, 0}// 285 286 287
|
||||
, {6093, -5, -8, 0}, {6093, -10, 5, 0}, {6093, -11, 4, 0}// 288 373 374
|
||||
, {6093, -10, 7, 0}, {6093, -9, 6, 0}, {6093, -12, 7, 0}// 375 376 377
|
||||
, {6093, -7, -2, 0}, {6093, -7, -1, 0}, {6093, -9, -3, 0}// 378 379 380
|
||||
, {6093, -7, -4, 0}, {6093, -7, 1, 0}, {6093, -10, 0, 0}// 381 382 383
|
||||
, {6093, -9, 1, 0}, {6093, -12, 0, 0}, {6093, -12, -4, 0}// 384 385 386
|
||||
, {6093, -7, -8, 0}, {6093, -9, -8, 0}, {6093, -11, -6, 0}// 489 490 491
|
||||
, {6093, -11, -8, 0}// 492
|
||||
};
|
||||
|
||||
[Constructable]
|
||||
public BlackthornStep3()
|
||||
{
|
||||
for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++)
|
||||
AddComponent(new AddonComponent(m_AddOnSimpleComponents[i, 0]), m_AddOnSimpleComponents[i, 1], m_AddOnSimpleComponents[i, 2], m_AddOnSimpleComponents[i, 3]);
|
||||
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, 8, 0, 2729, -1, "", 1);// 5
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, 7, 0, 2729, -1, "", 1);// 6
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, 6, 0, 2729, -1, "", 1);// 7
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, 5, 0, 2729, -1, "", 1);// 8
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, 4, 0, 2729, -1, "", 1);// 9
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, 3, 0, 2729, -1, "", 1);// 10
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, 8, 0, 2729, -1, "", 1);// 11
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, 7, 0, 2729, -1, "", 1);// 12
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, 6, 0, 2729, -1, "", 1);// 13
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, 5, 0, 2729, -1, "", 1);// 14
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, 4, 0, 2729, -1, "", 1);// 15
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, 3, 0, 2729, -1, "", 1);// 16
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, 8, 0, 2729, -1, "", 1);// 17
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, 7, 0, 2729, -1, "", 1);// 18
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, 6, 0, 2729, -1, "", 1);// 19
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, 5, 0, 2729, -1, "", 1);// 20
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, 4, 0, 2729, -1, "", 1);// 21
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, 3, 0, 2729, -1, "", 1);// 22
|
||||
AddComplexComponent((BaseAddon)this, 6077, 13, 2, 0, 2729, -1, "", 1);// 23
|
||||
AddComplexComponent((BaseAddon)this, 6077, 13, 1, 0, 2729, -1, "", 1);// 24
|
||||
AddComplexComponent((BaseAddon)this, 6077, 13, 0, 0, 2729, -1, "", 1);// 25
|
||||
AddComplexComponent((BaseAddon)this, 6077, 13, -1, 0, 2729, -1, "", 1);// 26
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, 2, 0, 2729, -1, "", 1);// 27
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, 1, 0, 2729, -1, "", 1);// 28
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, 0, 0, 2729, -1, "", 1);// 29
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, -1, 0, 2729, -1, "", 1);// 30
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, 2, 0, 2729, -1, "", 1);// 31
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, 1, 0, 2729, -1, "", 1);// 32
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, 0, 0, 2729, -1, "", 1);// 33
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, -1, 0, 2729, -1, "", 1);// 34
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, 2, 0, 2729, -1, "", 1);// 35
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, 1, 0, 2729, -1, "", 1);// 36
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, 0, 0, 2729, -1, "", 1);// 37
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, -1, 0, 2729, -1, "", 1);// 38
|
||||
AddComplexComponent((BaseAddon)this, 6077, 13, -2, 0, 2729, -1, "", 1);// 39
|
||||
AddComplexComponent((BaseAddon)this, 6077, 13, -3, 0, 2729, -1, "", 1);// 40
|
||||
AddComplexComponent((BaseAddon)this, 6077, 13, -4, 0, 2729, -1, "", 1);// 41
|
||||
AddComplexComponent((BaseAddon)this, 6077, 13, -5, 0, 2729, -1, "", 1);// 42
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, -2, 0, 2729, -1, "", 1);// 43
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, -3, 0, 2729, -1, "", 1);// 44
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, -4, 0, 2729, -1, "", 1);// 45
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, -5, 0, 2729, -1, "", 1);// 46
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, -2, 0, 2729, -1, "", 1);// 47
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, -3, 0, 2729, -1, "", 1);// 48
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, -4, 0, 2729, -1, "", 1);// 49
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, -5, 0, 2729, -1, "", 1);// 50
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, -2, 0, 2729, -1, "", 1);// 51
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, -3, 0, 2729, -1, "", 1);// 52
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, -4, 0, 2729, -1, "", 1);// 53
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, -5, 0, 2729, -1, "", 1);// 54
|
||||
AddComplexComponent((BaseAddon)this, 7073, 12, -7, 0, 2729, -1, "", 1);// 56
|
||||
AddComplexComponent((BaseAddon)this, 7072, 11, -7, 0, 2729, -1, "", 1);// 57
|
||||
AddComplexComponent((BaseAddon)this, 7074, 10, -7, 0, 2729, -1, "", 1);// 58
|
||||
AddComplexComponent((BaseAddon)this, 7076, 10, -8, 0, 2729, -1, "", 1);// 59
|
||||
AddComplexComponent((BaseAddon)this, 7077, 10, -9, 0, 2729, -1, "", 1);// 60
|
||||
AddComplexComponent((BaseAddon)this, 7079, 11, -8, 0, 2729, -1, "", 1);// 61
|
||||
AddComplexComponent((BaseAddon)this, 7080, 12, -8, 0, 2729, -1, "", 1);// 62
|
||||
AddComplexComponent((BaseAddon)this, 7080, 11, -9, 0, 2729, -1, "", 1);// 63
|
||||
AddComplexComponent((BaseAddon)this, 7080, 12, -9, 0, 2729, -1, "", 1);// 64
|
||||
AddComplexComponent((BaseAddon)this, 17778, 11, -9, 0, 1152, -1, "", 1);// 65
|
||||
AddComplexComponent((BaseAddon)this, 17778, 12, -9, 0, 1152, -1, "", 1);// 66
|
||||
AddComplexComponent((BaseAddon)this, 6077, 13, -8, 0, 2729, -1, "", 1);// 69
|
||||
AddComplexComponent((BaseAddon)this, 6077, 13, -9, 0, 2729, -1, "", 1);// 70
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, -8, 0, 2729, -1, "", 1);// 71
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, -9, 0, 2729, -1, "", 1);// 72
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, -8, 0, 2729, -1, "", 1);// 73
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, -9, 0, 2729, -1, "", 1);// 74
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, -8, 0, 2729, -1, "", 1);// 75
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, -9, 0, 2729, -1, "", 1);// 76
|
||||
AddComplexComponent((BaseAddon)this, 6077, 13, -6, 0, 2729, -1, "", 1);// 77
|
||||
AddComplexComponent((BaseAddon)this, 6077, 13, -7, 0, 2729, -1, "", 1);// 78
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, -6, 0, 2729, -1, "", 1);// 79
|
||||
AddComplexComponent((BaseAddon)this, 6077, 12, -7, 0, 2729, -1, "", 1);// 80
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, -6, 0, 2729, -1, "", 1);// 81
|
||||
AddComplexComponent((BaseAddon)this, 6077, 11, -7, 0, 2729, -1, "", 1);// 82
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, -6, 0, 2729, -1, "", 1);// 83
|
||||
AddComplexComponent((BaseAddon)this, 6077, 10, -7, 0, 2729, -1, "", 1);// 84
|
||||
AddComplexComponent((BaseAddon)this, 7820, 4, -1, 0, 2729, -1, "", 1);// 85
|
||||
AddComplexComponent((BaseAddon)this, 7822, 3, -2, 0, 2729, -1, "", 1);// 86
|
||||
AddComplexComponent((BaseAddon)this, 7825, -2, -3, 0, 1152, -1, "", 1);// 87
|
||||
AddComplexComponent((BaseAddon)this, 22300, 9, 0, 0, 1152, -1, "", 1);// 113
|
||||
AddComplexComponent((BaseAddon)this, 22300, -6, -3, 0, 1152, -1, "", 1);// 114
|
||||
AddComplexComponent((BaseAddon)this, 22300, 1, -1, 0, 1152, -1, "", 1);// 115
|
||||
AddComplexComponent((BaseAddon)this, 7398, 8, 5, 0, 2729, -1, "", 1);// 116
|
||||
AddComplexComponent((BaseAddon)this, 6077, 6, 3, 0, 2729, -1, "", 1);// 117
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, 8, 0, 2729, -1, "", 1);// 118
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, 7, 0, 2729, -1, "", 1);// 119
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, 6, 0, 2729, -1, "", 1);// 120
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, 5, 0, 2729, -1, "", 1);// 121
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, 4, 0, 2729, -1, "", 1);// 122
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, 3, 0, 2729, -1, "", 1);// 123
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, 8, 0, 2729, -1, "", 1);// 124
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, 7, 0, 2729, -1, "", 1);// 125
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, 6, 0, 2729, -1, "", 1);// 126
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, 5, 0, 2729, -1, "", 1);// 127
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, 4, 0, 2729, -1, "", 1);// 128
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, 3, 0, 2729, -1, "", 1);// 129
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, 8, 0, 2729, -1, "", 1);// 130
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, 7, 0, 2729, -1, "", 1);// 131
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, 6, 0, 2729, -1, "", 1);// 132
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, 5, 0, 2729, -1, "", 1);// 133
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, 4, 0, 2729, -1, "", 1);// 134
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, 3, 0, 2729, -1, "", 1);// 135
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, 2, 0, 2729, -1, "", 1);// 136
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, 1, 0, 2729, -1, "", 1);// 137
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, 0, 0, 2729, -1, "", 1);// 138
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, -1, 0, 2729, -1, "", 1);// 139
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, 2, 0, 2729, -1, "", 1);// 140
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, 1, 0, 2729, -1, "", 1);// 141
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, 0, 0, 2729, -1, "", 1);// 142
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, -1, 0, 2729, -1, "", 1);// 143
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, 2, 0, 2729, -1, "", 1);// 144
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, 1, 0, 2729, -1, "", 1);// 145
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, 0, 0, 2729, -1, "", 1);// 146
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, -1, 0, 2729, -1, "", 1);// 147
|
||||
AddComplexComponent((BaseAddon)this, 6077, 6, 2, 0, 2729, -1, "", 1);// 148
|
||||
AddComplexComponent((BaseAddon)this, 6077, 6, 1, 0, 2729, -1, "", 1);// 149
|
||||
AddComplexComponent((BaseAddon)this, 6077, 6, 0, 0, 2729, -1, "", 1);// 150
|
||||
AddComplexComponent((BaseAddon)this, 6077, 6, -1, 0, 2729, -1, "", 1);// 151
|
||||
AddComplexComponent((BaseAddon)this, 6077, 5, 2, 0, 2729, -1, "", 1);// 152
|
||||
AddComplexComponent((BaseAddon)this, 6077, 5, 1, 0, 2729, -1, "", 1);// 153
|
||||
AddComplexComponent((BaseAddon)this, 6077, 5, 0, 0, 2729, -1, "", 1);// 154
|
||||
AddComplexComponent((BaseAddon)this, 6077, 5, -1, 0, 2729, -1, "", 1);// 155
|
||||
AddComplexComponent((BaseAddon)this, 6077, 4, 2, 0, 2729, -1, "", 1);// 156
|
||||
AddComplexComponent((BaseAddon)this, 6077, 4, 1, 0, 2729, -1, "", 1);// 157
|
||||
AddComplexComponent((BaseAddon)this, 6077, 4, 0, 0, 2729, -1, "", 1);// 158
|
||||
AddComplexComponent((BaseAddon)this, 6077, 4, -1, 0, 2729, -1, "", 1);// 159
|
||||
AddComplexComponent((BaseAddon)this, 6077, 3, 2, 0, 2729, -1, "", 1);// 160
|
||||
AddComplexComponent((BaseAddon)this, 6077, 3, 1, 0, 2729, -1, "", 1);// 161
|
||||
AddComplexComponent((BaseAddon)this, 6077, 3, 0, 0, 2729, -1, "", 1);// 162
|
||||
AddComplexComponent((BaseAddon)this, 6077, 3, -1, 0, 2729, -1, "", 1);// 163
|
||||
AddComplexComponent((BaseAddon)this, 6077, 2, 2, 0, 2729, -1, "", 1);// 164
|
||||
AddComplexComponent((BaseAddon)this, 6077, 2, 1, 0, 2729, -1, "", 1);// 165
|
||||
AddComplexComponent((BaseAddon)this, 6077, 2, 0, 0, 2729, -1, "", 1);// 166
|
||||
AddComplexComponent((BaseAddon)this, 6077, 2, -1, 0, 2729, -1, "", 1);// 167
|
||||
AddComplexComponent((BaseAddon)this, 6077, 1, 2, 0, 2729, -1, "", 1);// 168
|
||||
AddComplexComponent((BaseAddon)this, 6077, 1, 1, 0, 2729, -1, "", 1);// 169
|
||||
AddComplexComponent((BaseAddon)this, 6077, 1, 0, 0, 2729, -1, "", 1);// 170
|
||||
AddComplexComponent((BaseAddon)this, 6077, 1, -1, 0, 2729, -1, "", 1);// 171
|
||||
AddComplexComponent((BaseAddon)this, 6077, 0, 2, 0, 2729, -1, "", 1);// 172
|
||||
AddComplexComponent((BaseAddon)this, 6077, 0, 1, 0, 2729, -1, "", 1);// 173
|
||||
AddComplexComponent((BaseAddon)this, 6077, 0, 0, 0, 2729, -1, "", 1);// 174
|
||||
AddComplexComponent((BaseAddon)this, 6077, 0, -1, 0, 2729, -1, "", 1);// 175
|
||||
AddComplexComponent((BaseAddon)this, 6077, 0, -2, 0, 2729, -1, "", 1);// 176
|
||||
AddComplexComponent((BaseAddon)this, 6077, -1, 2, 0, 2729, -1, "", 1);// 177
|
||||
AddComplexComponent((BaseAddon)this, 6077, -1, 1, 0, 2729, -1, "", 1);// 178
|
||||
AddComplexComponent((BaseAddon)this, 6077, -1, 0, 0, 2729, -1, "", 1);// 179
|
||||
AddComplexComponent((BaseAddon)this, 6077, -1, -1, 0, 2729, -1, "", 1);// 180
|
||||
AddComplexComponent((BaseAddon)this, 6077, -1, -2, 0, 2729, -1, "", 1);// 181
|
||||
AddComplexComponent((BaseAddon)this, 6077, -2, 2, 0, 2729, -1, "", 1);// 182
|
||||
AddComplexComponent((BaseAddon)this, 6077, -2, 1, 0, 2729, -1, "", 1);// 183
|
||||
AddComplexComponent((BaseAddon)this, 6077, -2, 0, 0, 2729, -1, "", 1);// 184
|
||||
AddComplexComponent((BaseAddon)this, 6077, -2, -1, 0, 2729, -1, "", 1);// 185
|
||||
AddComplexComponent((BaseAddon)this, 6077, -2, -2, 0, 2729, -1, "", 1);// 186
|
||||
AddComplexComponent((BaseAddon)this, 6077, -3, 2, 0, 2729, -1, "", 1);// 187
|
||||
AddComplexComponent((BaseAddon)this, 6077, -3, 1, 0, 2729, -1, "", 1);// 188
|
||||
AddComplexComponent((BaseAddon)this, 6077, -3, 0, 0, 2729, -1, "", 1);// 189
|
||||
AddComplexComponent((BaseAddon)this, 6077, -3, -1, 0, 2729, -1, "", 1);// 190
|
||||
AddComplexComponent((BaseAddon)this, 6077, -3, -2, 0, 2729, -1, "", 1);// 191
|
||||
AddComplexComponent((BaseAddon)this, 6077, -4, 2, 0, 2729, -1, "", 1);// 192
|
||||
AddComplexComponent((BaseAddon)this, 6077, -4, 1, 0, 2729, -1, "", 1);// 193
|
||||
AddComplexComponent((BaseAddon)this, 6077, -4, 0, 0, 2729, -1, "", 1);// 194
|
||||
AddComplexComponent((BaseAddon)this, 6077, -4, -1, 0, 2729, -1, "", 1);// 195
|
||||
AddComplexComponent((BaseAddon)this, 6077, -4, -2, 0, 2729, -1, "", 1);// 196
|
||||
AddComplexComponent((BaseAddon)this, 6077, -5, 2, 0, 2729, -1, "", 1);// 197
|
||||
AddComplexComponent((BaseAddon)this, 6077, -5, 1, 0, 2729, -1, "", 1);// 198
|
||||
AddComplexComponent((BaseAddon)this, 6077, -5, 0, 0, 2729, -1, "", 1);// 199
|
||||
AddComplexComponent((BaseAddon)this, 6077, -5, -1, 0, 2729, -1, "", 1);// 200
|
||||
AddComplexComponent((BaseAddon)this, 6077, -5, -2, 0, 2729, -1, "", 1);// 201
|
||||
AddComplexComponent((BaseAddon)this, 6077, -6, 2, 0, 2729, -1, "", 1);// 202
|
||||
AddComplexComponent((BaseAddon)this, 6077, -6, 1, 0, 2729, -1, "", 1);// 203
|
||||
AddComplexComponent((BaseAddon)this, 6077, -6, 0, 0, 2729, -1, "", 1);// 204
|
||||
AddComplexComponent((BaseAddon)this, 6077, -6, -1, 0, 2729, -1, "", 1);// 205
|
||||
AddComplexComponent((BaseAddon)this, 6077, -6, -2, 0, 2729, -1, "", 1);// 206
|
||||
AddComplexComponent((BaseAddon)this, 6077, 1, -3, 0, 2729, -1, "", 1);// 207
|
||||
AddComplexComponent((BaseAddon)this, 6077, 1, -4, 0, 2729, -1, "", 1);// 208
|
||||
AddComplexComponent((BaseAddon)this, 6077, 1, -5, 0, 2729, -1, "", 1);// 209
|
||||
AddComplexComponent((BaseAddon)this, 6077, 0, -3, 0, 2729, -1, "", 1);// 210
|
||||
AddComplexComponent((BaseAddon)this, 6077, 0, -4, 0, 2729, -1, "", 1);// 211
|
||||
AddComplexComponent((BaseAddon)this, 6077, 0, -5, 0, 2729, -1, "", 1);// 212
|
||||
AddComplexComponent((BaseAddon)this, 6077, -1, -3, 0, 2729, -1, "", 1);// 213
|
||||
AddComplexComponent((BaseAddon)this, 6077, -1, -4, 0, 2729, -1, "", 1);// 214
|
||||
AddComplexComponent((BaseAddon)this, 6077, -1, -5, 0, 2729, -1, "", 1);// 215
|
||||
AddComplexComponent((BaseAddon)this, 6077, -2, -3, 0, 2729, -1, "", 1);// 216
|
||||
AddComplexComponent((BaseAddon)this, 6077, -2, -4, 0, 2729, -1, "", 1);// 217
|
||||
AddComplexComponent((BaseAddon)this, 6077, -2, -5, 0, 2729, -1, "", 1);// 218
|
||||
AddComplexComponent((BaseAddon)this, 6077, -3, -3, 0, 2729, -1, "", 1);// 219
|
||||
AddComplexComponent((BaseAddon)this, 6077, -3, -4, 0, 2729, -1, "", 1);// 220
|
||||
AddComplexComponent((BaseAddon)this, 6077, -3, -5, 0, 2729, -1, "", 1);// 221
|
||||
AddComplexComponent((BaseAddon)this, 6077, -4, -3, 0, 2729, -1, "", 1);// 222
|
||||
AddComplexComponent((BaseAddon)this, 6077, -4, -4, 0, 2729, -1, "", 1);// 223
|
||||
AddComplexComponent((BaseAddon)this, 6077, -4, -5, 0, 2729, -1, "", 1);// 224
|
||||
AddComplexComponent((BaseAddon)this, 6077, -5, -3, 0, 2729, -1, "", 1);// 225
|
||||
AddComplexComponent((BaseAddon)this, 6077, -5, -4, 0, 2729, -1, "", 1);// 226
|
||||
AddComplexComponent((BaseAddon)this, 6077, -5, -5, 0, 2729, -1, "", 1);// 227
|
||||
AddComplexComponent((BaseAddon)this, 6077, -6, -3, 0, 2729, -1, "", 1);// 228
|
||||
AddComplexComponent((BaseAddon)this, 6077, -6, -4, 0, 2729, -1, "", 1);// 229
|
||||
AddComplexComponent((BaseAddon)this, 6077, -6, -5, 0, 2729, -1, "", 1);// 230
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, -2, 0, 2729, -1, "", 1);// 231
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, -3, 0, 2729, -1, "", 1);// 232
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, -4, 0, 2729, -1, "", 1);// 233
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, -5, 0, 2729, -1, "", 1);// 234
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, -2, 0, 2729, -1, "", 1);// 235
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, -3, 0, 2729, -1, "", 1);// 236
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, -4, 0, 2729, -1, "", 1);// 237
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, -5, 0, 2729, -1, "", 1);// 238
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, -2, 0, 2729, -1, "", 1);// 239
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, -3, 0, 2729, -1, "", 1);// 240
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, -4, 0, 2729, -1, "", 1);// 241
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, -5, 0, 2729, -1, "", 1);// 242
|
||||
AddComplexComponent((BaseAddon)this, 6077, 6, -2, 0, 2729, -1, "", 1);// 243
|
||||
AddComplexComponent((BaseAddon)this, 6077, 6, -3, 0, 2729, -1, "", 1);// 244
|
||||
AddComplexComponent((BaseAddon)this, 6077, 6, -4, 0, 2729, -1, "", 1);// 245
|
||||
AddComplexComponent((BaseAddon)this, 6077, 6, -5, 0, 2729, -1, "", 1);// 246
|
||||
AddComplexComponent((BaseAddon)this, 6077, 5, -2, 0, 2729, -1, "", 1);// 247
|
||||
AddComplexComponent((BaseAddon)this, 6077, 5, -3, 0, 2729, -1, "", 1);// 248
|
||||
AddComplexComponent((BaseAddon)this, 6077, 5, -4, 0, 2729, -1, "", 1);// 249
|
||||
AddComplexComponent((BaseAddon)this, 6077, 5, -5, 0, 2729, -1, "", 1);// 250
|
||||
AddComplexComponent((BaseAddon)this, 6077, 4, -2, 0, 2729, -1, "", 1);// 251
|
||||
AddComplexComponent((BaseAddon)this, 6077, 4, -3, 0, 2729, -1, "", 1);// 252
|
||||
AddComplexComponent((BaseAddon)this, 6077, 4, -4, 0, 2729, -1, "", 1);// 253
|
||||
AddComplexComponent((BaseAddon)this, 6077, 4, -5, 0, 2729, -1, "", 1);// 254
|
||||
AddComplexComponent((BaseAddon)this, 6077, 3, -2, 0, 2729, -1, "", 1);// 255
|
||||
AddComplexComponent((BaseAddon)this, 6077, 3, -3, 0, 2729, -1, "", 1);// 256
|
||||
AddComplexComponent((BaseAddon)this, 6077, 3, -4, 0, 2729, -1, "", 1);// 257
|
||||
AddComplexComponent((BaseAddon)this, 6077, 3, -5, 0, 2729, -1, "", 1);// 258
|
||||
AddComplexComponent((BaseAddon)this, 6077, 2, -2, 0, 2729, -1, "", 1);// 259
|
||||
AddComplexComponent((BaseAddon)this, 6077, 2, -3, 0, 2729, -1, "", 1);// 260
|
||||
AddComplexComponent((BaseAddon)this, 6077, 2, -4, 0, 2729, -1, "", 1);// 261
|
||||
AddComplexComponent((BaseAddon)this, 6077, 2, -5, 0, 2729, -1, "", 1);// 262
|
||||
AddComplexComponent((BaseAddon)this, 6077, 1, -2, 0, 2729, -1, "", 1);// 263
|
||||
AddComplexComponent((BaseAddon)this, 17780, -4, -9, 0, 1152, -1, "", 1);// 264
|
||||
AddComplexComponent((BaseAddon)this, 17780, 1, -9, 0, 1152, -1, "", 1);// 265
|
||||
AddComplexComponent((BaseAddon)this, 17780, 9, -9, 0, 1152, -1, "", 1);// 266
|
||||
AddComplexComponent((BaseAddon)this, 17780, 8, -9, 0, 1152, -1, "", 1);// 267
|
||||
AddComplexComponent((BaseAddon)this, 17780, 8, -9, 0, 1152, -1, "", 1);// 268
|
||||
AddComplexComponent((BaseAddon)this, 6257, -1, -9, 5, 2729, -1, "", 1);// 269
|
||||
AddComplexComponent((BaseAddon)this, 17779, -5, -9, 0, 1152, -1, "", 1);// 270
|
||||
AddComplexComponent((BaseAddon)this, 17779, -2, -9, 0, 1152, -1, "", 1);// 271
|
||||
AddComplexComponent((BaseAddon)this, 17779, 2, -9, 0, 1152, -1, "", 1);// 272
|
||||
AddComplexComponent((BaseAddon)this, 17779, 7, -9, 0, 1152, -1, "", 1);// 273
|
||||
AddComplexComponent((BaseAddon)this, 17778, -6, -9, 0, 1152, -1, "", 1);// 274
|
||||
AddComplexComponent((BaseAddon)this, 17778, -3, -9, 0, 1152, -1, "", 1);// 275
|
||||
AddComplexComponent((BaseAddon)this, 17778, 0, -9, 0, 1152, -1, "", 1);// 276
|
||||
AddComplexComponent((BaseAddon)this, 17778, 3, -9, 0, 1152, -1, "", 1);// 277
|
||||
AddComplexComponent((BaseAddon)this, 17778, 4, -9, 0, 1152, -1, "", 1);// 278
|
||||
AddComplexComponent((BaseAddon)this, 17778, 5, -9, 0, 1152, -1, "", 1);// 279
|
||||
AddComplexComponent((BaseAddon)this, 17778, 6, -9, 0, 1152, -1, "", 1);// 280
|
||||
AddComplexComponent((BaseAddon)this, 22300, 5, -7, 0, 1152, -1, "", 1);// 289
|
||||
AddComplexComponent((BaseAddon)this, 6077, 1, -6, 0, 2729, -1, "", 1);// 290
|
||||
AddComplexComponent((BaseAddon)this, 6077, 1, -7, 0, 2729, -1, "", 1);// 291
|
||||
AddComplexComponent((BaseAddon)this, 6077, 1, -8, 0, 2729, -1, "", 1);// 292
|
||||
AddComplexComponent((BaseAddon)this, 6077, 0, -6, 0, 2729, -1, "", 1);// 293
|
||||
AddComplexComponent((BaseAddon)this, 6077, 0, -7, 0, 2729, -1, "", 1);// 294
|
||||
AddComplexComponent((BaseAddon)this, 6077, 0, -8, 0, 2729, -1, "", 1);// 295
|
||||
AddComplexComponent((BaseAddon)this, 6077, -1, -6, 0, 2729, -1, "", 1);// 296
|
||||
AddComplexComponent((BaseAddon)this, 6077, -1, -7, 0, 2729, -1, "", 1);// 297
|
||||
AddComplexComponent((BaseAddon)this, 6077, -1, -8, 0, 2729, -1, "", 1);// 298
|
||||
AddComplexComponent((BaseAddon)this, 6077, -2, -6, 0, 2729, -1, "", 1);// 299
|
||||
AddComplexComponent((BaseAddon)this, 6077, -2, -7, 0, 2729, -1, "", 1);// 300
|
||||
AddComplexComponent((BaseAddon)this, 6077, -2, -8, 0, 2729, -1, "", 1);// 301
|
||||
AddComplexComponent((BaseAddon)this, 6077, -3, -6, 0, 2729, -1, "", 1);// 302
|
||||
AddComplexComponent((BaseAddon)this, 6077, -3, -7, 0, 2729, -1, "", 1);// 303
|
||||
AddComplexComponent((BaseAddon)this, 6077, -3, -8, 0, 2729, -1, "", 1);// 304
|
||||
AddComplexComponent((BaseAddon)this, 6077, -4, -6, 0, 2729, -1, "", 1);// 305
|
||||
AddComplexComponent((BaseAddon)this, 6077, -4, -7, 0, 2729, -1, "", 1);// 306
|
||||
AddComplexComponent((BaseAddon)this, 6077, -4, -8, 0, 2729, -1, "", 1);// 307
|
||||
AddComplexComponent((BaseAddon)this, 6077, -5, -6, 0, 2729, -1, "", 1);// 308
|
||||
AddComplexComponent((BaseAddon)this, 6077, -5, -7, 0, 2729, -1, "", 1);// 309
|
||||
AddComplexComponent((BaseAddon)this, 6077, -5, -8, 0, 2729, -1, "", 1);// 310
|
||||
AddComplexComponent((BaseAddon)this, 6077, -6, -6, 0, 2729, -1, "", 1);// 311
|
||||
AddComplexComponent((BaseAddon)this, 6077, -6, -7, 0, 2729, -1, "", 1);// 312
|
||||
AddComplexComponent((BaseAddon)this, 6077, -6, -8, 0, 2729, -1, "", 1);// 313
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, -8, 0, 2729, -1, "", 1);// 314
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, -9, 0, 2729, -1, "", 1);// 315
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, -8, 0, 2729, -1, "", 1);// 316
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, -9, 0, 2729, -1, "", 1);// 317
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, -8, 0, 2729, -1, "", 1);// 318
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, -9, 0, 2729, -1, "", 1);// 319
|
||||
AddComplexComponent((BaseAddon)this, 6077, 6, -8, 0, 2729, -1, "", 1);// 320
|
||||
AddComplexComponent((BaseAddon)this, 6077, 6, -9, 0, 2729, -1, "", 1);// 321
|
||||
AddComplexComponent((BaseAddon)this, 6077, 5, -8, 0, 2729, -1, "", 1);// 322
|
||||
AddComplexComponent((BaseAddon)this, 6077, 5, -9, 0, 2729, -1, "", 1);// 323
|
||||
AddComplexComponent((BaseAddon)this, 6077, 4, -8, 0, 2729, -1, "", 1);// 324
|
||||
AddComplexComponent((BaseAddon)this, 6077, 4, -9, 0, 2729, -1, "", 1);// 325
|
||||
AddComplexComponent((BaseAddon)this, 6077, 3, -8, 0, 2729, -1, "", 1);// 326
|
||||
AddComplexComponent((BaseAddon)this, 6077, 3, -9, 0, 2729, -1, "", 1);// 327
|
||||
AddComplexComponent((BaseAddon)this, 6077, 2, -8, 0, 2729, -1, "", 1);// 328
|
||||
AddComplexComponent((BaseAddon)this, 6077, 2, -9, 0, 2729, -1, "", 1);// 329
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, -6, 0, 2729, -1, "", 1);// 330
|
||||
AddComplexComponent((BaseAddon)this, 6077, 9, -7, 0, 2729, -1, "", 1);// 331
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, -6, 0, 2729, -1, "", 1);// 332
|
||||
AddComplexComponent((BaseAddon)this, 6077, 8, -7, 0, 2729, -1, "", 1);// 333
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, -6, 0, 2729, -1, "", 1);// 334
|
||||
AddComplexComponent((BaseAddon)this, 6077, 7, -7, 0, 2729, -1, "", 1);// 335
|
||||
AddComplexComponent((BaseAddon)this, 6077, 6, -6, 0, 2729, -1, "", 1);// 336
|
||||
AddComplexComponent((BaseAddon)this, 6077, 6, -7, 0, 2729, -1, "", 1);// 337
|
||||
AddComplexComponent((BaseAddon)this, 6077, 5, -6, 0, 2729, -1, "", 1);// 338
|
||||
AddComplexComponent((BaseAddon)this, 6077, 5, -7, 0, 2729, -1, "", 1);// 339
|
||||
AddComplexComponent((BaseAddon)this, 6077, 4, -6, 0, 2729, -1, "", 1);// 340
|
||||
AddComplexComponent((BaseAddon)this, 6077, 4, -7, 0, 2729, -1, "", 1);// 341
|
||||
AddComplexComponent((BaseAddon)this, 6077, 3, -6, 0, 2729, -1, "", 1);// 342
|
||||
AddComplexComponent((BaseAddon)this, 6077, 3, -7, 0, 2729, -1, "", 1);// 343
|
||||
AddComplexComponent((BaseAddon)this, 6077, 2, -6, 0, 2729, -1, "", 1);// 344
|
||||
AddComplexComponent((BaseAddon)this, 6077, 2, -7, 0, 2729, -1, "", 1);// 345
|
||||
AddComplexComponent((BaseAddon)this, 6077, 1, -9, 0, 2729, -1, "", 1);// 346
|
||||
AddComplexComponent((BaseAddon)this, 6077, 0, -9, 0, 2729, -1, "", 1);// 347
|
||||
AddComplexComponent((BaseAddon)this, 6077, -1, -9, 0, 2729, -1, "", 1);// 348
|
||||
AddComplexComponent((BaseAddon)this, 6077, -2, -9, 0, 2729, -1, "", 1);// 349
|
||||
AddComplexComponent((BaseAddon)this, 6077, -3, -9, 0, 2729, -1, "", 1);// 350
|
||||
AddComplexComponent((BaseAddon)this, 6077, -4, -9, 0, 2729, -1, "", 1);// 351
|
||||
AddComplexComponent((BaseAddon)this, 6077, -5, -9, 0, 2729, -1, "", 1);// 352
|
||||
AddComplexComponent((BaseAddon)this, 6077, -6, -9, 0, 2729, -1, "", 1);// 353
|
||||
AddComplexComponent((BaseAddon)this, 17754, -8, 5, 0, 2729, -1, "", 1);// 354
|
||||
AddComplexComponent((BaseAddon)this, 17754, -9, 5, 0, 2729, -1, "", 1);// 355
|
||||
AddComplexComponent((BaseAddon)this, 17760, -10, 5, 0, 2729, -1, "", 1);// 356
|
||||
AddComplexComponent((BaseAddon)this, 17758, -11, 5, 0, 2729, -1, "", 1);// 357
|
||||
AddComplexComponent((BaseAddon)this, 17754, -12, 5, 0, 2729, -1, "", 1);// 358
|
||||
AddComplexComponent((BaseAddon)this, 17756, -12, 4, 0, 2729, -1, "", 1);// 359
|
||||
AddComplexComponent((BaseAddon)this, 17724, -11, 4, 0, 2729, -1, "", 1);// 360
|
||||
AddComplexComponent((BaseAddon)this, 17757, -10, 4, 0, 2729, -1, "", 1);// 361
|
||||
AddComplexComponent((BaseAddon)this, 17729, -9, 4, 0, 2729, -1, "", 1);// 362
|
||||
AddComplexComponent((BaseAddon)this, 17782, -13, -3, 0, 1152, -1, "", 1);// 363
|
||||
AddComplexComponent((BaseAddon)this, 17782, -13, -2, 0, 1152, -1, "", 1);// 364
|
||||
AddComplexComponent((BaseAddon)this, 17782, -13, 0, 0, 1152, -1, "", 1);// 365
|
||||
AddComplexComponent((BaseAddon)this, 17783, -13, 1, 0, 1152, -1, "", 1);// 366
|
||||
AddComplexComponent((BaseAddon)this, 17783, -13, -1, 0, 1152, -1, "", 1);// 367
|
||||
AddComplexComponent((BaseAddon)this, 17783, -13, -4, 0, 1152, -1, "", 1);// 368
|
||||
AddComplexComponent((BaseAddon)this, 17781, -13, 2, 0, 1152, -1, "", 1);// 369
|
||||
AddComplexComponent((BaseAddon)this, 17781, -13, -5, 0, 1152, -1, "", 1);// 370
|
||||
AddComplexComponent((BaseAddon)this, 17734, -8, 4, 0, 2729, -1, "", 1);// 371
|
||||
AddComplexComponent((BaseAddon)this, 19122, -9, -1, 0, 1152, -1, "", 1);// 372
|
||||
AddComplexComponent((BaseAddon)this, 22300, -11, 7, 0, 1152, -1, "", 1);// 387
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, 8, 0, 2729, -1, "", 1);// 388
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, 7, 0, 2729, -1, "", 1);// 389
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, 6, 0, 2729, -1, "", 1);// 390
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, 5, 0, 2729, -1, "", 1);// 391
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, 4, 0, 2729, -1, "", 1);// 392
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, 3, 0, 2729, -1, "", 1);// 393
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, 8, 0, 2729, -1, "", 1);// 394
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, 7, 0, 2729, -1, "", 1);// 395
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, 6, 0, 2729, -1, "", 1);// 396
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, 5, 0, 2729, -1, "", 1);// 397
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, 4, 0, 2729, -1, "", 1);// 398
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, 3, 0, 2729, -1, "", 1);// 399
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, 8, 0, 2729, -1, "", 1);// 400
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, 7, 0, 2729, -1, "", 1);// 401
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, 6, 0, 2729, -1, "", 1);// 402
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, 5, 0, 2729, -1, "", 1);// 403
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, 4, 0, 2729, -1, "", 1);// 404
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, 3, 0, 2729, -1, "", 1);// 405
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, 8, 0, 2729, -1, "", 1);// 406
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, 7, 0, 2729, -1, "", 1);// 407
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, 6, 0, 2729, -1, "", 1);// 408
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, 5, 0, 2729, -1, "", 1);// 409
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, 4, 0, 2729, -1, "", 1);// 410
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, 3, 0, 2729, -1, "", 1);// 411
|
||||
AddComplexComponent((BaseAddon)this, 6077, -7, 2, 0, 2729, -1, "", 1);// 412
|
||||
AddComplexComponent((BaseAddon)this, 6077, -7, 1, 0, 2729, -1, "", 1);// 413
|
||||
AddComplexComponent((BaseAddon)this, 6077, -7, 0, 0, 2729, -1, "", 1);// 414
|
||||
AddComplexComponent((BaseAddon)this, 6077, -7, -1, 0, 2729, -1, "", 1);// 415
|
||||
AddComplexComponent((BaseAddon)this, 6077, -7, -2, 0, 2729, -1, "", 1);// 416
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, 2, 0, 2729, -1, "", 1);// 417
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, 1, 0, 2729, -1, "", 1);// 418
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, 0, 0, 2729, -1, "", 1);// 419
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, -1, 0, 2729, -1, "", 1);// 420
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, -2, 0, 2729, -1, "", 1);// 421
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, 2, 0, 2729, -1, "", 1);// 422
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, 1, 0, 2729, -1, "", 1);// 423
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, 0, 0, 2729, -1, "", 1);// 424
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, -1, 0, 2729, -1, "", 1);// 425
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, -2, 0, 2729, -1, "", 1);// 426
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, 2, 0, 2729, -1, "", 1);// 427
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, 1, 0, 2729, -1, "", 1);// 428
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, 0, 0, 2729, -1, "", 1);// 429
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, -1, 0, 2729, -1, "", 1);// 430
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, -2, 0, 2729, -1, "", 1);// 431
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, 2, 0, 2729, -1, "", 1);// 432
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, 1, 0, 2729, -1, "", 1);// 433
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, 0, 0, 2729, -1, "", 1);// 434
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, -1, 0, 2729, -1, "", 1);// 435
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, -2, 0, 2729, -1, "", 1);// 436
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, 2, 0, 2729, -1, "", 1);// 437
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, 1, 0, 2729, -1, "", 1);// 438
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, 0, 0, 2729, -1, "", 1);// 439
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, -1, 0, 2729, -1, "", 1);// 440
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, -2, 0, 2729, -1, "", 1);// 441
|
||||
AddComplexComponent((BaseAddon)this, 6077, -7, -3, 0, 2729, -1, "", 1);// 442
|
||||
AddComplexComponent((BaseAddon)this, 6077, -7, -4, 0, 2729, -1, "", 1);// 443
|
||||
AddComplexComponent((BaseAddon)this, 6077, -7, -5, 0, 2729, -1, "", 1);// 444
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, -3, 0, 2729, -1, "", 1);// 445
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, -4, 0, 2729, -1, "", 1);// 446
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, -5, 0, 2729, -1, "", 1);// 447
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, -3, 0, 2729, -1, "", 1);// 448
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, -4, 0, 2729, -1, "", 1);// 449
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, -5, 0, 2729, -1, "", 1);// 450
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, -3, 0, 2729, -1, "", 1);// 451
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, -4, 0, 2729, -1, "", 1);// 452
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, -5, 0, 2729, -1, "", 1);// 453
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, -3, 0, 2729, -1, "", 1);// 454
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, -4, 0, 2729, -1, "", 1);// 455
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, -5, 0, 2729, -1, "", 1);// 456
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, -3, 0, 2729, -1, "", 1);// 457
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, -4, 0, 2729, -1, "", 1);// 458
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, -5, 0, 2729, -1, "", 1);// 459
|
||||
AddComplexComponent((BaseAddon)this, 6077, -13, -5, 0, 2729, -1, "", 1);// 460
|
||||
AddComplexComponent((BaseAddon)this, 6077, -13, -4, 0, 2729, -1, "", 1);// 461
|
||||
AddComplexComponent((BaseAddon)this, 6077, -13, -3, 0, 2729, -1, "", 1);// 462
|
||||
AddComplexComponent((BaseAddon)this, 6077, -13, -2, 0, 2729, -1, "", 1);// 463
|
||||
AddComplexComponent((BaseAddon)this, 6077, -13, -1, 0, 2729, -1, "", 1);// 464
|
||||
AddComplexComponent((BaseAddon)this, 6077, -13, 0, 0, 2729, -1, "", 1);// 465
|
||||
AddComplexComponent((BaseAddon)this, 6077, -13, 1, 0, 2729, -1, "", 1);// 466
|
||||
AddComplexComponent((BaseAddon)this, 6077, -13, 2, 0, 2729, -1, "", 1);// 467
|
||||
AddComplexComponent((BaseAddon)this, 6077, -13, 3, 0, 2729, -1, "", 1);// 468
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, 3, 0, 2729, -1, "", 1);// 469
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, 4, 0, 2729, -1, "", 1);// 470
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, 5, 0, 2729, -1, "", 1);// 471
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, 6, 0, 2729, -1, "", 1);// 472
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, 7, 0, 2729, -1, "", 1);// 473
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, 8, 0, 2729, -1, "", 1);// 474
|
||||
AddComplexComponent((BaseAddon)this, 17306, -8, 9, 0, 2729, -1, "", 1);// 475
|
||||
AddComplexComponent((BaseAddon)this, 17306, -9, 9, 0, 2729, -1, "", 1);// 476
|
||||
AddComplexComponent((BaseAddon)this, 17306, -10, 9, 0, 2729, -1, "", 1);// 477
|
||||
AddComplexComponent((BaseAddon)this, 17306, -11, 9, 0, 2729, -1, "", 1);// 478
|
||||
AddComplexComponent((BaseAddon)this, 17306, -12, 9, 0, 2729, -1, "", 1);// 479
|
||||
AddComplexComponent((BaseAddon)this, 17783, -13, -6, 0, 1152, -1, "", 1);// 480
|
||||
AddComplexComponent((BaseAddon)this, 17783, -13, -7, 0, 1152, -1, "", 1);// 481
|
||||
AddComplexComponent((BaseAddon)this, 17781, -13, -8, 0, 1152, -1, "", 1);// 482
|
||||
AddComplexComponent((BaseAddon)this, 17780, -9, -9, 0, 1152, -1, "", 1);// 483
|
||||
AddComplexComponent((BaseAddon)this, 17780, -7, -9, 0, 1152, -1, "", 1);// 484
|
||||
AddComplexComponent((BaseAddon)this, 17779, -11, -9, 0, 1152, -1, "", 1);// 485
|
||||
AddComplexComponent((BaseAddon)this, 17779, -12, -9, 0, 1152, -1, "", 1);// 486
|
||||
AddComplexComponent((BaseAddon)this, 17779, -8, -9, 0, 1152, -1, "", 1);// 487
|
||||
AddComplexComponent((BaseAddon)this, 17778, -10, -9, 0, 1152, -1, "", 1);// 488
|
||||
AddComplexComponent((BaseAddon)this, 22300, -12, -7, 0, 1152, -1, "", 1);// 493
|
||||
AddComplexComponent((BaseAddon)this, 6077, -7, -6, 0, 2729, -1, "", 1);// 494
|
||||
AddComplexComponent((BaseAddon)this, 6077, -7, -7, 0, 2729, -1, "", 1);// 495
|
||||
AddComplexComponent((BaseAddon)this, 6077, -7, -8, 0, 2729, -1, "", 1);// 496
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, -6, 0, 2729, -1, "", 1);// 497
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, -7, 0, 2729, -1, "", 1);// 498
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, -8, 0, 2729, -1, "", 1);// 499
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, -6, 0, 2729, -1, "", 1);// 500
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, -7, 0, 2729, -1, "", 1);// 501
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, -8, 0, 2729, -1, "", 1);// 502
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, -6, 0, 2729, -1, "", 1);// 503
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, -7, 0, 2729, -1, "", 1);// 504
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, -8, 0, 2729, -1, "", 1);// 505
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, -6, 0, 2729, -1, "", 1);// 506
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, -7, 0, 2729, -1, "", 1);// 507
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, -8, 0, 2729, -1, "", 1);// 508
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, -6, 0, 2729, -1, "", 1);// 509
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, -7, 0, 2729, -1, "", 1);// 510
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, -8, 0, 2729, -1, "", 1);// 511
|
||||
AddComplexComponent((BaseAddon)this, 6077, -7, -9, 0, 2729, -1, "", 1);// 512
|
||||
AddComplexComponent((BaseAddon)this, 6077, -8, -9, 0, 2729, -1, "", 1);// 513
|
||||
AddComplexComponent((BaseAddon)this, 6077, -9, -9, 0, 2729, -1, "", 1);// 514
|
||||
AddComplexComponent((BaseAddon)this, 6077, -10, -9, 0, 2729, -1, "", 1);// 515
|
||||
AddComplexComponent((BaseAddon)this, 6077, -11, -9, 0, 2729, -1, "", 1);// 516
|
||||
AddComplexComponent((BaseAddon)this, 6077, -12, -9, 0, 2729, -1, "", 1);// 517
|
||||
AddComplexComponent((BaseAddon)this, 6077, -13, -9, 0, 2729, -1, "", 1);// 518
|
||||
AddComplexComponent((BaseAddon)this, 6077, -13, -8, 0, 2729, -1, "", 1);// 519
|
||||
AddComplexComponent((BaseAddon)this, 6077, -13, -7, 0, 2729, -1, "", 1);// 520
|
||||
AddComplexComponent((BaseAddon)this, 6077, -13, -6, 0, 2729, -1, "", 1);// 521
|
||||
}
|
||||
|
||||
public BlackthornStep3(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0); // Version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class BlackthornStep4 : BlackthornBaseAddon
|
||||
{
|
||||
public static BlackthornStep4 InstanceTram { get; set; }
|
||||
public static BlackthornStep4 InstanceFel { get; set; }
|
||||
|
||||
private static int[,] m_AddOnSimpleComponents = new int[,]
|
||||
{
|
||||
{7036, 7, 8, 0}, {6773, 12, 2, 0}, {7822, 12, 0, 0}// 1 8 10
|
||||
, {6773, 6, -6, 0}, {7059, 6, -7, 0}, {12906, 3, -3, 0}// 20 21 30
|
||||
, {12906, 1, -1, 0}, {12906, 1, -2, 0}, {12906, 1, -3, 0}// 31 32 33
|
||||
, {12906, 0, -3, 0}, {12906, 0, -2, 0}, {12906, 0, -1, 0}// 34 35 36
|
||||
, {12906, 0, 0, 0}, {12906, -1, -2, 0}, {12906, -1, -1, 0}// 37 38 39
|
||||
, {12906, -1, 0, 0}, {12906, -2, 0, 0}, {12906, -2, -1, 0}// 40 41 42
|
||||
, {12906, -2, -2, 0}, {12906, -1, -3, 0}, {12906, 2, -3, 0}// 43 44 45
|
||||
, {12906, 3, -2, 0}, {12906, 2, -2, 0}, {12906, 2, -1, 0}// 46 47 48
|
||||
, {12906, 2, 0, 0}, {12906, 1, 0, 0}, {12906, 0, 2, 0}// 49 50 51
|
||||
, {12906, 0, 1, 0}, {12906, -1, 1, 0}, {12906, -2, 1, 0}// 52 53 54
|
||||
, {12906, -3, 0, 0}, {12906, -4, -1, 0}, {12906, -3, -1, 0}// 55 56 57
|
||||
, {12906, -3, -2, 0}, {12906, -3, -3, 0}, {12906, -2, -3, 0}// 58 59 60
|
||||
, {15723, -2, -7, 0}, {15721, -11, -7, 0}, {12906, 3, -5, 0}// 79 80 83
|
||||
, {12906, 3, -4, 0}, {12906, -1, -4, 0}, {12906, 0, -4, 0}// 84 85 86
|
||||
, {12906, 1, -4, 0}, {12906, 2, -4, 0}, {12906, -2, -4, 0}// 87 88 89
|
||||
, {12906, -2, -5, 0}, {12906, -1, -5, 0}, {12906, 0, -5, 0}// 90 91 92
|
||||
, {12906, 1, -5, 0}, {12906, 2, -5, 0}, {12906, 2, -6, 0}// 93 94 95
|
||||
, {12906, 3, -6, 0}, {12906, 3, -7, 0}, {12906, 1, -8, 0}// 96 97 98
|
||||
, {12906, 0, -6, 0}, {12906, 0, -7, 0}, {12906, 2, -7, 0}// 99 100 101
|
||||
, {12906, 1, -6, 0}, {12906, 1, -7, 0}, {12906, 3, -8, 0}// 102 103 104
|
||||
, {12906, 2, -8, 0}// 105
|
||||
};
|
||||
|
||||
[Constructable]
|
||||
public BlackthornStep4()
|
||||
{
|
||||
for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++)
|
||||
AddComponent(new AddonComponent(m_AddOnSimpleComponents[i, 0]), m_AddOnSimpleComponents[i, 1], m_AddOnSimpleComponents[i, 2], m_AddOnSimpleComponents[i, 3]);
|
||||
|
||||
AddComplexComponent((BaseAddon)this, 3307, 12, 7, 0, 667, -1, "", 1);// 2
|
||||
AddComplexComponent((BaseAddon)this, 3307, 11, 7, 0, 667, -1, "", 1);// 3
|
||||
AddComplexComponent((BaseAddon)this, 3307, 10, 7, 0, 667, -1, "", 1);// 4
|
||||
AddComplexComponent((BaseAddon)this, 3307, 9, 7, 0, 667, -1, "", 1);// 5
|
||||
AddComplexComponent((BaseAddon)this, 3307, 8, 7, 0, 667, -1, "", 1);// 6
|
||||
AddComplexComponent((BaseAddon)this, 3307, 7, 7, 0, 667, -1, "", 1);// 7
|
||||
AddComplexComponent((BaseAddon)this, 6571, 9, 8, 0, 0, 1, "", 1);// 9
|
||||
AddComplexComponent((BaseAddon)this, 7074, 12, 0, 0, 2500, -1, "", 1);// 11
|
||||
AddComplexComponent((BaseAddon)this, 7075, 11, 0, 0, 2500, -1, "", 1);// 12
|
||||
AddComplexComponent((BaseAddon)this, 7077, 11, -3, 0, 2500, -1, "", 1);// 13
|
||||
AddComplexComponent((BaseAddon)this, 7090, 12, -1, 0, 2500, -1, "", 1);// 14
|
||||
AddComplexComponent((BaseAddon)this, 7082, 12, -3, 0, 2500, -1, "", 1);// 15
|
||||
AddComplexComponent((BaseAddon)this, 4944, 5, -2, 0, 1175, -1, "", 1);// 16
|
||||
AddComplexComponent((BaseAddon)this, 6571, 10, -7, 0, 0, 1, "", 1);// 17
|
||||
AddComplexComponent((BaseAddon)this, 4784, 12, -8, 0, 2548, -1, "", 1);// 18
|
||||
AddComplexComponent((BaseAddon)this, 6942, 9, -8, 0, 2500, -1, "", 1);// 19
|
||||
AddComplexComponent((BaseAddon)this, 4947, 5, -4, 0, 1175, -1, "", 1);// 22
|
||||
AddComplexComponent((BaseAddon)this, 3119, -11, 1, 1, 2075, -1, "", 1);// 23
|
||||
AddComplexComponent((BaseAddon)this, 3120, -11, 1, 0, 2075, -1, "", 1);// 24
|
||||
AddComplexComponent((BaseAddon)this, 3120, -11, 0, 1, 2075, -1, "", 1);// 25
|
||||
AddComplexComponent((BaseAddon)this, 3119, -11, 0, 0, 2075, -1, "", 1);// 26
|
||||
AddComplexComponent((BaseAddon)this, 3119, -11, -1, 0, 2075, -1, "", 1);// 27
|
||||
AddComplexComponent((BaseAddon)this, 6773, 0, -2, 0, 872, -1, "", 1);// 28
|
||||
AddComplexComponent((BaseAddon)this, 6571, -10, 2, 0, 0, 1, "", 1);// 29
|
||||
AddComplexComponent((BaseAddon)this, 4955, -4, 0, 0, 1175, -1, "", 1);// 61
|
||||
AddComplexComponent((BaseAddon)this, 4957, -3, 1, 0, 1175, -1, "", 1);// 62
|
||||
AddComplexComponent((BaseAddon)this, 4955, -4, -1, 0, 1175, -1, "", 1);// 63
|
||||
AddComplexComponent((BaseAddon)this, 4946, -4, -2, 0, 1175, -1, "", 1);// 64
|
||||
AddComplexComponent((BaseAddon)this, 4947, -3, -3, 0, 1175, -1, "", 1);// 65
|
||||
AddComplexComponent((BaseAddon)this, 4947, -2, 2, 0, 1175, -1, "", 1);// 66
|
||||
AddComplexComponent((BaseAddon)this, 4962, -1, 2, 0, 1175, -1, "", 1);// 67
|
||||
AddComplexComponent((BaseAddon)this, 4963, -1, 3, 0, 1175, -1, "", 1);// 68
|
||||
AddComplexComponent((BaseAddon)this, 4963, 0, 3, 5, 1175, -1, "", 1);// 69
|
||||
AddComplexComponent((BaseAddon)this, 4962, 0, 3, 0, 1175, -1, "", 1);// 70
|
||||
AddComplexComponent((BaseAddon)this, 4952, 1, 3, 0, 1175, -1, "", 1);// 71
|
||||
AddComplexComponent((BaseAddon)this, 4947, 2, 2, 0, 1175, -1, "", 1);// 72
|
||||
AddComplexComponent((BaseAddon)this, 4944, 3, 2, 0, 1175, -1, "", 1);// 73
|
||||
AddComplexComponent((BaseAddon)this, 4943, 3, 1, 0, 1175, -1, "", 1);// 74
|
||||
AddComplexComponent((BaseAddon)this, 4947, 4, 0, 0, 1175, -1, "", 1);// 75
|
||||
AddComplexComponent((BaseAddon)this, 4956, 4, -1, 0, 1175, -1, "", 1);// 76
|
||||
AddComplexComponent((BaseAddon)this, 4956, 3, -2, 0, 1175, -1, "", 1);// 77
|
||||
AddComplexComponent((BaseAddon)this, 4954, 4, -3, 0, 1175, -1, "", 1);// 78
|
||||
AddComplexComponent((BaseAddon)this, 8708, -10, -8, 0, 2075, -1, "", 1);// 81
|
||||
AddComplexComponent((BaseAddon)this, 6571, -3, -8, 0, 0, 1, "", 1);// 82
|
||||
AddComplexComponent((BaseAddon)this, 4944, -2, -4, 0, 1175, -1, "", 1);// 106
|
||||
AddComplexComponent((BaseAddon)this, 4957, -2, -5, 0, 1175, -1, "", 1);// 107
|
||||
AddComplexComponent((BaseAddon)this, 4958, -1, -6, 0, 1175, -1, "", 1);// 108
|
||||
AddComplexComponent((BaseAddon)this, 4947, 0, -6, 0, 1175, -1, "", 1);// 109
|
||||
AddComplexComponent((BaseAddon)this, 4949, 0, -7, 0, 1175, -1, "", 1);// 110
|
||||
AddComplexComponent((BaseAddon)this, 4952, 1, -8, 0, 1175, -1, "", 1);// 111
|
||||
AddComplexComponent((BaseAddon)this, 4954, 4, -4, 0, 1175, -1, "", 1);// 112
|
||||
AddComplexComponent((BaseAddon)this, 4954, 4, -5, 0, 1175, -1, "", 1);// 113
|
||||
AddComplexComponent((BaseAddon)this, 4963, 4, -7, 5, 1175, -1, "", 1);// 114
|
||||
AddComplexComponent((BaseAddon)this, 4963, 4, -6, 0, 1175, -1, "", 1);// 115
|
||||
AddComplexComponent((BaseAddon)this, 4962, 4, -7, 0, 1175, -1, "", 1);// 116
|
||||
AddComplexComponent((BaseAddon)this, 4952, 4, -8, 0, 1175, -1, "", 1);// 117
|
||||
AddComplexComponent((BaseAddon)this, 3097, -12, 2, 0, 2075, -1, "", 1);// 118
|
||||
AddComplexComponent((BaseAddon)this, 3118, -12, 1, 0, 2075, -1, "", 1);// 119
|
||||
AddComplexComponent((BaseAddon)this, 3119, -12, -1, 0, 2075, -1, "", 1);// 120
|
||||
AddComplexComponent((BaseAddon)this, 3109, -12, 0, 0, 2075, -1, "", 1);// 121
|
||||
AddComplexComponent((BaseAddon)this, 8700, -12, -8, 0, 2075, -1, "", 1);// 122
|
||||
AddComplexComponent((BaseAddon)this, 8708, -12, -6, 0, 2075, -1, "", 1);// 123
|
||||
}
|
||||
|
||||
public BlackthornStep4(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0); // Version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class BlackthornStep5 : BlackthornBaseAddon
|
||||
{
|
||||
public static BlackthornStep5 InstanceTram { get; set; }
|
||||
public static BlackthornStep5 InstanceFel { get; set; }
|
||||
|
||||
private static int[,] m_AddOnSimpleComponents = new int[,]
|
||||
{
|
||||
{4306, 7, 7, 0}, {4317, 5, 7, 0}, {4314, 5, 7, 0}// 2 3 4
|
||||
, {4308, 3, 7, 0}, {4280, -1, 7, 0}, {4286, -7, -3, 0}// 5 6 7
|
||||
, {4287, -6, -4, 0}, {4288, -5, -5, 0}, {9750, -7, -6, 3}// 8 9 10
|
||||
, {4335, 7, 3, 0}, {4335, 4, -3, 0}, {4335, 3, -4, 0}// 12 13 14
|
||||
, {4335, 2, -4, 0}, {4335, -1, -4, 0}, {4335, -5, -3, 0}// 15 16 17
|
||||
, {4335, -7, -2, 0}, {4335, -6, 3, 0}, {4335, -3, 3, 0}// 18 19 20
|
||||
, {4335, 2, 3, 0}, {7391, 7, -2, 0}, {7390, 6, -2, 0}// 21 23 24
|
||||
, {3118, 6, -4, 0}, {3118, 8, -3, 0}, {4338, -7, 1, 0}// 25 26 27
|
||||
, {4339, -3, -4, 0}, {3814, -4, 1, 0}, {3814, -3, 1, 0}// 28 29 30
|
||||
, {3811, 8, -5, 0}, {3811, 0, 1, 0}, {3811, 2, 0, 0}// 41 42 43
|
||||
, {3811, 0, 0, 6}// 44
|
||||
};
|
||||
|
||||
[Constructable]
|
||||
public BlackthornStep5()
|
||||
{
|
||||
for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++)
|
||||
AddComponent(new AddonComponent(m_AddOnSimpleComponents[i, 0]), m_AddOnSimpleComponents[i, 1], m_AddOnSimpleComponents[i, 2], m_AddOnSimpleComponents[i, 3]);
|
||||
|
||||
AddComplexComponent((BaseAddon)this, 3309, 9, -6, 0, 63, -1, "", 1);// 1
|
||||
AddComplexComponent((BaseAddon)this, 8445, -6, -4, 17, 2500, -1, "", 1);// 11
|
||||
AddComplexComponent((BaseAddon)this, 8424, 4, -1, 0, 2548, -1, "", 1);// 22
|
||||
AddComplexComponent((BaseAddon)this, 3308, 3, -6, 5, 63, -1, "", 1);// 31
|
||||
AddComplexComponent((BaseAddon)this, 3308, -4, -6, 5, 63, -1, "", 1);// 32
|
||||
AddComplexComponent((BaseAddon)this, 3310, -5, -6, 5, 63, -1, "", 1);// 33
|
||||
AddComplexComponent((BaseAddon)this, 3310, 2, -6, 10, 63, -1, "", 1);// 34
|
||||
AddComplexComponent((BaseAddon)this, 3309, -7, -6, 0, 63, -1, "", 1);// 35
|
||||
AddComplexComponent((BaseAddon)this, 3309, -6, -6, 0, 63, -1, "", 1);// 36
|
||||
AddComplexComponent((BaseAddon)this, 3309, -2, -6, 0, 63, -1, "", 1);// 37
|
||||
AddComplexComponent((BaseAddon)this, 3309, 0, -6, 0, 63, -1, "", 1);// 38
|
||||
AddComplexComponent((BaseAddon)this, 3309, 5, -6, 0, 63, -1, "", 1);// 39
|
||||
AddComplexComponent((BaseAddon)this, 3309, 6, -6, 0, 63, -1, "", 1);// 40
|
||||
AddComplexComponent((BaseAddon)this, 8424, -8, -4, 0, 2548, -1, "", 1);// 45
|
||||
AddComplexComponent((BaseAddon)this, 3314, -9, -5, 0, 63, -1, "", 1);// 46
|
||||
AddComplexComponent((BaseAddon)this, 3314, -9, -2, 5, 63, -1, "", 1);// 47
|
||||
AddComplexComponent((BaseAddon)this, 3314, -9, 2, 5, 63, -1, "", 1);// 48
|
||||
AddComplexComponent((BaseAddon)this, 3313, -9, 0, 5, 63, -1, "", 1);// 49
|
||||
AddComplexComponent((BaseAddon)this, 3313, -9, 5, 0, 63, -1, "", 1);// 50
|
||||
AddComplexComponent((BaseAddon)this, 3313, -9, 4, 0, 63, -1, "", 1);// 51
|
||||
}
|
||||
|
||||
public BlackthornStep5(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0); // Version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class BlackthornStep6 : BlackthornBaseAddon
|
||||
{
|
||||
public static BlackthornStep6 InstanceTram { get; set; }
|
||||
public static BlackthornStep6 InstanceFel { get; set; }
|
||||
|
||||
private static int[,] m_AddOnSimpleComponents = new int[,]
|
||||
{
|
||||
{18324, 11, 1, 4}, {18324, 9, 1, 4}, {3793, -9, 1, 4}// 10 11 19
|
||||
, {4306, -3, -2, 4}, {18325, 3, -4, 4}, {40248, 2, -4, 4}// 20 21 22
|
||||
, {40248, -4, 2, 4}, {3793, -4, 3, 4}, {3792, -12, 6, 4}// 30 31 53
|
||||
, {3792, -12, 5, 4}, {4306, -17, 5, 14}, {4967, -11, 3, 4}// 54 55 58
|
||||
, {4954, -13, 4, 4}, {4962, -15, 1, 4}, {4954, -10, 0, 4}// 59 60 61
|
||||
};
|
||||
|
||||
[Constructable]
|
||||
public BlackthornStep6()
|
||||
{
|
||||
for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++)
|
||||
AddComponent(new AddonComponent(m_AddOnSimpleComponents[i, 0]), m_AddOnSimpleComponents[i, 1], m_AddOnSimpleComponents[i, 2], m_AddOnSimpleComponents[i, 3]);
|
||||
|
||||
AddComplexComponent((BaseAddon)this, 17856, 17, 2, 4, 1109, -1, "", 1);// 1
|
||||
AddComplexComponent((BaseAddon)this, 17855, 17, 3, 4, 1109, -1, "", 1);// 2
|
||||
AddComplexComponent((BaseAddon)this, 17858, 16, 3, 4, 1109, -1, "", 1);// 3
|
||||
AddComplexComponent((BaseAddon)this, 18001, 14, -5, 4, 1109, -1, "", 1);// 4
|
||||
AddComplexComponent((BaseAddon)this, 18001, 13, -5, 4, 1109, -1, "", 1);// 5
|
||||
AddComplexComponent((BaseAddon)this, 18012, 11, -5, 4, 1109, -1, "", 1);// 6
|
||||
AddComplexComponent((BaseAddon)this, 18003, 12, -5, 4, 1109, -1, "", 1);// 7
|
||||
AddComplexComponent((BaseAddon)this, 18012, 10, -5, 4, 1109, -1, "", 1);// 8
|
||||
AddComplexComponent((BaseAddon)this, 18020, 10, -4, 4, 1109, -1, "", 1);// 9
|
||||
AddComplexComponent((BaseAddon)this, 17992, 9, 1, 4, 1109, -1, "", 1);// 12
|
||||
AddComplexComponent((BaseAddon)this, 18017, 10, 1, 4, 1109, -1, "", 1);// 13
|
||||
AddComplexComponent((BaseAddon)this, 18006, 10, 2, 2, 1109, -1, "", 1);// 14
|
||||
AddComplexComponent((BaseAddon)this, 18006, 10, 3, 4, 1109, -1, "", 1);// 15
|
||||
AddComplexComponent((BaseAddon)this, 18018, 10, 3, 3, 1109, -1, "", 1);// 16
|
||||
AddComplexComponent((BaseAddon)this, 18012, 10, -6, 4, 1109, -1, "", 1);// 17
|
||||
AddComplexComponent((BaseAddon)this, 18012, 9, -6, 4, 1109, -1, "", 1);// 18
|
||||
AddComplexComponent((BaseAddon)this, 40734, 5, -3, 7, 2500, -1, "", 1);// 23
|
||||
AddComplexComponent((BaseAddon)this, 6049, 5, -3, 7, 2548, -1, "", 1);// 24
|
||||
AddComplexComponent((BaseAddon)this, 40735, 2, -2, 5, 2500, -1, "", 1);// 25
|
||||
AddComplexComponent((BaseAddon)this, 40737, -2, -2, 5, 2500, -1, "", 1);// 26
|
||||
AddComplexComponent((BaseAddon)this, 40442, 6, 7, 4, 2075, -1, "", 1);// 27
|
||||
AddComplexComponent((BaseAddon)this, 40738, 2, 6, 5, 2500, -1, "", 1);// 28
|
||||
AddComplexComponent((BaseAddon)this, 40737, -2, 6, 5, 2500, -1, "", 1);// 29
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, 1, 4, 2548, -1, "", 1);// 32
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, 2, 4, 2548, -1, "", 1);// 33
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, 3, 4, 2548, -1, "", 1);// 34
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, 3, 4, 2548, -1, "", 1);// 35
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, 1, 4, 2548, -1, "", 1);// 36
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, 1, 4, 2548, -1, "", 1);// 37
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, 2, 4, 2548, -1, "", 1);// 38
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, 2, 4, 2548, -1, "", 1);// 39
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, 2, 4, 2548, -1, "", 1);// 40
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, 1, 4, 2548, -1, "", 1);// 41
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 3, 4, 2548, -1, "", 1);// 42
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 2, 4, 2548, -1, "", 1);// 43
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 1, 4, 2548, -1, "", 1);// 44
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 4, 4, 2548, -1, "", 1);// 45
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 3, 4, 2548, -1, "", 1);// 46
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 2, 4, 2548, -1, "", 1);// 47
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 1, 4, 2548, -1, "", 1);// 48
|
||||
AddComplexComponent((BaseAddon)this, 22111, -3, 4, 4, 2548, -1, "", 1);// 49
|
||||
AddComplexComponent((BaseAddon)this, 22111, -3, 3, 4, 2548, -1, "", 1);// 50
|
||||
AddComplexComponent((BaseAddon)this, 22111, -3, 2, 4, 2548, -1, "", 1);// 51
|
||||
AddComplexComponent((BaseAddon)this, 22112, -3, 1, 4, 2548, -1, "", 1);// 52
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, 1, 4, 2548, -1, "", 1);// 56
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, 2, 4, 2548, -1, "", 1);// 57
|
||||
AddComplexComponent((BaseAddon)this, 6046, -11, -3, 4, 2548, -1, "", 1);// 62
|
||||
AddComplexComponent((BaseAddon)this, 6046, -11, -2, 4, 2548, -1, "", 1);// 63
|
||||
AddComplexComponent((BaseAddon)this, 6046, -11, -1, 4, 2548, -1, "", 1);// 64
|
||||
AddComplexComponent((BaseAddon)this, 6051, -14, -3, 4, 2548, -1, "", 1);// 65
|
||||
AddComplexComponent((BaseAddon)this, 6051, -14, -2, 4, 2548, -1, "", 1);// 66
|
||||
AddComplexComponent((BaseAddon)this, 6051, -14, 0, 4, 2548, -1, "", 1);// 67
|
||||
AddComplexComponent((BaseAddon)this, 6051, -14, -1, 4, 2548, -1, "", 1);// 68
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, 0, 4, 2548, -1, "", 1);// 69
|
||||
AddComplexComponent((BaseAddon)this, 41041, -11, 3, 0, 2548, -1, "", 1);// 70
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, -1, 4, 2548, -1, "", 1);// 71
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, -1, 4, 2548, -1, "", 1);// 72
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, -3, 4, 2548, -1, "", 1);// 73
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, -2, 4, 2548, -1, "", 1);// 74
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, -2, 4, 2548, -1, "", 1);// 75
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, -3, 4, 2548, -1, "", 1);// 76
|
||||
}
|
||||
|
||||
public BlackthornStep6(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0); // Version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class BlackthornStep7 : BlackthornBaseAddon
|
||||
{
|
||||
public static BlackthornStep7 InstanceTram { get; set; }
|
||||
public static BlackthornStep7 InstanceFel { get; set; }
|
||||
|
||||
private static int[,] m_AddOnSimpleComponents = new int[,]
|
||||
{
|
||||
{6009, -9, 1, 0}, {6009, -9, 2, 0}, {6012, -9, 2, 0}// 12 13 14
|
||||
, {6012, -8, 2, 0}, {7099, -8, 1, 0}, {7087, -8, 0, 0}// 15 16 17
|
||||
, {7087, -8, -1, 0}, {6004, -9, -1, 0}, {6011, -9, -1, 0}// 18 19 20
|
||||
, {6009, -9, 0, 0}, {6012, -9, 2, 0}, {6011, -8, 1, 0}// 21 22 23
|
||||
, {7403, -1, -3, 0}, {7816, -3, 9, 0}, {7390, -1, -8, 0}// 24 25 77
|
||||
, {9779, -3, -8, 0}// 78
|
||||
};
|
||||
|
||||
[Constructable]
|
||||
public BlackthornStep7()
|
||||
{
|
||||
for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++)
|
||||
AddComponent(new AddonComponent(m_AddOnSimpleComponents[i, 0]), m_AddOnSimpleComponents[i, 1], m_AddOnSimpleComponents[i, 2], m_AddOnSimpleComponents[i, 3]);
|
||||
|
||||
AddComplexComponent((BaseAddon)this, 7100, 9, 1, 0, 2500, -1, "", 1);// 1
|
||||
AddComplexComponent((BaseAddon)this, 7087, 9, 0, 0, 2500, -1, "", 1);// 2
|
||||
AddComplexComponent((BaseAddon)this, 7088, 9, -1, 0, 2500, -1, "", 1);// 3
|
||||
AddComplexComponent((BaseAddon)this, 7054, 8, -1, 0, 1175, -1, "", 1);// 4
|
||||
AddComplexComponent((BaseAddon)this, 7056, 7, -1, 0, 1175, -1, "", 1);// 5
|
||||
AddComplexComponent((BaseAddon)this, 7059, 8, 1, 0, 1175, -1, "", 1);// 6
|
||||
AddComplexComponent((BaseAddon)this, 7076, 6, 1, 0, 2500, -1, "", 1);// 7
|
||||
AddComplexComponent((BaseAddon)this, 7049, 6, 0, 6, 2500, -1, "", 1);// 8
|
||||
AddComplexComponent((BaseAddon)this, 12320, 6, 0, 0, 1175, -1, "", 1);// 9
|
||||
AddComplexComponent((BaseAddon)this, 7075, 6, -1, 0, 2500, -1, "", 1);// 10
|
||||
AddComplexComponent((BaseAddon)this, 4962, 3, 2, 0, 1109, -1, "", 1);// 11
|
||||
AddComplexComponent((BaseAddon)this, 4545, -6, 2, 0, 1109, -1, "", 1);// 26
|
||||
AddComplexComponent((BaseAddon)this, 4545, -5, 2, 0, 1109, -1, "", 1);// 27
|
||||
AddComplexComponent((BaseAddon)this, 4545, -4, 2, 0, 1109, -1, "", 1);// 28
|
||||
AddComplexComponent((BaseAddon)this, 4545, -3, 2, 0, 1109, -1, "", 1);// 29
|
||||
AddComplexComponent((BaseAddon)this, 4545, -2, 2, 0, 1109, -1, "", 1);// 30
|
||||
AddComplexComponent((BaseAddon)this, 4545, -1, 2, 0, 1109, -1, "", 1);// 31
|
||||
AddComplexComponent((BaseAddon)this, 4545, 0, 2, 0, 1109, -1, "", 1);// 32
|
||||
AddComplexComponent((BaseAddon)this, 4545, 1, 2, 0, 1109, -1, "", 1);// 33
|
||||
AddComplexComponent((BaseAddon)this, 4545, 2, 2, 0, 1109, -1, "", 1);// 34
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 4, 0, 2548, -1, "", 1);// 35
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 4, 0, 2548, -1, "", 1);// 36
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 5, 0, 2548, -1, "", 1);// 37
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 5, 0, 2548, -1, "", 1);// 38
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 6, 0, 2548, -1, "", 1);// 39
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 6, 0, 2548, -1, "", 1);// 40
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 7, 0, 2548, -1, "", 1);// 41
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 7, 0, 2548, -1, "", 1);// 42
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 8, 0, 2548, -1, "", 1);// 43
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 8, 0, 2548, -1, "", 1);// 44
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 9, 0, 2548, -1, "", 1);// 45
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 9, 0, 2548, -1, "", 1);// 46
|
||||
AddComplexComponent((BaseAddon)this, 22000, -3, 9, 0, 2548, -1, "", 1);// 47
|
||||
AddComplexComponent((BaseAddon)this, 22000, -2, 9, 0, 2548, -1, "", 1);// 48
|
||||
AddComplexComponent((BaseAddon)this, 22000, -1, 9, 0, 2548, -1, "", 1);// 49
|
||||
AddComplexComponent((BaseAddon)this, 22000, 0, 9, 0, 2548, -1, "", 1);// 50
|
||||
AddComplexComponent((BaseAddon)this, 22000, 1, 9, 0, 2548, -1, "", 1);// 51
|
||||
AddComplexComponent((BaseAddon)this, 22000, 2, 8, 0, 2548, -1, "", 1);// 52
|
||||
AddComplexComponent((BaseAddon)this, 22000, 2, 7, 0, 2548, -1, "", 1);// 53
|
||||
AddComplexComponent((BaseAddon)this, 22000, 2, 6, 0, 2548, -1, "", 1);// 54
|
||||
AddComplexComponent((BaseAddon)this, 22000, 2, 5, 0, 2548, -1, "", 1);// 55
|
||||
AddComplexComponent((BaseAddon)this, 22000, 2, 4, 0, 2548, -1, "", 1);// 56
|
||||
AddComplexComponent((BaseAddon)this, 22000, 2, 3, 0, 2548, -1, "", 1);// 57
|
||||
AddComplexComponent((BaseAddon)this, 22000, 1, 3, 0, 2548, -1, "", 1);// 58
|
||||
AddComplexComponent((BaseAddon)this, 22000, 0, 3, 0, 2548, -1, "", 1);// 59
|
||||
AddComplexComponent((BaseAddon)this, 22000, -1, 3, 0, 2548, -1, "", 1);// 60
|
||||
AddComplexComponent((BaseAddon)this, 22000, -2, 3, 0, 2548, -1, "", 1);// 61
|
||||
AddComplexComponent((BaseAddon)this, 22000, -3, 3, 0, 2548, -1, "", 1);// 62
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 3, 0, 2548, -1, "", 1);// 63
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, 3, 0, 2548, -1, "", 1);// 64
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 3, 0, 2548, -1, "", 1);// 65
|
||||
AddComplexComponent((BaseAddon)this, 4967, 2, 2, 0, 1109, -1, "", 1);// 66
|
||||
AddComplexComponent((BaseAddon)this, 4964, 1, 2, 2, 1109, -1, "", 1);// 67
|
||||
AddComplexComponent((BaseAddon)this, 4970, 1, 2, 0, 1109, -1, "", 1);// 68
|
||||
AddComplexComponent((BaseAddon)this, 4963, 0, 2, 0, 1109, -1, "", 1);// 69
|
||||
AddComplexComponent((BaseAddon)this, 4967, -1, 2, 0, 1109, -1, "", 1);// 70
|
||||
AddComplexComponent((BaseAddon)this, 4963, -2, 2, 0, 1109, -1, "", 1);// 71
|
||||
AddComplexComponent((BaseAddon)this, 4964, -3, 2, 2, 1109, -1, "", 1);// 72
|
||||
AddComplexComponent((BaseAddon)this, 4970, -3, 2, 0, 1109, -1, "", 1);// 73
|
||||
AddComplexComponent((BaseAddon)this, 4967, -4, 2, 0, 1109, -1, "", 1);// 74
|
||||
AddComplexComponent((BaseAddon)this, 4963, -5, 2, 0, 1109, -1, "", 1);// 75
|
||||
AddComplexComponent((BaseAddon)this, 4962, -6, 2, 0, 1109, -1, "", 1);// 76
|
||||
AddComplexComponent((BaseAddon)this, 22000, -1, -7, 0, 2548, -1, "", 1);// 79
|
||||
AddComplexComponent((BaseAddon)this, 22000, -1, -8, 0, 2548, -1, "", 1);// 80
|
||||
AddComplexComponent((BaseAddon)this, 22000, -1, -9, 0, 2548, -1, "", 1);// 81
|
||||
AddComplexComponent((BaseAddon)this, 22000, -2, -9, 0, 2548, -1, "", 1);// 82
|
||||
AddComplexComponent((BaseAddon)this, 22000, -2, -8, 0, 2548, -1, "", 1);// 83
|
||||
AddComplexComponent((BaseAddon)this, 22000, -2, -7, 0, 2548, -1, "", 1);// 84
|
||||
AddComplexComponent((BaseAddon)this, 22000, -3, -7, 0, 2548, -1, "", 1);// 85
|
||||
AddComplexComponent((BaseAddon)this, 22000, -3, -8, 0, 2548, -1, "", 1);// 86
|
||||
AddComplexComponent((BaseAddon)this, 22000, -3, -9, 0, 2548, -1, "", 1);// 87
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, -9, 0, 2548, -1, "", 1);// 88
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, -8, 0, 2548, -1, "", 1);// 89
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, -8, 0, 2548, -1, "", 1);// 90
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, -7, 0, 2548, -1, "", 1);// 91
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, -7, 0, 2548, -1, "", 1);// 92
|
||||
AddComplexComponent((BaseAddon)this, 3220, 0, -8, 0, 1109, -1, "", 1);// 93
|
||||
AddComplexComponent((BaseAddon)this, 3220, 0, -7, 0, 1109, -1, "", 1);// 94
|
||||
AddComplexComponent((BaseAddon)this, 3255, -5, -6, 0, 1109, -1, "", 1);// 95
|
||||
AddComplexComponent((BaseAddon)this, 3220, -4, -6, 0, 1109, -1, "", 1);// 96
|
||||
}
|
||||
|
||||
public BlackthornStep7(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0); // Version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,453 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class BlackthornStep8 : BlackthornBaseAddon
|
||||
{
|
||||
public static BlackthornStep8 InstanceTram { get; set; }
|
||||
public static BlackthornStep8 InstanceFel { get; set; }
|
||||
|
||||
private static int[,] m_AddOnSimpleComponents = new int[,]
|
||||
{
|
||||
{8444, 9, -8, 0}, {4947, 8, -8, 0}, {4954, 8, -7, 0}// 13 110 111
|
||||
, {4955, 8, -6, 0}, {4952, 8, -9, 0}, {4301, -8, -8, 0}// 112 119 153
|
||||
, {9619, 6, 0, 0}, {9775, -8, -1, 0}, {8445, -4, -2, 0}// 289 290 291
|
||||
, {4952, 7, -5, 0}, {4955, 7, -4, 0}, {4962, 6, -3, 0}// 295 296 297
|
||||
, {4962, 6, -2, 0}, {4962, 5, -1, 0}, {4949, 4, 0, 0}// 298 299 300
|
||||
, {4943, 5, 1, 0}, {4957, 5, 2, 0}, {4957, 4, 3, 0}// 301 302 303
|
||||
, {4944, 3, 3, 0}, {4960, 1, 2, 0}, {4963, 0, 2, 0}// 304 305 306
|
||||
, {4967, -1, 2, 0}, {4967, -2, 2, 0}, {4963, -3, 2, 0}// 307 308 309
|
||||
, {4960, -4, 2, 0}, {4961, -5, 2, 0}, {4963, -5, 1, 0}// 310 311 312
|
||||
, {4965, -5, 0, 5}, {4960, -5, 0, 0}, {4967, -5, -1, 0}// 313 314 315
|
||||
, {4963, -5, -2, 0}, {4960, -5, -3, 0}, {4967, -5, -4, 0}// 316 317 318
|
||||
, {4970, -5, -5, 0}, {4964, -5, -5, 2}, {4962, -5, -6, 0}// 319 320 321
|
||||
, {4969, -5, -7, 3}, {4964, -5, -7, 0}, {4960, -5, -8, 0}// 322 323 324
|
||||
, {4964, -5, -8, 5}, {4967, -6, -9, 0}, {4973, -5, -9, 0}// 325 335 336
|
||||
, {4300, -9, -7, 0}, {4299, -10, -6, 0}, {4298, -11, -5, 0}// 347 348 349
|
||||
};
|
||||
|
||||
[Constructable]
|
||||
public BlackthornStep8()
|
||||
{
|
||||
for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++)
|
||||
AddComponent(new AddonComponent(m_AddOnSimpleComponents[i, 0]), m_AddOnSimpleComponents[i, 1], m_AddOnSimpleComponents[i, 2], m_AddOnSimpleComponents[i, 3]);
|
||||
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 9, 0, 2548, -1, "", 1);// 1
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 8, 0, 2548, -1, "", 1);// 2
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, 9, 0, 2548, -1, "", 1);// 3
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, 8, 0, 2548, -1, "", 1);// 4
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, 9, 0, 2548, -1, "", 1);// 5
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, 8, 0, 2548, -1, "", 1);// 6
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, 9, 0, 2548, -1, "", 1);// 7
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, 8, 0, 2548, -1, "", 1);// 8
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, 9, 0, 2548, -1, "", 1);// 9
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, 8, 0, 2548, -1, "", 1);// 10
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, 9, 0, 2548, -1, "", 1);// 11
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, 8, 0, 2548, -1, "", 1);// 12
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 2, 0, 2548, -1, "", 1);// 14
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 1, 0, 2548, -1, "", 1);// 15
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 0, 0, 2548, -1, "", 1);// 16
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, -1, 0, 2548, -1, "", 1);// 17
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, -2, 0, 2548, -1, "", 1);// 18
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, -3, 0, 2548, -1, "", 1);// 19
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, -4, 0, 2548, -1, "", 1);// 20
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, -5, 0, 2548, -1, "", 1);// 21
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, -6, 0, 2548, -1, "", 1);// 22
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, -7, 0, 2548, -1, "", 1);// 23
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, -8, 0, 2548, -1, "", 1);// 24
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, 2, 0, 2548, -1, "", 1);// 25
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, 1, 0, 2548, -1, "", 1);// 26
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, 0, 0, 2548, -1, "", 1);// 27
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, -1, 0, 2548, -1, "", 1);// 28
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, -2, 0, 2548, -1, "", 1);// 29
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, -3, 0, 2548, -1, "", 1);// 30
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, -4, 0, 2548, -1, "", 1);// 31
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, -5, 0, 2548, -1, "", 1);// 32
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, -6, 0, 2548, -1, "", 1);// 33
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, -7, 0, 2548, -1, "", 1);// 34
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, -8, 0, 2548, -1, "", 1);// 35
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, 2, 0, 2548, -1, "", 1);// 36
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, 1, 0, 2548, -1, "", 1);// 37
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, 0, 0, 2548, -1, "", 1);// 38
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, -1, 0, 2548, -1, "", 1);// 39
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, -2, 0, 2548, -1, "", 1);// 40
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, -3, 0, 2548, -1, "", 1);// 41
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, -4, 0, 2548, -1, "", 1);// 42
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, -5, 0, 2548, -1, "", 1);// 43
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, -6, 0, 2548, -1, "", 1);// 44
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, -7, 0, 2548, -1, "", 1);// 45
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, -8, 0, 2548, -1, "", 1);// 46
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, 2, 0, 2548, -1, "", 1);// 47
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, 1, 0, 2548, -1, "", 1);// 48
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, 0, 0, 2548, -1, "", 1);// 49
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, -1, 0, 2548, -1, "", 1);// 50
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, -2, 0, 2548, -1, "", 1);// 51
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, -3, 0, 2548, -1, "", 1);// 52
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, -4, 0, 2548, -1, "", 1);// 53
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, -5, 0, 2548, -1, "", 1);// 54
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, -6, 0, 2548, -1, "", 1);// 55
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, -7, 0, 2548, -1, "", 1);// 56
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, -8, 0, 2548, -1, "", 1);// 57
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, 2, 0, 2548, -1, "", 1);// 58
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, 1, 0, 2548, -1, "", 1);// 59
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, 0, 0, 2548, -1, "", 1);// 60
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, -1, 0, 2548, -1, "", 1);// 61
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, -2, 0, 2548, -1, "", 1);// 62
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, -3, 0, 2548, -1, "", 1);// 63
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, -4, 0, 2548, -1, "", 1);// 64
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, -5, 0, 2548, -1, "", 1);// 65
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, -6, 0, 2548, -1, "", 1);// 66
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, -7, 0, 2548, -1, "", 1);// 67
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, -8, 0, 2548, -1, "", 1);// 68
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, 2, 0, 2548, -1, "", 1);// 69
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, 1, 0, 2548, -1, "", 1);// 70
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, 0, 0, 2548, -1, "", 1);// 71
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, -1, 0, 2548, -1, "", 1);// 72
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, -2, 0, 2548, -1, "", 1);// 73
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, -3, 0, 2548, -1, "", 1);// 74
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, -4, 0, 2548, -1, "", 1);// 75
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, -5, 0, 2548, -1, "", 1);// 76
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, -6, 0, 2548, -1, "", 1);// 77
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, -7, 0, 2548, -1, "", 1);// 78
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, -8, 0, 2548, -1, "", 1);// 79
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 7, 0, 2548, -1, "", 1);// 80
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 6, 0, 2548, -1, "", 1);// 81
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 5, 0, 2548, -1, "", 1);// 82
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 4, 0, 2548, -1, "", 1);// 83
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, 3, 0, 2548, -1, "", 1);// 84
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, 7, 0, 2548, -1, "", 1);// 85
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, 6, 0, 2548, -1, "", 1);// 86
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, 5, 0, 2548, -1, "", 1);// 87
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, 4, 0, 2548, -1, "", 1);// 88
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, 3, 0, 2548, -1, "", 1);// 89
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, 7, 0, 2548, -1, "", 1);// 90
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, 6, 0, 2548, -1, "", 1);// 91
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, 5, 0, 2548, -1, "", 1);// 92
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, 4, 0, 2548, -1, "", 1);// 93
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, 3, 0, 2548, -1, "", 1);// 94
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, 7, 0, 2548, -1, "", 1);// 95
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, 6, 0, 2548, -1, "", 1);// 96
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, 5, 0, 2548, -1, "", 1);// 97
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, 4, 0, 2548, -1, "", 1);// 98
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, 3, 0, 2548, -1, "", 1);// 99
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, 7, 0, 2548, -1, "", 1);// 100
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, 6, 0, 2548, -1, "", 1);// 101
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, 5, 0, 2548, -1, "", 1);// 102
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, 4, 0, 2548, -1, "", 1);// 103
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, 3, 0, 2548, -1, "", 1);// 104
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, 7, 0, 2548, -1, "", 1);// 105
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, 6, 0, 2548, -1, "", 1);// 106
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, 5, 0, 2548, -1, "", 1);// 107
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, 4, 0, 2548, -1, "", 1);// 108
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, 3, 0, 2548, -1, "", 1);// 109
|
||||
AddComplexComponent((BaseAddon)this, 22000, 13, -9, 0, 2548, -1, "", 1);// 113
|
||||
AddComplexComponent((BaseAddon)this, 22000, 12, -9, 0, 2548, -1, "", 1);// 114
|
||||
AddComplexComponent((BaseAddon)this, 22000, 11, -9, 0, 2548, -1, "", 1);// 115
|
||||
AddComplexComponent((BaseAddon)this, 22000, 10, -9, 0, 2548, -1, "", 1);// 116
|
||||
AddComplexComponent((BaseAddon)this, 22000, 9, -9, 0, 2548, -1, "", 1);// 117
|
||||
AddComplexComponent((BaseAddon)this, 22000, 8, -9, 0, 2548, -1, "", 1);// 118
|
||||
AddComplexComponent((BaseAddon)this, 14138, -7, 8, 0, 762, -1, "", 1);// 120
|
||||
AddComplexComponent((BaseAddon)this, 22000, 7, 9, 0, 2548, -1, "", 1);// 121
|
||||
AddComplexComponent((BaseAddon)this, 22000, 7, 8, 0, 2548, -1, "", 1);// 122
|
||||
AddComplexComponent((BaseAddon)this, 22000, 6, 9, 0, 2548, -1, "", 1);// 123
|
||||
AddComplexComponent((BaseAddon)this, 22000, 6, 8, 0, 2548, -1, "", 1);// 124
|
||||
AddComplexComponent((BaseAddon)this, 22000, 5, 9, 0, 2548, -1, "", 1);// 125
|
||||
AddComplexComponent((BaseAddon)this, 22000, 5, 8, 0, 2548, -1, "", 1);// 126
|
||||
AddComplexComponent((BaseAddon)this, 22000, 4, 9, 0, 2548, -1, "", 1);// 127
|
||||
AddComplexComponent((BaseAddon)this, 22000, 4, 8, 0, 2548, -1, "", 1);// 128
|
||||
AddComplexComponent((BaseAddon)this, 22000, 3, 9, 0, 2548, -1, "", 1);// 129
|
||||
AddComplexComponent((BaseAddon)this, 22000, 3, 8, 0, 2548, -1, "", 1);// 130
|
||||
AddComplexComponent((BaseAddon)this, 22000, 2, 9, 0, 2548, -1, "", 1);// 131
|
||||
AddComplexComponent((BaseAddon)this, 22000, 2, 8, 0, 2548, -1, "", 1);// 132
|
||||
AddComplexComponent((BaseAddon)this, 22000, 1, 9, 0, 2548, -1, "", 1);// 133
|
||||
AddComplexComponent((BaseAddon)this, 22000, 1, 8, 0, 2548, -1, "", 1);// 134
|
||||
AddComplexComponent((BaseAddon)this, 22000, 0, 9, 0, 2548, -1, "", 1);// 135
|
||||
AddComplexComponent((BaseAddon)this, 22000, 0, 8, 0, 2548, -1, "", 1);// 136
|
||||
AddComplexComponent((BaseAddon)this, 22000, -1, 9, 0, 2548, -1, "", 1);// 137
|
||||
AddComplexComponent((BaseAddon)this, 22000, -1, 8, 0, 2548, -1, "", 1);// 138
|
||||
AddComplexComponent((BaseAddon)this, 22000, -2, 9, 0, 2548, -1, "", 1);// 139
|
||||
AddComplexComponent((BaseAddon)this, 22000, -2, 8, 0, 2548, -1, "", 1);// 140
|
||||
AddComplexComponent((BaseAddon)this, 22000, -3, 9, 0, 2548, -1, "", 1);// 141
|
||||
AddComplexComponent((BaseAddon)this, 22000, -3, 8, 0, 2548, -1, "", 1);// 142
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 9, 0, 2548, -1, "", 1);// 143
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 8, 0, 2548, -1, "", 1);// 144
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 9, 0, 2548, -1, "", 1);// 145
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 8, 0, 2548, -1, "", 1);// 146
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, 9, 0, 2548, -1, "", 1);// 147
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, 8, 0, 2548, -1, "", 1);// 148
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, 9, 0, 2548, -1, "", 1);// 149
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, 8, 0, 2548, -1, "", 1);// 150
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, 9, 0, 2548, -1, "", 1);// 151
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, 8, 0, 2548, -1, "", 1);// 152
|
||||
AddComplexComponent((BaseAddon)this, 8136, -3, 6, 0, 2548, -1, "", 1);// 154
|
||||
AddComplexComponent((BaseAddon)this, 8446, -2, 6, 0, 1920, -1, "", 1);// 155
|
||||
AddComplexComponent((BaseAddon)this, 22000, -3, 2, 0, 2548, -1, "", 1);// 156
|
||||
AddComplexComponent((BaseAddon)this, 22000, -1, 2, 0, 2548, -1, "", 1);// 157
|
||||
AddComplexComponent((BaseAddon)this, 22000, -2, 2, 0, 2548, -1, "", 1);// 158
|
||||
AddComplexComponent((BaseAddon)this, 22000, 7, 2, 0, 2548, -1, "", 1);// 159
|
||||
AddComplexComponent((BaseAddon)this, 22000, 7, 1, 0, 2548, -1, "", 1);// 160
|
||||
AddComplexComponent((BaseAddon)this, 22000, 7, 0, 0, 2548, -1, "", 1);// 161
|
||||
AddComplexComponent((BaseAddon)this, 22000, 7, -1, 0, 2548, -1, "", 1);// 162
|
||||
AddComplexComponent((BaseAddon)this, 22000, 7, -2, 0, 2548, -1, "", 1);// 163
|
||||
AddComplexComponent((BaseAddon)this, 22000, 7, -3, 0, 2548, -1, "", 1);// 164
|
||||
AddComplexComponent((BaseAddon)this, 22000, 6, 2, 0, 2548, -1, "", 1);// 165
|
||||
AddComplexComponent((BaseAddon)this, 22000, 6, 1, 0, 2548, -1, "", 1);// 166
|
||||
AddComplexComponent((BaseAddon)this, 22000, 6, 0, 0, 2548, -1, "", 1);// 167
|
||||
AddComplexComponent((BaseAddon)this, 22000, 6, -1, 0, 2548, -1, "", 1);// 168
|
||||
AddComplexComponent((BaseAddon)this, 22000, 6, -2, 0, 2548, -1, "", 1);// 169
|
||||
AddComplexComponent((BaseAddon)this, 22000, 6, -3, 0, 2548, -1, "", 1);// 170
|
||||
AddComplexComponent((BaseAddon)this, 22000, 5, 2, 0, 2548, -1, "", 1);// 171
|
||||
AddComplexComponent((BaseAddon)this, 22000, 5, 1, 0, 2548, -1, "", 1);// 172
|
||||
AddComplexComponent((BaseAddon)this, 22000, 5, 0, 0, 2548, -1, "", 1);// 173
|
||||
AddComplexComponent((BaseAddon)this, 22000, 5, -1, 0, 2548, -1, "", 1);// 174
|
||||
AddComplexComponent((BaseAddon)this, 22000, 7, 7, 0, 2548, -1, "", 1);// 175
|
||||
AddComplexComponent((BaseAddon)this, 22000, 7, 6, 0, 2548, -1, "", 1);// 176
|
||||
AddComplexComponent((BaseAddon)this, 22000, 7, 5, 0, 2548, -1, "", 1);// 177
|
||||
AddComplexComponent((BaseAddon)this, 22000, 7, 4, 0, 2548, -1, "", 1);// 178
|
||||
AddComplexComponent((BaseAddon)this, 22000, 7, 3, 0, 2548, -1, "", 1);// 179
|
||||
AddComplexComponent((BaseAddon)this, 22000, 6, 7, 0, 2548, -1, "", 1);// 180
|
||||
AddComplexComponent((BaseAddon)this, 22000, 6, 6, 0, 2548, -1, "", 1);// 181
|
||||
AddComplexComponent((BaseAddon)this, 22000, 6, 5, 0, 2548, -1, "", 1);// 182
|
||||
AddComplexComponent((BaseAddon)this, 22000, 6, 4, 0, 2548, -1, "", 1);// 183
|
||||
AddComplexComponent((BaseAddon)this, 22000, 6, 3, 0, 2548, -1, "", 1);// 184
|
||||
AddComplexComponent((BaseAddon)this, 22000, 5, 7, 0, 2548, -1, "", 1);// 185
|
||||
AddComplexComponent((BaseAddon)this, 22000, 5, 6, 0, 2548, -1, "", 1);// 186
|
||||
AddComplexComponent((BaseAddon)this, 22000, 5, 5, 0, 2548, -1, "", 1);// 187
|
||||
AddComplexComponent((BaseAddon)this, 22000, 5, 4, 0, 2548, -1, "", 1);// 188
|
||||
AddComplexComponent((BaseAddon)this, 22000, 5, 3, 0, 2548, -1, "", 1);// 189
|
||||
AddComplexComponent((BaseAddon)this, 22000, 4, 7, 0, 2548, -1, "", 1);// 190
|
||||
AddComplexComponent((BaseAddon)this, 22000, 4, 6, 0, 2548, -1, "", 1);// 191
|
||||
AddComplexComponent((BaseAddon)this, 22000, 4, 5, 0, 2548, -1, "", 1);// 192
|
||||
AddComplexComponent((BaseAddon)this, 22000, 4, 4, 0, 2548, -1, "", 1);// 193
|
||||
AddComplexComponent((BaseAddon)this, 22000, 4, 3, 0, 2548, -1, "", 1);// 194
|
||||
AddComplexComponent((BaseAddon)this, 22000, 3, 7, 0, 2548, -1, "", 1);// 195
|
||||
AddComplexComponent((BaseAddon)this, 22000, 3, 6, 0, 2548, -1, "", 1);// 196
|
||||
AddComplexComponent((BaseAddon)this, 22000, 3, 5, 0, 2548, -1, "", 1);// 197
|
||||
AddComplexComponent((BaseAddon)this, 22000, 3, 4, 0, 2548, -1, "", 1);// 198
|
||||
AddComplexComponent((BaseAddon)this, 22000, 3, 3, 0, 2548, -1, "", 1);// 199
|
||||
AddComplexComponent((BaseAddon)this, 22000, 2, 7, 0, 2548, -1, "", 1);// 200
|
||||
AddComplexComponent((BaseAddon)this, 22000, 2, 6, 0, 2548, -1, "", 1);// 201
|
||||
AddComplexComponent((BaseAddon)this, 22000, 2, 5, 0, 2548, -1, "", 1);// 202
|
||||
AddComplexComponent((BaseAddon)this, 22000, 2, 4, 0, 2548, -1, "", 1);// 203
|
||||
AddComplexComponent((BaseAddon)this, 22000, 2, 3, 0, 2548, -1, "", 1);// 204
|
||||
AddComplexComponent((BaseAddon)this, 22000, 1, 7, 0, 2548, -1, "", 1);// 205
|
||||
AddComplexComponent((BaseAddon)this, 22000, 1, 6, 0, 2548, -1, "", 1);// 206
|
||||
AddComplexComponent((BaseAddon)this, 22000, 1, 5, 0, 2548, -1, "", 1);// 207
|
||||
AddComplexComponent((BaseAddon)this, 22000, 1, 4, 0, 2548, -1, "", 1);// 208
|
||||
AddComplexComponent((BaseAddon)this, 22000, 1, 3, 0, 2548, -1, "", 1);// 209
|
||||
AddComplexComponent((BaseAddon)this, 22000, 0, 7, 0, 2548, -1, "", 1);// 210
|
||||
AddComplexComponent((BaseAddon)this, 22000, 0, 6, 0, 2548, -1, "", 1);// 211
|
||||
AddComplexComponent((BaseAddon)this, 22000, 0, 5, 0, 2548, -1, "", 1);// 212
|
||||
AddComplexComponent((BaseAddon)this, 22000, 0, 4, 0, 2548, -1, "", 1);// 213
|
||||
AddComplexComponent((BaseAddon)this, 22000, 0, 3, 0, 2548, -1, "", 1);// 214
|
||||
AddComplexComponent((BaseAddon)this, 22000, -1, 7, 0, 2548, -1, "", 1);// 215
|
||||
AddComplexComponent((BaseAddon)this, 22000, -1, 6, 0, 2548, -1, "", 1);// 216
|
||||
AddComplexComponent((BaseAddon)this, 22000, -1, 5, 0, 2548, -1, "", 1);// 217
|
||||
AddComplexComponent((BaseAddon)this, 22000, -1, 4, 0, 2548, -1, "", 1);// 218
|
||||
AddComplexComponent((BaseAddon)this, 22000, -1, 3, 0, 2548, -1, "", 1);// 219
|
||||
AddComplexComponent((BaseAddon)this, 22000, -2, 7, 0, 2548, -1, "", 1);// 220
|
||||
AddComplexComponent((BaseAddon)this, 22000, -2, 6, 0, 2548, -1, "", 1);// 221
|
||||
AddComplexComponent((BaseAddon)this, 22000, -2, 5, 0, 2548, -1, "", 1);// 222
|
||||
AddComplexComponent((BaseAddon)this, 22000, -2, 4, 0, 2548, -1, "", 1);// 223
|
||||
AddComplexComponent((BaseAddon)this, 22000, -2, 3, 0, 2548, -1, "", 1);// 224
|
||||
AddComplexComponent((BaseAddon)this, 22000, -3, 7, 0, 2548, -1, "", 1);// 225
|
||||
AddComplexComponent((BaseAddon)this, 22000, -3, 6, 0, 2548, -1, "", 1);// 226
|
||||
AddComplexComponent((BaseAddon)this, 22000, -3, 5, 0, 2548, -1, "", 1);// 227
|
||||
AddComplexComponent((BaseAddon)this, 22000, -3, 4, 0, 2548, -1, "", 1);// 228
|
||||
AddComplexComponent((BaseAddon)this, 22000, -3, 3, 0, 2548, -1, "", 1);// 229
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 7, 0, 2548, -1, "", 1);// 230
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 6, 0, 2548, -1, "", 1);// 231
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 5, 0, 2548, -1, "", 1);// 232
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 4, 0, 2548, -1, "", 1);// 233
|
||||
AddComplexComponent((BaseAddon)this, 22000, -4, 3, 0, 2548, -1, "", 1);// 234
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 7, 0, 2548, -1, "", 1);// 235
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 6, 0, 2548, -1, "", 1);// 236
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 5, 0, 2548, -1, "", 1);// 237
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 4, 0, 2548, -1, "", 1);// 238
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 3, 0, 2548, -1, "", 1);// 239
|
||||
AddComplexComponent((BaseAddon)this, 22000, -5, 2, 0, 2548, -1, "", 1);// 240
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, 7, 0, 2548, -1, "", 1);// 241
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, 6, 0, 2548, -1, "", 1);// 242
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, 5, 0, 2548, -1, "", 1);// 243
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, 4, 0, 2548, -1, "", 1);// 244
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, 3, 0, 2548, -1, "", 1);// 245
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, 2, 0, 2548, -1, "", 1);// 246
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, 7, 0, 2548, -1, "", 1);// 247
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, 6, 0, 2548, -1, "", 1);// 248
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, 5, 0, 2548, -1, "", 1);// 249
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, 4, 0, 2548, -1, "", 1);// 250
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, 3, 0, 2548, -1, "", 1);// 251
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, 2, 0, 2548, -1, "", 1);// 252
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, 7, 0, 2548, -1, "", 1);// 253
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, 6, 0, 2548, -1, "", 1);// 254
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, 5, 0, 2548, -1, "", 1);// 255
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, 4, 0, 2548, -1, "", 1);// 256
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, 3, 0, 2548, -1, "", 1);// 257
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, 2, 0, 2548, -1, "", 1);// 258
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, 1, 0, 2548, -1, "", 1);// 259
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, 0, 0, 2548, -1, "", 1);// 260
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, -1, 0, 2548, -1, "", 1);// 261
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, -2, 0, 2548, -1, "", 1);// 262
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, -3, 0, 2548, -1, "", 1);// 263
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, -4, 0, 2548, -1, "", 1);// 264
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, -5, 0, 2548, -1, "", 1);// 265
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, 1, 0, 2548, -1, "", 1);// 266
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, 0, 0, 2548, -1, "", 1);// 267
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, -1, 0, 2548, -1, "", 1);// 268
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, -2, 0, 2548, -1, "", 1);// 269
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, -3, 0, 2548, -1, "", 1);// 270
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, -4, 0, 2548, -1, "", 1);// 271
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, -5, 0, 2548, -1, "", 1);// 272
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, 1, 0, 2548, -1, "", 1);// 273
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, 0, 0, 2548, -1, "", 1);// 274
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, -1, 0, 2548, -1, "", 1);// 275
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, -2, 0, 2548, -1, "", 1);// 276
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, -3, 0, 2548, -1, "", 1);// 277
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, -4, 0, 2548, -1, "", 1);// 278
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, -5, 0, 2548, -1, "", 1);// 279
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, -6, 0, 2548, -1, "", 1);// 280
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, -7, 0, 2548, -1, "", 1);// 281
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, -8, 0, 2548, -1, "", 1);// 282
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, -6, 0, 2548, -1, "", 1);// 283
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, -7, 0, 2548, -1, "", 1);// 284
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, -8, 0, 2548, -1, "", 1);// 285
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, -6, 0, 2548, -1, "", 1);// 286
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, -7, 0, 2548, -1, "", 1);// 287
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, -8, 0, 2548, -1, "", 1);// 288
|
||||
AddComplexComponent((BaseAddon)this, 14120, 4, -8, 0, 762, -1, "", 1);// 292
|
||||
AddComplexComponent((BaseAddon)this, 14120, 6, -8, 0, 762, -1, "", 1);// 293
|
||||
AddComplexComponent((BaseAddon)this, 14120, 7, -8, 0, 762, -1, "", 1);// 294
|
||||
AddComplexComponent((BaseAddon)this, 22000, -6, -9, 0, 2548, -1, "", 1);// 326
|
||||
AddComplexComponent((BaseAddon)this, 22000, -7, -9, 0, 2548, -1, "", 1);// 327
|
||||
AddComplexComponent((BaseAddon)this, 22000, -8, -9, 0, 2548, -1, "", 1);// 328
|
||||
AddComplexComponent((BaseAddon)this, 7897, 6, -9, 10, 2548, -1, "", 1);// 329
|
||||
AddComplexComponent((BaseAddon)this, 14120, 3, -9, 0, 762, -1, "", 1);// 330
|
||||
AddComplexComponent((BaseAddon)this, 14120, 2, -9, 0, 762, -1, "", 1);// 331
|
||||
AddComplexComponent((BaseAddon)this, 14120, 1, -9, 0, 762, -1, "", 1);// 332
|
||||
AddComplexComponent((BaseAddon)this, 14120, 0, -9, 0, 762, -1, "", 1);// 333
|
||||
AddComplexComponent((BaseAddon)this, 14120, -1, -9, 0, 762, -1, "", 1);// 334
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, 9, 0, 2548, -1, "", 1);// 337
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, 8, 0, 2548, -1, "", 1);// 338
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, 9, 0, 2548, -1, "", 1);// 339
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, 8, 0, 2548, -1, "", 1);// 340
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, 9, 0, 2548, -1, "", 1);// 341
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, 8, 0, 2548, -1, "", 1);// 342
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, 9, 0, 2548, -1, "", 1);// 343
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, 8, 0, 2548, -1, "", 1);// 344
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, 9, 0, 2548, -1, "", 1);// 345
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, 8, 0, 2548, -1, "", 1);// 346
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, 7, 0, 2548, -1, "", 1);// 350
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, 6, 0, 2548, -1, "", 1);// 351
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, 5, 0, 2548, -1, "", 1);// 352
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, 4, 0, 2548, -1, "", 1);// 353
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, 3, 0, 2548, -1, "", 1);// 354
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, 2, 0, 2548, -1, "", 1);// 355
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, 7, 0, 2548, -1, "", 1);// 356
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, 6, 0, 2548, -1, "", 1);// 357
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, 5, 0, 2548, -1, "", 1);// 358
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, 4, 0, 2548, -1, "", 1);// 359
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, 3, 0, 2548, -1, "", 1);// 360
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, 2, 0, 2548, -1, "", 1);// 361
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, 7, 0, 2548, -1, "", 1);// 362
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, 6, 0, 2548, -1, "", 1);// 363
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, 5, 0, 2548, -1, "", 1);// 364
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, 4, 0, 2548, -1, "", 1);// 365
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, 3, 0, 2548, -1, "", 1);// 366
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, 2, 0, 2548, -1, "", 1);// 367
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, 7, 0, 2548, -1, "", 1);// 368
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, 6, 0, 2548, -1, "", 1);// 369
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, 5, 0, 2548, -1, "", 1);// 370
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, 4, 0, 2548, -1, "", 1);// 371
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, 3, 0, 2548, -1, "", 1);// 372
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, 2, 0, 2548, -1, "", 1);// 373
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, 7, 0, 2548, -1, "", 1);// 374
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, 6, 0, 2548, -1, "", 1);// 375
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, 5, 0, 2548, -1, "", 1);// 376
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, 4, 0, 2548, -1, "", 1);// 377
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, 3, 0, 2548, -1, "", 1);// 378
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, 2, 0, 2548, -1, "", 1);// 379
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, 1, 0, 2548, -1, "", 1);// 380
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, 0, 0, 2548, -1, "", 1);// 381
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, -1, 0, 2548, -1, "", 1);// 382
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, -2, 0, 2548, -1, "", 1);// 383
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, -3, 0, 2548, -1, "", 1);// 384
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, -4, 0, 2548, -1, "", 1);// 385
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, -5, 0, 2548, -1, "", 1);// 386
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, 1, 0, 2548, -1, "", 1);// 387
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, 0, 0, 2548, -1, "", 1);// 388
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, -1, 0, 2548, -1, "", 1);// 389
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, -2, 0, 2548, -1, "", 1);// 390
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, -3, 0, 2548, -1, "", 1);// 391
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, -4, 0, 2548, -1, "", 1);// 392
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, -5, 0, 2548, -1, "", 1);// 393
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, 1, 0, 2548, -1, "", 1);// 394
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, 0, 0, 2548, -1, "", 1);// 395
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, -1, 0, 2548, -1, "", 1);// 396
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, -2, 0, 2548, -1, "", 1);// 397
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, -3, 0, 2548, -1, "", 1);// 398
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, -4, 0, 2548, -1, "", 1);// 399
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, -5, 0, 2548, -1, "", 1);// 400
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, 1, 0, 2548, -1, "", 1);// 401
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, 0, 0, 2548, -1, "", 1);// 402
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, -1, 0, 2548, -1, "", 1);// 403
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, -2, 0, 2548, -1, "", 1);// 404
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, -3, 0, 2548, -1, "", 1);// 405
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, -4, 0, 2548, -1, "", 1);// 406
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, -5, 0, 2548, -1, "", 1);// 407
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, 1, 0, 2548, -1, "", 1);// 408
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, 0, 0, 2548, -1, "", 1);// 409
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, -1, 0, 2548, -1, "", 1);// 410
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, -2, 0, 2548, -1, "", 1);// 411
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, -3, 0, 2548, -1, "", 1);// 412
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, -4, 0, 2548, -1, "", 1);// 413
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, -5, 0, 2548, -1, "", 1);// 414
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, -6, 0, 2548, -1, "", 1);// 415
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, -7, 0, 2548, -1, "", 1);// 416
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, -8, 0, 2548, -1, "", 1);// 417
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, -6, 0, 2548, -1, "", 1);// 418
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, -7, 0, 2548, -1, "", 1);// 419
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, -8, 0, 2548, -1, "", 1);// 420
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, -6, 0, 2548, -1, "", 1);// 421
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, -7, 0, 2548, -1, "", 1);// 422
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, -8, 0, 2548, -1, "", 1);// 423
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, -6, 0, 2548, -1, "", 1);// 424
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, -7, 0, 2548, -1, "", 1);// 425
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, -8, 0, 2548, -1, "", 1);// 426
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, -6, 0, 2548, -1, "", 1);// 427
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, -7, 0, 2548, -1, "", 1);// 428
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, -8, 0, 2548, -1, "", 1);// 429
|
||||
AddComplexComponent((BaseAddon)this, 22000, -9, -9, 0, 2548, -1, "", 1);// 430
|
||||
AddComplexComponent((BaseAddon)this, 22000, -10, -9, 0, 2548, -1, "", 1);// 431
|
||||
AddComplexComponent((BaseAddon)this, 22000, -11, -9, 0, 2548, -1, "", 1);// 432
|
||||
AddComplexComponent((BaseAddon)this, 22000, -12, -9, 0, 2548, -1, "", 1);// 433
|
||||
AddComplexComponent((BaseAddon)this, 22000, -13, -9, 0, 2548, -1, "", 1);// 434
|
||||
}
|
||||
|
||||
public BlackthornStep8(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0); // Version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,297 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class TheFellowshipHouse : BlackthornBaseAddon
|
||||
{
|
||||
public static TheFellowshipHouse InstanceTram { get; set; }
|
||||
public static TheFellowshipHouse InstanceFel { get; set; }
|
||||
|
||||
private static int[,] m_AddOnSimpleComponents = new int[,]
|
||||
{
|
||||
{3314, 8, -8, 19}, {3314, 8, -4, 18}, {2147, -2, 6, 11}// 1 2 3
|
||||
, {2147, -2, 6, 17}, {2147, -2, 6, 23}, {2147, -1, 6, 11}// 4 5 6
|
||||
, {2147, -1, 6, 17}, {2147, -1, 6, 23}, {2147, 0, 6, 11}// 7 8 9
|
||||
, {2147, 1, 6, 11}, {2147, 2, 6, 11}, {2147, 3, 6, 11}// 10 11 12
|
||||
, {2147, 0, 6, 17}, {2147, 0, 6, 23}, {2147, 1, 6, 17}// 13 14 15
|
||||
, {2147, 1, 6, 23}, {2147, 2, 6, 17}, {2147, 3, 6, 17}// 16 17 18
|
||||
, {2147, 2, 6, 23}, {2147, 3, 6, 23}, {1872, -5, 6, 27}// 19 20 21
|
||||
, {1872, -6, 6, 27}, {1872, -4, 6, 27}, {1872, -3, 6, 27}// 22 23 24
|
||||
, {1872, -2, 6, 27}, {1872, -1, 6, 27}, {1872, 1, 6, 27}// 25 26 27
|
||||
, {1872, 2, 6, 27}, {1872, 3, 6, 27}, {1872, 0, 6, 27}// 28 29 30
|
||||
, {1872, -6, 6, 12}, {1872, -5, 6, 12}, {1872, -4, 6, 12}// 31 32 33
|
||||
, {1880, -7, 7, 26}, {1431, -1, 6, 61}, {1431, 0, 6, 64}// 34 35 36
|
||||
, {1431, 1, 6, 67}, {1430, 2, 6, 67}, {1430, 3, 6, 64}// 37 38 39
|
||||
, {2147, 4, 6, 11}, {2147, 5, 6, 11}, {2147, 4, 6, 17}// 40 41 42
|
||||
, {2147, 5, 6, 17}, {2147, 4, 6, 23}, {2147, 5, 6, 23}// 43 44 45
|
||||
, {2146, 6, 6, 11}, {2146, 6, 6, 17}, {2146, 6, 6, 23}// 46 47 48
|
||||
, {1872, 4, 6, 27}, {1872, 5, 6, 27}, {1872, 6, 6, 27}// 49 50 51
|
||||
, {1430, 4, 6, 61}, {3309, 6, 7, 10}, {11515, 1, 7, 9}// 52 53 54
|
||||
, {3310, 5, 7, 6}, {11516, 5, 7, 9}, {1873, -6, 11, 8}// 55 56 57
|
||||
, {1873, -5, 11, 8}, {1873, -4, 11, 8}, {1873, -3, 11, 8}// 58 59 60
|
||||
, {1872, -3, 8, 6}, {1872, -3, 9, 6}, {1872, -3, 10, 7}// 61 62 63
|
||||
, {1872, -3, 9, 11}, {1872, -3, 8, 11}, {1872, -3, 8, 16}// 64 65 66
|
||||
, {1873, -3, 8, 21}, {1873, -3, 9, 16}, {1873, -3, 10, 12}// 67 68 69
|
||||
, {1872, -3, 7, 6}, {1872, -3, 7, 11}, {1872, -3, 7, 16}// 70 71 72
|
||||
, {1872, -3, 7, 21}, {3309, 2, 7, 7}, {3309, 3, 7, 9}// 73 74 75
|
||||
, {3310, -2, 7, 14}, {11515, -1, 7, 11}, {1872, -4, 8, 6}// 76 77 79
|
||||
, {1872, -4, 9, 6}, {1872, -4, 10, 7}, {1872, -4, 9, 11}// 80 81 82
|
||||
, {1872, -4, 8, 11}, {1872, -4, 8, 16}, {1873, -4, 8, 21}// 83 84 85
|
||||
, {1873, -4, 9, 16}, {1873, -4, 10, 12}, {1872, -4, 7, 6}// 86 87 88
|
||||
, {1872, -4, 7, 11}, {1872, -4, 7, 16}, {1872, -4, 7, 21}// 89 90 91
|
||||
, {1873, -4, 7, 26}, {1872, -5, 8, 6}, {1872, -5, 9, 6}// 92 93 94
|
||||
, {1872, -5, 10, 7}, {1872, -5, 9, 11}, {1872, -5, 8, 11}// 95 96 97
|
||||
, {1872, -5, 8, 16}, {1873, -5, 8, 21}, {1872, -6, 8, 6}// 98 99 101
|
||||
, {1873, -5, 9, 16}, {1873, -5, 10, 12}, {1872, -5, 7, 6}// 102 103 104
|
||||
, {1872, -5, 7, 11}, {1872, -5, 7, 16}, {1872, -5, 7, 21}// 105 106 107
|
||||
, {1873, -5, 7, 26}, {41374, 0, 7, 7}, {3309, 4, 7, 7}// 108 109 110
|
||||
, {1873, -6, 7, 26}, {1873, -6, 8, 21}, {1873, -6, 10, 12}// 112 113 114
|
||||
, {1872, -6, 7, 11}, {1872, -6, 10, 7}, {1873, -6, 9, 16}// 115 116 117
|
||||
, {1872, -6, 7, 16}, {1872, -6, 8, 11}, {1872, -6, 7, 21}// 118 119 120
|
||||
, {1872, -6, 8, 16}, {1872, -6, 9, 6}, {41254, 0, 8, 6}// 121 122 123
|
||||
, {1873, -3, 7, 26}, {41374, 1, 7, 4}, {1872, -6, 9, 11}// 124 125 126
|
||||
, {1872, -6, 7, 6}, {1872, -6, -10, 27}, {1872, -6, -9, 27}// 127 135 136
|
||||
, {1872, -6, -8, 27}, {1872, -6, -7, 27}, {1872, -5, -10, 27}// 137 138 139
|
||||
, {1872, -5, -9, 27}, {1872, -5, -8, 27}, {1872, -5, -7, 27}// 140 141 142
|
||||
, {1872, -4, -10, 27}, {1872, -4, -9, 27}, {1872, -4, -8, 27}// 143 144 145
|
||||
, {1872, -4, -7, 27}, {1872, -3, -10, 27}, {1872, -3, -9, 27}// 146 147 148
|
||||
, {1872, -3, -8, 27}, {1872, -3, -7, 27}, {1872, -2, -10, 27}// 149 150 151
|
||||
, {1872, -2, -9, 27}, {1872, -2, -8, 27}, {1872, -2, -7, 27}// 152 153 154
|
||||
, {1872, -1, -10, 27}, {1872, -1, -9, 27}, {1872, -1, -8, 27}// 155 156 157
|
||||
, {1872, -1, -7, 27}, {1872, 0, -10, 27}, {1872, 0, -9, 27}// 158 159 160
|
||||
, {1872, 0, -8, 27}, {1872, 0, -7, 27}, {1872, 1, -10, 27}// 161 162 163
|
||||
, {1872, 1, -9, 27}, {1872, 1, -8, 27}, {1872, 1, -7, 27}// 164 165 166
|
||||
, {1872, 2, -10, 27}, {1872, 2, -9, 27}, {1872, 2, -8, 27}// 167 168 169
|
||||
, {1872, 2, -7, 27}, {1872, 3, -10, 27}, {1872, 3, -9, 27}// 170 171 172
|
||||
, {1872, 3, -8, 27}, {1872, 3, -7, 27}, {28, 3, -10, 32}// 173 174 175
|
||||
, {28, 2, -10, 32}, {28, 1, -10, 32}, {28, 0, -10, 32}// 176 177 178
|
||||
, {28, -1, -10, 32}, {28, -2, -10, 32}, {27, -3, -9, 32}// 179 180 181
|
||||
, {27, -3, -8, 32}, {43, -3, -7, 32}, {2762, -2, -8, 32}// 182 183 184
|
||||
, {2765, -2, -7, 32}, {2766, -1, -8, 32}, {2766, 0, -8, 32}// 185 186 187
|
||||
, {2766, 1, -8, 32}, {2766, 2, -8, 32}, {2760, -1, -7, 32}// 188 189 190
|
||||
, {2760, 0, -7, 32}, {2760, 1, -7, 32}, {2760, 2, -7, 32}// 191 192 193
|
||||
, {1431, -2, -7, 55}, {1431, -2, -8, 55}, {1431, -2, -9, 55}// 194 195 196
|
||||
, {1431, -1, -7, 58}, {1431, -1, -8, 58}, {1431, -1, -9, 58}// 197 198 199
|
||||
, {1431, 0, -9, 61}, {1431, 0, -8, 61}, {1431, -1, -7, 12}// 200 201 202
|
||||
, {1431, 0, -7, 61}, {1431, 1, -7, 64}, {1431, 1, -8, 64}// 203 204 205
|
||||
, {1431, 1, -9, 64}, {1430, 2, -7, 64}, {1430, 2, -8, 64}// 206 207 208
|
||||
, {1430, 2, -9, 64}, {1430, 3, -7, 61}, {1430, 3, -8, 61}// 209 210 211
|
||||
, {1430, 3, -9, 61}, {3215, -6, -10, 32}, {3215, -7, -8, 32}// 212 213 214
|
||||
, {3215, -7, -9, 32}, {3215, -6, -9, 32}, {1872, -6, 1, 27}// 215 216 217
|
||||
, {1872, -6, 2, 27}, {1872, -6, 3, 27}, {1872, -6, 4, 27}// 218 219 220
|
||||
, {1872, -6, 5, 27}, {1872, -5, 1, 27}, {1872, -5, 2, 27}// 221 222 223
|
||||
, {1872, -5, 3, 27}, {1872, -5, 4, 27}, {1872, -5, 5, 27}// 224 225 226
|
||||
, {1872, -4, -6, 27}, {1872, -4, -5, 27}, {1872, -4, -4, 27}// 227 228 229
|
||||
, {1872, -4, -3, 27}, {1872, -4, -2, 27}, {1872, -4, -1, 27}// 230 231 232
|
||||
, {1872, -4, 0, 27}, {1872, -4, 1, 27}, {1872, -4, 2, 27}// 233 234 235
|
||||
, {1872, -4, 3, 27}, {1872, -4, 4, 27}, {1872, -4, 5, 27}// 236 237 238
|
||||
, {1872, -3, -6, 27}, {1872, -3, -5, 27}, {1872, -3, -4, 27}// 239 240 241
|
||||
, {1872, -3, -3, 27}, {1872, -3, -2, 27}, {1872, -3, -1, 27}// 242 243 244
|
||||
, {1872, -3, 0, 27}, {1872, -3, 1, 27}, {1872, -3, 2, 27}// 245 246 247
|
||||
, {1872, -3, 3, 27}, {1872, -3, 4, 27}, {1872, -3, 5, 27}// 248 249 250
|
||||
, {1872, -2, -6, 27}, {1872, -2, -5, 27}, {1872, -2, -4, 27}// 251 252 253
|
||||
, {1872, -2, -3, 27}, {1872, -2, -2, 27}, {1872, -2, -1, 27}// 254 255 256
|
||||
, {1872, -2, 0, 27}, {1872, -2, 1, 27}, {1872, -2, 2, 27}// 257 258 259
|
||||
, {1872, -2, 3, 27}, {1872, -2, 4, 27}, {1872, -2, 5, 27}// 260 261 262
|
||||
, {1872, -1, -6, 27}, {1872, -1, -5, 27}, {1872, -1, -4, 27}// 263 264 265
|
||||
, {1872, -1, -3, 27}, {1872, -1, -2, 27}, {1872, -1, -1, 27}// 266 267 268
|
||||
, {1872, -1, 0, 27}, {1872, -1, 1, 27}, {1872, -1, 2, 27}// 269 270 271
|
||||
, {1872, -1, 3, 27}, {1872, -1, 4, 27}, {1872, -1, 5, 27}// 272 273 274
|
||||
, {1872, 0, -6, 27}, {1872, 0, -5, 27}, {1872, 0, -4, 27}// 275 276 277
|
||||
, {1872, 0, -3, 27}, {1872, 0, -2, 27}, {1872, 0, -1, 27}// 278 279 280
|
||||
, {1872, 0, 0, 27}, {1872, 0, 1, 27}, {1872, 0, 2, 27}// 281 282 283
|
||||
, {1872, 0, 3, 27}, {1872, 0, 4, 27}, {1872, 0, 5, 27}// 284 285 286
|
||||
, {1872, 1, -6, 27}, {1872, 1, -5, 27}, {1872, 1, -4, 27}// 287 288 289
|
||||
, {1872, 1, -3, 27}, {1872, 1, -2, 27}, {1872, 1, -1, 27}// 290 291 292
|
||||
, {1872, 1, 0, 27}, {1872, 1, 1, 27}, {1872, 1, 2, 27}// 293 294 295
|
||||
, {1872, 1, 3, 27}, {1872, 1, 4, 27}, {1872, 1, 5, 27}// 296 297 298
|
||||
, {1872, 2, -6, 27}, {1872, 2, -5, 27}, {1872, 2, -4, 27}// 299 300 301
|
||||
, {1872, 2, -3, 27}, {1872, 2, -2, 27}, {1872, 2, -1, 27}// 302 303 304
|
||||
, {1872, 2, 0, 27}, {1872, 2, 1, 27}, {1872, 2, 2, 27}// 305 306 307
|
||||
, {1872, 2, 3, 27}, {1872, 2, 4, 27}, {1872, 2, 5, 27}// 308 309 310
|
||||
, {1872, 3, -6, 27}, {1872, 3, -5, 27}, {1872, 3, -4, 27}// 311 312 313
|
||||
, {1872, 3, -3, 27}, {1872, 3, -2, 27}, {1872, 3, -1, 27}// 314 315 316
|
||||
, {1872, 3, 0, 27}, {1872, 3, 1, 27}, {1872, 3, 2, 27}// 317 318 319
|
||||
, {1872, 3, 3, 27}, {1872, 3, 4, 27}, {1872, 3, 5, 27}// 320 321 322
|
||||
, {42, -3, -4, 32}, {43, -3, -3, 32}, {42, -3, 0, 32}// 323 324 325
|
||||
, {27, -3, 1, 32}, {28, -2, 1, 32}, {28, -3, 1, 32}// 326 327 328
|
||||
, {27, -4, 2, 32}, {27, -4, 3, 32}, {27, -4, 4, 32}// 329 330 331
|
||||
, {7978, -3, 5, 32}, {7979, -3, 5, 40}, {2762, -2, 2, 32}// 332 333 334
|
||||
, {2765, -2, 3, 32}, {2763, -2, 4, 32}, {2766, -1, 2, 32}// 335 336 337
|
||||
, {2766, 0, 2, 32}, {2766, 1, 2, 32}, {2766, 2, 2, 32}// 338 339 340
|
||||
, {2764, 3, 2, 32}, {2768, -1, 4, 32}, {2768, 0, 4, 32}// 341 342 343
|
||||
, {2768, 1, 4, 32}, {2768, 2, 4, 32}, {2761, 3, 4, 32}// 344 345 346
|
||||
, {2767, 3, 3, 32}, {2760, -1, 3, 32}, {2760, 2, 3, 32}// 347 348 349
|
||||
, {2758, 0, 3, 32}, {2759, 1, 3, 32}, {2833, -2, -3, 32}// 350 351 352
|
||||
, {2836, -2, -4, 32}, {2835, -2, -5, 32}, {2765, -2, -6, 32}// 353 354 355
|
||||
, {2765, -2, -5, 32}, {2765, -2, -4, 32}, {2765, -2, -3, 32}// 356 357 358
|
||||
, {2765, -2, -2, 32}, {2765, -2, -1, 32}, {2763, -2, 0, 32}// 359 360 361
|
||||
, {2768, -1, 0, 32}, {2768, 0, 0, 32}, {2768, 1, 0, 32}// 362 363 364
|
||||
, {2768, 2, 0, 32}, {2760, -1, -6, 32}, {2759, 1, -6, 32}// 365 366 367
|
||||
, {2760, 0, -6, 32}, {2760, 2, -6, 32}, {2760, 1, -5, 32}// 368 369 370
|
||||
, {2760, 2, -5, 32}, {2760, -1, -5, 32}, {2759, 0, -5, 32}// 371 372 373
|
||||
, {2759, 1, -4, 32}, {2759, 0, -3, 32}, {2759, 1, -2, 32}// 374 375 376
|
||||
, {2760, -1, -4, 32}, {2760, 0, -4, 32}, {2760, 2, -4, 32}// 377 378 379
|
||||
, {2760, -1, -3, 32}, {2760, -1, -2, 32}, {2760, -1, -1, 32}// 380 381 382
|
||||
, {2760, 0, -1, 32}, {2760, 0, -2, 32}, {2760, 1, -3, 32}// 383 384 385
|
||||
, {2760, 2, -3, 32}, {2760, 2, -2, 32}, {2760, 1, -1, 32}// 386 387 388
|
||||
, {2760, 2, -1, 32}, {1431, -3, 5, 55}, {1431, -3, 4, 55}// 389 390 391
|
||||
, {1431, -3, 3, 55}, {1431, -3, 2, 55}, {1431, -2, 1, 55}// 392 393 394
|
||||
, {1431, -2, 0, 55}, {1431, -2, -1, 55}, {1431, -2, -2, 55}// 395 396 397
|
||||
, {1431, -2, -3, 55}, {1431, -2, -4, 55}, {1431, -2, -5, 55}// 398 399 400
|
||||
, {1431, -2, -6, 55}, {1431, -2, 2, 58}, {1431, -2, 3, 58}// 401 402 403
|
||||
, {1431, -2, 4, 58}, {1431, -2, 5, 58}, {1431, -1, 5, 61}// 404 405 406
|
||||
, {1431, -1, 4, 61}, {1431, -1, 3, 61}, {1431, -1, 2, 61}// 407 408 409
|
||||
, {1431, -1, 1, 58}, {1431, -1, 0, 58}, {1431, -1, -1, 58}// 410 411 412
|
||||
, {1431, -1, -2, 58}, {1431, -1, -3, 58}, {1431, -1, -4, 58}// 413 414 415
|
||||
, {1431, -1, -5, 58}, {1431, -1, -6, 58}, {1431, -1, -6, 12}// 416 417 418
|
||||
, {1431, -1, -5, 12}, {1431, -1, -4, 12}, {1431, -1, -3, 12}// 419 420 421
|
||||
, {1431, -1, -2, 12}, {1431, -1, -1, 12}, {1431, -1, 0, 12}// 422 423 424
|
||||
, {1431, -1, 1, 12}, {1431, -1, 2, 12}, {1431, 0, -6, 61}// 425 426 427
|
||||
, {1431, 0, -5, 61}, {1431, 0, -4, 61}, {1431, 0, -3, 61}// 428 429 430
|
||||
, {1431, 0, -2, 61}, {1431, 0, -1, 61}, {1431, 0, 0, 61}// 431 432 433
|
||||
, {1431, 0, 1, 61}, {1431, 0, 2, 64}, {1431, 0, 3, 64}// 434 435 436
|
||||
, {1431, 0, 4, 64}, {1431, 0, 5, 64}, {1431, 1, 5, 67}// 437 438 439
|
||||
, {1431, 1, 4, 67}, {1431, 1, 3, 67}, {1431, 1, 2, 67}// 440 441 442
|
||||
, {1431, 1, 1, 64}, {1431, 1, 0, 64}, {1431, 1, -1, 64}// 443 444 445
|
||||
, {1431, 1, -2, 64}, {1431, 1, -3, 64}, {1431, 1, -4, 64}// 446 447 448
|
||||
, {1431, 1, -5, 64}, {1431, 1, -6, 64}, {1430, 2, 5, 67}// 449 450 451
|
||||
, {1430, 2, 4, 67}, {1430, 2, 3, 67}, {1430, 2, 2, 67}// 452 453 454
|
||||
, {1430, 2, 1, 64}, {1430, 2, 0, 64}, {1430, 2, -1, 64}// 455 456 457
|
||||
, {1430, 2, -2, 64}, {1430, 2, -3, 64}, {1430, 2, -4, 64}// 458 459 460
|
||||
, {1430, 2, -5, 64}, {1430, 2, -6, 64}, {1430, 3, 5, 64}// 461 462 463
|
||||
, {1430, 3, 4, 64}, {1430, 3, 3, 64}, {1430, 3, 2, 64}// 464 465 466
|
||||
, {1430, 3, 1, 61}, {1430, 3, 0, 61}, {1430, 3, -1, 61}// 467 468 469
|
||||
, {1430, 3, -2, 61}, {1430, 3, -3, 61}, {1430, 3, -4, 61}// 470 471 472
|
||||
, {1430, 3, -5, 61}, {1430, 3, -6, 61}, {3215, -7, 5, 32}// 473 474 475
|
||||
, {3215, -7, 4, 32}, {3215, -7, 2, 32}, {3215, -7, 1, 32}// 476 477 478
|
||||
, {3215, -7, 3, 32}, {3215, -7, 0, 32}, {2921, -1, -2, 32}// 479 480 481
|
||||
, {2920, 0, -2, 32}, {2920, 3, -2, 32}, {2921, 2, -2, 32}// 482 483 484
|
||||
, {2921, -1, -4, 32}, {2920, 0, -4, 32}, {2920, 3, -4, 32}// 485 486 487
|
||||
, {2921, 2, -4, 32}, {2921, -1, -6, 32}, {2920, 0, -6, 32}// 488 489 490
|
||||
, {2920, 3, -6, 32}, {2921, 2, -6, 32}, {2148, 6, -10, 11}// 491 492 493
|
||||
, {2148, 6, -10, 17}, {2148, 6, -10, 23}, {1872, 6, -10, 27}// 494 495 496
|
||||
, {1872, 6, -9, 27}, {1872, 6, -8, 27}, {1872, 6, -7, 27}// 497 498 499
|
||||
, {1872, 4, -10, 27}, {1872, 4, -9, 27}, {1872, 4, -8, 27}// 500 501 502
|
||||
, {1872, 5, -10, 27}, {1872, 5, -9, 27}, {1872, 5, -8, 27}// 503 504 505
|
||||
, {1872, 5, -7, 27}, {2148, 6, -7, 11}, {2148, 6, -7, 17}// 506 507 508
|
||||
, {2148, 6, -7, 23}, {2148, 6, -8, 11}, {2148, 6, -8, 17}// 509 510 511
|
||||
, {2148, 6, -8, 23}, {2148, 6, -9, 11}, {2148, 6, -9, 17}// 512 513 514
|
||||
, {2148, 6, -9, 23}, {1872, 4, -7, 27}, {27, 4, -9, 32}// 515 516 517
|
||||
, {27, 4, -8, 32}, {28, 4, -10, 32}, {1430, 4, -7, 58}// 518 519 520
|
||||
, {1430, 5, -7, 55}, {1430, 4, -8, 58}, {1430, 5, -8, 55}// 521 522 523
|
||||
, {1430, 4, -9, 58}, {1430, 5, -9, 55}, {2148, 6, 5, 11}// 524 525 526
|
||||
, {2148, 6, 4, 11}, {2148, 6, 3, 11}, {2148, 6, 2, 11}// 527 528 529
|
||||
, {2148, 6, 1, 11}, {2148, 6, 0, 11}, {2148, 6, -1, 11}// 530 531 532
|
||||
, {2148, 6, 4, 17}, {2148, 6, 5, 17}, {2148, 6, 5, 23}// 533 534 535
|
||||
, {2148, 6, 4, 23}, {2148, 6, 3, 17}, {2148, 6, 3, 23}// 536 537 538
|
||||
, {2148, 6, 2, 17}, {2148, 6, 2, 23}, {2148, 6, 1, 17}// 539 540 541
|
||||
, {2148, 6, 1, 23}, {2148, 6, 0, 17}, {2148, 6, 0, 23}// 542 543 544
|
||||
, {2148, 6, -1, 17}, {2148, 6, -1, 23}, {1872, 6, -6, 27}// 545 546 547
|
||||
, {1872, 6, -5, 27}, {1872, 6, -4, 27}, {1872, 6, -3, 27}// 548 549 550
|
||||
, {1872, 6, -2, 27}, {1872, 6, -1, 27}, {1872, 6, 0, 27}// 551 552 553
|
||||
, {1872, 6, 1, 27}, {1872, 6, 2, 27}, {1872, 6, 3, 27}// 554 555 556
|
||||
, {1872, 6, 4, 27}, {1872, 6, 5, 27}, {1872, 4, -6, 27}// 557 558 559
|
||||
, {1872, 4, -5, 27}, {1872, 4, -4, 27}, {1872, 4, -3, 27}// 560 561 562
|
||||
, {1872, 4, -2, 27}, {1872, 4, -1, 27}, {1872, 4, 0, 27}// 563 564 565
|
||||
, {1872, 4, 1, 27}, {1872, 4, 2, 27}, {1872, 4, 3, 27}// 566 567 568
|
||||
, {1872, 4, 4, 27}, {1872, 4, 5, 27}, {1872, 5, -6, 27}// 569 570 571
|
||||
, {1872, 5, -5, 27}, {1872, 5, -4, 27}, {1872, 5, -3, 27}// 572 573 574
|
||||
, {1872, 5, -2, 27}, {1872, 5, -1, 27}, {1872, 5, 0, 27}// 575 576 577
|
||||
, {1872, 5, 1, 27}, {1872, 5, 2, 27}, {1872, 5, 3, 27}// 578 579 580
|
||||
, {1872, 5, 4, 27}, {1872, 5, 5, 27}, {2148, 6, -2, 11}// 581 582 583
|
||||
, {2148, 6, -2, 17}, {2148, 6, -2, 23}, {2148, 6, -3, 11}// 584 585 586
|
||||
, {2148, 6, -3, 17}, {2148, 6, -3, 23}, {2148, 6, -4, 11}// 587 588 589
|
||||
, {2148, 6, -4, 17}, {2148, 6, -4, 23}, {2148, 6, -5, 11}// 590 591 592
|
||||
, {2148, 6, -5, 17}, {2148, 6, -5, 23}, {2148, 6, -6, 11}// 593 594 595
|
||||
, {2148, 6, -6, 17}, {2148, 6, -6, 23}, {27, 5, 4, 32}// 596 597 598
|
||||
, {27, 5, 3, 32}, {27, 5, 2, 32}, {28, 5, 1, 32}// 599 600 601
|
||||
, {28, 4, 1, 32}, {27, 4, 1, 32}, {27, 4, 0, 32}// 602 603 604
|
||||
, {27, 4, -1, 32}, {27, 4, -3, 32}, {27, 4, -4, 32}// 605 606 607
|
||||
, {27, 4, -5, 32}, {27, 4, -6, 32}, {7978, 4, 5, 32}// 608 609 610
|
||||
, {7979, 4, 5, 40}, {1430, 4, 5, 61}, {1430, 5, 5, 58}// 611 612 613
|
||||
, {1430, 6, 5, 55}, {1430, 4, 4, 61}, {1430, 5, 4, 58}// 614 615 616
|
||||
, {1430, 6, 4, 55}, {1430, 4, 3, 61}, {1430, 5, 3, 58}// 617 618 619
|
||||
, {1430, 6, 3, 55}, {1430, 4, 2, 61}, {1430, 5, 2, 58}// 620 621 622
|
||||
, {1430, 6, 2, 55}, {1430, 4, 1, 58}, {1430, 5, 1, 55}// 623 624 625
|
||||
, {1430, 4, 0, 58}, {1430, 5, 0, 55}, {1430, 4, -1, 58}// 626 627 628
|
||||
, {1430, 5, -1, 55}, {1430, 4, -2, 58}, {1430, 5, -2, 55}// 629 630 631
|
||||
, {1430, 4, -3, 58}, {1430, 5, -3, 55}, {1430, 4, -4, 58}// 632 633 634
|
||||
, {1430, 5, -4, 55}, {1430, 4, -5, 58}, {1430, 5, -5, 55}// 635 636 637
|
||||
, {1430, 4, -6, 58}, {1430, 5, -6, 55}, {3314, 7, 5, 11}// 638 639 640
|
||||
, {3314, 7, 3, 11}, {41668, 4, 3, 32}, {41728, -7, -3, 33}// 641 645 646
|
||||
, {3245, -7, -1, 33}, {3247, -6, -1, 32}, {3260, -6, -4, 31}// 647 648 649
|
||||
, {3260, -6, -3, 32}, {3260, -6, -2, 32}, {41668, -3, 3, 32}// 650 651 653
|
||||
, {41197, -5, -8, 30}, {6021, -4, -3, 32}, {41375, 6, 0, 0}// 654 661 662
|
||||
, {41375, 6, 3, 1}, {3314, 6, -7, 7}, {3245, -6, -7, 30}// 663 665 667
|
||||
, {6021, -5, -7, 32}, {6021, -4, -2, 32}, {6021, -5, -7, 32}// 675 677 678
|
||||
, {6021, -4, -4, 32}// 679
|
||||
};
|
||||
|
||||
[Constructable]
|
||||
public TheFellowshipHouse()
|
||||
{
|
||||
for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++)
|
||||
AddComponent(new AddonComponent(m_AddOnSimpleComponents[i, 0]), m_AddOnSimpleComponents[i, 1], m_AddOnSimpleComponents[i, 2], m_AddOnSimpleComponents[i, 3]);
|
||||
|
||||
AddComplexComponent((BaseAddon)this, 41185, -7, 6, 30, 22, -1, "", 1);// 78
|
||||
AddComplexComponent((BaseAddon)this, 41254, -1, 8, 8, 33, -1, "", 1);// 100
|
||||
AddComplexComponent((BaseAddon)this, 41248, 0, 7, 8, 22, -1, "", 1);// 111
|
||||
AddComplexComponent((BaseAddon)this, 10672, -3, 4, 32, 0, 26, "", 1);// 128
|
||||
AddComplexComponent((BaseAddon)this, 6571, -3, 5, 42, 0, 1, "", 1);// 129
|
||||
AddComplexComponent((BaseAddon)this, 2567, -4, 2, 34, 0, 8, "", 1);// 130
|
||||
AddComplexComponent((BaseAddon)this, 10673, 4, -7, 32, 0, 27, "", 1);// 131
|
||||
AddComplexComponent((BaseAddon)this, 10672, 5, 4, 32, 0, 26, "", 1);// 132
|
||||
AddComplexComponent((BaseAddon)this, 10673, 4, -2, 32, 0, 27, "", 1);// 133
|
||||
AddComplexComponent((BaseAddon)this, 6571, 4, 5, 42, 0, 1, "", 1);// 134
|
||||
AddComplexComponent((BaseAddon)this, 41185, -5, -10, 31, 33, -1, "", 1);// 642
|
||||
AddComplexComponent((BaseAddon)this, 41185, -5, -3, 29, 33, -1, "", 1);// 643
|
||||
AddComplexComponent((BaseAddon)this, 41185, -5, -2, 30, 22, -1, "", 1);// 644
|
||||
AddComplexComponent((BaseAddon)this, 41182, -5, -1, 30, 49, -1, "", 1);// 652
|
||||
AddComplexComponent((BaseAddon)this, 41185, -5, -9, 33, 49, -1, "", 1);// 655
|
||||
AddComplexComponent((BaseAddon)this, 41197, -5, -9, 32, 49, -1, "", 1);// 656
|
||||
AddComplexComponent((BaseAddon)this, 41252, 7, -5, 7, 22, -1, "", 1);// 657
|
||||
AddComplexComponent((BaseAddon)this, 41181, -6, 1, 32, 49, -1, "", 1);// 658
|
||||
AddComplexComponent((BaseAddon)this, 41181, -6, 2, 32, 49, -1, "", 1);// 659
|
||||
AddComplexComponent((BaseAddon)this, 41251, 7, -4, 7, 33, -1, "", 1);// 660
|
||||
AddComplexComponent((BaseAddon)this, 41253, 7, 2, 6, 22, -1, "", 1);// 664
|
||||
AddComplexComponent((BaseAddon)this, 41251, 7, -6, 10, 33, -1, "", 1);// 666
|
||||
AddComplexComponent((BaseAddon)this, 41185, -6, -8, 31, 22, -1, "", 1);// 668
|
||||
AddComplexComponent((BaseAddon)this, 41185, -6, 4, 32, 33, -1, "", 1);// 669
|
||||
AddComplexComponent((BaseAddon)this, 41187, -6, 3, 32, 22, -1, "", 1);// 670
|
||||
AddComplexComponent((BaseAddon)this, 41187, -6, 0, 30, 22, -1, "", 1);// 671
|
||||
AddComplexComponent((BaseAddon)this, 41187, -5, -6, 28, 22, -1, "", 1);// 672
|
||||
AddComplexComponent((BaseAddon)this, 41187, -5, -5, 29, 22, -1, "", 1);// 673
|
||||
AddComplexComponent((BaseAddon)this, 41182, -6, 5, 32, 49, -1, "", 1);// 674
|
||||
AddComplexComponent((BaseAddon)this, 41187, -5, -4, 29, 22, -1, "", 1);// 676
|
||||
AddComplexComponent((BaseAddon)this, 41197, -5, -8, 30, 49, -1, "", 1);// 680
|
||||
}
|
||||
|
||||
public TheFellowshipHouse(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0); // Version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
using System;
|
||||
using Server;
|
||||
using Server.Engines.Fellowship;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class BlackthornDungeonTeleporter : Item
|
||||
{
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public Point3D Dest { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public FellowshipChain Chain { get; set; }
|
||||
|
||||
[Constructable]
|
||||
public BlackthornDungeonTeleporter()
|
||||
: this(FellowshipChain.None)
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public BlackthornDungeonTeleporter(FellowshipChain chain)
|
||||
: base(0x1827)
|
||||
{
|
||||
Chain = chain;
|
||||
Visible = true;
|
||||
Movable = false;
|
||||
}
|
||||
|
||||
public BlackthornDungeonTeleporter(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool OnMoveOver(Mobile m)
|
||||
{
|
||||
if (m is PlayerMobile)
|
||||
{
|
||||
if (Worker.FellowshipChainList.ContainsKey(m) && Worker.FellowshipChainList[m] == Chain || Chain == FellowshipChain.None)
|
||||
{
|
||||
Timer.DelayCall(DoTeleport, m);
|
||||
}
|
||||
else
|
||||
{
|
||||
m.SendLocalizedMessage(1159235); // You may not pass.
|
||||
}
|
||||
}
|
||||
|
||||
return base.OnMoveOver(m);
|
||||
}
|
||||
|
||||
public virtual void DoTeleport(Mobile m)
|
||||
{
|
||||
Map map = Map;
|
||||
|
||||
if (map == null || map == Map.Internal)
|
||||
{
|
||||
map = m.Map;
|
||||
}
|
||||
|
||||
Point3D p = Dest;
|
||||
|
||||
if (p == Point3D.Zero)
|
||||
{
|
||||
p = m.Location;
|
||||
}
|
||||
|
||||
BaseCreature.TeleportPets(m, p, map);
|
||||
|
||||
m.MoveToWorld(p, map);
|
||||
|
||||
m.PlaySound(510);
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
|
||||
writer.Write(Dest);
|
||||
writer.Write((int)Chain);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Dest = reader.ReadPoint3D();
|
||||
Chain = (FellowshipChain)reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
640
Scripts/Services/Seasonal Events/ForsakenFoes/Generate.cs
Normal file
640
Scripts/Services/Seasonal Events/ForsakenFoes/Generate.cs
Normal file
@@ -0,0 +1,640 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Engines.Points;
|
||||
using Server.Mobiles;
|
||||
using Server.Engines.Quests;
|
||||
|
||||
namespace Server.Engines.Fellowship
|
||||
{
|
||||
public static class ForsakenFoesGeneration
|
||||
{
|
||||
public static void Initialize()
|
||||
{
|
||||
if (Core.EJ)
|
||||
{
|
||||
EventSink.WorldSave += OnWorldSave;
|
||||
|
||||
if (MiningCooperativeMerchant.InstanceTram == null && !Siege.SiegeShard)
|
||||
{
|
||||
MiningCooperativeMerchant.InstanceTram = new MiningCooperativeMerchant();
|
||||
MiningCooperativeMerchant.InstanceTram.MoveToWorld(new Point3D(2497, 432, 15), Map.Trammel);
|
||||
|
||||
MiningCooperativeMerchant.InstanceTram.Home = MiningCooperativeMerchant.InstanceTram.Location;
|
||||
MiningCooperativeMerchant.InstanceTram.RangeHome = 5;
|
||||
}
|
||||
|
||||
if (MiningCooperativeMerchant.InstanceFel == null)
|
||||
{
|
||||
MiningCooperativeMerchant.InstanceFel = new MiningCooperativeMerchant();
|
||||
MiningCooperativeMerchant.InstanceFel.MoveToWorld(new Point3D(2497, 432, 15), Map.Felucca);
|
||||
|
||||
MiningCooperativeMerchant.InstanceFel.Home = MiningCooperativeMerchant.InstanceFel.Location;
|
||||
MiningCooperativeMerchant.InstanceFel.RangeHome = 5;
|
||||
}
|
||||
|
||||
if (FellowshipAdept.InstanceTram == null && !Siege.SiegeShard)
|
||||
{
|
||||
FellowshipAdept.InstanceTram = new FellowshipAdept();
|
||||
FellowshipAdept.InstanceTram.MoveToWorld(new Point3D(1711, 1570, 44), Map.Trammel);
|
||||
|
||||
FellowshipAdept.InstanceTram.Home = FellowshipAdept.InstanceTram.Location;
|
||||
FellowshipAdept.InstanceTram.RangeHome = 5;
|
||||
}
|
||||
|
||||
if (FellowshipAdept.InstanceFel == null)
|
||||
{
|
||||
FellowshipAdept.InstanceFel = new FellowshipAdept();
|
||||
FellowshipAdept.InstanceFel.MoveToWorld(new Point3D(1711, 1570, 44), Map.Felucca);
|
||||
|
||||
FellowshipAdept.InstanceFel.Home = FellowshipAdept.InstanceFel.Location;
|
||||
FellowshipAdept.InstanceFel.RangeHome = 5;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (MiningCooperativeMerchant.InstanceTram != null)
|
||||
{
|
||||
MiningCooperativeMerchant.InstanceTram.Delete();
|
||||
}
|
||||
|
||||
if (MiningCooperativeMerchant.InstanceFel != null)
|
||||
{
|
||||
MiningCooperativeMerchant.InstanceFel.Delete();
|
||||
}
|
||||
|
||||
if (FellowshipAdept.InstanceTram != null)
|
||||
{
|
||||
FellowshipAdept.InstanceTram.Delete();
|
||||
}
|
||||
|
||||
if (FellowshipAdept.InstanceFel != null)
|
||||
{
|
||||
FellowshipAdept.InstanceFel.Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void OnWorldSave(WorldSaveEventArgs e)
|
||||
{
|
||||
CheckEnabled(true);
|
||||
}
|
||||
|
||||
public static void CheckEnabled(bool timed = false)
|
||||
{
|
||||
var fellowship = PointsSystem.FellowshipData;
|
||||
|
||||
if (fellowship.Enabled && !fellowship.InSeason)
|
||||
{
|
||||
if (timed)
|
||||
{
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(30), () =>
|
||||
{
|
||||
Utility.WriteConsoleColor(ConsoleColor.Green, "Disabling The Fellowship");
|
||||
|
||||
Remove();
|
||||
fellowship.Enabled = false;
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
Utility.WriteConsoleColor(ConsoleColor.Green, "Auto Disabling The Fellowship");
|
||||
|
||||
Remove();
|
||||
fellowship.Enabled = false;
|
||||
}
|
||||
}
|
||||
else if (!fellowship.Enabled && fellowship.InSeason)
|
||||
{
|
||||
if (timed)
|
||||
{
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(30), () =>
|
||||
{
|
||||
Utility.WriteConsoleColor(ConsoleColor.Green, "Enabling The Fellowship");
|
||||
|
||||
Generate();
|
||||
fellowship.Enabled = true;
|
||||
|
||||
if (!fellowship.QuestContentGenerated)
|
||||
{
|
||||
GenerateQuestContent();
|
||||
fellowship.QuestContentGenerated = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
Utility.WriteConsoleColor(ConsoleColor.Green, "Auto Enabling The Fellowship");
|
||||
|
||||
Generate();
|
||||
fellowship.Enabled = true;
|
||||
|
||||
if (!fellowship.QuestContentGenerated)
|
||||
{
|
||||
GenerateQuestContent();
|
||||
fellowship.QuestContentGenerated = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void GenerateQuestContent()
|
||||
{
|
||||
if (!Siege.SiegeShard)
|
||||
{
|
||||
if (TheFellowshipHouse.InstanceTram == null)
|
||||
{
|
||||
TheFellowshipHouse.InstanceTram = new TheFellowshipHouse();
|
||||
TheFellowshipHouse.InstanceTram.MoveToWorld(new Point3D(1720, 1562, 17), Map.Trammel);
|
||||
}
|
||||
|
||||
if (Follower.InstanceTram == null)
|
||||
{
|
||||
Follower.InstanceTram = new Follower();
|
||||
Follower.InstanceTram.MoveToWorld(new Point3D(1720, 1565, 49), Map.Trammel);
|
||||
}
|
||||
|
||||
if (EtherealSoulcleanser.InstanceTram == null)
|
||||
{
|
||||
EtherealSoulcleanser.InstanceTram = new EtherealSoulcleanser();
|
||||
EtherealSoulcleanser.InstanceTram.MoveToWorld(new Point3D(1721, 1565, 50), Map.Trammel);
|
||||
}
|
||||
|
||||
if (FellowshipDonationBox.InstanceTram == null)
|
||||
{
|
||||
FellowshipDonationBox.InstanceTram = new FellowshipDonationBox();
|
||||
FellowshipDonationBox.InstanceTram.MoveToWorld(new Point3D(1721, 1554, 49), Map.Trammel);
|
||||
}
|
||||
|
||||
if (TheFellowshipStaff.InstanceTram == null)
|
||||
{
|
||||
TheFellowshipStaff.InstanceTram = new TheFellowshipStaff();
|
||||
TheFellowshipStaff.InstanceTram.MoveToWorld(new Point3D(1718, 1559, 55), Map.Trammel);
|
||||
}
|
||||
|
||||
OtherQuestContent(Map.Trammel);
|
||||
}
|
||||
|
||||
if (TheFellowshipHouse.InstanceFel == null)
|
||||
{
|
||||
TheFellowshipHouse.InstanceFel = new TheFellowshipHouse();
|
||||
TheFellowshipHouse.InstanceFel.MoveToWorld(new Point3D(1720, 1562, 17), Map.Felucca);
|
||||
}
|
||||
|
||||
if (Follower.InstanceFel == null)
|
||||
{
|
||||
Follower.InstanceFel = new Follower();
|
||||
Follower.InstanceFel.MoveToWorld(new Point3D(1720, 1565, 49), Map.Felucca);
|
||||
}
|
||||
|
||||
if (EtherealSoulcleanser.InstanceFel == null)
|
||||
{
|
||||
EtherealSoulcleanser.InstanceFel = new EtherealSoulcleanser();
|
||||
EtherealSoulcleanser.InstanceFel.MoveToWorld(new Point3D(1721, 1565, 50), Map.Felucca);
|
||||
}
|
||||
|
||||
if (FellowshipDonationBox.InstanceFel == null)
|
||||
{
|
||||
FellowshipDonationBox.InstanceFel = new FellowshipDonationBox();
|
||||
FellowshipDonationBox.InstanceFel.MoveToWorld(new Point3D(1721, 1554, 49), Map.Felucca);
|
||||
}
|
||||
|
||||
if (TheFellowshipStaff.InstanceFel == null)
|
||||
{
|
||||
TheFellowshipStaff.InstanceFel = new TheFellowshipStaff();
|
||||
TheFellowshipStaff.InstanceFel.MoveToWorld(new Point3D(1718, 1559, 55), Map.Felucca);
|
||||
}
|
||||
|
||||
OtherQuestContent(Map.Felucca);
|
||||
}
|
||||
|
||||
public static void OtherQuestContent(Map map)
|
||||
{
|
||||
if (map.FindItem<Static>(new Point3D(1721, 1554, 54)) == null)
|
||||
{
|
||||
Static st = new Static(0x42BF)
|
||||
{
|
||||
Hue = 1910,
|
||||
Name = "The Fellowship Tome"
|
||||
};
|
||||
|
||||
st.MoveToWorld(new Point3D(1721, 1554, 54), map);
|
||||
}
|
||||
|
||||
if (map.FindItem<Static>(new Point3D(1721, 1555, 59)) == null)
|
||||
{
|
||||
Static st = new Static(0x2F60)
|
||||
{
|
||||
Hue = 1912,
|
||||
Name = "The Fellowship Coin"
|
||||
};
|
||||
|
||||
st.MoveToWorld(new Point3D(1721, 1555, 59), map);
|
||||
}
|
||||
|
||||
if (map.FindItem<Static>(new Point3D(1721, 1555, 49)) == null)
|
||||
{
|
||||
Static st = new Static(0x3155)
|
||||
{
|
||||
Hue = 1912,
|
||||
Name = "The Fellowship Icon"
|
||||
};
|
||||
|
||||
st.MoveToWorld(new Point3D(1721, 1555, 49), map);
|
||||
}
|
||||
|
||||
if (map.FindItem<Static>(new Point3D(1719, 1554, 49)) == null)
|
||||
{
|
||||
Candelabra st = new Candelabra()
|
||||
{
|
||||
Hue = 1105
|
||||
};
|
||||
|
||||
st.MoveToWorld(new Point3D(1719, 1554, 49), map);
|
||||
}
|
||||
|
||||
if (map.FindItem<Static>(new Point3D(1722, 1554, 49)) == null)
|
||||
{
|
||||
Candelabra st = new Candelabra()
|
||||
{
|
||||
Hue = 1105
|
||||
};
|
||||
|
||||
st.MoveToWorld(new Point3D(1722, 1554, 49), map);
|
||||
}
|
||||
}
|
||||
|
||||
#region remove decoration
|
||||
public static void Remove()
|
||||
{
|
||||
string filename = XmlSpawner.LocateFile("RevampedSpawns/BlackthornDungeonCreature.xml");
|
||||
XmlSpawner.XmlLoadFromFile(filename, string.Empty, null, Point3D.Zero, Map.Internal, false, 0, false, out int processedmaps, out int processedspawners);
|
||||
|
||||
RemoveDecoration();
|
||||
}
|
||||
|
||||
public static void RemoveDecoration()
|
||||
{
|
||||
if (BlackthornEntry.InstanceTram != null)
|
||||
{
|
||||
BlackthornEntry.InstanceTram.Delete();
|
||||
BlackthornEntry.InstanceTram = null;
|
||||
}
|
||||
|
||||
if (BlackthornStep2.InstanceTram != null)
|
||||
{
|
||||
BlackthornStep2.InstanceTram.Delete();
|
||||
BlackthornStep2.InstanceTram = null;
|
||||
}
|
||||
|
||||
if (BlackthornStep3.InstanceTram != null)
|
||||
{
|
||||
BlackthornStep3.InstanceTram.Delete();
|
||||
BlackthornStep3.InstanceTram = null;
|
||||
}
|
||||
|
||||
if (BlackthornStep4.InstanceTram != null)
|
||||
{
|
||||
BlackthornStep4.InstanceTram.Delete();
|
||||
BlackthornStep4.InstanceTram = null;
|
||||
}
|
||||
|
||||
if (BlackthornStep5.InstanceTram != null)
|
||||
{
|
||||
BlackthornStep5.InstanceTram.Delete();
|
||||
BlackthornStep5.InstanceTram = null;
|
||||
}
|
||||
|
||||
if (BlackthornStep6.InstanceTram != null)
|
||||
{
|
||||
BlackthornStep6.InstanceTram.Delete();
|
||||
BlackthornStep6.InstanceTram = null;
|
||||
}
|
||||
|
||||
if (BlackthornStep7.InstanceTram != null)
|
||||
{
|
||||
BlackthornStep7.InstanceTram.Delete();
|
||||
BlackthornStep7.InstanceTram = null;
|
||||
}
|
||||
|
||||
if (BlackthornStep8.InstanceTram != null)
|
||||
{
|
||||
BlackthornStep8.InstanceTram.Delete();
|
||||
BlackthornStep8.InstanceTram = null;
|
||||
}
|
||||
|
||||
RemoveOtherdecoration(Map.Trammel);
|
||||
|
||||
if (BlackthornEntry.InstanceFel != null)
|
||||
{
|
||||
BlackthornEntry.InstanceFel.Delete();
|
||||
BlackthornEntry.InstanceFel = null;
|
||||
}
|
||||
|
||||
if (BlackthornStep2.InstanceFel != null)
|
||||
{
|
||||
BlackthornStep2.InstanceFel.Delete();
|
||||
BlackthornStep2.InstanceFel = null;
|
||||
}
|
||||
|
||||
if (BlackthornStep3.InstanceFel != null)
|
||||
{
|
||||
BlackthornStep3.InstanceFel.Delete();
|
||||
BlackthornStep3.InstanceFel = null;
|
||||
}
|
||||
|
||||
if (BlackthornStep4.InstanceFel != null)
|
||||
{
|
||||
BlackthornStep4.InstanceFel.Delete();
|
||||
BlackthornStep4.InstanceFel = null;
|
||||
}
|
||||
|
||||
if (BlackthornStep5.InstanceFel != null)
|
||||
{
|
||||
BlackthornStep5.InstanceFel.Delete();
|
||||
BlackthornStep5.InstanceFel = null;
|
||||
}
|
||||
|
||||
if (BlackthornStep6.InstanceFel != null)
|
||||
{
|
||||
BlackthornStep6.InstanceFel.Delete();
|
||||
BlackthornStep6.InstanceFel = null;
|
||||
}
|
||||
|
||||
if (BlackthornStep7.InstanceFel != null)
|
||||
{
|
||||
BlackthornStep7.InstanceFel.Delete();
|
||||
BlackthornStep7.InstanceFel = null;
|
||||
}
|
||||
|
||||
if (BlackthornStep8.InstanceFel != null)
|
||||
{
|
||||
BlackthornStep8.InstanceFel.Delete();
|
||||
BlackthornStep8.InstanceFel = null;
|
||||
}
|
||||
|
||||
RemoveOtherdecoration(Map.Felucca);
|
||||
}
|
||||
|
||||
public static void RemoveOtherdecoration(Map map)
|
||||
{
|
||||
blocker.ToList().ForEach(x =>
|
||||
{
|
||||
Item b = map.FindItem<Blocker>(new Point3D(x));
|
||||
|
||||
if (b != null)
|
||||
{
|
||||
b.Delete();
|
||||
}
|
||||
|
||||
Item lb = map.FindItem<LOSBlocker>(new Point3D(x));
|
||||
|
||||
if (lb != null)
|
||||
{
|
||||
lb.Delete();
|
||||
}
|
||||
});
|
||||
|
||||
for (int i = 0; i < Workers.Length; i++)
|
||||
{
|
||||
Point3D p = Workers[i];
|
||||
|
||||
Mobile w = map.FindMobile<Worker>(p);
|
||||
|
||||
if (w != null)
|
||||
{
|
||||
w.Delete();
|
||||
}
|
||||
}
|
||||
|
||||
for (int t = 0; t < Teleporters.Length / 2; t++)
|
||||
{
|
||||
Point3D p = Teleporters[t, 0];
|
||||
|
||||
Item tele = map.FindItem<BlackthornDungeonTeleporter>(p);
|
||||
|
||||
if (tele != null)
|
||||
{
|
||||
tele.Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
private static readonly Point3D[] blocker = new Point3D[]
|
||||
{
|
||||
new Point3D(6408, 2667, 0), new Point3D(6409, 2667, 0), new Point3D(6410, 2667, 0), new Point3D(6411, 2667, 0),
|
||||
new Point3D(6412, 2667, 0), new Point3D(6396, 2677, 0), new Point3D(6396, 2678, 0), new Point3D(6396, 2679, 0),
|
||||
new Point3D(6396, 2680, 0), new Point3D(6396, 2681, 0), new Point3D(6407, 2692, 0), new Point3D(6408, 2692, 0),
|
||||
new Point3D(6409, 2692, 0), new Point3D(6410, 2692, 0), new Point3D(6370, 2744, 0), new Point3D(6371, 2744, 0),
|
||||
new Point3D(6372, 2744, 0), new Point3D(6373, 2744, 0), new Point3D(6374, 2744, 0), new Point3D(6375, 2744, 0),
|
||||
new Point3D(6331, 2653, 0), new Point3D(6332, 2653, 0), new Point3D(6333, 2653, 0), new Point3D(6410, 2783, 0),
|
||||
new Point3D(6305, 2678, 0), new Point3D(6305, 2679, 0), new Point3D(6305, 2680, 0), new Point3D(6411, 2783, 0),
|
||||
new Point3D(6422, 2708, 0), new Point3D(6422, 2709, 0), new Point3D(6422, 2710, 0), new Point3D(6422, 2711, 0),
|
||||
new Point3D(6406, 2783, 0), new Point3D(6407, 2783, 0), new Point3D(6408, 2783, 0), new Point3D(6409, 2783, 0),
|
||||
new Point3D(6442, 2744, 0), new Point3D(6443, 2744, 0), new Point3D(6444, 2744, 0), new Point3D(6445, 2744, 0),
|
||||
new Point3D(6446, 2744, 0), new Point3D(6390, 2617, 0), new Point3D(6390, 2618, 0), new Point3D(6390, 2619, 0),
|
||||
new Point3D(6390, 2620, 0), new Point3D(6390, 2621, 0), new Point3D(6390, 2622, 0), new Point3D(6390, 2623, 0),
|
||||
new Point3D(6390, 2624, 0), new Point3D(6390, 2625, 0), new Point3D(6434, 2708, 0), new Point3D(6434, 2709, 0),
|
||||
new Point3D(6434, 2710, 0), new Point3D(6434, 2711, 0)
|
||||
};
|
||||
|
||||
private static readonly Point3D[] Workers = new Point3D[]
|
||||
{
|
||||
new Point3D(6406, 2680, 0), new Point3D(6386, 2621, 0), new Point3D(6444, 2738, 0), new Point3D(6371, 2742, 0),
|
||||
new Point3D(6332, 2650, 0), new Point3D(6299, 2679, 0), new Point3D(6428, 2709, 0), new Point3D(6409, 2787, 0)
|
||||
};
|
||||
|
||||
private static readonly Point3D[,] Teleporters = new Point3D[,]
|
||||
{
|
||||
{new Point3D(6405, 2679, 0), new Point3D(6387, 2620, 0)},
|
||||
{new Point3D(6387, 2620, 0), new Point3D(6405, 2679, 0)},
|
||||
{new Point3D(6385, 2620, 0), new Point3D(6445, 2737, 0)},
|
||||
{new Point3D(6445, 2737, 1), new Point3D(6385, 2620, 0)},
|
||||
{new Point3D(6443, 2737, 1), new Point3D(6372, 2741, 0)},
|
||||
{new Point3D(6372, 2741, 0), new Point3D(6443, 2737, 0)},
|
||||
{new Point3D(6370, 2741, 0), new Point3D(6333, 2649, 0)},
|
||||
{new Point3D(6333, 2649, 0), new Point3D(6370, 2741, 0)},
|
||||
{new Point3D(6331, 2649, 0), new Point3D(6300, 2678, 0)},
|
||||
{new Point3D(6300, 2678, 0), new Point3D(6331, 2649, 0)},
|
||||
{new Point3D(6298, 2678, 0), new Point3D(6429, 2708, 0)},
|
||||
{new Point3D(6429, 2708, 0), new Point3D(6298, 2678, 0)},
|
||||
{new Point3D(6427, 2708, 0), new Point3D(6410, 2786, 0)},
|
||||
{new Point3D(6410, 2786, 0), new Point3D(6427, 2708, 0)},
|
||||
};
|
||||
|
||||
public static void Generate()
|
||||
{
|
||||
string filename = XmlSpawner.LocateFile("RevampedSpawns/BlackthornDungeonCreature.xml");
|
||||
XmlSpawner.XmlUnLoadFromFile(filename, string.Empty, null, out int processedmaps, out int processedspawners);
|
||||
|
||||
if (!Siege.SiegeShard)
|
||||
{
|
||||
if (BlackthornEntry.InstanceTram == null)
|
||||
{
|
||||
BlackthornEntry.InstanceTram = new BlackthornEntry();
|
||||
BlackthornEntry.InstanceTram.MoveToWorld(new Point3D(6409, 2677, 0), Map.Trammel);
|
||||
}
|
||||
|
||||
if (BlackthornStep2.InstanceTram == null)
|
||||
{
|
||||
BlackthornStep2.InstanceTram = new BlackthornStep2();
|
||||
BlackthornStep2.InstanceTram.MoveToWorld(new Point3D(6378, 2612, 0), Map.Trammel);
|
||||
}
|
||||
|
||||
if (BlackthornStep3.InstanceTram == null)
|
||||
{
|
||||
BlackthornStep3.InstanceTram = new BlackthornStep3();
|
||||
BlackthornStep3.InstanceTram.MoveToWorld(new Point3D(6454, 2741, 0), Map.Trammel);
|
||||
}
|
||||
|
||||
if (BlackthornStep4.InstanceTram == null)
|
||||
{
|
||||
BlackthornStep4.InstanceTram = new BlackthornStep4();
|
||||
BlackthornStep4.InstanceTram.MoveToWorld(new Point3D(6363, 2739, 0), Map.Trammel);
|
||||
}
|
||||
|
||||
if (BlackthornStep5.InstanceTram == null)
|
||||
{
|
||||
BlackthornStep5.InstanceTram = new BlackthornStep5();
|
||||
BlackthornStep5.InstanceTram.MoveToWorld(new Point3D(6327, 2647, 0), Map.Trammel);
|
||||
}
|
||||
|
||||
if (BlackthornStep6.InstanceTram == null)
|
||||
{
|
||||
BlackthornStep6.InstanceTram = new BlackthornStep6();
|
||||
BlackthornStep6.InstanceTram.MoveToWorld(new Point3D(6297, 2677, -4), Map.Trammel);
|
||||
}
|
||||
|
||||
if (BlackthornStep7.InstanceTram == null)
|
||||
{
|
||||
BlackthornStep7.InstanceTram = new BlackthornStep7();
|
||||
BlackthornStep7.InstanceTram.MoveToWorld(new Point3D(6429, 2709, 0), Map.Trammel);
|
||||
}
|
||||
|
||||
if (BlackthornStep8.InstanceTram == null)
|
||||
{
|
||||
BlackthornStep8.InstanceTram = new BlackthornStep8();
|
||||
BlackthornStep8.InstanceTram.MoveToWorld(new Point3D(6408, 2792, 0), Map.Trammel);
|
||||
}
|
||||
|
||||
GenerateMapDecoration(Map.Trammel);
|
||||
}
|
||||
|
||||
if (BlackthornEntry.InstanceFel == null)
|
||||
{
|
||||
BlackthornEntry.InstanceFel = new BlackthornEntry();
|
||||
BlackthornEntry.InstanceFel.MoveToWorld(new Point3D(6409, 2677, 0), Map.Felucca);
|
||||
}
|
||||
|
||||
if (BlackthornStep2.InstanceFel == null)
|
||||
{
|
||||
BlackthornStep2.InstanceFel = new BlackthornStep2();
|
||||
BlackthornStep2.InstanceFel.MoveToWorld(new Point3D(6378, 2612, 0), Map.Felucca);
|
||||
}
|
||||
|
||||
if (BlackthornStep3.InstanceFel == null)
|
||||
{
|
||||
BlackthornStep3.InstanceFel = new BlackthornStep3();
|
||||
BlackthornStep3.InstanceFel.MoveToWorld(new Point3D(6454, 2741, 0), Map.Felucca);
|
||||
}
|
||||
|
||||
if (BlackthornStep4.InstanceFel == null)
|
||||
{
|
||||
BlackthornStep4.InstanceFel = new BlackthornStep4();
|
||||
BlackthornStep4.InstanceFel.MoveToWorld(new Point3D(6363, 2739, 0), Map.Felucca);
|
||||
}
|
||||
|
||||
if (BlackthornStep5.InstanceFel == null)
|
||||
{
|
||||
BlackthornStep5.InstanceFel = new BlackthornStep5();
|
||||
BlackthornStep5.InstanceFel.MoveToWorld(new Point3D(6327, 2647, 0), Map.Felucca);
|
||||
}
|
||||
|
||||
if (BlackthornStep6.InstanceFel == null)
|
||||
{
|
||||
BlackthornStep6.InstanceFel = new BlackthornStep6();
|
||||
BlackthornStep6.InstanceFel.MoveToWorld(new Point3D(6297, 2677, -4), Map.Felucca);
|
||||
}
|
||||
|
||||
if (BlackthornStep7.InstanceFel == null)
|
||||
{
|
||||
BlackthornStep7.InstanceFel = new BlackthornStep7();
|
||||
BlackthornStep7.InstanceFel.MoveToWorld(new Point3D(6429, 2709, 0), Map.Felucca);
|
||||
}
|
||||
|
||||
if (BlackthornStep8.InstanceFel == null)
|
||||
{
|
||||
BlackthornStep8.InstanceFel = new BlackthornStep8();
|
||||
BlackthornStep8.InstanceFel.MoveToWorld(new Point3D(6408, 2792, 0), Map.Felucca);
|
||||
}
|
||||
|
||||
GenerateMapDecoration(Map.Felucca);
|
||||
}
|
||||
|
||||
public static void GenerateMapDecoration(Map map)
|
||||
{
|
||||
blocker.ToList().ForEach(x =>
|
||||
{
|
||||
if (map.FindItem<Blocker>(new Point3D(x)) == null)
|
||||
{
|
||||
Blocker bl = new Blocker();
|
||||
|
||||
bl.MoveToWorld(new Point3D(x), map);
|
||||
}
|
||||
|
||||
if (map.FindItem<LOSBlocker>(new Point3D(x)) == null)
|
||||
{
|
||||
LOSBlocker lb = new LOSBlocker();
|
||||
|
||||
lb.MoveToWorld(new Point3D(x), map);
|
||||
}
|
||||
});
|
||||
|
||||
for (int i = 0; i < Workers.Length; i++)
|
||||
{
|
||||
Point3D p = Workers[i];
|
||||
|
||||
if (map.FindMobile<Worker>(p) == null)
|
||||
{
|
||||
Worker w = new Worker((FellowshipChain)(i + 1));
|
||||
|
||||
w.MoveToWorld(p, map);
|
||||
}
|
||||
}
|
||||
|
||||
FellowshipChain c = FellowshipChain.One;
|
||||
|
||||
for (int t = 0; t < Teleporters.Length / 2; t++)
|
||||
{
|
||||
Point3D p = Teleporters[t, 0];
|
||||
|
||||
if (map.FindItem<BlackthornDungeonTeleporter>(p) == null)
|
||||
{
|
||||
BlackthornDungeonTeleporter bl;
|
||||
|
||||
if (t % 2 == 0)
|
||||
{
|
||||
bl = new BlackthornDungeonTeleporter(c)
|
||||
{
|
||||
Dest = Teleporters[t, 1]
|
||||
};
|
||||
|
||||
c++;
|
||||
}
|
||||
else
|
||||
{
|
||||
bl = new BlackthornDungeonTeleporter()
|
||||
{
|
||||
Dest = Teleporters[t, 1]
|
||||
};
|
||||
}
|
||||
|
||||
bl.MoveToWorld(p, map);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
83
Scripts/Services/Seasonal Events/ForsakenFoes/Gumps.cs
Normal file
83
Scripts/Services/Seasonal Events/ForsakenFoes/Gumps.cs
Normal file
@@ -0,0 +1,83 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Mobiles;
|
||||
using Server.Gumps;
|
||||
using Server.Items;
|
||||
using Server.Engines.Points;
|
||||
using Server.Engines.Craft;
|
||||
|
||||
namespace Server.Engines.Fellowship
|
||||
{
|
||||
public class FellowshipRewardGump : BaseRewardGump
|
||||
{
|
||||
public override int PointsName { get { return 1159184; } } // Your Fellowship Silver:
|
||||
public override int RewardLabel { get { return 1159185; } } // Would you like to buy something?
|
||||
|
||||
public FellowshipRewardGump(Mobile owner, PlayerMobile user)
|
||||
: base(owner, user, FellowshipRewards.Rewards, 1159183)
|
||||
{
|
||||
}
|
||||
|
||||
public override int GetYOffset(int id)
|
||||
{
|
||||
if (Index > 3)
|
||||
return 20;
|
||||
|
||||
return base.GetYOffset(id);
|
||||
}
|
||||
|
||||
public override double GetPoints(Mobile m)
|
||||
{
|
||||
return PointsSystem.FellowshipData.GetPoints(m);
|
||||
}
|
||||
|
||||
public override void RemovePoints(double points)
|
||||
{
|
||||
PointsSystem.FellowshipData.DeductPoints(User, points);
|
||||
}
|
||||
|
||||
public override void OnItemCreated(Item item)
|
||||
{
|
||||
item.InvalidateProperties();
|
||||
}
|
||||
|
||||
public override void OnConfirmed(CollectionItem citem, int index)
|
||||
{
|
||||
Item item = null;
|
||||
|
||||
if (citem.Type == typeof(RecipeScroll))
|
||||
{
|
||||
switch (index)
|
||||
{
|
||||
default:
|
||||
case 9: item = new RecipeScroll((int)TailorRecipe.CowlOfTheMaceAndShield); break;
|
||||
case 10: item = new RecipeScroll((int)TailorRecipe.MagesHoodOfScholarlyInsight); break;
|
||||
case 11: item = new RecipeScroll((int)TailorRecipe.ElegantCollarOfFortune); break;
|
||||
case 12: item = new RecipeScroll((int)TailorRecipe.CrimsonDaggerBelt); break;
|
||||
case 13: item = new RecipeScroll((int)TailorRecipe.CrimsonSwordBelt); break;
|
||||
case 14: item = new RecipeScroll((int)TailorRecipe.CrimsonMaceBelt); break;
|
||||
}
|
||||
}
|
||||
|
||||
if (item != null)
|
||||
{
|
||||
if (User.Backpack == null || !User.Backpack.TryDropItem(User, item, false))
|
||||
{
|
||||
User.SendLocalizedMessage(1074361); // The reward could not be given. Make sure you have room in your pack.
|
||||
item.Delete();
|
||||
}
|
||||
else
|
||||
{
|
||||
User.SendLocalizedMessage(1073621); // Your reward has been placed in your backpack.
|
||||
User.PlaySound(0x5A7);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
base.OnConfirmed(citem, index);
|
||||
}
|
||||
|
||||
PointsSystem.FellowshipData.DeductPoints(User, citem.Points);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class AdmiralJacksPumpkinSpiceAle : BaseShield
|
||||
{
|
||||
public override bool IsArtifact { get { return true; } }
|
||||
public override int LabelNumber { get { return 1159230; } } // Admiral Jack's Pumpkin Spice Ale
|
||||
|
||||
[Constructable]
|
||||
public AdmiralJacksPumpkinSpiceAle()
|
||||
: base(0xA40B)
|
||||
{
|
||||
Hue = 1922;
|
||||
Weight = 3.0;
|
||||
Attributes.SpellChanneling = 1;
|
||||
}
|
||||
|
||||
public AdmiralJacksPumpkinSpiceAle(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class CaptainTitleDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return new TextDefinition(1159216); } } // Captain
|
||||
|
||||
[Constructable]
|
||||
public CaptainTitleDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public CaptainTitleDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class CommanderTitleDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return new TextDefinition(1159215); } } // Commander
|
||||
|
||||
[Constructable]
|
||||
public CommanderTitleDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public CommanderTitleDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class EnsignTitleDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return new TextDefinition(1159214); } } // Ensign
|
||||
|
||||
[Constructable]
|
||||
public EnsignTitleDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public EnsignTitleDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
using Server;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class EtherealSoulbinder : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1159167; } } // ethereal soulbinder
|
||||
|
||||
public double MaxSoulPoint { get; set; } = 100;
|
||||
|
||||
private double m_SoulPoint;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public double SoulPoint
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_SoulPoint;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value < 0)
|
||||
value = 0;
|
||||
else if (value > MaxSoulPoint)
|
||||
value = MaxSoulPoint;
|
||||
|
||||
m_SoulPoint += value;
|
||||
|
||||
SetHue();
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
private void SetHue()
|
||||
{
|
||||
if (SoulPoint <= 0)
|
||||
Hue = 0;
|
||||
else if (SoulPoint <= 1)
|
||||
Hue = 1910; // Meager
|
||||
else if (SoulPoint <= 25)
|
||||
Hue = 1916; // Grand
|
||||
else if (SoulPoint <= 50)
|
||||
Hue = 1914; // Exalted
|
||||
else if (SoulPoint <= 90)
|
||||
Hue = 1922; // Legendary
|
||||
else
|
||||
Hue = 1919; // Mythical
|
||||
}
|
||||
|
||||
private int GetDescription()
|
||||
{
|
||||
if (SoulPoint <= 0)
|
||||
return 1159177; // An Empty Soulbinder
|
||||
else if (SoulPoint <= 1)
|
||||
return 1159176; // Meager
|
||||
else if (SoulPoint <= 25)
|
||||
return 1159175; // Grand
|
||||
else if (SoulPoint <= 50)
|
||||
return 1159174; // Exalted
|
||||
else if (SoulPoint <= 90)
|
||||
return 1159173; // Legendary
|
||||
else
|
||||
return 1159172; // Mythical
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public EtherealSoulbinder()
|
||||
: base(0xA1E7)
|
||||
{
|
||||
}
|
||||
|
||||
public EtherealSoulbinder(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
int desc = GetDescription();
|
||||
|
||||
if (desc == 1159177)
|
||||
{
|
||||
list.Add(1159177); // An Empty Soulbinder
|
||||
}
|
||||
else
|
||||
{
|
||||
list.Add(1159178, string.Format("#{0}", desc)); // Contains a ~1_TYPE~ Soul
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
|
||||
writer.Write(m_SoulPoint);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
m_SoulPoint = reader.ReadDouble();
|
||||
}
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
EventSink.CreatureDeath += CreatureDeath;
|
||||
}
|
||||
|
||||
public static void CreatureDeath(CreatureDeathEventArgs e)
|
||||
{
|
||||
var bc = e.Creature as BaseCreature;
|
||||
var killer = e.Killer;
|
||||
|
||||
if (bc != null && bc.IsSoulbound && killer is PlayerMobile && killer.Backpack != null)
|
||||
{
|
||||
EtherealSoulbinder es = killer.Backpack.FindItemsByType<EtherealSoulbinder>().Where(x => x.SoulPoint < x.MaxSoulPoint).FirstOrDefault();
|
||||
|
||||
if (es != null)
|
||||
{
|
||||
es.SoulPoint += bc.HitsMax / 1000;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
using System;
|
||||
using Server.Engines.Points;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class EtherealSoulcleanser : BaseContainer
|
||||
{
|
||||
public override int LabelNumber { get { return 1159196; } } // Ethereal Soulcleanser
|
||||
|
||||
public override int DefaultGumpID { get { return 0x10C; } }
|
||||
public override bool DisplaysContent { get { return false; } }
|
||||
|
||||
public static EtherealSoulcleanser InstanceTram { get; set; }
|
||||
public static EtherealSoulcleanser InstanceFel { get; set; }
|
||||
|
||||
[Constructable]
|
||||
public EtherealSoulcleanser()
|
||||
: base(0x2DF4)
|
||||
{
|
||||
Hue = 2591;
|
||||
Movable = false;
|
||||
}
|
||||
|
||||
public EtherealSoulcleanser(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool OnDragDrop(Mobile from, Item dropped)
|
||||
{
|
||||
return Check(from, dropped);
|
||||
}
|
||||
|
||||
public override bool OnDragDropInto(Mobile from, Item item, Point3D p)
|
||||
{
|
||||
return Check(from, item);
|
||||
}
|
||||
|
||||
public bool Check(Mobile from, Item item)
|
||||
{
|
||||
if (from == null || from.Deleted || item == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(item is EtherealSoulbinder) || item is EtherealSoulbinder && ((EtherealSoulbinder)item).SoulPoint <= 0)
|
||||
{
|
||||
from.SendLocalizedMessage(1159170); // The machine only accepts filled ethereal soulbinders.
|
||||
return false;
|
||||
}
|
||||
|
||||
double amount = 100 * ((EtherealSoulbinder)item).SoulPoint;
|
||||
PointsSystem.FellowshipData.AwardPoints(from, amount);
|
||||
|
||||
Effects.SendPacket(from.Location, from.Map, new GraphicalEffect(EffectType.FixedXYZ, from.Serial, Serial.Zero, 0x373A, from.Location, from.Location, 10, 15, true, true));
|
||||
from.PlaySound(0x1F2);
|
||||
|
||||
item.Delete();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
using System;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
using Server.Targeting;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class ExplodingJackOLantern : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1159220; } } // Exploding Jack o' Lantern
|
||||
|
||||
[Constructable]
|
||||
public ExplodingJackOLantern()
|
||||
: base(0xA407)
|
||||
{
|
||||
Weight = 1.0;
|
||||
LootType = LootType.Blessed;
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if (from.Mounted)
|
||||
{
|
||||
from.SendLocalizedMessage(1061130); // You can't do that while riding a mount.
|
||||
}
|
||||
else
|
||||
{
|
||||
from.SendLocalizedMessage(1113280); // Which target do you wish to throw this at?
|
||||
from.Target = new ThrowTarget(from);
|
||||
}
|
||||
}
|
||||
|
||||
private class ThrowTarget : Target
|
||||
{
|
||||
private Mobile m_From;
|
||||
|
||||
public ThrowTarget(Mobile from)
|
||||
: base(12, true, TargetFlags.None)
|
||||
{
|
||||
m_From = from;
|
||||
}
|
||||
|
||||
protected override void OnTarget(Mobile from, object targeted)
|
||||
{
|
||||
if (targeted is PlayerMobile)
|
||||
{
|
||||
Mobile m = targeted as Mobile;
|
||||
|
||||
if (from == m)
|
||||
{
|
||||
from.SendLocalizedMessage(501588); // Verbal taunts might be more effective!
|
||||
return;
|
||||
}
|
||||
|
||||
Effects.SendPacket(from, from.Map, new HuedEffect(EffectType.Moving, from.Serial, m.Serial, 0xA407, from, m, 10, 0, false, false, 0, 0));
|
||||
from.SendLocalizedMessage(1159219); // You hit your target!
|
||||
m.SendLocalizedMessage(1159218); // You have just been hit by a Jack o' Lantern!!!
|
||||
m.PlaySound(519);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ExplodingJackOLantern(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
using System;
|
||||
using Server.Gumps;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class FellowshipCoin : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1159036; } } // The Fellowship Coin
|
||||
|
||||
[Constructable]
|
||||
public FellowshipCoin()
|
||||
: base(0x2F60)
|
||||
{
|
||||
Weight = 1.0;
|
||||
Hue = 1912;
|
||||
Light = LightType.Circle300;
|
||||
}
|
||||
|
||||
public FellowshipCoin(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if (!from.HasGump(typeof(FellowshipCoinGump)))
|
||||
{
|
||||
from.SendGump(new FellowshipCoinGump());
|
||||
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1157722, "its origin"); // *Your proficiency in ~1_SKILL~ reveals more about the item*
|
||||
from.PlaySound(1050);
|
||||
}
|
||||
}
|
||||
|
||||
private class FellowshipCoinGump : Gump
|
||||
{
|
||||
public FellowshipCoinGump()
|
||||
: base(100, 100)
|
||||
{
|
||||
AddPage(0);
|
||||
|
||||
AddBackground(0, 0, 454, 400, 0x24A4);
|
||||
AddItem(75, 120, 0x2F60);
|
||||
AddHtmlLocalized(177, 50, 250, 18, 1114513, "#1159036", 0x3442, false, false); // <DIV ALIGN=CENTER>~1_TOKEN~</DIV>
|
||||
AddHtmlLocalized(177, 77, 250, 36, 1114513, "#1159033", 0x3442, false, false); // <DIV ALIGN=CENTER>~1_TOKEN~</DIV>
|
||||
AddHtmlLocalized(177, 122, 250, 228, 1159037, 0xC63, true, true); // The coin's gilded brilliance is striking. Engraved on the coin are the letters T, W, U.
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,149 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class FellowshipDonationBox : BaseContainer
|
||||
{
|
||||
public override int LabelNumber { get { return 1159042; } } // Fellowship Donation Box
|
||||
|
||||
public override int DefaultGumpID { get { return 0x10C; } }
|
||||
|
||||
public static string FilePath = Path.Combine("Saves/Misc", "FellowshipDonationBox.bin");
|
||||
private static readonly Dictionary<Mobile, int> Donations = new Dictionary<Mobile, int>();
|
||||
|
||||
public static void Configure()
|
||||
{
|
||||
EventSink.WorldSave += OnSave;
|
||||
EventSink.WorldLoad += OnLoad;
|
||||
}
|
||||
|
||||
public static FellowshipDonationBox InstanceTram { get; set; }
|
||||
public static FellowshipDonationBox InstanceFel { get; set; }
|
||||
|
||||
[Constructable]
|
||||
public FellowshipDonationBox()
|
||||
: base(0x2DE9)
|
||||
{
|
||||
Hue = 1191;
|
||||
Movable = false;
|
||||
}
|
||||
|
||||
public FellowshipDonationBox(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool OnDragDrop(Mobile from, Item dropped)
|
||||
{
|
||||
return Check(from, dropped);
|
||||
}
|
||||
|
||||
public override bool OnDragDropInto(Mobile from, Item item, Point3D p)
|
||||
{
|
||||
return Check(from, item);
|
||||
}
|
||||
|
||||
public bool Check(Mobile from, Item item)
|
||||
{
|
||||
if (from == null || from.Deleted)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (item != null && !(item is MaritimeCargo))
|
||||
{
|
||||
from.SendLocalizedMessage(1159030); // The Fellowship only requires trade cargo donations at this time.
|
||||
return false;
|
||||
}
|
||||
|
||||
int amount = ((MaritimeCargo)item).GetAwardAmount() * 1000;
|
||||
|
||||
if (Donations.ContainsKey(from))
|
||||
{
|
||||
Donations[from] += amount;
|
||||
}
|
||||
else
|
||||
{
|
||||
Donations.Add(from, amount);
|
||||
}
|
||||
|
||||
from.SendMessage(1159032, string.Format("{0}", Donations[from].ToString())); // The Fellowship thanks you for your donation. You have donated ~1_val~ worth of goods!
|
||||
|
||||
if (Donations[from] >= 450000000)
|
||||
{
|
||||
from.SendLocalizedMessage(1152339, string.Format("{0}", Donations[from].ToString())); // A reward of ~1_ITEM~ has been placed in your backpack.
|
||||
from.AddToBackpack(new FellowshipCoin());
|
||||
Donations[from] -= 450000000;
|
||||
}
|
||||
|
||||
item.Delete();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
|
||||
public static void OnSave(WorldSaveEventArgs e)
|
||||
{
|
||||
Persistence.Serialize(
|
||||
FilePath,
|
||||
writer =>
|
||||
{
|
||||
writer.Write((int)0);
|
||||
|
||||
writer.Write(Donations.Count);
|
||||
|
||||
Donations.ToList().ForEach(s =>
|
||||
{
|
||||
writer.Write(s.Key);
|
||||
writer.Write(s.Value);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public static void OnLoad()
|
||||
{
|
||||
Persistence.Deserialize(
|
||||
FilePath,
|
||||
reader =>
|
||||
{
|
||||
int version = reader.ReadInt();
|
||||
int count = reader.ReadInt();
|
||||
|
||||
for (int i = count; i > 0; i--)
|
||||
{
|
||||
Mobile m = reader.ReadMobile();
|
||||
int value = reader.ReadInt();
|
||||
|
||||
if (m != null)
|
||||
{
|
||||
Donations.Add(m, value);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
using System;
|
||||
using Server.Gumps;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class FellowshipMedallion : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1159248; } } // Fellowship Medallion
|
||||
|
||||
[Constructable]
|
||||
public FellowshipMedallion()
|
||||
: base(0xA429)
|
||||
{
|
||||
Weight = 1.0;
|
||||
Layer = Layer.Neck;
|
||||
}
|
||||
|
||||
public FellowshipMedallion(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if (!from.HasGump(typeof(FellowshipMedallionGump)))
|
||||
{
|
||||
from.SendGump(new FellowshipMedallionGump());
|
||||
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1157722, "its origin"); // *Your proficiency in ~1_SKILL~ reveals more about the item*
|
||||
from.PlaySound(1050);
|
||||
}
|
||||
}
|
||||
|
||||
private class FellowshipMedallionGump : Gump
|
||||
{
|
||||
public FellowshipMedallionGump()
|
||||
: base(100, 100)
|
||||
{
|
||||
AddPage(0);
|
||||
|
||||
AddBackground(0, 0, 454, 400, 0x24A4);
|
||||
AddItem(75, 120, 0xA429);
|
||||
AddHtmlLocalized(177, 50, 250, 18, 1114513, "#1159248", 0x3442, false, false); // <DIV ALIGN=CENTER>~1_TOKEN~</DIV>
|
||||
AddHtmlLocalized(177, 77, 250, 36, 1114513, "#1159033", 0x3442, false, false); // <DIV ALIGN=CENTER>~1_TOKEN~</DIV>
|
||||
AddHtmlLocalized(177, 122, 250, 228, 1159247, 0xC63, true, true); // This is an otherwise unassuming metal medallion in the shape of a triangle. The letters T, W, and U are engraved on it. It is almost immediately recognizable as a sign of the Fellowship.
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class JackOLanternHelm : BaseArmor
|
||||
{
|
||||
public override int LabelNumber { get { return 1125986; } } // jack o' lantern helm
|
||||
public override bool IsArtifact { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public JackOLanternHelm()
|
||||
: base(0xA3EA)
|
||||
{
|
||||
Weight = 3.0;
|
||||
Layer = Layer.Helm;
|
||||
Light = LightType.Circle300;
|
||||
}
|
||||
|
||||
public override int BasePhysicalResistance { get { return 12; } }
|
||||
public override int BaseFireResistance { get { return 14; } }
|
||||
public override int BaseColdResistance { get { return 4; } }
|
||||
public override int BasePoisonResistance { get { return 8; } }
|
||||
public override int BaseEnergyResistance { get { return 10; } }
|
||||
|
||||
public override int InitMinHits { get { return 255; } }
|
||||
public override int InitMaxHits { get { return 255; } }
|
||||
public override int AosStrReq { get { return 10; } }
|
||||
|
||||
public override ArmorMaterialType MaterialType
|
||||
{
|
||||
get
|
||||
{
|
||||
return ArmorMaterialType.Plate;
|
||||
}
|
||||
}
|
||||
|
||||
public JackOLanternHelm(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Multis;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class PumpkinDeed : ShipCannonDeed
|
||||
{
|
||||
public override CannonPower CannonType { get { return CannonPower.Pumpkin; } }
|
||||
public override int LabelNumber { get { return 1159232; } } // Pumpkin Cannon
|
||||
|
||||
[Constructable]
|
||||
public PumpkinDeed()
|
||||
{
|
||||
Hue = 1192;
|
||||
}
|
||||
|
||||
public PumpkinDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class PumpkinCannon : BaseShipCannon
|
||||
{
|
||||
public override int LabelNumber { get { return 1023691; } } // cannon
|
||||
|
||||
public override int Range { get { return 10; } }
|
||||
public override ShipCannonDeed GetDeed { get { return new PumpkinDeed(); } }
|
||||
public override CannonPower Power { get { return CannonPower.Pumpkin; } }
|
||||
|
||||
public PumpkinCannon(BaseGalleon g)
|
||||
: base(g)
|
||||
{
|
||||
}
|
||||
|
||||
public PumpkinCannon(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,416 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Engines.PartySystem;
|
||||
|
||||
namespace Server.Multis
|
||||
{
|
||||
public class PumpkinRowBoat : BaseBoat
|
||||
{
|
||||
public override int NorthID { get { return 0x50; } }
|
||||
public override int EastID { get { return 0x51; } }
|
||||
public override int SouthID { get { return 0x52; } }
|
||||
public override int WestID { get { return 0x53; } }
|
||||
|
||||
public override int HoldDistance { get { return -1; } }
|
||||
public override int TillerManDistance { get { return -2; } }
|
||||
|
||||
public override Point3D MarkOffset { get { return new Point3D(0, 1, 3); } }
|
||||
|
||||
public override BaseDockedBoat DockedBoat { get { return new DockedPumpkinRowBoat(this); } }
|
||||
|
||||
public override bool IsClassicBoat { get { return false; } }
|
||||
public override bool IsRowBoat { get { return true; } }
|
||||
public override bool CanLinkToLighthouse { get { return false; } }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public MooringBlock Line { get; private set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public Rudder Rudder { get; private set; }
|
||||
|
||||
[Constructable]
|
||||
public PumpkinRowBoat(Direction d)
|
||||
: base(d, false)
|
||||
{
|
||||
Rudder = new PumpkinRudder(this, d);
|
||||
TillerMan = Rudder;
|
||||
Line = new MooringBlock(this, d);
|
||||
|
||||
switch (d)
|
||||
{
|
||||
default:
|
||||
case Direction.North:
|
||||
Rudder.Location = new Point3D(X + 1, Y + 3, Z);
|
||||
Line.Location = new Point3D(X, Y - 1, Z + 2);
|
||||
break;
|
||||
case Direction.South:
|
||||
Rudder.Location = new Point3D(X, Y - 2, Z);
|
||||
Line.Location = new Point3D(X, Y + 1, Z + 2);
|
||||
break;
|
||||
case Direction.East:
|
||||
Rudder.Location = new Point3D(X - 2, Y, Z);
|
||||
Line.Location = new Point3D(X + 1, Y, Z + 2);
|
||||
break;
|
||||
case Direction.West:
|
||||
Rudder.Location = new Point3D(X + 3, Y + 1, Z);
|
||||
Line.Location = new Point3D(X - 1, Y, Z + 2);
|
||||
break;
|
||||
}
|
||||
|
||||
Rudder.Handle = new PumpkinRudderHandle(Rudder, d);
|
||||
}
|
||||
|
||||
public override void Delete()
|
||||
{
|
||||
if (Line != null)
|
||||
Line.Delete();
|
||||
|
||||
if (Rudder != null && Rudder.Handle != null)
|
||||
Rudder.Handle.Delete();
|
||||
|
||||
base.Delete();
|
||||
}
|
||||
|
||||
public override void SetFacingComponents(Direction facing, Direction old, bool ignore)
|
||||
{
|
||||
if (Rudder == null || Rudder.Handle == null)
|
||||
return;
|
||||
|
||||
switch(facing)
|
||||
{
|
||||
case Direction.North:
|
||||
{
|
||||
Rudder.Y++;
|
||||
break;
|
||||
}
|
||||
case Direction.West:
|
||||
{
|
||||
Rudder.X++;
|
||||
Rudder.Y++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Line.SetFacing(facing);
|
||||
Rudder.Handle.SetFacing(facing);
|
||||
}
|
||||
|
||||
public override void OnLocationChange(Point3D old)
|
||||
{
|
||||
base.OnLocationChange(old);
|
||||
|
||||
if (Line != null)
|
||||
Line.Location = new Point3D(X + (Line.X - old.X), Y + (Line.Y - old.Y), Z + (Line.Z - old.Z));
|
||||
|
||||
if(Rudder != null && Rudder.Handle != null)
|
||||
Rudder.Handle.Location = new Point3D(X + (Rudder.Handle.X - old.X), Y + (Rudder.Handle.Y - old.Y), Z + (Rudder.Handle.Z - old.Z));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This must be overriden due to the tillerman not being in the MCL bounds
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override IEnumerable<IEntity> GetEntitiesOnBoard()
|
||||
{
|
||||
Map map = Map;
|
||||
|
||||
if (map == null || map == Map.Internal)
|
||||
yield break;
|
||||
|
||||
MultiComponentList mcl = Components;
|
||||
IPooledEnumerable eable = map.GetObjectsInBounds(new Rectangle2D(X + mcl.Min.X, Y + mcl.Min.Y, mcl.Width, mcl.Height));
|
||||
|
||||
foreach (IEntity ent in eable)
|
||||
{
|
||||
if (Contains(ent) && CheckOnBoard(ent))
|
||||
{
|
||||
yield return ent;
|
||||
}
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
yield return Rudder;
|
||||
}
|
||||
|
||||
public override void OnMapChange()
|
||||
{
|
||||
base.OnMapChange();
|
||||
|
||||
if (Line != null)
|
||||
Line.Map = Map;
|
||||
}
|
||||
|
||||
public override void OnPlacement(Mobile from)
|
||||
{
|
||||
base.OnPlacement(from);
|
||||
|
||||
if (Line == null)
|
||||
return;
|
||||
|
||||
switch (Facing)
|
||||
{
|
||||
default:
|
||||
case Direction.North:
|
||||
Line.Location = new Point3D(X, Y - 2, Z + 5);
|
||||
break;
|
||||
case Direction.South:
|
||||
Line.Location = new Point3D(X, Y + 2, Z + 5);
|
||||
break;
|
||||
case Direction.East:
|
||||
Line.Location = new Point3D(X + 2, Y, Z + 5);
|
||||
break;
|
||||
case Direction.West:
|
||||
Line.Location = new Point3D(X - 2, Y, Z + 5);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public override bool IsComponentItem(IEntity item)
|
||||
{
|
||||
return item == this || item == Line || item == Rudder || (Rudder != null && item == Rudder.Handle);
|
||||
}
|
||||
|
||||
public override bool HasAccess(Mobile from)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public PumpkinRowBoat(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
|
||||
writer.Write(Rudder);
|
||||
writer.Write(Line);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Rudder = reader.ReadItem() as PumpkinRudder;
|
||||
Line = reader.ReadItem() as MooringBlock;
|
||||
|
||||
TillerMan = Rudder;
|
||||
}
|
||||
}
|
||||
|
||||
public class PumpkinRowBoatDeed : BaseBoatDeed
|
||||
{
|
||||
public override int LabelNumber { get { return 1159233; } } // Pumpkin Rowboat
|
||||
public override BaseBoat Boat { get { return new PumpkinRowBoat(BoatDirection); } }
|
||||
|
||||
[Constructable]
|
||||
public PumpkinRowBoatDeed()
|
||||
: base(0x50, Point3D.Zero)
|
||||
{
|
||||
}
|
||||
|
||||
public PumpkinRowBoatDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
}
|
||||
|
||||
public class MooringBlock : MooringLine
|
||||
{
|
||||
public MooringBlock(BaseBoat boat, Direction d)
|
||||
: base(boat)
|
||||
{
|
||||
SetFacing(d);
|
||||
}
|
||||
|
||||
public void SetFacing(Direction dir)
|
||||
{
|
||||
switch (dir)
|
||||
{
|
||||
case Direction.North:
|
||||
case Direction.South:
|
||||
ItemID = 42088;
|
||||
break;
|
||||
case Direction.East:
|
||||
case Direction.West:
|
||||
ItemID = 42087;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public MooringBlock(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class PumpkinRudder : Rudder
|
||||
{
|
||||
public PumpkinRudder(BaseBoat boat, Direction d)
|
||||
: base(boat, d)
|
||||
{
|
||||
}
|
||||
|
||||
public override void SetFacing(Direction dir)
|
||||
{
|
||||
switch (dir)
|
||||
{
|
||||
case Direction.South:
|
||||
ItemID = 42073;
|
||||
break;
|
||||
case Direction.North:
|
||||
ItemID = 42030;
|
||||
Y++;
|
||||
break;
|
||||
case Direction.West:
|
||||
ItemID = 42044;
|
||||
X++;
|
||||
Y++;
|
||||
break;
|
||||
case Direction.East:
|
||||
ItemID = 42058;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public PumpkinRudder(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (ItemID == 42030)
|
||||
{
|
||||
Y++;
|
||||
}
|
||||
|
||||
if (ItemID == 42044)
|
||||
{
|
||||
X++;
|
||||
Y++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class PumpkinRudderHandle : RudderHandle
|
||||
{
|
||||
public PumpkinRudderHandle(Rudder rudder, Direction d)
|
||||
: base(rudder, d)
|
||||
{
|
||||
}
|
||||
|
||||
public override void SetFacing(Direction dir)
|
||||
{
|
||||
if (Rudder == null)
|
||||
Delete();
|
||||
else
|
||||
{
|
||||
switch (dir)
|
||||
{
|
||||
default:
|
||||
case Direction.South:
|
||||
ItemID = 16067;
|
||||
MoveToWorld(new Point3D(Rudder.X + 1, Rudder.Y + 1, Rudder.Z + 9), Map);
|
||||
break;
|
||||
case Direction.North:
|
||||
ItemID = 16061;
|
||||
MoveToWorld(new Point3D(Rudder.X, Rudder.Y - 1, Rudder.Z + 2), Map);
|
||||
break;
|
||||
case Direction.West:
|
||||
ItemID = 15991;
|
||||
MoveToWorld(new Point3D(Rudder.X - 1, Rudder.Y, Rudder.Z + 2), Map);
|
||||
break;
|
||||
case Direction.East:
|
||||
ItemID = 15970;
|
||||
MoveToWorld(new Point3D(Rudder.X + 1, Rudder.Y + 1, Rudder.Z + 9), Map);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public PumpkinRudderHandle(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class DockedPumpkinRowBoat : BaseDockedBoat
|
||||
{
|
||||
public override BaseBoat Boat { get { return new PumpkinRowBoat(BoatDirection); } }
|
||||
|
||||
public DockedPumpkinRowBoat(BaseBoat boat)
|
||||
: base(0x50, Point3D.Zero, boat)
|
||||
{
|
||||
}
|
||||
|
||||
public DockedPumpkinRowBoat(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
[Flipable(0xA343, 0xA344)]
|
||||
public class TheFellowshipStaff : BaseStaff
|
||||
{
|
||||
public override int LabelNumber { get { return 1159034; } } // The Fellowship Staff
|
||||
|
||||
public static TheFellowshipStaff InstanceTram { get; set; }
|
||||
public static TheFellowshipStaff InstanceFel { get; set; }
|
||||
|
||||
[Constructable]
|
||||
public TheFellowshipStaff()
|
||||
: base (0xA343)
|
||||
{
|
||||
Hue = 2721;
|
||||
}
|
||||
|
||||
public override WeaponAbility PrimaryAbility { get { return WeaponAbility.Block; } }
|
||||
public override WeaponAbility SecondaryAbility { get { return WeaponAbility.ForceOfNature; } }
|
||||
public override int AosStrengthReq { get { return 20; } }
|
||||
public override int AosMinDamage { get { return 15; } }
|
||||
public override int AosMaxDamage { get { return 18; } }
|
||||
public override float MlSpeed { get { return 3.25f; } }
|
||||
|
||||
public override int InitMinHits { get { return 30; } }
|
||||
public override int InitMaxHits { get { return 60; } }
|
||||
|
||||
public override void GetDamageTypes(Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct)
|
||||
{
|
||||
fire = cold = pois = nrgy = chaos = direct = 0;
|
||||
phys = 100;
|
||||
}
|
||||
|
||||
public TheFellowshipStaff(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.WriteEncodedInt(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadEncodedInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
using Server;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server.Mobiles;
|
||||
using Server.Items;
|
||||
using Server.ContextMenus;
|
||||
|
||||
namespace Server.Engines.Fellowship
|
||||
{
|
||||
public class FellowshipAdept : BaseVendor
|
||||
{
|
||||
public override bool IsActiveVendor { get { return false; } }
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
public override bool DisallowAllMoves { get { return true; } }
|
||||
public override bool ClickTitle { get { return true; } }
|
||||
public override bool CanTeach { get { return false; } }
|
||||
|
||||
protected List<SBInfo> m_SBInfos = new List<SBInfo>();
|
||||
protected override List<SBInfo> SBInfos { get { return m_SBInfos; } }
|
||||
public override void InitSBInfo() { }
|
||||
|
||||
public static FellowshipAdept InstanceTram { get; set; }
|
||||
public static FellowshipAdept InstanceFel { get; set; }
|
||||
|
||||
[Constructable]
|
||||
public FellowshipAdept()
|
||||
: base("the Fellowship Adept")
|
||||
{
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
base.InitBody();
|
||||
|
||||
Name = NameList.RandomName("male");
|
||||
|
||||
Hue = Utility.RandomSkinHue();
|
||||
Body = 0x190;
|
||||
HairItemID = 0x2044;
|
||||
HairHue = 1644;
|
||||
FacialHairItemID = 0x203F;
|
||||
FacialHairHue = 1644;
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
SetWearable(new Kamishimo());
|
||||
SetWearable(new Sandals());
|
||||
SetWearable(new GoldRing());
|
||||
|
||||
if (Backpack == null)
|
||||
{
|
||||
Item backpack = new Backpack
|
||||
{
|
||||
Movable = false
|
||||
};
|
||||
|
||||
AddItem(backpack);
|
||||
}
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
list.Add(1159182); // Fellowship Shop
|
||||
}
|
||||
|
||||
public override void AddCustomContextEntries(Mobile from, List<ContextMenuEntry> list)
|
||||
{
|
||||
|
||||
if (from.Alive)
|
||||
{
|
||||
list.Add(new BrowseShopEntry(from, this));
|
||||
}
|
||||
|
||||
base.AddCustomContextEntries(from, list);
|
||||
}
|
||||
|
||||
private class BrowseShopEntry : ContextMenuEntry
|
||||
{
|
||||
private Mobile m_From;
|
||||
private BaseVendor m_Vendor;
|
||||
|
||||
public BrowseShopEntry(Mobile from, BaseVendor vendor)
|
||||
: base(1159181, 2) // Browse the Fellowship Shop
|
||||
{
|
||||
Enabled = vendor.CheckVendorAccess(from);
|
||||
|
||||
m_From = from;
|
||||
m_Vendor = vendor;
|
||||
}
|
||||
|
||||
public override void OnClick()
|
||||
{
|
||||
if (!m_From.InRange(m_Vendor.Location, 5) || !(m_From is PlayerMobile))
|
||||
return;
|
||||
|
||||
m_From.SendGump(new FellowshipRewardGump(m_Vendor, m_From as PlayerMobile));
|
||||
}
|
||||
}
|
||||
|
||||
public FellowshipAdept(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
using System;
|
||||
using Server.Items;
|
||||
using Server.Gumps;
|
||||
using Server.Mobiles;
|
||||
using Server.Engines.Quests;
|
||||
|
||||
namespace Server.Engines.Fellowship
|
||||
{
|
||||
public class Follower : BaseQuester
|
||||
{
|
||||
public static Follower InstanceTram { get; set; }
|
||||
public static Follower InstanceFel { get; set; }
|
||||
|
||||
[Constructable]
|
||||
public Follower()
|
||||
: base("the Follower")
|
||||
{
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
base.InitBody();
|
||||
|
||||
Name = NameList.RandomName("male");
|
||||
|
||||
SpeechHue = 0x3B2;
|
||||
Hue = Utility.RandomSkinHue();
|
||||
Body = 0x190;
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
SetWearable(new Surcoat(), 1255);
|
||||
SetWearable(new LongPants(), 2722);
|
||||
SetWearable(new Kilt(), 2012);
|
||||
SetWearable(new Boots());
|
||||
SetWearable(new GoldEarrings());
|
||||
}
|
||||
|
||||
public override int GetAutoTalkRange(PlayerMobile pm)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
public override void OnTalk(PlayerMobile player, bool contextMenu)
|
||||
{
|
||||
if (!player.HasGump(typeof(FollowerGump)))
|
||||
{
|
||||
player.SendGump(new FollowerGump());
|
||||
}
|
||||
}
|
||||
|
||||
public class FollowerGump : Gump
|
||||
{
|
||||
public FollowerGump()
|
||||
: base(100, 100)
|
||||
{
|
||||
AddPage(0);
|
||||
|
||||
AddBackground(0, 0, 720, 285, 0x2454);
|
||||
AddImage(0, 0, 0x6CF);
|
||||
AddHtmlLocalized(300, 24, 408, 251, 1159043, 0xC63, false, true); // Welcome to the Fellowship Hall. It isn't much, but we've been able to help the many refugees from across Britannia that Hook and his vile minions have displaced with their plundering ways! If you'd like to make a donation, simply drop your trade cargo in the donation box. With enough donations you too can become a member of the Fellowship!<BR><BR><br>If you have taken up the charge of cleansing Britannia's souls of the vile evils that plague our society, you may deposit the soulbinders in the chest here for cleansing by our Adepts.
|
||||
}
|
||||
}
|
||||
|
||||
public Follower(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,233 @@
|
||||
using System;
|
||||
using Server.Items;
|
||||
using System.Collections.Generic;
|
||||
using Server.Mobiles;
|
||||
using Server.Gumps;
|
||||
using Server.Network;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace Server.Engines.Quests
|
||||
{
|
||||
public class CooperativeArray
|
||||
{
|
||||
public string Account { get; set; }
|
||||
public int Purchase { get; set; }
|
||||
}
|
||||
|
||||
public class MiningCooperative
|
||||
{
|
||||
public static string FilePath = Path.Combine("Saves/Misc", "MiningCooperative.bin");
|
||||
private static List<CooperativeArray> PurchaseList = new List<CooperativeArray>();
|
||||
|
||||
public static void Configure()
|
||||
{
|
||||
EventSink.WorldSave += OnSave;
|
||||
EventSink.WorldLoad += OnLoad;
|
||||
}
|
||||
|
||||
public static void AddPurchase(Mobile from, int amount)
|
||||
{
|
||||
string acc = from.Account.ToString();
|
||||
|
||||
if (CheckList(from))
|
||||
{
|
||||
PurchaseList.Find(x => x.Account == acc).Purchase += amount;
|
||||
}
|
||||
else
|
||||
{
|
||||
PurchaseList.Add(new CooperativeArray { Account = from.Account.ToString(), Purchase = amount });
|
||||
}
|
||||
}
|
||||
|
||||
public static bool CheckList(Mobile from)
|
||||
{
|
||||
string acc = from.Account.ToString();
|
||||
|
||||
return PurchaseList.Any(x => x.Account == acc);
|
||||
}
|
||||
|
||||
public static int PurchaseAmount(Mobile from)
|
||||
{
|
||||
int amount = 0;
|
||||
|
||||
if (CheckList(from))
|
||||
{
|
||||
amount = PurchaseList.FirstOrDefault(x => x.Account == from.Account.ToString()).Purchase;
|
||||
}
|
||||
|
||||
return amount;
|
||||
}
|
||||
|
||||
public static void DefragTables()
|
||||
{
|
||||
PurchaseList = new List<CooperativeArray>();
|
||||
}
|
||||
|
||||
public static void OnSave(WorldSaveEventArgs e)
|
||||
{
|
||||
Persistence.Serialize(
|
||||
FilePath,
|
||||
writer =>
|
||||
{
|
||||
writer.Write((int)0);
|
||||
|
||||
writer.Write(PurchaseList.Count);
|
||||
|
||||
PurchaseList.ForEach(s =>
|
||||
{
|
||||
writer.Write(s.Account);
|
||||
writer.Write((int)s.Purchase);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public static void OnLoad()
|
||||
{
|
||||
Persistence.Deserialize(
|
||||
FilePath,
|
||||
reader =>
|
||||
{
|
||||
int version = reader.ReadInt();
|
||||
int count = reader.ReadInt();
|
||||
|
||||
for (int i = count; i > 0; i--)
|
||||
{
|
||||
string acc = reader.ReadString();
|
||||
int purchase = reader.ReadInt();
|
||||
|
||||
if (acc != null)
|
||||
{
|
||||
PurchaseList.Add(new CooperativeArray { Account = acc, Purchase = purchase });
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public class MiningCooperativeMerchant : BaseVendor
|
||||
{
|
||||
protected readonly List<SBInfo> m_SBInfos = new List<SBInfo>();
|
||||
protected override List<SBInfo> SBInfos { get { return m_SBInfos; } }
|
||||
|
||||
public override bool IsActiveVendor { get { return false; } }
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
public int MaxAmount { get { return 5000; } }
|
||||
public int Price { get { return 112; } }
|
||||
public int Quantity { get { return 500; } }
|
||||
|
||||
public static MiningCooperativeMerchant InstanceTram { get; set; }
|
||||
public static MiningCooperativeMerchant InstanceFel { get; set; }
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public MiningCooperativeMerchant()
|
||||
: base("the Mining Cooperative Merchant")
|
||||
{
|
||||
}
|
||||
|
||||
public MiningCooperativeMerchant(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
AddItem(new FancyShirt(0x3E4));
|
||||
AddItem(new LongPants(0x192));
|
||||
AddItem(new Pickaxe());
|
||||
AddItem(new ThighBoots(0x283));
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
from.CloseGump(typeof(MiningCooperativeGump));
|
||||
from.SendGump(new MiningCooperativeGump(this, from));
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
|
||||
public class MiningCooperativeGump : Gump
|
||||
{
|
||||
private readonly MiningCooperativeMerchant Vendor;
|
||||
|
||||
public MiningCooperativeGump(MiningCooperativeMerchant vendor, Mobile from)
|
||||
: base(100, 100)
|
||||
{
|
||||
Vendor = vendor;
|
||||
|
||||
AddPage(0);
|
||||
|
||||
int available = vendor.MaxAmount - MiningCooperative.PurchaseAmount(from);
|
||||
|
||||
AddBackground(0, 0, 310, 350, 0x6DB);
|
||||
AddImage(54, 0, 0x6E4);
|
||||
AddHtmlLocalized(10, 10, 290, 18, 1114513, "#1154040", 0x0, false, false); // <DIV ALIGN=CENTER>~1_TOKEN~</DIV>
|
||||
AddItem(20, 80, 0xA3E8);
|
||||
AddHtmlLocalized(120, 73, 180, 18, 1159190, 0x43FF, false, false); // Ethereal Sand
|
||||
AddHtmlLocalized(120, 100, 180, 18, 1159191, vendor.Price.ToString(), 0x43FF, false, false); // GP: ~1_VALUE~
|
||||
AddItem(20, 140, 0x14F0);
|
||||
AddHtmlLocalized(120, 143, 180, 18, 1159193, string.Format("{0}@{1}", vendor.Quantity, vendor.Quantity*vendor.Price), 0x5FF0, false, false); // x~1_QUANT~ GP: ~2_COST~
|
||||
AddHtmlLocalized(25, 203, 275, 18, 1159192, string.Format("{0}@{1}", available, vendor.MaxAmount), 0x7FF0, false, false); // Available For Purchase: ~1_PART~ / ~2_WHOLE~
|
||||
AddHtmlLocalized(20, 243, 160, 72, 1159194, string.Format("{0}@#1159190@{1}", vendor.Quantity, vendor.Quantity * vendor.Price), 0x7FFF, false, false); // Purchase a Commodity Deed filled with ~1_QUANT~ ~2_NAME~ for ~3_COST~ GP?
|
||||
AddButton(220, 260, 0x81C, 0x81B, 1, GumpButtonType.Reply, 0);
|
||||
}
|
||||
|
||||
public override void OnResponse(NetState sender, RelayInfo info)
|
||||
{
|
||||
Mobile from = sender.Mobile;
|
||||
|
||||
int available = Vendor.MaxAmount - MiningCooperative.PurchaseAmount(from);
|
||||
int payment = Vendor.Quantity * Vendor.Price;
|
||||
|
||||
if (info.ButtonID == 1)
|
||||
{
|
||||
if (available > 0)
|
||||
{
|
||||
if (Banker.Withdraw(from, payment, true))
|
||||
{
|
||||
CommodityDeed deed = new CommodityDeed();
|
||||
deed.SetCommodity(new EtherealSand(Vendor.Quantity));
|
||||
from.AddToBackpack(deed);
|
||||
|
||||
MiningCooperative.AddPurchase(from, Vendor.Quantity);
|
||||
from.SendGump(new MiningCooperativeGump(Vendor, from));
|
||||
}
|
||||
else
|
||||
{
|
||||
Vendor.Say(500192); // Begging thy pardon, but thou canst not afford that.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Vendor.Say(1159195); // Begging thy pardon, but your family has purchased the maximum amount of that commodity. I cannot sell you more until a new shipment arrives!
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
238
Scripts/Services/Seasonal Events/ForsakenFoes/Mobile/Worker.cs
Normal file
238
Scripts/Services/Seasonal Events/ForsakenFoes/Mobile/Worker.cs
Normal file
@@ -0,0 +1,238 @@
|
||||
using System;
|
||||
using Server.Items;
|
||||
using Server.Gumps;
|
||||
using Server.Mobiles;
|
||||
using Server.Engines.Quests;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace Server.Engines.Fellowship
|
||||
{
|
||||
public enum FellowshipChain
|
||||
{
|
||||
None,
|
||||
One,
|
||||
Two,
|
||||
Three,
|
||||
Four,
|
||||
Five,
|
||||
Six,
|
||||
Seven,
|
||||
Eight
|
||||
}
|
||||
|
||||
public class Worker : BaseQuester
|
||||
{
|
||||
public static string FilePath = Path.Combine("Saves/Misc", "FellowshipChain.bin");
|
||||
public static Dictionary<Mobile, FellowshipChain> FellowshipChainList = new Dictionary<Mobile, FellowshipChain>();
|
||||
|
||||
public static void Configure()
|
||||
{
|
||||
EventSink.WorldSave += OnSave;
|
||||
EventSink.WorldLoad += OnLoad;
|
||||
}
|
||||
|
||||
public static void OnSave(WorldSaveEventArgs e)
|
||||
{
|
||||
Persistence.Serialize(
|
||||
FilePath,
|
||||
writer =>
|
||||
{
|
||||
writer.Write((int)0);
|
||||
|
||||
writer.Write(FellowshipChainList.Count);
|
||||
|
||||
foreach (var chain in FellowshipChainList)
|
||||
{
|
||||
writer.Write(chain.Key);
|
||||
writer.Write((int)chain.Value);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void OnLoad()
|
||||
{
|
||||
Persistence.Deserialize(
|
||||
FilePath,
|
||||
reader =>
|
||||
{
|
||||
int version = reader.ReadInt();
|
||||
int count = reader.ReadInt();
|
||||
|
||||
for (int i = count; i > 0; i--)
|
||||
{
|
||||
Mobile m = reader.ReadMobile();
|
||||
FellowshipChain chain = (FellowshipChain)reader.ReadInt();
|
||||
|
||||
if (m != null)
|
||||
{
|
||||
FellowshipChainList[m] = chain;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static Worker InstanceTram { get; set; }
|
||||
public static Worker InstanceFel { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public FellowshipChain Chain { get; set; }
|
||||
|
||||
[Constructable]
|
||||
public Worker(FellowshipChain chain)
|
||||
: base("the Worker")
|
||||
{
|
||||
Chain = chain;
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
base.InitBody();
|
||||
|
||||
Name = NameList.RandomName("male");
|
||||
|
||||
SpeechHue = 0x3B2;
|
||||
Hue = Utility.RandomSkinHue();
|
||||
Body = 0x190;
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
SetWearable(new FullApron(), 902);
|
||||
SetWearable(new HalfApron(), 946);
|
||||
SetWearable(new Shirt(), 1513);
|
||||
SetWearable(new LeatherGloves());
|
||||
SetWearable(new Boots(), 2013);
|
||||
SetWearable(new ShortPants());
|
||||
SetWearable(new SmithHammer());
|
||||
}
|
||||
|
||||
public override bool OnDragDrop(Mobile from, Item item)
|
||||
{
|
||||
if (item is FellowshipCoin)
|
||||
{
|
||||
if (FellowshipChainList.ContainsKey(from))
|
||||
{
|
||||
if (Chain > FellowshipChainList[from])
|
||||
{
|
||||
FellowshipChainList[from] = Chain;
|
||||
}
|
||||
else
|
||||
{
|
||||
SayTo(from, 500607, 0x3B2); // I'm not interested in that.
|
||||
return false;
|
||||
}
|
||||
|
||||
if (FellowshipChainList[from] == FellowshipChain.Eight)
|
||||
{
|
||||
from.AddToBackpack(new FellowshipMedallion());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
FellowshipChainList.Add(from, Chain);
|
||||
}
|
||||
|
||||
item.Delete();
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
SayTo(from, 500607, 0x3B2); // I'm not interested in that.
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (m != null && InRange(m.Location, 5))
|
||||
{
|
||||
if (!m.HasGump(typeof(WorkerGump)))
|
||||
{
|
||||
m.SendGump(new WorkerGump(m, Chain));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnTalk(PlayerMobile player, bool contextMenu)
|
||||
{
|
||||
if (!player.HasGump(typeof(WorkerGump)))
|
||||
{
|
||||
player.SendGump(new WorkerGump(player, Chain));
|
||||
}
|
||||
}
|
||||
|
||||
public class WorkerGump : Gump
|
||||
{
|
||||
private static readonly int[,] clilocs = new int[,]
|
||||
{
|
||||
{1159238, 1159239},
|
||||
{1159236, 1159240},
|
||||
{1159236, 1159241},
|
||||
{1159236, 1159242},
|
||||
{1159236, 1159243},
|
||||
{1159236, 1159244},
|
||||
{1159236, 1159245},
|
||||
{1159236, 1159246},
|
||||
};
|
||||
|
||||
public WorkerGump(Mobile from, FellowshipChain chain)
|
||||
: base(100, 100)
|
||||
{
|
||||
int cliloc;
|
||||
|
||||
if (FellowshipChainList.ContainsKey(from))
|
||||
{
|
||||
if (chain > FellowshipChainList[from])
|
||||
cliloc = clilocs[(int)(chain - 1), 0];
|
||||
else
|
||||
cliloc = clilocs[(int)(chain - 1), 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
cliloc = clilocs[(int)(chain - 1), 0];
|
||||
}
|
||||
|
||||
AddPage(0);
|
||||
|
||||
AddBackground(0, 0, 620, 328, 0x2454);
|
||||
AddImage(0, 0, 0x61A);
|
||||
AddHtmlLocalized(335, 14, 273, 18, 1114513, "#1159237", 0xC63, false, false); // <DIV ALIGN=CENTER>~1_TOKEN~</DIV>
|
||||
AddHtmlLocalized(335, 51, 273, 267, cliloc, 0xC63, false, true);
|
||||
}
|
||||
}
|
||||
|
||||
public Worker(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write((int)Chain);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Chain = (FellowshipChain)reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
35
Scripts/Services/Seasonal Events/ForsakenFoes/Rewards.cs
Normal file
35
Scripts/Services/Seasonal Events/ForsakenFoes/Rewards.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using System.Collections.Generic;
|
||||
using Server.Multis;
|
||||
|
||||
namespace Server.Engines.Fellowship
|
||||
{
|
||||
public static class FellowshipRewards
|
||||
{
|
||||
public static List<CollectionItem> Rewards { get; set; }
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
Rewards = new List<CollectionItem>
|
||||
{
|
||||
new CollectionItem(typeof(TinctureOfSilver), 0x183B, 1155619, 1900, 10000),
|
||||
new CollectionItem(typeof(PumpkinDeed), 0x14F2, 1159232, 1922, 50000),
|
||||
new CollectionItem(typeof(PumpkinRowBoatDeed), 0x14F2, 1159233, 0, 250000),
|
||||
new CollectionItem(typeof(JackOLanternHelm), 0xA3EA, 1125986, 0, 150000),
|
||||
new CollectionItem(typeof(AdmiralJacksPumpkinSpiceAle), 0xA40B, 1159230, 1922, 50000),
|
||||
new CollectionItem(typeof(ExplodingJackOLantern), 0xA407, 1159220, 1175, 40000),
|
||||
new CollectionItem(typeof(CaptainTitleDeed), 0x14EF, 1156995, 0, 80000),
|
||||
new CollectionItem(typeof(CommanderTitleDeed), 0x14EF, 1156995, 0, 40000),
|
||||
new CollectionItem(typeof(EnsignTitleDeed), 0x14EF, 1156995, 0, 20000),
|
||||
new CollectionItem(typeof(RecipeScroll), 0x2831, 1074560, 0, 150000),
|
||||
new CollectionItem(typeof(RecipeScroll), 0x2831, 1074560, 0, 150000),
|
||||
new CollectionItem(typeof(RecipeScroll), 0x2831, 1074560, 0, 200000),
|
||||
new CollectionItem(typeof(RecipeScroll), 0x2831, 1074560, 0, 75000),
|
||||
new CollectionItem(typeof(RecipeScroll), 0x2831, 1074560, 0, 75000),
|
||||
new CollectionItem(typeof(RecipeScroll), 0x2831, 1074560, 0, 75000)
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
using System;
|
||||
using Server.Engines.Craft;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class BarbedWhip : BaseBashing, Server.Engines.Craft.IRepairable
|
||||
{
|
||||
public Server.Engines.Craft.CraftSystem RepairSystem { get { return Server.Engines.Craft.DefTinkering.CraftSystem; } }
|
||||
public override int LabelNumber { get { return 1125641; } } // Barbed Whip
|
||||
|
||||
[Constructable]
|
||||
public BarbedWhip()
|
||||
: base(0xA289)
|
||||
{
|
||||
Weight = 5.0;
|
||||
}
|
||||
|
||||
public BarbedWhip(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool CanBeWornByGargoyles { get { return true; } }
|
||||
public override WeaponAbility PrimaryAbility { get { return WeaponAbility.ConcussionBlow; } }
|
||||
public override WeaponAbility SecondaryAbility { get { return WeaponAbility.WhirlwindAttack; } }
|
||||
public override int AosStrengthReq { get { return 20; } }
|
||||
public override int AosMinDamage { get { return 13; } }
|
||||
public override int AosMaxDamage { get { return 17; } }
|
||||
public override float MlSpeed { get { return 3.25f; } }
|
||||
public override int DefHitSound { get { return 0x23B; } }
|
||||
public override int DefMissSound { get { return 0x23A; } }
|
||||
public override int InitMinHits { get { return 30; } }
|
||||
public override int InitMaxHits { get { return 60; } }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
using System;
|
||||
using Server.Engines.Craft;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class BladedWhip : BaseSword, Server.Engines.Craft.IRepairable
|
||||
{
|
||||
public Server.Engines.Craft.CraftSystem RepairSystem { get { return Server.Engines.Craft.DefTinkering.CraftSystem; } }
|
||||
public override int LabelNumber { get { return 1125643; } } // Bladed Whip
|
||||
|
||||
[Constructable]
|
||||
public BladedWhip()
|
||||
: base(0xA28B)
|
||||
{
|
||||
Weight = 5.0;
|
||||
}
|
||||
|
||||
public BladedWhip(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool CanBeWornByGargoyles { get { return true; } }
|
||||
public override WeaponAbility PrimaryAbility { get { return WeaponAbility.BleedAttack; } }
|
||||
public override WeaponAbility SecondaryAbility { get { return WeaponAbility.WhirlwindAttack; } }
|
||||
public override int AosStrengthReq { get { return 20; } }
|
||||
public override int AosMinDamage { get { return 13; } }
|
||||
public override int AosMaxDamage { get { return 17; } }
|
||||
public override float MlSpeed { get { return 3.25f; } }
|
||||
public override int DefHitSound { get { return 0x23B; } }
|
||||
public override int DefMissSound { get { return 0x23A; } }
|
||||
public override int InitMinHits { get { return 30; } }
|
||||
public override int InitMaxHits { get { return 60; } }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class GoldBranch : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1158835; } } // branch
|
||||
|
||||
[Constructable]
|
||||
public GoldBranch()
|
||||
: base(Utility.RandomList(3458, 3473))
|
||||
{
|
||||
Hue = 2721;
|
||||
}
|
||||
public GoldBranch(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class SilverBranch : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1158835; } } // branch
|
||||
|
||||
[Constructable]
|
||||
public SilverBranch()
|
||||
: base(Utility.RandomList(3458, 3473))
|
||||
{
|
||||
Hue = 2500;
|
||||
}
|
||||
public SilverBranch(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class DirtySnowballs : SnowPile
|
||||
{
|
||||
public override int LabelNumber { get { return 1158833; } } // dirty snowballs
|
||||
|
||||
[Constructable]
|
||||
public DirtySnowballs()
|
||||
{
|
||||
ItemID = 0xE74;
|
||||
Hue = 1301;
|
||||
}
|
||||
|
||||
public DirtySnowballs(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class KrampusCoinPurse : Bag
|
||||
{
|
||||
[Constructable]
|
||||
public KrampusCoinPurse()
|
||||
: this(0)
|
||||
{
|
||||
}
|
||||
|
||||
public KrampusCoinPurse(int karma)
|
||||
{
|
||||
Name = "Krampus' Coin Purse"; // No Cliloc!
|
||||
|
||||
for (int i = 0; i < 25; i++)
|
||||
{
|
||||
DropItemStacked(Loot.RandomGem());
|
||||
}
|
||||
|
||||
DropItem(new Gold(Utility.RandomMinMax(2000, 5000)));
|
||||
|
||||
if (.25 > Utility.RandomDouble())
|
||||
{
|
||||
if (Utility.RandomBool())
|
||||
{
|
||||
DropItem(new DirtySnowballs());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (karma > 0)
|
||||
{
|
||||
DropItem(new GoldBranch());
|
||||
}
|
||||
else
|
||||
{
|
||||
DropItem(new SilverBranch());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public KrampusCoinPurse(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class KrampusMinionBoots : BaseShoes
|
||||
{
|
||||
public override int LabelNumber { get { return 1125637; } } // krampus minion boots
|
||||
|
||||
[Constructable]
|
||||
public KrampusMinionBoots()
|
||||
: this(0)
|
||||
{
|
||||
Weight = 2.0;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public KrampusMinionBoots(int hue)
|
||||
: base(0xA28D, hue)
|
||||
{
|
||||
}
|
||||
|
||||
public KrampusMinionBoots(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class KrampusMinionEarrings : BaseArmor
|
||||
{
|
||||
public override int LabelNumber { get { return 1125645; } } // krampus minion earrings
|
||||
|
||||
[Constructable]
|
||||
public KrampusMinionEarrings()
|
||||
: base(0xA295)
|
||||
{
|
||||
Layer = Layer.Earrings;
|
||||
}
|
||||
|
||||
public KrampusMinionEarrings(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override Race RequiredRace { get { return Race.Gargoyle; } }
|
||||
public override bool CanBeWornByGargoyles { get { return true; } }
|
||||
|
||||
public override ArmorMaterialType MaterialType { get { return ArmorMaterialType.Chainmail; } }
|
||||
public override ArmorMeditationAllowance DefMedAllowance { get { return ArmorMeditationAllowance.All; } }
|
||||
|
||||
public override int BasePhysicalResistance { get { return 1; } }
|
||||
public override int BaseFireResistance { get { return 2; } }
|
||||
public override int BaseColdResistance { get { return 2; } }
|
||||
public override int BasePoisonResistance { get { return 2; } }
|
||||
public override int BaseEnergyResistance { get { return 3; } }
|
||||
|
||||
public override int InitMinHits { get { return 30; } }
|
||||
public override int InitMaxHits { get { return 50; } }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class KrampusMinionHat : BaseHat
|
||||
{
|
||||
public override int LabelNumber { get { return 1125639; } } // krampus minion hat
|
||||
|
||||
public override int BasePhysicalResistance { get { return 0; } }
|
||||
public override int BaseFireResistance { get { return 5; } }
|
||||
public override int BaseColdResistance { get { return 9; } }
|
||||
public override int BasePoisonResistance { get { return 5; } }
|
||||
public override int BaseEnergyResistance { get { return 5; } }
|
||||
|
||||
public override int InitMinHits { get { return 20; } }
|
||||
public override int InitMaxHits { get { return 30; } }
|
||||
|
||||
[Constructable]
|
||||
public KrampusMinionHat()
|
||||
: this(0)
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public KrampusMinionHat(int hue)
|
||||
: base(0xA28F, hue)
|
||||
{
|
||||
Weight = 3.0;
|
||||
}
|
||||
|
||||
public KrampusMinionHat(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class KrampusMinionTalons : BaseShoes
|
||||
{
|
||||
public override int LabelNumber { get { return 1125644; } } // krampus minion talons
|
||||
|
||||
[Constructable]
|
||||
public KrampusMinionTalons()
|
||||
: this(0)
|
||||
{
|
||||
Weight = 2.0;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public KrampusMinionTalons(int hue)
|
||||
: base(0xA294, 1153)
|
||||
{
|
||||
}
|
||||
|
||||
public KrampusMinionTalons(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override Race RequiredRace { get { return Race.Gargoyle; } }
|
||||
public override bool CanBeWornByGargoyles { get { return true; } }
|
||||
|
||||
public override CraftResource DefaultResource
|
||||
{
|
||||
get
|
||||
{
|
||||
return CraftResource.RegularLeather;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
[Flipable(0x46AE, 0x46AF)]
|
||||
public class KrampusPunishinList : Item
|
||||
{
|
||||
private string _Name;
|
||||
|
||||
[Constructable]
|
||||
public KrampusPunishinList(string name)
|
||||
: base(0x46AE)
|
||||
{
|
||||
_Name = name;
|
||||
Hue = 0x21;
|
||||
}
|
||||
|
||||
public override void AddNameProperty(ObjectPropertyList list)
|
||||
{
|
||||
list.Add(1158834, _Name);
|
||||
}
|
||||
|
||||
public KrampusPunishinList(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
|
||||
writer.Write(_Name);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
_Name = reader.ReadString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class NaughtyTitleDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return new TextDefinition(1158797); } } // Naughty
|
||||
|
||||
[Constructable]
|
||||
public NaughtyTitleDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public NaughtyTitleDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class NiceTitleDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return new TextDefinition(1158798); } } // Nice
|
||||
|
||||
[Constructable]
|
||||
public NiceTitleDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public NiceTitleDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class PunisherTitleDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return new TextDefinition(1158795); } } // Punisher
|
||||
|
||||
[Constructable]
|
||||
public PunisherTitleDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public PunisherTitleDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
using System;
|
||||
using Server.Engines.Craft;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class SpikedWhip : BaseSword, Server.Engines.Craft.IRepairable
|
||||
{
|
||||
public Server.Engines.Craft.CraftSystem RepairSystem { get { return Server.Engines.Craft.DefTinkering.CraftSystem; } }
|
||||
public override int LabelNumber { get { return 1125634; } } // Spiked Whip
|
||||
|
||||
[Constructable]
|
||||
public SpikedWhip()
|
||||
: base(0xA292)
|
||||
{
|
||||
Weight = 5.0;
|
||||
}
|
||||
|
||||
public SpikedWhip(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool CanBeWornByGargoyles { get { return true; } }
|
||||
public override WeaponAbility PrimaryAbility { get { return WeaponAbility.ArmorPierce; } }
|
||||
public override WeaponAbility SecondaryAbility { get { return WeaponAbility.WhirlwindAttack; } }
|
||||
public override int AosStrengthReq { get { return 20; } }
|
||||
public override int AosMinDamage { get { return 13; } }
|
||||
public override int AosMaxDamage { get { return 17; } }
|
||||
public override float MlSpeed { get { return 3.25f; } }
|
||||
public override int DefHitSound { get { return 0x23B; } }
|
||||
public override int DefMissSound { get { return 0x23A; } }
|
||||
public override int InitMinHits { get { return 30; } }
|
||||
public override int InitMaxHits { get { return 60; } }
|
||||
public override SkillName DefSkill { get { return SkillName.Fencing; } }
|
||||
public override WeaponType DefType { get { return WeaponType.Piercing; } }
|
||||
public override WeaponAnimation DefAnimation { get { return WeaponAnimation.Pierce1H; } }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,337 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Engines.CityLoyalty;
|
||||
using Server.Spells;
|
||||
using Server.Network;
|
||||
using Server.Commands;
|
||||
using Server.Gumps;
|
||||
|
||||
namespace Server.Engines.SeasonalEvents
|
||||
{
|
||||
[PropertyObject]
|
||||
public class KrampusEncounter
|
||||
{
|
||||
public static string FilePath = Path.Combine("Saves/Misc", "KrampusEncounter.bin");
|
||||
|
||||
public static bool Enabled { get { return SeasonalEventSystem.IsActive(EventType.KrampusEncounter); } }
|
||||
public static KrampusEncounter Encounter { get; set; }
|
||||
|
||||
public static readonly int MinComplete = 20;
|
||||
|
||||
public static void Configure()
|
||||
{
|
||||
EventSink.WorldSave += OnSave;
|
||||
EventSink.WorldLoad += OnLoad;
|
||||
}
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
CommandSystem.Register("KrampusEncounter", AccessLevel.Administrator, e =>
|
||||
{
|
||||
if (Encounter != null)
|
||||
{
|
||||
e.Mobile.SendGump(new PropertiesGump(e.Mobile, Encounter));
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Mobile.SendMessage("Encounter null");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void OnSave(WorldSaveEventArgs e)
|
||||
{
|
||||
CheckEnabled();
|
||||
|
||||
Persistence.Serialize(
|
||||
FilePath,
|
||||
writer =>
|
||||
{
|
||||
writer.Write(0);
|
||||
|
||||
if (Encounter != null)
|
||||
{
|
||||
writer.Write(1);
|
||||
Encounter.Serialize(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.Write(0);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void OnLoad()
|
||||
{
|
||||
Persistence.Deserialize(
|
||||
FilePath,
|
||||
reader =>
|
||||
{
|
||||
reader.ReadInt(); // version
|
||||
|
||||
if (reader.ReadInt() == 1)
|
||||
{
|
||||
Encounter = new KrampusEncounter();
|
||||
Encounter.Deserialize(reader);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void CheckEnabled()
|
||||
{
|
||||
if (Enabled)
|
||||
{
|
||||
if (Encounter == null)
|
||||
{
|
||||
Encounter = new KrampusEncounter();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Encounter != null && Encounter.Krampus == null)
|
||||
{
|
||||
Encounter = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static bool KrampusSpawned()
|
||||
{
|
||||
return Enabled && Encounter != null && Encounter.Krampus != null && !Encounter.Krampus.Deleted;
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public int TotalTradesComplete { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public int Wave { get { return (int)Math.Max(1, (int)Math.Min(6, (double)TotalTradesComplete / 4.1)); } }
|
||||
|
||||
public Dictionary<PlayerMobile, int> CompleteTable { get; set; } = new Dictionary<PlayerMobile, int>();
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public Krampus Krampus { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public Point3D SpawnLocation { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public bool KrampusSpawning { get { return SpawnMap != null && SpawnLocation != Point3D.Zero; } }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public Map SpawnMap { get; set; }
|
||||
|
||||
public KrampusEncounter()
|
||||
{
|
||||
}
|
||||
|
||||
public void OnTradeComplete(Mobile m, TradeEntry entry)
|
||||
{
|
||||
bool distCheck = entry.Distance > 0;
|
||||
|
||||
// 0 distance indicates they used a moongate
|
||||
if (m is PlayerMobile && distCheck)
|
||||
{
|
||||
var pm = (PlayerMobile)m;
|
||||
|
||||
if (!CompleteTable.ContainsKey(pm))
|
||||
{
|
||||
CompleteTable[pm] = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
CompleteTable[pm]++;
|
||||
}
|
||||
}
|
||||
|
||||
if (TotalTradesComplete > MinComplete || distCheck)
|
||||
{
|
||||
TotalTradesComplete++;
|
||||
}
|
||||
}
|
||||
|
||||
public Type[] GetCreatureTypes(Mobile m, bool wet)
|
||||
{
|
||||
if (Krampus != null || KrampusSpawning)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (wet)
|
||||
{
|
||||
return _WetSpawnTypes;
|
||||
}
|
||||
else
|
||||
{
|
||||
var wave = (int)Math.Max(1, (int)Math.Min(6, (double)TotalTradesComplete / 4.1)); // TODO: Is this right?
|
||||
|
||||
if (wave == 6)
|
||||
{
|
||||
if ((m.Map == Map.Trammel || (Siege.SiegeShard && m.Map == Map.Felucca)) && !SpellHelper.IsAnyT2A(m.Map, m.Location))
|
||||
{
|
||||
SpawnKrampus(m);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
return _SpawnTypes[4];
|
||||
}
|
||||
|
||||
return _SpawnTypes[wave - 1];
|
||||
}
|
||||
}
|
||||
|
||||
private void SpawnKrampus(Mobile m)
|
||||
{
|
||||
SpawnMap = m.Map;
|
||||
var p = m.Location;
|
||||
|
||||
for (int i = 0; i < 25; i++)
|
||||
{
|
||||
int x = p.X + (Utility.RandomMinMax(-3, 3));
|
||||
int y = p.Y + (Utility.RandomMinMax(-3, 3));
|
||||
int z = m.Map.GetAverageZ(x, y);
|
||||
|
||||
if (SpawnMap.CanSpawnMobile(x, y, z))
|
||||
{
|
||||
p = new Point3D(x, y, z);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
SpawnLocation = p;
|
||||
|
||||
foreach (var ns in NetState.Instances)
|
||||
{
|
||||
var mob = ns.Mobile;
|
||||
|
||||
if (mob != null && CityTradeSystem.HasTrade(mob))
|
||||
{
|
||||
mob.LocalOverheadMessage(MessageType.Regular, 1150, 1158832, String.Format("{0}\t{1}", WorldLocationInfo.GetLocationString(SpawnLocation, SpawnMap), Sextant.GetCoords(SpawnLocation, SpawnMap))); // *You sense Krampus has been spotted near ~2_where~ at ~1_coords~!*
|
||||
}
|
||||
}
|
||||
|
||||
Timer.DelayCall(TimeSpan.FromMinutes(5), () =>
|
||||
{
|
||||
SpawnKrampus();
|
||||
});
|
||||
}
|
||||
|
||||
private void SpawnKrampus()
|
||||
{
|
||||
Krampus = new Krampus();
|
||||
Krampus.SpawnLocation = SpawnLocation;
|
||||
Krampus.Home = SpawnLocation;
|
||||
Krampus.RangeHome = 5;
|
||||
|
||||
Krampus.MoveToWorld(SpawnLocation, SpawnMap);
|
||||
Krampus.Summon(Krampus, true);
|
||||
|
||||
var rec = new Rectangle2D(SpawnLocation.X - 10, SpawnLocation.Y - 10, 20, 20);
|
||||
|
||||
for (var i = 0; i < 2; i++)
|
||||
{
|
||||
var drake = new FrostDrake();
|
||||
|
||||
Point3D p = new Point3D(SpawnLocation);
|
||||
|
||||
for (int j = 0; i < 10; j++)
|
||||
{
|
||||
p = SpawnMap.GetRandomSpawnPoint(rec);
|
||||
|
||||
if (SpawnMap.CanSpawnMobile(p.X, p.Y, p.Z))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
drake.MoveToWorld(p, SpawnMap);
|
||||
drake.Home = p;
|
||||
drake.RangeHome = 15;
|
||||
}
|
||||
|
||||
SpawnLocation = Point3D.Zero;
|
||||
SpawnMap = null;
|
||||
}
|
||||
|
||||
public void OnKrampusKilled()
|
||||
{
|
||||
Krampus = null;
|
||||
|
||||
CompleteTable.Clear();
|
||||
TotalTradesComplete = 0;
|
||||
|
||||
if (!Enabled)
|
||||
{
|
||||
Encounter = null;
|
||||
}
|
||||
}
|
||||
|
||||
public Type[][] _SpawnTypes =
|
||||
{
|
||||
new Type[] { typeof(FrostOoze), typeof(FrostSpider) },
|
||||
new Type[] { typeof(SnowElemental), typeof(IceElemental) },
|
||||
new Type[] { typeof(IceSerpent), typeof(FrostTroll) },
|
||||
new Type[] { typeof(IceFiend), typeof(WhiteWyrm) },
|
||||
new Type[] { typeof(KrampusMinion) },
|
||||
new Type[] { typeof(Krampus) }
|
||||
};
|
||||
|
||||
public Type[] _WetSpawnTypes =
|
||||
{
|
||||
typeof(SeaSerpent), typeof(DeepSeaSerpent), typeof(Kraken), typeof(WaterElemental)
|
||||
};
|
||||
|
||||
public void Serialize(GenericWriter writer)
|
||||
{
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(Krampus);
|
||||
writer.Write(SpawnLocation);
|
||||
writer.Write(SpawnMap);
|
||||
|
||||
writer.Write(TotalTradesComplete);
|
||||
|
||||
writer.Write(CompleteTable.Count);
|
||||
|
||||
foreach (var kvp in CompleteTable)
|
||||
{
|
||||
writer.Write(kvp.Key);
|
||||
writer.Write(kvp.Value);
|
||||
}
|
||||
}
|
||||
|
||||
public void Deserialize(GenericReader reader)
|
||||
{
|
||||
reader.ReadInt();
|
||||
|
||||
Krampus = reader.ReadMobile() as Krampus;
|
||||
SpawnLocation = reader.ReadPoint3D();
|
||||
SpawnMap = reader.ReadMap();
|
||||
|
||||
TotalTradesComplete = reader.ReadInt();
|
||||
|
||||
int count = reader.ReadInt();
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
var m = reader.ReadMobile() as PlayerMobile;
|
||||
var c = reader.ReadInt();
|
||||
|
||||
if (m != null)
|
||||
{
|
||||
CompleteTable[m] = c;
|
||||
}
|
||||
}
|
||||
|
||||
if (KrampusSpawning && Krampus == null)
|
||||
{
|
||||
Timer.DelayCall(TimeSpan.FromMinutes(2), SpawnKrampus);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,450 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Engines.SeasonalEvents;
|
||||
using Server.Spells;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("the corpse of krampus")]
|
||||
public class Krampus : BaseCreature
|
||||
{
|
||||
public override bool TeleportsTo { get { return true; } }
|
||||
|
||||
public List<BaseCreature> SummonedHelpers { get; set; }
|
||||
public List<BaseCreature> InitialSpawn { get; set; }
|
||||
|
||||
private DateTime _NextSpecial;
|
||||
public const int MaxSummons = 24;
|
||||
|
||||
private DateTime _LastActivity;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public Point3D SpawnLocation { get; set; }
|
||||
|
||||
public bool IsKrampusEncounter { get { return KrampusEncounter.Encounter != null && KrampusEncounter.Encounter.Krampus == this; } }
|
||||
|
||||
[Constructable]
|
||||
public Krampus()
|
||||
: base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
|
||||
{
|
||||
Name = "Krampus";
|
||||
Body = 1484;
|
||||
|
||||
SetStr(700, 750);
|
||||
SetDex(800, 900);
|
||||
SetInt(500, 600);
|
||||
|
||||
SetHits(40000);
|
||||
|
||||
SetDamage(28, 35);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 50);
|
||||
SetDamageType(ResistanceType.Cold, 50);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 80, 90);
|
||||
SetResistance(ResistanceType.Fire, 70, 80);
|
||||
SetResistance(ResistanceType.Cold, 80, 90);
|
||||
SetResistance(ResistanceType.Poison, 70, 80);
|
||||
SetResistance(ResistanceType.Energy, 70, 80);
|
||||
|
||||
SetSkill(SkillName.MagicResist, 150);
|
||||
SetSkill(SkillName.Tactics, 110, 120);
|
||||
SetSkill(SkillName.Wrestling, 120.0, 125.0);
|
||||
SetSkill(SkillName.DetectHidden, 60.0, 70.0);
|
||||
SetSkill(SkillName.Parry, 60, 70);
|
||||
|
||||
Fame = 30000;
|
||||
Karma = -30000;
|
||||
|
||||
switch (Utility.Random(3))
|
||||
{
|
||||
case 0:
|
||||
SetMagicalAbility(MagicalAbility.Piercing); break;
|
||||
case 1:
|
||||
SetMagicalAbility(MagicalAbility.Bashing); break;
|
||||
case 2:
|
||||
SetMagicalAbility(MagicalAbility.Slashing); break;
|
||||
}
|
||||
|
||||
_NextSpecial = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
public int TotalSummons()
|
||||
{
|
||||
if (SummonedHelpers == null)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return SummonedHelpers.Where(bc => bc != null && bc.Alive).Count();
|
||||
}
|
||||
|
||||
public void Summon(Mobile target, bool initial = false)
|
||||
{
|
||||
if (target == null || (!initial && InitialSpawn != null && InitialSpawn.Count > 0))
|
||||
return;
|
||||
|
||||
var map = Map;
|
||||
|
||||
if (map == null || TotalSummons() > MaxSummons)
|
||||
return;
|
||||
|
||||
if (!initial)
|
||||
{
|
||||
MovingEffect(target, 0xA271, 10, 0, false, false, 0, 0);
|
||||
}
|
||||
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(initial ? 0.25 : 1.0), com =>
|
||||
{
|
||||
if (!com.Alive)
|
||||
return;
|
||||
|
||||
int count = Utility.RandomMinMax(3, 5);
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
Point3D p = com.Location;
|
||||
|
||||
for (int j = 0; j < 10; j++)
|
||||
{
|
||||
int x = Utility.RandomMinMax(p.X - 3, p.X + 3);
|
||||
int y = Utility.RandomMinMax(p.Y - 3, p.Y + 3);
|
||||
int z = map.GetAverageZ(x, y);
|
||||
|
||||
if (map.CanSpawnMobile(x, y, z))
|
||||
{
|
||||
p = new Point3D(x, y, z);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
BaseCreature spawn = new KrampusMinion();
|
||||
|
||||
if (spawn != null)
|
||||
{
|
||||
spawn.MoveToWorld(p, map);
|
||||
spawn.Home = p;
|
||||
spawn.RangeHome = 5;
|
||||
spawn.Team = this.Team;
|
||||
spawn.SummonMaster = this;
|
||||
|
||||
if (!initial)
|
||||
{
|
||||
if (spawn.Combatant != null)
|
||||
{
|
||||
if (!(spawn.Combatant is PlayerMobile) || !((PlayerMobile)spawn.Combatant).HonorActive)
|
||||
spawn.Combatant = com;
|
||||
}
|
||||
else
|
||||
{
|
||||
spawn.Combatant = com;
|
||||
}
|
||||
}
|
||||
|
||||
AddHelper(spawn, initial);
|
||||
}
|
||||
}
|
||||
|
||||
if (initial)
|
||||
{
|
||||
Blessed = true;
|
||||
}
|
||||
}, target);
|
||||
|
||||
_NextSpecial = DateTime.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(20, 40));
|
||||
}
|
||||
|
||||
protected virtual void AddHelper(BaseCreature bc, bool initial)
|
||||
{
|
||||
if (initial)
|
||||
{
|
||||
if (InitialSpawn == null)
|
||||
InitialSpawn = new List<BaseCreature>();
|
||||
|
||||
if (!InitialSpawn.Contains(bc))
|
||||
InitialSpawn.Add(bc);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (SummonedHelpers == null)
|
||||
SummonedHelpers = new List<BaseCreature>();
|
||||
|
||||
if (!SummonedHelpers.Contains(bc))
|
||||
SummonedHelpers.Add(bc);
|
||||
}
|
||||
}
|
||||
|
||||
private Mobile _LastTeleported;
|
||||
|
||||
public override void OnAfterTeleport(Mobile m)
|
||||
{
|
||||
m.SendLocalizedMessage(1072195); // Without warning, you are magically transported closer to your enemy!
|
||||
}
|
||||
|
||||
public override void OnGaveMeleeAttack(Mobile defender)
|
||||
{
|
||||
base.OnGaveMeleeAttack(defender);
|
||||
|
||||
if (defender == _LastTeleported)
|
||||
{
|
||||
BoneBreakerContext.CheckHit(this, defender);
|
||||
}
|
||||
|
||||
_LastTeleported = null;
|
||||
}
|
||||
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 1589;
|
||||
}
|
||||
|
||||
public override int GetAngerSound()
|
||||
{
|
||||
return 1586;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 1588;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 1587;
|
||||
}
|
||||
|
||||
public Krampus(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.SuperBoss, 5);
|
||||
}
|
||||
|
||||
public override void OnThink()
|
||||
{
|
||||
base.OnThink();
|
||||
|
||||
if (Blessed)
|
||||
{
|
||||
if (InitialSpawn != null)
|
||||
{
|
||||
if (InitialSpawn.All(s => s.Deleted))
|
||||
{
|
||||
ColUtility.Free(InitialSpawn);
|
||||
InitialSpawn = null;
|
||||
|
||||
Blessed = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Blessed = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (Combatant == null)
|
||||
{
|
||||
if (SpawnLocation != Point3D.Zero &&
|
||||
_LastActivity > DateTime.MinValue &&
|
||||
_LastActivity + TimeSpan.FromHours(2) < DateTime.UtcNow)
|
||||
{
|
||||
Delete();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
_LastActivity = DateTime.UtcNow;
|
||||
|
||||
if (_NextSpecial < DateTime.UtcNow && 0.25 > Utility.RandomDouble())
|
||||
{
|
||||
if (Utility.RandomBool())
|
||||
{
|
||||
var target = GetTeleportTarget();
|
||||
|
||||
if (target != null)
|
||||
{
|
||||
Summon(target);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int baseDamage = 100;
|
||||
bool switched = false;
|
||||
|
||||
PlaySound(0x20D);
|
||||
|
||||
foreach (var m in SpellHelper.AcquireIndirectTargets(this, Location, Map, 10).OfType<Mobile>())
|
||||
{
|
||||
var range = (int)GetDistanceToSqrt(m);
|
||||
|
||||
if (range < 1) range = 1;
|
||||
if (range > 4) range = 4;
|
||||
|
||||
m.PlaySound(0x20D);
|
||||
AOS.Damage(this, m, baseDamage / range, 0, 0, 0, 0, 0, 100, 0);
|
||||
|
||||
if (!switched && 0.2 > Utility.RandomDouble())
|
||||
{
|
||||
Combatant = m;
|
||||
switched = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_NextSpecial = DateTime.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(30, 60));
|
||||
}
|
||||
|
||||
if (Map != null && SpawnLocation != Point3D.Zero && !Utility.InRange(Location, SpawnLocation, 25))
|
||||
{
|
||||
MoveToWorld(SpawnLocation, Map);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDeath(Container c)
|
||||
{
|
||||
if (IsKrampusEncounter)
|
||||
{
|
||||
var rights = GetLootingRights();
|
||||
|
||||
foreach (var ds in rights.Where(s => s.m_Mobile is PlayerMobile && s.m_HasRight))
|
||||
{
|
||||
var m = ds.m_Mobile as PlayerMobile;
|
||||
int ordersComplete = 0;
|
||||
|
||||
if (KrampusEncounter.Encounter.CompleteTable.ContainsKey(m))
|
||||
{
|
||||
ordersComplete = KrampusEncounter.Encounter.CompleteTable[m];
|
||||
}
|
||||
|
||||
if (ordersComplete >= 3 || Utility.RandomMinMax(0, 8) <= ordersComplete)
|
||||
{
|
||||
Item item = null;
|
||||
|
||||
switch (Utility.Random(13))
|
||||
{
|
||||
case 0: item = new KrampusCoinPurse(m.Karma); break;
|
||||
case 1: item = new CardOfSemidar(Utility.RandomMinMax(0, 6)); break;
|
||||
case 2: item = new NiceTitleDeed(); break;
|
||||
case 3: item = new NaughtyTitleDeed(); break;
|
||||
case 4: item = new PunisherTitleDeed(); break;
|
||||
case 5: item = new RecipeScroll(586); break; // minion hat
|
||||
case 6: item = new RecipeScroll(587); break; // minion boots
|
||||
case 7: item = new KrampusCoinPurse(463); break; // minion talons
|
||||
case 8: item = new KrampusCoinPurse(588); break; // minion earrings
|
||||
case 9: item = new KrampusPunishinList(m.Name); break;
|
||||
case 10: item = new SpikedWhip(); break;
|
||||
case 11: item = new BarbedWhip(); break;
|
||||
case 12: item = new BladedWhip(); break;
|
||||
}
|
||||
|
||||
if (item != null)
|
||||
{
|
||||
m.SendLocalizedMessage(1156269); // For your valor in defeating your foe a specialty item has been awarded to you!
|
||||
|
||||
if (m.Backpack == null || !m.Backpack.TryDropItem(m, item, false))
|
||||
{
|
||||
m.BankBox.DropItem(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
base.OnDeath(c);
|
||||
}
|
||||
|
||||
public override void Delete()
|
||||
{
|
||||
base.Delete();
|
||||
|
||||
if (IsKrampusEncounter)
|
||||
{
|
||||
KrampusEncounter.Encounter.OnKrampusKilled();
|
||||
}
|
||||
|
||||
if (SummonedHelpers != null)
|
||||
{
|
||||
ColUtility.SafeDelete(SummonedHelpers);
|
||||
ColUtility.Free(SummonedHelpers);
|
||||
}
|
||||
|
||||
if (InitialSpawn != null)
|
||||
{
|
||||
ColUtility.SafeDelete(InitialSpawn);
|
||||
ColUtility.Free(InitialSpawn);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
|
||||
writer.Write(SpawnLocation);
|
||||
|
||||
writer.Write(SummonedHelpers == null ? 0 : SummonedHelpers.Count);
|
||||
|
||||
if (SummonedHelpers != null)
|
||||
SummonedHelpers.ForEach(m => writer.Write(m));
|
||||
|
||||
writer.Write(InitialSpawn == null ? 0 : InitialSpawn.Count);
|
||||
|
||||
if (InitialSpawn != null)
|
||||
InitialSpawn.ForEach(m => writer.Write(m));
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
SpawnLocation = reader.ReadPoint3D();
|
||||
|
||||
int count = reader.ReadInt();
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
BaseCreature summon = reader.ReadMobile() as BaseCreature;
|
||||
|
||||
if (summon != null)
|
||||
{
|
||||
if (SummonedHelpers == null)
|
||||
SummonedHelpers = new List<BaseCreature>();
|
||||
|
||||
SummonedHelpers.Add(summon);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
count = reader.ReadInt();
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
BaseCreature summon = reader.ReadMobile() as BaseCreature;
|
||||
|
||||
if (summon != null)
|
||||
{
|
||||
if (InitialSpawn == null)
|
||||
InitialSpawn = new List<BaseCreature>();
|
||||
|
||||
InitialSpawn.Add(summon);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_NextSpecial = DateTime.UtcNow;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
using System;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("a minion corpse")]
|
||||
public class KrampusMinion : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public KrampusMinion()
|
||||
: base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
|
||||
{
|
||||
Name = "Minion";
|
||||
Body = 1485;
|
||||
BaseSoundID = 422;
|
||||
|
||||
SetStr(476, 505);
|
||||
SetDex(76, 95);
|
||||
SetInt(301, 325);
|
||||
|
||||
SetHits(286, 303);
|
||||
|
||||
SetDamage(7, 14);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 50);
|
||||
SetDamageType(ResistanceType.Cold, 50);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 60, 70);
|
||||
SetResistance(ResistanceType.Fire, 40, 50);
|
||||
SetResistance(ResistanceType.Cold, 50, 60);
|
||||
SetResistance(ResistanceType.Poison, 40, 50);
|
||||
SetResistance(ResistanceType.Energy, 40, 50);
|
||||
|
||||
SetSkill(SkillName.Tactics, 110, 120);
|
||||
SetSkill(SkillName.Wrestling, 100, 110);
|
||||
SetSkill(SkillName.DetectHidden, 60.0, 70.0);
|
||||
SetSkill(SkillName.MagicResist, 120);
|
||||
SetSkill(SkillName.Parry, 60, 70);
|
||||
|
||||
Fame = 3000;
|
||||
Karma = -3000;
|
||||
}
|
||||
|
||||
public KrampusMinion(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Average);
|
||||
AddLoot(LootPack.LowScrolls);
|
||||
AddLoot(LootPack.Potions);
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
using System;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Engines.Points;
|
||||
|
||||
namespace Server.Engines.RisingTide
|
||||
{
|
||||
public class BlackMarketMerchant : BaseTurnInMobile
|
||||
{
|
||||
public static BlackMarketMerchant InstanceTram { get; set; }
|
||||
public static BlackMarketMerchant InstanceFel { get; set; }
|
||||
public static Point3D SpawnLocation { get { return new Point3D(2719, 2187, 0); } }
|
||||
|
||||
public override int TitleLocalization { get { return 1158918; } } // Maritime Black Market
|
||||
public override int CancelLocalization { get { return 1158911; } } // Bring me maritime trade cargo and I will pay you in doubloons!
|
||||
public override int TurnInLocalization { get { return 1158912; } } // Sell Maritime Trade Cargo
|
||||
public override int ClaimLocalization { get { return 1158913; } } // Buy Pirate Loot
|
||||
|
||||
public override bool IsShrineHealer { get { return false; } }
|
||||
|
||||
[Constructable]
|
||||
public BlackMarketMerchant() : base("the Pirate")
|
||||
{
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
base.InitBody();
|
||||
|
||||
Name = NameList.RandomName("male");
|
||||
|
||||
SpeechHue = 0x3B2;
|
||||
Hue = Utility.RandomSkinHue();
|
||||
Body = 0x190;
|
||||
|
||||
PackItem(new QuartermasterRewardDeed());
|
||||
PackItem(new SailingMasterRewardDeed());
|
||||
PackItem(new BotswainRewardDeed());
|
||||
PackItem(new PowderMonkeyRewardDeed());
|
||||
PackItem(new SpikedWhipOfPlundering());
|
||||
PackItem(new BladedWhipOfPlundering());
|
||||
PackItem(new BarbedWhipOfPlundering());
|
||||
PackItem(new TritonStatue());
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
SetWearable(new ElvenPants(), 1307);
|
||||
SetWearable(new Shirt(), 1209);
|
||||
SetWearable(new JinBaori(), 2017);
|
||||
SetWearable(new Sandals(), 0);
|
||||
SetWearable(new Bandana(), 2051);
|
||||
SetWearable(new BarbedWhip(), 2721);
|
||||
SetWearable(new ShoulderParrot(), 18);
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
list.Add(1158914); // Maritime Black Market Merchant
|
||||
}
|
||||
|
||||
public override void AwardPoints(PlayerMobile pm, Item item, int amount)
|
||||
{
|
||||
if (item is MaritimeCargo)
|
||||
{
|
||||
PointsSystem.RisingTide.AwardPoints(pm, ((MaritimeCargo)item).GetAwardAmount());
|
||||
}
|
||||
}
|
||||
|
||||
public override bool IsRedeemableItem(Item item)
|
||||
{
|
||||
return item is MaritimeCargo;
|
||||
}
|
||||
|
||||
public override void SendRewardGump(Mobile m)
|
||||
{
|
||||
if (m.Player && m.CheckAlive())
|
||||
m.SendGump(new RisingTideRewardGump(this, m as PlayerMobile));
|
||||
}
|
||||
|
||||
public override void Delete()
|
||||
{
|
||||
base.Delete();
|
||||
|
||||
if (InstanceTram == this)
|
||||
{
|
||||
InstanceTram = null;
|
||||
}
|
||||
else if (InstanceFel == this)
|
||||
{
|
||||
InstanceFel = null;
|
||||
}
|
||||
}
|
||||
|
||||
public BlackMarketMerchant(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
else if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
118
Scripts/Services/Seasonal Events/RisingTide/Generation.cs
Normal file
118
Scripts/Services/Seasonal Events/RisingTide/Generation.cs
Normal file
@@ -0,0 +1,118 @@
|
||||
using System;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
using Server.Engines.Points;
|
||||
|
||||
namespace Server.Engines.RisingTide
|
||||
{
|
||||
public static class RisingTideGeneration
|
||||
{
|
||||
public static void Initialize()
|
||||
{
|
||||
EventSink.WorldSave += OnWorldSave;
|
||||
|
||||
if (BlackMarketMerchant.InstanceTram != null)
|
||||
{
|
||||
BlackMarketMerchant.InstanceTram.MoveToWorld(BlackMarketMerchant.SpawnLocation, Map.Trammel);
|
||||
}
|
||||
|
||||
if (BlackMarketMerchant.InstanceFel != null)
|
||||
{
|
||||
BlackMarketMerchant.InstanceFel.MoveToWorld(BlackMarketMerchant.SpawnLocation, Map.Felucca);
|
||||
}
|
||||
|
||||
if (PointsSystem.RisingTide.Enabled && PlunderBeaconSpawner.Spawner == null)
|
||||
{
|
||||
new PlunderBeaconSpawner();
|
||||
}
|
||||
}
|
||||
|
||||
private static void OnWorldSave(WorldSaveEventArgs e)
|
||||
{
|
||||
CheckEnabled(true);
|
||||
}
|
||||
|
||||
public static void CheckEnabled(bool timed = false)
|
||||
{
|
||||
var risingTide = PointsSystem.RisingTide;
|
||||
|
||||
if (risingTide.Enabled && !risingTide.InSeason)
|
||||
{
|
||||
if (timed)
|
||||
{
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(30), () =>
|
||||
{
|
||||
Utility.WriteConsoleColor(ConsoleColor.Green, "Auto Disabling Rising Tide");
|
||||
|
||||
Remove();
|
||||
risingTide.Enabled = false;
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
Utility.WriteConsoleColor(ConsoleColor.Green, "Auto Disabling Rising Tide");
|
||||
|
||||
Remove();
|
||||
risingTide.Enabled = false;
|
||||
}
|
||||
}
|
||||
else if (!risingTide.Enabled && risingTide.InSeason)
|
||||
{
|
||||
if (timed)
|
||||
{
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(30), () =>
|
||||
{
|
||||
Utility.WriteConsoleColor(ConsoleColor.Green, "Enabling Rising Tide");
|
||||
|
||||
Generate();
|
||||
risingTide.Enabled = true;
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
Utility.WriteConsoleColor(ConsoleColor.Green, "Enabling Rising Tide");
|
||||
|
||||
Generate();
|
||||
risingTide.Enabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void Generate()
|
||||
{
|
||||
if (BlackMarketMerchant.InstanceTram == null)
|
||||
{
|
||||
BlackMarketMerchant.InstanceTram = new BlackMarketMerchant();
|
||||
BlackMarketMerchant.InstanceTram.MoveToWorld(BlackMarketMerchant.SpawnLocation, Map.Trammel);
|
||||
|
||||
BlackMarketMerchant.InstanceTram.Home = BlackMarketMerchant.SpawnLocation;
|
||||
BlackMarketMerchant.InstanceTram.RangeHome = 2;
|
||||
}
|
||||
|
||||
if (BlackMarketMerchant.InstanceFel == null)
|
||||
{
|
||||
BlackMarketMerchant.InstanceFel = new BlackMarketMerchant();
|
||||
BlackMarketMerchant.InstanceFel.MoveToWorld(BlackMarketMerchant.SpawnLocation, Map.Felucca);
|
||||
|
||||
BlackMarketMerchant.InstanceFel.Home = BlackMarketMerchant.SpawnLocation;
|
||||
BlackMarketMerchant.InstanceFel.RangeHome = 2;
|
||||
}
|
||||
|
||||
if (PlunderBeaconSpawner.Spawner == null)
|
||||
{
|
||||
new PlunderBeaconSpawner();
|
||||
}
|
||||
}
|
||||
|
||||
public static void Remove()
|
||||
{
|
||||
if (PlunderBeaconSpawner.Spawner != null)
|
||||
{
|
||||
PlunderBeaconSpawner.Spawner.SystemDeactivate();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
534
Scripts/Services/Seasonal Events/RisingTide/MannedCannon.cs
Normal file
534
Scripts/Services/Seasonal Events/RisingTide/MannedCannon.cs
Normal file
@@ -0,0 +1,534 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
using Server;
|
||||
using Server.Mobiles;
|
||||
using Server.Multis;
|
||||
using Server.Spells;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public abstract class MannedCannon : Item
|
||||
{
|
||||
public virtual TimeSpan ScanDelay { get { return TimeSpan.FromSeconds(Utility.RandomMinMax(5, 10)); } }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public Mobile Operator { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public Direction Facing { get { return GetFacing(); } }
|
||||
|
||||
public DateTime NextScan { get; set; }
|
||||
public bool CanFireUnmanned { get; set; }
|
||||
|
||||
public abstract CannonPower Power { get; }
|
||||
public abstract int Range { get; }
|
||||
|
||||
public virtual AmmunitionType AmmoType { get { return AmmunitionType.Cannonball; } }
|
||||
public virtual int LateralOffset { get { return 1; } }
|
||||
|
||||
public MannedCannon(Mobile opera, Direction facing)
|
||||
: base(0)
|
||||
{
|
||||
ItemID = GetID(facing, Power);
|
||||
Operator = opera;
|
||||
|
||||
Movable = false;
|
||||
}
|
||||
|
||||
private static int GetID(Direction facing, CannonPower power)
|
||||
{
|
||||
switch (facing)
|
||||
{
|
||||
default:
|
||||
case Direction.South:
|
||||
return BaseGalleon.CannonIDs[0][(int)power];
|
||||
case Direction.West:
|
||||
return BaseGalleon.CannonIDs[1][(int)power];
|
||||
case Direction.North:
|
||||
return BaseGalleon.CannonIDs[2][(int)power];
|
||||
case Direction.East:
|
||||
return BaseGalleon.CannonIDs[3][(int)power];
|
||||
}
|
||||
}
|
||||
|
||||
public Direction GetFacing()
|
||||
{
|
||||
if (BaseGalleon.CannonIDs[0].Any(id => id == ItemID))
|
||||
{
|
||||
return Direction.South;
|
||||
}
|
||||
if (BaseGalleon.CannonIDs[1].Any(id => id == ItemID))
|
||||
{
|
||||
return Direction.West;
|
||||
}
|
||||
if (BaseGalleon.CannonIDs[2].Any(id => id == ItemID))
|
||||
{
|
||||
return Direction.North;
|
||||
}
|
||||
|
||||
return Direction.East;
|
||||
}
|
||||
|
||||
public bool Scan(bool shoot)
|
||||
{
|
||||
var targets = AcquireTarget();
|
||||
bool acquiredTarget = false;
|
||||
|
||||
if (targets != null && targets.Length > 0)
|
||||
{
|
||||
foreach (var t in targets)
|
||||
{
|
||||
if (t.Entity is BaseGalleon && AmmoType != AmmunitionType.Grapeshot)
|
||||
{
|
||||
if (shoot)
|
||||
{
|
||||
DoShootEffects();
|
||||
TimeSpan delay = TimeSpan.FromSeconds((double)t.Range / 10.0);
|
||||
|
||||
Timer.DelayCall(delay, new TimerStateCallback(OnShipHit), new object[] { (BaseGalleon)t.Entity, t.Location, AmmoType });
|
||||
}
|
||||
|
||||
acquiredTarget = true;
|
||||
}
|
||||
else if (t.Entity is Mobile && AmmoType == AmmunitionType.Grapeshot)
|
||||
{
|
||||
var m = t.Entity as Mobile;
|
||||
|
||||
if (shoot)
|
||||
{
|
||||
DoShootEffects();
|
||||
TimeSpan delay = TimeSpan.FromSeconds((double)t.Range / 10.0);
|
||||
|
||||
Timer.DelayCall(delay, new TimerStateCallback(OnMobileHit), new object[] { m, t.Location, AmmoType });
|
||||
}
|
||||
|
||||
acquiredTarget = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return acquiredTarget;
|
||||
}
|
||||
|
||||
public Target[] AcquireTarget()
|
||||
{
|
||||
AmmoInfo ammo = AmmoInfo.GetAmmoInfo(AmmoType);
|
||||
|
||||
int xOffset = 0; int yOffset = 0;
|
||||
int currentRange = 0;
|
||||
Point3D pnt = Location;
|
||||
Map map = Map;
|
||||
|
||||
switch (GetFacing())
|
||||
{
|
||||
case Direction.North:
|
||||
xOffset = 0; yOffset = -1; break;
|
||||
case Direction.South:
|
||||
xOffset = 0; yOffset = 1; break;
|
||||
case Direction.West:
|
||||
xOffset = -1; yOffset = 0; break;
|
||||
case Direction.East:
|
||||
xOffset = 1; yOffset = 0; break;
|
||||
}
|
||||
|
||||
int xo = xOffset;
|
||||
int yo = yOffset;
|
||||
int lateralOffset = 1;
|
||||
|
||||
while (currentRange++ <= Range)
|
||||
{
|
||||
xOffset = xo;
|
||||
yOffset = yo;
|
||||
|
||||
if (LateralOffset > 1 && currentRange % LateralOffset == 0)
|
||||
lateralOffset++;
|
||||
|
||||
TimeSpan delay = TimeSpan.FromSeconds((double)currentRange / 10.0);
|
||||
|
||||
switch (AmmoType)
|
||||
{
|
||||
case AmmunitionType.Empty: break;
|
||||
case AmmunitionType.Cannonball:
|
||||
case AmmunitionType.FrostCannonball:
|
||||
case AmmunitionType.FlameCannonball:
|
||||
{
|
||||
Point3D newPoint = pnt;
|
||||
//List<IEntity> list = new List<IEntity>();
|
||||
|
||||
for (int i = -lateralOffset; i <= lateralOffset; i++)
|
||||
{
|
||||
if (xOffset == 0)
|
||||
newPoint = new Point3D(pnt.X + (xOffset + i), pnt.Y + (yOffset * currentRange), pnt.Z);
|
||||
else
|
||||
newPoint = new Point3D(pnt.X + (xOffset * currentRange), pnt.Y + (yOffset + i), pnt.Z);
|
||||
|
||||
BaseGalleon g = FindValidBoatTarget(newPoint, map, ammo);
|
||||
|
||||
if (g != null && g.DamageTaken < DamageLevel.Severely && g.Owner is PlayerMobile)
|
||||
{
|
||||
var target = new Target();
|
||||
target.Entity = g;
|
||||
target.Location = newPoint;
|
||||
target.Range = currentRange;
|
||||
|
||||
return new Target[] { target };
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case AmmunitionType.Grapeshot:
|
||||
{
|
||||
Point3D newPoint = pnt;
|
||||
List<Target> mobiles = new List<Target>();
|
||||
|
||||
for (int i = -lateralOffset; i <= lateralOffset; i++)
|
||||
{
|
||||
if (xOffset == 0)
|
||||
newPoint = new Point3D(pnt.X + (xOffset + i), pnt.Y + (yOffset * currentRange), pnt.Z);
|
||||
else
|
||||
newPoint = new Point3D(pnt.X + (xOffset * currentRange), pnt.Y + (yOffset + i), pnt.Z);
|
||||
|
||||
foreach (Mobile m in GetTargets(newPoint, map))
|
||||
{
|
||||
var target = new Target();
|
||||
target.Entity = m;
|
||||
target.Location = newPoint;
|
||||
target.Range = currentRange;
|
||||
|
||||
mobiles.Add(target);
|
||||
}
|
||||
|
||||
if (mobiles.Count > 0 && ammo.SingleTarget)
|
||||
{
|
||||
var toHit = mobiles[Utility.Random(mobiles.Count)];
|
||||
ColUtility.Free(mobiles);
|
||||
return new Target[] { toHit };
|
||||
}
|
||||
}
|
||||
|
||||
if (mobiles.Count > 0)
|
||||
{
|
||||
return mobiles.ToArray();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private IEnumerable<Mobile> GetTargets(Point3D newPoint, Map map)
|
||||
{
|
||||
if (Operator != null)
|
||||
{
|
||||
foreach (Mobile m in SpellHelper.AcquireIndirectTargets(Operator, newPoint, map, 0).OfType<Mobile>())
|
||||
{
|
||||
yield return m;
|
||||
}
|
||||
|
||||
yield break;
|
||||
}
|
||||
|
||||
IPooledEnumerable eable = map.GetMobilesInRange(newPoint, 0);
|
||||
|
||||
foreach (Mobile m in eable)
|
||||
{
|
||||
if (m is PlayerMobile || (m is BaseCreature && ((BaseCreature)m).GetMaster() is PlayerMobile))
|
||||
{
|
||||
yield return m;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public struct Target
|
||||
{
|
||||
public IEntity Entity { get; set; }
|
||||
public Point3D Location { get; set; }
|
||||
public int Range { get; set; }
|
||||
}
|
||||
|
||||
private BaseGalleon FindValidBoatTarget(Point3D newPoint, Map map, AmmoInfo info)
|
||||
{
|
||||
BaseGalleon galleon = BaseGalleon.FindGalleonAt(newPoint, map);
|
||||
|
||||
if (galleon != null && info.RequiresSurface)
|
||||
{
|
||||
int d = galleon is BritannianShip ? 3 : 2;
|
||||
switch (galleon.Facing)
|
||||
{
|
||||
case Direction.North:
|
||||
case Direction.South:
|
||||
if (newPoint.X <= galleon.X - d || newPoint.X >= galleon.X + d)
|
||||
return null;
|
||||
break;
|
||||
case Direction.East:
|
||||
case Direction.West:
|
||||
if (newPoint.Y <= galleon.Y - d || newPoint.Y >= galleon.Y + d)
|
||||
return null;
|
||||
break;
|
||||
}
|
||||
|
||||
StaticTile[] tiles = map.Tiles.GetStaticTiles(newPoint.X, newPoint.Y, true);
|
||||
|
||||
foreach (StaticTile tile in tiles)
|
||||
{
|
||||
ItemData id = TileData.ItemTable[tile.ID & TileData.MaxItemValue];
|
||||
bool isWater = (tile.ID >= 0x1796 && tile.ID <= 0x17B2);
|
||||
|
||||
if (!isWater && id.Surface && !id.Impassable)
|
||||
{
|
||||
return galleon;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
return galleon;
|
||||
}
|
||||
|
||||
public virtual void OnShipHit(object obj)
|
||||
{
|
||||
object[] list = (object[])obj;
|
||||
BaseBoat target = list[0] as BaseBoat;
|
||||
Point3D pnt = (Point3D)list[1];
|
||||
|
||||
var ammoInfo = AmmoInfo.GetAmmoInfo((AmmunitionType)list[2]);
|
||||
|
||||
if (ammoInfo != null && target != null)
|
||||
{
|
||||
int damage = (Utility.RandomMinMax(ammoInfo.MinDamage, ammoInfo.MaxDamage));
|
||||
damage /= 7;
|
||||
target.OnTakenDamage(Operator, damage);
|
||||
|
||||
int z = target.ZSurface;
|
||||
|
||||
if (target.TillerMan != null && target.TillerMan is IEntity)
|
||||
{
|
||||
z = ((IEntity)target.TillerMan).Z;
|
||||
}
|
||||
|
||||
Direction d = Utility.GetDirection(this, pnt);
|
||||
int xOffset = 0;
|
||||
int yOffset = 0;
|
||||
Point3D hit = pnt;
|
||||
|
||||
if (!ammoInfo.RequiresSurface)
|
||||
{
|
||||
switch (d)
|
||||
{
|
||||
default:
|
||||
case Direction.North:
|
||||
xOffset = Utility.RandomMinMax(-1, 1);
|
||||
yOffset = Utility.RandomMinMax(-2, 0);
|
||||
hit = new Point3D(pnt.X + xOffset, pnt.Y + yOffset, z);
|
||||
break;
|
||||
case Direction.South:
|
||||
xOffset = Utility.RandomMinMax(-1, 1);
|
||||
yOffset = Utility.RandomMinMax(0, 2);
|
||||
hit = new Point3D(pnt.X + xOffset, pnt.Y + yOffset, z);
|
||||
break;
|
||||
case Direction.East:
|
||||
xOffset = Utility.RandomMinMax(0, 2);
|
||||
yOffset = Utility.RandomMinMax(-1, 1);
|
||||
hit = new Point3D(pnt.X + xOffset, pnt.Y + yOffset, z);
|
||||
break;
|
||||
case Direction.West:
|
||||
xOffset = Utility.RandomMinMax(-2, 0);
|
||||
yOffset = Utility.RandomMinMax(-1, 1);
|
||||
hit = new Point3D(pnt.X + xOffset, pnt.Y + yOffset, z);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Effects.SendLocationEffect(hit, target.Map, Utility.RandomBool() ? 14000 : 14013, 15, 10);
|
||||
Effects.PlaySound(hit, target.Map, 0x207);
|
||||
|
||||
if (Operator != null && (!Operator.Deleted || CanFireUnmanned))
|
||||
{
|
||||
Mobile victim = target.Owner;
|
||||
|
||||
if (victim != null && target.Contains(victim) && Operator.CanBeHarmful(victim, false))
|
||||
{
|
||||
Operator.DoHarmful(victim);
|
||||
}
|
||||
else
|
||||
{
|
||||
List<Mobile> candidates = new List<Mobile>();
|
||||
SecurityLevel highest = SecurityLevel.Passenger;
|
||||
|
||||
foreach (var mob in target.GetMobilesOnBoard().OfType<PlayerMobile>().Where(pm => Operator.CanBeHarmful(pm, false)))
|
||||
{
|
||||
if (target is BaseGalleon && ((BaseGalleon)target).GetSecurityLevel(mob) > highest)
|
||||
{
|
||||
candidates.Insert(0, mob);
|
||||
}
|
||||
else
|
||||
{
|
||||
candidates.Add(mob);
|
||||
}
|
||||
}
|
||||
|
||||
if (candidates.Count > 0)
|
||||
{
|
||||
Operator.DoHarmful(candidates[0]);
|
||||
}
|
||||
else if (victim != null && Operator.IsHarmfulCriminal(victim))
|
||||
{
|
||||
Operator.CriminalAction(false);
|
||||
}
|
||||
|
||||
ColUtility.Free(candidates);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void OnMobileHit(object obj)
|
||||
{
|
||||
object[] objects = (object[])obj;
|
||||
Mobile toHit = objects[0] as Mobile;
|
||||
Point3D pnt = (Point3D)objects[1];
|
||||
|
||||
AmmoInfo ammoInfo = AmmoInfo.GetAmmoInfo((AmmunitionType)objects[2]);
|
||||
|
||||
if (ammoInfo != null)
|
||||
{
|
||||
int damage = (int)(Utility.RandomMinMax(ammoInfo.MinDamage, ammoInfo.MaxDamage));
|
||||
|
||||
if (Operator != null)
|
||||
{
|
||||
Operator.DoHarmful(toHit);
|
||||
}
|
||||
|
||||
AOS.Damage(toHit, Operator, damage, ammoInfo.PhysicalDamage, ammoInfo.FireDamage, ammoInfo.ColdDamage, ammoInfo.PoisonDamage, ammoInfo.EnergyDamage);
|
||||
Effects.SendLocationEffect(toHit.Location, toHit.Map, Utility.RandomBool() ? 14000 : 14013, 15, 10);
|
||||
Effects.PlaySound(toHit.Location, toHit.Map, 0x207);
|
||||
}
|
||||
}
|
||||
|
||||
public void DoShootEffects()
|
||||
{
|
||||
Point3D p = Location;
|
||||
Map map = Map;
|
||||
|
||||
p.Z -= 3;
|
||||
|
||||
switch (Facing)
|
||||
{
|
||||
case Direction.North: p.Y--; break;
|
||||
case Direction.East: p.X++; break;
|
||||
case Direction.South: p.Y++; break;
|
||||
case Direction.West: p.X--; break;
|
||||
}
|
||||
|
||||
Effects.SendLocationEffect(p, map, 14120, 15, 10);
|
||||
Effects.PlaySound(p, map, 0x664);
|
||||
}
|
||||
|
||||
public MannedCannon(Serial serial) : base(serial) { }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)1);
|
||||
|
||||
writer.Write(Operator);
|
||||
writer.Write(CanFireUnmanned);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 1:
|
||||
Operator = reader.ReadMobile();
|
||||
CanFireUnmanned = reader.ReadBool();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class MannedCulverin : MannedCannon
|
||||
{
|
||||
public override int Range { get { return 10; } }
|
||||
public override CannonPower Power { get { return CannonPower.Light; } }
|
||||
|
||||
public MannedCulverin(Mobile oper, Direction facing)
|
||||
: base(oper, facing)
|
||||
{
|
||||
}
|
||||
|
||||
public MannedCulverin(Serial serial) : base(serial) { }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class MannedCarronade : MannedCannon
|
||||
{
|
||||
public override int Range { get { return 10; } }
|
||||
public override CannonPower Power { get { return CannonPower.Heavy; } }
|
||||
|
||||
public MannedCarronade(Mobile oper, Direction facing)
|
||||
: base(oper, facing)
|
||||
{
|
||||
}
|
||||
|
||||
public MannedCarronade(Serial serial) : base(serial) { }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class MannedBlundercannon : MannedCannon
|
||||
{
|
||||
public override int LabelNumber { get { return 1158942; } } // Blundercannon
|
||||
|
||||
public override int Range { get { return 12; } }
|
||||
public override CannonPower Power { get { return CannonPower.Massive; } }
|
||||
|
||||
public MannedBlundercannon(Mobile oper, Direction facing)
|
||||
: base(oper, facing)
|
||||
{
|
||||
}
|
||||
|
||||
public MannedBlundercannon(Serial serial) : base(serial) { }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
204
Scripts/Services/Seasonal Events/RisingTide/MaritimeCargo.cs
Normal file
204
Scripts/Services/Seasonal Events/RisingTide/MaritimeCargo.cs
Normal file
@@ -0,0 +1,204 @@
|
||||
using System;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Engines.CityLoyalty;
|
||||
using Server.Engines.RisingTide;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public enum CargoQuality
|
||||
{
|
||||
Grandmaster,
|
||||
Exalted,
|
||||
Legendary,
|
||||
Mythical
|
||||
}
|
||||
|
||||
public enum CargoType
|
||||
{
|
||||
Cloth = 1257,
|
||||
Jewelry = 353,
|
||||
Wood = 1155,
|
||||
Metal = 1175,
|
||||
Munitions = 1157,
|
||||
Granite = 2498,
|
||||
Reagents = 1156,
|
||||
Glassware = 1158,
|
||||
}
|
||||
|
||||
// 1158907 You recover maritime trade cargo!
|
||||
|
||||
[Flipable(0xA2C4, 0xA2C5)]
|
||||
public class MaritimeCargo : Item
|
||||
{
|
||||
private CargoQuality _CargoQuality;
|
||||
private CargoType _CargoType;
|
||||
private City _City;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public CargoQuality CargoQuality
|
||||
{
|
||||
get { return _CargoQuality; }
|
||||
set
|
||||
{
|
||||
_CargoQuality = value;
|
||||
|
||||
if (_CargoQuality == CargoQuality.Mythical)
|
||||
{
|
||||
Hue = 1177;
|
||||
}
|
||||
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public CargoType CargoType
|
||||
{
|
||||
get { return _CargoType; }
|
||||
set
|
||||
{
|
||||
_CargoType = value;
|
||||
|
||||
if (_CargoQuality != CargoQuality.Mythical && Hue != (int)_CargoType)
|
||||
{
|
||||
Hue = (int)_CargoType;
|
||||
}
|
||||
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public City City { get { return _City; } set { _City = value; InvalidateProperties(); } }
|
||||
|
||||
[Constructable]
|
||||
public MaritimeCargo()
|
||||
: this(RandomQuality(), RandomCity(), RandomType())
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public MaritimeCargo(CargoQuality quality)
|
||||
: this(quality, RandomCity(), RandomType())
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public MaritimeCargo(CargoQuality quality, City city, CargoType type)
|
||||
: base(0xA2C4)
|
||||
{
|
||||
CargoQuality = quality;
|
||||
City = city;
|
||||
CargoType = type;
|
||||
}
|
||||
|
||||
private static CargoQuality RandomQuality()
|
||||
{
|
||||
var random = Utility.RandomDouble();
|
||||
|
||||
if (random < 0.05)
|
||||
{
|
||||
return CargoQuality.Legendary;
|
||||
}
|
||||
|
||||
if (random < 0.33)
|
||||
{
|
||||
return CargoQuality.Exalted;
|
||||
}
|
||||
|
||||
return CargoQuality.Grandmaster;
|
||||
}
|
||||
|
||||
private static City RandomCity()
|
||||
{
|
||||
return (City)Utility.Random(9);
|
||||
}
|
||||
|
||||
private static CargoType RandomType()
|
||||
{
|
||||
switch (Utility.Random(8))
|
||||
{
|
||||
default:
|
||||
case 0: return CargoType.Cloth;
|
||||
case 1: return CargoType.Jewelry;
|
||||
case 2: return CargoType.Wood;
|
||||
case 3: return CargoType.Metal;
|
||||
case 4: return CargoType.Munitions;
|
||||
case 5: return CargoType.Granite;
|
||||
case 6: return CargoType.Reagents;
|
||||
case 7: return CargoType.Glassware;
|
||||
}
|
||||
}
|
||||
|
||||
public int GetAwardAmount()
|
||||
{
|
||||
int amount;
|
||||
|
||||
switch (_CargoQuality)
|
||||
{
|
||||
default:
|
||||
case CargoQuality.Grandmaster: amount = Utility.RandomMinMax(100, 200); break;
|
||||
case CargoQuality.Exalted: amount = Utility.RandomMinMax(500, 600); break;
|
||||
case CargoQuality.Legendary: amount = Utility.RandomMinMax(1000, 1100); break;
|
||||
case CargoQuality.Mythical: amount = Utility.RandomMinMax(10000, 15000); break;
|
||||
}
|
||||
|
||||
return amount;
|
||||
}
|
||||
|
||||
public override void AddNameProperty(ObjectPropertyList list)
|
||||
{
|
||||
list.Add(1158906, String.Format("#{0}", CityLoyaltySystem.GetCityLocalization(_City).ToString())); // Maritime Trade Cargo Destined for ~1_CITY~
|
||||
}
|
||||
|
||||
public override void AddWeightProperty(ObjectPropertyList list)
|
||||
{
|
||||
base.AddWeightProperty(list);
|
||||
|
||||
list.Add(_CargoQuality < CargoQuality.Mythical ? 1158903 + (int)_CargoQuality : 1158969, String.Format("#{0}", TypeLabel(_CargoType)));
|
||||
}
|
||||
|
||||
public static int TypeLabel(CargoType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
default:
|
||||
case CargoType.Cloth: return 1044286;
|
||||
case CargoType.Jewelry: return 1011172;
|
||||
case CargoType.Wood: return 1079435;
|
||||
case CargoType.Metal: return 1049567;
|
||||
case CargoType.Munitions: return 1158902;
|
||||
case CargoType.Granite: return 1158900;
|
||||
case CargoType.Reagents: return 1002127;
|
||||
case CargoType.Glassware: return 1158901;
|
||||
}
|
||||
}
|
||||
|
||||
public MaritimeCargo(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write((int)_CargoQuality);
|
||||
writer.Write((int)_CargoType);
|
||||
writer.Write((int)_City);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
_CargoQuality = (CargoQuality)reader.ReadInt();
|
||||
_CargoType = (CargoType)reader.ReadInt();
|
||||
_City = (City)reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
124
Scripts/Services/Seasonal Events/RisingTide/PlunderBeacon.cs
Normal file
124
Scripts/Services/Seasonal Events/RisingTide/PlunderBeacon.cs
Normal file
@@ -0,0 +1,124 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class PlunderBeacon : Beacon
|
||||
{
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public PlunderBeaconAddon Controller { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public Mobile LastDamager { get; set; }
|
||||
|
||||
public override bool CanDamage { get { return Controller == null || Controller.BeaconVulnerable; } }
|
||||
|
||||
public PlunderBeacon(PlunderBeaconAddon controller)
|
||||
{
|
||||
Controller = controller;
|
||||
Name = "a plunderbeacon";
|
||||
|
||||
ResistBasePhys = 0;
|
||||
ResistBaseFire = 0;
|
||||
ResistBaseCold = 0;
|
||||
ResistBasePoison = 0;
|
||||
ResistBaseEnergy = 0;
|
||||
|
||||
HitsMax = 70000;
|
||||
Hits = HitsMax;
|
||||
}
|
||||
|
||||
public override void OnHalfDamage()
|
||||
{
|
||||
/*IPooledEnumerable eable = this.Map.GetMobilesInRange(this.Location, 20);
|
||||
|
||||
foreach (Mobile m in eable)
|
||||
{
|
||||
if (m.NetState != null)
|
||||
m.PrivateOverheadMessage(Server.Network.MessageType.Regular, 1154, 1154551, m.NetState); // *Minax's Beacon surges with energy into an invulnerable state! Defeat her Captains to weaken the Beacon's defenses!*
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
|
||||
if (Controller != null)
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(1), () => Controller.SpawnWave());*/
|
||||
}
|
||||
|
||||
public override bool CheckAreaDamage(Mobile from, int amount)
|
||||
{
|
||||
if (amount >= 5000)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return base.CheckAreaDamage(from, amount);
|
||||
}
|
||||
|
||||
public override void OnDamage(int amount, Mobile from, bool willkill)
|
||||
{
|
||||
base.OnDamage(amount, from, willkill);
|
||||
|
||||
LastDamager = from;
|
||||
}
|
||||
|
||||
public override bool OnBeforeDestroyed()
|
||||
{
|
||||
if (DamageStore != null)
|
||||
{
|
||||
var eligables = DamageStore.Keys.Where(m => m.InRange(Location, 20)).ToList();
|
||||
|
||||
if (eligables.Count > 0 && 0.5 > Utility.RandomDouble())
|
||||
{
|
||||
var winner = eligables[Utility.Random(eligables.Count)];
|
||||
|
||||
if (winner != null)
|
||||
{
|
||||
winner.AddToBackpack(new MaritimeCargo(CargoQuality.Mythical));
|
||||
winner.SendLocalizedMessage(1158907); // You recover maritime trade cargo!
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Controller != null)
|
||||
Controller.OnBeaconDestroyed();
|
||||
|
||||
return base.OnBeforeDestroyed();
|
||||
}
|
||||
|
||||
public override void Delete()
|
||||
{
|
||||
base.Delete();
|
||||
|
||||
if (Controller != null && !Controller.Deleted)
|
||||
{
|
||||
Controller.Delete();
|
||||
}
|
||||
}
|
||||
|
||||
public PlunderBeacon(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
|
||||
writer.WriteItem<PlunderBeaconAddon>(Controller);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
reader.ReadInt();
|
||||
|
||||
Controller = reader.ReadItem<PlunderBeaconAddon>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,500 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class PlunderBeaconAddon : BaseAddon
|
||||
{
|
||||
public static readonly int MaxSpawn = 5;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public PlunderBeacon Beacon { get; set; }
|
||||
|
||||
public List<BaseCreature> Crew { get; set; }
|
||||
public Dictionary<BaseCreature, bool> Spawn { get; set; }
|
||||
public List<MannedCannon> Cannons { get; set; }
|
||||
|
||||
public bool CannonsOperational { get { return Crew.Any(c => c.Alive && !c.Deleted); } }
|
||||
public bool BeaconVulnerable { get { return !CannonsOperational; } }
|
||||
|
||||
public override BaseAddonDeed Deed { get { return null; } }
|
||||
|
||||
public Timer Timer { get; set; }
|
||||
public DateTime NextShoot { get; set; }
|
||||
public DateTime NextSpawn { get; set; }
|
||||
public bool InitialSpawn { get; set; }
|
||||
|
||||
[Constructable]
|
||||
public PlunderBeaconAddon()
|
||||
{
|
||||
for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++)
|
||||
AddComponent(new AddonComponent(m_AddOnSimpleComponents[i, 0]), m_AddOnSimpleComponents[i, 1], m_AddOnSimpleComponents[i, 2], m_AddOnSimpleComponents[i, 3]);
|
||||
|
||||
AddComplexComponent((BaseAddon)this, 2572, 0, 2, 37, 0, 5, "", 1);
|
||||
AddComplexComponent((BaseAddon)this, 2567, 2, 0, 37, 0, 5, "", 1);
|
||||
|
||||
Crew = new List<BaseCreature>();
|
||||
Spawn = new Dictionary<BaseCreature, bool>();
|
||||
Cannons = new List<MannedCannon>();
|
||||
|
||||
Beacon = new PlunderBeacon(this);
|
||||
Beacon.MoveToWorld(new Point3D(X + 1, Y + 1, Z + 14), Map);
|
||||
|
||||
AddCannon(Direction.South, CannonPower.Massive, -3, 5, 7);
|
||||
AddCannon(Direction.South, CannonPower.Massive, -1, 5, 7);
|
||||
AddCannon(Direction.South, CannonPower.Massive, 1, 5, 7);
|
||||
AddCannon(Direction.South, CannonPower.Massive, 3, 5, 7);
|
||||
|
||||
AddCannon(Direction.North, CannonPower.Massive, -3, -4, 7);
|
||||
AddCannon(Direction.North, CannonPower.Massive, -1, -4, 7);
|
||||
AddCannon(Direction.North, CannonPower.Massive, 1, -4, 7);
|
||||
AddCannon(Direction.North, CannonPower.Massive, 3, -4, 7);
|
||||
|
||||
AddCannon(Direction.West, CannonPower.Light, -2, -2, 12, false);
|
||||
AddCannon(Direction.West, CannonPower.Light, -2, 0, 12, false);
|
||||
AddCannon(Direction.West, CannonPower.Light, -2, 2, 12, false);
|
||||
|
||||
AddCannon(Direction.East, CannonPower.Light, 2, -2, 12, false);
|
||||
AddCannon(Direction.East, CannonPower.Light, 2, 0, 12, false);
|
||||
AddCannon(Direction.East, CannonPower.Light, 2, 2, 12, false);
|
||||
|
||||
Timer = Timer.DelayCall(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1), OnTick);
|
||||
}
|
||||
|
||||
private void AddCannon(Direction d, CannonPower type, int xOffset, int yOffset, int zOffset, bool oper = true)
|
||||
{
|
||||
MannedCannon cannon;
|
||||
BaseCreature mob = null;
|
||||
|
||||
if (oper)
|
||||
{
|
||||
mob = new PirateCrew();
|
||||
mob.CantWalk = true;
|
||||
|
||||
Crew.Add(mob);
|
||||
}
|
||||
|
||||
switch (type)
|
||||
{
|
||||
default:
|
||||
case CannonPower.Light:
|
||||
cannon = new MannedCulverin(mob, d); break;
|
||||
case CannonPower.Heavy:
|
||||
cannon = new MannedCarronade(mob, d); break;
|
||||
case CannonPower.Massive:
|
||||
cannon = new MannedBlundercannon(mob, d); break;
|
||||
}
|
||||
|
||||
if (mob == null)
|
||||
{
|
||||
cannon.CanFireUnmanned = true;
|
||||
}
|
||||
|
||||
cannon.MoveToWorld(new Point3D(X + xOffset, Y + yOffset, Z + zOffset), Map);
|
||||
Cannons.Add(cannon);
|
||||
|
||||
if (mob != null)
|
||||
{
|
||||
Point3D offset;
|
||||
|
||||
switch (d)
|
||||
{
|
||||
default:
|
||||
case Direction.South:
|
||||
offset = new Point3D(0, -1, 0); break;
|
||||
case Direction.North:
|
||||
offset = new Point3D(0, 1, 0); break;
|
||||
case Direction.West:
|
||||
offset = new Point3D(1, 0, 0); break;
|
||||
case Direction.East:
|
||||
offset = new Point3D(-1, 0, 0); break;
|
||||
}
|
||||
|
||||
mob.MoveToWorld(new Point3D(cannon.X + offset.X, cannon.Y + offset.Y, cannon.Z + offset.Z), Map);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnLocationChange(Point3D old)
|
||||
{
|
||||
base.OnLocationChange(old);
|
||||
|
||||
foreach (var c in Cannons)
|
||||
{
|
||||
c.Location = new Point3D(X + (c.X - old.X), Y + (c.Y - old.Y), Z + (c.Z - old.Z));
|
||||
}
|
||||
|
||||
foreach (var c in Crew)
|
||||
{
|
||||
c.Location = new Point3D(X + (c.X - old.X), Y + (c.Y - old.Y), Z + (c.Z - old.Z));
|
||||
}
|
||||
|
||||
foreach (var c in Spawn.Keys.Where(c => c != null && !c.Deleted))
|
||||
{
|
||||
c.Location = new Point3D(X + (c.X - old.X), Y + (c.Y - old.Y), Z + (c.Z - old.Z));
|
||||
}
|
||||
|
||||
if (Beacon != null)
|
||||
{
|
||||
Beacon.Location = new Point3D(X + (Beacon.X - old.X), Y + (Beacon.Y - old.Y), Z + (Beacon.Z - old.Z));
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnMapChange()
|
||||
{
|
||||
base.OnMapChange();
|
||||
|
||||
foreach (var c in Cannons)
|
||||
{
|
||||
c.Map = Map;
|
||||
}
|
||||
|
||||
foreach (var c in Crew.Where(c => c != null && !c.Deleted))
|
||||
{
|
||||
c.Map = Map;
|
||||
}
|
||||
|
||||
foreach (var c in Spawn.Keys.Where(c => c != null && !c.Deleted))
|
||||
{
|
||||
c.Map = Map;
|
||||
}
|
||||
|
||||
if (Beacon != null)
|
||||
{
|
||||
Beacon.Map = Map;
|
||||
}
|
||||
}
|
||||
|
||||
public void OnBeaconDestroyed()
|
||||
{
|
||||
if (Deleted)
|
||||
return;
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(3 + (i * 3)), stage =>
|
||||
{
|
||||
Z -= 1;
|
||||
|
||||
if (stage == 3)
|
||||
{
|
||||
Delete();
|
||||
}
|
||||
}, i);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnSectorActivate()
|
||||
{
|
||||
if (Timer == null)
|
||||
{
|
||||
Timer = Timer.DelayCall(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1), OnTick);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnSectorDeactivate()
|
||||
{
|
||||
if (Timer != null && SpawnCount() >= MaxSpawn)
|
||||
{
|
||||
Timer.Stop();
|
||||
Timer = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void OnTick()
|
||||
{
|
||||
var map = Map;
|
||||
|
||||
if (map == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else if (!InitialSpawn)
|
||||
{
|
||||
for (int i = 0; i < MaxSpawn; i++)
|
||||
{
|
||||
SpawnHelper(true);
|
||||
InitialSpawn = true;
|
||||
}
|
||||
}
|
||||
else if (CannonsOperational && NextShoot < DateTime.UtcNow)
|
||||
{
|
||||
foreach (var cannon in Cannons.Where(c => c != null && !c.Deleted && (c.CanFireUnmanned || (c.Operator != null && !c.Operator.Deleted && c.Operator.Alive))))
|
||||
{
|
||||
cannon.Scan(true);
|
||||
}
|
||||
|
||||
NextShoot = DateTime.UtcNow + TimeSpan.FromSeconds(2);
|
||||
}
|
||||
|
||||
if (NextSpawn < DateTime.UtcNow)
|
||||
{
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(1), () =>
|
||||
{
|
||||
if (SpawnCount() < MaxSpawn)
|
||||
{
|
||||
SpawnHelper(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void SpawnHelper(bool initial)
|
||||
{
|
||||
if (Map == null || Beacon == null)
|
||||
return;
|
||||
|
||||
Point3D p = Location;
|
||||
var map = Map;
|
||||
var range = 15;
|
||||
|
||||
if (Beacon.LastDamager != null && Beacon.LastDamager.InRange(Location, 20))
|
||||
{
|
||||
p = Beacon.LastDamager.Location;
|
||||
range = 8;
|
||||
}
|
||||
|
||||
BaseCreature creature = Activator.CreateInstance(_SpawnTypes[Utility.Random(_SpawnTypes.Length)]) as BaseCreature;
|
||||
|
||||
for (int i = 0; i < 50; i++)
|
||||
{
|
||||
var spawnLoc = new Point3D(Utility.RandomMinMax(p.X - range, p.X + range), Utility.RandomMinMax(p.Y - range, p.Y + range), -5);
|
||||
|
||||
if (map.CanFit(spawnLoc.X, spawnLoc.Y, spawnLoc.Z, 16, true, true, false, creature))
|
||||
{
|
||||
if (creature != null)
|
||||
{
|
||||
creature.MoveToWorld(spawnLoc, map);
|
||||
creature.Home = spawnLoc;
|
||||
creature.RangeHome = 10;
|
||||
|
||||
if (creature.IsSoulboundEnemies)
|
||||
creature.IsSoulbound = true;
|
||||
|
||||
Spawn.Add(creature, initial);
|
||||
|
||||
NextSpawn = DateTime.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(30, 60));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
creature.Delete();
|
||||
}
|
||||
|
||||
private int SpawnCount()
|
||||
{
|
||||
return Spawn.Keys.Where(s => s != null && !s.Deleted).Count();
|
||||
}
|
||||
|
||||
private Type[] _SpawnTypes =
|
||||
{
|
||||
typeof(WaterElemental),
|
||||
typeof(SeaSerpent),
|
||||
typeof(DeepSeaSerpent)
|
||||
};
|
||||
|
||||
public override void Delete()
|
||||
{
|
||||
base.Delete();
|
||||
|
||||
if (Beacon != null && !Beacon.Deleted)
|
||||
{
|
||||
Beacon.Delete();
|
||||
}
|
||||
|
||||
if (Timer != null)
|
||||
{
|
||||
Timer.Stop();
|
||||
Timer = null;
|
||||
}
|
||||
|
||||
foreach (var bc in Crew.Where(c => c != null && !c.Deleted))
|
||||
{
|
||||
bc.Kill();
|
||||
}
|
||||
|
||||
foreach (var bc in Spawn.Keys.Where(sp => sp != null && !sp.Deleted))
|
||||
{
|
||||
bc.Kill();
|
||||
}
|
||||
|
||||
foreach (var cannon in Cannons)
|
||||
{
|
||||
cannon.Delete();
|
||||
}
|
||||
|
||||
if (PlunderBeaconSpawner.Spawner != null)
|
||||
{
|
||||
PlunderBeaconSpawner.Spawner.RemovePlunderBeacon(this);
|
||||
}
|
||||
}
|
||||
|
||||
public bool Contains(IPoint3D p)
|
||||
{
|
||||
return p.X >= X - 8 && p.X <= X + 8 && p.Y >= Y - 8 && p.Y <= Y + 8;
|
||||
}
|
||||
|
||||
public PlunderBeaconAddon( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(1); // Version
|
||||
|
||||
writer.Write(InitialSpawn);
|
||||
|
||||
writer.WriteItem<PlunderBeacon>(Beacon);
|
||||
|
||||
writer.WriteItemList(Cannons, true);
|
||||
writer.WriteMobileList(Crew, true);
|
||||
//writer.WriteMobileList(Spawn, true);
|
||||
|
||||
writer.Write(Spawn.Count);
|
||||
|
||||
foreach (var kvp in Spawn)
|
||||
{
|
||||
writer.WriteMobile(kvp.Key);
|
||||
writer.Write(kvp.Value);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 1:
|
||||
InitialSpawn = reader.ReadBool();
|
||||
goto case 0;
|
||||
case 0:
|
||||
Beacon = reader.ReadItem<PlunderBeacon>();
|
||||
|
||||
Cannons = reader.ReadStrongItemList<MannedCannon>();
|
||||
Crew = reader.ReadStrongMobileList<BaseCreature>();
|
||||
Spawn = new Dictionary<BaseCreature, bool>();
|
||||
|
||||
if (version == 0)
|
||||
{
|
||||
//Spawn = reader.ReadStrongMobileList<BaseCreature>();
|
||||
List<BaseCreature> list = reader.ReadStrongMobileList<BaseCreature>();
|
||||
|
||||
foreach (var bc in list)
|
||||
{
|
||||
Spawn[bc] = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int count = reader.ReadInt();
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
var bc = reader.ReadMobile<BaseCreature>();
|
||||
var initial = reader.ReadBool();
|
||||
|
||||
if (bc != null)
|
||||
{
|
||||
Spawn[bc] = initial;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
Timer = Timer.DelayCall(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1), OnTick);
|
||||
}
|
||||
|
||||
#region Components
|
||||
private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource)
|
||||
{
|
||||
AddComplexComponent(addon, item, xoffset, yoffset, zoffset, hue, lightsource, null, 1);
|
||||
}
|
||||
|
||||
private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource, string name, int amount)
|
||||
{
|
||||
AddonComponent ac;
|
||||
ac = new AddonComponent(item);
|
||||
if (name != null && name.Length > 0)
|
||||
ac.Name = name;
|
||||
if (hue != 0)
|
||||
ac.Hue = hue;
|
||||
if (amount > 1)
|
||||
{
|
||||
ac.Stackable = true;
|
||||
ac.Amount = amount;
|
||||
}
|
||||
if (lightsource != -1)
|
||||
ac.Light = (LightType)lightsource;
|
||||
addon.AddComponent(ac, xoffset, yoffset, zoffset);
|
||||
}
|
||||
|
||||
private static int[,] m_AddOnSimpleComponents = new int[,] {
|
||||
{16017, -5, -3, 4}, {16011, -2, 4, 4}// 1 2 3
|
||||
, {16011, -2, -4, 4}, {16020, -5, -5, 4}, {16008, -2, -5, 4}// 4 5 6
|
||||
, {16014, -4, -3, 4}, {16011, 3, -4, 4}, {16008, -2, 3, 4}// 7 8 9
|
||||
, {16021, -6, 4, 4}, {15998, 3, -3, 4}, {16016, -4, -5, 4}// 10 11 12
|
||||
, {16008, 1, 3, 4}, {16011, -1, -3, 4}, {16014, -4, 5, 4}// 13 14 15
|
||||
, {16011, 4, -4, 4}, {16011, 1, 5, 4}, {16011, 1, -4, 4}// 16 17 18
|
||||
, {16011, 2, 5, 4}, {16010, 0, -6, 4}, {16012, -3, -3, 4}// 19 20 21
|
||||
, {15996, 4, -3, 4}, {16011, 3, 4, 4}, {16010, 1, 2, 4}// 22 23 24
|
||||
, {15997, 4, -5, 4}, {16010, 0, 2, 4}// 25 26 27
|
||||
, {15993, 5, -3, 4}, {16010, 2, -6, 4}, {15996, 4, 5, 4}// 28 29 30
|
||||
, {16011, -3, -4, 4}, {16005, 1, -2, 4}, {16011, 0, -4, 4}// 31 32 33
|
||||
, {15998, 3, 5, 4}, {16011, 1, -3, 4}, {16005, 2, 6, 4}// 34 35 36
|
||||
, {16017, -5, 5, 4}, {16008, 2, 3, 4}, {16011, -3, 4, 4}// 37 38 39
|
||||
, {16008, 0, 3, 4}, {16010, 2, 2, 4}, {16010, -1, 2, 4}// 40 41 42
|
||||
, {16011, 2, -3, 4}, {16015, -4, -4, 4}, {16005, 2, -2, 4}// 43 44 45
|
||||
, {16010, -2, -6, 4}, {16008, 0, -5, 4}// 46 47 48
|
||||
, {16010, -2, 2, 4}, {16011, 4, 4, 4}// 49 50 51
|
||||
, {16013, -3, -5, 4}, {15997, 4, 3, 4}, {16008, -1, 3, 4}// 52 53 54
|
||||
, {16005, 0, -2, 4}, {15999, 3, -5, 4}, {16011, 0, 5, 4}// 55 56 57
|
||||
, {16011, 0, -3, 4}, {16005, 1, 6, 4}, {15993, 5, 5, 4}// 58 59 60
|
||||
, {15999, 3, 3, 4}, {16011, 0, 4, 4}// 61 62 63
|
||||
, {16011, 2, -4, 4}, {16005, 0, 6, 4}, {16010, 1, -6, 4}// 64 65 66
|
||||
, {16008, 2, -5, 4}, {16011, -2, -3, 4}// 67 68 69
|
||||
, {15995, 5, -5, 4}, {16015, -4, 4, 4}, {16011, 1, 4, 4}// 70 71 72
|
||||
, {16021, -6, -4, 4}, {16005, -2, 6, 4 } // 73 74 75
|
||||
, {16012, -3, 5, 4}, {16008, 1, -5, 4}, {16013, -3, 3, 4}// 76 77 78
|
||||
, {16011, 2, 4, 4}, {16016, -4, 3, 4}// 79 80 81
|
||||
, {15990, 6, 4, 4}, {16020, -5, 3, 4}, {15995, 5, 3, 4}// 82 83 84
|
||||
, {16011, -1, 5, 4}, {16011, -2, 5, 4}, {16008, -1, -5, 4}// 85 86 87
|
||||
, {15990, 6, -4, 4}, {5367, 3, 0, 4}, {2462, -1, 2, 17}// 88 89 90
|
||||
, {4014, 1, 1, 17}, {4014, 1, 2, 12} // 91 92 93
|
||||
, {4014, 1, 1, 10}, {16933, 1, 2, 17}, {15991, 5, 5, 4}// 94 95 96
|
||||
, {19341, 0, 2, 12}, {16035, -2, -1, 9} // 97 98 99
|
||||
, {16011, -1, 4, 4}, {4014, -1, 1, 12}, {4334, 4, 4, 7}// 100 101 102
|
||||
, {4014, -1, 2, 12}, {16019, -5, 4, 4}, {16036, 2, 1, 9}// 104 105 106
|
||||
, {16011, 1, -1, 9}, {16011, 1, 0, 9}, {16035, -2, 0, 9}// 107 108 109
|
||||
, {30715, -1, 3, 5}, {30715, 0, 3, 5}, {16036, 2, -1, 9}// 110 111 112
|
||||
, {16036, 2, 0, 9}, {16011, -1, -1, 9}// 113 114 115
|
||||
, {16011, -1, 0, 9}, {16036, 2, 2, 9}, {16011, -1, 1, 9}// 116 117 118
|
||||
, {4335, 2, 4, 7}, {16011, -1, 2, 9}, {16011, 0, -1, 9}// 119 120 121
|
||||
, {16011, 0, 0, 9}, {16011, 0, 1, 9}, {7846, 3, -1, 0}// 122 123 124
|
||||
, {6941, 3, 2, 35}, {16011, 0, 2, 9}, {16011, 1, 2, 9}// 125 126 127
|
||||
, {6942, 1, 2, 24}, {30715, -2, 3, 5} // 128 129 130
|
||||
, {7846, 3, 2, 0}, {16035, -2, 1, 9}, {16011, 1, 1, 9}// 131 132 133
|
||||
, {30715, 2, 3, 5}, {4335, -3, 5, 7}, {30715, 1, 3, 5}// 134 135 136
|
||||
, {16010, -1, 2, 7}, {16035, -2, 2, 9}, {16005, -1, 6, 4}// 137 138 139
|
||||
, {16011, 5, 4, 8}, {16933, 0, -2, 17}, {4335, 4, -4, 7}// 140 141 142
|
||||
, {30717, -2, -3, 5}, {15991, 5, -3, 4}, {30717, -1, -3, 5}// 143 144 145
|
||||
, {30717, 0, -3, 5}, {16035, -2, -2, 9}, {30717, 2, -3, 5}// 146 147 148
|
||||
, {4334, -2, -4, 7}, {16019, -5, -4, 4}, {4335, 3, -4, 7}// 149 150 151
|
||||
, {30717, 1, -3, 5}, {16011, 1, -2, 9}, {16036, 2, -2, 9}// 152 153 154
|
||||
, {4014, 0, -2, 12}, {16011, -1, -2, 9}// 155 156 157
|
||||
, {16011, 0, -2, 9}, {16011, -1, -4, 4}, {16010, -1, -6, 4}// 158 159 160
|
||||
, {16005, -1, -2, 7}, {16011, 5, -4, 8}// 161 162
|
||||
};
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,230 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Multis;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class PlunderBeaconSpawner
|
||||
{
|
||||
public enum PlunderZone
|
||||
{
|
||||
None = -1,
|
||||
Tram,
|
||||
Fel,
|
||||
Tokuno1,
|
||||
Tokuno2,
|
||||
Tokuno3,
|
||||
Tokuno4
|
||||
}
|
||||
|
||||
public static PlunderBeaconSpawner Spawner { get; set; }
|
||||
public Dictionary<PlunderZone, List<PlunderBeaconAddon>> PlunderBeacons { get; set; }
|
||||
|
||||
public static void AddPlunderBeacon(PlunderZone zone, PlunderBeaconAddon beacon)
|
||||
{
|
||||
if (Spawner == null)
|
||||
return;
|
||||
|
||||
if (!Spawner.PlunderBeacons[zone].Contains(beacon))
|
||||
{
|
||||
Spawner.PlunderBeacons[zone].Add(beacon);
|
||||
}
|
||||
}
|
||||
|
||||
public void RemovePlunderBeacon(PlunderBeaconAddon beacon)
|
||||
{
|
||||
if (Spawner == null || Spawner.PlunderBeacons == null)
|
||||
return;
|
||||
|
||||
foreach (var kvp in Spawner.PlunderBeacons)
|
||||
{
|
||||
if (kvp.Value.Contains(beacon))
|
||||
{
|
||||
kvp.Value.Remove(beacon);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SystemDeactivate()
|
||||
{
|
||||
if (Timer != null)
|
||||
{
|
||||
Timer.Stop();
|
||||
Timer = null;
|
||||
}
|
||||
|
||||
var list = new List<PlunderBeaconAddon>();
|
||||
|
||||
foreach (var kvp in PlunderBeacons)
|
||||
{
|
||||
list.AddRange(kvp.Value);
|
||||
}
|
||||
|
||||
foreach (var beacon in list)
|
||||
{
|
||||
beacon.Delete();
|
||||
}
|
||||
|
||||
PlunderBeacons.Clear();
|
||||
Spawner = null;
|
||||
}
|
||||
|
||||
private Rectangle2D[] _Zones =
|
||||
{
|
||||
new Rectangle2D(1574, 3620, 766, 465),
|
||||
new Rectangle2D(1574, 3620, 766, 465),
|
||||
new Rectangle2D(403, 843, 80, 335),
|
||||
new Rectangle2D(631, 20, 189, 110),
|
||||
new Rectangle2D(1037, 20, 190, 150),
|
||||
new Rectangle2D(1274, 977, 141, 221)
|
||||
};
|
||||
|
||||
private int[] _SpawnCount =
|
||||
{
|
||||
5, 5, 3, 3, 3, 3
|
||||
};
|
||||
|
||||
public Timer Timer { get; set; }
|
||||
|
||||
public PlunderBeaconSpawner()
|
||||
{
|
||||
if (Spawner == null)
|
||||
{
|
||||
Spawner = this;
|
||||
Timer = Timer.DelayCall(TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(1), TickTock);
|
||||
|
||||
PlunderBeacons = new Dictionary<PlunderZone, List<PlunderBeaconAddon>>();
|
||||
PlunderBeacons[PlunderZone.Tram] = new List<PlunderBeaconAddon>();
|
||||
PlunderBeacons[PlunderZone.Fel] = new List<PlunderBeaconAddon>();
|
||||
PlunderBeacons[PlunderZone.Tokuno1] = new List<PlunderBeaconAddon>();
|
||||
PlunderBeacons[PlunderZone.Tokuno2] = new List<PlunderBeaconAddon>();
|
||||
PlunderBeacons[PlunderZone.Tokuno3] = new List<PlunderBeaconAddon>();
|
||||
PlunderBeacons[PlunderZone.Tokuno4] = new List<PlunderBeaconAddon>();
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("ALREADY HAS A SPAWNER!");
|
||||
}
|
||||
}
|
||||
|
||||
public void TickTock()
|
||||
{
|
||||
CheckSpawn();
|
||||
}
|
||||
|
||||
public void CheckSpawn()
|
||||
{
|
||||
foreach (int i in Enum.GetValues(typeof(PlunderZone)))
|
||||
{
|
||||
if (i == -1)
|
||||
continue;
|
||||
|
||||
var zone = (PlunderZone)i;
|
||||
int low = _SpawnCount[i] - PlunderBeacons[zone].Count;
|
||||
|
||||
if (low > 0)
|
||||
{
|
||||
Spawn(zone, low);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Spawn(PlunderZone zone, int amount)
|
||||
{
|
||||
Map map = Map.Trammel;
|
||||
|
||||
if (zone == PlunderZone.Fel)
|
||||
map = Map.Felucca;
|
||||
else if (zone > PlunderZone.Fel)
|
||||
map = Map.Tokuno;
|
||||
|
||||
for (int i = 0; i < amount; i++)
|
||||
{
|
||||
var rec = _Zones[(int)zone];
|
||||
Point3D p;
|
||||
|
||||
while(true)
|
||||
{
|
||||
p = map.GetRandomSpawnPoint(rec); //new Point3D(rec.X + Utility.Random(rec.Width), rec.Y + Utility.RandomMinMax(rec.Start.X, rec.Height), -5);
|
||||
|
||||
if (p.Z != -5)
|
||||
p.Z = -5;
|
||||
|
||||
var bounds = new Rectangle2D(p.X - 7, p.Y - 7, 15, 15);
|
||||
|
||||
bool badSpot = false;
|
||||
|
||||
for (int x = bounds.Start.X; x <= bounds.Start.X + bounds.Width; x++)
|
||||
{
|
||||
for (int y = bounds.Start.Y; y <= bounds.Start.Y + bounds.Height; y++)
|
||||
{
|
||||
if (BaseBoat.FindBoatAt(new Point3D(x, y, -5), map) != null || !SpecialFishingNet.ValidateDeepWater(map, x, y))
|
||||
{
|
||||
badSpot = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (badSpot)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!badSpot)
|
||||
{
|
||||
IPooledEnumerable eable = map.GetMobilesInBounds(bounds);
|
||||
|
||||
foreach (Mobile m in eable)
|
||||
{
|
||||
if (m.AccessLevel == AccessLevel.Player)
|
||||
{
|
||||
badSpot = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
|
||||
if (!badSpot)
|
||||
{
|
||||
var beacon = new PlunderBeaconAddon();
|
||||
beacon.MoveToWorld(p, map);
|
||||
|
||||
PlunderBeacons[zone].Add(beacon);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Serialize(GenericWriter writer)
|
||||
{
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(PlunderBeacons.Count);
|
||||
|
||||
foreach (var kvp in PlunderBeacons)
|
||||
{
|
||||
writer.Write((int)kvp.Key);
|
||||
writer.WriteItemList(kvp.Value);
|
||||
}
|
||||
}
|
||||
|
||||
public void Deserialize(GenericReader reader)
|
||||
{
|
||||
reader.ReadInt();
|
||||
|
||||
int count = reader.ReadInt();
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
PlunderBeacons[(PlunderZone)reader.ReadInt()] = reader.ReadStrongItemList<PlunderBeaconAddon>();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
636
Scripts/Services/Seasonal Events/RisingTide/Rewards.cs
Normal file
636
Scripts/Services/Seasonal Events/RisingTide/Rewards.cs
Normal file
@@ -0,0 +1,636 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
using Server;
|
||||
using Server.Gumps;
|
||||
using Server.Multis;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class DragonCannon : BaseAddon
|
||||
{
|
||||
public override BaseAddonDeed Deed { get { return new DragonCannonDeed(); } }
|
||||
|
||||
[Constructable]
|
||||
public DragonCannon()
|
||||
: this(DirectionType.South)
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public DragonCannon(DirectionType direction)
|
||||
{
|
||||
switch (direction)
|
||||
{
|
||||
case DirectionType.North:
|
||||
AddComponent(new AddonComponent(0x44F4), 0, 0, 0);
|
||||
AddComponent(new AddonComponent(0x44F3), 0, 1, 0);
|
||||
AddComponent(new AddonComponent(0x44F5), 0, -1, 0);
|
||||
break;
|
||||
case DirectionType.West:
|
||||
AddComponent(new AddonComponent(0x424A), 0, 0, 0);
|
||||
AddComponent(new AddonComponent(0x4223), 1, 0, 0);
|
||||
AddComponent(new AddonComponent(0x418F), -1, 0, 0);
|
||||
break;
|
||||
case DirectionType.South:
|
||||
AddComponent(new AddonComponent(0x4221), 0, 0, 0);
|
||||
AddComponent(new AddonComponent(0x4222), 0, 1, 0);
|
||||
AddComponent(new AddonComponent(0x4220), 0, -1, 0);
|
||||
break;
|
||||
case DirectionType.East:
|
||||
AddComponent(new AddonComponent(0x44F7), 0, 0, 0);
|
||||
AddComponent(new AddonComponent(0x44F6), 1, 0, 0);
|
||||
AddComponent(new AddonComponent(0x44F8), -1, 0, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public DragonCannon(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class DragonCannonDeed : BaseAddonDeed, IRewardOption
|
||||
{
|
||||
public override int LabelNumber { get { return 1158926; } } // Decorative Dragon Cannon
|
||||
public override BaseAddon Addon { get { return new DragonCannon(_Direction); } }
|
||||
|
||||
private DirectionType _Direction;
|
||||
|
||||
[Constructable]
|
||||
public DragonCannonDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public void GetOptions(RewardOptionList list)
|
||||
{
|
||||
list.Add((int)DirectionType.North, 1075389); // North
|
||||
list.Add((int)DirectionType.West, 1075390); // West
|
||||
list.Add((int)DirectionType.South, 1075386); // South
|
||||
list.Add((int)DirectionType.East, 1075387); // East
|
||||
}
|
||||
|
||||
public void OnOptionSelected(Mobile from, int choice)
|
||||
{
|
||||
_Direction = (DirectionType)choice;
|
||||
|
||||
if (!Deleted)
|
||||
base.OnDoubleClick(from);
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if (IsChildOf(from.Backpack))
|
||||
{
|
||||
from.CloseGump(typeof(RewardOptionGump));
|
||||
from.SendGump(new RewardOptionGump(this, 1076783)); // Please select your shadow altar position
|
||||
}
|
||||
else
|
||||
{
|
||||
from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
|
||||
}
|
||||
}
|
||||
|
||||
public DragonCannonDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flipable(0xA2CA, 0xA2CB)]
|
||||
public class ShoulderParrot : BaseOuterTorso
|
||||
{
|
||||
private DateTime _NextFly;
|
||||
private DateTime _FlyEnd;
|
||||
private Timer _Timer;
|
||||
private Mobile _LastShoulder;
|
||||
|
||||
private string _MasterName;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public string MasterName { get { return _MasterName; } set { _MasterName = value; InvalidateProperties(); } }
|
||||
|
||||
[Constructable]
|
||||
public ShoulderParrot()
|
||||
: base(0xA2CA)
|
||||
{
|
||||
LootType = LootType.Blessed;
|
||||
}
|
||||
|
||||
public override void AddNameProperty(ObjectPropertyList list)
|
||||
{
|
||||
if (_MasterName != null)
|
||||
{
|
||||
list.Add(1158958, String.Format("{0}{1}", _MasterName, _MasterName.ToLower().EndsWith("s") || _MasterName.ToLower().EndsWith("z") ? "'" : "'s"));
|
||||
}
|
||||
else
|
||||
{
|
||||
list.Add(1158928); // Shoulder Parrot
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (m.FindItemOnLayer(Layer.OuterTorso) == this)
|
||||
{
|
||||
if (_NextFly > DateTime.UtcNow)
|
||||
{
|
||||
m.SendLocalizedMessage(1158956); // Your parrot is too tired to fly right now.
|
||||
}
|
||||
else
|
||||
{
|
||||
_Timer = Timer.DelayCall(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), FlyOnTick);
|
||||
_Timer.Start();
|
||||
|
||||
Movable = false;
|
||||
_LastShoulder = m;
|
||||
MoveToWorld(new Point3D(m.X, m.Y, m.Z + 15), m.Map);
|
||||
ItemID = 0xA2CC;
|
||||
|
||||
_FlyEnd = DateTime.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(3, 5));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m.SendLocalizedMessage(1158957); // Your parrot can't fly here.
|
||||
}
|
||||
}
|
||||
|
||||
private void FlyOnTick()
|
||||
{
|
||||
if (_FlyEnd < DateTime.UtcNow)
|
||||
{
|
||||
Movable = true;
|
||||
ItemID = 0xA2CA;
|
||||
|
||||
if (_LastShoulder.FindItemOnLayer(Layer.OuterTorso) != null)
|
||||
{
|
||||
_LastShoulder.Backpack.DropItem(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
_LastShoulder.AddItem(this);
|
||||
}
|
||||
|
||||
_LastShoulder = null;
|
||||
_Timer.Stop();
|
||||
_NextFly = DateTime.UtcNow + TimeSpan.FromMinutes(2);
|
||||
}
|
||||
}
|
||||
|
||||
public ShoulderParrot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(_MasterName);
|
||||
writer.Write(_LastShoulder);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
reader.ReadInt();
|
||||
|
||||
_MasterName = reader.ReadString();
|
||||
Mobile m = reader.ReadMobile();
|
||||
|
||||
if (m != null)
|
||||
{
|
||||
ItemID = 0xA2CA;
|
||||
|
||||
Timer.DelayCall(() =>
|
||||
{
|
||||
if (m.FindItemOnLayer(Layer.OuterTorso) != null)
|
||||
{
|
||||
m.Backpack.DropItem(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
m.AddItem(this);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Flipable(0xA2C8, 0xA2C9)]
|
||||
public class PirateWallMap : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1158938; } } // Pirate Wall Map
|
||||
|
||||
[Constructable]
|
||||
public PirateWallMap()
|
||||
: base(0xA2C8)
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (m.InRange(GetWorldLocation(), 2))
|
||||
{
|
||||
var gump = new Gump(50, 50);
|
||||
gump.AddImage(0, 0, 0x9CE9);
|
||||
|
||||
m.SendGump(gump);
|
||||
}
|
||||
}
|
||||
|
||||
public PirateWallMap(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flipable(0xA2C6, 0xA2C7)]
|
||||
public class MysteriousStatue : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1158935; } } // Mysterious Statue
|
||||
|
||||
[Constructable]
|
||||
public MysteriousStatue()
|
||||
: base(0xA2C6)
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (m.InRange(GetWorldLocation(), 2))
|
||||
{
|
||||
m.SendGump(new BasicInfoGump(1158937));
|
||||
/*This mysterious statue towers above you. Even as skilled a mason as you are, the craftsmanship is uncanny, and unlike anything you have encountered before.
|
||||
* The stone appears to be smooth and special attention was taken to sculpt the statue as a perfect likeness. According to the pirate you purchased the statue
|
||||
* from, it was recovered somewhere at sea. The amount of marine growth seems to reinforce this claim, yet you cannot discern how long it may have been
|
||||
* submerged and are thus unsure of its age. Whatever its origins, one thing is clear - the figure is one you hope you do not encounter anytime soon...*/
|
||||
}
|
||||
}
|
||||
|
||||
/*public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
list.Add(1158936); // Purchased from a Pirate Merchant
|
||||
}*/
|
||||
|
||||
public MysteriousStatue(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flipable(0x4C26, 0x4C27)]
|
||||
public class DecorativeWoodCarving : Item
|
||||
{
|
||||
public string _ShipName;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public string ShipName { get { return _ShipName; } set { _ShipName = value; InvalidateProperties(); } }
|
||||
|
||||
[Constructable]
|
||||
public DecorativeWoodCarving()
|
||||
: base(0x4C26)
|
||||
{
|
||||
Hue = 2968;
|
||||
}
|
||||
|
||||
public void AssignRandomName()
|
||||
{
|
||||
var list = BaseBoat.Boats.Where(b => !String.IsNullOrEmpty(b.ShipName)).Select(x => x.ShipName).ToList();
|
||||
|
||||
if (list.Count > 0)
|
||||
{
|
||||
_ShipName = list[Utility.Random(list.Count)];
|
||||
}
|
||||
else
|
||||
{
|
||||
_ShipName = _ShipNames[Utility.Random(_ShipNames.Length)];
|
||||
}
|
||||
|
||||
InvalidateProperties();
|
||||
ColUtility.Free(list);
|
||||
}
|
||||
|
||||
private static string[] _ShipNames =
|
||||
{
|
||||
"Adventure Galley",
|
||||
"Queen Anne's Revenge",
|
||||
"Fancy",
|
||||
"Whydah",
|
||||
"Royal Fortune",
|
||||
"The Black Pearl",
|
||||
"Satisfaction",
|
||||
"The Golden Fleece",
|
||||
"Bachelor's Delight",
|
||||
"The Revenge",
|
||||
"The Flying Dragon",
|
||||
"The Gabriel",
|
||||
"Privateer's Death",
|
||||
"Kiss of Death",
|
||||
"Devil's Doom",
|
||||
"Monkeebutt",
|
||||
"Mourning Star",
|
||||
"Cursed Sea-Dog",
|
||||
"The Howling Lusty Wench",
|
||||
"Scourage of the Seven Seas",
|
||||
"Neptune's Plague",
|
||||
"Sea's Hellish Plague",
|
||||
"The Salty Bastard"
|
||||
};
|
||||
|
||||
public override void AddNameProperty(ObjectPropertyList list)
|
||||
{
|
||||
if (String.IsNullOrEmpty(_ShipName))
|
||||
{
|
||||
list.Add(1158943); // Wood Carving of [Ship's Name]
|
||||
}
|
||||
else
|
||||
{
|
||||
list.Add(1158921, _ShipName); // Wood Carving of ~1_name~
|
||||
}
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
if (String.IsNullOrEmpty(_ShipName))
|
||||
{
|
||||
list.Add(1158953); // Named with a random famous ship, or if yer lucky - named after you!
|
||||
}
|
||||
}
|
||||
|
||||
public DecorativeWoodCarving(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(_ShipName);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
reader.ReadInt();
|
||||
|
||||
_ShipName = reader.ReadString();
|
||||
}
|
||||
}
|
||||
|
||||
public class QuartermasterRewardDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return 1158951; } } // Quartermaster
|
||||
|
||||
[Constructable]
|
||||
public QuartermasterRewardDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public QuartermasterRewardDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class SailingMasterRewardDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return 1158950; } } // Sailing Master
|
||||
|
||||
[Constructable]
|
||||
public SailingMasterRewardDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public SailingMasterRewardDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class BotswainRewardDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return 1158949; } } // Botswain
|
||||
|
||||
[Constructable]
|
||||
public BotswainRewardDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public BotswainRewardDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class PowderMonkeyRewardDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return 1158948; } } // Powder Monkey
|
||||
|
||||
[Constructable]
|
||||
public PowderMonkeyRewardDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public PowderMonkeyRewardDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class SpikedWhipOfPlundering : SpikedWhip
|
||||
{
|
||||
public override int LabelNumber { get { return 1158925; } } // Spiked Whip of Plundering
|
||||
|
||||
[Constructable]
|
||||
public SpikedWhipOfPlundering()
|
||||
{
|
||||
ExtendedWeaponAttributes.HitExplosion = 15;
|
||||
WeaponAttributes.HitLeechMana = 81;
|
||||
Attributes.SpellChanneling = 1;
|
||||
Attributes.Luck = 100;
|
||||
Attributes.WeaponDamage = 70;
|
||||
}
|
||||
|
||||
public SpikedWhipOfPlundering(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class BladedWhipOfPlundering : BladedWhip
|
||||
{
|
||||
public override int LabelNumber { get { return 1158924; } } // Bladed Whip of Plundering
|
||||
|
||||
[Constructable]
|
||||
public BladedWhipOfPlundering()
|
||||
{
|
||||
ExtendedWeaponAttributes.HitExplosion = 15;
|
||||
WeaponAttributes.HitLeechMana = 81;
|
||||
Attributes.SpellChanneling = 1;
|
||||
Attributes.Luck = 100;
|
||||
Attributes.WeaponDamage = 70;
|
||||
}
|
||||
|
||||
public BladedWhipOfPlundering(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class BarbedWhipOfPlundering : BarbedWhip
|
||||
{
|
||||
public override int LabelNumber { get { return 1158923; } } // Barbed Whip of Plundering
|
||||
|
||||
[Constructable]
|
||||
public BarbedWhipOfPlundering()
|
||||
{
|
||||
ExtendedWeaponAttributes.HitExplosion = 15;
|
||||
WeaponAttributes.HitLeechMana = 81;
|
||||
Attributes.SpellChanneling = 1;
|
||||
Attributes.Luck = 100;
|
||||
Attributes.WeaponDamage = 70;
|
||||
}
|
||||
|
||||
public BarbedWhipOfPlundering(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
86
Scripts/Services/Seasonal Events/RisingTide/RewardsGump.cs
Normal file
86
Scripts/Services/Seasonal Events/RisingTide/RewardsGump.cs
Normal file
@@ -0,0 +1,86 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Gumps;
|
||||
using Server.Mobiles;
|
||||
using Server.Engines.Points;
|
||||
|
||||
namespace Server.Engines.RisingTide
|
||||
{
|
||||
public class RisingTideRewardGump : BaseRewardGump
|
||||
{
|
||||
public override int PointsName { get { return 1158916; } } // Your Doubloons
|
||||
public override int RewardLabel { get { return 1158917; } } // What ye buyin' Matey?
|
||||
|
||||
public RisingTideRewardGump(Mobile owner, PlayerMobile user)
|
||||
: base(owner, user, Rewards, 1158918)
|
||||
{
|
||||
}
|
||||
|
||||
public override int GetYOffset(int id)
|
||||
{
|
||||
if (id == 0xA2C6)
|
||||
{
|
||||
return 70;
|
||||
}
|
||||
|
||||
if (id == 0xA2C8)
|
||||
{
|
||||
return 50;
|
||||
}
|
||||
|
||||
if (id == 0xA28B)
|
||||
{
|
||||
return 15;
|
||||
}
|
||||
|
||||
return 20;
|
||||
}
|
||||
|
||||
public override double GetPoints(Mobile m)
|
||||
{
|
||||
return PointsSystem.RisingTide.GetPoints(m);
|
||||
}
|
||||
|
||||
public override void RemovePoints(double points)
|
||||
{
|
||||
PointsSystem.RisingTide.DeductPoints(User, points);
|
||||
}
|
||||
|
||||
public override void OnItemCreated(Item item)
|
||||
{
|
||||
if (item is DecorativeWoodCarving)
|
||||
{
|
||||
((DecorativeWoodCarving)item).AssignRandomName();
|
||||
}
|
||||
else if (item is ShoulderParrot)
|
||||
{
|
||||
((ShoulderParrot)item).MasterName = User.Name;
|
||||
}
|
||||
}
|
||||
|
||||
public static List<CollectionItem> Rewards { get; set; }
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
Rewards = new List<CollectionItem>();
|
||||
|
||||
Rewards.Add(new CollectionItem(typeof(DragonCannonDeed), 0x14EF, 1158926, 0, 120000));
|
||||
Rewards.Add(new CollectionItem(typeof(BlundercannonDeed), 0x14F2, 1158942, 1126, 25000));
|
||||
Rewards.Add(new CollectionItem(typeof(PirateWallMap), 0xA2C8, 1158938, 0, 45000));
|
||||
Rewards.Add(new CollectionItem(typeof(MysteriousStatue), 0xA2C6, 1158935, 0, 35000));
|
||||
Rewards.Add(new CollectionItem(typeof(ShoulderParrot), 0xA2CA, 1158928, 0, 100000));
|
||||
Rewards.Add(new CollectionItem(typeof(DecorativeWoodCarving), 0x4C26, 1158943, 2968, 15000));
|
||||
Rewards.Add(new CollectionItem(typeof(QuartermasterRewardDeed), 0x14EF, 0, 0, 25000));
|
||||
Rewards.Add(new CollectionItem(typeof(SailingMasterRewardDeed), 0x14EF, 0, 0, 20000));
|
||||
Rewards.Add(new CollectionItem(typeof(BotswainRewardDeed), 0x14EF, 0, 0, 15000));
|
||||
Rewards.Add(new CollectionItem(typeof(PowderMonkeyRewardDeed), 0x14EF, 0, 0, 10000));
|
||||
Rewards.Add(new CollectionItem(typeof(SpikedWhipOfPlundering), 0xA28B, 0, 0, 180000));
|
||||
Rewards.Add(new CollectionItem(typeof(BladedWhipOfPlundering), 0xA28B, 0, 0, 180000));
|
||||
Rewards.Add(new CollectionItem(typeof(BarbedWhipOfPlundering), 0xA28B, 0, 0, 180000));
|
||||
Rewards.Add(new CollectionItem(typeof(TritonStatue), 0xA2D8, 0, 2713, 140000));
|
||||
}
|
||||
}
|
||||
}
|
||||
129
Scripts/Services/Seasonal Events/RisingTide/RisingTideData.cs
Normal file
129
Scripts/Services/Seasonal Events/RisingTide/RisingTideData.cs
Normal file
@@ -0,0 +1,129 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Engines.SeasonalEvents;
|
||||
|
||||
namespace Server.Engines.Points
|
||||
{
|
||||
public class RisingTide : PointsSystem
|
||||
{
|
||||
public override PointsType Loyalty { get { return PointsType.RisingTide; } }
|
||||
public override TextDefinition Name { get { return m_Name; } }
|
||||
public override bool AutoAdd { get { return true; } }
|
||||
public override double MaxPoints { get { return double.MaxValue; } }
|
||||
public override bool ShowOnLoyaltyGump { get { return false; } }
|
||||
|
||||
public bool InSeason { get { return SeasonalEventSystem.IsActive(EventType.RisingTide); } }
|
||||
private TextDefinition m_Name = null;
|
||||
|
||||
public static readonly double CargoChance = 0.1;
|
||||
|
||||
public RisingTide()
|
||||
{
|
||||
}
|
||||
|
||||
public override void SendMessage(PlayerMobile from, double old, double points, bool quest)
|
||||
{
|
||||
from.SendLocalizedMessage(1158910, ((int)points).ToString()); // You have ~1_COUNT~ doubloons!
|
||||
}
|
||||
|
||||
public override void ProcessKill(Mobile victim, Mobile damager)
|
||||
{
|
||||
if (Enabled && victim is BaseCreature && damager is PlayerMobile)
|
||||
{
|
||||
var bc = victim as BaseCreature;
|
||||
var beacon = GetPlunderBeacon(bc);
|
||||
|
||||
if (beacon != null)
|
||||
{
|
||||
if (CargoChance > Utility.RandomDouble())
|
||||
{
|
||||
damager.AddToBackpack(new MaritimeCargo());
|
||||
damager.SendLocalizedMessage(1158907); // You recover maritime trade cargo!
|
||||
}
|
||||
}
|
||||
else if (CargoDropsTypes.Any(type => type == bc.GetType()))
|
||||
{
|
||||
double chance = CargoChance;
|
||||
|
||||
if (bc is BaseShipCaptain)
|
||||
{
|
||||
chance = 0.33;
|
||||
}
|
||||
|
||||
if (chance > Utility.RandomDouble())
|
||||
{
|
||||
var corpse = victim.Corpse;
|
||||
|
||||
if (corpse != null)
|
||||
{
|
||||
corpse.DropItem(new MaritimeCargo());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Type[] CargoDropsTypes =
|
||||
{
|
||||
typeof(PirateCaptain), typeof(MerchantCaptain), typeof(PirateCrew), typeof(MerchantCrew)
|
||||
};
|
||||
|
||||
public static PlunderBeaconAddon GetPlunderBeacon(BaseCreature bc)
|
||||
{
|
||||
if (PlunderBeaconSpawner.Spawner != null)
|
||||
{
|
||||
foreach (var list in PlunderBeaconSpawner.Spawner.PlunderBeacons.Values)
|
||||
{
|
||||
var addon = list.FirstOrDefault(beacon => beacon.Crew.Contains(bc) || (beacon.Spawn.ContainsKey(bc) && beacon.Spawn[bc]));
|
||||
|
||||
if (addon != null)
|
||||
{
|
||||
return addon;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public bool Enabled { get; set; }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(Enabled);
|
||||
|
||||
if (PlunderBeaconSpawner.Spawner != null)
|
||||
{
|
||||
writer.Write(0);
|
||||
PlunderBeaconSpawner.Spawner.Serialize(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.Write(1);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Enabled = reader.ReadBool();
|
||||
|
||||
if (reader.ReadInt() == 0)
|
||||
{
|
||||
var spawner = new PlunderBeaconSpawner();
|
||||
spawner.Deserialize(reader);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
274
Scripts/Services/Seasonal Events/SeasonalEventGump.cs
Normal file
274
Scripts/Services/Seasonal Events/SeasonalEventGump.cs
Normal file
@@ -0,0 +1,274 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
using Server;
|
||||
using Server.Mobiles;
|
||||
using Server.Gumps;
|
||||
using Server.Misc;
|
||||
|
||||
namespace Server.Engines.SeasonalEvents
|
||||
{
|
||||
public class SeasonalEventGump : BaseGump
|
||||
{
|
||||
public SeasonalEventGump(PlayerMobile pm)
|
||||
: base(pm, 100, 100)
|
||||
{
|
||||
pm.CloseGump(typeof(SeasonalEventGump));
|
||||
}
|
||||
|
||||
public override void AddGumpLayout()
|
||||
{
|
||||
AddBackground(0, 0, 500, 600, 9300);
|
||||
|
||||
AddHtml(0, 10, 500, 20, Center("Season Event Configuration"), false, false);
|
||||
|
||||
int y = 60;
|
||||
|
||||
AddHtml(10, 40, 190, 20, "System Name", false, false);
|
||||
AddHtml(200, 40, 75, 20, "Status", false, false);
|
||||
AddHtml(275, 40, 150, 20, "Season", false, false);
|
||||
AddHtml(450, 40, 50, 20, "Edit", false, false);
|
||||
|
||||
for(int i = 0; i < SeasonalEventSystem.Entries.Count; i++)
|
||||
{
|
||||
var entry = SeasonalEventSystem.Entries[i];
|
||||
|
||||
int hue = entry.IsActive() ? 167 : 137;
|
||||
|
||||
AddLabel(10, y, hue, entry.Name);
|
||||
AddLabel(200, y, hue, entry.Status.ToString());
|
||||
|
||||
if (entry.Status != EventStatus.Seasonal)
|
||||
{
|
||||
AddLabel(275, y, hue, "N/A");
|
||||
}
|
||||
else
|
||||
{
|
||||
DateTime end = new DateTime(DateTime.Now.Year, entry.MonthStart, entry.DayStart, 0, 0, 0) + TimeSpan.FromDays(entry.Duration);
|
||||
|
||||
AddLabel(275, y, hue, String.Format("{0}/{1} - {2}/{3}", entry.MonthStart.ToString(), entry.DayStart.ToString(), end.Month.ToString(), end.Day.ToString()));
|
||||
}
|
||||
|
||||
AddButton(450, y, 4029, 4030, i + 10, GumpButtonType.Reply, 0);
|
||||
y += 25;
|
||||
}
|
||||
|
||||
AddButton(10, 568, 4017, 4018, 1, GumpButtonType.Reply, 0);
|
||||
AddHtml(45, 568, 150, 20, "Restore Defaults", false, false);
|
||||
}
|
||||
|
||||
public override void OnResponse(RelayInfo info)
|
||||
{
|
||||
if (info.ButtonID == 0)
|
||||
return;
|
||||
|
||||
if (info.ButtonID >= 10)
|
||||
{
|
||||
int id = info.ButtonID - 10;
|
||||
|
||||
if (id >= 0 && id < SeasonalEventSystem.Entries.Count)
|
||||
{
|
||||
var entry = SeasonalEventSystem.Entries[id];
|
||||
|
||||
if (entry.EventType == EventType.TreasuresOfTokuno)
|
||||
{
|
||||
User.CloseGump(typeof(ToTAdminGump));
|
||||
User.SendGump(new ToTAdminGump());
|
||||
}
|
||||
else
|
||||
{
|
||||
BaseGump.SendGump(new EditEventGump(User, entry));
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (info.ButtonID == 1)
|
||||
{
|
||||
SeasonalEventSystem.LoadEntries();
|
||||
User.SendMessage("All event entries have been restored to default.");
|
||||
|
||||
Refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class EditEventGump : BaseGump
|
||||
{
|
||||
public SeasonalEventEntry Entry { get; set; }
|
||||
|
||||
private int _Month;
|
||||
private int _Day;
|
||||
private int _Duration;
|
||||
private EventStatus _Status;
|
||||
|
||||
public EditEventGump(PlayerMobile pm, SeasonalEventEntry entry)
|
||||
: base(pm, 100, 100)
|
||||
{
|
||||
pm.CloseGump(typeof(EditEventGump));
|
||||
|
||||
Entry = entry;
|
||||
|
||||
_Month = entry.MonthStart;
|
||||
_Day = entry.DayStart;
|
||||
_Duration = entry.Duration;
|
||||
_Status = entry.Status;
|
||||
}
|
||||
|
||||
public override void AddGumpLayout()
|
||||
{
|
||||
AddBackground(0, 0, 400, 250, 9300);
|
||||
|
||||
AddHtml(0, 10, 400, 20, Center(Entry.Name), false, false);
|
||||
|
||||
AddHtml(10, 40, 100, 20, "Start Month:", false, false);
|
||||
AddHtml(10, 62, 100, 20, "Start Day:", false, false);
|
||||
AddHtml(10, 84, 100, 20, "Duration [Days]:", false, false);
|
||||
AddHtml(10, 106, 100, 20, "Auto Activate:", false, false);
|
||||
|
||||
AddHtml(120, 40, 250, 20, GetMonth(_Month), false, false);
|
||||
AddHtml(120, 62, 250, 20, _Day.ToString(), false, false);
|
||||
AddTextEntry(120, 84, 250, 20, 0, 0, _Duration.ToString());
|
||||
AddHtml(120, 106, 250, 20, _Status.ToString(), false, false);
|
||||
|
||||
AddButton(335, 40, 4014, 4015, 1, GumpButtonType.Reply, 0);
|
||||
AddButton(367, 40, 4005, 4006, 2, GumpButtonType.Reply, 0);
|
||||
|
||||
AddButton(335, 62, 4014, 4015, 3, GumpButtonType.Reply, 0);
|
||||
AddButton(367, 62, 4005, 4006, 4, GumpButtonType.Reply, 0);
|
||||
|
||||
AddButton(335, 84, 4014, 4015, 5, GumpButtonType.Reply, 0);
|
||||
AddButton(367, 84, 4005, 4006, 6, GumpButtonType.Reply, 0);
|
||||
|
||||
AddButton(335, 106, 4014, 4015, 7, GumpButtonType.Reply, 0);
|
||||
AddButton(367, 106, 4005, 4006, 8, GumpButtonType.Reply, 0);
|
||||
|
||||
AddButton(5, 225, 4023, 4024, 9, GumpButtonType.Reply, 0);
|
||||
AddHtml(40, 225, 150, 20, "Apply", false, false);
|
||||
|
||||
AddButton(365, 225, 4014, 4016, 10, GumpButtonType.Reply, 0);
|
||||
AddHtml(260, 225, 100, 20, AlignRight("Back"), false, false);
|
||||
}
|
||||
|
||||
public override void OnResponse(RelayInfo info)
|
||||
{
|
||||
switch (info.ButtonID)
|
||||
{
|
||||
case 0: return;
|
||||
case 1:
|
||||
if (_Month == 1)
|
||||
_Month = 12;
|
||||
else
|
||||
_Month--;
|
||||
break;
|
||||
case 2:
|
||||
if (_Month == 12)
|
||||
_Month = 1;
|
||||
else
|
||||
_Month++;
|
||||
break;
|
||||
case 3:
|
||||
if (_Day == 1)
|
||||
_Day = GetDaysInMonth(_Month);
|
||||
else
|
||||
_Day--;
|
||||
break;
|
||||
case 4:
|
||||
if (_Day == GetDaysInMonth(_Month))
|
||||
_Day = 1;
|
||||
else
|
||||
_Day++;
|
||||
break;
|
||||
case 5:
|
||||
if (_Duration == 1)
|
||||
_Duration = 1;
|
||||
else
|
||||
_Duration--;
|
||||
|
||||
_Duration = Math.Min(365, _Duration);
|
||||
break;
|
||||
case 6:
|
||||
_Duration++;
|
||||
break;
|
||||
case 7:
|
||||
if (_Status == EventStatus.Inactive)
|
||||
_Status = EventStatus.Seasonal;
|
||||
else
|
||||
_Status--;
|
||||
break;
|
||||
case 8:
|
||||
if (_Status == EventStatus.Seasonal)
|
||||
_Status = EventStatus.Inactive;
|
||||
else
|
||||
_Status++;
|
||||
break;
|
||||
case 9:
|
||||
Entry.MonthStart = _Month;
|
||||
Entry.DayStart = _Day;
|
||||
Entry.Status = _Status;
|
||||
|
||||
TextRelay relay = info.GetTextEntry(0);
|
||||
|
||||
if (relay != null && !string.IsNullOrEmpty(relay.Text))
|
||||
{
|
||||
var duration = Utility.ToInt32(relay.Text);
|
||||
|
||||
if (duration > 0)
|
||||
{
|
||||
_Duration = Math.Min(365, duration);
|
||||
}
|
||||
}
|
||||
|
||||
Entry.Duration = _Duration;
|
||||
|
||||
BaseGump.SendGump(new SeasonalEventGump(User));
|
||||
|
||||
return;
|
||||
case 10:
|
||||
BaseGump.SendGump(new SeasonalEventGump(User));
|
||||
return;
|
||||
}
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
private string GetMonth(int month)
|
||||
{
|
||||
switch (month)
|
||||
{
|
||||
default:
|
||||
case 1: return "January";
|
||||
case 2: return "February";
|
||||
case 3: return "March";
|
||||
case 4: return "April";
|
||||
case 5: return "May";
|
||||
case 6: return "June";
|
||||
case 7: return "July";
|
||||
case 8: return "August";
|
||||
case 9: return "September";
|
||||
case 10: return "October";
|
||||
case 11: return "November";
|
||||
case 12: return "Decemebr";
|
||||
}
|
||||
}
|
||||
|
||||
private int GetDaysInMonth(int month)
|
||||
{
|
||||
switch (month)
|
||||
{
|
||||
default:
|
||||
case 1: return 31;
|
||||
case 2: return 28;
|
||||
case 3: return 31;
|
||||
case 4: return 30;
|
||||
case 5: return 31;
|
||||
case 6: return 30;
|
||||
case 7: return 31;
|
||||
case 8: return 31;
|
||||
case 9: return 30;
|
||||
case 10: return 31;
|
||||
case 11: return 30;
|
||||
case 12: return 31;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
296
Scripts/Services/Seasonal Events/SeasonalEventSystem.cs
Normal file
296
Scripts/Services/Seasonal Events/SeasonalEventSystem.cs
Normal file
@@ -0,0 +1,296 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.IO;
|
||||
|
||||
using Server;
|
||||
using Server.Mobiles;
|
||||
using Server.Gumps;
|
||||
using Server.Misc;
|
||||
using Server.Commands;
|
||||
using Server.Engines.TreasuresOfDoom;
|
||||
using Server.Engines.Khaldun;
|
||||
using Server.Engines.SorcerersDungeon;
|
||||
using Server.Engines.RisingTide;
|
||||
using Server.Engines.Fellowship;
|
||||
|
||||
namespace Server.Engines.SeasonalEvents
|
||||
{
|
||||
public enum EventType
|
||||
{
|
||||
TreasuresOfTokuno,
|
||||
VirtueArtifacts,
|
||||
TreasuresOfKotlCity,
|
||||
SorcerersDungeon,
|
||||
TreasuresOfDoom,
|
||||
TreasuresOfKhaldun,
|
||||
KrampusEncounter,
|
||||
RisingTide,
|
||||
Fellowship
|
||||
}
|
||||
|
||||
public enum EventStatus
|
||||
{
|
||||
Inactive,
|
||||
Active,
|
||||
Seasonal,
|
||||
}
|
||||
|
||||
public interface ISeasonalEventObject
|
||||
{
|
||||
EventType EventType { get; }
|
||||
bool EventActive { get; }
|
||||
}
|
||||
|
||||
public class SeasonalEventSystem
|
||||
{
|
||||
public static string FilePath = Path.Combine("Saves/Misc", "SeasonalEvents.bin");
|
||||
|
||||
public static List<SeasonalEventEntry> Entries { get; set; }
|
||||
|
||||
public static void Configure()
|
||||
{
|
||||
LoadEntries();
|
||||
|
||||
EventSink.WorldSave += OnSave;
|
||||
EventSink.WorldLoad += OnLoad;
|
||||
|
||||
CommandSystem.Register("SeasonSystemGump", AccessLevel.Administrator, SendGump);
|
||||
}
|
||||
|
||||
public static void LoadEntries()
|
||||
{
|
||||
Entries = new List<SeasonalEventEntry>();
|
||||
|
||||
Entries.Add(new SeasonalEventEntry(EventType.TreasuresOfTokuno, "Treasures of Tokuno", EventStatus.Inactive));
|
||||
Entries.Add(new SeasonalEventEntry(EventType.VirtueArtifacts, "Virtue Artifacts", EventStatus.Active));
|
||||
Entries.Add(new SeasonalEventEntry(EventType.TreasuresOfKotlCity, "Treasures of Kotl", EventStatus.Inactive, 10, 1, 60));
|
||||
Entries.Add(new SeasonalEventEntry(EventType.SorcerersDungeon, "Sorcerer's Dungeon", EventStatus.Seasonal, 10, 1, 60));
|
||||
Entries.Add(new SeasonalEventEntry(EventType.TreasuresOfDoom, "Treasures of Doom", EventStatus.Seasonal, 10, 1, 60));
|
||||
Entries.Add(new SeasonalEventEntry(EventType.TreasuresOfKhaldun, "Treasures of Khaldun", EventStatus.Seasonal, 10, 1, 60));
|
||||
Entries.Add(new SeasonalEventEntry(EventType.KrampusEncounter, "Krampus Encounter", EventStatus.Seasonal, 12, 1, 60));
|
||||
Entries.Add(new SeasonalEventEntry(EventType.RisingTide, "Rising Tide", EventStatus.Active));
|
||||
Entries.Add(new SeasonalEventEntry(EventType.Fellowship, "Fellowship", EventStatus.Inactive));
|
||||
}
|
||||
|
||||
[Usage("SeasonSystemGump")]
|
||||
[Description("Displays a menu to configure various seasonal systems.")]
|
||||
public static void SendGump(CommandEventArgs e)
|
||||
{
|
||||
if (e.Mobile is PlayerMobile)
|
||||
{
|
||||
BaseGump.SendGump(new SeasonalEventGump((PlayerMobile)e.Mobile));
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsActive(EventType type)
|
||||
{
|
||||
var entry = GetEntry(type);
|
||||
|
||||
if (entry != null)
|
||||
{
|
||||
return entry.IsActive();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static SeasonalEventEntry GetEntry(EventType type)
|
||||
{
|
||||
return Entries.FirstOrDefault(e => e.EventType == type);
|
||||
}
|
||||
|
||||
public static void OnToTDeactivated(Mobile from)
|
||||
{
|
||||
var entry = GetEntry(EventType.TreasuresOfTokuno);
|
||||
|
||||
if (entry != null)
|
||||
{
|
||||
entry.Status = EventStatus.Inactive;
|
||||
|
||||
if (from is PlayerMobile)
|
||||
{
|
||||
BaseGump.SendGump(new SeasonalEventGump((PlayerMobile)from));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void OnSave(WorldSaveEventArgs e)
|
||||
{
|
||||
Persistence.Serialize(
|
||||
FilePath,
|
||||
writer =>
|
||||
{
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(Entries.Count);
|
||||
|
||||
for(int i = 0; i < Entries.Count; i++)
|
||||
{
|
||||
writer.Write((int)Entries[i].EventType);
|
||||
Entries[i].Serialize(writer);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void OnLoad()
|
||||
{
|
||||
Persistence.Deserialize(
|
||||
FilePath,
|
||||
reader =>
|
||||
{
|
||||
reader.ReadInt(); // version
|
||||
|
||||
int count = reader.ReadInt();
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
var entry = GetEntry((EventType)reader.ReadInt());
|
||||
entry.Deserialize(reader);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
[PropertyObject]
|
||||
public class SeasonalEventEntry
|
||||
{
|
||||
private EventStatus _Status;
|
||||
|
||||
[CommandProperty(AccessLevel.Administrator)]
|
||||
public EventStatus Status
|
||||
{
|
||||
get
|
||||
{
|
||||
return _Status;
|
||||
}
|
||||
set
|
||||
{
|
||||
var old = _Status;
|
||||
|
||||
_Status = value;
|
||||
|
||||
if (old != _Status)
|
||||
{
|
||||
OnStatusChange();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.Administrator)]
|
||||
public string Name { get; private set; }
|
||||
|
||||
[CommandProperty(AccessLevel.Administrator)]
|
||||
public EventType EventType { get; private set; }
|
||||
|
||||
[CommandProperty(AccessLevel.Administrator)]
|
||||
public int MonthStart { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.Administrator)]
|
||||
public int DayStart { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.Administrator)]
|
||||
public int Duration { get; set; }
|
||||
|
||||
public SeasonalEventEntry(EventType type, string name, EventStatus status)
|
||||
{
|
||||
EventType = type;
|
||||
Name = name;
|
||||
_Status = status;
|
||||
MonthStart = 1;
|
||||
DayStart = 1;
|
||||
Duration = 365;
|
||||
}
|
||||
|
||||
public SeasonalEventEntry(EventType type, string name, EventStatus status, int month, int day, int duration)
|
||||
{
|
||||
EventType = type;
|
||||
Name = name;
|
||||
_Status = status;
|
||||
MonthStart = month;
|
||||
DayStart = day;
|
||||
Duration = duration;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Dynamically checks if this event is active or not, based on time of year/override
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public bool IsActive()
|
||||
{
|
||||
// ToT uses its own system, this just reads it
|
||||
if (EventType == EventType.TreasuresOfTokuno)
|
||||
{
|
||||
return TreasuresOfTokuno.DropEra != TreasuresOfTokunoEra.None;
|
||||
}
|
||||
|
||||
switch (Status)
|
||||
{
|
||||
default:
|
||||
{
|
||||
return false;
|
||||
}
|
||||
case EventStatus.Active:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
case EventStatus.Seasonal:
|
||||
{
|
||||
if (Duration >= 365)
|
||||
return true;
|
||||
|
||||
var now = DateTime.Now;
|
||||
var starts = new DateTime(now.Year, MonthStart, DayStart, 0, 0, 0);
|
||||
|
||||
return now > starts && now < starts + TimeSpan.FromDays(Duration);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void OnStatusChange()
|
||||
{
|
||||
switch (EventType)
|
||||
{
|
||||
case EventType.TreasuresOfDoom:
|
||||
TreasuresOfDoomGeneration.CheckEnabled();
|
||||
break;
|
||||
case EventType.TreasuresOfKhaldun:
|
||||
TreasuresOfKhaldunGeneration.CheckEnabled();
|
||||
break;
|
||||
case EventType.SorcerersDungeon:
|
||||
SorcerersDungeonGenerate.CheckEnabled();
|
||||
break;
|
||||
case EventType.KrampusEncounter:
|
||||
KrampusEncounter.CheckEnabled();
|
||||
break;
|
||||
case EventType.RisingTide:
|
||||
RisingTideGeneration.CheckEnabled();
|
||||
break;
|
||||
case EventType.Fellowship:
|
||||
ForsakenFoesGeneration.CheckEnabled();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void Serialize(GenericWriter writer)
|
||||
{
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write((int)_Status);
|
||||
writer.Write(MonthStart);
|
||||
writer.Write(DayStart);
|
||||
writer.Write(Duration);
|
||||
}
|
||||
|
||||
public virtual void Deserialize(GenericReader reader)
|
||||
{
|
||||
reader.ReadInt(); // version
|
||||
|
||||
_Status = (EventStatus)reader.ReadInt();
|
||||
|
||||
MonthStart = reader.ReadInt();
|
||||
DayStart = reader.ReadInt();
|
||||
Duration = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
123
Scripts/Services/Seasonal Events/TreasuresOfDoom/DoomData.cs
Normal file
123
Scripts/Services/Seasonal Events/TreasuresOfDoom/DoomData.cs
Normal file
@@ -0,0 +1,123 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Engines.SeasonalEvents;
|
||||
|
||||
namespace Server.Engines.Points
|
||||
{
|
||||
public class DoomData : PointsSystem
|
||||
{
|
||||
public override PointsType Loyalty { get { return PointsType.Doom; } }
|
||||
public override TextDefinition Name { get { return m_Name; } }
|
||||
public override bool AutoAdd { get { return true; } }
|
||||
public override double MaxPoints { get { return double.MaxValue; } }
|
||||
public override bool ShowOnLoyaltyGump { get { return false; } }
|
||||
|
||||
public bool InSeason { get { return SeasonalEventSystem.IsActive(EventType.TreasuresOfDoom); } }
|
||||
|
||||
private TextDefinition m_Name = null;
|
||||
|
||||
public DoomData()
|
||||
{
|
||||
DungeonPoints = new Dictionary<Mobile, int>();
|
||||
}
|
||||
|
||||
public override void SendMessage(PlayerMobile from, double old, double points, bool quest)
|
||||
{
|
||||
from.SendLocalizedMessage(1155590, ((int)points).ToString()); // You have turned in ~1_COUNT~ artifacts of Doom
|
||||
}
|
||||
|
||||
public override void ProcessKill(Mobile victim, Mobile damager)
|
||||
{
|
||||
var bc = victim as BaseCreature;
|
||||
|
||||
if (!InSeason || bc == null || bc.Controlled || bc.Summoned || !damager.Alive || damager.Deleted || bc.IsChampionSpawn)
|
||||
return;
|
||||
|
||||
Region r = bc.Region;
|
||||
|
||||
if (damager is PlayerMobile && r.IsPartOf("Doom"))
|
||||
{
|
||||
if (!DungeonPoints.ContainsKey(damager))
|
||||
DungeonPoints[damager] = 0;
|
||||
|
||||
int fame = bc.Fame / 2;
|
||||
int luck = Math.Max(0, ((PlayerMobile)damager).RealLuck);
|
||||
|
||||
DungeonPoints[damager] += (int)(fame * (1 + Math.Sqrt(luck) / 100));
|
||||
|
||||
int x = DungeonPoints[damager];
|
||||
const double A = 0.000863316841;
|
||||
const double B = 0.00000425531915;
|
||||
|
||||
double chance = A * Math.Pow(10, B * x);
|
||||
|
||||
if (chance > Utility.RandomDouble())
|
||||
{
|
||||
Item i = Loot.RandomArmorOrShieldOrWeaponOrJewelry(LootPackEntry.IsInTokuno(bc), LootPackEntry.IsMondain(bc), LootPackEntry.IsStygian(bc));
|
||||
|
||||
if (i != null)
|
||||
{
|
||||
RunicReforging.GenerateRandomItem(i, damager, Math.Max(100, RunicReforging.GetDifficultyFor(bc)), RunicReforging.GetLuckForKiller(bc), ReforgedPrefix.None, ReforgedSuffix.Doom);
|
||||
|
||||
damager.PlaySound(0x5B4);
|
||||
damager.SendLocalizedMessage(1155588); // You notice the crest of Doom on your fallen foe's equipment and decide it may be of some value...
|
||||
|
||||
if (!damager.PlaceInBackpack(i))
|
||||
{
|
||||
if (damager.BankBox != null && damager.BankBox.TryDropItem(damager, i, false))
|
||||
damager.SendLocalizedMessage(1079730); // The item has been placed into your bank box.
|
||||
else
|
||||
{
|
||||
damager.SendLocalizedMessage(1072523); // You find an artifact, but your backpack and bank are too full to hold it.
|
||||
i.MoveToWorld(damager.Location, damager.Map);
|
||||
}
|
||||
}
|
||||
|
||||
DungeonPoints.Remove(damager);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Dictionary<Mobile, int> DungeonPoints { get; set; }
|
||||
public bool Enabled { get; set; }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(Enabled);
|
||||
|
||||
writer.Write(DungeonPoints.Count);
|
||||
foreach (KeyValuePair<Mobile, int> kvp in DungeonPoints)
|
||||
{
|
||||
writer.Write(kvp.Key);
|
||||
writer.Write(kvp.Value);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Enabled = reader.ReadBool();
|
||||
|
||||
int count = reader.ReadInt();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
Mobile m = reader.ReadMobile();
|
||||
int points = reader.ReadInt();
|
||||
|
||||
if (m != null && points > 0)
|
||||
DungeonPoints[m] = points;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
186
Scripts/Services/Seasonal Events/TreasuresOfDoom/Generation.cs
Normal file
186
Scripts/Services/Seasonal Events/TreasuresOfDoom/Generation.cs
Normal file
@@ -0,0 +1,186 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
using Server.Engines.Points;
|
||||
using Server.Engines.TreasuresOfDoom;
|
||||
|
||||
namespace Server.Engines.TreasuresOfDoom
|
||||
{
|
||||
public static class TreasuresOfDoomGeneration
|
||||
{
|
||||
public static void Initialize()
|
||||
{
|
||||
EventSink.WorldSave += OnWorldSave;
|
||||
|
||||
if (Carey.Instance != null)
|
||||
{
|
||||
Carey.Instance.MoveToWorld(Carey.SpawnLocation, Map.Malas);
|
||||
}
|
||||
|
||||
if (Elizabeth.Instance != null)
|
||||
{
|
||||
Elizabeth.Instance.MoveToWorld(Elizabeth.SpawnLocation, Map.Malas);
|
||||
}
|
||||
|
||||
if (PointsSystem.TreasuresOfDoom.Enabled)
|
||||
{
|
||||
if (VaseSpawner.Instance == null)
|
||||
{
|
||||
VaseSpawner.Instance = new VaseSpawner();
|
||||
}
|
||||
|
||||
VaseSpawner.Instance.CheckVases();
|
||||
}
|
||||
else if (VaseSpawner.Instance != null)
|
||||
{
|
||||
if (VaseSpawner.Instance.Vases != null)
|
||||
{
|
||||
ColUtility.SafeDelete(VaseSpawner.Instance.Vases);
|
||||
}
|
||||
|
||||
VaseSpawner.Instance = null;
|
||||
}
|
||||
}
|
||||
|
||||
private static void OnWorldSave(WorldSaveEventArgs e)
|
||||
{
|
||||
CheckEnabled(true);
|
||||
}
|
||||
|
||||
public static void CheckEnabled(bool timed = false)
|
||||
{
|
||||
var doom = PointsSystem.TreasuresOfDoom;
|
||||
|
||||
if (doom.Enabled && !doom.InSeason)
|
||||
{
|
||||
if (timed)
|
||||
{
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(30), () =>
|
||||
{
|
||||
Utility.WriteConsoleColor(ConsoleColor.Green, "Auto Disabling Treasures of Doom");
|
||||
|
||||
Remove();
|
||||
doom.Enabled = false;
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
Utility.WriteConsoleColor(ConsoleColor.Green, "Auto Disabling Treasures of Doom");
|
||||
|
||||
Remove();
|
||||
doom.Enabled = false;
|
||||
}
|
||||
}
|
||||
else if (!doom.Enabled && doom.InSeason)
|
||||
{
|
||||
if (timed)
|
||||
{
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(30), () =>
|
||||
{
|
||||
Utility.WriteConsoleColor(ConsoleColor.Green, "Enabling Treasures of Doom");
|
||||
|
||||
Generate();
|
||||
doom.Enabled = true;
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
Utility.WriteConsoleColor(ConsoleColor.Green, "Enabling Treasures of Doom");
|
||||
|
||||
Generate();
|
||||
doom.Enabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void Generate()
|
||||
{
|
||||
if (Carey.Instance == null)
|
||||
{
|
||||
Carey.Instance = new Carey();
|
||||
Carey.Instance.MoveToWorld(Carey.SpawnLocation, Map.Malas);
|
||||
|
||||
Carey.Instance.Home = Carey.SpawnLocation;
|
||||
Carey.Instance.RangeHome = 2;
|
||||
}
|
||||
|
||||
if (Elizabeth.Instance == null)
|
||||
{
|
||||
Elizabeth.Instance = new Elizabeth();
|
||||
Elizabeth.Instance.MoveToWorld(Elizabeth.SpawnLocation, Map.Malas);
|
||||
|
||||
Elizabeth.Instance.Home = Elizabeth.SpawnLocation;
|
||||
Elizabeth.Instance.RangeHome = 2;
|
||||
}
|
||||
|
||||
if (Owain.Instance == null)
|
||||
{
|
||||
Owain.Instance = new Owain();
|
||||
Owain.Instance.MoveToWorld(Owain.SpawnLocation, Map.Malas);
|
||||
|
||||
Owain.Instance.Home = Owain.SpawnLocation;
|
||||
Owain.Instance.RangeHome = 10;
|
||||
}
|
||||
|
||||
if (VaseSpawner.Instance == null)
|
||||
{
|
||||
VaseSpawner.Instance = new VaseSpawner();
|
||||
}
|
||||
|
||||
VaseSpawner.Instance.CheckVases();
|
||||
|
||||
Point3D p = new Point3D(395, 220, -18);
|
||||
|
||||
if (Map.Malas.FindItem<DoomPlaque>(p) == null)
|
||||
{
|
||||
var plaque = new DoomPlaque();
|
||||
plaque.MoveToWorld(p, Map.Malas);
|
||||
}
|
||||
|
||||
p = new Point3D(388, 221, -20);
|
||||
|
||||
if (Map.Malas.FindItem<DoomSign>(p) == null)
|
||||
{
|
||||
var plaque = new DoomSign();
|
||||
plaque.MoveToWorld(p, Map.Malas);
|
||||
}
|
||||
|
||||
p = new Point3D(66, 223, -1);
|
||||
|
||||
if (Map.Malas.FindItem<Moongate>(p) == null)
|
||||
{
|
||||
var moongate = new Moongate();
|
||||
moongate.ItemID = 0x4BCB;
|
||||
moongate.Hue = 2676;
|
||||
moongate.Dispellable = false;
|
||||
moongate.Target = new Point3D(396, 220, -20);
|
||||
moongate.TargetMap = Map.Malas;
|
||||
|
||||
moongate.MoveToWorld(p, Map.Malas);
|
||||
}
|
||||
}
|
||||
|
||||
public static void Remove()
|
||||
{
|
||||
if (Carey.Instance != null)
|
||||
{
|
||||
Carey.Instance.Delete();
|
||||
}
|
||||
|
||||
if (VaseSpawner.Instance != null)
|
||||
{
|
||||
if (VaseSpawner.Instance.Vases != null)
|
||||
{
|
||||
ColUtility.SafeDelete(VaseSpawner.Instance.Vases);
|
||||
}
|
||||
|
||||
VaseSpawner.Instance = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Server;
|
||||
using Server.Network;
|
||||
using Server.Mobiles;
|
||||
using Server.Engines.Points;
|
||||
using Server.Engines.TreasuresOfDoom;
|
||||
using Server.SkillHandlers;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class AncientClayVase : Item, ICarvable
|
||||
{
|
||||
public override int LabelNumber { get { return 1155625; } } // Ancient Clay Vase
|
||||
public bool DoomEvent { get; set; }
|
||||
|
||||
[Constructable]
|
||||
public AncientClayVase()
|
||||
: this(false)
|
||||
{
|
||||
}
|
||||
|
||||
public AncientClayVase(bool doom)
|
||||
: base(0x42B3)
|
||||
{
|
||||
DoomEvent = doom;
|
||||
Hue = 2676;
|
||||
LootType = LootType.Blessed;
|
||||
}
|
||||
|
||||
public bool Carve(Mobile from, Item item)
|
||||
{
|
||||
if (IsChildOf(from.Backpack))
|
||||
{
|
||||
from.PlaySound(Utility.Random(0x3E, 4));
|
||||
from.PrivateOverheadMessage(MessageType.Regular, 0x3B2, 1155629, from.NetState); // *The vase shatters as you cut away the sealing wax!"
|
||||
|
||||
Delete();
|
||||
|
||||
if (0.5 > Utility.RandomDouble())
|
||||
{
|
||||
from.AddToBackpack(new AncientParchment());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
Stealing.ItemStolen += OnStolen;
|
||||
}
|
||||
|
||||
public static void OnStolen(ItemStolenEventArgs e)
|
||||
{
|
||||
if (e.Item is AncientClayVase)
|
||||
{
|
||||
e.Mobile.PrivateOverheadMessage(MessageType.Regular, 0x3B2, 1155626, e.Mobile.NetState); // *It appears to be an ancient vase. The top is sealed with some kind of wax. A bladed item would perhaps be useful...*
|
||||
}
|
||||
}
|
||||
|
||||
public AncientClayVase(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(DoomEvent);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
reader.ReadInt(); // version
|
||||
|
||||
DoomEvent = reader.ReadBool();
|
||||
|
||||
if (DoomEvent)
|
||||
{
|
||||
VaseSpawner.AddToSpawner(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
using System;
|
||||
using Server;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class AncientParchment : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1155627; } } // Ancient Parchment
|
||||
|
||||
[Constructable]
|
||||
public AncientParchment()
|
||||
: this(1)
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public AncientParchment(int amount)
|
||||
: base(0x2269)
|
||||
{
|
||||
LootType = LootType.Blessed;
|
||||
Stackable = true;
|
||||
Amount = amount;
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (IsChildOf(m.Backpack))
|
||||
{
|
||||
m.PrivateOverheadMessage(Server.Network.MessageType.Regular, 0x3B2, 1155628, m.NetState); // *The parchment appears heavily worn and in need of restoration by a skilled Scribe...*
|
||||
}
|
||||
}
|
||||
|
||||
public AncientParchment(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
reader.ReadInt(); // version
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System;
|
||||
|
||||
using Server;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class AntiqueDocumentsKit : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1155630; } } // Antique Documents Kit
|
||||
|
||||
[Constructable]
|
||||
public AntiqueDocumentsKit()
|
||||
: base(0x1EBB)
|
||||
{
|
||||
LootType = LootType.Blessed;
|
||||
}
|
||||
|
||||
public AntiqueDocumentsKit(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
reader.ReadInt(); // version
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
using System;
|
||||
using Server.Engines.Craft;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
[Alterable(typeof(DefTailoring), typeof(WingArmorOfLight))]
|
||||
public class CloakOfLight : Cloak
|
||||
{
|
||||
public override bool IsArtifact { get { return true; } }
|
||||
[Constructable]
|
||||
public CloakOfLight()
|
||||
{
|
||||
Attributes.NightSight = 1;
|
||||
Attributes.RegenHits = 2;
|
||||
Attributes.AttackChance = 5;
|
||||
}
|
||||
|
||||
public CloakOfLight(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int LabelNumber { get{return 1155608;} }// Cloak of Light
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class WingArmorOfLight : GargishClothWingArmor
|
||||
{
|
||||
public override bool IsArtifact { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public WingArmorOfLight()
|
||||
{
|
||||
Attributes.NightSight = 1;
|
||||
Attributes.RegenHits = 2;
|
||||
Attributes.AttackChance = 5;
|
||||
}
|
||||
|
||||
public WingArmorOfLight(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int LabelNumber { get{return 1155683;} }// Wing Armor of Light
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
using Server;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class CrookOfHumility : ShepherdsCrook
|
||||
{
|
||||
public override bool IsArtifact { get { return true; } }
|
||||
public override int LabelNumber { get { return 1155624; } } // Crook of Humilty
|
||||
|
||||
public override int InitMinHits { get { return 255; } }
|
||||
public override int InitMaxHits { get { return 255; } }
|
||||
|
||||
[Constructable]
|
||||
public CrookOfHumility()
|
||||
{
|
||||
Slayer3 = TalismanSlayerName.Wolf;
|
||||
Attributes.SpellChanneling = 1;
|
||||
Attributes.BonusInt = 10;
|
||||
Attributes.WeaponDamage = 20;
|
||||
}
|
||||
|
||||
public CrookOfHumility(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
reader.ReadInt(); // version
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Server;
|
||||
using Server.Mobiles;
|
||||
using Server.Prompts;
|
||||
using Server.Network;
|
||||
using Server.Engines.Points;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class DoomPlaque : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1155662; } } // Plaque
|
||||
public override bool ForceShowProperties { get { return true; } }
|
||||
|
||||
public Dictionary<Mobile, DateTime> NextMessage { get; set; }
|
||||
|
||||
public static readonly Point3D TeleportDestination = new Point3D(76, 224, 4);
|
||||
|
||||
[Constructable]
|
||||
public DoomPlaque()
|
||||
: base(0x4B20)
|
||||
{
|
||||
Movable = false;
|
||||
Hue = 2500;
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (m.InRange(GetWorldLocation(), 2))
|
||||
{
|
||||
m.Prompt = new DoomPlaquePrompt();
|
||||
}
|
||||
}
|
||||
|
||||
public override bool HandlesOnMovement { get { return true; } }
|
||||
|
||||
public override void OnMovement(Mobile m, Point3D oldLocation)
|
||||
{
|
||||
if (PointsSystem.TreasuresOfDoom.InSeason && m.Player && m.InRange(Location, 3) && m.InLOS(this))
|
||||
{
|
||||
if (NextMessage == null)
|
||||
{
|
||||
NextMessage = new Dictionary<Mobile, DateTime>();
|
||||
}
|
||||
else
|
||||
{
|
||||
CheckList();
|
||||
}
|
||||
|
||||
if (!NextMessage.ContainsKey(m))
|
||||
{
|
||||
m.PrivateOverheadMessage(MessageType.Regular, 0x3B2, 1155660, m.NetState); // *You examine the plaque...there appears to be a series of runic characters that are raised up...they look like buttons...*
|
||||
|
||||
NextMessage[m] = DateTime.UtcNow + TimeSpan.FromMinutes(10);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckList()
|
||||
{
|
||||
if (NextMessage == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var list = new List<Mobile>(NextMessage.Keys);
|
||||
|
||||
foreach (var m in list)
|
||||
{
|
||||
if (NextMessage[m] < DateTime.UtcNow)
|
||||
{
|
||||
NextMessage.Remove(m);
|
||||
}
|
||||
}
|
||||
|
||||
ColUtility.Free(list);
|
||||
}
|
||||
|
||||
private class DoomPlaquePrompt : Prompt
|
||||
{
|
||||
public override int MessageCliloc { get { return 1155661; } }
|
||||
|
||||
public DoomPlaquePrompt()
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnResponse(Mobile from, string text)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(text) && text.Trim().ToLower() == "wolfgang")
|
||||
{
|
||||
Effects.SendLocationParticles(EffectItem.Create(from.Location, Map.Malas, EffectItem.DefaultDuration), 0x3728, 10, 10, 2023);
|
||||
from.MoveToWorld(TeleportDestination, Map.Malas);
|
||||
Effects.SendLocationParticles(EffectItem.Create(TeleportDestination, Map.Malas, EffectItem.DefaultDuration), 0x3728, 10, 10, 5023);
|
||||
}
|
||||
else
|
||||
{
|
||||
from.SendLocalizedMessage(1155663); // Nothign Happens
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnCancel(Mobile from)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public DoomPlaque(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
|
||||
CheckList();
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
reader.ReadInt(); // version
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Server;
|
||||
using Server.Mobiles;
|
||||
using Server.Gumps;
|
||||
using Server.Network;
|
||||
using Server.Engines.Points;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class DoomSign : Item, IRevealableItem
|
||||
{
|
||||
public List<Mobile> Revealed { get; set; }
|
||||
public Dictionary<Mobile, DateTime> NextMessage { get; set; }
|
||||
|
||||
public override bool ForceShowProperties { get { return true; } }
|
||||
public bool CheckWhenHidden { get { return false; } }
|
||||
|
||||
[Constructable]
|
||||
public DoomSign()
|
||||
: base(0xBD0)
|
||||
{
|
||||
Movable = false;
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (PointsSystem.TreasuresOfDoom.InSeason && m.InRange(GetWorldLocation(), 2))
|
||||
{
|
||||
var gump = new Gump(150, 150);
|
||||
|
||||
gump.AddImage(0, 0, HasRevealed(m) ? 0x7779 : 0x7724);
|
||||
|
||||
m.SendGump(gump);
|
||||
}
|
||||
}
|
||||
|
||||
public override bool HandlesOnMovement { get { return PointsSystem.TreasuresOfDoom.InSeason; } }
|
||||
|
||||
public override void OnMovement(Mobile m, Point3D oldLocation)
|
||||
{
|
||||
if (m.Player && m.InRange(Location, 3) && m.InLOS(this))
|
||||
{
|
||||
if (NextMessage == null)
|
||||
{
|
||||
NextMessage = new Dictionary<Mobile, DateTime>();
|
||||
}
|
||||
else
|
||||
{
|
||||
CheckList();
|
||||
}
|
||||
|
||||
if (!NextMessage.ContainsKey(m))
|
||||
{
|
||||
m.PrivateOverheadMessage(MessageType.Regular, 0x3B2, 1155659, m.NetState); // *The wooden sign seems in oddly good condition for how old the sarcophagus is. Most of the inscription is worn away...*
|
||||
|
||||
NextMessage[m] = DateTime.UtcNow + TimeSpan.FromMinutes(10);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool HasRevealed(Mobile m)
|
||||
{
|
||||
return Revealed != null && Revealed.Contains(m);
|
||||
}
|
||||
|
||||
public bool CheckReveal(Mobile m)
|
||||
{
|
||||
return Utility.Random((int)m.Skills[SkillName.DetectHidden].Value) < 100;
|
||||
}
|
||||
|
||||
public void OnRevealed(Mobile m)
|
||||
{
|
||||
if (Revealed == null)
|
||||
{
|
||||
Revealed = new List<Mobile>();
|
||||
}
|
||||
|
||||
if (!Revealed.Contains(m))
|
||||
{
|
||||
Revealed.Add(m);
|
||||
|
||||
m.PrivateOverheadMessage(MessageType.Regular, 0x3B2, 1155658, m.NetState); // *You reveal something hidden about the object...*
|
||||
}
|
||||
|
||||
OnDoubleClick(m);
|
||||
}
|
||||
|
||||
public bool CheckPassiveDetect(Mobile m)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
private void CheckList()
|
||||
{
|
||||
if (NextMessage == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var list = new List<Mobile>(NextMessage.Keys);
|
||||
|
||||
foreach (var m in list)
|
||||
{
|
||||
if (NextMessage[m] < DateTime.UtcNow)
|
||||
{
|
||||
NextMessage.Remove(m);
|
||||
}
|
||||
}
|
||||
|
||||
ColUtility.Free(list);
|
||||
}
|
||||
|
||||
public DoomSign(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
|
||||
CheckList();
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
reader.ReadInt(); // version
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
using System;
|
||||
using Server;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class LanternOfLight : Lantern
|
||||
{
|
||||
private string _OwnerName;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public string OwnerName { get { return _OwnerName; } set { _OwnerName = value; InvalidateProperties(); } }
|
||||
|
||||
[Constructable]
|
||||
public LanternOfLight()
|
||||
{
|
||||
}
|
||||
|
||||
public override void AddNameProperty(ObjectPropertyList list)
|
||||
{
|
||||
list.Add(1155597, _OwnerName); // ~1_NAME~'s Lantern of Light
|
||||
}
|
||||
|
||||
public LanternOfLight(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(_OwnerName);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
reader.ReadInt(); // version
|
||||
|
||||
_OwnerName = reader.ReadString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
using Server;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class PropheticManuscript : BaseJournal
|
||||
{
|
||||
public override int LabelNumber { get { return 1155631; } } // Prophetic Manuscript
|
||||
|
||||
public int Index { get; set; }
|
||||
|
||||
public override TextDefinition Title { get { return 1155638 + Index; } }
|
||||
public override TextDefinition Body { get { return 1155632 + Index; } }
|
||||
|
||||
[Constructable]
|
||||
public PropheticManuscript()
|
||||
: this(Utility.RandomMinMax(0, 4))
|
||||
{
|
||||
}
|
||||
|
||||
public PropheticManuscript(int index)
|
||||
{
|
||||
ItemID = 0x42BF;
|
||||
Index = index;
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
list.Add(1154760, "#1155637"); // By: Owain the Blind Prophet
|
||||
}
|
||||
|
||||
public PropheticManuscript(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(Index);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Index = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
using Server;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class TreasuresOfDoomRewardDeed : BaseRewardTitleDeed
|
||||
{
|
||||
private TextDefinition _Title;
|
||||
|
||||
public override TextDefinition Title { get { return _Title; } }
|
||||
|
||||
public TreasuresOfDoomRewardDeed(int localization)
|
||||
{
|
||||
_Title = localization;
|
||||
}
|
||||
|
||||
public TreasuresOfDoomRewardDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
|
||||
TextDefinition.Serialize(writer, _Title);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
_Title = TextDefinition.Deserialize(reader);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
using System;
|
||||
using Server;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class ScepterOfPride : Scepter
|
||||
{
|
||||
public override bool IsArtifact { get { return true; } }
|
||||
public override int LabelNumber { get { return 1155623; } } // Sceptre of Pride
|
||||
|
||||
public override int InitMinHits { get { return 255; } }
|
||||
public override int InitMaxHits { get { return 255; } }
|
||||
|
||||
[Constructable]
|
||||
public ScepterOfPride()
|
||||
{
|
||||
WeaponAttributes.HitLeechStam = 70;
|
||||
WeaponAttributes.HitLeechMana = 70;
|
||||
WeaponAttributes.HitLeechHits = 70;
|
||||
Attributes.WeaponSpeed = 30;
|
||||
|
||||
Slayer = SlayerName.Exorcism;
|
||||
Slayer2 = SlayerName.Silver;
|
||||
}
|
||||
|
||||
public ScepterOfPride(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
reader.ReadInt(); // version
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
using System;
|
||||
|
||||
using Server;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class TinctureOfSilver : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1155619; } } // Tincture of Silver
|
||||
|
||||
[Constructable]
|
||||
public TinctureOfSilver()
|
||||
: base(0x183B)
|
||||
{
|
||||
Hue = 1900;
|
||||
LootType = LootType.Blessed;
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (IsChildOf(m.Backpack))
|
||||
{
|
||||
m.SendLocalizedMessage(1155613); // Target the weapon, spellbook, or instrument you wish to apply this to...
|
||||
m.BeginTarget(-1, false, Server.Targeting.TargetFlags.None, (from, targeted) =>
|
||||
{
|
||||
if (targeted is Item && targeted is ISlayer)
|
||||
{
|
||||
var item = (Item)targeted;
|
||||
var slayer = (ISlayer)targeted;
|
||||
|
||||
var socket = item.GetSocket<SlayerSocket>();
|
||||
|
||||
if (socket == null || socket.Slayer != SlayerName.Silver)
|
||||
{
|
||||
if (slayer.Slayer != SlayerName.None && slayer.Slayer2 != SlayerName.None)
|
||||
{
|
||||
from.SendLocalizedMessage(1155680); // You cannot apply Tincture of Silver to items that are already slayers!
|
||||
}
|
||||
else
|
||||
{
|
||||
item.AttachSocket(new SlayerSocket(SlayerName.Silver, TimeSpan.FromHours(1)));
|
||||
|
||||
Delete();
|
||||
|
||||
from.SendLocalizedMessage(1155616); // You carefully apply Tincture of Silver to the item. The effects will fade in one hour.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
from.SendLocalizedMessage(1155614); // This item is already treated with Tincture of Silver!
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
from.SendLocalizedMessage(1155615); // You cannot apply Tincture of Silver to this item.
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
list.Add(1155620); // When Applied:
|
||||
list.Add(1155621, "#1155622"); // 200% Damage Increase towards Monsters of ~1_NAME~ : Undead Vulnerability
|
||||
}
|
||||
|
||||
public TinctureOfSilver(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
reader.ReadInt(); // version
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Gumps;
|
||||
using System.Collections.Generic;
|
||||
using Server.ContextMenus;
|
||||
using Server.Engines.Points;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.TreasuresOfDoom
|
||||
{
|
||||
public class Carey : BaseTurnInMobile
|
||||
{
|
||||
public override int TitleLocalization { get { return 1155595; } } // Artifacts of Doom
|
||||
public override int CancelLocalization { get { return 1155591; } } // Bring me items of Doom and I will reward you with valuable items.
|
||||
public override int TurnInLocalization { get { return 1155595; } } // Artifacts of Doom
|
||||
|
||||
public static Carey Instance { get; set; }
|
||||
public static readonly Point3D SpawnLocation = new Point3D(2373, 1278, -90);
|
||||
|
||||
[Constructable]
|
||||
public Carey() : base("the Researcher")
|
||||
{
|
||||
Instance = this;
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
base.InitBody();
|
||||
|
||||
Name = "Carey";
|
||||
Female = true;
|
||||
|
||||
SpeechHue = 0x3B2;
|
||||
Hue = Utility.RandomSkinHue();
|
||||
Body = 0x191;
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
SetWearable(new Robe(), 1364);
|
||||
SetWearable(new ThighBoots(), 1908);
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
list.Add(1155594); // Artifacts of Doom Trader
|
||||
}
|
||||
|
||||
private DateTime _NextSpeak;
|
||||
|
||||
public override void OnMovement(Mobile m, Point3D oldLocation)
|
||||
{
|
||||
base.OnMovement(m, oldLocation);
|
||||
|
||||
if (_NextSpeak < DateTime.UtcNow)
|
||||
{
|
||||
SayTo(m, 1155591); // Bring me items of the Kotl and I will reward you with valuable items.
|
||||
_NextSpeak = DateTime.UtcNow + TimeSpan.FromSeconds(25);
|
||||
}
|
||||
}
|
||||
|
||||
public override void AwardPoints(PlayerMobile pm, Item item, int amount)
|
||||
{
|
||||
PointsSystem.TreasuresOfDoom.AwardPoints(pm, amount);
|
||||
}
|
||||
|
||||
public override bool IsRedeemableItem(Item item)
|
||||
{
|
||||
if (item is ICombatEquipment && ((ICombatEquipment)item).ReforgedSuffix == ReforgedSuffix.Doom)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override void SendRewardGump(Mobile m)
|
||||
{
|
||||
if (m.Player && m.CheckAlive())
|
||||
m.SendGump(new DoomRewardGump(this, m as PlayerMobile));
|
||||
}
|
||||
|
||||
public Carey(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Instance = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Gumps;
|
||||
using System.Collections.Generic;
|
||||
using Server.ContextMenus;
|
||||
using Server.Engines.Points;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.TreasuresOfDoom
|
||||
{
|
||||
public class Elizabeth : BaseVendor
|
||||
{
|
||||
protected readonly List<SBInfo> m_SBInfos = new List<SBInfo>();
|
||||
protected override List<SBInfo> SBInfos { get { return m_SBInfos; } }
|
||||
public override bool IsActiveVendor { get { return false; } }
|
||||
|
||||
public static Elizabeth Instance { get; set; }
|
||||
public static readonly Point3D SpawnLocation = new Point3D(2364, 1284, -90);
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Elizabeth() : base("the Professor")
|
||||
{
|
||||
Instance = this;
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (m.InRange(Location, 5))
|
||||
{
|
||||
BaseGump.SendGump(new StoryGump(m as PlayerMobile,
|
||||
1155648,
|
||||
new PageData(1, 1155649, new SelectionEntry(1155650, 2)),
|
||||
new PageData(2, 1155651, new SelectionEntry(1155652, 3), new SelectionEntry(1155653, 4)),
|
||||
new PageData(3, 1155654, new SelectionEntry(1155653, 5), new SelectionEntry(1155655, 6)),
|
||||
new PageData(4, 1155657, new SelectionEntry(1155652, 5)),
|
||||
new PageData(5, 1155654, new SelectionEntry(1155655, 6)),
|
||||
new PageData(6, 1155656)));
|
||||
}
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
base.InitBody();
|
||||
|
||||
Name = "Elizabeth";
|
||||
Female = true;
|
||||
|
||||
SpeechHue = 0x3B2;
|
||||
Hue = Utility.RandomSkinHue();
|
||||
Body = 0x191;
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
SetWearable(new FancyShirt(), 1255);
|
||||
SetWearable(new JinBaori(), 2722);
|
||||
SetWearable(new Kilt(), 2012);
|
||||
SetWearable(new ThighBoots(), 1908);
|
||||
}
|
||||
|
||||
public Elizabeth(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Instance = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Gumps;
|
||||
using System.Collections.Generic;
|
||||
using Server.ContextMenus;
|
||||
using Server.Engines.Points;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.TreasuresOfDoom
|
||||
{
|
||||
public class Owain : BaseVendor
|
||||
{
|
||||
protected readonly List<SBInfo> m_SBInfos = new List<SBInfo>();
|
||||
protected override List<SBInfo> SBInfos { get { return m_SBInfos; } }
|
||||
public override bool IsActiveVendor { get { return false; } }
|
||||
|
||||
public static Owain Instance { get; set; }
|
||||
public static readonly Point3D SpawnLocation = new Point3D(86, 223, -1);
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Owain() : base("the blind")
|
||||
{
|
||||
Instance = this;
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (m.InRange(Location, 5))
|
||||
{
|
||||
BaseGump.SendGump(new StoryGump(m as PlayerMobile,
|
||||
1155664,
|
||||
new PageData(1, 1155665, new SelectionEntry(1155666, 2)),
|
||||
new PageData(2, 1155667, new SelectionEntry(1155668, 3), new SelectionEntry(1155669, 4)),
|
||||
new PageData(3, 1155670, new SelectionEntry(1155671, 5)),
|
||||
new PageData(4, 1155672, new SelectionEntry(1155673, 6)),
|
||||
new PageData(5, 1155674, new SelectionEntry(1155675, 7)),
|
||||
new PageData(6, 1155676, new SelectionEntry(1155677, 8)),
|
||||
new PageData(7, 1155678),
|
||||
new PageData(8, 1155679)));
|
||||
}
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
base.InitBody();
|
||||
|
||||
Name = "Owain";
|
||||
|
||||
SpeechHue = 0x3B2;
|
||||
Hue = Utility.RandomSkinHue();
|
||||
Body = 0x190;
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
SetWearable(new Robe(), 1255);
|
||||
SetWearable(new ThighBoots(), 1908);
|
||||
}
|
||||
|
||||
public Owain(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Instance = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
33
Scripts/Services/Seasonal Events/TreasuresOfDoom/Region.cs
Normal file
33
Scripts/Services/Seasonal Events/TreasuresOfDoom/Region.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using System;
|
||||
|
||||
using Server;
|
||||
using Server.Spells;
|
||||
|
||||
namespace Server.Regions
|
||||
{
|
||||
public class MonestaryRegion : BaseRegion
|
||||
{
|
||||
public static void Initialize()
|
||||
{
|
||||
new MonestaryRegion();
|
||||
}
|
||||
|
||||
public MonestaryRegion()
|
||||
: base("Doom Monestary", Map.Malas, Region.DefaultPriority, new Rectangle2D(64, 204, 99, 37))
|
||||
{
|
||||
GoLocation = new Point3D(79, 223, -1);
|
||||
|
||||
Register();
|
||||
}
|
||||
|
||||
public override bool CheckTravel(Mobile traveller, Point3D p, TravelCheckType type)
|
||||
{
|
||||
if (traveller.AccessLevel > AccessLevel.Player)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return type == TravelCheckType.TeleportTo || type == TravelCheckType.TeleportFrom;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
using Server.Engines.Points;
|
||||
using System.Collections.Generic;
|
||||
using Server.Gumps;
|
||||
using Server.Engines.Craft;
|
||||
|
||||
namespace Server.Engines.TreasuresOfDoom
|
||||
{
|
||||
public class DoomRewardGump : BaseRewardGump
|
||||
{
|
||||
public DoomRewardGump(Mobile owner, PlayerMobile user)
|
||||
: base(owner, user, DoomRewards.Rewards, 1155595)
|
||||
{
|
||||
}
|
||||
|
||||
public override int GetYOffset(int id)
|
||||
{
|
||||
return 15;
|
||||
}
|
||||
|
||||
public override double GetPoints(Mobile m)
|
||||
{
|
||||
return PointsSystem.TreasuresOfDoom.GetPoints(m);
|
||||
}
|
||||
|
||||
public override void OnConfirmed(CollectionItem citem, int index)
|
||||
{
|
||||
Item item = null;
|
||||
|
||||
if (citem.Type == typeof(TreasuresOfDoomRewardDeed))
|
||||
{
|
||||
item = new TreasuresOfKotlRewardDeed(citem.Tooltip);
|
||||
}
|
||||
else
|
||||
{
|
||||
item = Loot.Construct(citem.Type);
|
||||
}
|
||||
|
||||
if (item != null)
|
||||
{
|
||||
if (item is LanternOfLight)
|
||||
{
|
||||
((LanternOfLight)item).OwnerName = User.Name;
|
||||
}
|
||||
|
||||
if (User.Backpack == null || !User.Backpack.TryDropItem(User, item, false))
|
||||
{
|
||||
User.SendLocalizedMessage(1074361); // The reward could not be given. Make sure you have room in your pack.
|
||||
item.Delete();
|
||||
}
|
||||
else
|
||||
{
|
||||
User.SendLocalizedMessage(1073621); // Your reward has been placed in your backpack.
|
||||
User.PlaySound(0x5A7);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
base.OnConfirmed(citem, index);
|
||||
}
|
||||
|
||||
PointsSystem.TreasuresOfDoom.DeductPoints(User, citem.Points);
|
||||
}
|
||||
}
|
||||
}
|
||||
33
Scripts/Services/Seasonal Events/TreasuresOfDoom/Rewards.cs
Normal file
33
Scripts/Services/Seasonal Events/TreasuresOfDoom/Rewards.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using System.Collections.Generic;
|
||||
using Server.Network;
|
||||
using System.Linq;
|
||||
using Server.Engines.Points;
|
||||
|
||||
namespace Server.Engines.TreasuresOfDoom
|
||||
{
|
||||
public static class DoomRewards
|
||||
{
|
||||
public static List<CollectionItem> Rewards { get; set; }
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
Rewards = new List<CollectionItem>();
|
||||
|
||||
Rewards.Add(new CollectionItem(typeof(LanternOfLight), 0xA25, 1155598, 0, 30));
|
||||
Rewards.Add(new CollectionItem(typeof(TinctureOfSilver), 0x183B, 1155619, 1900, 10));
|
||||
Rewards.Add(new CollectionItem(typeof(AntiqueDocumentsKit), 0x1EBB, 1155630, 0, 10));
|
||||
Rewards.Add(new CollectionItem(typeof(TreasuresOfDoomRewardDeed), 0x14EF, 1155603, 0, 20));
|
||||
Rewards.Add(new CollectionItem(typeof(TreasuresOfDoomRewardDeed), 0x14EF, 1155600, 0, 30));
|
||||
Rewards.Add(new CollectionItem(typeof(TreasuresOfDoomRewardDeed), 0x14EF, 1155602, 0, 50));
|
||||
Rewards.Add(new CollectionItem(typeof(CrookOfHumility), 0xE81, 1155624, 0, 50));
|
||||
Rewards.Add(new CollectionItem(typeof(ScepterOfPride), 0x26BC, 1155623, 0, 50));
|
||||
Rewards.Add(new CollectionItem(typeof(CloakOfLight), 0x1515, 1155608, 0, 50));
|
||||
Rewards.Add(new CollectionItem(typeof(BootsOfEscaping), 0x1711, 1155607, 0, 50));
|
||||
Rewards.Add(new CollectionItem(typeof(SterlingSilverRing), 0x1F09, 1155606, 0, 50));
|
||||
}
|
||||
}
|
||||
}
|
||||
133
Scripts/Services/Seasonal Events/TreasuresOfDoom/VaseSpawner.cs
Normal file
133
Scripts/Services/Seasonal Events/TreasuresOfDoom/VaseSpawner.cs
Normal file
@@ -0,0 +1,133 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
using Server.Engines.Points;
|
||||
using Server.ContextMenus;
|
||||
|
||||
namespace Server.Engines.TreasuresOfDoom
|
||||
{
|
||||
public class VaseSpawner : ISpawner
|
||||
{
|
||||
public List<AncientClayVase> Vases { get; set; }
|
||||
public readonly int VaseCount = 3;
|
||||
public readonly Rectangle2D SpawnRecs = new Rectangle2D(257, 5, 249, 257);
|
||||
|
||||
public static readonly int MinSpawn = 1;
|
||||
public static readonly int MaxSpawn = 3;
|
||||
|
||||
public bool UnlinkOnTaming { get { return false; } }
|
||||
public Point3D HomeLocation { get { return Point3D.Zero; } }
|
||||
public int HomeRange { get { return 0; } }
|
||||
|
||||
public static VaseSpawner Instance { get; set; }
|
||||
|
||||
public VaseSpawner()
|
||||
{
|
||||
}
|
||||
|
||||
public void Remove(ISpawnable spawn)
|
||||
{
|
||||
if (spawn is AncientClayVase)
|
||||
{
|
||||
RemoveVase((AncientClayVase)spawn);
|
||||
}
|
||||
}
|
||||
|
||||
public void GetSpawnProperties(ISpawnable spawn, ObjectPropertyList list)
|
||||
{
|
||||
}
|
||||
|
||||
public void GetSpawnContextEntries(ISpawnable spawn, Mobile m, List<ContextMenuEntry> list)
|
||||
{
|
||||
}
|
||||
|
||||
public void AddVase(AncientClayVase vase)
|
||||
{
|
||||
if (Vases == null)
|
||||
{
|
||||
Vases = new List<AncientClayVase>();
|
||||
}
|
||||
|
||||
if (!Vases.Contains(vase))
|
||||
{
|
||||
Vases.Add(vase);
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveVase(AncientClayVase vase)
|
||||
{
|
||||
if (Vases != null)
|
||||
{
|
||||
if (Vases.Contains(vase))
|
||||
{
|
||||
Vases.Remove(vase);
|
||||
}
|
||||
|
||||
if (PointsSystem.TreasuresOfDoom.InSeason && Vases.Count < VaseCount)
|
||||
{
|
||||
Timer.DelayCall(TimeSpan.FromMinutes(Utility.RandomMinMax(MinSpawn, MaxSpawn)), () =>
|
||||
{
|
||||
CreateVases(1);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void CheckVases()
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
if (Vases == null)
|
||||
{
|
||||
Vases = new List<AncientClayVase>();
|
||||
}
|
||||
|
||||
count = VaseCount - Vases.Count;
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
CreateVases(count);
|
||||
}
|
||||
}
|
||||
|
||||
public void CreateVases(int count)
|
||||
{
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
var vase = new AncientClayVase(true);
|
||||
ItemFlags.SetStealable(vase, true);
|
||||
vase.Movable = false;
|
||||
|
||||
vase.Spawner = this;
|
||||
|
||||
AddVase(vase);
|
||||
|
||||
Point3D p = Point3D.Zero;
|
||||
|
||||
do
|
||||
{
|
||||
p = Map.Malas.GetRandomSpawnPoint(SpawnRecs);
|
||||
}
|
||||
while (p == Point3D.Zero || !Map.Malas.CanSpawnMobile(p));
|
||||
|
||||
vase.OnBeforeSpawn(p, Map.Malas);
|
||||
vase.MoveToWorld(p, Map.Malas);
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddToSpawner(AncientClayVase vase)
|
||||
{
|
||||
if (Instance == null)
|
||||
{
|
||||
Instance = new VaseSpawner();
|
||||
}
|
||||
|
||||
Instance.AddVase(vase);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Engines.Points;
|
||||
|
||||
namespace Server.Engines.Khaldun
|
||||
{
|
||||
public class CaddelliteVendor : BaseVendor
|
||||
{
|
||||
private readonly List<SBInfo> m_SBInfos = new List<SBInfo>();
|
||||
protected override List<SBInfo> SBInfos { get { return this.m_SBInfos; } }
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
m_SBInfos.Add(new SBCaddelliteTinker(this));
|
||||
}
|
||||
|
||||
public static CaddelliteVendor InstanceTram { get; set; }
|
||||
public static CaddelliteVendor InstanceFel { get; set; }
|
||||
|
||||
[Constructable]
|
||||
public CaddelliteVendor()
|
||||
: base("the Tinker")
|
||||
{
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
base.InitBody();
|
||||
|
||||
Name = NameList.RandomName("male");
|
||||
CantWalk = true;
|
||||
|
||||
Hue = Utility.RandomSkinHue();
|
||||
Body = 0x190;
|
||||
HairItemID = Race.RandomHair(false);
|
||||
HairHue = Race.RandomHairHue();
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
SetWearable(new SmithyHammer());
|
||||
SetWearable(new LongPants(), Utility.RandomBlueHue());
|
||||
SetWearable(new Shirt());
|
||||
SetWearable(new FullApron());
|
||||
SetWearable(new ThighBoots());
|
||||
}
|
||||
|
||||
public CaddelliteVendor(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
InstanceFel = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
InstanceTram = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class SBCaddelliteTinker : SBInfo
|
||||
{
|
||||
private readonly List<GenericBuyInfo> m_BuyInfo;
|
||||
private readonly IShopSellInfo m_SellInfo = new InternalSellInfo();
|
||||
|
||||
public SBCaddelliteTinker(BaseVendor owner)
|
||||
{
|
||||
m_BuyInfo = new InternalBuyInfo(owner);
|
||||
}
|
||||
|
||||
public override IShopSellInfo SellInfo { get { return m_SellInfo; } }
|
||||
public override List<GenericBuyInfo> BuyInfo { get { return m_BuyInfo; } }
|
||||
|
||||
public class InternalBuyInfo : List<GenericBuyInfo>
|
||||
{
|
||||
public InternalBuyInfo(BaseVendor owner)
|
||||
{
|
||||
Add(new GenericBuyInfo(typeof(CaddellitePickaxe), 101267, 500, 3718, 0));
|
||||
Add(new GenericBuyInfo(typeof(CaddelliteHatchet), 101266, 500, 3907, 0));
|
||||
Add(new GenericBuyInfo(typeof(CaddelliteFishingPole), 101265, 500, 3520, 0));
|
||||
}
|
||||
}
|
||||
public class InternalSellInfo : GenericSellInfo
|
||||
{
|
||||
public InternalSellInfo()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,202 @@
|
||||
#region References
|
||||
using Server.Items;
|
||||
using Server.Misc;
|
||||
using Server.Targeting;
|
||||
using System;
|
||||
#endregion
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("an inhuman corpse")]
|
||||
public class CultistAmbusher : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public CultistAmbusher()
|
||||
: base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
|
||||
{
|
||||
Name = "Cultist Ambusher";
|
||||
Body = 0x190;
|
||||
Hue = 2500;
|
||||
BaseSoundID = 0x45A;
|
||||
|
||||
SetStr(150, 200);
|
||||
SetDex(150);
|
||||
SetInt(25, 44);
|
||||
|
||||
SetHits(500, 1000);
|
||||
|
||||
SetDamage(8, 18);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 10, 20);
|
||||
SetResistance(ResistanceType.Fire, 10, 20);
|
||||
SetResistance(ResistanceType.Cold, 10, 20);
|
||||
SetResistance(ResistanceType.Poison, 10, 20);
|
||||
SetResistance(ResistanceType.Energy, 10, 20);
|
||||
|
||||
SetSkill(SkillName.Fencing, 100.0, 120.0);
|
||||
SetSkill(SkillName.Macing, 100.0, 120.0);
|
||||
SetSkill(SkillName.MagicResist, 100.0, 120.0);
|
||||
SetSkill(SkillName.Swords, 100.0, 120.0);
|
||||
SetSkill(SkillName.Tactics, 100.0, 120.0);
|
||||
SetSkill(SkillName.Archery, 100.0, 120.0);
|
||||
SetSkill(SkillName.Parry, 100.0, 120.0);
|
||||
SetSkill(SkillName.Tactics, 100.0, 120.0);
|
||||
|
||||
Fame = 8000;
|
||||
Karma = -8000;
|
||||
|
||||
switch (Utility.Random(3))
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
SetWearable(new RingmailChest(), 1510);
|
||||
SetWearable(new ChainLegs(), 1345);
|
||||
SetWearable(new Sandals(), 1345);
|
||||
SetWearable(new LeatherNinjaHood(), 1345);
|
||||
SetWearable(new LeatherGloves(), 1345);
|
||||
SetWearable(new LeatherArms(), 1345);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SetWearable(new Robe(2306));
|
||||
SetWearable(new BearMask(2683));
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SetWearable(new Shirt(676));
|
||||
SetWearable(new RingmailLegs());
|
||||
SetWearable(new StuddedArms());
|
||||
SetWearable(new StuddedGloves());
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SetWearable(new SkullCap(2406));
|
||||
SetWearable(new JinBaori(1001));
|
||||
SetWearable(new Shirt());
|
||||
SetWearable(new ShortPants(902));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (Utility.Random(2))
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
SetWearable(Loot.Construct(new Type[] { typeof(Kryss), typeof(Spear), typeof(ShortSpear), typeof(Lance), typeof(Pike), typeof(WarMace), typeof(Mace), typeof(WarHammer), typeof(WarAxe) }));
|
||||
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SetWearable(Loot.Construct(new Type[] { typeof(Yumi), typeof(Crossbow), typeof(RepeatingCrossbow), typeof(HeavyCrossbow) }));
|
||||
|
||||
RangeFight = 7;
|
||||
AI = AIType.AI_Archer;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnBeforeDamage(Mobile from, ref int totalDamage, Server.DamageType type)
|
||||
{
|
||||
if (Region.IsPartOf("Khaldun") && IsChampionSpawn && !Caddellite.CheckDamage(from, type))
|
||||
{
|
||||
totalDamage = 0;
|
||||
}
|
||||
|
||||
base.OnBeforeDamage(from, ref totalDamage, type);
|
||||
}
|
||||
|
||||
public override void OnGotMeleeAttack(Mobile attacker)
|
||||
{
|
||||
base.OnGotMeleeAttack(attacker);
|
||||
|
||||
if (Map != null && AI == AIType.AI_Archer && 0.4 >= Utility.RandomDouble())
|
||||
{
|
||||
Point3D p = FindLocation(Map, Location, 10);
|
||||
Effects.SendLocationParticles(EffectItem.Create(Location, Map, EffectItem.DefaultDuration), 0x3728, 10, 10, 2023);
|
||||
Location = p;
|
||||
Effects.SendLocationParticles(EffectItem.Create(p, Map, EffectItem.DefaultDuration), 0x3728, 10, 10, 5023);
|
||||
|
||||
PlaySound(0x1FE);
|
||||
}
|
||||
}
|
||||
|
||||
private Point3D FindLocation(Map map, Point3D center, int range)
|
||||
{
|
||||
int cx = center.X;
|
||||
int cy = center.Y;
|
||||
|
||||
for (int i = 0; i < 20; ++i)
|
||||
{
|
||||
int x = cx + Utility.Random(range * 2) - range;
|
||||
int y = cy + Utility.Random(range * 2) - range;
|
||||
|
||||
if ((cx - x) * (cx - x) + (cy - y) * (cy - y) > range * range)
|
||||
continue;
|
||||
|
||||
int z = map.GetAverageZ(x, y);
|
||||
|
||||
if (!map.CanFit(x, y, z, 6, false, false))
|
||||
continue;
|
||||
|
||||
int topZ = z;
|
||||
|
||||
foreach (Item item in map.GetItemsInRange(new Point3D(x, y, z), 0))
|
||||
{
|
||||
topZ = Math.Max(topZ, item.Z + item.ItemData.CalcHeight);
|
||||
}
|
||||
|
||||
return new Point3D(x, y, topZ);
|
||||
}
|
||||
|
||||
return center;
|
||||
}
|
||||
|
||||
public override bool AlwaysMurderer { get { return true; } }
|
||||
public override bool ShowFameTitle { get { return false; } }
|
||||
|
||||
public CultistAmbusher(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Rich);
|
||||
}
|
||||
|
||||
public override WeaponAbility GetWeaponAbility()
|
||||
{
|
||||
BaseWeapon wep = Weapon as BaseWeapon;
|
||||
|
||||
if (wep != null && !(wep is Fists))
|
||||
{
|
||||
if (Utility.RandomDouble() > 0.5)
|
||||
return wep.PrimaryAbility;
|
||||
|
||||
return wep.SecondaryAbility;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,369 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Server.Commands;
|
||||
using Server.Engines.CannedEvil;
|
||||
using Server.Items;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("a Khal Ankur corpse")]
|
||||
public class KhalAnkur : BaseChampion
|
||||
{
|
||||
public ChampionSpawn Spawn { get; set; }
|
||||
private DateTime m_NextSpawn;
|
||||
private DateTime m_NextSay;
|
||||
private DateTime m_NextAbilityTime;
|
||||
|
||||
[Constructable]
|
||||
public KhalAnkur()
|
||||
: base(AIType.AI_Necro)
|
||||
{
|
||||
Name = "Khal Ankur";
|
||||
Body = 0x5C7;
|
||||
BaseSoundID = 0x301;
|
||||
|
||||
SetStr(700, 800);
|
||||
SetDex(500, 600);
|
||||
SetInt(800, 900);
|
||||
|
||||
SetHits(30000);
|
||||
|
||||
SetDamage(28, 35);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 50);
|
||||
SetDamageType(ResistanceType.Cold, 25);
|
||||
SetDamageType(ResistanceType.Poison, 25);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 90);
|
||||
SetResistance(ResistanceType.Fire, 70, 80);
|
||||
SetResistance(ResistanceType.Cold, 70, 80);
|
||||
SetResistance(ResistanceType.Poison, 80, 90);
|
||||
SetResistance(ResistanceType.Energy, 80, 90);
|
||||
|
||||
SetSkill(SkillName.Wrestling, 120.0);
|
||||
SetSkill(SkillName.Tactics, 80.0, 100.0);
|
||||
SetSkill(SkillName.MagicResist, 150.0);
|
||||
SetSkill(SkillName.DetectHidden, 100.0);
|
||||
SetSkill(SkillName.Parry, 80.0, 100.0);
|
||||
SetSkill(SkillName.Necromancy, 120.0);
|
||||
SetSkill(SkillName.SpiritSpeak, 120.0);
|
||||
|
||||
Fame = 28000;
|
||||
Karma = -28000;
|
||||
|
||||
VirtualArmor = 80;
|
||||
|
||||
SetMagicalAbility(MagicalAbility.WrestlingMastery);
|
||||
}
|
||||
|
||||
public KhalAnkur(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool Unprovokable { get { return true; } }
|
||||
public override bool BleedImmune { get { return true; } }
|
||||
public override Poison PoisonImmune { get { return Poison.Lethal; } }
|
||||
public override bool ShowFameTitle { get { return false; } }
|
||||
public override bool ClickTitle { get { return false; } }
|
||||
public override bool AlwaysMurderer { get { return true; } }
|
||||
public override bool AutoDispel { get { return true; } }
|
||||
public override double AutoDispelChance { get { return 1.0; } }
|
||||
|
||||
public override ChampionSkullType SkullType { get { return ChampionSkullType.None; } }
|
||||
|
||||
public override Type[] UniqueList
|
||||
{
|
||||
get
|
||||
{
|
||||
return new Type[] { };
|
||||
}
|
||||
}
|
||||
public override Type[] SharedList
|
||||
{
|
||||
get
|
||||
{
|
||||
return new Type[] { };
|
||||
}
|
||||
}
|
||||
public override Type[] DecorativeList
|
||||
{
|
||||
get
|
||||
{
|
||||
return new Type[] { };
|
||||
}
|
||||
}
|
||||
public override MonsterStatuetteType[] StatueTypes
|
||||
{
|
||||
get
|
||||
{
|
||||
return new MonsterStatuetteType[] { };
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnBeforeDamage(Mobile from, ref int totalDamage, Server.DamageType type)
|
||||
{
|
||||
if (Region.IsPartOf("Khaldun") && IsChampionSpawn && !Caddellite.CheckDamage(from, type))
|
||||
{
|
||||
totalDamage = 0;
|
||||
}
|
||||
|
||||
base.OnBeforeDamage(from, ref totalDamage, type);
|
||||
}
|
||||
|
||||
public override void OnGaveMeleeAttack(Mobile defender)
|
||||
{
|
||||
base.OnGaveMeleeAttack(defender);
|
||||
|
||||
if (Hue == 0 && Hits < HitsMax * 0.60 && DateTime.UtcNow > m_NextAbilityTime && 0.2 > Utility.RandomDouble())
|
||||
{
|
||||
Hue = 2745;
|
||||
new InternalTimer(this);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if (Blessed)
|
||||
{
|
||||
from.SendLocalizedMessage(1071372); // It's covered with treasure guardian's magical power. To touch it, you need to beat them!
|
||||
}
|
||||
|
||||
base.OnDoubleClick(from);
|
||||
}
|
||||
|
||||
public override void OnChampPopped(ChampionSpawn spawn)
|
||||
{
|
||||
Blessed = true;
|
||||
Spawn = spawn;
|
||||
}
|
||||
|
||||
public override void OnThink()
|
||||
{
|
||||
base.OnThink();
|
||||
|
||||
if (Spawn == null || Map == null)
|
||||
return;
|
||||
|
||||
if (!Utility.InRange(Location, Home, 150))
|
||||
{
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(5), () => { Location = Home; });
|
||||
}
|
||||
|
||||
if (Blessed)
|
||||
{
|
||||
if (m_NextSay < DateTime.UtcNow)
|
||||
{
|
||||
Say(1158752 + Utility.Random(5), 0x25);
|
||||
|
||||
m_NextSay = DateTime.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(20, 40));
|
||||
}
|
||||
|
||||
if (m_NextSpawn < DateTime.UtcNow)
|
||||
{
|
||||
BaseCreature bc = new KhalAnkurWarriors(KhalAnkurWarriors.WarriorType.General);
|
||||
|
||||
int x, y, z = 0;
|
||||
|
||||
Point3D p = Location;
|
||||
|
||||
for (int i = 0; i < 25; i++)
|
||||
{
|
||||
x = Utility.RandomMinMax(p.X - 4, p.X + 4);
|
||||
y = Utility.RandomMinMax(p.Y - 4, p.Y + 4);
|
||||
z = Map.GetAverageZ(x, y);
|
||||
|
||||
if (Map.CanSpawnMobile(x, y, z))
|
||||
{
|
||||
p = new Point3D(x, y, z);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bc.MoveToWorld(p, Map);
|
||||
bc.FixedParticles(0x3709, 1, 30, 9963, 13, 3, EffectLayer.Head);
|
||||
bc.Home = p;
|
||||
bc.IsChampionSpawn = true;
|
||||
Spawn.Creatures.Add(bc);
|
||||
|
||||
m_NextSpawn = DateTime.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(120, 180));
|
||||
}
|
||||
else if (Spawn.Creatures.OfType<KhalAnkurWarriors>().Where(x => x._Type == KhalAnkurWarriors.WarriorType.General && !x.Deleted).Count() <= 0)
|
||||
{
|
||||
Blessed = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class InternalTimer : Timer
|
||||
{
|
||||
private KhalAnkur m_Mobile;
|
||||
private int m_Tick;
|
||||
|
||||
public InternalTimer(KhalAnkur mob)
|
||||
: base(TimeSpan.FromSeconds(2), TimeSpan.FromSeconds(2))
|
||||
{
|
||||
m_Tick = 1;
|
||||
m_Mobile = mob;
|
||||
Start();
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if (!m_Mobile.Alive || m_Mobile.Deleted || m_Mobile.Map == null)
|
||||
{
|
||||
Stop();
|
||||
}
|
||||
else if (m_Tick < 15)
|
||||
{
|
||||
Point3D p = FindLocation(m_Mobile.Map, m_Mobile.Location, 7);
|
||||
Effects.SendLocationEffect(p, m_Mobile.Map, 0x3789, 30, 1, 2062, 0x4);
|
||||
|
||||
m_Tick++;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Mobile.ClearAround();
|
||||
Stop();
|
||||
}
|
||||
}
|
||||
|
||||
private Point3D FindLocation(Map map, Point3D center, int range)
|
||||
{
|
||||
int cx = center.X;
|
||||
int cy = center.Y;
|
||||
|
||||
for (int i = 0; i < 20; ++i)
|
||||
{
|
||||
int x = cx + Utility.Random(range * 2) - range;
|
||||
int y = cy + Utility.Random(range * 2) - range;
|
||||
|
||||
if ((cx - x) * (cx - x) + (cy - y) * (cy - y) > range * range)
|
||||
continue;
|
||||
|
||||
int z = map.GetAverageZ(x, y);
|
||||
|
||||
if (!map.CanFit(x, y, z, 6, false, false))
|
||||
continue;
|
||||
|
||||
int topZ = z;
|
||||
|
||||
foreach (Item item in map.GetItemsInRange(new Point3D(x, y, z), 0))
|
||||
{
|
||||
topZ = Math.Max(topZ, item.Z + item.ItemData.CalcHeight);
|
||||
}
|
||||
|
||||
return new Point3D(x, y, topZ);
|
||||
}
|
||||
|
||||
return center;
|
||||
}
|
||||
}
|
||||
|
||||
private void ClearAround()
|
||||
{
|
||||
Point3D loc = Location;
|
||||
Map pmmap = Map;
|
||||
|
||||
List<Point3D> points = new List<Point3D>();
|
||||
|
||||
Server.Misc.Geometry.Circle2D(loc, pmmap, 7, (pnt, map) =>
|
||||
{
|
||||
if (map.CanFit(pnt, 0) && InLOS(pnt))
|
||||
points.Add(pnt);
|
||||
});
|
||||
|
||||
if (pmmap != Map.Internal && pmmap != null)
|
||||
{
|
||||
Server.Misc.Geometry.Circle2D(loc, pmmap, 6, (pnt, map) =>
|
||||
{
|
||||
if (map.CanFit(pnt, 0) && InLOS(pnt) && Utility.RandomBool())
|
||||
{
|
||||
Effects.SendPacket(pnt, map, new ParticleEffect(EffectType.FixedXYZ, Serial, Serial.Zero, 0x3789, pnt, pnt, 1, 30, false, false, 0, 3, 0, 9502, 1, Serial, 153, 0));
|
||||
Effects.SendPacket(pnt, map, new ParticleEffect(EffectType.FixedXYZ, Serial, Serial.Zero, 0x9DAC, pnt, pnt, 1, 30, false, false, 0, 0, 0, 9502, 1, Serial, 153, 0));
|
||||
}
|
||||
});
|
||||
|
||||
Server.Misc.Geometry.Circle2D(loc, pmmap, 7, (pnt, map) =>
|
||||
{
|
||||
if (map.CanFit(pnt, 0) && InLOS(pnt) && Utility.RandomBool())
|
||||
{
|
||||
Effects.SendPacket(pnt, map, new ParticleEffect(EffectType.FixedXYZ, Serial, Serial.Zero, 0x3789, pnt, pnt, 1, 30, false, false, 0, 3, 0, 9502, 1, Serial, 153, 0));
|
||||
Effects.SendPacket(pnt, map, new ParticleEffect(EffectType.FixedXYZ, Serial, Serial.Zero, 0x9DAC, pnt, pnt, 1, 30, false, false, 0, 0, 0, 9502, 1, Serial, 153, 0));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Timer.DelayCall(TimeSpan.FromMilliseconds(500), () =>
|
||||
{
|
||||
IPooledEnumerable eable = GetMobilesInRange(6);
|
||||
|
||||
foreach (Mobile from in eable)
|
||||
{
|
||||
if (!from.Alive || from == this || from.AccessLevel > AccessLevel.Player)
|
||||
continue;
|
||||
|
||||
if (from is PlayerMobile || (from is BaseCreature && (((BaseCreature)from).Controlled) || ((BaseCreature)from).Summoned))
|
||||
{
|
||||
Point3D point = points[Utility.Random(points.Count)];
|
||||
from.MoveToWorld(point, pmmap);
|
||||
from.Frozen = true;
|
||||
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(3), () =>
|
||||
{
|
||||
from.Frozen = false;
|
||||
from.SendLocalizedMessage(1005603); // You can move again!
|
||||
});
|
||||
|
||||
if (CanBeHarmful(from))
|
||||
{
|
||||
double damage = from.Hits * 0.6;
|
||||
|
||||
if (damage < 10.0)
|
||||
damage = 10.0;
|
||||
else if (damage > 75.0)
|
||||
damage = 75.0;
|
||||
|
||||
DoHarmful(from);
|
||||
|
||||
AOS.Damage(from, this, (int)damage, 100, 0, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
});
|
||||
|
||||
Hue = 0;
|
||||
|
||||
m_NextAbilityTime = DateTime.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(200, 300));
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.UltraRich, 3);
|
||||
AddLoot(LootPack.Meager);
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
|
||||
writer.WriteItem<ChampionSpawn>(Spawn);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Spawn = reader.ReadItem<ChampionSpawn>();
|
||||
|
||||
Hue = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,212 @@
|
||||
using System;
|
||||
using Server.Items;
|
||||
using System.Linq;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("a human corpse")]
|
||||
public class KhalAnkurWarriors : BaseCreature
|
||||
{
|
||||
public static readonly WarriorType[] Types =
|
||||
Enum.GetValues(typeof(WarriorType))
|
||||
.Cast<WarriorType>()
|
||||
.ToArray();
|
||||
|
||||
public static WarriorType RandomType { get { return Types[Utility.Random(Types.Length)]; } }
|
||||
|
||||
public enum WarriorType
|
||||
{
|
||||
Scout,
|
||||
Corporal,
|
||||
Lieutenant,
|
||||
Captain,
|
||||
General
|
||||
}
|
||||
|
||||
public WarriorType _Type { get; set; }
|
||||
|
||||
[Constructable]
|
||||
public KhalAnkurWarriors()
|
||||
: this(RandomType)
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public KhalAnkurWarriors(WarriorType type)
|
||||
: base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
|
||||
{
|
||||
_Type = type;
|
||||
|
||||
if (Female = Utility.RandomBool())
|
||||
{
|
||||
Body = 0x191;
|
||||
Name = NameList.RandomName("female");
|
||||
}
|
||||
else
|
||||
{
|
||||
Body = 0x190;
|
||||
Name = NameList.RandomName("male");
|
||||
}
|
||||
|
||||
BaseSoundID = 0x45A;
|
||||
|
||||
SetStr(150, 250);
|
||||
SetDex(150);
|
||||
SetInt(100, 150);
|
||||
|
||||
SetDamage(20, 30);
|
||||
|
||||
SetHits(600, 800);
|
||||
|
||||
string _title = null;
|
||||
|
||||
switch (_Type)
|
||||
{
|
||||
case WarriorType.Scout: _title = "the Scout"; break;
|
||||
case WarriorType.Corporal: _title = "the Corporal"; break;
|
||||
case WarriorType.Lieutenant: _title = "the Lieutenant"; break;
|
||||
case WarriorType.Captain: _title = "the Captain"; SetHits(1000, 1500); break;
|
||||
case WarriorType.General: _title = "the General"; SetHits(1000, 1500); break;
|
||||
}
|
||||
|
||||
Title = _title;
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 20, 30);
|
||||
SetResistance(ResistanceType.Fire, 20, 30);
|
||||
SetResistance(ResistanceType.Cold, 20, 30);
|
||||
SetResistance(ResistanceType.Poison, 20, 30);
|
||||
SetResistance(ResistanceType.Energy, 20, 30);
|
||||
|
||||
SetSkill(SkillName.Fencing, 105.0, 130.0);
|
||||
SetSkill(SkillName.Macing, 1105.0, 130.0);
|
||||
SetSkill(SkillName.MagicResist, 105.0, 130.0);
|
||||
SetSkill(SkillName.Swords, 105.0, 130.0);
|
||||
SetSkill(SkillName.Tactics, 105.0, 130.0);
|
||||
SetSkill(SkillName.Archery, 105.0, 130.0);
|
||||
SetSkill(SkillName.Magery, 105.0, 130.0);
|
||||
SetSkill(SkillName.Meditation, 105.0, 130.0);
|
||||
|
||||
Fame = 5000;
|
||||
Karma = -5000;
|
||||
|
||||
switch (Utility.Random(4))
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
Hue = 2697;
|
||||
SetWearable(new ChainChest(), Hue);
|
||||
SetWearable(new ChainCoif(), Hue);
|
||||
SetWearable(new Cloak(), Hue);
|
||||
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
Hue = 2697;
|
||||
SetWearable(new PlateChest(), Hue);
|
||||
SetWearable(new PlateLegs(), Hue);
|
||||
SetWearable(new Cloak(), Hue);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
Hue = 2684;
|
||||
SetWearable(new PlateChest(), Hue);
|
||||
SetWearable(new PlateLegs(), Hue);
|
||||
SetWearable(new PlateArms(), Hue);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
Hue = 2697;
|
||||
SetWearable(new ChainChest(), Hue);
|
||||
SetWearable(new ChainLegs(), Hue);
|
||||
SetWearable(new Boots(Hue));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (Utility.Random(2))
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
SetWearable(Loot.Construct(new Type[] { typeof(Spear), typeof(QuarterStaff), typeof(BlackStaff), typeof(Tessen), typeof(Cleaver), typeof(Lajatang) }));
|
||||
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SetWearable(Loot.Construct(new Type[] { typeof(Yumi), typeof(Crossbow), typeof(RepeatingCrossbow), typeof(HeavyCrossbow) }));
|
||||
|
||||
RangeFight = 7;
|
||||
AI = AIType.AI_Archer;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int hairHue = Utility.RandomNondyedHue();
|
||||
|
||||
Utility.AssignRandomHair(this, hairHue);
|
||||
|
||||
if (Utility.Random(7) != 0)
|
||||
Utility.AssignRandomFacialHair(this, hairHue);
|
||||
}
|
||||
|
||||
public override void OnBeforeDamage(Mobile from, ref int totalDamage, Server.DamageType type)
|
||||
{
|
||||
if (Region.IsPartOf("Khaldun") && IsChampionSpawn && !Caddellite.CheckDamage(from, type))
|
||||
{
|
||||
totalDamage = 0;
|
||||
}
|
||||
|
||||
base.OnBeforeDamage(from, ref totalDamage, type);
|
||||
}
|
||||
|
||||
public override bool AlwaysMurderer { get { return true; } }
|
||||
public override bool ShowFameTitle { get { return false; } }
|
||||
|
||||
public KhalAnkurWarriors(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Rich);
|
||||
}
|
||||
|
||||
public override WeaponAbility GetWeaponAbility()
|
||||
{
|
||||
BaseWeapon wep = Weapon as BaseWeapon;
|
||||
|
||||
if (wep != null && !(wep is Fists))
|
||||
{
|
||||
if (Utility.RandomDouble() > 0.5)
|
||||
return wep.PrimaryAbility;
|
||||
|
||||
return wep.SecondaryAbility;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write((int)_Type);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
_Type = (WarriorType)reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
using Server.Items;
|
||||
using System;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("a Bloody corpse")]
|
||||
public class KhaldunBlood : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public KhaldunBlood()
|
||||
: base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
|
||||
{
|
||||
Name = "Blood";
|
||||
Body = 0x33;
|
||||
BaseSoundID = 456;
|
||||
|
||||
Hue = Utility.RandomList(33, 1157);
|
||||
|
||||
SetStr(220, 286);
|
||||
SetDex(125, 130);
|
||||
SetInt(100, 101);
|
||||
|
||||
SetHits(130);
|
||||
|
||||
SetDamage(8, 18);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 30, 50);
|
||||
SetResistance(ResistanceType.Fire, 20, 30);
|
||||
SetResistance(ResistanceType.Cold, 50, 60);
|
||||
SetResistance(ResistanceType.Poison, 20, 30);
|
||||
SetResistance(ResistanceType.Energy, 30, 40);
|
||||
|
||||
SetSkill(SkillName.MagicResist, 60.0, 80.0);
|
||||
SetSkill(SkillName.Tactics, 85.0, 100.0);
|
||||
SetSkill(SkillName.Wrestling, 85.0, 100.0);
|
||||
SetSkill(SkillName.DetectHidden, 40.0);
|
||||
|
||||
Fame = 300;
|
||||
Karma = -300;
|
||||
|
||||
VirtualArmor = 8;
|
||||
|
||||
SetWeaponAbility(WeaponAbility.BleedAttack);
|
||||
}
|
||||
|
||||
public KhaldunBlood(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnBeforeDamage(Mobile from, ref int totalDamage, Server.DamageType type)
|
||||
{
|
||||
if (Region.IsPartOf("Khaldun") && IsChampionSpawn && !Caddellite.CheckDamage(from, type))
|
||||
{
|
||||
totalDamage = 0;
|
||||
}
|
||||
|
||||
base.OnBeforeDamage(from, ref totalDamage, type);
|
||||
}
|
||||
|
||||
public override Poison PoisonImmune { get { return Poison.Lesser; } }
|
||||
public override Poison HitPoison { get { return Poison.Lesser; } }
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Poor);
|
||||
AddLoot(LootPack.Gems);
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,173 @@
|
||||
using System;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("an incorporeal corpse")]
|
||||
public class ShadowFiend : BaseCreature
|
||||
{
|
||||
private UnhideTimer m_Timer;
|
||||
|
||||
[Constructable]
|
||||
public ShadowFiend()
|
||||
: base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
|
||||
{
|
||||
Name = "a shadow fiend";
|
||||
Body = 0x10;
|
||||
Hue = 2051;
|
||||
|
||||
// this to allow shadow fiend to loot from corpses
|
||||
Backpack backpack = new Backpack();
|
||||
backpack.Movable = false;
|
||||
AddItem(backpack);
|
||||
|
||||
SetStr(300, 400);
|
||||
SetDex(200, 250);
|
||||
SetInt(45, 55);
|
||||
|
||||
SetHits(300, 500);
|
||||
|
||||
SetDamage(10, 22);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 20);
|
||||
SetDamageType(ResistanceType.Cold, 80);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 30, 40);
|
||||
SetResistance(ResistanceType.Fire, 20, 30);
|
||||
SetResistance(ResistanceType.Cold, 50, 70);
|
||||
SetResistance(ResistanceType.Poison, 60, 70);
|
||||
SetResistance(ResistanceType.Energy, 5, 10);
|
||||
|
||||
SetSkill(SkillName.MagicResist, 120.0);
|
||||
SetSkill(SkillName.Tactics, 100.0);
|
||||
SetSkill(SkillName.Wrestling, 100.0);
|
||||
SetSkill(SkillName.DetectHidden, 250.0);
|
||||
SetSkill(SkillName.Hiding, 100.0);
|
||||
SetSkill(SkillName.Meditation, 100.0);
|
||||
SetSkill(SkillName.Focus, 0.0, 20.0);
|
||||
|
||||
Fame = 1000;
|
||||
Karma = -1000;
|
||||
|
||||
m_Timer = new UnhideTimer(this);
|
||||
m_Timer.Start();
|
||||
}
|
||||
|
||||
public override void OnBeforeDamage(Mobile from, ref int totalDamage, Server.DamageType type)
|
||||
{
|
||||
if (Region.IsPartOf("Khaldun") && IsChampionSpawn && !Caddellite.CheckDamage(from, type))
|
||||
{
|
||||
totalDamage = 0;
|
||||
}
|
||||
|
||||
base.OnBeforeDamage(from, ref totalDamage, type);
|
||||
}
|
||||
|
||||
public ShadowFiend(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool DeleteCorpseOnDeath
|
||||
{
|
||||
get
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
public override bool CanRummageCorpses
|
||||
{
|
||||
get
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
public override int GetIdleSound()
|
||||
{
|
||||
return 0x37A;
|
||||
}
|
||||
|
||||
public override int GetAngerSound()
|
||||
{
|
||||
return 0x379;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x381;
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x37F;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x380;
|
||||
}
|
||||
|
||||
public override bool OnBeforeDeath()
|
||||
{
|
||||
if (Backpack != null)
|
||||
Backpack.Destroy();
|
||||
|
||||
Effects.SendLocationEffect(Location, Map, 0x376A, 10, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
m_Timer = new UnhideTimer(this);
|
||||
m_Timer.Start();
|
||||
}
|
||||
|
||||
public override void OnAfterDelete()
|
||||
{
|
||||
if (m_Timer != null)
|
||||
m_Timer.Stop();
|
||||
|
||||
m_Timer = null;
|
||||
|
||||
base.OnAfterDelete();
|
||||
}
|
||||
|
||||
private class UnhideTimer : Timer
|
||||
{
|
||||
private readonly ShadowFiend m_Owner;
|
||||
public UnhideTimer(ShadowFiend owner)
|
||||
: base(TimeSpan.FromSeconds(30.0))
|
||||
{
|
||||
m_Owner = owner;
|
||||
Priority = TimerPriority.OneSecond;
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if (m_Owner.Deleted)
|
||||
{
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
IPooledEnumerable eable = m_Owner.GetMobilesInRange(3);
|
||||
|
||||
foreach (Mobile m in eable)
|
||||
{
|
||||
if (m != m_Owner && m.Player && m.Hidden && m_Owner.CanBeHarmful(m) && m.IsPlayer())
|
||||
m.Hidden = false;
|
||||
}
|
||||
eable.Free();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
using System;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("a skeletal corpse")]
|
||||
public class SkelementalKnight : BaseCreature
|
||||
{
|
||||
public enum SkeletalType
|
||||
{
|
||||
Fire,
|
||||
Cold,
|
||||
Poison,
|
||||
Energy
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public SkelementalKnight()
|
||||
: this(Utility.RandomBool() ? SkeletalType.Energy : SkeletalType.Poison)
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public SkelementalKnight(SkeletalType type)
|
||||
: base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
|
||||
{
|
||||
Name = "Skelemental Knight";
|
||||
Body = 0x93;
|
||||
BaseSoundID = 451;
|
||||
|
||||
int fire = 100, cold = 100, poison = 100, energy = 100;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case SkeletalType.Fire:
|
||||
{
|
||||
Hue = 2634;
|
||||
SetDamageType(ResistanceType.Fire, 100);
|
||||
cold = 5;
|
||||
break;
|
||||
}
|
||||
case SkeletalType.Cold:
|
||||
{
|
||||
Hue = 2581;
|
||||
SetDamageType(ResistanceType.Cold, 100);
|
||||
fire = 5;
|
||||
break;
|
||||
}
|
||||
case SkeletalType.Poison:
|
||||
{
|
||||
Hue = 2688;
|
||||
SetDamageType(ResistanceType.Poison, 100);
|
||||
energy = 5;
|
||||
break;
|
||||
}
|
||||
case SkeletalType.Energy:
|
||||
{
|
||||
Hue = 2717;
|
||||
SetDamageType(ResistanceType.Energy, 100);
|
||||
poison = 5;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
SetStr(200, 250);
|
||||
SetDex(70, 95);
|
||||
SetInt(35, 60);
|
||||
|
||||
SetHits(110, 150);
|
||||
|
||||
SetDamage(8, 18);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 0);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 95);
|
||||
SetResistance(ResistanceType.Fire, fire);
|
||||
SetResistance(ResistanceType.Cold, cold);
|
||||
SetResistance(ResistanceType.Poison, poison);
|
||||
SetResistance(ResistanceType.Energy, energy);
|
||||
|
||||
SetSkill(SkillName.MagicResist, 60.0, 80.0);
|
||||
SetSkill(SkillName.Tactics, 85.0, 100.0);
|
||||
SetSkill(SkillName.Wrestling, 85.0, 100.0);
|
||||
SetSkill(SkillName.DetectHidden, 40.0);
|
||||
|
||||
Fame = 3000;
|
||||
Karma = -3000;
|
||||
|
||||
VirtualArmor = 40;
|
||||
|
||||
switch (Utility.Random(6))
|
||||
{
|
||||
case 0:
|
||||
PackItem(new PlateArms());
|
||||
break;
|
||||
case 1:
|
||||
PackItem(new PlateChest());
|
||||
break;
|
||||
case 2:
|
||||
PackItem(new PlateGloves());
|
||||
break;
|
||||
case 3:
|
||||
PackItem(new PlateGorget());
|
||||
break;
|
||||
case 4:
|
||||
PackItem(new PlateLegs());
|
||||
break;
|
||||
case 5:
|
||||
PackItem(new PlateHelm());
|
||||
break;
|
||||
}
|
||||
|
||||
PackItem(new Scimitar());
|
||||
PackItem(new WoodenShield());
|
||||
}
|
||||
|
||||
public override void OnBeforeDamage(Mobile from, ref int totalDamage, Server.DamageType type)
|
||||
{
|
||||
if (Region.IsPartOf("Khaldun") && IsChampionSpawn && !Caddellite.CheckDamage(from, type))
|
||||
{
|
||||
totalDamage = 0;
|
||||
}
|
||||
|
||||
base.OnBeforeDamage(from, ref totalDamage, type);
|
||||
}
|
||||
|
||||
public SkelementalKnight(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool BleedImmune { get { return true; } }
|
||||
|
||||
public override TribeType Tribe { get { return TribeType.Undead; } }
|
||||
|
||||
public override OppositionGroup OppositionGroup
|
||||
{
|
||||
get
|
||||
{
|
||||
return OppositionGroup.FeyAndUndead;
|
||||
}
|
||||
}
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Average);
|
||||
AddLoot(LootPack.Meager);
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
using System;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
[CorpseName("a skeletal corpse")]
|
||||
public class SkelementalMage : BaseCreature
|
||||
{
|
||||
[Constructable]
|
||||
public SkelementalMage()
|
||||
: this(Utility.RandomBool() ? SkelementalKnight.SkeletalType.Cold : SkelementalKnight.SkeletalType.Fire)
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public SkelementalMage(SkelementalKnight.SkeletalType type)
|
||||
: base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
|
||||
{
|
||||
Name = "Skelemental Mage";
|
||||
Body = 0x32;
|
||||
BaseSoundID = 451;
|
||||
|
||||
int fire = 100, cold = 100, poison = 100, energy = 100;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case SkelementalKnight.SkeletalType.Fire:
|
||||
{
|
||||
Hue = 2634;
|
||||
SetDamageType(ResistanceType.Fire, 100);
|
||||
cold = 5;
|
||||
break;
|
||||
}
|
||||
case SkelementalKnight.SkeletalType.Cold:
|
||||
{
|
||||
Hue = 2581;
|
||||
SetDamageType(ResistanceType.Cold, 100);
|
||||
fire = 5;
|
||||
break;
|
||||
}
|
||||
case SkelementalKnight.SkeletalType.Poison:
|
||||
{
|
||||
Hue = 2688;
|
||||
SetDamageType(ResistanceType.Poison, 100);
|
||||
energy = 5;
|
||||
break;
|
||||
}
|
||||
case SkelementalKnight.SkeletalType.Energy:
|
||||
{
|
||||
Hue = 2717;
|
||||
SetDamageType(ResistanceType.Energy, 100);
|
||||
poison = 5;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
SetStr(200, 250);
|
||||
SetDex(70, 100);
|
||||
SetInt(100, 130);
|
||||
|
||||
SetHits(100, 150);
|
||||
|
||||
SetDamage(8, 18);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 0);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 95);
|
||||
SetResistance(ResistanceType.Fire, fire);
|
||||
SetResistance(ResistanceType.Cold, cold);
|
||||
SetResistance(ResistanceType.Poison, poison);
|
||||
SetResistance(ResistanceType.Energy, energy);
|
||||
|
||||
SetSkill(SkillName.MagicResist, 60.0, 80.0);
|
||||
SetSkill(SkillName.Tactics, 75.0, 100.0);
|
||||
SetSkill(SkillName.Wrestling, 85.0, 100.0);
|
||||
SetSkill(SkillName.DetectHidden, 50.0);
|
||||
SetSkill(SkillName.Magery, 110.0, 120.0);
|
||||
SetSkill(SkillName.Meditation, 150.0, 155.0);
|
||||
SetSkill(SkillName.Focus, 0.0, 60.0);
|
||||
|
||||
Fame = 3000;
|
||||
Karma = -3000;
|
||||
|
||||
VirtualArmor = 38;
|
||||
PackReg(3);
|
||||
PackNecroReg(3, 10);
|
||||
PackItem(new Bone());
|
||||
}
|
||||
|
||||
public SkelementalMage(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool BleedImmune { get { return true; } }
|
||||
public override OppositionGroup OppositionGroup { get { return OppositionGroup.FeyAndUndead; } }
|
||||
public override Poison PoisonImmune { get { return Poison.Regular; } }
|
||||
public override TribeType Tribe { get { return TribeType.Undead; } }
|
||||
|
||||
public override void GenerateLoot()
|
||||
{
|
||||
AddLoot(LootPack.Average);
|
||||
AddLoot(LootPack.LowScrolls);
|
||||
AddLoot(LootPack.Potions);
|
||||
}
|
||||
|
||||
public override void OnBeforeDamage(Mobile from, ref int totalDamage, Server.DamageType type)
|
||||
{
|
||||
if (Region.IsPartOf("Khaldun") && IsChampionSpawn && !Caddellite.CheckDamage(from, type))
|
||||
{
|
||||
totalDamage = 0;
|
||||
}
|
||||
|
||||
base.OnBeforeDamage(from, ref totalDamage, type);
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
292
Scripts/Services/Seasonal Events/TreasuresOfKhaldun/Generate.cs
Normal file
292
Scripts/Services/Seasonal Events/TreasuresOfKhaldun/Generate.cs
Normal file
@@ -0,0 +1,292 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
using Server;
|
||||
using Server.Engines.CannedEvil;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Gumps;
|
||||
using Server.Engines.Points;
|
||||
using Server.Engines.Quests;
|
||||
|
||||
namespace Server.Engines.Khaldun
|
||||
{
|
||||
public static class TreasuresOfKhaldunGeneration
|
||||
{
|
||||
public static void Initialize()
|
||||
{
|
||||
if (Core.EJ)
|
||||
{
|
||||
EventSink.WorldSave += OnWorldSave;
|
||||
|
||||
if (!Siege.SiegeShard)
|
||||
{
|
||||
KhaldunCampRegion.InstanceTram = new KhaldunCampRegion(Map.Trammel);
|
||||
}
|
||||
|
||||
KhaldunCampRegion.InstanceFel = new KhaldunCampRegion(Map.Felucca);
|
||||
}
|
||||
}
|
||||
|
||||
private static void OnWorldSave(WorldSaveEventArgs e)
|
||||
{
|
||||
CheckEnabled(true);
|
||||
}
|
||||
|
||||
public static void CheckEnabled(bool timed = false)
|
||||
{
|
||||
var khaldun = PointsSystem.Khaldun;
|
||||
|
||||
if (khaldun.Enabled && !khaldun.InSeason)
|
||||
{
|
||||
if (timed)
|
||||
{
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(30), () =>
|
||||
{
|
||||
Utility.WriteConsoleColor(ConsoleColor.Green, "Disabling Treasures of Khaldun");
|
||||
|
||||
Remove();
|
||||
khaldun.Enabled = false;
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
Utility.WriteConsoleColor(ConsoleColor.Green, "Auto Disabling Treasures of Khaldun");
|
||||
|
||||
Remove();
|
||||
khaldun.Enabled = false;
|
||||
}
|
||||
}
|
||||
else if (!khaldun.Enabled && khaldun.InSeason)
|
||||
{
|
||||
if (timed)
|
||||
{
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(30), () =>
|
||||
{
|
||||
Utility.WriteConsoleColor(ConsoleColor.Green, "Enabling Treasures of Khaldun");
|
||||
|
||||
Generate();
|
||||
khaldun.Enabled = true;
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
Utility.WriteConsoleColor(ConsoleColor.Green, "Auto Enabling Treasures of Khaldun");
|
||||
|
||||
Generate();
|
||||
khaldun.Enabled = true;
|
||||
}
|
||||
|
||||
if(!khaldun.QuestContentGenerated)
|
||||
{
|
||||
GenerateQuestContent();
|
||||
khaldun.QuestContentGenerated = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void Generate()
|
||||
{
|
||||
if (KhaldunResearcher.InstanceTram == null && !Siege.SiegeShard)
|
||||
{
|
||||
KhaldunResearcher.InstanceTram = new KhaldunResearcher();
|
||||
KhaldunResearcher.InstanceTram.MoveToWorld(new Point3D(6009, 3771, 21), Map.Trammel);
|
||||
}
|
||||
|
||||
if (KhaldunResearcher.InstanceFel == null)
|
||||
{
|
||||
KhaldunResearcher.InstanceFel = new KhaldunResearcher();
|
||||
KhaldunResearcher.InstanceFel.MoveToWorld(new Point3D(6009, 3771, 21), Map.Felucca);
|
||||
}
|
||||
|
||||
if (LeadInvestigator.InstanceTram == null && !Siege.SiegeShard)
|
||||
{
|
||||
LeadInvestigator.InstanceTram = new LeadInvestigator();
|
||||
LeadInvestigator.InstanceTram.MoveToWorld(new Point3D(6010, 3776, 19), Map.Trammel);
|
||||
}
|
||||
|
||||
if (LeadInvestigator.InstanceFel == null)
|
||||
{
|
||||
LeadInvestigator.InstanceFel = new LeadInvestigator();
|
||||
LeadInvestigator.InstanceFel.MoveToWorld(new Point3D(6010, 3776, 19), Map.Felucca);
|
||||
}
|
||||
|
||||
if (CaddelliteVendor.InstanceTram == null && !Siege.SiegeShard)
|
||||
{
|
||||
CaddelliteVendor.InstanceTram = new CaddelliteVendor();
|
||||
CaddelliteVendor.InstanceTram.MoveToWorld(new Point3D(6018, 3749, 21), Map.Trammel);
|
||||
}
|
||||
|
||||
if (CaddelliteVendor.InstanceFel == null)
|
||||
{
|
||||
CaddelliteVendor.InstanceFel = new CaddelliteVendor();
|
||||
CaddelliteVendor.InstanceFel.MoveToWorld(new Point3D(6018, 3749, 21), Map.Felucca);
|
||||
}
|
||||
|
||||
ChampionSpawn champ = null;
|
||||
|
||||
if (!Siege.SiegeShard)
|
||||
{
|
||||
champ = new ChampionSpawn();
|
||||
champ.Type = ChampionSpawnType.Khaldun;
|
||||
champ.MoveToWorld(new Point3D(5469, 1461, 20), Map.Trammel);
|
||||
ChampionSystem.AllSpawns.Add(champ);
|
||||
}
|
||||
|
||||
champ = new ChampionSpawn();
|
||||
champ.Type = ChampionSpawnType.Khaldun;
|
||||
champ.MoveToWorld(new Point3D(5469, 1461, 20), Map.Felucca);
|
||||
ChampionSystem.AllSpawns.Add(champ);
|
||||
}
|
||||
|
||||
public static void Remove()
|
||||
{
|
||||
ChampionSystem.AllSpawns.Where(s => s.Type == ChampionSpawnType.Khaldun && Region.Find(s.Location, s.Map).IsPartOf("Khaldun")).IterateReverse(s =>
|
||||
{
|
||||
s.Delete();
|
||||
});
|
||||
}
|
||||
|
||||
public static void GenerateQuestContent()
|
||||
{
|
||||
var map = Siege.SiegeShard ? Map.Felucca : Map.Trammel;
|
||||
|
||||
var addon = new KhaldunDecorationAddon();
|
||||
addon.MoveToWorld(new Point3D(6232, 2887, -1), map);
|
||||
|
||||
// Britain
|
||||
var door = new TrapDoor("boreas", new Point3D(6242, 2892, 17), map);
|
||||
var book = new MysteriousBook(door);
|
||||
var dust = new DustPile(door);
|
||||
var teleporter = new Teleporter(new Point3D(1369, 1465, 10), map);
|
||||
|
||||
door.MoveToWorld(new Point3D(1369, 1465, 10), map);
|
||||
book.MoveToWorld(new Point3D(6240, 2885, 8), map);
|
||||
dust.MoveToWorld(new Point3D(6256, 2889, 13), map);
|
||||
teleporter.MoveToWorld(new Point3D(6242, 2892, 17), map);
|
||||
|
||||
new GumshoeBottles().MoveToWorld(new Point3D(6154, 2901, 6), map);
|
||||
new GumshoeBottles().MoveToWorld(new Point3D(6154, 2902, 6), map);
|
||||
|
||||
new GumshoeDeed().MoveToWorld(new Point3D(6161, 2901, 6), map);
|
||||
|
||||
new GumshoeRope().MoveToWorld(new Point3D(6163, 2896, 0), map);
|
||||
new GumshoeRope().MoveToWorld(new Point3D(6163, 2896, 1), map);
|
||||
|
||||
new GumshoeMap().MoveToWorld(new Point3D(6166, 2895, 6), map);
|
||||
new GumshoeMap().MoveToWorld(new Point3D(6166, 2895, 7), map);
|
||||
|
||||
new GumshoeTools().MoveToWorld(new Point3D(6160, 2901, 6), map);
|
||||
|
||||
// Moonglow
|
||||
door = new TrapDoor("carthax", new Point3D(6198, 2893, 17), map);
|
||||
book = new MysteriousBook(door);
|
||||
dust = new DustPile(door);
|
||||
teleporter = new Teleporter(new Point3D(4550, 1306, 8), map);
|
||||
|
||||
door.MoveToWorld(new Point3D(4550, 1306, 8), map);
|
||||
book.MoveToWorld(new Point3D(6207, 2884, 7), map);
|
||||
dust.MoveToWorld(new Point3D(6208, 2885, 12), map);
|
||||
teleporter.MoveToWorld(new Point3D(6198, 2893, 17), map);
|
||||
|
||||
new GumshoeBottles().MoveToWorld(new Point3D(6198, 2888, 6), map);
|
||||
|
||||
new GumshoeRope().MoveToWorld(new Point3D(6200, 2887, 0), map);
|
||||
new GumshoeRope().MoveToWorld(new Point3D(6200, 2887, 1), map);
|
||||
|
||||
new GumshoeMap().MoveToWorld(new Point3D(6198, 2887, 6), map);
|
||||
new GumshoeMap().MoveToWorld(new Point3D(6198, 2887, 7), map);
|
||||
|
||||
new GumshoeTools().MoveToWorld(new Point3D(6198, 2889, 6), map);
|
||||
|
||||
// Vesper
|
||||
door = new TrapDoor("moriens", new Point3D(6154, 2898, 17), map);
|
||||
book = new MysteriousBook(door);
|
||||
dust = new DustPile(door);
|
||||
teleporter = new Teleporter(new Point3D(2762, 848, 0), map);
|
||||
|
||||
door.MoveToWorld(new Point3D(2762, 848, 0), map);
|
||||
book.MoveToWorld(new Point3D(6167, 2896, 6), map);
|
||||
dust.MoveToWorld(new Point3D(6163, 2885, 0), map);
|
||||
teleporter.MoveToWorld(new Point3D(6154, 2898, 17), map);
|
||||
|
||||
new GumshoeBottles().MoveToWorld(new Point3D(6240, 2884, 6), map);
|
||||
new GumshoeBottles().MoveToWorld(new Point3D(6239, 2885, 6), map);
|
||||
|
||||
new GumshoeRope().MoveToWorld(new Point3D(6241, 2884, 0), map);
|
||||
new GumshoeRope().MoveToWorld(new Point3D(6241, 2884, 1), map);
|
||||
|
||||
new GumshoeMap().MoveToWorld(new Point3D(6240, 2885, 6), map);
|
||||
new GumshoeMap().MoveToWorld(new Point3D(6240, 2885, 7), map);
|
||||
|
||||
new GumshoeTools().MoveToWorld(new Point3D(6239, 2886, 6), map);
|
||||
|
||||
// Yew
|
||||
door = new TrapDoor("tenebrae", new Point3D(6294, 2891, 17), map);
|
||||
book = new MysteriousBook(door);
|
||||
dust = new DustPile(door);
|
||||
teleporter = new Teleporter(new Point3D(712, 1104, 0), map);
|
||||
|
||||
door.MoveToWorld(new Point3D(712, 1104, 0), map);
|
||||
book.MoveToWorld(new Point3D(6294, 2887, 6), map);
|
||||
dust.MoveToWorld(new Point3D(6291, 2875, 9), map);
|
||||
teleporter.MoveToWorld(new Point3D(6294, 2891, 17), map);
|
||||
|
||||
new GumshoeBottles().MoveToWorld(new Point3D(6303, 2887, 6), map);
|
||||
new GumshoeBottles().MoveToWorld(new Point3D(6304, 2887, 6), map);
|
||||
|
||||
new GumshoeRope().MoveToWorld(new Point3D(6299, 2887, 0), map);
|
||||
new GumshoeRope().MoveToWorld(new Point3D(6299, 2887, 1), map);
|
||||
|
||||
new GumshoeMap().MoveToWorld(new Point3D(6294, 2888, 6), map);
|
||||
new GumshoeMap().MoveToWorld(new Point3D(6294, 2888, 7), map);
|
||||
|
||||
new GumshoeTools().MoveToWorld(new Point3D(6294, 2889, 6), map);
|
||||
|
||||
// Gravestones
|
||||
var grave = new DamagedHeadstone(1158607); // brit
|
||||
grave.MoveToWorld(new Point3D(1378, 1445, 10), map);
|
||||
|
||||
grave = new DamagedHeadstone(1158608); // vesper
|
||||
grave.ItemID = 4477;
|
||||
grave.MoveToWorld(new Point3D(2747, 882, 0), map);
|
||||
|
||||
grave = new DamagedHeadstone(1158609); // moonglow
|
||||
grave.MoveToWorld(new Point3D(4545, 1316, 8), map);
|
||||
|
||||
grave = new DamagedHeadstone(1158610); // yew
|
||||
grave.MoveToWorld(new Point3D(723, 1104, 0), map);
|
||||
|
||||
// footprints
|
||||
var footprints = new BloodyFootPrints(0x1E06);
|
||||
footprints.MoveToWorld(new Point3D(1383, 1452, 10), map);
|
||||
|
||||
footprints = new BloodyFootPrints(0x1E06);
|
||||
footprints.MoveToWorld(new Point3D(1383, 1456, 10), map);
|
||||
|
||||
footprints = new BloodyFootPrints(0x1E06);
|
||||
footprints.MoveToWorld(new Point3D(1383, 1461, 10), map);
|
||||
|
||||
footprints = new BloodyFootPrints(0x1E06);
|
||||
footprints.MoveToWorld(new Point3D(1383, 1464, 10), map);
|
||||
|
||||
footprints = new BloodyFootPrints(0x1E03);
|
||||
footprints.MoveToWorld(new Point3D(1378, 1464, 10), map);
|
||||
|
||||
var st = new Static(0x2006);
|
||||
st.Stackable = true;
|
||||
st.Amount = 0x191;
|
||||
st.Hue = 0x47E;
|
||||
st.MoveToWorld(new Point3D(5808, 3270, -15), map);
|
||||
st.Name = "A Corpse of Liane";
|
||||
|
||||
st = new Static(0x2006);
|
||||
st.Stackable = true;
|
||||
st.Amount = 86;
|
||||
st.Hue = 0x47E;
|
||||
st.MoveToWorld(new Point3D(5807, 3268, -15), map);
|
||||
st.Name = "A Corpse of an Ophidian Beserker";
|
||||
}
|
||||
}
|
||||
}
|
||||
45
Scripts/Services/Seasonal Events/TreasuresOfKhaldun/Gumps.cs
Normal file
45
Scripts/Services/Seasonal Events/TreasuresOfKhaldun/Gumps.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Mobiles;
|
||||
using Server.Gumps;
|
||||
using Server.Engines.Points;
|
||||
|
||||
namespace Server.Engines.Khaldun
|
||||
{
|
||||
public class KhaldunRewardGump : BaseRewardGump
|
||||
{
|
||||
public KhaldunRewardGump(Mobile owner, PlayerMobile user)
|
||||
: base(owner, user, KhaldunRewards.Rewards, 1158744)
|
||||
{
|
||||
}
|
||||
|
||||
public override double GetPoints(Mobile m)
|
||||
{
|
||||
return PointsSystem.Khaldun.GetPoints(m);
|
||||
}
|
||||
|
||||
public override void RemovePoints(double points)
|
||||
{
|
||||
PointsSystem.Khaldun.DeductPoints(User, points);
|
||||
}
|
||||
}
|
||||
|
||||
public class GumshoeItemGump : Gump
|
||||
{
|
||||
public GumshoeItemGump(Mobile from, int itemID, int itemHue, string itemName, int cliloc, string secondLineText)
|
||||
: base(50, 50)
|
||||
{
|
||||
AddBackground(0, 0, 454, 400, 9380);
|
||||
AddItem(75, 120, itemID, itemHue);
|
||||
AddHtml(177, 50, 250, 20, String.Format("<center><basefont color=#6B1010>{0}</center>", itemName), false, false);
|
||||
|
||||
if (!string.IsNullOrEmpty(secondLineText))
|
||||
{
|
||||
AddHtml(177, 77, 250, 40, String.Format("<center><basefont color=#6B1010>{0}</center>", secondLineText), false, false);
|
||||
AddHtmlLocalized(177, 122, 250, 228, cliloc, true, true);
|
||||
}
|
||||
else
|
||||
AddHtmlLocalized(177, 77, 250, 273, cliloc, true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public interface ICaddelliteTool
|
||||
{
|
||||
}
|
||||
|
||||
public class CaddellitePickaxe : Pickaxe, ICaddelliteTool
|
||||
{
|
||||
public override int LabelNumber { get { return 1158689; } } // Caddellite Pickaxe
|
||||
|
||||
[Constructable]
|
||||
public CaddellitePickaxe()
|
||||
{
|
||||
}
|
||||
|
||||
public CaddellitePickaxe(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
list.Add(1158692); // * Can Harvest Caddellite Infused Resources in the Lost Lands *
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class CaddelliteHatchet : Hatchet, ICaddelliteTool
|
||||
{
|
||||
public override int LabelNumber { get { return 1158690; } } // Caddellite Hatchet
|
||||
|
||||
[Constructable]
|
||||
public CaddelliteHatchet()
|
||||
{
|
||||
}
|
||||
|
||||
public CaddelliteHatchet(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
list.Add(1158692); // * Can Harvest Caddellite Infused Resources in the Lost Lands *
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class CaddelliteFishingPole : FishingPole, ICaddelliteTool
|
||||
{
|
||||
public override int LabelNumber { get { return 1158691; } } // Caddellite Fishing Pole
|
||||
|
||||
[Constructable]
|
||||
public CaddelliteFishingPole()
|
||||
{
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
list.Add(1158692); // * Can Harvest Caddellite Infused Resources in the Lost Lands *
|
||||
}
|
||||
|
||||
public CaddelliteFishingPole(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class CounterfeitPlatinum : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1158686; } } // counterfeit platinum
|
||||
|
||||
[Constructable]
|
||||
public CounterfeitPlatinum()
|
||||
: base(0x1BF9)
|
||||
{
|
||||
Hue = 2500;
|
||||
}
|
||||
|
||||
public CounterfeitPlatinum(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class CultistsRitualTome : Spellbook
|
||||
{
|
||||
public override bool IsArtifact { get { return true; } }
|
||||
public override int LabelNumber { get { return 1158717; } } // Cultist's Ritual Tome
|
||||
|
||||
[Constructable]
|
||||
public CultistsRitualTome()
|
||||
: base()
|
||||
{
|
||||
Hue = 2745;
|
||||
LootType = LootType.Blessed;
|
||||
|
||||
Slayer = SlayerGroup.RandomSuperSlayerTOL();
|
||||
//Caddellite Infused
|
||||
Attributes.DefendChance = 5;
|
||||
Attributes.SpellDamage = 25;
|
||||
Attributes.CastRecovery = 2;
|
||||
Attributes.LowerManaCost = 4;
|
||||
}
|
||||
|
||||
public CultistsRitualTome(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,133 @@
|
||||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class KhaldunCampAddon : BaseAddon
|
||||
{
|
||||
private static int[,] m_AddOnSimpleComponents = new int[,] {
|
||||
{2879, -2, 6, 4}, {2883, 1, 10, 4}, {2879, -2, 7, 4}// 1 2 3
|
||||
, {2880, 0, 6, 4}, {2880, -1, 6, 4}, {875, 5, 5, 4}// 4 5 6
|
||||
, {875, -3, 5, 5}, {3014, 6, 6, 12}, {2421, 5, 8, 3}// 7 8 20
|
||||
, {2884, 2, 10, 4}, {2879, -2, 8, 4}, {875, 5, 10, 5}// 21 22 23
|
||||
, {2880, 0, -2, 4}, {2988, 0, -5, 20}, {2880, -2, -9, 3}// 38 41 42
|
||||
, {2880, -3, -9, 3}, {2990, 2, 2, 23}, {2880, -2, -2, 4}// 45 46 47
|
||||
, {2880, -3, -2, 4}, {2880, -1, -2, 4}, {2879, -5, -8, 3}// 51 53 58
|
||||
, {2879, -5, -6, 3}, {2879, -5, -7, 3}, {2880, -5, -9, 3}// 59 60 65
|
||||
, {880, -6, 1, 1}, {875, -6, -10, 1}, {2880, -4, -9, 3}// 68 70 71
|
||||
, {2880, -4, -2, 4}, {2879, -5, 0, 4}, {2879, -5, -2, 4}// 72 73 77
|
||||
, {2879, -5, -1, 4}, {875, -6, -3, 5}// 81 83
|
||||
, {2880, 1, 6, 4}, {2880, 2, 6, 4}, {2980, 6, 11, 13} // 84, 85, 86
|
||||
, {542, 7, 5, -1}, {542, 7, 6, -1}, {542, 7, 7, -1} // 87, 88, 89
|
||||
, {542, 7, 8, -1}, {542, 7, 9, -1}, {542, 7, 10, -1},
|
||||
};
|
||||
|
||||
public override BaseAddonDeed Deed
|
||||
{
|
||||
get
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
[ Constructable ]
|
||||
public KhaldunCampAddon()
|
||||
{
|
||||
for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++)
|
||||
AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] );
|
||||
|
||||
AddComplexComponent( (BaseAddon) this, 880, -3, 9, 5, 2500, -1, "", 1);// 9
|
||||
AddComplexComponent( (BaseAddon) this, 880, -3, 8, 5, 1835, -1, "", 1);// 10
|
||||
AddComplexComponent( (BaseAddon) this, 881, 0, 5, 5, 2500, -1, "", 1);// 11
|
||||
AddComplexComponent( (BaseAddon) this, 873, -2, 10, 5, 2500, -1, "", 1);// 12
|
||||
AddComplexComponent( (BaseAddon) this, 876, -3, 10, 5, 1835, -1, "", 1);// 13
|
||||
AddComplexComponent( (BaseAddon) this, 881, -1, 5, 5, 1835, -1, "", 1);// 14
|
||||
AddComplexComponent( (BaseAddon) this, 880, -3, 6, 5, 1835, -1, "", 1);// 15
|
||||
AddComplexComponent( (BaseAddon) this, 873, 0, 10, 5, 2500, -1, "", 1);// 16
|
||||
AddComplexComponent( (BaseAddon) this, 873, -1, 10, 5, 1835, -1, "", 1);// 17
|
||||
AddComplexComponent( (BaseAddon) this, 880, -3, 7, 5, 2500, -1, "", 1);// 18
|
||||
AddComplexComponent( (BaseAddon) this, 881, 1, 5, 5, 1835, -1, "", 1);// 19
|
||||
AddComplexComponent( (BaseAddon) this, 4012, 5, 8, 3, 0, 2, "", 1);// 24
|
||||
AddComplexComponent( (BaseAddon) this, 881, -2, 5, 5, 2500, -1, "", 1);// 25
|
||||
AddComplexComponent( (BaseAddon) this, 881, 0, -3, 5, 1159, -1, "", 1);// 26
|
||||
AddComplexComponent( (BaseAddon) this, 877, -1, -10, 0, 1911, -1, "", 1);// 27
|
||||
AddComplexComponent( (BaseAddon) this, 874, -1, -9, 1, 1912, -1, "", 1);// 28
|
||||
AddComplexComponent( (BaseAddon) this, 874, -1, -6, 3, 1912, -1, "", 1);// 29
|
||||
AddComplexComponent( (BaseAddon) this, 881, -2, -3, 5, 1159, -1, "", 1);// 30
|
||||
AddComplexComponent( (BaseAddon) this, 881, -3, -3, 5, 1917, -1, "", 1);// 31
|
||||
AddComplexComponent( (BaseAddon) this, 873, -2, -5, 3, 1912, -1, "", 1);// 32
|
||||
AddComplexComponent( (BaseAddon) this, 877, 1, -3, 5, 1917, -1, "", 1);// 33
|
||||
AddComplexComponent( (BaseAddon) this, 872, -1, -5, 3, 1911, -1, "", 1);// 34
|
||||
AddComplexComponent( (BaseAddon) this, 881, -1, -3, 5, 1917, -1, "", 1);// 35
|
||||
AddComplexComponent( (BaseAddon) this, 873, -3, 2, 5, 1917, -1, "", 1);// 36
|
||||
AddComplexComponent( (BaseAddon) this, 873, -2, 2, 5, 1159, -1, "", 1);// 37
|
||||
AddComplexComponent( (BaseAddon) this, 873, -1, 2, 5, 1917, -1, "", 1);// 39
|
||||
AddComplexComponent( (BaseAddon) this, 873, 0, 2, 5, 1159, -1, "", 1);// 40
|
||||
AddComplexComponent( (BaseAddon) this, 873, -3, -5, 3, 1911, -1, "", 1);// 43
|
||||
AddComplexComponent( (BaseAddon) this, 872, 1, 2, 4, 1917, -1, "", 1);// 44
|
||||
AddComplexComponent( (BaseAddon) this, 874, 1, 1, 5, 1159, -1, "", 1);// 48
|
||||
AddComplexComponent( (BaseAddon) this, 874, 1, -2, 5, 1159, -1, "", 1);// 49
|
||||
AddComplexComponent( (BaseAddon) this, 878, -3, -10, 3, 1911, -1, "", 1);// 50
|
||||
AddComplexComponent( (BaseAddon) this, 878, -2, -10, 2, 1912, -1, "", 1);// 52
|
||||
AddComplexComponent( (BaseAddon) this, 876, -6, -5, 4, 1912, -1, "", 1);// 54
|
||||
AddComplexComponent( (BaseAddon) this, 876, -6, 2, 5, 1159, -1, "", 1);// 55
|
||||
AddComplexComponent( (BaseAddon) this, 873, -5, 2, 5, 1917, -1, "", 1);// 56
|
||||
AddComplexComponent( (BaseAddon) this, 873, -4, 2, 5, 1159, -1, "", 1);// 57
|
||||
AddComplexComponent( (BaseAddon) this, 873, -5, -5, 3, 1911, -1, "", 1);// 61
|
||||
AddComplexComponent( (BaseAddon) this, 873, -4, -5, 3, 1912, -1, "", 1);// 62
|
||||
AddComplexComponent( (BaseAddon) this, 880, -6, -1, 5, 1917, -1, "", 1);// 63
|
||||
AddComplexComponent( (BaseAddon) this, 880, -6, 0, 5, 1159, -1, "", 1);// 64
|
||||
AddComplexComponent( (BaseAddon) this, 881, -4, -3, 5, 1159, -1, "", 1);// 66
|
||||
AddComplexComponent( (BaseAddon) this, 881, -5, -3, 4, 1917, -1, "", 1);// 67
|
||||
AddComplexComponent( (BaseAddon) this, 880, -6, 1, 5, 1917, -1, "", 1);// 69
|
||||
AddComplexComponent( (BaseAddon) this, 880, -6, -2, 5, 1159, -1, "", 1);// 74
|
||||
AddComplexComponent( (BaseAddon) this, 880, -6, -8, 3, 1911, -1, "", 1);// 75
|
||||
AddComplexComponent( (BaseAddon) this, 880, -6, -9, 3, 1912, -1, "", 1);// 76
|
||||
AddComplexComponent( (BaseAddon) this, 880, -6, -7, 3, 1912, -1, "", 1);// 78
|
||||
AddComplexComponent( (BaseAddon) this, 878, -4, -10, 3, 1912, -1, "", 1);// 79
|
||||
AddComplexComponent( (BaseAddon) this, 878, -5, -10, 3, 1911, -1, "", 1);// 80
|
||||
AddComplexComponent( (BaseAddon) this, 880, -6, -6, 4, 1911, -1, "", 1);// 82
|
||||
|
||||
}
|
||||
|
||||
public KhaldunCampAddon( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource)
|
||||
{
|
||||
AddComplexComponent(addon, item, xoffset, yoffset, zoffset, hue, lightsource, null, 1);
|
||||
}
|
||||
|
||||
private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource, string name, int amount)
|
||||
{
|
||||
AddonComponent ac;
|
||||
ac = new AddonComponent(item);
|
||||
if (name != null && name.Length > 0)
|
||||
ac.Name = name;
|
||||
if (hue != 0)
|
||||
ac.Hue = hue;
|
||||
if (amount > 1)
|
||||
{
|
||||
ac.Stackable = true;
|
||||
ac.Amount = amount;
|
||||
}
|
||||
if (lightsource != -1)
|
||||
ac.Light = (LightType) lightsource;
|
||||
addon.AddComponent(ac, xoffset, yoffset, zoffset);
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
writer.Write( 0 ); // Version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,202 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class KhaldunChest : LockableContainer, IRevealableItem
|
||||
{
|
||||
private Timer m_Timer;
|
||||
|
||||
public override int DefaultGumpID { get { return 0x49; } }
|
||||
public bool CheckWhenHidden { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public KhaldunChest()
|
||||
: base(Utility.RandomList(0xE3C, 0xE3E, 0x9a9))
|
||||
{
|
||||
Movable = false;
|
||||
Locked = true;
|
||||
Visible = false;
|
||||
|
||||
Hue = 2745;
|
||||
LiftOverride = true;
|
||||
Weight = 0.0;
|
||||
|
||||
LockLevel = 90;
|
||||
RequiredSkill = 90;
|
||||
MaxLockLevel = 100;
|
||||
|
||||
TrapType = TrapType.PoisonTrap;
|
||||
TrapPower = 100;
|
||||
Timer.DelayCall(TimeSpan.FromSeconds(1), Fill);
|
||||
}
|
||||
|
||||
public virtual void Fill()
|
||||
{
|
||||
Reset();
|
||||
|
||||
List<Item> contains = new List<Item>(Items);
|
||||
|
||||
foreach (var i in contains)
|
||||
{
|
||||
i.Delete();
|
||||
}
|
||||
|
||||
ColUtility.Free(contains);
|
||||
|
||||
for (int i = 0; i < Utility.RandomMinMax(6, 12); i++)
|
||||
DropItem(Loot.RandomGem());
|
||||
|
||||
DropItem(new Gold(Utility.RandomMinMax(800, 1100)));
|
||||
|
||||
Item item = null;
|
||||
|
||||
if (0.30 > Utility.RandomDouble())
|
||||
{
|
||||
switch (Utility.Random(7))
|
||||
{
|
||||
case 0:
|
||||
item = new Bandage(Utility.Random(10, 30)); break;
|
||||
case 1:
|
||||
item = new SmokeBomb();
|
||||
item.Amount = Utility.Random(3, 6);
|
||||
break;
|
||||
case 2:
|
||||
item = new InvisibilityPotion();
|
||||
item.Amount = Utility.Random(1, 3);
|
||||
break;
|
||||
case 3:
|
||||
item = new Lockpick(Utility.Random(1, 10)); break;
|
||||
case 4:
|
||||
item = new DreadHornMane(Utility.Random(1, 2)); break;
|
||||
case 5:
|
||||
item = new Corruption(Utility.Random(1, 2)); break;
|
||||
case 6:
|
||||
item = new Taint(Utility.Random(1, 2)); break;
|
||||
}
|
||||
|
||||
DropItem(item);
|
||||
}
|
||||
|
||||
if (0.25 > Utility.RandomDouble())
|
||||
{
|
||||
DropItem(new CounterfeitPlatinum());
|
||||
}
|
||||
|
||||
if (0.2 > Utility.RandomDouble())
|
||||
{
|
||||
switch (Utility.Random(3))
|
||||
{
|
||||
case 0:
|
||||
item = new ZombiePainting(); break;
|
||||
case 1:
|
||||
item = new SkeletonPortrait(); break;
|
||||
case 2:
|
||||
item = new LichPainting(); break;
|
||||
}
|
||||
|
||||
DropItem(item);
|
||||
}
|
||||
|
||||
if (0.1 > Utility.RandomDouble())
|
||||
{
|
||||
item = Loot.RandomArmorOrShieldOrWeaponOrJewelry(LootPackEntry.IsInTokuno(this), LootPackEntry.IsMondain(this), LootPackEntry.IsStygian(this));
|
||||
|
||||
if (item != null)
|
||||
{
|
||||
int min, max;
|
||||
|
||||
TreasureMapChest.GetRandomItemStat(out min, out max, 1.0);
|
||||
|
||||
RunicReforging.GenerateRandomItem(item, null, Utility.RandomMinMax(min, max), 0, ReforgedPrefix.None, ReforgedSuffix.Khaldun, Map);
|
||||
|
||||
DropItem(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
EndTimer();
|
||||
|
||||
Visible = false;
|
||||
Locked = true;
|
||||
|
||||
RequiredSkill = 90;
|
||||
LockLevel = RequiredSkill - Utility.Random(1, 10);
|
||||
MaxLockLevel = RequiredSkill;
|
||||
|
||||
TrapType = TrapType.MagicTrap;
|
||||
TrapPower = 100;
|
||||
}
|
||||
|
||||
public virtual bool CheckReveal(Mobile m)
|
||||
{
|
||||
return m.CheckTargetSkill(SkillName.DetectHidden, this, 80.0, 100.0);
|
||||
}
|
||||
|
||||
public virtual void OnRevealed(Mobile m)
|
||||
{
|
||||
Visible = true;
|
||||
}
|
||||
|
||||
public virtual bool CheckPassiveDetect(Mobile m)
|
||||
{
|
||||
if (m.InRange(Location, 4))
|
||||
{
|
||||
int skill = (int)m.Skills[SkillName.DetectHidden].Value;
|
||||
|
||||
if (skill >= 80 && Utility.Random(300) < skill)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override void LockPick(Mobile from)
|
||||
{
|
||||
TryDelayedLock();
|
||||
|
||||
base.LockPick(from);
|
||||
}
|
||||
|
||||
public KhaldunChest(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public void TryDelayedLock()
|
||||
{
|
||||
if (Locked || (m_Timer != null && m_Timer.Running))
|
||||
return;
|
||||
|
||||
EndTimer();
|
||||
|
||||
m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(Utility.RandomMinMax(10, 15)), Fill);
|
||||
}
|
||||
|
||||
public void EndTimer()
|
||||
{
|
||||
if (m_Timer != null)
|
||||
{
|
||||
m_Timer.Stop();
|
||||
m_Timer = null;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
|
||||
TryDelayedLock();
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
TryDelayedLock();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
|
||||
////////////////////////////////////////
|
||||
// //
|
||||
// Generated by CEO's YAAAG - V1.2 //
|
||||
// (Yet Another Arya Addon Generator) //
|
||||
// //
|
||||
////////////////////////////////////////
|
||||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class KhaldunEntranceAddon : BaseAddon
|
||||
{
|
||||
private static int[,] m_AddOnSimpleComponents = new int[,] {
|
||||
{476, 3, 5, 28}// 6
|
||||
, {465, 3, 2, 8}, {465, 3, 1, 10}, {465, 3, 0, 14}// 7 8 9
|
||||
, {466, 3, -1, 14}, {478, 2, 6, 28}, {476, 1, 5, 30}// 10 11 12
|
||||
, {465, -1, 5, 27}, {465, -3, 2, 5}, {465, -3, 1, 6}// 13 14 15
|
||||
, {465, -3, 0, 8}, {465, 2, 3, 5}, {465, 2, 2, 3}// 16 17 18
|
||||
, {1313, -2, -4, 3}, {1313, 0, -4, 0}, {1313, -1, -5, 1}// 19 20 21
|
||||
, {1313, 0, -6, 3}, {1313, -1, -6, 2}, {1313, -2, -6, 5}// 22 23 24
|
||||
, {1929, -2, 1, 4}, {1929, -2, 0, 8}, {1929, -1, 1, 4}// 30 31 32
|
||||
, {1929, 0, 1, 3}, {1929, 0, 0, 8}, {1929, 1, 1, 3}// 33 34 35
|
||||
, {1929, 1, 0, 8}, {1929, -1, 0, 8}, {1928, -2, 0, 2}// 36 37 38
|
||||
, {1928, -2, -1, 2}, {1928, -2, -2, 2}, {1928, -1, 0, 2}// 39 40 41
|
||||
, {1928, -1, -1, 2}, {1928, -1, -2, 0}, {1928, 0, 0, 1}// 42 43 44
|
||||
, {1928, 0, -1, 2}, {1928, 1, 0, 2}, {1928, 1, -1, 2}// 45 46 47
|
||||
, {1928, 1, -1, 8}, {1928, 1, -2, 0}, {1928, -2, -1, 8}// 48 49 50
|
||||
, {1928, -1, -1, 8}, {1928, 0, -1, 8}, {1928, 0, -2, 2}// 51 52 53
|
||||
, {1931, -2, -2, 8}, {1931, -2, -3, 1}, {1931, -1, -2, 6}// 54 55 56
|
||||
, {1931, -1, -3, 1}, {1931, 0, -3, 1}, {1931, 1, -2, 6}// 57 58 59
|
||||
, {1931, 1, -3, 0}, {1931, 0, -2, 8}, {1931, 0, -3, 2}// 60 61 62
|
||||
, {466, -3, -1, 11}, {466, 0, 5, 28}, {466, 2, 5, 24}// 63 64 65
|
||||
, {6005, -3, -2, 4}, {6005, -3, -3, 2}// 66 67
|
||||
};
|
||||
|
||||
|
||||
|
||||
public override BaseAddonDeed Deed
|
||||
{
|
||||
get
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
[ Constructable ]
|
||||
public KhaldunEntranceAddon()
|
||||
{
|
||||
|
||||
for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++)
|
||||
AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] );
|
||||
|
||||
|
||||
AddComplexComponent( (BaseAddon) this, 1313, 0, 1, 2, 1, -1, "", 1);// 25
|
||||
AddComplexComponent( (BaseAddon) this, 1313, -1, 1, 3, 1, -1, "", 1);// 26
|
||||
AddComplexComponent( (BaseAddon) this, 1313, -1, 2, 3, 1, -1, "", 1);// 27
|
||||
AddComplexComponent( (BaseAddon) this, 1313, -2, 2, 5, 1, -1, "", 1);// 28
|
||||
AddComplexComponent( (BaseAddon) this, 1313, 0, 2, 3, 1, -1, "", 1);// 29
|
||||
|
||||
}
|
||||
|
||||
public KhaldunEntranceAddon( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource)
|
||||
{
|
||||
AddComplexComponent(addon, item, xoffset, yoffset, zoffset, hue, lightsource, null, 1);
|
||||
}
|
||||
|
||||
private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource, string name, int amount)
|
||||
{
|
||||
AddonComponent ac;
|
||||
ac = new AddonComponent(item);
|
||||
if (name != null && name.Length > 0)
|
||||
ac.Name = name;
|
||||
if (hue != 0)
|
||||
ac.Hue = hue;
|
||||
if (amount > 1)
|
||||
{
|
||||
ac.Stackable = true;
|
||||
ac.Amount = amount;
|
||||
}
|
||||
if (lightsource != -1)
|
||||
ac.Light = (LightType) lightsource;
|
||||
addon.AddComponent(ac, xoffset, yoffset, zoffset);
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
writer.Write( 0 ); // Version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class KhaldunFirstAidBelt : FirstAidBelt
|
||||
{
|
||||
[Constructable]
|
||||
public KhaldunFirstAidBelt()
|
||||
{
|
||||
LootType = LootType.Blessed;
|
||||
WeightReduction = 50;
|
||||
Attributes.RegenHits = 2;
|
||||
HealingBonus = 10;
|
||||
}
|
||||
|
||||
public KhaldunFirstAidBelt(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
[FlipableAttribute(0xA1DE, 0xA1DF)]
|
||||
public class ZombiePainting : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1023744; } } // painting
|
||||
|
||||
[Constructable]
|
||||
public ZombiePainting()
|
||||
: base(0x4C62)
|
||||
{
|
||||
Weight = 10.0;
|
||||
}
|
||||
|
||||
public ZombiePainting(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[FlipableAttribute(0xA1E0, 0xA1E1)]
|
||||
public class SkeletonPortrait : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1023744; } } // painting
|
||||
|
||||
[Constructable]
|
||||
public SkeletonPortrait()
|
||||
: base(0xA1E0)
|
||||
{
|
||||
Weight = 10.0;
|
||||
}
|
||||
|
||||
public SkeletonPortrait(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[FlipableAttribute(0xA1E2, 0xA1E3)]
|
||||
public class LichPainting : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1023744; } } // painting
|
||||
|
||||
[Constructable]
|
||||
public LichPainting()
|
||||
: base(0xA1E2)
|
||||
{
|
||||
Weight = 10.0;
|
||||
}
|
||||
|
||||
public LichPainting(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,208 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
using Server.Mobiles;
|
||||
using Server.Targeting;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class KhaldunTastyTreat : Item
|
||||
{
|
||||
public const int Duration = 1; // hours
|
||||
|
||||
public override int LabelNumber { get { return 1158680; } } // khaldun tasty treat
|
||||
|
||||
[Constructable]
|
||||
public KhaldunTastyTreat()
|
||||
: this(1)
|
||||
{
|
||||
}
|
||||
|
||||
public KhaldunTastyTreat(int amount)
|
||||
: base(2424)
|
||||
{
|
||||
Stackable = true;
|
||||
Amount = amount;
|
||||
}
|
||||
|
||||
public override bool DropToMobile(Mobile from, Mobile target, Point3D p)
|
||||
{
|
||||
TryFeed(from, target);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (IsChildOf(m.Backpack))
|
||||
{
|
||||
m.BeginTarget(2, false, TargetFlags.Beneficial, (from, targeted) =>
|
||||
{
|
||||
if (targeted is Mobile)
|
||||
{
|
||||
TryFeed(from, (Mobile)targeted);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void TryFeed(Mobile from, Mobile target)
|
||||
{
|
||||
if (target is BaseCreature && !((BaseCreature)target).IsDeadBondedPet && ((BaseCreature)target).ControlMaster == from)
|
||||
{
|
||||
BaseCreature bc = (BaseCreature)target;
|
||||
|
||||
if (UnderInfluence(bc))
|
||||
{
|
||||
from.SendLocalizedMessage(1113051); //Your pet is still enjoying the last tasty treat!
|
||||
}
|
||||
else
|
||||
{
|
||||
DoEffects(bc.ControlMaster, bc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool DoEffects(Mobile owner, BaseCreature bc)
|
||||
{
|
||||
owner.SendLocalizedMessage(1158685); // Your pet is now Caddellite infused by this treat.
|
||||
|
||||
bc.PlaySound(0x1EA);
|
||||
bc.FixedParticles(0x373A, 10, 15, 5018, EffectLayer.Waist);
|
||||
|
||||
bc.Loyalty = BaseCreature.MaxLoyalty;
|
||||
|
||||
if (Table == null)
|
||||
{
|
||||
Table = new Dictionary<BaseCreature, DateTime>();
|
||||
}
|
||||
|
||||
Table.Add(bc, DateTime.UtcNow + TimeSpan.FromHours(1));
|
||||
Timer.DelayCall(TimeSpan.FromHours(Duration), RemoveInfluence, bc);
|
||||
|
||||
Caddellite.UpdateBuff(owner);
|
||||
|
||||
Consume();
|
||||
return true;
|
||||
}
|
||||
|
||||
public static Dictionary<BaseCreature, DateTime> Table { get; set; }
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
EventSink.Login += OnLogin;
|
||||
}
|
||||
|
||||
public static bool UnderInfluence(BaseCreature bc)
|
||||
{
|
||||
return Table != null && Table.ContainsKey(bc);
|
||||
}
|
||||
|
||||
public static void RemoveInfluence(BaseCreature bc)
|
||||
{
|
||||
if (Table != null && Table.ContainsKey(bc))
|
||||
{
|
||||
Table.Remove(bc);
|
||||
|
||||
if (bc.ControlMaster != null)
|
||||
{
|
||||
bc.ControlMaster.SendLocalizedMessage(1158687); // Your pet is no longer Caddellite infused.
|
||||
|
||||
Caddellite.UpdateBuff(bc.ControlMaster);
|
||||
}
|
||||
|
||||
if (Table.Count == 0)
|
||||
{
|
||||
Table = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static BaseCreature GetPetUnderEffects(Mobile m)
|
||||
{
|
||||
if (m is PlayerMobile)
|
||||
{
|
||||
var pm = m as PlayerMobile;
|
||||
|
||||
foreach (var pet in pm.AllFollowers.OfType<BaseCreature>())
|
||||
{
|
||||
if (UnderInfluence(pet))
|
||||
{
|
||||
return pet;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void Save(GenericWriter writer)
|
||||
{
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(Table == null ? 0 : Table.Count);
|
||||
|
||||
if (Table != null)
|
||||
{
|
||||
foreach (var kpv in Table)
|
||||
{
|
||||
writer.Write(kpv.Key);
|
||||
writer.Write(kpv.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void Load(GenericReader reader)
|
||||
{
|
||||
reader.ReadInt(); // version
|
||||
|
||||
int count = reader.ReadInt();
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
var bc = reader.ReadMobile() as BaseCreature;
|
||||
var dt = reader.ReadDateTime();
|
||||
|
||||
if (bc != null && dt > DateTime.UtcNow)
|
||||
{
|
||||
if (Table == null)
|
||||
Table = new Dictionary<BaseCreature, DateTime>();
|
||||
|
||||
Table[bc] = dt;
|
||||
|
||||
Timer.DelayCall(dt - DateTime.UtcNow, RemoveInfluence, bc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void OnLogin(LoginEventArgs e)
|
||||
{
|
||||
var pm = e.Mobile as PlayerMobile;
|
||||
|
||||
if (pm != null)
|
||||
{
|
||||
Timer.DelayCall(() => Caddellite.UpdateBuff(pm));
|
||||
}
|
||||
}
|
||||
|
||||
public KhaldunTastyTreat(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user