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 + ")"); } }
//// 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; }
//////////////// public static void ResetKills(Player player) { var mymod = RewardsMod.Instance; var myworld = ModContent.GetInstance <RewardsWorld>(); KillData data = myworld.Logic.GetPlayerData(player); data.ClearKills(); }
public void AddKill(int mobID) { if (KillData.ContainsKey(mobID)) { KillData[mobID]++; } else { KillData.Add(mobID, 1); } }
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); }
// 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); }
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++; }
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); }
//////////////// 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); }
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); }
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()); } }
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}"); }
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(); }
//////////////// 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); }
// 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); }
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); } }
void Handle(KillData data) { currentRoundState.Kills.Add(data); }
// 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); }
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); }
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}"); } }