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,42 @@
using Server;
using System;
using Server.Mobiles;
using Server.Engines.Quests;
// 0x1E06 => South
// 0x1E03 => West
// 0x1E04 => North
// 0x1E05 => East
namespace Server.Mobiles
{
public class BloodyFootPrints : Item
{
[Constructable]
public BloodyFootPrints(int itemID)
: base(itemID)
{
Movable = false;
Hue = 1975;
}
public BloodyFootPrints(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,105 @@
using System;
using Server;
using Server.Mobiles;
using Server.Items;
using Server.Network;
using Server.Gumps;
using Server.SkillHandlers;
using Server.Engines.Quests;
// 1158607 => brit
// 1158608 => vesper
// 1158609 => moonglow
// 1158610 => yew
namespace Server.Engines.Khaldun
{
public class DamagedHeadstone : Item, IForensicTarget
{
public override int LabelNumber { get { return 1158561; } } // damaged headstone
[CommandProperty(AccessLevel.GameMaster)]
public int GumpLocalization { get; private set; }
public DamagedHeadstone(int gumpLoc)
: base(0x1180)
{
GumpLocalization = gumpLoc;
Movable = false;
}
public void OnForensicEval(Mobile m)
{
if (!m.Player)
return;
var quest = QuestHelper.GetQuest<GoingGumshoeQuest2>((PlayerMobile)m);
if (quest != null)
{
m.PrivateOverheadMessage(MessageType.Regular, 0x47E, 1158571, m.NetState); // *You examine the headstone...*
m.SendLocalizedMessage(1158562, null, 0x23); // The damage to the epitaph seems deliberate. Using your training from Inspector Jasper you have found a hidden message among the scratches. You recreate the original epitaph in your mind's eye...
m.SendSound(quest.UpdateSound);
var gump = new Gump(50, 50);
gump.AddImage(0, 0, 0x66);
gump.AddHtmlLocalized(47, 60, 146, 160, GumpLocalization, false, false);
m.SendGump(gump);
SetPrerequisite(quest);
}
else
{
m.PrivateOverheadMessage(MessageType.Regular, 0x47E, 1158563, m.NetState); // *It appears to be a normal, yet oddly damaged, headstone. The epitaph is illegible..*
}
}
public override void OnDoubleClick(Mobile m)
{
if (m.InRange(GetWorldLocation(), 2))
{
m.PrivateOverheadMessage(MessageType.Regular, 0x47E, 1158563, m.NetState); // *It appears to be a normal, yet oddly damaged, headstone. The epitaph is illegible..*
}
else
m.PrivateOverheadMessage(MessageType.Regular, 0x47E, 1019045, m.NetState); // I can't reach that.
}
public void SetPrerequisite(GoingGumshoeQuest2 quest)
{
switch (GumpLocalization)
{
case 1158607: quest.VisitedHeastone1 = true; break;
case 1158608: quest.VisitedHeastone2 = true; break;
case 1158609: quest.VisitedHeastone3 = true; break;
case 1158610: quest.VisitedHeastone4 = true; break;
}
}
public DamagedHeadstone(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
writer.Write(GumpLocalization);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
GumpLocalization = reader.ReadInt();
}
}
}

View File

@@ -0,0 +1,352 @@
using System;
using Server;
using Server.Items;
namespace Server.Items
{
public class KhaldunDecorationAddon : BaseAddon
{
public static KhaldunDecorationAddon Instance { get; set; }
// Ritual Table needs to be hued 1362
// 14031 = hue 1
private static int[,] m_AddOnSimpleComponents = new int[,] {
{27, 74, 9, 1}, {28, 74, 9, 1}, {28, 73, 9, 1}// 1 2 3
, {28, 72, 9, 1}, {28, 74, -1, 1}, {28, 72, -1, 1}// 4 5 6
, {28, 73, -1, 1}, {27, 74, 6, 1}, {27, 74, 4, 1}// 7 8 9
, {27, 74, 5, 1}, {27, 74, 7, 1}, {27, 74, 8, 1}// 10 11 12
, {27, 74, 3, 1}, {27, 74, 2, 1}, {2879, 72, 0, 1}// 13 14 15
, {2501, 72, 0, 7}, {27, 74, 1, 1}, {27, 74, 0, 1}// 16 17 18
, {3644, 77, -3, 1}, {4014, 78, -3, 1}, {4014, 76, 1, 1}// 19 20 21
, {3647, 77, -3, 7}, {4014, 76, 0, 1}, {3646, 77, -3, 4}// 22 23 24
, {3644, 77, -2, 1}, {605, 72, -18, 1}, {4014, 75, -16, 1}// 25 26 27
, {3647, 76, -16, 7}, {605, 74, -18, 1}, {605, 73, -18, 1}// 28 29 30
, {4014, 73, -13, 1}, {3644, 72, -14, 1}, {605, 77, -18, 1}// 31 32 33
, {4014, 75, -15, 1}, {605, 78, -18, 1}, {605, 80, -18, 1}// 34 35 36
, {605, 79, -18, 1}, {605, 75, -18, 1}, {3644, 72, -13, 1}// 37 38 39
, {3646, 76, -16, 4}, {3644, 76, -16, 1}, {605, 76, -18, 1}// 40 41 42
, {27, 61, 9, 1}, {28, 62, 9, 1}, {28, 63, 9, 1}// 43 44 45
, {28, 64, 9, 1}, {28, 65, 9, 1}, {28, 66, 9, 1}// 46 47 48
, {28, 67, 9, 1}, {28, 68, 9, 1}, {28, 69, 9, 1}// 49 50 51
, {28, 70, 9, 1}, {28, 71, 9, 1}, {28, 71, -1, 1}// 52 53 54
, {28, 66, -1, 1}, {28, 65, -1, 1}, {28, 64, -1, 1}// 55 56 57
, {28, 64, -1, 1}, {28, 63, -1, 1}, {28, 62, -1, 1}// 58 59 60
, {4104, 64, 0, 7}, {3647, 69, -5, 7}, {3644, 69, -6, 1}// 61 62 63
, {3646, 69, -6, 4}, {27, 61, 5, 1}, {27, 61, 4, 1}// 64 65 66
, {27, 61, 3, 1}, {27, 61, 1, 1}, {27, 61, 2, 1}// 67 68 69
, /*{5368, 67, 0, 1},*/ {27, 61, 0, 1}, {4014, 70, -7, 1}// 70 71 72
, {33, 67, -1, 1}, /*{2501, 71, 0, 7},*/ {2879, 64, 0, 1}// 73 74 75
, {2879, 63, 0, 1}, {2879, 62, 1, 1}, {29, 61, -1, 1}// 76 77 78
, {2879, 62, 0, 1}, {4014, 70, -6, 1}, {3644, 69, -7, 1}// 79 80 81
, /*{7866, 62, 2, 7},*/ {3646, 69, -5, 4}, {3644, 69, -5, 1}// 82 83 84
, /*{5355, 62, 1, 7}, {5355, 62, 1, 8},*/ {2879, 71, 0, 1}// 85 86 87
, {5357, 63, 0, 7}, {2879, 62, 2, 1}, {27, 61, 6, 1}// 88 89 90
, {12254, 62, 4, 1}, {3647, 69, -6, 7}, {30, 70, -1, 1}// 91 92 93
, {27, 61, 7, 1}, {27, 61, 8, 1}, {7427, 62, -10, 1}// 94 95 96
, {7426, 62, -11, 1}, {7425, 62, -12, 1}, {7424, 62, -13, 1}// 97 98 99
, {7423, 62, -14, 1}, {7409, 61, -9, 1}, {7428, 61, -10, 1}// 100 101 102
, {7438, 61, -11, 1}, {7437, 61, -12, 1}, {7436, 61, -13, 1}// 103 104 105
, {7422, 61, -14, 1}, {7410, 60, -9, 1}, {7429, 60, -10, 1}// 106 107 108
, {7439, 60, -11, 1}, {7442, 60, -12, 1}, {7435, 60, -13, 1}// 109 110 111
, {7421, 60, -14, 1}, {7411, 59, -9, 1}, {7430, 59, -10, 1}// 112 113 114
, {7440, 59, -11, 1}, {7441, 59, -12, 1}, {7434, 59, -13, 1}// 115 116 117
, {7420, 59, -14, 1}, {7412, 58, -9, 1}, {611, 67, -18, 1}// 118 119 120
, {612, 67, -16, 1}, {4014, 65, -8, 1}, {3646, 64, -14, 4}// 122 123 124
, {605, 69, -18, 1}, {605, 70, -18, 1}, {4014, 70, -10, 1}// 125 126 127
, {605, 68, -18, 1}, {605, 65, -16, 1}, {3644, 59, -17, 1}// 128 129 130
, {3647, 64, -14, 7}, {3647, 70, -11, 7}, {605, 71, -18, 1}// 131 132 133
, {605, 66, -16, 1}, {3644, 59, -16, 1}, {605, 64, -16, 1}// 134 135 136
, {3644, 65, -13, 1}, {6667, 59, -11, 1}, {4014, 65, -9, 1}// 137 138 139
, {4014, 66, -9, 1}, {7431, 58, -10, 1}, {4014, 58, -17, 1}// 140 141 142
, {3644, 64, -14, 1}, {6668, 60, -12, 1}, {4014, 69, -14, 1}// 143 144 145
, {4014, 64, -13, 1}, {4014, 65, -14, 1}, {4014, 67, -12, 1}// 146 147 148
, {4014, 66, -8, 1}, {3644, 70, -15, 1}, {3644, 71, -10, 1}// 151 153 155
, {3646, 70, -11, 4}, {7417, 57, -13, 1}, {7416, 57, -12, 1}// 157 158 159
, {7415, 57, -11, 1}, {3647, 59, -17, 4}, {7414, 57, -10, 1}// 161 162 163
, {7413, 57, -9, 1}, {7419, 58, -14, 1}, {7418, 58, -13, 1}// 164 165 166
, {7433, 58, -12, 1}, {3644, 71, -11, 1}, {3644, 70, -11, 1}// 167 168 169
, {7432, 58, -11, 1}, {604, 67, -17, 1}, {4014, 54, -4, 1}// 170 171 172
, {604, 52, -1, 1}, {604, 52, -2, 1}, {604, 52, -3, 1}// 173 174 175
, {3644, 54, -3, 1}, {3644, 55, -3, 1}, {3644, 55, -4, 1}// 176 177 178
, {604, 52, -4, 1}, {604, 52, -5, 1}, {604, 52, -6, 1}// 179 180 181
, {604, 52, -7, 1}, {3647, 55, -3, 7}, {3646, 55, -3, 4}// 182 183 184
, {3644, 54, -16, 1}, {3644, 53, -16, 1}, {3644, 53, -17, 1}// 185 186 187
, {604, 50, -15, 1}, {604, 50, -11, 1}, {604, 50, -13, 1}// 188 189 190
, {604, 50, -14, 1}, {604, 50, -10, 1}, {604, 50, -12, 1}// 191 192 193
, {3647, 53, -16, 4}, {604, 50, -16, 1}, {4014, 54, -17, 1}// 194 195 196
, {604, 50, -17, 1}, {604, 50, -18, 1}, {4014, 54, -12, 1}// 197 198 199
, {604, 50, -9, 1}, {604, 50, -19, 1}, {41040, 28, 5, 1}// 200 201 202
, {41017, 28, 6, 1}, {41030, 25, 0, 1}, {41029, 24, 0, 1}// 203 204 205
, {41031, 26, 0, 1}, {41032, 27, 0, 1}, {41018, 27, 6, 1}// 206 207 208
, {41019, 26, 6, 1}, {41020, 25, 6, 1}, {41021, 24, 6, 1}// 209 210 211
, {607, 32, -3, 1}, {607, 31, -3, 1}, {5453, 32, 3, 1}// 212 213 214
, {5453, 32, 2, 1}, {607, 28, -3, 1}, {41039, 29, 5, 1}// 215 216 217
, {41016, 29, 6, 1}, {41038, 29, 4, 1}, {41036, 29, 2, 1}// 218 219 220
, {41035, 29, 1, 1}, {41038, 29, 3, 1}, {41037, 29, 3, 1}// 221 222 223
, {607, 30, -3, 1}, {607, 29, -3, 1}, {607, 25, -10, 1}// 224 225 226
, {607, 27, -10, 1}, {607, 24, -15, 1}, {607, 26, -10, 1}// 227 228 229
, {607, 25, -15, 1}, {28, 15, 11, 1}, {28, 14, 11, 1}// 230 231 232
, {28, 13, 11, 1}, {28, 10, 11, 1}, {5453, 21, 9, 1}// 233 234 235
, {27, 9, 10, 1}, {27, 9, 9, 1}, {28, 11, 11, 1}// 236 237 238
, {28, 12, 11, 1}, {27, 15, 11, 1}, {27, 15, 9, 1}// 239 240 241
, {27, 9, 11, 1}, {27, 15, 10, 1}, {4014, 17, -4, 1}// 242 243 244
, {4014, 20, -6, 1}, {4014, 19, -6, 1}, {4088, 8, -1, 7}// 245 246 247
, /*{2501, 8, -3, 7},*/ {41027, 23, 1, 1}, {41026, 23, 2, 1}// 248 249 250
, {41025, 23, 3, 1}, {41022, 23, 6, 1}, {41024, 23, 4, 0}// 251 252 253
, {12254, 10, 5, 1}, /*{5368, 9, -3, 1},*/ {3644, 16, -6, 1}// 254 255 256
, {3644, 17, -7, 1}, {2879, 8, 0, 1}, {2879, 8, -1, 1}// 257 258 259
, {2879, 8, -2, 1}, {2879, 8, -3, 1}, {3644, 20, -7, 1}// 260 261 262
, {33, 9, -4, 1}, {3644, 17, -3, 1}, {28, 8, -4, 1}// 263 264 265
, {28, 9, 1, 1}, {28, 8, 1, 1}, {5453, 23, -2, 1}// 266 267 268
, {5453, 22, 0, 1}, {4104, 8, 0, 7}, {3646, 18, -3, 4}// 269 270 271
, /*{5356, 8, -2, 7},*/ {5453, 20, 8, 1}, {27, 9, 8, 1}// 272 273 274
, {3646, 16, -6, 4}, {27, 9, 7, 1}, {27, 9, 6, 1}// 275 276 277
, {27, 9, 5, 1}, {27, 9, 4, 1}, {27, 9, 3, 1}// 278 279 280
, {27, 9, 2, 1}, {4014, 17, -6, 1}, {3646, 19, -7, 4}// 281 282 283
, {3646, 17, -7, 4}, {3647, 18, -3, 7}, {3644, 19, -7, 1}// 284 285 286
, {3644, 18, -3, 1}, {5453, 23, -3, 1}, {5453, 21, 1, 1}// 287 288 289
, {3646, 23, -7, 4}, /*{5356, 8, -2, 8},*/ {3647, 23, -7, 7}// 290 291 292
, {3644, 23, -7, 1}, {30, 13, -4, 1}, {28, 14, -4, 1}// 293 294 295
, {28, 15, -4, 1}, {27, 15, -3, 1}, {27, 15, -2, 1}// 296 297 298
, {32, 15, 4, 1}, {27, 15, -1, 1}, {27, 15, 0, 1}// 299 300 301
, {27, 15, 1, 1}, {31, 15, 8, 1}, {27, 15, 2, 1}// 302 303 304
, {27, 15, 3, 1}, {3644, 15, -9, 1}, {3644, 22, -14, 1}// 305 306 307
, {3644, 23, -8, 1}, {3644, 8, -10, 1}, {3644, 8, -9, 1}// 308 309 310
, {3644, 12, -9, 1}, {607, 22, -15, 1}, {607, 18, -15, 1}// 311 312 313
, {607, 15, -15, 1}, {607, 23, -15, 1}, {607, 21, -15, 1}// 314 315 316
, {607, 19, -15, 1}, {607, 20, -15, 1}, {607, 9, -11, 1}// 317 318 319
, {607, 11, -11, 1}, {4014, 11, -9, 1}, {4014, 15, -10, 1}// 320 321 322
, {4014, 17, -14, 1}, {4014, 16, -14, 1}, {612, 12, -11, 1}// 323 324 325
, {4014, 22, -13, 1}, {3647, 8, -10, 7}, {607, 14, -15, 1}// 326 327 328
, {604, 12, -14, 1}, {611, 12, -15, 1}, {607, 8, -11, 1}// 329 330 331
, {4014, 16, -10, 1}, {4014, 16, -9, 1}, {4014, 23, -13, 1}// 332 333 334
, {4014, 17, -13, 1}, {4014, 12, -10, 1}, {3646, 22, -14, 4}// 335 336 337
, {607, 10, -11, 1}, {607, 17, -15, 1}, {3646, 15, -9, 4}// 338 339 340
, {604, 12, -13, 1}, {604, 12, -12, 1}, {607, 13, -15, 1}// 341 342 343
, {607, 16, -15, 1}, {3647, 12, -9, 7}, {3646, 12, -9, 4}// 344 345 346
, {3646, 8, -10, 4}/*, {7867, 7, -1, 7}, {2501, 7, -2, 7}*/// 347 348 349
, {2879, 7, -2, 1}, {2879, 7, 0, 1}, {2879, 7, -1, 1}// 350 351 352
, {29, 6, -4, 1}, {28, 7, 1, 1}, {27, 6, -2, 1}// 353 354 355
, {27, 6, 1, 1}, {604, 6, -7, 1}, {604, 6, -6, 1}// 356 357 358
, {2879, 7, -3, 1}, {28, 7, -4, 1}, {27, 6, 0, 1}// 359 360 361
, {27, 6, -1, 1}, {27, 6, -3, 1}, {4014, 7, -10, 1}// 362 363 364
, {604, 6, -10, 1}, {604, 6, -8, 1}, {604, 6, -9, 1}// 365 366 367
, {607, 7, -11, 1}, {4014, 7, -9, 1}, {610, 6, -11, 1}// 368 369 370
, {3807, -23, 9, 1}, {4014, -19, 9, 1}, {3644, -18, 9, 1}// 371 372 373
, {6786, -24, 9, 1}, {4014, -21, 2, 1}, {4014, -20, 2, 1}// 374 379 380
, {4014, -17, 5, 1}, {3807, -21, 7, 1}, {3809, -23, 8, 1}// 381 383 384
, {3809, -21, 6, 1}, {3647, -20, 1, 7}, {3647, -19, 6, 4}// 385 386 387
, {605, -18, 2, 1}, {605, -21, -5, 1}, {605, -19, -5, 1}// 388 389 390
, {605, -20, -5, 1}, {605, -24, -5, 1}, {7848, -23, 3, 1}// 391 392 393
, {605, -23, -5, 1}, {605, -12, 2, 1}, {605, -16, 2, 1}// 394 395 396
, {605, -17, 2, 1}, {4014, -15, 3, 1}, {605, -14, 2, 1}// 397 398 399
, {605, -13, 2, 1}, {605, -15, 2, 1}, {3647, -21, 1, 7}// 400 401 402
, {3646, -21, 1, 4}, {3644, -20, 1, 1}, {3644, -21, 1, 1}// 403 404 405
, {3644, -16, 3, 1}, {6787, -24, 8, 1}, {3646, -20, 1, 4}// 406 407 408
, {3644, -16, 4, 1}, {3644, -19, 6, 1}, {605, -22, -5, 1}// 409 411 412
, {3646, -16, 3, 4}, {27, -35, 9, 1}, {27, -29, 10, 1}// 413 414 415
, {27, -35, 12, 1}, {31, -29, 9, 1}, {28, -29, 13, 1}// 416 417 418
, {27, -29, 11, 1}, {604, -29, 18, 1}, {28, -34, 13, 1}// 419 420 421
, {28, -30, 13, 1}, {604, -29, 16, 1}, {604, -29, 17, 1}// 422 423 424
, {28, -33, 13, 1}, {28, -32, 13, 1}, {604, -29, 14, 1}// 425 426 427
, {604, -29, 19, 1}, {27, -29, 13, 1}, {27, -35, 13, 1}// 428 429 430
, {3644, -27, 16, 1}, {604, -29, 15, 1}, {27, -29, 12, 1}// 431 432 433
, {27, -35, 10, 1}, {28, -31, 13, 1}, {3644, -27, 15, 1}// 434 435 436
, {4014, -28, 14, 1}, {27, -35, 11, 1}, {3646, -27, 16, 4}// 437 438 439
, {5356, -30, 0, 7}/*, {5356, -34, 0, 8}, {5356, -34, 0, 7}*/// 440 441 442
, /*{2501, -34, 1, 7},*/ {2880, -30, 0, 1}, {2880, -31, 0, 1}// 443 444 445
, {2879, -34, 3, 1}, {2879, -34, 2, 1}, {2879, -34, 1, 1}// 446 447 448
, {2879, -34, 0, 1}, {27, -29, 4, 1}, {28, -34, -1, 1}// 449 450 451
, {28, -32, -1, 1}, {27, -35, 0, 1}, {604, -28, -2, 1}// 452 453 454
, {604, -28, -3, 1}, {604, -28, -4, 1}, {605, -26, -5, 1}// 455 456 457
, {611, -28, -5, 1}, {27, -29, 0, 1}, {27, -35, 1, 1}// 458 459 460
, {3644, -27, 2, 1}, {612, -28, -1, 1}, {605, -25, -5, 1}// 461 462 463
, {3809, -26, 7, 1}, {605, -29, -1, 1}, {27, -35, 4, 1}// 464 465 466
, {3807, -26, 8, 1}, {32, -29, 5, 1}, {27, -29, 1, 1}// 467 468 469
, {27, -35, 6, 1}, {28, -33, -1, 1}, {3644, -28, 2, 1}// 470 471 472
, {27, -35, 3, 1}, {27, -35, 2, 1}, {27, -35, 7, 1}// 473 475 476
, {27, -29, 2, 1}, {27, -35, 8, 1}, {29, -35, -1, 1}// 477 478 479
, {3807, -26, 5, 1}, {605, -27, -5, 1}/*, {7867, -34, 2, 7}*/// 480 481 482
, {3809, -26, 4, 1}, {27, -29, 3, 1}, {27, -35, 5, 1}// 483 484 485
, {28, -29, -1, 1}, {12254, -34, 6, 1}, {28, -30, -1, 1}// 486 488 489
, {28, -31, -1, 1}/*, {5359, -71, 14, 7}, {7867, -72, 14, 7}*/// 490 491 492
, /*{5370, -69, 9, 1},*/ {5357, -66, 9, 7}, {5357, -72, 15, 7}// 493 494 495
, {3647, -71, 10, 7}, {3646, -71, 10, 4}, {2879, -65, 9, 1}// 496 497 498
, {2879, -66, 9, 1}, {27, -63, 11, 1}, {3644, -68, 14, 1}// 499 500 501
, {3644, -64, 13, 1}, {3644, -70, 10, 1}, {4014, -67, 11, 1}// 502 503 504
, {27, -63, 9, 1}, {3644, -71, 11, 1}, {3644, -71, 10, 1}// 505 506 507
, {4014, -63, 13, 1}, {27, -63, 10, 1}, {27, -61, 15, 1}// 508 509 510
, {27, -61, 18, 1}, {4014, -66, 16, 1}, {3644, -66, 15, 1}// 511 512 513
, {4014, -65, 16, 1}, {26, -61, 19, 1}, {4014, -65, 15, 1}// 514 515 516
, {28, -62, 19, 1}, {4014, -67, 12, 1}, {28, -61, 11, 1}// 517 518 519
, {28, -72, 19, 1}, {27, -61, 13, 1}, {28, -62, 11, 1}// 520 521 522
, {4014, -68, 15, 1}, {28, -71, 19, 1}, {28, -70, 19, 1}// 523 524 525
, {28, -69, 19, 1}, {28, -67, 19, 1}, {28, -68, 19, 1}// 526 527 528
, {27, -61, 14, 1}, {28, -66, 19, 1}, {28, -63, 19, 1}// 529 530 531
, {28, -65, 19, 1}, {27, -61, 12, 1}, {28, -64, 19, 1}// 532 533 534
, {2879, -72, 15, 1}, {2879, -71, 15, 1}, {2879, -71, 14, 1}// 535 536 537
, {2879, -72, 14, 1}, {27, -61, 16, 1}, {3644, -66, 11, 1}// 538 539 540
, {27, -61, 17, 1}/*, {5355, -66, 8, 8}, {5355, -66, 8, 7}*/// 541 542 543
, {3647, -63, -5, 7}, {3646, -63, -5, 4}, {2879, -66, 8, 1}// 555 556 557
, {2879, -65, 8, 1}, {28, -64, 7, 1}, {28, -65, 7, 1}// 558 564 565
, {28, -67, 7, 1}, {28, -66, 7, 1}, {28, -63, 7, 1}// 566 567 568
, {27, -63, 8, 1}, {4014, -68, 4, 1}, {4014, -67, 4, 1}// 569 570 571
, {27, -68, 8, 1}, {27, -63, 6, 1}, {28, -68, 8, 1}// 572 573 574
, {29, -68, 7, 1}, {27, -63, 7, 1}, {3644, -63, -4, 1}// 575 576 577
, {4014, -62, -3, 1}, {3644, -63, 2, 1}, {3644, -63, 1, 1}// 578 579 580
, {30, -69, 8, 1}, {3644, -63, -5, 1}, {3647, -69, -9, 7}// 581 582 583
, {3647, -70, -9, 7}, {3646, -69, -9, 4}, {3644, -70, -9, 1}// 584 585 586
, {3644, -69, -10, 1}, {3646, -70, -9, 4}, {605, -72, -11, 1}// 587 588 589
, {605, -69, -11, 1}, {4014, -72, -10, 1}, {4014, -72, -9, 1}// 590 591 592
, {605, -66, -11, 1}, {605, -67, -11, 1}, {605, -68, -11, 1}// 593 594 595
, {605, -70, -11, 1}, {3644, -69, -9, 1}, {605, -71, -11, 1}// 596 597 598
, /*{2501, -78, 14, 7}, {2501, -78, 15, 7},*/ {2879, -78, 15, 1}// 599 600 601
, {2879, -78, 14, 1}, {2879, -78, 13, 1}, {12254, -78, 11, 1}// 602 603 604
, {28, -78, 19, 1}, {28, -77, 19, 1}, {28, -76, 19, 1}// 605 606 607
, {28, -75, 19, 1}, {28, -74, 19, 1}, {28, -73, 19, 1}// 608 609 610
, {27, -79, 10, 1}, {27, -79, 9, 1}, {27, -79, 13, 1}// 611 612 613
, {27, -79, 14, 1}, {27, -79, 12, 1}, {27, -79, 11, 1}// 614 615 616
, {604, -78, 18, 1}, {27, -79, 16, 1}, {27, -79, 15, 1}// 617 618 619
, {604, -78, 17, 1}, {604, -78, 19, 1}, {604, -75, 6, 1}// 620 621 625
, {604, -75, 5, 1}, {604, -75, 4, 1}, {604, -75, 2, 1}// 626 627 628
, {604, -75, 3, 1}, {604, -75, -5, 1}, {604, -75, 1, 1}// 629 630 631
, {604, -75, -2, 1}, {604, -75, 0, 1}, {604, -75, -1, 1}// 632 633 634
, {604, -75, -4, 1}, {604, -75, -3, 1}, {604, -75, -6, 1}// 635 636 637
, {604, -75, -7, 1}, {29, -79, 8, 1}, {33, -75, 8, 1}// 638 639 640
, {604, -75, 7, 1}, {28, -78, 8, 1}, {28, -77, 8, 1}// 641 642 643
, {28, -76, 8, 1}, {604, -75, 8, 1}, {604, -75, -8, 1}// 644 645 646
, {604, -75, -9, 1}, {604, -75, -10, 1}, {4014, -73, -10, 1}// 647 648 649
, {605, -74, -11, 1}, {605, -73, -11, 1}, {4014, -73, -9, 1}// 650 651 652
, {611, -75, -11, 1}// 653
};
public override BaseAddonDeed Deed { get { return null; } }
[Constructable]
public KhaldunDecorationAddon()
{
Instance = this;
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, 4643, 59, -12, 1, 1105, -1, "", 1);// 121
AddComplexComponent((BaseAddon)this, 8429, 60, -9, 2, 1105, -1, "", 1);// 149
AddComplexComponent((BaseAddon)this, 8429, 59, -9, 2, 1105, -1, "", 1);// 150
AddComplexComponent((BaseAddon)this, 4646, 57, -12, 2, 1105, -1, "", 1);// 152
AddComplexComponent((BaseAddon)this, 4646, 57, -11, 2, 1105, -1, "", 1);// 154
AddComplexComponent((BaseAddon)this, 4648, 62, -12, 2, 1105, -1, "", 1);// 156
AddComplexComponent((BaseAddon)this, 4648, 62, -11, 2, 1105, -1, "", 1);// 160
AddComplexComponent((BaseAddon)this, 14031, -22, 7, 1, 1, -1, "Hole", 1);// 375
AddComplexComponent((BaseAddon)this, 14031, -23, 6, 1, 1, -1, "Hole", 1);// 376
AddComplexComponent((BaseAddon)this, 18818, -24, -2, 1, 1105, -1, "", 1);// 377
AddComplexComponent((BaseAddon)this, 18819, -24, -3, 1, 1105, -1, "", 1);// 378
AddComplexComponent((BaseAddon)this, 14031, -23, 7, 1, 1, -1, "Hole", 1);// 382
AddComplexComponent((BaseAddon)this, 14031, -22, 6, 1, 1, -1, "Hole", 1);// 410
AddComplexComponent((BaseAddon)this, 18820, -25, -2, 1, 1105, -1, "", 1);// 474
AddComplexComponent((BaseAddon)this, 18821, -25, -3, 1, 1105, -1, "", 1);// 487
AddComplexComponent((BaseAddon)this, 4077, -68, -1, 1, 1105, -1, "", 1);// 544
AddComplexComponent((BaseAddon)this, 4076, -69, -1, 1, 1105, -1, "", 1);// 545
AddComplexComponent((BaseAddon)this, 4073, -70, -1, 1, 1105, -1, "", 1);// 546
AddComplexComponent((BaseAddon)this, 4078, -68, -2, 1, 1105, -1, "", 1);// 547
AddComplexComponent((BaseAddon)this, 4074, -69, -2, 1, 1105, -1, "", 1);// 548
AddComplexComponent((BaseAddon)this, 4070, -70, -2, 1, 1105, -1, "", 1);// 549
AddComplexComponent((BaseAddon)this, 4075, -68, -3, 1, 1105, -1, "", 1);// 550
AddComplexComponent((BaseAddon)this, 4072, -69, -3, 1, 1105, -1, "", 1);// 551
AddComplexComponent((BaseAddon)this, 4071, -70, -3, 1, 1105, -1, "", 1);// 552
AddComplexComponent((BaseAddon)this, 6571, -64, 2, 8, 0, 1, "", 1);// 553
AddComplexComponent((BaseAddon)this, 6571, -64, -2, 4, 0, 1, "", 1);// 554
AddComplexComponent((BaseAddon)this, 6571, -72, -4, 4, 0, 1, "", 1);// 559
AddComplexComponent((BaseAddon)this, 6571, -72, 0, 4, 0, 1, "", 1);// 560
AddComplexComponent((BaseAddon)this, 6571, -67, 0, 4, 0, 1, "", 1);// 561
AddComplexComponent((BaseAddon)this, 6571, -67, -4, 4, 0, 1, "", 1);// 562
AddComplexComponent((BaseAddon)this, 6571, -64, -6, 8, 0, 1, "", 1);// 563
AddComplexComponent((BaseAddon)this, 6571, -74, 2, 8, 0, 1, "", 1);// 622
AddComplexComponent((BaseAddon)this, 6571, -74, -2, 4, 0, 1, "", 1);// 623
AddComplexComponent((BaseAddon)this, 6571, -74, -6, 8, 0, 1, "", 1);// 624
}
public KhaldunDecorationAddon( 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();
Instance = this;
}
}
public class KhaldunWorkshop : BaseAddon
{
private static int[,] m_AddOnSimpleComponents = new int[,] {
{7864, 4, 0, 12} // 7 8 9
, {4179, 4, 1, 10}, {4130, -2, -3, 10}, {9932, -2, -2, 10}// 10 11 12
, {7867, -2, 0, 12}, {7129, -2, 1, 10}, {4014, -1, 1, 4}// 13 14 15
, {4015, 1, -3, 4}, {4017, 1, -2, 4}, {4017, 1, 0, 4}// 16 17 18
, {2879, 4, 1, 4}, {2879, -2, -3, 4}, {2879, 4, 0, 4}// 19 20 21
, {2879, 4, -1, 4}, {2879, 4, -2, 4}, {2879, 4, -3, 4}// 22 23 24
, {2879, -2, 1, 4}, {2879, -2, 0, 4}, {2879, -2, -1, 4}// 25 26 27
, {2879, -2, -2, 4}// 28
};
public override BaseAddonDeed Deed { get { return null; } }
[Constructable]
public KhaldunWorkshop()
{
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]);
}
public KhaldunWorkshop(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,51 @@
using System;
using Server;
using Server.Gumps;
namespace Server.Items
{
public class DetectiveBook : Item
{
[Constructable]
public DetectiveBook() : base(4082)
{
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
list.Add(1158598); // Book title
list.Add(1154760, "K. Jasper, Chief Inspector"); // By: ~1_NAME~
}
public override void OnDoubleClick(Mobile m)
{
if (IsChildOf(m.Backpack))
{
Gump g = new Gump(150, 150);
g.AddImage(0, 0, 30236);
g.AddHtmlLocalized(110, 30, 350, 630, 1158600, false, false); // Book content
m.SendGump(g);
}
}
public DetectiveBook(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,36 @@
using Server;
namespace Server.Items
{
public class DetectiveCredentials : BaseNecklace
{
public override int LabelNumber { get { return 1158641; } } // RBG Detective Branch Official Credential
[Constructable]
public DetectiveCredentials()
: base(0x1088)
{
Hue = 1176;
LootType = LootType.Blessed;
}
public DetectiveCredentials(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,116 @@
using System;
using System.Collections.Generic;
using Server;
using Server.Prompts;
using Server.Mobiles;
using Server.Items;
using Server.SkillHandlers;
using Server.Gumps;
using Server.Network;
using Server.Engines.Quests;
namespace Server.Engines.Khaldun
{
public class DustPile : Item, IForensicTarget
{
[CommandProperty(AccessLevel.GameMaster)]
public TrapDoor Door { get; set; }
public DustPile(TrapDoor door)
: base(0x573D)
{
Movable = false;
Hue = 2044;
Name = "";
Door = door;
}
public void OnForensicEval(Mobile m)
{
if (!m.Player)
return;
var quest = QuestHelper.GetQuest<GoingGumshoeQuest2>((PlayerMobile)m);
if (quest != null)
{
if (HasFoundClue(quest))
{
m.SendLocalizedMessage(1158613); // You have already documented this clue.
}
else
{
m.PrivateOverheadMessage(MessageType.Regular, 0x47E, 1157722, "Forensics", m.NetState); // *Your proficiency in ~1_SKILL~ reveals more about the item*
m.SendLocalizedMessage(1158612, null, 0x23); // You have identified a clue! This item seems pertinent to the investigation!
m.SendSound(quest.UpdateSound);
m.SendSound(m.Female ? 0x30B : 0x41A);
m.CloseGump(typeof(GumshoeItemGump));
m.SendGump(new GumshoeItemGump(m, ItemID, Hue, "a dust pile", 1158617, null));
/*The dust seems to have have settled in a distinct pattern around whatever once was placed at this location.
* Whatever it was, it was certainly small enough to be taken away in a hurry.*/
SetFoundClue(quest);
}
}
}
private void SetFoundClue(GoingGumshoeQuest2 quest)
{
if (Door == null)
{
return;
}
switch (Door.Keyword.ToLower())
{
case "boreas": quest.ClueDust1 = true; break;
case "moriens": quest.ClueDust2 = true; break;
case "carthax": quest.ClueDust3 = true; break;
case "tenebrae": quest.ClueDust4 = true; break;
}
}
private bool HasFoundClue(GoingGumshoeQuest2 quest)
{
if (Door == null)
{
return false;
}
switch (Door.Keyword.ToLower())
{
case "boreas": return quest.ClueDust1;
case "moriens": return quest.ClueDust2;
case "carthax": return quest.ClueDust3;
case "tenebrae": return quest.ClueDust4;
}
return false;
}
public DustPile(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
writer.Write(Door);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
Door = reader.ReadItem() as TrapDoor;
}
}
}

View File

@@ -0,0 +1,220 @@
using System;
using Server;
using Server.Mobiles;
using Server.Items;
using Server.SkillHandlers;
using Server.Network;
using Server.Gumps;
using Server.Engines.Quests;
namespace Server.Engines.Khaldun
{
public class BaseGumshoeForensicItem : Item, IForensicTarget
{
public virtual string ItemName { get { return null; } }
public virtual int Cliloc { get { return 0; } }
public override bool DisplayWeight { get { return false; } }
public BaseGumshoeForensicItem(int itemID)
: base(itemID)
{
Movable = false;
}
public void OnForensicEval(Mobile m)
{
if (!m.Player)
return;
var quest = QuestHelper.GetQuest<GoingGumshoeQuest2>((PlayerMobile)m);
if (quest != null)
{
m.PrivateOverheadMessage(MessageType.Regular, 0x47E, 1157722, "Forensics", m.NetState); // *Your proficiency in ~1_SKILL~ reveals more about the item*
m.SendLocalizedMessage(1158612, null, 0x23); // You have identified a clue! This item seems pertinent to the investigation!
m.SendSound(quest.UpdateSound);
m.SendSound(m.Female ? 0x30B : 0x41A);
m.CloseGump(typeof(GumshoeItemGump));
m.SendGump(new GumshoeItemGump(m, ItemID, Hue, ItemName, Cliloc, null));
}
}
public BaseGumshoeForensicItem(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 GumshoeBottles : BaseGumshoeForensicItem
{
public override string ItemName { get { return "bottles of wine"; } }
public override int Cliloc { get { return 1158572; } }
[Constructable]
public GumshoeBottles()
: base(0x9C5)
{
}
public GumshoeBottles(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 GumshoeDeed : BaseGumshoeForensicItem
{
public override string ItemName { get { return "deed"; } }
public override int Cliloc { get { return 1158575; } }
[Constructable]
public GumshoeDeed()
: base(0x14EF)
{
}
public GumshoeDeed(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 GumshoeRope : BaseGumshoeForensicItem
{
public override string ItemName { get { return "rope"; } }
public override int Cliloc { get { return 1158573; } }
[Constructable]
public GumshoeRope()
: base(0x14FA)
{
}
public GumshoeRope(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 GumshoeMap : BaseGumshoeForensicItem
{
public override string ItemName { get { return "map"; } }
public override int Cliloc { get { return 1158574; } }
[Constructable]
public GumshoeMap()
: base(0x14EB)
{
}
public GumshoeMap(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 GumshoeTools : BaseGumshoeForensicItem
{
public override string ItemName { get { return "tools"; } }
public override int Cliloc { get { return 1158576; } }
[Constructable]
public GumshoeTools()
: base(0x1EBB)
{
}
public GumshoeTools(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,32 @@
using System;
using Server.Mobiles;
namespace Server.Items
{
public class GumshoeTitleDeed : BaseRewardTitleDeed
{
public override TextDefinition Title { get { return 1158638; } } // Gumpshoe
[Constructable]
public GumshoeTitleDeed()
{
}
public GumshoeTitleDeed(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,191 @@
using System;
using System.Collections.Generic;
using Server;
using Server.Prompts;
using Server.Mobiles;
using Server.Items;
using Server.SkillHandlers;
using Server.Network;
using Server.Gumps;
using Server.Engines.Quests;
namespace Server.Engines.Khaldun
{
public class MysteriousBook : Item, IForensicTarget
{
public override int LabelNumber { get { return 1158583; } } // mysterious book
public static readonly Point3D SpawnLocation = new Point3D(6240, 2885, 7);
[CommandProperty(AccessLevel.GameMaster)]
public TrapDoor Door { get; set; }
public MysteriousBook(TrapDoor door)
: base(0x42b8)
{
Movable = false;
Door = door;
Hue = 1950;
}
public void OnForensicEval(Mobile m)
{
if (!m.Player)
return;
var quest = QuestHelper.GetQuest<GoingGumshoeQuest2>((PlayerMobile)m);
if (quest != null)
{
if (HasFoundClue1(quest))
{
m.SendLocalizedMessage(1158613); // You have already documented this clue.
}
else
{
m.PrivateOverheadMessage(MessageType.Regular, 0x47E, 1157722, "Forensics", m.NetState); // *Your proficiency in ~1_SKILL~ reveals more about the item*
m.SendLocalizedMessage(1158612, null, 0x23); // You have identified a clue! This item seems pertinent to the investigation!
m.SendSound(quest.UpdateSound);
m.SendSound(m.Female ? 0x30B : 0x41A);
m.CloseGump(typeof(GumshoeItemGump));
m.SendGump(new GumshoeItemGump(m, ItemID, Hue, "book", 1158577, null));
SetFoundClue1(quest);
}
}
}
public void OnInscribeTarget(Mobile m)
{
var quest = QuestHelper.GetQuest<GoingGumshoeQuest2>((PlayerMobile)m);
if (quest != null)
{
if (HasFoundClue2(quest))
{
m.SendLocalizedMessage(1158613); // You have already documented this clue.
}
else
{
m.PrivateOverheadMessage(MessageType.Regular, 0x47E, 1158582, m.NetState); // *You copy several pages onto some parchment and roll it up...*
m.SendLocalizedMessage(1158612, null, 0x23); // You have identified a clue! This item seems pertinent to the investigation!
m.AddToBackpack(new RolledParchment(GetPage()));
m.PlaySound(0x249);
m.SendSound(quest.UpdateSound);
SetFoundClue2(quest);
}
}
}
private void SetFoundClue1(GoingGumshoeQuest2 quest)
{
if (Door == null)
{
return;
}
switch (Door.Keyword.ToLower())
{
case "boreas": quest.ClueBook1_1 = true; break;
case "moriens": quest.ClueBook2_1 = true; break;
case "carthax": quest.ClueBook3_1 = true; break;
case "tenebrae": quest.ClueBook4_1 = true; break;
}
}
private void SetFoundClue2(GoingGumshoeQuest2 quest)
{
if (Door == null)
{
return;
}
switch (Door.Keyword.ToLower())
{
case "boreas": quest.ClueBook1_2 = true; break;
case "moriens": quest.ClueBook2_2 = true; break;
case "carthax": quest.ClueBook3_2 = true; break;
case "tenebrae": quest.ClueBook4_2 = true; break;
}
}
private bool HasFoundClue1(GoingGumshoeQuest2 quest)
{
if (Door == null)
{
return false;
}
switch (Door.Keyword.ToLower())
{
case "boreas": return quest.ClueBook1_1;
case "moriens": return quest.ClueBook2_1;
case "carthax": return quest.ClueBook3_1;
case "tenebrae": return quest.ClueBook4_1;
}
return false;
}
private bool HasFoundClue2(GoingGumshoeQuest2 quest)
{
if (Door == null)
{
return false;
}
switch (Door.Keyword.ToLower())
{
case "boreas": return quest.ClueBook1_2;
case "moriens": return quest.ClueBook2_2;
case "carthax": return quest.ClueBook3_2;
case "tenebrae": return quest.ClueBook4_2;
}
return false;
}
private int GetPage()
{
if (Door == null)
{
return 0;
}
switch (Door.Keyword.ToLower())
{
case "boreas": return 1158629;
case "moriens": return 1158630;
case "carthax": return 1158631;
case "tenebrae": return 1158632;
}
return 0;
}
public MysteriousBook(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
writer.Write(Door);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
Door = reader.ReadItem() as TrapDoor;
}
}
}

View File

@@ -0,0 +1,64 @@
using System;
using System.Collections.Generic;
using Server;
using Server.Prompts;
using Server.Mobiles;
using Server.Items;
using Server.SkillHandlers;
using Server.Network;
using Server.Gumps;
using Server.Engines.Quests;
namespace Server.Engines.Khaldun
{
public class RolledParchment : Item
{
public override int LabelNumber { get { return 1158578; } } // rolled parchment
public int Page { get; set; }
public RolledParchment(int page)
: base(0x2831)
{
Page = page;
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
list.Add(Page);
}
public override void OnDoubleClick(Mobile m)
{
m.CloseGump(typeof(GumshoeItemGump));
m.SendGump(new GumshoeItemGump(m, ItemID, Hue, "rolled parchment", 1158580, "Copied From a Book Found in a Hidden Supply Cache"));
m.PrivateOverheadMessage(MessageType.Regular, 0x47E, 1157722, "its origin", m.NetState); // *Your proficiency in ~1_SKILL~ reveals more about the item*
m.SendSound(m.Female ? 0x30B : 0x41A);
}
public RolledParchment(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
writer.Write(Page);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
Page = reader.ReadInt();
}
}
}

View File

@@ -0,0 +1,221 @@
using System;
using System.Collections.Generic;
using Server;
using Server.Prompts;
using Server.Mobiles;
using Server.Items;
using Server.SkillHandlers;
using Server.Network;
using Server.Engines.Quests;
namespace Server.Engines.Khaldun
{
public class TrapDoor : Item, IRevealableItem, IForensicTarget
{
//public static readonly Point3D TeleportDestination1 = new Point3D(6242, 2892, 17);
public Timer HideTimer { get; set; }
public bool CheckWhenHidden { get { return true; } }
[CommandProperty(AccessLevel.GameMaster)]
public Map DestinationMap { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public Point3D Destination { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public string Keyword { get; set; }
private bool _HasBeenExamined;
[CommandProperty(AccessLevel.GameMaster)]
public bool HasBeenExamined
{
get
{
return _HasBeenExamined;
}
set
{
bool current = _HasBeenExamined;
_HasBeenExamined = value;
if (!current && _HasBeenExamined)
{
HideTimer = Timer.DelayCall(TimeSpan.FromMinutes(20), () => Hide() );
}
}
}
public TrapDoor(string keyword, Point3D dest, Map destMap)
: base(0xA1CD)
{
Keyword = keyword;
Destination = dest;
DestinationMap = destMap;
Movable = false;
Visible = false;
}
public override void Delete()
{
base.Delete();
if (HideTimer != null)
{
HideTimer.Stop();
HideTimer = null;
}
}
private void Hide()
{
Visible = false;
HasBeenExamined = false;
ItemID = 0xA1CD;
if (HideTimer != null)
{
HideTimer.Stop();
HideTimer = null;
}
}
public bool CheckReveal(Mobile m)
{
return true;
}
public bool CheckPassiveDetect(Mobile m)
{
if (m.InRange(Location, 4))
{
if (Utility.Random(100) < 10)
return true;
}
return false;
}
public void OnRevealed(Mobile m)
{
m.PrivateOverheadMessage(MessageType.Regular, 0x47E, 1158556, m.NetState); // *You notice something hidden in the floor...*
Visible = true;
}
public void OnForensicEval(Mobile m)
{
if (!m.Player)
return;
var quest = QuestHelper.GetQuest<GoingGumshoeQuest2>((PlayerMobile)m);
if (quest != null && CheckPrerequisite(quest))
{
m.PrivateOverheadMessage(MessageType.Regular, 0x47E, 1158559, m.NetState); // *You discover a hidden trap door!*
m.SendLocalizedMessage(1158611, null, 0x23); // It seems a trap door has been hidden in some false pavers. The heavy wooden door is secured with a rotating combination lock that accepts alpha-numeric characters. You'll need to figure out the passcode to unlock it...
m.SendSound(quest.UpdateSound);
HasBeenExamined = true;
ItemID = 0xA1CC;
if (HideTimer != null)
{
HideTimer.Stop();
HideTimer = null;
HideTimer = Timer.DelayCall(TimeSpan.FromMinutes(20), () => Hide());
}
}
}
private bool CheckPrerequisite(GoingGumshoeQuest2 quest)
{
switch (Keyword.ToLower())
{
case "boreas": return quest.VisitedHeastone1; // brit
case "moriens": return quest.VisitedHeastone2; // vesper
case "carthax": return quest.VisitedHeastone3; // moonglow
case "tenebrae": return quest.VisitedHeastone4; // yew
}
return false;
}
public override void OnDoubleClick(Mobile m)
{
if (Destination == Point3D.Zero || DestinationMap == null || DestinationMap == Map.Internal || String.IsNullOrEmpty(Keyword))
return;
if (m.InRange(GetWorldLocation(), 2) && _HasBeenExamined)
{
m.Prompt = new TrapDoorPrompt(this);
}
}
private class TrapDoorPrompt : Prompt
{
public override int MessageCliloc { get { return 1158557; } }
public TrapDoor Door { get; set; }
public TrapDoorPrompt(TrapDoor door)
{
Door = door;
}
public override void OnResponse(Mobile from, string text)
{
if (Door.Destination == Point3D.Zero || Door.DestinationMap == null || Door.DestinationMap == Map.Internal || String.IsNullOrEmpty(Door.Keyword))
return;
if (!string.IsNullOrEmpty(text) && text.Trim().ToLower() == Door.Keyword.ToLower())
{
Effects.SendLocationParticles(EffectItem.Create(from.Location, from.Map, EffectItem.DefaultDuration), 0x3728, 10, 10, 2023);
from.MoveToWorld(Door.Destination, Door.DestinationMap);
Effects.SendLocationParticles(EffectItem.Create(Door.Destination, Door.DestinationMap, EffectItem.DefaultDuration), 0x3728, 10, 10, 5023);
}
else
{
from.SendLocalizedMessage(1155663); // Nothign Happens
}
}
public override void OnCancel(Mobile from)
{
}
}
public TrapDoor(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
writer.Write(Keyword);
writer.Write(Destination);
writer.Write(DestinationMap);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
Keyword = reader.ReadString();
Destination = reader.ReadPoint3D();
DestinationMap = reader.ReadMap();
Hide();
}
}
}