Overwrite

Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
Unstable Kitsune
2023-11-28 23:20:26 -05:00
parent 3cd54811de
commit b918192e4e
11608 changed files with 2644205 additions and 47 deletions

View File

@@ -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;
}
}
}
}

View File

@@ -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;
}
}
}
}

View File

@@ -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;
}
}
}
}

View File

@@ -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;
}
}
}
}

View File

@@ -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;
}
}
}
}

View File

@@ -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;
}
}
}
}

View File

@@ -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;
}
}
}
}

View File

@@ -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;
}
}
}
}

View File

@@ -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;
}
}
}
}

View File

@@ -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();
}
}
}

View 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);
}
}
}
}
}

View 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);
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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;
}
}
}
}
}

View File

@@ -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;
}
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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);
}
}
});
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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;
}
}
}
}

View File

@@ -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;
}
}
}
}

View File

@@ -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;
}
}
}
}

View File

@@ -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!
}
}
}
}
}
}

View 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;
}
}
}
}

View 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)
};
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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);
}
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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;
}
}
}
}

View 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();
}
}
}
}

View 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();
}
}
}

View 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();
}
}
}

View 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>();
}
}
}

View File

@@ -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
}
}

View File

@@ -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>();
}
}
}
}

View 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();
}
}
}

View 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));
}
}
}

View 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);
}
}
}
}

View 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;
}
}
}
}

View 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();
}
}
}

View 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;
}
}
}
}

View 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;
}
}
}
}

View File

@@ -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);
}
}
}
}

View File

@@ -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
}
}
}

View File

@@ -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
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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
}
}
}

View File

@@ -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
}
}
}

View File

@@ -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
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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
}
}
}

View File

@@ -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
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -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;
}
}
}

View 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;
}
}
}

View File

@@ -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);
}
}
}

View 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));
}
}
}

View 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);
}
}
}

View File

@@ -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()
{
}
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View 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";
}
}
}

View 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);
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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