void Update()
    {
        if (!downing && GameController.State == GameState.Playing)
        {
            Controller();
        }

        if (GameController.State == GameState.Playing)
        {
            if (once)
            {
                killData = new KillData(name, 0);
                gameController.killList.Add(killData);
                once = false;
            }

            Fire();
            GameOverCheck();
            Kill();
            if (killData.kill > currentKill && Too.GetData <bool>(Data.killScale) && !downing)
            {
                Scale();
                TapticPlugin.TapticManager.Impact(TapticPlugin.ImpactFeedback.Heavy);
            }

            canvasController.textHudKillNum.text = "kill : " + (killData.name == name ? killData.kill : 0).ToString();
        }

        if (downing)
        {
            desiredPos = Input.mousePosition - mouseStartPos;
            lookPos    = new Vector3(desiredPos.x, 0, desiredPos.y);
            transform.LookAt(lookPos);
        }
    }
        ////////////////

        protected override void ReceiveOnClient()
        {
            var      mymod   = RewardsMod.Instance;
            var      myworld = ModContent.GetInstance <RewardsWorld>();
            KillData data    = myworld.Logic.GetPlayerData(Main.LocalPlayer);

            if (data == null)
            {
                throw new ModHelpersException("No player data for " + Main.LocalPlayer.name);
            }

            NPC npc = new NPC();

            npc.SetDefaults(this.NpcType);
            npc.boss = this.IsBoss;

            bool  isGrind, isExpired;
            float reward = data.RecordKill(npc, out isGrind, out isExpired);

            if (mymod.SettingsConfig.DebugModeKillInfo)
            {
                int  kills     = data.KilledNpcs.ContainsKey(npc.type) ? data.KilledNpcs[npc.type] : -1;
                var  npcDef    = new NPCDefinition(npc.type);
                bool needsBoss = mymod.PointsConfig.NpcRewardRequiredAsBoss.Contains(npcDef);

                string msg = "ReceiveOnClient npc: " + npc.TypeName + " (" + npc.type + ")" + ", #: " + kills
                             + ", isGrind: " + isGrind + ", isExpired: " + isExpired + ", reward: " + reward
                             + ", needsBoss:" + needsBoss + " (is? " + npc.boss + ")";
                Main.NewText(msg);
                LogHelpers.Log(" " + msg);
            }

            data.AddRewardForPlayer(Main.LocalPlayer, isGrind, isExpired, reward);
        }
        private void ReceiveMe(Player player)
        {
            var mymod   = RewardsMod.Instance;
            var myworld = ModContent.GetInstance <RewardsWorld>();

            KillData data = myworld.Logic.GetPlayerData(player);

            if (data == null)
            {
                throw new ModHelpersException("No player data for " + player.name);
            }

            if (!data.Spend((int)this.Pack.Price, player))
            {
                LogHelpers.Warn("Not enough PP. PP out of sync.");
                //return;	// TODO: Add validation of purchases
            }

            Item[] items = ShopPackDefinition.OpenPack(player, this.Pack);

            foreach (var hook in RewardsMod.Instance.OnPointsSpentHooks)
            {
                hook(player, this.Pack.Name, this.Pack.Price, items);
            }

            if (mymod.SettingsConfig.DebugModeInfo)
            {
                LogHelpers.Alert("Purchase made for " + player.name + " of " + this.Pack.Name + " (" + this.Pack.Price + ")");
            }
        }
Example #4
0
        ////

        protected override void InitializeServerSendData(int toWho)
        {
            Player player = Main.player[toWho];

            if (player == null /*|| !player.active*/)
            {
                LogHelpers.Warn("Invalid player " + player.name + " (" + toWho + ")");
                return;
            }

            var mymod   = RewardsMod.Instance;
            var myworld = ModContent.GetInstance <RewardsWorld>();

            var plrKillData = myworld.Logic.GetPlayerData(player);

            if (plrKillData == null)
            {
                LogHelpers.Warn("Could not get player " + player.name + "'s (" + toWho + ") kill data.");
                return;
            }

            //kill_data.AddToMe( mymod, myworld.Logic.WorldData );	// Why was this here?!
            this.WorldData  = myworld.Logic.WorldData;
            this.PlayerData = plrKillData;
        }
        ////

        private void OnFinishPlayerEnterWorldForHost(out bool isSynced)
        {
            var  mymod   = (RewardsMod)this.mod;
            var  myworld = ModContent.GetInstance <RewardsWorld>();
            bool success = false;

            string playerUid = PlayerIdentityHelpers.GetUniqueId(this.player);

            KillData plrData = myworld.Logic.GetPlayerData(this.player);

            if (plrData == null)
            {
                LogHelpers.Warn("Could not get player " + this.player.name + "'s (" + this.player.whoAmI + ") kill data.");
                isSynced = false;
                return;
            }

            success = plrData.Load(playerUid, this.player);
            if (!success)
            {
                if (KillData.CanReceiveOtherPlayerKillRewards( ))
                {
                    plrData.AddToMe(myworld.Logic.WorldData);
                }
            }

            if (mymod.SettingsConfig.DebugModeInfo || mymod.SettingsConfig.DebugModeKillInfo)
            {
                LogHelpers.Alert("who: " + this.player.whoAmI + " success: " + success + ", " + plrData.ToString());
            }

            isSynced = success;
        }
Example #6
0
        ////////////////

        public static void ResetKills(Player player)
        {
            var      mymod   = RewardsMod.Instance;
            var      myworld = ModContent.GetInstance <RewardsWorld>();
            KillData data    = myworld.Logic.GetPlayerData(player);

            data.ClearKills();
        }
Example #7
0
 public void AddKill(int mobID)
 {
     if (KillData.ContainsKey(mobID))
     {
         KillData[mobID]++;
     }
     else
     {
         KillData.Add(mobID, 1);
     }
 }
Example #8
0
        public static float GetPoints(Player player)
        {
            var      myworld = ModContent.GetInstance <RewardsWorld>();
            KillData data    = myworld.Logic.GetPlayerData(player);

            if (data == null)
            {
                throw new ModHelpersException("No player data for " + player.name);
            }

            return(data.ProgressPoints);
        }
Example #9
0
            // Methods
            public void Read(BINAReader reader)
            {
                _MotionData     = new MotionData(reader);
                _MirageAnimData = new MirageAnimData(reader);
                reader.JumpAhead(8);
                _ProgramMotionData = new ProgramMotionData(reader);
                _EffectData        = new EffectData(reader);
                _SoundData         = new SoundData(reader);
                _KillData          = new KillData(reader);

                reader.JumpAhead(8);
            }
Example #10
0
    public static void Log(KillData killData)
    {
        killData.name   = killData.name.Replace("(Clone)", "");
        killData.weapon = killData.weapon.Replace("(Clone)", "");
        List <Objective> completed = new List <Objective>();

        foreach (Objective objective in objectives)
        {
            if (!objective.complete && (objective.killData.name == "" || objective.killData.name == killData.name) && (objective.killData.weapon == "" || objective.killData.weapon == killData.weapon))
            {
                objective.progress.Add(1);
                objective.DisplayProgress();

                if (objective.progress.value == objective.progress.maxValue)
                {
                    Debug.Log("Objective complete! '" + objective.display.description.text + "'");
                    objective.complete = true;
                    objective.display.GetComponent <Animator>().SetBool("Trigger", true);
                    FindObjectOfType <GameController>().AddTokens(objective.reward);
                    Destroy(objective.display.gameObject, 1f);
                    completed.Add(objective);
                }
            }
        }
        foreach (Objective objective in completed)
        {
            objectives.Remove(objective);
        }

        int value;

        if (stats.weaponKills.TryGetValue(killData.weapon, out value))
        {
            stats.weaponKills.Remove(killData.weapon);
            stats.weaponKills.Add(killData.weapon, value + 1);
        }
        else
        {
            stats.weaponKills.Add(killData.weapon, 1);
        }

        if (stats.enemyKills.TryGetValue(killData.name, out value))
        {
            stats.enemyKills.Remove(killData.name);
            stats.enemyKills.Add(killData.name, value + 1);
        }
        else
        {
            stats.enemyKills.Add(killData.name, 1);
        }
        stats.kills++;
    }
Example #11
0
        public static void AddPoints(Player player, float points)
        {
            var      mymod   = RewardsMod.Instance;
            var      myworld = ModContent.GetInstance <RewardsWorld>();
            KillData data    = myworld.Logic.GetPlayerData(player);

            if (data == null)
            {
                throw new ModHelpersException("No player data for " + player.name);
            }

            data.AddRewardForPlayer(player, false, false, points);
        }
Example #12
0
        ////////////////

        public bool BuyAndOpenPack_Synced(Player player, out string output)
        {
            var mymod = RewardsMod.Instance;

            ItemHelpers.DestroyItem(this.item);

            if (this.Info == null)
            {
                output = "No pack info available.";
                return(false);
            }

            var info  = (ShopPackDefinition)this.Info;
            int price = info.Price;

            var      myworld = ModContent.GetInstance <RewardsWorld>();
            KillData data    = myworld.Logic.GetPlayerData(player);

            if (data == null)
            {
                output = "No player data for " + player.name;
                return(false);
            }

            if (!data.Spend(price, player))
            {
                Main.NewText("Not enough progress points.", Color.Red);
                output = "";
                return(true);
            }

            if (Main.netMode == 0)
            {
                Item[] items = ShopPackDefinition.OpenPack(player, info);

                foreach (var hook in RewardsMod.Instance.OnPointsSpentHooks)
                {
                    hook(player, info.Name, info.Price, items);
                }
            }
            else if (Main.netMode == 1)
            {
                PackPurchaseProtocol.SendSpendToServer(info);
            }

            output = player.name + " bought " + info.Name + " (" + info.Price + ")";

            return(true);
        }
Example #13
0
        string GetFormattedMessage(KillData data)
        {
            List <object> messages = Config["Messages", data.message] as List <object>;
            string        msg      = messages[UnityEngine.Random.Range(0, messages.Count)].ToString();

            msg = msg.Replace("{victim}", $"<color={Config["Colors", "Victim"].ToString()}>{data.victim}</color>");
            msg = msg.Replace("{attacker}", $"<color={Config["Colors", "Attacker"].ToString()}>{data.attacker}</color>");
            msg = msg.Replace("{distance}", $"<color={Config["Colors", "Distance"].ToString()}>{data.distance}</color>");
            msg = msg.Replace("{weapon}", $"<color={Config["Colors", "Weapon"].ToString()}>{data.weapon}{data.attachments}</color>");
            msg = msg.Replace("{bodypart}", $"<color={Config["Colors", "Bodypart"].ToString()}>{data.bodypart}</color>");

            msg = $"<color={Config["Colors", "Message"].ToString()}>{msg}</color>";

            return(msg);
        }
Example #14
0
        void OnWoundedOrDeath(BasePlayer victim, HitInfo info)
        {
            if (info == null || victim == null)
            {
                return;
            }

            if (info.Initiator is BaseNPC)
            {
                return;                                                                       // if animals are off and the initiator is an animal, return
            }
            var killer = info.Initiator as BasePlayer;

            if (killer == null || killer == victim)
            {
                return;
            }

            var kill = KillData.Create(killer, victim, info);

            if (kill == null)
            {
                return;
            }

            List <KillData> killdata;

            if (!kills.TryGetValue(killer.userID, out killdata))
            {
                killdata = kills[killer.userID] = new List <KillData>();
            }
            if (killdata.Count > 0)
            {
                var last = killdata.Last();
                if (last.Bone == kill.Bone && last.Distance == kill.Distance && last.Victim == kill.Victim)
                {
                    return;
                }
            }
            killdata.Add(kill);
        }
        ////////////////

        public void SaveKillData()
        {
            var    mymod   = (RewardsMod)this.mod;
            var    myworld = ModContent.GetInstance <RewardsWorld>();
            string uid     = PlayerIdentityHelpers.GetUniqueId(this.player);

            KillData plrData = myworld.Logic.GetPlayerData(this.player);

            if (plrData == null)
            {
                LogHelpers.Warn("Could not save player kill data; no data found.");
                return;
            }

            plrData.Save(uid);

            if (mymod.SettingsConfig.DebugModeInfo)
            {
                LogHelpers.Alert("uid: " + uid + ", data: " + plrData.ToString());
            }
        }
Example #16
0
        void BroadcastDeath(KillData data, BaseEntity attacker)
        {
            if(data.message.Contains("Sleep") == false && BasePlayer.Find(data.victim) == null && (Config["Animals"] as Dictionary<string, object>).ContainsKey(data.victim) == false) return;
            else if(data.message == "Animal Death" && (bool)Config["Settings", "Show Animal Deaths"] == false) return;
            else if((data.message == "Bite" || data.message == "Bite Sleep") && (bool)Config["Settings", "Show Animal Kills"] == false) return;
            else if(data.message == "Barricade" && (bool)Config["Settings", "Show Barricade Deaths"] == false) return;
            else if((data.message == "Explosion" || data.message == "Explosion Sleep") && (bool)Config["Settings", "Show Explosion Deaths"] == false) return;
            else if(metabolismTypes.Contains(data.message) && (bool)Config["Settings", "Show Metabolism Deaths"] == false) return;
            else if((data.message == "Trap" || data.message == "Explosion Sleep") && (bool)Config["Settings", "Show Trap Deaths"] == false) return;
            else if((data.message == "Suicide" || data.message == "Explosion Sleep") && (bool)Config["Settings", "Show Suicides"] == false) return;
            else if(playerDamageTypes.Contains(data.message) && (Config["Animals"] as Dictionary<string, object>).ContainsKey(data.victim) == false && (bool)Config["Settings", "Show Player Kills"] == false) return;

            string msg = GetFormattedMessage(data);
            string unformatted = msg.Replace("</color>", "");

            var matches = new Regex(@"(<color\=.+?>)", RegexOptions.IgnoreCase).Matches(unformatted);
            foreach(Match match in matches)
            {
                if(match.Success) unformatted = unformatted.Replace(match.Groups[1].ToString(), "");
            }

            if((bool)Config["Settings", "Broadcast To Chat"])
            {
                if((bool)Config["Settings", "Message In Radius"])
                {
                    foreach(BasePlayer player in BasePlayer.activePlayerList)
                    {
                        if(Vector3.Distance(player.transform.position, attacker.transform.position) <= (int)Config["Settings", "Message Radius"]);
                    }
                }
                else
                {
                    if((bool)Config["Settings", "Broadcast To Chat"]) ConsoleSystem.Broadcast("chat.add", account, $"<color={prefixcolor}>{prefix}</color>{msg}", 1.0);
                }
            }

            if((bool)Config["Settings", "Broadcast To Console"]) Puts(unformatted);
            if((bool)Config["Settings", "Use Popup Notifications"]) PopupNotifications?.Call("CreatePopupNotification", $"<color={prefixcolor}>{prefix}</color>{msg}");
        }
Example #17
0
        protected override void ReceiveReply()
        {
            var mymod    = RewardsMod.Instance;
            var myworld  = ModContent.GetInstance <RewardsWorld>();
            var myplayer = (RewardsPlayer)TmlHelpers.SafelyGetModPlayer(Main.LocalPlayer, mymod, "RewardsPlayer");

            KillData plrData = myworld.Logic.GetPlayerData(Main.LocalPlayer);
            KillData wldData = myworld.Logic.WorldData;

            if (plrData == null || wldData == null)
            {
                LogHelpers.Alert("Could not process reply. " + (plrData == null) + ", " + (wldData == null));
                return;
            }

            wldData.ResetAll(Main.LocalPlayer);
            wldData.AddToMe(this.WorldData);

            plrData.ResetAll(Main.LocalPlayer);
            plrData.AddToMe(this.PlayerData, Main.LocalPlayer);

            myplayer.FinishLocalSync();
        }
Example #18
0
        ////////////////

        public override void Action(CommandCaller caller, string input, string[] args)
        {
            var mymod = (RewardsMod)this.mod;

            if (!mymod.SettingsConfig.DebugModeEnableCheats)
            {
                caller.Reply("Cheat mode not enabled.", Color.Yellow);
                return;
            }

            if (args.Length < 1)
            {
                caller.Reply("Insufficient arguments.", Color.Red);
                return;
            }

            float reward;

            if (!float.TryParse(args[0], out reward))
            {
                caller.Reply("Invalid numeric parameter.", Color.Red);
                return;
            }

            var      myworld = ModContent.GetInstance <RewardsWorld>();
            KillData data    = myworld.Logic.GetPlayerData(Main.LocalPlayer);

            if (data == null)
            {
                throw new ModHelpersException("Rewards - AddPointsCommand.Action() - No player data for " + Main.LocalPlayer.name);
            }

            data.AddRewardForPlayer(Main.LocalPlayer, false, false, reward);

            caller.Reply("+" + reward + " PP added. Cheater!", Color.LimeGreen);
        }
Example #19
0
        //	On Entity died / Call DeathNote
        void OnEntityDeath(BaseCombatEntity vic, HitInfo hitInfo)
        {
            if (!HasNeeded(vic, hitInfo))                       //	Does death contain needed info?
            {
                hitInfo = TryGetLastHit(vic);                   //	Try to get the last availiable info
            }

            KillData data = new KillData();                                                                                             //	Initialize new KillData

            data.attacker    = GetAttacker(hitInfo);                                                                                    //	Save Attacker in KillData
            data.victim      = GetVictim(vic);                                                                                          //	Save Victim in KillData
            data.distance    = GetDistance(vic, hitInfo);                                                                               //	Save Distance in KillData
            data.weapon      = GetWeapon(hitInfo);                                                                                      //	Save Weapon in KillData
            data.bodypart    = GetBodypart(hitInfo);                                                                                    //	Save Bodypart in KillData
            data.damage      = FirstUpper(vic.lastDamage.ToString() ?? "Unknown Damage");                                               //	Save Damage Type in KillData
            data.attachments = GetAttachments(hitInfo);                                                                                 //	Save Attachments in KillData
            data.message     = GetDeathType(hitInfo, data.damage, data.attacker, vic?.ToPlayer()?.IsSleeping() ?? false);               //	Save Death Type in KillData
            if ((Config["Animals"] as Dictionary <string, object>).ContainsKey(data.victim))
            {
                data.message = "Animal Death";
            }

            BroadcastDeath(data, hitInfo?.Initiator);
        }
Example #20
0
        public override void ModifyInterfaceLayers(List <GameInterfaceLayer> layers)
        {
            int idx = layers.FindIndex(layer => layer.Name.Equals("Vanilla: Mouse Text"));

            if (idx != -1)
            {
                GameInterfaceDrawMethod drawMethod = delegate {
                    if (!LoadHelpers.IsWorldSafelyBeingPlayed())
                    {
                        return(true);
                    }

                    try {
                        var      myworld = ModContent.GetInstance <RewardsWorld>();
                        KillData data    = myworld.Logic.GetPlayerData(Main.LocalPlayer);

                        if (data == null)
                        {
                            throw new ModHelpersException("No player data for " + Main.LocalPlayer.name);
                        }

                        if (data.CanDrawPoints())
                        {
                            data.DrawPointScore(Main.spriteBatch);
                        }
                    } catch (Exception) { }

                    return(true);
                };

                var interfaceLayer = new LegacyGameInterfaceLayer("Rewards: Points", drawMethod,
                                                                  InterfaceScaleType.UI);

                layers.Insert(idx, interfaceLayer);
            }
        }
Example #21
0
 void Handle(KillData data)
 {
     currentRoundState.Kills.Add(data);
 }
Example #22
0
        //    On Entity died / Call DeathNote
        void OnEntityDeath(BaseCombatEntity vic, HitInfo hitInfo)
        {
            if(!HasNeeded(vic, hitInfo))		//	Does death contain needed info?
            {
                hitInfo = TryGetLastHit(vic);	//	Try to get the last availiable info
            }

            KillData data = new KillData();																				//	Initialize new KillData
            data.attacker = GetAttacker(hitInfo);																		//	Save Attacker in KillData
            data.victim = GetVictim(vic);																				//	Save Victim in KillData
            data.distance = GetDistance(vic, hitInfo);																	//	Save Distance in KillData
            data.weapon = GetWeapon(hitInfo);																			//	Save Weapon in KillData
            data.bodypart = GetBodypart(hitInfo);																		//	Save Bodypart in KillData
            data.damage = FirstUpper(vic.lastDamage.ToString() ?? "Unknown Damage");									//	Save Damage Type in KillData
            data.attachments = GetAttachments(hitInfo);																	//	Save Attachments in KillData
            data.message = GetDeathType(hitInfo, data.damage, data.attacker, vic?.ToPlayer()?.IsSleeping() ?? false);	//	Save Death Type in KillData
            if((Config["Animals"] as Dictionary<string, object>).ContainsKey(data.victim)) data.message = "Animal Death";

            BroadcastDeath(data, hitInfo?.Initiator);
        }
Example #23
0
        string GetFormattedMessage(KillData data)
        {
            List<object> messages = Config["Messages", data.message] as List<object>;
            string msg = messages[UnityEngine.Random.Range(0, messages.Count)].ToString();

            msg = msg.Replace("{victim}", $"<color={Config["Colors", "Victim"].ToString()}>{data.victim}</color>");
            msg = msg.Replace("{attacker}", $"<color={Config["Colors", "Attacker"].ToString()}>{data.attacker}</color>");
            msg = msg.Replace("{distance}", $"<color={Config["Colors", "Distance"].ToString()}>{data.distance}</color>");
            msg = msg.Replace("{weapon}", $"<color={Config["Colors", "Weapon"].ToString()}>{data.weapon}{data.attachments}</color>");
            msg = msg.Replace("{bodypart}", $"<color={Config["Colors", "Bodypart"].ToString()}>{data.bodypart}</color>");

            msg = $"<color={Config["Colors", "Message"].ToString()}>{msg}</color>";

            return msg;
        }
 public void AddPlayerKill(KillData data)
 {
     this.killingDataList.Add(data);
 }
Example #25
0
        void BroadcastDeath(KillData data, BaseEntity attacker)
        {
            if (data.message.Contains("Sleep") == false && BasePlayer.Find(data.victim) == null && (Config["Animals"] as Dictionary <string, object>).ContainsKey(data.victim) == false)
            {
                return;
            }
            else if (data.message == "Animal Death" && (bool)Config["Settings", "Show Animal Deaths"] == false)
            {
                return;
            }
            else if ((data.message == "Bite" || data.message == "Bite Sleep") && (bool)Config["Settings", "Show Animal Kills"] == false)
            {
                return;
            }
            else if (data.message == "Barricade" && (bool)Config["Settings", "Show Barricade Deaths"] == false)
            {
                return;
            }
            else if ((data.message == "Explosion" || data.message == "Explosion Sleep") && (bool)Config["Settings", "Show Explosion Deaths"] == false)
            {
                return;
            }
            else if (metabolismTypes.Contains(data.message) && (bool)Config["Settings", "Show Metabolism Deaths"] == false)
            {
                return;
            }
            else if ((data.message == "Trap" || data.message == "Explosion Sleep") && (bool)Config["Settings", "Show Trap Deaths"] == false)
            {
                return;
            }
            else if ((data.message == "Suicide" || data.message == "Explosion Sleep") && (bool)Config["Settings", "Show Suicides"] == false)
            {
                return;
            }
            else if (playerDamageTypes.Contains(data.message) && (Config["Animals"] as Dictionary <string, object>).ContainsKey(data.victim) == false && (bool)Config["Settings", "Show Player Kills"] == false)
            {
                return;
            }

            string msg         = GetFormattedMessage(data);
            string unformatted = msg.Replace("</color>", "");

            var matches = new Regex(@"(<color\=.+?>)", RegexOptions.IgnoreCase).Matches(unformatted);

            foreach (Match match in matches)
            {
                if (match.Success)
                {
                    unformatted = unformatted.Replace(match.Groups[1].ToString(), "");
                }
            }

            if ((bool)Config["Settings", "Broadcast To Chat"])
            {
                if ((bool)Config["Settings", "Message In Radius"])
                {
                    foreach (BasePlayer player in BasePlayer.activePlayerList)
                    {
                        if (Vector3.Distance(player.transform.position, attacker.transform.position) <= (int)Config["Settings", "Message Radius"])
                        {
                            ;
                        }
                    }
                }
                else
                {
                    if ((bool)Config["Settings", "Broadcast To Chat"])
                    {
                        ConsoleSystem.Broadcast("chat.add", account, $"<color={prefixcolor}>{prefix}</color>{msg}", 1.0);
                    }
                }
            }

            if ((bool)Config["Settings", "Broadcast To Console"])
            {
                Puts(unformatted);
            }
            if ((bool)Config["Settings", "Use Popup Notifications"])
            {
                PopupNotifications?.Call("CreatePopupNotification", $"<color={prefixcolor}>{prefix}</color>{msg}");
            }
        }