示例#1
0
 private static void Postfix(Tank __instance, Network_Player player, float amount, Item_Base itemType = null)
 {
     if (__instance.GetComponent(typeof(Network_Player)) == RAPI.GetLocalPlayer())
     {
         ComponentManager <GlassHoneyUse> .Value.OnModifyTank(player, amount, itemType);
     }
 }
    IEnumerator OnModLoad()
    {
        if (notifyLoad != null)
        {
            notifyLoad.Close();
        }
        if (notify == null)
        {
            notify = FindObjectOfType <HNotify>();
        }
        yield return(notifyLoad = notify.AddNotification(
                         HNotify.NotificationType.spinning, $"Loading {MOD_NAME}"));

        var request = AssetBundle.LoadFromMemoryAsync(
            GetEmbeddedFileBytes("oldworldradio.assets"));

        yield return(request);

        assetBundle = request.assetBundle;
        Info($"Assets loaded to {assetBundle.name}");
        var assetNames = new List <string>(assetBundle.GetAllAssetNames());

        audioClips = assetNames.FindAll(a => a.EndsWith(".ogg"));
        player     = RAPI.GetLocalPlayer();
        CreateRadioItem();
        CreateAudioSource();
        GiveRadioToPlayer();
        SetBroadcastState(true);
        notifyLoad.Close();
        notifyLoad = null;
        yield return(true);
    }
示例#3
0
    static void Postfix(PersonController __instance, ref Network_Player ___playerNetwork, ref Vector3 ___moveDirection)
    {
        if (sprintByDefault && !__instance.crouching && !isCrouching)
        {
            __instance.normalSpeed = defaultSprintSpeed;
            __instance.sprintSpeed = defaultNormalSpeed;
        }
        else
        {
            __instance.normalSpeed = defaultNormalSpeed;
            __instance.sprintSpeed = defaultSprintSpeed;
        }

        if (crouchIsToggle)
        {
            if (MyInput.GetButtonUp("Crouch"))
            {
                isCrouching = !isCrouching;
            }
            __instance.crouching = isCrouching;
            ___playerNetwork.Animator.anim.SetBool("Crouching", isCrouching);
            if (!MyInput.GetButton("Crouch") && isCrouching)
            {
                float speed = MyInput.GetButton("Sprint") ? __instance.sprintSpeed : __instance.normalSpeed;
                ___moveDirection /= speed * Stat_WellBeing.groundSpeedMultiplier;
            }
        }
    }
示例#4
0
        private void Update()
        {
            if (_Player == null)
            {
                _Player = ComponentManager <Player> .Value;
            }
            if (_Network_Player == null)
            {
                _Network_Player = ComponentManager <Network_Player> .Value;
            }
            if (_AzureSkyController == null)
            {
                _AzureSkyController = UnityEngine.Object.FindObjectOfType <AzureSkyController>();
            }
            if (_WeatherManager == null)
            {
                _WeatherManager = UnityEngine.Object.FindObjectOfType <WeatherManager>();
            }
            if (_Raft == null)
            {
                _Raft = ComponentManager <Raft> .Value;
            }

            if (Cheat.fixTimeScale)
            {
                Time.timeScale = 0f;
            }
            else
            {
                if (!visible)
                {
                    Time.timeScale = 1f;
                }
            }
            if (UnityEngine.Input.GetKeyDown(KeyCode.F3))
            {
                ModAPI.Log.Write("Flying");
                Cheat.FlyMode = !Cheat.FlyMode;
            }
            // if clicked button
            if (UnityEngine.Input.GetKeyDown(KeyCode.F1))
            {
                ModAPI.Log.Write("Menü");
                if (visible)
                {
                    // menu is closed
                    _Player.SetMouseLookScripts(true);
                    Helper.SetCursorVisibleAndLockState(false, CursorLockMode.Locked);
                    Time.timeScale = 1f;
                }
                else
                {
                    // menu is open
                    _Player.SetMouseLookScripts(false);
                    Helper.SetCursorVisibleAndLockState(true, CursorLockMode.None);
                    Time.timeScale = 0f;
                }
                visible = !visible;
            }
        }
示例#5
0
        protected override void InitPlayer(Network_Player player)
        {
            FieldInfo eventRef_swingv = typeof(Spear).GetField("eventRef_swing", BindingFlags.NonPublic | BindingFlags.Instance);

            Spear spear = player.gameObject.AddComponent <Spear>();

            spear.name       = fullName;
            spear.attackMask = player.GetComponentsInChildren <Spear>(true)[0].attackMask;
            eventRef_swingv.SetValue(spear, eventRef_swingv.GetValue(player.GetComponentsInChildren <Spear>(true)[0]));
            spear.enabled = false;

            FieldInfo attackRangev = typeof(Spear).GetField("attackRange", BindingFlags.NonPublic | BindingFlags.Instance);
            FieldInfo damagev      = typeof(Spear).GetField("damage", BindingFlags.NonPublic | BindingFlags.Instance);

            attackRangev.SetValue(spear, range);
            damagev.SetValue(spear, damage);

            System.Console.WriteLine(owner.Metadata.ModName + ": Added weapon " + fullName + "; damage=" + damage + ", range=" + range + ", cooldown=" + cooldown);

            //The spear probably stores a parented object that represents the actual mesh

            //foreach (Spear sp in player.GetComponentsInChildren<Spear>())
            //{
            //    System.Console.WriteLine(sp.GetType().ToString());



            //}

            //TODO: Still not useable, find out how it works
            //TODO: Also things that are already weapons should be added here
        }
示例#6
0
    public void OnTriggerStay(Collider other)
    {
        CookingStand_Purifier target = other.gameObject.GetComponent <CookingStand_Purifier>();

        if (target == null)
        {
            target = other.gameObject.transform.parent.gameObject.GetComponent <CookingStand_Purifier>();
        }
        if (target != null)
        {
            timer += Time.deltaTime;
            if (timer > timePerFill)
            {
                Item_Base     waterCup      = ItemManager.GetItemByIndex(40);
                CookingSlot[] possibleSlots = target.GetCookingSlotsForItem(waterCup);
                if (possibleSlots != null && possibleSlots.Length > 0)
                {
                    Network_Player              networkPlayer       = ComponentManager <Network_Player> .Value;
                    CookingStandManager         cookingStandManager = networkPlayer.CookingStandManager;
                    Message_CookingStand_Insert message             = new Message_CookingStand_Insert(Messages.CookingStandManager_InsertItem, cookingStandManager, waterCup, target, possibleSlots);
                    if (Semih_Network.IsHost)
                    {
                        networkPlayer.Network.RPC(message, Target.Other, EP2PSend.k_EP2PSendReliable, NetworkChannel.Channel_Game);
                        target.InsertItem(waterCup, possibleSlots, false); // if localPlayer was true, the local player would lose an item
                    }
                }
                timer -= timePerFill;
            }
        }
    }
    public void Update()
    {
        if (Input.GetKeyDown(KeyCode.LeftAlt))
        {
            Debug.Log(CanvasHelper.ActiveMenu);
            Debug.Log("LeftAlt pressed and menu not open");

            currentPlayers.Clear();

            var players     = FindObjectsOfType <Network_Player>();
            var localPlayer = RAPI.GetLocalPlayer();

            foreach (var player in players)
            {
                if (player != localPlayer)
                {
                    currentPlayers.Add(player);
                }
            }

            Network_Player thisPlayer = RAPI.GetLocalPlayer();

            if (thisPlayer != null)
            {
                PlayerPing(thisPlayer);
            }
        }
    }
 public override void WorldEvent_WorldLoaded()
 {
     base.WorldEvent_WorldLoaded();
     player = RAPI.GetLocalPlayer();
     CreateAudioSource();
     GiveRadioToPlayer();
     SetBroadcastState(true);
 }
 public override void WorldEvent_WorldUnloaded()
 {
     base.WorldEvent_WorldUnloaded();
     TakeRadioFromPlayer();
     SetBroadcastState(false);
     RemoveAudioSource();
     player = null;
 }
示例#10
0
    public void OnModifyTank(Network_Player player, float amount, Item_Base itemType = null)
    {
        if (!itemType || !(itemType.name == "Jar_Honey"))
        {
            return;
        }

        GiveGlass();
    }
示例#11
0
 public override void WorldEvent_WorldLoaded()
 {
     if (playerNetwork == null)
     {
         playerNetwork = RAPI.GetLocalPlayer();
     }
     //AddLandmarkToSpawner();
     //Debug.Log("The world is loaded!");
 }
示例#12
0
 private static void Prefix(Network_Player __instance)
 {
     if (Minimap.Instance.persistence.markers)
     {
         if (!Equals(__instance, RAPI.GetLocalPlayer()))
         {
             Minimap.AddMarker(__instance.transform, Minimap.MarkerType.PLAYER);
         }
     }
 }
 public void Update()
 {
     if (CanvasHelper.ActiveMenu == MenuType.Inventory && Input.GetKeyDown(KeyCode.Z))
     {
         Network_Player player = RAPI.GetLocalPlayer();
         if (player != null)
         {
             SortPlayerInventory(player);
         }
     }
 }
示例#14
0
    private static bool Prefix
    (
        SteeringWheel __instance,
        ref bool ___hasBeenPlaced,
        ref bool ___isDisplayingText,
        DisplayTextManager ___displayText,
        ref Network_Player ___localPlayer,
        ref Semih_Network ___network
    )
    {
        if (!___hasBeenPlaced)
        {
            return(true);
        }
        if (MyInput.GetButton("Sprint"))
        {
            ___isDisplayingText = true;
            ___displayText.ShowText("Toggle Engines", MyInput.Keybinds["Interact"].MainKey, 1, "Toggle Engine Direction", MyInput.Keybinds["Rotate"].MainKey, 2);

            if (MyInput.GetButtonDown("Interact"))
            {
                MoreSailsMoreSpeed.ToggleAllEngines();
            }
            if (MyInput.GetButtonDown("Rotate"))
            {
                MoreSailsMoreSpeed.ToggleAllEnginesDir();
            }
        }
        else
        {
            ___isDisplayingText = true;
            ___displayText.ShowText("Hold for more options", MyInput.Keybinds["Sprint"].MainKey, 1, Helper.GetTerm("Game/RotateSmooth2", false), MyInput.Keybinds["Rotate"].MainKey, 2);
            if (MyInput.GetButtonDown("Rotate"))
            {
                ___localPlayer.PlayerScript.SetMouseLookScripts(false);
            }
            if (MyInput.GetButtonUp("Rotate"))
            {
                ___localPlayer.PlayerScript.SetMouseLookScripts(true);
            }
            if (MyInput.GetButton("Rotate"))
            {
                float axis = Input.GetAxis("Mouse X");
                Message_SteeringWheel_Rotate message = new Message_SteeringWheel_Rotate(Messages.SteeringWheelRotate, ___network.NetworkIDManager, __instance.ObjectIndex, axis);
                if (Semih_Network.IsHost)
                {
                    AccessTools.Method("SteeringWheel:Rotate").Invoke(__instance, new object[] { axis });
                    return(false);
                }
                ___network.SendP2P(___network.HostID, message, EP2PSend.k_EP2PSendReliable, NetworkChannel.Channel_Game);
            }
        }
        return(false);
    }
示例#15
0
        //Get the local player
        //If the player doesn't exist (like if you're not ingame), it returns ""
        public static string GetLocalPlayer()
        {
            Semih_Network network = UnityEngine.Object.FindObjectOfType <Semih_Network>();

            if (network == null)
            {
                return("");
            }

            Network_Player player = network.GetLocalPlayer();

            return(player == null ? "" : player.name);
        }
        private void SortPlayerInventory(Network_Player player)
        {
            PlayerInventory inv = player.Inventory;

            // Get all of the inventory slots that are not in the hotbar.
            List <Slot> nonHotbar = inv.allSlots.GetRange(player.Inventory.hotslotCount, player.Inventory.allSlots.Count - player.Inventory.hotslotCount);

            Sort(nonHotbar);

            if (inv.secondInventory != null)
            {
                Sort(inv.secondInventory.allSlots);
            }
        }
示例#17
0
 public void OnIsRayed()
 {
     if (this.canvas == null)
     {
         this.canvas = ComponentManager <CanvasHelper> .Value;
     }
     if (this.localPlayer == null)
     {
         this.localPlayer = ComponentManager <Network_Player> .Value;
     }
     if (CanvasHelper.ActiveMenu != MenuType.None || !Helper.LocalPlayerIsWithinDistance(base.transform.position, Player.UseDistance))
     {
         if (this.showingText)
         {
             this.canvas.displayTextManager.HideDisplayTexts();
             this.showingText = false;
         }
         return;
     }
     if (skyController.timeOfDay.hour < 5 || skyController.timeOfDay.hour > 19)
     {
         this.canvas.displayTextManager.ShowText("Its the spooky night! The solar panel won't work!", 0, true, 0);
         this.showingText = true;
         return;
     }
     if (!battery.BatterySlotIsEmpty)
     {
         if (battery.GetBatteryInstance().Uses < batteryMaxUses)
         {
             float progress = (float)battery.GetBatteryInstance().Uses / (float)batteryMaxUses;
             this.canvas.displayTextManager.ShowText("The battery is charging... (" + Mathf.Round(progress * 100) + "%)", 0, true, 0);
             this.showingText = true;
         }
         else
         {
             this.canvas.displayTextManager.ShowText("The battery is fully charged!", 0, true, 0);
             this.showingText = true;
         }
     }
     else
     {
         this.canvas.displayTextManager.ShowText("No battery, place one to charge it!", 0, true, 0);
         this.showingText = true;
         return;
     }
 }
示例#18
0
    public StatData getStatData(Network_Player player, string stat, string action, float amount)
    {
        StatData data = new StatData(stat);
        float    val  = 1;

        switch (stat)
        {
        case "gravity":
            val = player.PersonController.gravity;
            break;

        case "swim_speed":
            val = player.PersonController.swimSpeed;
            break;

        case "walk_speed":
            val = player.PersonController.normalSpeed;
            break;

        case "jump_speed":
            val = player.PersonController.jumpSpeed;
            break;

        case "thirst":
            val = player.Stats.stat_thirst.Value;
            break;

        case "hunger":
            val = player.Stats.stat_hunger.Normal.Value;
            break;

        case "oxygen":
            val = player.Stats.stat_oxygen.Value;
            break;

        case "health":
            val = player.Stats.stat_health.Value;
            break;
        }

        data.originalValue = val;
        data.currentValue  = getAdjustedValue(val, action, amount);

        return(data);
    }
示例#19
0
    static bool Prefix(Sail __instance, ref CanvasHelper ___canvas, ref Network_Player ___localPlayer)
    {
        if (!MyInput.GetButton("Sprint"))
        {
            return(true);
        }
        if (Helper.LocalPlayerIsWithinDistance(__instance.transform.position, Player.UseDistance) && CanvasHelper.ActiveMenu == MenuType.None)
        {
            if (MyInput.GetButtonDown("Interact"))
            {
                if (Semih_Network.IsHost)
                {
                    if (__instance.open)
                    {
                        MoreSailsMoreSpeedMod.SailsClose();
                    }
                    else
                    {
                        MoreSailsMoreSpeedMod.SailsOpen();
                    }
                }
            }

            if (MyInput.GetButton("Rotate"))
            {
                if (___localPlayer.PlayerScript.MouseLookIsActive())
                {
                    ___localPlayer.PlayerScript.SetMouseLookScripts(false);
                }
                MoreSailsMoreSpeedMod.SailsRotate(Input.GetAxis("Mouse X"), __instance);
            }
            else if (MyInput.GetButtonUp("Rotate"))
            {
                ___localPlayer.PlayerScript.SetMouseLookScripts(true);
            }
            return(false);
        }
        else
        {
            ___canvas.displayTextManager.HideDisplayTexts();
        }
        return(false);
    }
示例#20
0
        //Give a player an item
        //If you don't specify player, it picks local player
        //If you don't specify count, it assumes full stack
        public static bool Give(Item item, string player = "", int count = 0)
        {
            Network_Player p = GetPlayer(player);

            if (p == null || item == null || item.baseItem == null)
            {
                return(false);
            }

            PlayerInventory playerInventory = (PlayerInventory)typeof(Network_Player).GetField("inventory", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(p);

            if (playerInventory == null)
            {
                return(false);
            }

            playerInventory.AddItem(item.baseItem.UniqueName, count);
            return(true);
        }
示例#21
0
    public void setStatVal(Network_Player player, string stat, float amount)
    {
        switch (stat)
        {
        case "gravity":
            player.PersonController.gravity = amount;
            break;

        case "swim_speed":
            player.PersonController.swimSpeed = amount;
            break;

        case "walk_speed":
            player.PersonController.normalSpeed = amount;
            break;

        case "jump_speed":
            player.PersonController.jumpSpeed = amount;
            break;

        case "thirst":
            Traverse.Create(player.Stats.stat_thirst).Field("drinking").SetValue(false);
            player.Stats.stat_thirst.Value = amount;
            break;

        case "hunger":
            Traverse.Create(player.Stats.stat_hunger.Normal).Field("digesting").SetValue(false);
            player.Stats.stat_hunger.Normal.Value = amount;
            break;

        case "oxygen":
            player.Stats.stat_oxygen.Value = amount;
            break;

        case "health":
            player.Stats.stat_health.Value = amount;
            break;
        }
    }
示例#22
0
        private static void Postfix(ref Item_Base __result)
        {
            if (__result != null)
            {
                Network_Player player            = RAPI.GetLocalPlayer();
                Item_Base      currentItemInHand = player.PlayerItemManager.useItemController.GetCurrentItemInHand();

                System.Random rand    = new System.Random();
                string        oldItem = __result.UniqueName;
                if (oldItem == "Placeable_ScrapMechanic" || oldItem == "Placeable_LuckyCat" || oldItem == "Placeable_Cropplot_Shoe" || oldItem == "Placeable_GlassCandle")
                {
                    Debug.Log("Item Randomizer Activated!");
                    if (currentItemInHand.UniqueName == "FishingRod" && rand.Next(0, 10) > 7)
                    {
                        __result = FishingRod_Dropper.GetRandomItem();
                    }
                    else if (currentItemInHand.UniqueName == "FishingRod_Metal" && rand.Next(0, 10) < 8)
                    {
                        __result = FishingRod_Dropper.GetRandomItem();
                    }
                }
            }
        }
    public void setStatVal(Network_Player player, string stat, float amount)
    {
        switch (stat)
        {
        case "gravity":
            player.PersonController.gravity = amount;
            break;

        case "swim_speed":
            player.PersonController.swimSpeed = amount;
            break;

        case "walk_speed":
            player.PersonController.normalSpeed = amount;
            break;

        case "jump_speed":
            player.PersonController.jumpSpeed = amount;
            break;

        case "thirst":
            player.Stats.stat_thirst.Value = amount;
            break;

        case "hunger":
            player.Stats.stat_hunger.Normal.Value = amount;
            break;

        case "oxygen":
            player.Stats.stat_oxygen.Value = amount;
            break;

        case "health":
            player.Stats.stat_health.Value = amount;
            break;
        }
    }
 private void PlayerPing(Network_Player player)
 {
     OnGUI();
 }
示例#25
0
 protected virtual void InitPlayer(Network_Player player)
 {
 }
示例#26
0
    private static bool Prefix
    (
        Sail __instance,
        ref bool ___blockPlaced,
        ref Network_Player ___localPlayer,
        ref CanvasHelper ___canvas,
        ref bool ___isRotating,
        ref GameObject ___paintCollider,
        ref Semih_Network ___network
    )
    {
        if (!___blockPlaced)
        {
            return(false);
        }
        if (___canvas == null || ___canvas.displayTextManager == null || ___localPlayer == null)
        {
            return(false);
        }
        if (Helper.LocalPlayerIsWithinDistance(__instance.transform.position, Player.UseDistance) && CanvasHelper.ActiveMenu == MenuType.None)
        {
            bool mod = MyInput.GetButton("Sprint");
            if (!__instance.open)
            {
                if (mod)
                {
                    ___canvas.displayTextManager.ShowText("Open Sails", MyInput.Keybinds["Interact"].MainKey, 1, "Rotate Sails", MyInput.Keybinds["Rotate"].MainKey, 2);
                }
                else
                {
                    ___canvas.displayTextManager.ShowText("Hold for more options", MyInput.Keybinds["Sprint"].MainKey, 1, "Open", MyInput.Keybinds["Interact"].MainKey, 2, 0, true);
                    ___canvas.displayTextManager.ShowText("Rotate", MyInput.Keybinds["Rotate"].MainKey, 3, 0, false);
                }
            }
            else
            {
                if (mod)
                {
                    ___canvas.displayTextManager.ShowText("Close Sails", MyInput.Keybinds["Interact"].MainKey, 1, "Rotate Sails", MyInput.Keybinds["Rotate"].MainKey, 2);
                }
                else
                {
                    ___canvas.displayTextManager.ShowText("Hold for more options", MyInput.Keybinds["Sprint"].MainKey, 1, "Close", MyInput.Keybinds["Interact"].MainKey, 2, 0, true);
                    ___canvas.displayTextManager.ShowText("Rotate", MyInput.Keybinds["Rotate"].MainKey, 3, 0, false);
                }
            }

            if (MyInput.GetButtonDown("Interact"))
            {
                Message_NetworkBehaviour message = new Message_NetworkBehaviour(__instance.open ? Messages.Sail_Close : Messages.Sail_Open, __instance);
                if (Semih_Network.IsHost)
                {
                    if (__instance.open)
                    {
                        if (mod)
                        {
                            MoreSailsMoreSpeed.SailsClose();
                        }
                        else
                        {
                            AccessTools.Method("Sail:Close").Invoke(__instance, null);
                        }
                    }
                    else
                    {
                        if (mod)
                        {
                            MoreSailsMoreSpeed.SailsOpen();
                        }
                        else
                        {
                            AccessTools.Method("Sail:Open").Invoke(__instance, null);
                        }
                    }
                    ___network.RPC(message, Target.Other, EP2PSend.k_EP2PSendReliable, NetworkChannel.Channel_Game);
                }
                else
                {
                    ___network.SendP2P(___network.HostID, message, EP2PSend.k_EP2PSendReliable, NetworkChannel.Channel_Game);
                }
            }

            if (MyInput.GetButton("Rotate"))
            {
                ___localPlayer.PlayerScript.SetMouseLookScripts(false);
                ___isRotating = true;
            }
            else if (MyInput.GetButtonUp("Rotate"))
            {
                if (mod)
                {
                    MoreSailsMoreSpeed.RotateSailsTo(__instance);
                }
                ___localPlayer.PlayerScript.SetMouseLookScripts(true);
                ___isRotating = false;
            }
            if (MyInput.GetButtonUp("Sprint") && ___isRotating)
            {
                MoreSailsMoreSpeed.RotateSailsTo(__instance);
                ___localPlayer.PlayerScript.SetMouseLookScripts(true);
                ___isRotating = false;
                return(false);
            }

            bool button = MyInput.GetButton("Rotate");
            if (button)
            {
                float axis = Input.GetAxis("Mouse X");
                if (Semih_Network.IsHost)
                {
                    AccessTools.Method("Sail:Rotate").Invoke(__instance, new object[] { axis });
                }
                else
                {
                    Message_Sail_Rotate message2 = new Message_Sail_Rotate(Messages.Sail_Rotate, __instance, axis);
                    ___network.SendP2P(___network.HostID, message2, EP2PSend.k_EP2PSendReliable, NetworkChannel.Channel_Game);
                }
            }
            ___paintCollider.SetActiveSafe(!button);
            return(false);
        }
        if (___isRotating)
        {
            ___isRotating = false;
            ___localPlayer.PlayerScript.SetMouseLookScripts(true);
        }
        ___canvas.displayTextManager.HideDisplayTexts();
        return(false);
    }
示例#27
0
    // The Update() method is being called every frame. Have fun!
    public void Update()
    {
        DateTime              currentTime = DateTime.UtcNow;
        Network_Player        player      = RAPI.getLocalPlayer();
        Network_Host_Entities nhe         = ComponentManager <Network_Host_Entities> .Value;
        Raft       raft = ComponentManager <Raft> .Value;
        Rigidbody  body = Traverse.Create(raft).Field("body").GetValue() as Rigidbody;
        RewardData reward;

        if (rewardsQueue.TryDequeue(out reward))
        {
            switch (reward.action)
            {
            case "sound":
                system.playSound(sounds[reward.args[0]], channels, false, out newChannel);
                break;

            case "message":
                chat.SendChatMessage(string.Join(" ", reward.args), SteamUser.GetSteamID());
                break;

            case "item":
                Item_Base item   = ItemManager.GetItemByName(reward.args[0]);
                int       amount = 1;
                int.TryParse(reward.args[1], out amount);
                Helper.DropItem(new ItemInstance(item, amount, item.MaxUses), player.transform.position, player.CameraTransform.forward, player.transform.ParentedToRaft());
                break;

            case "inventory_bomb":
                chat.SendChatMessage("Inventory Bomb!", SteamUser.GetSteamID());
                foreach (Slot s in player.Inventory.allSlots)
                {
                    player.Inventory.DropItem(s);
                }
                foreach (Slot s in player.Inventory.equipSlots)
                {
                    player.Inventory.DropItem(s);
                }
                break;

            case "stat_edit":
                //TODO
                //player.PersonController.gravity = 20;
                //player.PersonController.swimSpeed = 2;
                //player.PersonController.normalSpeed = 3;
                //player.PersonController.jumpSpeed = 8;
                //player.Stats.stat_thirst.Value -= 5;
                string action       = reward.args[0];
                string stat         = reward.args[1];
                float  changeAmount = 1;
                float.TryParse(reward.args[2], out changeAmount);
                int duration = 1;
                int.TryParse(reward.args[3], out duration);

                bool contained = false;
                foreach (StatData data in statsEdited)
                {
                    if (data.stat.Equals(stat))
                    {
                        data.duration += duration;
                        contained      = true;
                    }
                }

                if (!contained)
                {
                    StatData data = getStatData(player, stat, action, changeAmount);
                    data.duration    = duration * 1000;
                    data.timeStarted = DateTime.UtcNow;
                    setStatVal(player, stat, data.currentValue);
                    if (duration != -1)
                    {
                        statsEdited.Add(data);
                    }
                }

                break;

            case "move":
                push     = true;
                pushData = new PushData(new Vector3(-4, 0, -4.3f), currentTime, 250);
                break;

            case "spawn_entity":
                Vector3 pos   = player.FeetPosition;
                float   scale = 1;
                if (reward.args.Length > 1)
                {
                    float.TryParse(reward.args[1], out scale);
                }
                int amountFromEntries = 1;
                if (reward.args.Length > 2)
                {
                    int.TryParse(reward.args[2], out amountFromEntries);
                }
                int spawnDuration = 1;
                if (reward.args.Length > 3)
                {
                    int.TryParse(reward.args[3], out spawnDuration);
                }
                TempEntity tempEnt;
                uint       objIndex = SaveAndLoad.GetUniqueObjectIndex();
                for (int index = 0; index < amountFromEntries; ++index)
                {
                    switch (reward.args[0])
                    {
                    case "stone_bird":
                        tempEnt = new TempEntity(nhe.CreateAINetworkBehaviour(AI_NetworkBehaviourType.StoneBird, pos, scale, objIndex, SaveAndLoad.GetUniqueObjectIndex(), null));
                        break;

                    case "puffer_fish":
                        tempEnt = new TempEntity(nhe.CreateAINetworkBehaviour(AI_NetworkBehaviourType.PufferFish, pos, scale, objIndex, SaveAndLoad.GetUniqueObjectIndex(), null));
                        break;

                    case "llama":
                        tempEnt = new TempEntity(nhe.CreateAINetworkBehaviour(AI_NetworkBehaviourType.Llama, pos, scale, objIndex, SaveAndLoad.GetUniqueObjectIndex(), null));
                        (tempEnt.ent as AI_NetworkBehaviour_Domestic).QuickTameLate();
                        break;

                    case "goat":
                        tempEnt = new TempEntity(nhe.CreateAINetworkBehaviour(AI_NetworkBehaviourType.Goat, pos, scale, objIndex, SaveAndLoad.GetUniqueObjectIndex(), null));
                        (tempEnt.ent as AI_NetworkBehaviour_Domestic).QuickTameLate();
                        break;

                    case "chicken":
                        tempEnt = new TempEntity(nhe.CreateAINetworkBehaviour(AI_NetworkBehaviourType.Chicken, pos, scale, objIndex, SaveAndLoad.GetUniqueObjectIndex(), null));
                        (tempEnt.ent as AI_NetworkBehaviour_Domestic).QuickTameLate();
                        break;

                    case "boar":
                        tempEnt = new TempEntity(nhe.CreateAINetworkBehaviour(AI_NetworkBehaviourType.Boar, pos, scale, objIndex, SaveAndLoad.GetUniqueObjectIndex(), null));
                        break;

                    case "rat":
                        tempEnt = new TempEntity(nhe.CreateAINetworkBehaviour(AI_NetworkBehaviourType.Rat, pos, scale, objIndex, SaveAndLoad.GetUniqueObjectIndex(), null));
                        break;

                    case "shark":
                        tempEnt = new TempEntity(nhe.CreateAINetworkBehaviour(AI_NetworkBehaviourType.Shark, pos, scale, objIndex, SaveAndLoad.GetUniqueObjectIndex(), null));
                        break;

                    case "bear":
                        tempEnt = new TempEntity(nhe.CreateAINetworkBehaviour(AI_NetworkBehaviourType.Bear, pos, scale, objIndex, SaveAndLoad.GetUniqueObjectIndex(), null));
                        break;

                    case "mama_bear":
                        tempEnt = new TempEntity(nhe.CreateAINetworkBehaviour(AI_NetworkBehaviourType.MamaBear, pos, scale, objIndex, SaveAndLoad.GetUniqueObjectIndex(), null));
                        break;

                    case "seagull":
                        //TODO: It's not like the others for some reason.....
                        tempEnt = null;
                        break;

                    default:
                        tempEnt = null;
                        break;
                    }
                    if (tempEnt != null && spawnDuration != -1)
                    {
                        Semih_Network network = ComponentManager <Semih_Network> .Value;
                        Message_CreateAINetworkBehaviour networkBehaviour2 = new Message_CreateAINetworkBehaviour(Messages.CreateAINetworkBehaviour, network.NetworkIDManager, objIndex, pos, tempEnt.ent, null);
                        if (network == null)
                        {
                            network = ComponentManager <Semih_Network> .Value;
                        }
                        network.RPC(networkBehaviour2, Target.Other, EP2PSend.k_EP2PSendReliable, NetworkChannel.Channel_Game);
                        tempEnt.spawned  = DateTime.UtcNow;
                        tempEnt.duration = spawnDuration * 1000;
                        tempEntities.Add(tempEnt);
                    }
                }
                break;

            case "set_weather":
                string weatherName = reward.args[0];
                bool   instant;
                bool.TryParse(reward.args[1], out instant);
                WeatherManager wm      = ComponentManager <WeatherManager> .Value;
                Randomizer     weather = Traverse.Create(ComponentManager <WeatherManager> .Value).Field("weatherConnections").GetValue() as Randomizer;
                Weather        w       = null;
                foreach (Weather we in weather.GetAllItems <Weather>())
                {
                    if (we.name.Equals(weatherName))
                    {
                        w = we;
                    }
                }

                if (w != null)
                {
                    wm.StopAllCoroutines();
                    wm.StartCoroutine(wm.StartNewWeather(w, instant));
                }
                break;

            case "set_time":
                AzureSkyController skyController = ComponentManager <AzureSkyController> .Value;
                int hours = 1;
                int.TryParse(reward.args[0], out hours);
                int minutes = 1;
                int.TryParse(reward.args[1], out minutes);
                skyController.timeOfDay.GotoTime(hours, minutes);
                break;

            case "pickup_trash":
                WaterFloatSemih2[] floatingObjects = FindObjectsOfType <WaterFloatSemih2>();
                float radius = 100;
                float.TryParse(reward.args[0], out radius);
                foreach (WaterFloatSemih2 trash in floatingObjects)
                {
                    try
                    {
                        if (!trash.GetComponent <PickupItem>().isDropped&& Vector3.Distance(trash.transform.position, player.FeetPosition) < radius)
                        {
                            PickupItem_Networked pickup = trash.GetComponentInParent <PickupItem_Networked>();
                            PickupObjectManager.RemovePickupItemNetwork(pickup, SteamUser.GetSteamID());
                        }
                    }
                    catch
                    {
                    }
                }
                break;

            case "command":
                RConsole console = Traverse.Create(typeof(RConsole)).Field("ConsoleInstance").GetValue() as RConsole;
                console.sendCommand(string.Join(" ", reward.args));
                break;

            case "meteor_shower":
                int meteorsToSpawn = 1;
                if (reward.args.Length > 0)
                {
                    int.TryParse(reward.args[0], out meteorsToSpawn);
                }
                int spawnRadius = 1;
                if (reward.args.Length > 1)
                {
                    int.TryParse(reward.args[1], out spawnRadius);
                }
                int meteorDamage = 1;
                if (reward.args.Length > 2)
                {
                    int.TryParse(reward.args[2], out meteorDamage);
                }

                if (stoneDropPrefab == null)
                {
                    AI_NetworkBehaviour_StoneBird ainbsb = (AI_NetworkBehaviour_StoneBird)nhe.CreateAINetworkBehaviour(AI_NetworkBehaviourType.StoneBird, player.FeetPosition, 0, SaveAndLoad.GetUniqueObjectIndex(), SaveAndLoad.GetUniqueObjectIndex(), null);
                    stoneDropPrefab = Traverse.Create(ainbsb.stateMachineStoneBird.dropStoneState).Field("stoneDropPrefab").GetValue() as StoneDrop;
                    ainbsb.Kill();
                }

                for (int i = 0; i < meteorsToSpawn; i++)
                {
                    Vector3 dropPosition = player.FeetPosition + new Vector3(UnityEngine.Random.Range(-spawnRadius, spawnRadius), 200, UnityEngine.Random.Range(-spawnRadius, spawnRadius));
                    meteors.Add(new Meteor(dropPosition, meteorDamage));
                }
                break;

            case "push_raft":
                float pushForce;
                float.TryParse(reward.args[0], out pushForce);
                body.AddForce(getBoundedRandVector(0.5f, 1) * pushForce, ForceMode.Impulse);
                break;

            case "rotate_raft":
                float rotationForce;
                float.TryParse(reward.args[0], out rotationForce);
                body.AddTorque(new Vector3(0, rotationForce, 0), ForceMode.Impulse);
                break;
            }
        }


        for (int i = statsEdited.Count - 1; i >= 0; i--)
        {
            StatData data = statsEdited[i];
            if ((currentTime - data.timeStarted).TotalMilliseconds > data.duration)
            {
                setStatVal(player, data.stat, data.originalValue);
                statsEdited.RemoveAt(i);
                chat.SendChatMessage(data.stat + " back to normal!", SteamUser.GetSteamID());
            }
        }

        for (int i = tempEntities.Count - 1; i >= 0; i--)
        {
            TempEntity ent = tempEntities[i];
            if ((currentTime - ent.spawned).TotalMilliseconds > ent.duration)
            {
                if (ent.ent != null)
                {
                    Network_Entity entity = ent.ent.networkEntity;
                    entity.Button_Kill();
                    AI_StateMachine stateMachine = ent.ent.GetComponent <AI_StateMachine>();
                    if (stateMachine is AI_StateMachine_Animal)
                    {
                        Traverse.Create((stateMachine as AI_StateMachine_Animal).deadState).Method("RemoveBody").GetValue();
                    }
                }
                tempEntities.RemoveAt(i);
            }
        }

        if (meteors.Count > 0)
        {
            meteorDelay--;
            if (meteorDelay <= 0)
            {
                meteorDelay = meteorDelayTot;
                StoneDrop stone = Instantiate(stoneDropPrefab, meteors.ElementAt(0).pos, Quaternion.identity);
                float     scale = UnityEngine.Random.Range(0.5f, 4f);
                stone.rigidBody.transform.localScale = new Vector3(scale, scale, scale);
                stone.rigidBody.AddForce(Vector3.down * meteors.ElementAt(0).damage, ForceMode.Impulse);
                meteors.RemoveAt(0);
            }
        }

        if (Input.GetKeyDown(KeyCode.Keypad1))
        {
            //Item_Base item = ItemManager.GetItemByName("Watermelon");
            //Helper.DropItem(new ItemInstance(item, 10, item.MaxUses), player.transform.position, player.CameraTransform.forward, player.transform.ParentedToRaft());
        }
        else if (Input.GetKeyDown(KeyCode.Keypad2))
        {
        }

        if (push)
        {
            player.PersonController.controller.SimpleMove(pushData.push);
            if ((currentTime - pushData.startTime).TotalMilliseconds > pushData.duration)
            {
                pushData.left--;
                if (pushData.left == 0)
                {
                    push = false;
                }
                else
                {
                    pushData.startTime = currentTime;
                    pushData.push      = getBoundedRandVector(3, 5);
                }
            }
        }
    }
示例#28
0
    public IEnumerator spawner(Network_Player player)
    {
        yield return(new WaitForSeconds(0.05f));

        Instantiate(FindObjectOfType <AI_NetworkBehavior_Shark>().transform.gameObject, FindObjectOfType <Network_Player>().transform.position, player.transform.rotation);
    }
示例#29
0
 public override void WorldEvent_WorldLoaded()
 {
     loaded = true;
     player = RAPI.GetLocalPlayer();
     canvas = ComponentManager <CanvasHelper> .Value;
 }
示例#30
0
 public void Update()
 {
     Network_Player player = RAPI.getLocalPlayer();
 }