public override void DoAction(NWPlayer player, string pageName, int responseID) { switch (pageName) { case "MainPage": switch (responseID) { // Open Overflow Inventory case 1: NWObject storage = (_.CreateObject(ObjectType.Placeable, "overflow_storage", player.Location)); player.AssignCommand(() => _.ActionInteractObject(storage.Object)); break; // View Skills case 2: SwitchConversation("ViewSkills"); break; // View Perks case 3: SwitchConversation("ViewPerks"); break; // View Blueprints case 4: SwitchConversation("ViewBlueprints"); break; // Key Item Categories Page case 5: SwitchConversation("KeyItems"); break; // Modify Item Appearance case 6: SwitchConversation("ModifyItemAppearance"); break; // Character Management case 7: SwitchConversation("CharacterManagement"); break; // Open Trash Can (Destroy Items) case 8: EndConversation(); NWPlaceable trashCan = (_.CreateObject(ObjectType.Placeable, "reo_trash_can", player.Location)); player.AssignCommand(() => _.ActionInteractObject(trashCan.Object)); _.DelayCommand(0.2f, () => trashCan.IsUseable = false); break; // HoloCom case 9: SwitchConversation("HoloCom"); break; } break; } }
public bool Run(params object[] args) { NWPlayer player = NWPlayer.Wrap(_.GetLastUsedBy()); NWPlaceable warp = NWPlaceable.Wrap(Object.OBJECT_SELF); bool isExit = warp.GetLocalInt("IS_EXIT") == NWScript.TRUE; if (isExit) { PlayerCharacter entity = _player.GetPlayerEntity(player.GlobalID); NWArea area = NWArea.Wrap(_.GetObjectByTag(entity.LocationAreaTag)); Vector position = _.Vector((float)entity.LocationX, (float)entity.LocationY, (float)entity.LocationZ); Location location = _.Location(area.Object, position, (float)entity.LocationOrientation); player.AssignCommand(() => _.ActionJumpToLocation(location)); } else { _player.SaveLocation(player); NWObject waypoint = NWObject.Wrap(_.GetWaypointByTag("TUTORIAL_WP")); player.AssignCommand(() => _.ActionJumpToLocation(waypoint.Location)); } return(true); }
public bool Run(params object[] args) { NWPlayer player = (_.GetLastUsedBy()); NWPlaceable warp = (Object.OBJECT_SELF); bool isExit = warp.GetLocalInt("IS_EXIT") == _.TRUE; if (isExit) { Player entity = PlayerService.GetPlayerEntity(player.GlobalID); NWArea area = NWModule.Get().Areas.Single(x => x.Resref == entity.LocationAreaResref); Vector position = _.Vector((float)entity.LocationX, (float)entity.LocationY, (float)entity.LocationZ); Location location = _.Location(area.Object, position, (float)entity.LocationOrientation); player.AssignCommand(() => _.ActionJumpToLocation(location)); } else { PlayerService.SaveLocation(player); NWObject waypoint = (_.GetWaypointByTag("TUTORIAL_WP")); player.AssignCommand(() => _.ActionJumpToLocation(waypoint.Location)); } return(true); }
public override void DoAction(NWPlayer player, string pageName, int responseID) { switch (pageName) { case "MainPage": switch (responseID) { // Open Overflow Inventory case 1: NWObject storage = (_.CreateObject(NWScript.OBJECT_TYPE_PLACEABLE, "overflow_storage", player.Location)); player.AssignCommand(() => _.ActionInteractObject(storage.Object)); break; // View Skills case 2: SwitchConversation("ViewSkills"); break; // View Perks case 3: SwitchConversation("ViewPerks"); break; // View Blueprints case 4: SwitchConversation("ViewBlueprints"); break; // Key Item Categories Page case 5: SwitchConversation("KeyItems"); break; // Modify Clothes case 6: player.AssignCommand(() => _.ActionStartConversation(player.Object, "x0_skill_ctrap", 1, 0)); break; // Character Management case 7: SwitchConversation("CharacterManagement"); break; // Open Trash Can (Destroy Items) case 8: EndConversation(); NWPlaceable trashCan = (_.CreateObject(NWScript.OBJECT_TYPE_PLACEABLE, "reo_trash_can", player.Location)); player.AssignCommand(() => _.ActionInteractObject(trashCan.Object)); _.DelayCommand(0.2f, () => trashCan.IsUseable = false); break; } break; } }
private static void ToggleDualModeWeapon(NWPlayer oPC) { NWItem oOriginalItem = _.GetPCItemLastEquipped(); NWItem oMainHandPistol; Player pc = DataService.Player.GetByID(oPC.GlobalID); if (pc.ModeDualPistol) { oMainHandPistol = CreateItemOnObject("dualpistolmain", oPC); } else { oMainHandPistol = CreateItemOnObject("blaster_b", oPC); } oMainHandPistol = CopyWeaponAppearance(oPC, oOriginalItem, oMainHandPistol, true); oPC.AssignCommand(() => { ActionEquipItem(oMainHandPistol, InventorySlot.RightHand); }); if (pc.ModeDualPistol) { _.DelayCommand(0.2f, () => { HandleOffhand(oPC, oMainHandPistol); }); } oOriginalItem.Destroy(); }
private static void HandleOffhand(NWPlayer oPC, NWItem oMainHandPistol) { NWItem oOffHandPistol = CreateItemOnObject("offhandpistol", oPC); //if (NWNX.NWNXObject.CheckFit(oPC, (int)BaseItem.OffHandPistol) == 1) if (oOffHandPistol.Possessor == oPC) { //Console.WriteLine("It fits!"); oOffHandPistol = CopyWeaponAppearance(oPC, oMainHandPistol, oOffHandPistol, false); oPC.AssignCommand(() => { ActionEquipItem(oOffHandPistol, InventorySlot.LeftHand); }); } else { //Console.WriteLine("It doesn't fit :("); oPC.DelayAssignCommand(() => { ActionUnequipItem(oMainHandPistol); DestroyObject(oOffHandPistol); }, 0.5f); } }
public void DoAction(NWPlayer user, NWObject target, NWLocation targetLocation, params string[] args) { user.AssignCommand(() => { _.ActionPlayAnimation(Animation.LoopingGetLow); }); }
public void DoAction(NWPlayer user, NWObject target, NWLocation targetLocation, params string[] args) { user.AssignCommand(() => { _.ActionPlayAnimation(ANIMATION_LOOPING_GET_MID); }); }
public void IncreaseHungerLevel(NWPlayer oPC, int amount, bool isTainted) { if (!oPC.IsPlayer) { return; } PlayerCharacter entity = _db.PlayerCharacters.Single(x => x.PlayerID == oPC.GlobalID); entity.CurrentHunger += amount; if (entity.CurrentHunger > entity.MaxHunger) { entity.CurrentHunger = entity.MaxHunger; } oPC.AssignCommand(() => { _.ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE); }); oPC.SendMessage("Hunger: " + _menu.BuildBar(entity.CurrentHunger, entity.MaxHunger, 100)); _db.SaveChanges(); if (isTainted) { if (_random.Random(100) + 1 <= 40) { int ticks = 600 + _random.Random(300); _customEffect.ApplyCustomEffect(oPC, oPC, CustomEffectType.FoodDisease, ticks, 0); } } }
private void RunMeditate(NWPlayer oPC, Vector originalPosition, int amount) { Vector position = oPC.Position; if ((position.m_X != originalPosition.m_X || position.m_Y != originalPosition.m_Y || position.m_Z != originalPosition.m_Z) || !CanMeditate(oPC) || !oPC.IsValid) { oPC.SendMessage("You stop meditating."); oPC.IsBusy = false; return; } _ability.RestoreMana(oPC, amount); Effect vfx = _.EffectVisualEffect(VFX_IMP_HEAD_MIND); _.ApplyEffectToObject(DURATION_TYPE_INSTANT, vfx, oPC.Object); oPC.AssignCommand(() => { _.ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE, 1.0f, 6.1f); }); oPC.DelayCommand(() => { RunMeditate(oPC, originalPosition, amount); }, 6.0f); }
public bool Run(params object[] args) { NWPlaceable placeable = (Object.OBJECT_SELF); NWPlayer user = placeable.ObjectType == OBJECT_TYPE_PLACEABLE? _.GetLastUsedBy() : _.GetClickingObject(); if (!user.IsPlayer && !user.IsDM) { return(false); } string conversation = placeable.GetLocalString("CONVERSATION"); NWObject target = placeable.GetLocalInt("TARGET_PC") == TRUE ? user.Object : placeable.Object; if (!string.IsNullOrWhiteSpace(conversation)) { _dialog.StartConversation(user, target, conversation); } else { user.AssignCommand(() => _.ActionStartConversation(target, string.Empty, TRUE, FALSE)); } return(true); }
public bool Run(params object[] args) { NWObject door = Object.OBJECT_SELF; if (!door.Area.IsInstance) { return(false); } NWObject target = _.GetTransitionTarget(door); NWPlayer player = _.GetClickingObject(); _.DelayCommand(6.0f, () => { int playerCount = NWModule.Get().Players.Count(x => !Equals(x, player) && Equals(x.Area, door.Area)); if (playerCount <= 0) { _area.DestroyAreaInstance(door.Area); } }); player.AssignCommand(() => { _.ActionJumpToLocation(target.Location); }); return(true); }
public void OnImpact(NWPlayer oPC, NWObject oTarget) { int perkLevel = _perk.GetPCPerkLevel(oPC, PerkType.Meditate); Vector position = oPC.Position; int amount; switch (perkLevel) { default: amount = 1; break; case 4: case 5: case 6: amount = 2; break; case 7: amount = 3; break; } oPC.AssignCommand(() => { _.ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE, 1.0f, 6.1f); }); oPC.DelayCommand(() => { RunMeditate(oPC, position, amount); }, 6.0f); oPC.SendMessage("You begin to meditate..."); oPC.IsBusy = true; }
private static void OnModuleUnequipItem() { NWPlayer oPC = _.GetPCItemLastUnequippedBy(); NWItem oItem = _.GetPCItemLastUnequipped(); if (GetLocalBool(oPC, "IS_CUSTOMIZING_ITEM")) { return; // Don't run heavy code when customizing equipment. } if (!oPC.IsPlayer) { return; } if (oItem.BaseItemType == BaseItem.Sling) { NWItem oOffHandPistol = GetItemInSlot(InventorySlot.LeftHand, oPC); //Console.WriteLine("Un Equiping Sling based item."); DestroyObject(oOffHandPistol); } if (oItem.BaseItemType == BaseItem.OffHandPistol) { NWItem oMainHandItem = GetItemInSlot(InventorySlot.RightHand, oPC); oPC.AssignCommand(() => { ActionUnequipItem(oMainHandItem); }); DestroyObject(oItem); } }
private static void OnModuleUnaquireItem() { NWPlayer oPC = _.GetModuleItemLostBy(); NWItem oItem = _.GetModuleItemLost(); if (GetLocalBool(oPC, "IS_CUSTOMIZING_ITEM")) { return; // Don't run heavy code when customizing equipment. } if (!oPC.IsPlayer) { return; } if (oItem.BaseItemType == BaseItem.OffHandPistol) { NWItem oMainHandItem = GetItemInSlot(InventorySlot.RightHand, oPC); if (oMainHandItem.BaseItemType == BaseItem.Sling) { oPC.AssignCommand(() => { ActionUnequipItem(oMainHandItem); }); } DestroyObject(oItem); } }
public override void DoAction(NWPlayer player, string pageName, int responseID) { var model = GetDialogCustomData <Model>(); NWLocation location; if (responseID == 1) // Create new instance { var instance = AreaService.CreateAreaInstance(player, model.AreaResref, string.Empty, model.DestinationTag); location = instance.GetLocalLocation("INSTANCE_ENTRANCE"); } else { var response = GetResponseByID("MainPage", responseID); NWObject member = (NWObject)response.CustomData; if (!member.IsValid) { player.SendMessage("Unable to locate party member."); return; } var area = member.Area; location = area.GetLocalLocation("INSTANCE_ENTRANCE"); } PlayerService.SaveLocation(player); player.AssignCommand(() => { _.ActionJumpToLocation(location); }); EndConversation(); }
public void DoAction(NWPlayer user, NWObject target, NWLocation targetLocation, params string[] args) { user.AssignCommand(() => { _.ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_BORED); }); }
protected override void DoAction(NWPlayer user, float duration) { user.AssignCommand(() => { _.ActionPlayAnimation(ANIMATION_LOOPING_CUSTOM1, 1.0f, duration); }); }
public void DoAction(NWPlayer user, NWObject target, NWLocation targetLocation, params string[] args) { user.AssignCommand(() => { _.ActionPlayAnimation(Animation.FireForgetDodgeDuck); }); }
public void JumpPCToBuildingInterior(NWPlayer player, NWArea area) { NWObject exit = null; NWObject @object = (_.GetFirstObjectInArea(area.Object)); while (@object.IsValid) { if (@object.Tag == "building_exit") { exit = @object; } @object = (_.GetNextObjectInArea(area.Object)); } if (exit == null) { player.FloatingText("ERROR: Couldn't find the building interior's exit. Inform an admin of this issue."); return; } _player.SaveLocation(player); exit.SetLocalLocation("PLAYER_HOME_EXIT_LOCATION", player.Location); exit.SetLocalInt("IS_BUILDING_DOOR", 1); Location location = area.GetLocalLocation("INSTANCE_ENTRANCE"); player.AssignCommand(() => { _.ActionJumpToLocation(location); }); }
protected override void DoAction(NWPlayer user, float duration) { user.AssignCommand(() => { _.ActionPlayAnimation(Animation.LoopingTalkLaughing, 1.0f, duration); }); }
public void Main() { NWObject door = _.OBJECT_SELF; if (!door.Area.IsInstance) { return; } NWObject target = _.GetTransitionTarget(door); NWPlayer player = _.GetClickingObject(); _.DelayCommand(6.0f, () => { int playerCount = NWModule.Get().Players.Count(x => !Equals(x, player) && Equals(x.Area, door.Area)); if (playerCount <= 0) { //AreaService.DestroyAreaInstance(door.Area); } }); player.AssignCommand(() => { _.ActionJumpToLocation(target.Location); }); }
private static void OnModuleUnequipItem() { NWPlayer player = _.GetPCItemLastUnequippedBy(); if (player.GetLocalInt("IS_CUSTOMIZING_ITEM") == _.TRUE) { return; // Don't run heavy code when customizing equipment. } NWItem oItem = _.GetPCItemLastUnequipped(); // Remove lightsaber hum effect. foreach (var effect in player.Effects.Where(x => _.GetEffectTag(x) == "LIGHTSABER_HUM")) { _.RemoveEffect(player, effect); } // Handle lightsaber sounds if (oItem.CustomItemType == CustomItemType.Lightsaber || oItem.CustomItemType == CustomItemType.Saberstaff) { player.AssignCommand(() => { _.PlaySound("saberoff"); }); } }
public void Main() { NWObject door = NWGameObject.OBJECT_SELF; NWArea area = door.Area; NWPlayer player = GetClickingObject(); if (!player.IsValid) { player = GetLastUsedBy(); } int remainingKeyCards = area.GetLocalInt("KEY_CARDS_REMAINING"); if (remainingKeyCards > 0) { player.FloatingText("You need " + remainingKeyCards + "x key card(s) to access this elevator."); } else { player.FloatingText("You access the elevator with the found key cards."); string destinationWPTag = door.GetLocalString("DESTINATION_WAYPOINT"); string destinationAreaTag = door.GetLocalString("DESTINATION_AREA_TAG"); NWArea destinationArea = area.GetLocalObject(destinationAreaTag); NWLocation destinationLocation = GetLocation(GetNearestObjectByTag(destinationWPTag, GetFirstObjectInArea(destinationArea))); player.AssignCommand(() => { ActionJumpToLocation(destinationLocation); }); } }
public void OnImpact(NWPlayer oPC, NWObject oTarget) { int level = _perk.GetPCPerkLevel(oPC, PerkType.HolyShot); int damage; int alterationBonus = oPC.EffectiveAlterationBonus; switch (level) { case 1: damage = _random.Random(8 + alterationBonus) + 1; break; case 2: damage = _random.Random(6 + alterationBonus) + 1; damage += _random.Random(6 + alterationBonus) + 1; break; case 3: damage = _random.Random(6 + alterationBonus) + 1; damage += _random.Random(6 + alterationBonus) + 1; break; case 4: damage = _random.Random(4 + alterationBonus) + 1; damage += _random.Random(4 + alterationBonus) + 1; damage += _random.Random(4 + alterationBonus) + 1; damage += _random.Random(4 + alterationBonus) + 1; break; case 5: damage = _random.Random(4 + alterationBonus) + 1; damage += _random.Random(4 + alterationBonus) + 1; damage += _random.Random(4 + alterationBonus) + 1; damage += _random.Random(4 + alterationBonus) + 1; damage += _random.Random(4 + alterationBonus) + 1; break; default: return; } int wisdom = oPC.WisdomModifier; int intelligence = oPC.IntelligenceModifier; float damageMultiplier = 1.0f + (intelligence * 0.4f) + (wisdom * 0.2f); damage = (int)(damage * damageMultiplier); Effect vfx = _.EffectBeam(VFX_BEAM_SILENT_HOLY, oPC.Object, BODY_NODE_CHEST); _.ApplyEffectToObject(DURATION_TYPE_TEMPORARY, vfx, oTarget.Object, 1.5f); _skill.RegisterPCToNPCForSkill(oPC, NWCreature.Wrap(oTarget.Object), SkillType.AlterationMagic); oPC.AssignCommand(() => { _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectDamage(damage), oTarget.Object); }); }
public void OnImpact(NWPlayer oPC, NWObject oTarget) { int level = _perk.GetPCPerkLevel(oPC, PerkType.LightningShock); int damage; int evocationBonus = oPC.EffectiveEvocationBonus; switch (level) { case 1: damage = _random.Random(8 + evocationBonus) + 1; break; case 2: damage = _random.Random(6 + evocationBonus) + 1; damage += _random.Random(6 + evocationBonus) + 1; break; case 3: damage = _random.Random(6 + evocationBonus) + 1; damage += _random.Random(6 + evocationBonus) + 1; break; case 4: damage = _random.Random(4 + evocationBonus) + 1; damage += _random.Random(4 + evocationBonus) + 1; damage += _random.Random(4 + evocationBonus) + 1; damage += _random.Random(4 + evocationBonus) + 1; break; case 5: damage = _random.Random(4 + evocationBonus) + 1; damage += _random.Random(4 + evocationBonus) + 1; damage += _random.Random(4 + evocationBonus) + 1; damage += _random.Random(4 + evocationBonus) + 1; damage += _random.Random(4 + evocationBonus) + 1; break; default: return; } int wisdom = oPC.WisdomModifier; int intelligence = oPC.IntelligenceModifier; float damageMultiplier = 1.0f + (intelligence * 0.2f) + (wisdom * 0.1f); damage = (int)(damage * damageMultiplier); _skill.RegisterPCToNPCForSkill(oPC, (NWCreature)oTarget, SkillType.EvocationMagic); _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectVisualEffect(VFX_IMP_DOOM), oTarget.Object); oPC.AssignCommand(() => { _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectDamage(damage), oTarget.Object); }); }
public void Main() { NWPlayer player = GetLastUsedBy(); NWObject waypoint = GetObjectByTag("ABAN_STATION_EXIT_LANDING"); player.AssignCommand(() => { ActionJumpToLocation(waypoint.Location); }); // Attempt to clean up the instanced areas in 12 seconds. DelayCommand(12.0f, AttemptCleanup); }
public void OnChestDisturbed(NWPlaceable oChest) { NWPlayer oPC = (_.GetLastDisturbed()); if (!oPC.IsPlayer && !oPC.IsDM) { return; } string pcName = oPC.Name; NWItem oItem = (_.GetInventoryDisturbItem()); int disturbType = _.GetInventoryDisturbType(); if (disturbType == NWScript.INVENTORY_DISTURB_TYPE_ADDED) { _.CopyItem(oItem.Object, oPC.Object, NWScript.TRUE); oItem.Destroy(); } else if (disturbType == NWScript.INVENTORY_DISTURB_TYPE_REMOVED) { SaveChestInventory(oPC, oChest, false); string itemName = oItem.Name; if (string.IsNullOrWhiteSpace(itemName)) { itemName = "money"; } float minSearchSeconds = 1.5f; float maxSearchSeconds = 4.5f; float searchDelay = _random.RandomFloat() * (maxSearchSeconds - minSearchSeconds) + minSearchSeconds; oPC.AssignCommand(() => { _.ActionPlayAnimation(NWScript.ANIMATION_LOOPING_GET_LOW, 1.0f, searchDelay); }); _.ApplyEffectToObject(NWScript.DURATION_TYPE_TEMPORARY, _.EffectCutsceneImmobilize(), oPC.Object, searchDelay); // Notify party members in the vicinity NWPlayer player = (_.GetFirstPC()); while (player.IsValid) { if (_.GetDistanceBetween(oPC.Object, player.Object) <= 20.0f && player.Area.Equals(oPC.Area) && _.GetFactionEqual(player.Object, oPC.Object) == NWScript.TRUE) { player.SendMessage(pcName + " found " + itemName + "."); } player = (_.GetNextPC()); } } }
private void OpenFuelBay(bool isStronidium) { NWPlayer oPC = GetPC(); NWArea area = oPC.Area; NWPlaceable bay = area.GetLocalObject("FUEL_BAY"); if (bay.IsValid) { NWObject accessor = bay.GetLocalObject("BAY_ACCESSOR"); if (!accessor.IsValid) { bay.Destroy(); } else { oPC.FloatingText("Someone else is already accessing that structure's inventory. Please wait."); return; } } Guid structureID = new Guid(_.GetLocalString(area, "PC_BASE_STRUCTURE_ID")); var structure = DataService.PCBaseStructure.GetByID(structureID); var pcBase = DataService.PCBase.GetByID(structure.PCBaseID); Location location = oPC.Location; bay = _.CreateObject(ObjectType.Placeable, "fuel_bay", location); bay.AssignCommand(() => _.SetFacingPoint(oPC.Position)); area.SetLocalObject("FUEL_BAY", bay.Object); bay.SetLocalString("PC_BASE_STRUCTURE_ID", structureID.ToString()); bay.SetLocalBool("SETUP", true); // Disable OnDisturbed events if (isStronidium) { bay.SetLocalInt("CONTROL_TOWER_FUEL_TYPE", 1); if (pcBase.ReinforcedFuel > 0) { _.CreateItemOnObject("stronidium", bay.Object, pcBase.ReinforcedFuel); } } else { if (pcBase.Fuel > 0) { _.CreateItemOnObject("fuel_cell", bay.Object, pcBase.Fuel); } } bay.SetLocalBool("SETUP", false); // Re-enable OnDisturbed events oPC.AssignCommand(() => _.ActionInteractObject(bay.Object)); }
public void Main() { NWPlayer player = GetClickingObject(); NWObject door = NWGameObject.OBJECT_SELF; string destinationAreaTag = door.GetLocalString("DESTINATION_AREA_TAG"); string destinationWaypointTag = door.GetLocalString("DESTINATION_WAYPOINT"); NWArea area = door.Area.GetLocalObject(destinationAreaTag); NWObject waypoint = GetNearestObjectByTag(destinationWaypointTag, GetFirstObjectInArea(area)); NWLocation location = waypoint.Location; player.AssignCommand(() => { ActionJumpToLocation(location); }); }