// find PCs near public static GameObject fpn(int name, bool living_only = true, bool multiple = false) { foreach (var pc in ObjList.ListVicinity(SelectedPartyLeader.GetLocation(), ObjectListFilter.OLC_PC)) { if ((pc.GetNameId() == name && !multiple)) { return(pc); } else if (name == -1 | multiple) { if (living_only && pc.IsUnconscious()) { continue; } if (pc.GetNameId() != name && multiple) { continue; } var(xx, yy) = pc.GetLocation(); Logger.Info("{0}", pc + ", name ID = " + pc.GetNameId() + ", x = " + xx + ", y = " + yy); pc.FloatMesFileLine("mes/test.mes", xx, TextFloaterColor.Red); pc.FloatMesFileLine("mes/test.mes", yy, TextFloaterColor.Red); return(pc); } } return(null); }
// ------------------------------------------------------------------------------------------ // @ @ @ @ @ @ @ @ @ @ // ------------------------------------------------------------------------------------------ public static GameObject s(int prot) { var(x, y) = SelectedPartyLeader.GetLocation(); var a = spawn(prot, x, y + 1); return(a); }
public override bool OnDialog(GameObject attachee, GameObject triggerer) { if ((SelectedPartyLeader.HasReputation(32) || SelectedPartyLeader.HasReputation(30) || SelectedPartyLeader.HasReputation(29))) { attachee.FloatLine(11004, triggerer); } else if ((GetGlobalFlag(61))) { triggerer.BeginDialog(attachee, 500); } else if ((attachee.GetLeader() != null)) { triggerer.BeginDialog(attachee, 300); } else if ((GetGlobalFlag(51))) { if ((GetQuestState(18) == QuestState.Completed)) { triggerer.BeginDialog(attachee, 220); } else { triggerer.BeginDialog(attachee, 210); } } else { triggerer.BeginDialog(attachee, 1); } return(SkipDefault); }
public override bool OnDialog(GameObject attachee, GameObject triggerer) { if ((GetGlobalFlag(819))) { attachee.Attack(triggerer); return(SkipDefault); } if ((attachee.GetLeader() != null)) { triggerer.BeginDialog(attachee, 100); // spugnoir in party } else if ((GetGlobalVar(913) == 32)) { triggerer.BeginDialog(attachee, 140); // have attacked 3 or more farm animals with spugnoir in party } else if ((SelectedPartyLeader.HasReputation(32) || SelectedPartyLeader.HasReputation(30) || SelectedPartyLeader.HasReputation(29))) { attachee.FloatLine(11004, triggerer); // have lawbreaker or convict or banished from hommlet rep } else { triggerer.BeginDialog(attachee, 1); // none of the above } return(SkipDefault); }
public static void traders_runoff(GameObject attachee) { AttachParticles("orb-summon-fire-elemental", PartyLeader); var gremag = Utilities.find_npc_near(attachee, 8049); var rannos = Utilities.find_npc_near(attachee, 8048); if (gremag != null) { gremag.RunOff(); } if (rannos != null) { rannos.RunOff(gremag.GetLocation().OffsetTiles(-3, 0)); } if (!PartyLeader.HasReputation(23)) { PartyLeader.AddReputation(23); } if (SelectedPartyLeader.GetMap() == 5051) { GameSystems.RandomEncounter.RemoveQueuedEncounter(3159); } attachee.Destroy(); return; }
public override bool OnDialog(GameObject attachee, GameObject triggerer) { if ((SelectedPartyLeader.HasReputation(32) || SelectedPartyLeader.HasReputation(30) || SelectedPartyLeader.HasReputation(29))) { attachee.FloatLine(11004, triggerer); } else { if ((attachee.GetMap() == 5007)) { if ((GetQuestState(19) == QuestState.Unknown)) { triggerer.BeginDialog(attachee, 1); } else if ((GetQuestState(19) == QuestState.Mentioned)) { triggerer.BeginDialog(attachee, 40); } else if ((GetQuestState(19) == QuestState.Accepted || GetQuestState(19) == QuestState.Botched)) { triggerer.BeginDialog(attachee, 50); } else { triggerer.BeginDialog(attachee, 60); } } else { triggerer.BeginDialog(attachee, 90); } } return(SkipDefault); }
public override bool OnDialog(GameObject attachee, GameObject triggerer) { attachee.TurnTowards(triggerer); if ((attachee.GetLeader() != null)) { triggerer.BeginDialog(attachee, 250); // pishella in party } else if ((attachee.GetMap() == 5014)) { triggerer.BeginDialog(attachee, 330); // WotGS Hommlet under attack } else if ((GetGlobalVar(911) == 32 && attachee.GetMap() != 5016 && attachee.GetMap() != 5019)) { triggerer.BeginDialog(attachee, 350); // have attacked 3 or more farm animals with pishella in party and not in castle main hall or parapet interior } else if ((SelectedPartyLeader.HasReputation(32) || SelectedPartyLeader.HasReputation(30) || SelectedPartyLeader.HasReputation(29))) { attachee.FloatLine(12014, triggerer); // have lawbreaker or convict or banished from hommlet reps } else if ((GetGlobalFlag(694))) { triggerer.BeginDialog(attachee, 400); // declined to share information on who is altering construction orders } else if ((PartyLeader.HasReputation(27))) { triggerer.BeginDialog(attachee, 180); // have rabble-rouser reputation } else { triggerer.BeginDialog(attachee, 1); // none of the above } return(SkipDefault); }
public override void OnSpellEffect(SpellPacketBody spell) { Logger.Info("Obscuring Mist OnSpellEffect"); spell.duration = 100 * spell.casterLevel; locXY locc_; if (spell.caster.GetNameId() == 8002 && SelectedPartyLeader.GetMap() == 5005) // Lareth in Moathouse { locc_ = new locXY(483, 534); } else { locc_ = spell.aoeCenter.location; } // spawn one spell_object object var spell_obj = GameSystems.MapObject.CreateObject(OBJECT_SPELL_GENERIC, locc_); // add to d20initiative var caster_init_value = spell.caster.GetInitiative(); spell_obj.InitD20Status(); spell_obj.SetInitiative(caster_init_value); // put sp-Obscuring Mist condition on obj var spell_obj_partsys_id = AttachParticles("sp-Obscuring Mist", spell_obj); spell_obj.AddCondition("sp-Obscuring Mist", spell.spellId, spell.duration, 0, spell_obj_partsys_id); // Added by Sitra Achara # spell_obj.SetInt(obj_f.secretdoor_dc, 333 + (1 << 15)); // Mark it as an "obscuring mist" object. // 1<<15 - marks it as "active" // bits 16 and onward - random ID number Co8PersistentData.AddToSpellActiveList(OBSCURING_MIST_KEY, spell.spellId, spell_obj); }
public override void OnSpellEffect(SpellPacketBody spell) { Logger.Info("Power Word Kill OnSpellEffect"); var target = spell.Targets[0]; // If target has over 100 hit points, spell fails if (target.Object.GetStat(Stat.hp_current) > 100) { target.Object.FloatMesFileLine("mes/spell.mes", 32000); AttachParticles("Fizzle", target.Object); } else { // Otherwise, the target dies. Simple. // So you'll get awarded XP for the kill if (!((SelectedPartyLeader.GetPartyMembers()).Contains(target.Object))) { target.Object.Damage(SelectedPartyLeader, DamageType.Unspecified, Dice.Parse("1d1")); } target.Object.KillWithDeathEffect(); } spell.RemoveTarget(target.Object); spell.EndSpell(); }
public override void OnSpellEffect(SpellPacketBody spell) { Logger.Info("Entangle OnSpellEffect"); spell.duration = 10 * spell.casterLevel; var outdoor_map_list = new[] { 5001, 5002, 5009, 5042, 5043, 5051, 5062, 5068, 5069, 5070, 5071, 5072, 5073, 5074, 5075, 5076, 5077, 5078, 5091, 5093, 5094, 5095, 5096, 5097, 5099, 5100, 5108, 5110, 5111, 5112, 5113, 5119, 5120, 5121, 5132, 5142, 5189 }; if (outdoor_map_list.Contains(SelectedPartyLeader.GetMap()) || !Co8Settings.EntangleOutdoorsOnly) { // spawn one Entangle scenery object var entangle_obj = GameSystems.MapObject.CreateObject(OBJECT_SPELL_GENERIC, spell.aoeCenter); // add to d20initiative var caster_init_value = spell.caster.GetInitiative(); entangle_obj.InitD20Status(); entangle_obj.SetInitiative(caster_init_value); // put sp-Entangle condition on obj var entangle_partsys_id = AttachParticles("sp-Entangle-Area", entangle_obj); entangle_obj.AddCondition("sp-Entangle", spell.spellId, spell.duration, 0, entangle_partsys_id); // entangle_obj.condition_add_arg_x( 3, entangle_partsys_id ) // objectevent_id = entangle_obj.condition_get_arg_x( 2 ) // Added by Sitra Achara # entangle_obj.SetInt(obj_f.secretdoor_dc, 153 + (1 << 15)); // Mark it as an "obscuring mist" object. // 1<<15 - marks it as "active" // bits 16 and onward - random ID number Co8PersistentData.AddToSpellActiveList(ENTANGLE_KEY, spell.spellId, entangle_obj); } else { // End of Section # // No plants to entangle with AttachParticles("Fizzle", spell.caster); spell.caster.FloatMesFileLine("mes/spell.mes", 30000); spell.caster.FloatMesFileLine("mes/spell.mes", 16014); } }
public override void OnSpellEffect(SpellPacketBody spell) { Logger.Info("Cloudkill OnSpellEffect"); spell.duration = 10 * spell.casterLevel; // added so you'll get awarded XP for the kill foreach (var target_item in spell.Targets) { if (!((SelectedPartyLeader.GetPartyMembers()).Contains(target_item.Object))) { if ((target_item.Object.GetObjectFlags() & ObjectFlag.INVULNERABLE) == 0) { target_item.Object.SetObjectFlag(ObjectFlag.INVULNERABLE); target_item.Object.Damage(SelectedPartyLeader, DamageType.Unspecified, Dice.Parse("1d1")); target_item.Object.ClearObjectFlag(ObjectFlag.INVULNERABLE); } else { target_item.Object.Damage(SelectedPartyLeader, DamageType.Unspecified, Dice.Parse("1d1")); } } } // spawn one Cloudkill scenery object var cloudkill_obj = GameSystems.MapObject.CreateObject(OBJECT_SPELL_GENERIC, spell.aoeCenter); // add to d20initiative var caster_init_value = spell.caster.GetInitiative(); cloudkill_obj.InitD20Status(); cloudkill_obj.SetInitiative(caster_init_value); // put sp-cloudkill_obj condition on obj var cloudkill_obj_partsys_id = AttachParticles("sp-Cloudkill", cloudkill_obj); cloudkill_obj.AddCondition("sp-Cloudkill", spell.spellId, spell.duration, 0, cloudkill_obj_partsys_id); }
public override void OnSpellEffect(SpellPacketBody spell) { Logger.Info("Finger of Death OnSpellEffect"); var damage_dice = Dice.Parse("3d6"); damage_dice = damage_dice.WithModifier(Math.Min(25, spell.casterLevel)); var target = spell.Targets[0]; AttachParticles("sp-Slay Living", target.Object); // damage target if (target.Object.SavingThrowSpell(spell.dc, SavingThrowType.Fortitude, D20SavingThrowFlag.NONE, spell.caster, spell.spellId)) { target.Object.FloatMesFileLine("mes/spell.mes", 30001); // saving throw succesful, damage target target.Object.DealSpellDamage(spell.caster, DamageType.Unspecified, damage_dice, D20AttackPower.UNSPECIFIED, D20ActionType.CAST_SPELL, spell.spellId); } else { target.Object.FloatMesFileLine("mes/spell.mes", 30002); // saving throw unsuccesful, kill target // So you'll get awarded XP for the kill if (!((SelectedPartyLeader.GetPartyMembers()).Contains(target.Object))) { target.Object.Damage(SelectedPartyLeader, DamageType.Unspecified, Dice.Parse("1d1")); } target.Object.KillWithDeathEffect(); } spell.RemoveTarget(target.Object); spell.EndSpell(); }
public override bool OnFirstHeartbeat(GameObject attachee, GameObject triggerer) { // Respawn if ((!GetGlobalFlag(912))) { StartTimer(604800000, () => respawn(attachee)); // 604800000ms is 1 week SetGlobalFlag(912, true); } // The 'evac' routine if (ScriptDaemon.get_f("boatmens_tavern_evac_on") && SelectedPartyLeader.GetMap() == 5052) { StartTimer(300, () => ScriptDaemon.set_f("boatmens_tavern_evac_on", false)); if (attachee.GetNameId() == 14133 && !ScriptDaemon.get_f("lodriss_killed_outside")) // For Lodriss { attachee.ClearObjectFlag(ObjectFlag.OFF); } else { // else : # For the others attachee.ClearObjectFlag(ObjectFlag.OFF); } } // game.new_sid = 0 if (attachee.GetNameId() == 14152 && SelectedPartyLeader.GetMap() == 5051) // Tolub, outside { attachee.ClearObjectFlag(ObjectFlag.OFF); } return(RunDefault); }
public override bool OnDialog(GameObject attachee, GameObject triggerer) { if ((SelectedPartyLeader.HasReputation(32) || SelectedPartyLeader.HasReputation(30) || SelectedPartyLeader.HasReputation(29))) { attachee.FloatLine(11002, triggerer); } else { if ((triggerer.GetStat(Stat.charisma) >= 8 && triggerer.GetGender() == Gender.Female)) { if ((attachee.HasMet(triggerer))) { triggerer.BeginDialog(attachee, 70); } else { triggerer.BeginDialog(attachee, 1); } } else { triggerer.BeginDialog(attachee, 80); } } return(SkipDefault); }
public override void OnSpellEffect(SpellPacketBody spell) { Logger.Info("Produce Flame OnSpellEffect"); var(xx, yy) = spell.caster.GetLocation(); if (SelectedPartyLeader.GetMap() == 5067 && (xx >= 521 && xx <= 555) && (yy >= 560 && yy <= 610)) { // Water Temple Pool Enchantment prevents fire spells from working inside the chamber, according to the module -SA AttachParticles("swirled gas", spell.caster); spell.caster.FloatMesFileLine("mes/skill_ui.mes", 2000, TextFloaterColor.Red); Sound(7581, 1); Sound(7581, 1); } else { spell.duration = 10 * spell.casterLevel; if (spell.casterLevel > 5) { spell.casterLevel = 5; } var target = spell.Targets[0]; target.Object.AddCondition("sp-Produce Flame", spell.spellId, spell.duration, 0); target.ParticleSystem = AttachParticles("sp-Produce Flame", target.Object); } }
public override bool OnDialog(GameObject attachee, GameObject triggerer) { if ((SelectedPartyLeader.HasReputation(32) || SelectedPartyLeader.HasReputation(30) || SelectedPartyLeader.HasReputation(29))) { attachee.FloatLine(11004, triggerer); } else { if ((attachee.GetLeader() != null)) { if ((GetGlobalFlag(207))) { triggerer.BeginDialog(attachee, 80); } else { triggerer.BeginDialog(attachee, 100); } } else if ((GetGlobalFlag(207))) { triggerer.BeginDialog(attachee, 50); } else if ((attachee.HasMet(triggerer))) { triggerer.BeginDialog(attachee, 30); } else { triggerer.BeginDialog(attachee, 1); } } return(SkipDefault); }
public override bool OnDialog(GameObject attachee, GameObject triggerer) { if ((attachee.GetMap() == 5001 && (SelectedPartyLeader.HasReputation(32) || SelectedPartyLeader.HasReputation(30) || SelectedPartyLeader.HasReputation(29)))) { attachee.FloatLine(11004, triggerer); } else { if ((!attachee.HasMet(triggerer))) { if ((!GetGlobalFlag(169))) { triggerer.BeginDialog(attachee, 1); } else { triggerer.BeginDialog(attachee, 40); } } else if ((GetGlobalFlag(169))) { triggerer.BeginDialog(attachee, 100); } else if ((GetGlobalFlag(170))) { triggerer.BeginDialog(attachee, 110); } else { triggerer.BeginDialog(attachee, 120); } } return(SkipDefault); }
public static bool join_temple(string temple_name_input) { var temple_name = temple_name_input.ToString(); if (temple_name == "water") { SetGlobalFlag(112, true); // Oohlgrist has joined water temple if ((ScriptDaemon.get_v(454) & 2) == 2) // Water has already regrouped { ScriptDaemon.set_v(454, ScriptDaemon.get_v(454) | 0x40); } } else if (temple_name == "fire") { SetGlobalFlag(118, true); // Oohlgrist has joined fire temple if ((ScriptDaemon.get_v(454) & 0x8) == 0x8) // Fire has already regrouped { ScriptDaemon.set_v(454, ScriptDaemon.get_v(454) | 0x10); } } else { SelectedPartyLeader.Damage(null, DamageType.Subdual, Dice.Parse("500d1")); SelectedPartyLeader.FloatMesFileLine("mes/skill_ui.mes", 155); } return(SkipDefault); }
public override bool OnRemoveItem(GameObject attachee, GameObject triggerer) { if (PartyLeader.GetMap() == 5079 && triggerer.GetNameId() == 1050) // Zuggtmoy level, taking from throne of gems { var zuggtmoy = Utilities.find_npc_near(triggerer, 8064); var loc = triggerer.GetLocation(); var rot = triggerer.Rotation; triggerer.Destroy(); var empty_throne = GameSystems.MapObject.CreateObject(1051, loc); empty_throne.Rotation = rot; UiSystems.CharSheet.Hide(); if (((zuggtmoy != null) && (SelectedPartyLeader != null))) { if ((GetGlobalFlag(181))) { SetGlobalFlag(181, false); Zuggtmoy.transform_into_demon_form(zuggtmoy, SelectedPartyLeader, 320); } else { SelectedPartyLeader.BeginDialog(zuggtmoy, 320); } } DetachScript(); return(RunDefault); } else { return(SkipDefault); } }
public override bool OnHeartbeat(GameObject attachee, GameObject triggerer) { var c_time = Council.council_time(); if ((attachee.GetMap() == 5048 && ScriptDaemon.get_v(435) != 0 && c_time == 1)) { // Townhall if (ScriptDaemon.get_v(435) == 1) { ScriptDaemon.set_v(435, 3); Council_Script(attachee, triggerer); } } if ((attachee.GetMap() == 5048)) { // Townhall if ((ScriptDaemon.get_v(436) == 3 && ScriptDaemon.get_v(435) < 4)) { // you've found the trap, initiate dialogue with rufus to GTFO foreach (var npc in ObjList.ListVicinity(attachee.GetLocation(), ObjectListFilter.OLC_NPC)) { if ((npc.GetNameId() == 8071)) { SelectedPartyLeader.BeginDialog(npc, 2000); } } } } return(RunDefault); }
public override bool OnHeartbeat(GameObject attachee, GameObject triggerer) { if ((GetGlobalVar(765) == 1 || GetGlobalVar(765) == 2 || GetGlobalFlag(283))) { attachee.SetObjectFlag(ObjectFlag.OFF); return(SkipDefault); } else if (((attachee.GetMap() == 5002) && (GetGlobalVar(765) == 0) && (PartyAlignment != Alignment.LAWFUL_EVIL) && (GetGlobalFlag(977)) && (GetGlobalVar(710) == 3)) && !Co8Settings.DisableNewPlots && ((GetGlobalVar(450) & (1 << 11)) == 0)) { if (!SelectedPartyLeader.GetPartyMembers().Any(o => o.HasFollowerByName(8002)) && !SelectedPartyLeader.GetPartyMembers().Any(o => o.HasFollowerByName(8004)) && !SelectedPartyLeader.GetPartyMembers().Any(o => o.HasFollowerByName(8005)) && !SelectedPartyLeader.GetPartyMembers().Any(o => o.HasFollowerByName(8010))) { if (((!GetGlobalFlag(44)) && (!GetGlobalFlag(45)) && (!GetGlobalFlag(700)) && (GetGlobalFlag(37)) && (!GetGlobalFlag(283)))) { attachee.ClearObjectFlag(ObjectFlag.OFF); if ((!GameSystems.Combat.IsCombatActive())) { if ((is_better_to_talk(attachee, PartyLeader))) { StartTimer(2000, () => start_talking(attachee, triggerer)); DetachScript(); } } } } } return(RunDefault); }
public static GameObject bsp(int prot) { var a = GameSystems.MapObject.CreateObject(prot, SelectedPartyLeader.GetLocation()); a.ClearNpcFlag(NpcFlag.KOS); a.Move(SelectedPartyLeader.GetLocation(), 0, 0); return(a); }
public override bool OnNewMap(GameObject attachee, GameObject triggerer) { if ((GetGlobalFlag(195))) { SelectedPartyLeader.BeginDialog(attachee, 480); } return(SkipDefault); }
public static bool equip_transfer2(GameObject attachee, GameObject triggerer) { if (SelectedPartyLeader.GetPartyMembers().Any(o => o.HasItemByName(2201))) { Utilities.party_transfer_to(attachee, 2201); } return(RunDefault); }
public override bool OnNewMap(GameObject attachee, GameObject triggerer) { if ((attachee.GetStat(Stat.level_fighter) >= 8)) { SelectedPartyLeader.BeginDialog(attachee, 230); } return(SkipDefault); }
public override bool OnDying(GameObject attachee, GameObject triggerer) { SetGlobalVar(28, GetGlobalVar(28) + 1); if ((GetGlobalVar(28) >= 5)) { GameSystems.MapObject.CreateObject(14330, SelectedPartyLeader.GetLocation()); } return(RunDefault); }
public static void killkos() { foreach (var moshe in ObjList.ListVicinity(SelectedPartyLeader.GetLocation(), ObjectListFilter.OLC_NPC)) { if (((moshe.GetNpcFlags() & NpcFlag.KOS) != 0 && (moshe.GetNpcFlags() & NpcFlag.KOS_OVERRIDE) == 0 && moshe.GetScriptId(ObjScriptEvent.WillKos) == 0 && moshe.GetLeader() == null)) { var damage_dice = Dice.Parse("50d50"); moshe.Damage(PartyLeader, DamageType.Bludgeoning, damage_dice); } } }
public static void give_a_ton() { foreach (var obj in SelectedPartyLeader.GetPartyMembers()) { var curxp = obj.GetStat(Stat.experience); var newxp = curxp + 100; obj.SetBaseStat(Stat.experience, newxp); obj.FloatMesFileLine("mes/narrative.mes", 1010); } return; }
public static bool party_too_far_from_lareth(GameObject lareth) { foreach (var pc in SelectedPartyLeader.GetPartyMembers()) { if (pc.GetLocation().locx <= 495 || lareth.DistanceToInFeetClamped(pc) <= 42) { return(false); } } return(true); }
public static void run_off(GameObject npc, GameObject pc) { foreach (var obj in ObjList.ListVicinity(npc.GetLocation(), ObjectListFilter.OLC_NPC)) { if ((obj.GetLeader() == null && !((SelectedPartyLeader.GetPartyMembers()).Contains(obj)))) { obj.RunOff(); } } return; }