コード例 #1
0
ファイル: RestMenu.cs プロジェクト: zunath/SWLOR_NWN
        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;
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: OnUsed.cs プロジェクト: Terallis/SWLOR_NWN
        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);
        }
コード例 #4
0
ファイル: RestMenu.cs プロジェクト: xephnin/SWLOR_NWN
        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;
            }
        }
コード例 #5
0
        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();
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
ファイル: PickUp.cs プロジェクト: zunath/SWLOR_NWN
 public void DoAction(NWPlayer user, NWObject target, NWLocation targetLocation, params string[] args)
 {
     user.AssignCommand(() =>
     {
         _.ActionPlayAnimation(Animation.LoopingGetLow);
     });
 }
コード例 #8
0
 public void DoAction(NWPlayer user, NWObject target, NWLocation targetLocation, params string[] args)
 {
     user.AssignCommand(() =>
     {
         _.ActionPlayAnimation(ANIMATION_LOOPING_GET_MID);
     });
 }
コード例 #9
0
        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);
                }
            }
        }
コード例 #10
0
ファイル: Meditate.cs プロジェクト: zunath/SolarOdyssey2_NWN
        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);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
ファイル: ExitAreaInstance.cs プロジェクト: xephnin/SWLOR_NWN
        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);
        }
コード例 #13
0
        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;
        }
コード例 #14
0
        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);
            }
        }
コード例 #15
0
        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);
            }
        }
コード例 #16
0
        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();
        }
コード例 #17
0
 public void DoAction(NWPlayer user, NWObject target, NWLocation targetLocation, params string[] args)
 {
     user.AssignCommand(() =>
     {
         _.ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_BORED);
     });
 }
コード例 #18
0
ファイル: Pointing.cs プロジェクト: Miskol23/SWLOR_NWN
 protected override void DoAction(NWPlayer user, float duration)
 {
     user.AssignCommand(() =>
     {
         _.ActionPlayAnimation(ANIMATION_LOOPING_CUSTOM1, 1.0f, duration);
     });
 }
コード例 #19
0
ファイル: Duck.cs プロジェクト: zunath/SWLOR_NWN
 public void DoAction(NWPlayer user, NWObject target, NWLocation targetLocation, params string[] args)
 {
     user.AssignCommand(() =>
     {
         _.ActionPlayAnimation(Animation.FireForgetDodgeDuck);
     });
 }
コード例 #20
0
ファイル: BaseService.cs プロジェクト: Kenji3108/SWLOR_NWN
        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);
            });
        }
コード例 #21
0
ファイル: Laughing.cs プロジェクト: zunath/SWLOR_NWN
 protected override void DoAction(NWPlayer user, float duration)
 {
     user.AssignCommand(() =>
     {
         _.ActionPlayAnimation(Animation.LoopingTalkLaughing, 1.0f, duration);
     });
 }
コード例 #22
0
ファイル: ExitAreaInstance.cs プロジェクト: zunath/SWLOR_NWN
        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);
            });
        }
コード例 #23
0
ファイル: ItemService.cs プロジェクト: Miskol23/SWLOR_NWN
        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");
                });
            }
        }
コード例 #24
0
        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); });
            }
        }
コード例 #25
0
        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);
            });
        }
コード例 #26
0
        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);
            });
        }
コード例 #27
0
        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);
        }
コード例 #28
0
        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());
                }
            }
        }
コード例 #29
0
        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));
        }
コード例 #30
0
        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); });
        }