C#:
// https://modhub.to
// This is a user submitted Rust Plugin checked and verified by ModHub
// ModHub is the largest Server Owner Trading Platform Online
using System;
using System.Collections.Generic;
using System.Globalization;
using Network;
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;
namespace Oxide.Plugins {
[Info("Achievement System", "ModHub.to", "2.7.4")]
[Description("An achievement system where players are rewarded")]
public class AchievementSystem : RustPlugin {
#region Class Fields
[PluginReference]
private Plugin ImageLibrary, ServerRewards, Economics;
private static AchievementSystem _plugin;
private const string UsePermission = "achievementsystem.use";
private const string UsePermissionVIP = "achievementsystem.vip";
private const string AchievementFX = "assets/prefabs/tools/pager/effects/vibrate.prefab";
private const string RewardsFX = "assets/prefabs/misc/easter/painted eggs/effects/gold_open.prefab";
#endregion
#region Hooks
private void Init() {
_plugin = this;
LoadData();
permission.RegisterPermission(UsePermission, this);
permission.RegisterPermission(UsePermissionVIP, this);
}
private void OnServerInitialized() {
ImageLibrary.Call("AddImage", "https://i.postimg.cc/1X5JcdrP/Achievement-System.png", "AchievementSystemUI");
//Popup
ImageLibrary.Call("AddImage", "https://i.postimg.cc/Ghytk6vh/noun-Lock-3041637.png", "Locked");
//Locked
ImageLibrary.Call("AddImage", "https://i.postimg.cc/DwJ9gTJG/unlock-512.png", "Redeemed");
//Redeemed icon
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageHemps, "Cannabis");
//Hemp
ImageLibrary.Call("AddImage", _config.AchievementsImg.imagePumpkins, "Pies");
//Pumpkin
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageCorns, "Popcorn");
//Corn
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageWoodPicked, "WoodLurker");
//Wood Pick up
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageWoodGathered, "AxeMan");
// Wood Gathered
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageHeadshots, "HeadHunter");
//Headshots
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageSleepersKills, "Nightmare");
//Sleepers Killed
ImageLibrary.Call("AddImage", _config.AchievementsImg.imagePVPKills, "Killer");
//Kills
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageBulletsFired, "Maniac");
//Bullets Fired
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageStonesPicked, "StoneAge");
//Stone Pick up
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageMetalsPicked, "Metal");
//Metal Pick up
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageSulfursPicked, "Raider");
//Sulfur Pick up
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageBarrelsKills, "GoldenBarrel");
//Barrels Destroyed
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageRocketsLaunched, "RPG");
//Rockets Launched
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageExplosivesThrown, "Explosion");
//Explosives Thrown
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageStonesGathered, "Miner");
//Stone Gathered
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageMetalsGathered, "MetalGear");
//Metal Gathered
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageSulfursGathered, "EvilMiner");
//Sulfur Gathered
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageScientistsKills, "Outsmarted");
//Scientists Killed
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageHeaviesKills, "Juggernaut");
//Heavy Scientists Killed
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageBoarsKills, "Piggy");
//Boars Killed
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageBearsKills, "Pookie");
//Bears Killed
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageChickensKills, "ChickenDinner");
//Chickens Klled
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageStagsKills, "Bambi");
//Stags Killed
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageWolvesKills, "LoneWolf");
//Wolves Killed
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageBradleysKills, "TankHunter");
//Bradleys Destroyed
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageChoppersKills, "ChopperHunter");
//Choppers Destroyed
ImageLibrary.Call("AddImage", _config.AchievementsImg.imageClothSkinned, "Skinner");
// Cloth Skinned
foreach (BasePlayer player in BasePlayer.activePlayerList) {
PlayerData data = GetPlayerData(player.userID);
data.Name = player.displayName;
}
}
private void Unload() {
SaveData();
foreach (BasePlayer player in BasePlayer.activePlayerList) {
DestroyAllUi(player);
}
_plugin = null;
}
private void OnNewSave(string filename) {
_data.PlayerDatas.Clear();
}
private void OnPlayerDeath(BasePlayer player, HitInfo info) {
if (player == null) {
return;
}
CuiHelper.DestroyUi(player, UiPanelName);
}
private void OnPlayerConnected(BasePlayer player) {
PlayerData data = GetPlayerData(player.userID);
data.Name = player.displayName;
NextTick(() => SaveData());
}
private void AddPoints(BasePlayer player, int amount) {
ServerRewards?.Call("AddPoints", player.userID, amount);
}
private void AddEconomics(BasePlayer player, double amount) {
Economics?.Call("Deposit", player.userID, amount);
}
private void OnCollectiblePickup(Item item, BasePlayer player) {
if (player == null || player.IsNpc) {
return;
}
if (!HasPermission(player, UsePermission) && !HasPermission(player, UsePermissionVIP)) {
return;
}
PlayerData data = GetPlayerData(player.userID);
data.Name = player.displayName;
if (item.info.itemid == -858312878) {
data.HempPickedUp++;
var minHemp = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minHempsVIP : _config.AchievementsSet.minHemps;
if (_data.PlayerDatas[player.userID].HempPickedUp == minHemp) {
DisplayUI(player, "<color=#14ad00>CANNABIS</color>", "Cannabis");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#14ad00>CANNABIS</color>");
}
}
}
if (item.info.itemid == -567909622) {
data.PumpkinPickedUp++;
var minPumpkin = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minPumpkinsVIP : _config.AchievementsSet.minPumpkins;
if (_data.PlayerDatas[player.userID].PumpkinPickedUp == minPumpkin) {
DisplayUI(player, "<color=#ffa40a>PIES</color>", "Pies");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#ffa40a>PIES</color>");
}
}
}
if (item.info.itemid == 1367190888) {
data.CornPickedUp++;
var minCorn = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minCornsVIP : _config.AchievementsSet.minCorns;
if (_data.PlayerDatas[player.userID].CornPickedUp == minCorn) {
DisplayUI(player, "<color=#fff133>POPCORN</color>", "Popcorn");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#fff133>POPCORN</color>");
}
}
}
if (item.info.shortname.Contains("stone")) {
data.StonePickedUp++;
var minStone = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minStonesVIP : _config.AchievementsSet.minStones;
if (_data.PlayerDatas[player.userID].StonePickedUp == minStone) {
DisplayUI(player, "<color=#d6d6d6>STONE AGE</color>", "StoneAge");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#d6d6d6>STONE AGE</color>");
}
}
}
if (item.info.shortname.Contains("wood")) {
data.WoodPickedUp++;
var minWood = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minWoodVIP : _config.AchievementsSet.minWood;
if (_data.PlayerDatas[player.userID].WoodPickedUp == minWood) {
DisplayUI(player, "<color=#acfa58>WOOD LURKER</color>", "WoodLurker");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#acfa58>WOOD LURKER</color>");
}
}
}
if (item.info.shortname.Contains("metal")) {
data.MetalPickedUp++;
var minMetal = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minMetalsVIP : _config.AchievementsSet.minMetals;
if (_data.PlayerDatas[player.userID].MetalPickedUp == minMetal) {
DisplayUI(player, "<color=#bdbdbd>METAL MAN</color>", "Metal");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#bdbdbd>METAL MAN</color>");
}
}
}
if (item.info.shortname.Contains("sulfur")) {
data.SulfurPickedUp++;
var minSulfur = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minSulfursVIP : _config.AchievementsSet.minSulfurs;
if (_data.PlayerDatas[player.userID].SulfurPickedUp == minSulfur) {
DisplayUI(player, "<color=#eb0f00>RAIDER</color>", "Raider");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#eb0f00>RAIDER</color>");
}
}
}
}
private void OnEntityTakeDamage(BasePlayer victim, HitInfo info) {
if (victim == null || info == null || info.InitiatorPlayer == null || !victim.userID.IsSteamId() || !info.InitiatorPlayer.userID.IsSteamId() || victim == info.InitiatorPlayer) {
return;
}
var player = info.InitiatorPlayer;
if (!HasPermission(player, UsePermission) && !HasPermission(player, UsePermissionVIP)) {
return;
}
if (info.isHeadshot) {
PlayerData data = GetPlayerData(player.userID);
data.Name = player.displayName;
data.HeadShots++;
var minHeadShots = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minHeadshotsVIP : _config.AchievementsSet.minHeadshots;
if (_data.PlayerDatas[player.userID].HeadShots == minHeadShots) {
DisplayUI(player, "<color=#4da6ff>HEAD HUNTER</color>", "HeadHunter");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#4da6ff>HEAD HUNTER</color>");
}
}
}
}
private void OnEntityDeath(BasePlayer victim, HitInfo info) {
if (victim == null || info == null || info.InitiatorPlayer == null || !victim.userID.IsSteamId() || !info.InitiatorPlayer.userID.IsSteamId() || victim == info.InitiatorPlayer) {
return;
}
BasePlayer attacker = info.InitiatorPlayer;
if (!HasPermission(attacker, UsePermission) && !HasPermission(attacker, UsePermissionVIP)) {
return;
}
ProcessPVPKills(attacker, victim);
}
private void OnEntityDeath(BaseEntity entity, HitInfo info) {
if (entity == null || info == null || info.InitiatorPlayer == null || entity == info.InitiatorPlayer || info.Initiator.IsNpc || !info.InitiatorPlayer.userID.IsSteamId()) {
return;
}
var player = info.InitiatorPlayer;
if (!HasPermission(player, UsePermission) && !HasPermission(player, UsePermissionVIP)) {
return;
}
PlayerData data = GetPlayerData(player.userID);
data.Name = player.displayName;
if (entity.name.Contains("barrel")) {
data.BarrelsDestroyed++;
var minBarrels = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minBarrelsDestroyedVIP : _config.AchievementsSet.minBarrelsDestroyed;
if (_data.PlayerDatas[player.userID].BarrelsDestroyed == minBarrels) {
DisplayUI(player, "<color=#ffdb2e>GOLDEN BARREL</color>", "GoldenBarrel");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#ffdb2e>GOLDEN BARREL</color>");
}
}
}
if (entity.ShortPrefabName == "boar") {
data.BoarsKilled++;
var minBoars = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minBoarsKillsVIP : _config.AchievementsSet.minBoarsKills;
if (_data.PlayerDatas[player.userID].BoarsKilled == minBoars) {
DisplayUI(player, "<color=#ff9ee9>PIGGY</color>", "Piggy");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#ff9ee9>PIGGY</color>");
}
}
}
if (entity.ShortPrefabName == "bear") {
data.BearsKilled++;
var minBears = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minBearsKillsVIP : _config.AchievementsSet.minBearsKills;
if (_data.PlayerDatas[player.userID].BearsKilled == minBears) {
DisplayUI(player, "<color=#c8ff9e>POOKIE BEAR</color>", "Pookie");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#c8ff9e>POOKIE BEAR</color>");
}
}
}
if (entity.ShortPrefabName == "chicken") {
data.ChickensKilled++;
var minChickens = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minChickensKillsVIP : _config.AchievementsSet.minChickensKills;
if (_data.PlayerDatas[player.userID].ChickensKilled == minChickens) {
DisplayUI(player, "<color=#ba9eff>CHICKEN DINNER</color>", "ChickenDinner");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#ba9eff>CHICKEN DINNER</color>");
}
}
}
if (entity.ShortPrefabName == "stag") {
data.StagsKilled++;
var minStags = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minStagsKillsVIP : _config.AchievementsSet.minStagsKills;
if (_data.PlayerDatas[player.userID].StagsKilled == minStags) {
DisplayUI(player, "<color=#dc567c>BAMBI</color>", "Bambi");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#dc567c>BAMBI</color>");
}
}
}
if (entity.ShortPrefabName == "wolf") {
data.WolvesKilled++;
var minWolves = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minWolvesKillsVIP : _config.AchievementsSet.minWolvesKills;
if (_data.PlayerDatas[player.userID].WolvesKilled == minWolves) {
DisplayUI(player, "<color=#9f284a>LONE WOLF</color>", "LoneWolf");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#9f284a>LONE WOLF</color>");
}
}
}
if (entity.ShortPrefabName == "bradleyapc") {
data.BradleyDestroyed++;
var minBradleys = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minBradleysKillsVIP : _config.AchievementsSet.minBradleysKills;
if (_data.PlayerDatas[player.userID].BradleyDestroyed == minBradleys) {
DisplayUI(player, "<color=#28539f>TANK HUNTER</color>", "TankHunter");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#28539f>TANK HUNTER</color>");
}
}
}
if (entity.ShortPrefabName == "patrolhelicopter") {
data.HelicopterDestroyed++;
var minHelicopters = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minChoppersKillsVIP : _config.AchievementsSet.minChoppersKills;
if (_data.PlayerDatas[player.userID].HelicopterDestroyed == minHelicopters) {
DisplayUI(player, "<color=#cb6910>HELI HUNTER</color>", "ChopperHunter");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#cb6910>HELI HUNTER</color>");
}
}
}
}
private void OnEntityDeath(HumanNPC npc, HitInfo info) {
if (npc == null || info == null || info.InitiatorPlayer == null || npc == info.InitiatorPlayer || info.Initiator.IsNpc || !info.InitiatorPlayer.userID.IsSteamId()) {
return;
}
var player = info.InitiatorPlayer;
if (!HasPermission(player, UsePermission) && !HasPermission(player, UsePermissionVIP)) {
return;
}
PlayerData data = GetPlayerData(player.userID);
data.Name = player.displayName;
if (npc.name.Contains("scientist")) {
data.ScientistsKilled++;
var minScientists = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minScientistsKillsVIP : _config.AchievementsSet.minScientistsKills;
if (_data.PlayerDatas[player.userID].ScientistsKilled == minScientists) {
DisplayUI(player, "<color=#73a6e8>OUTSMARTED</color>", "Outsmarted");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#73a6e8>OUTSMARTED</color>");
}
}
}
}
private void OnEntityDeath(ScientistNPC scientist, HitInfo info) {
if (scientist == null || info == null || info.InitiatorPlayer == null || scientist == info.InitiatorPlayer || info.Initiator.IsNpc || !info.InitiatorPlayer.userID.IsSteamId()) {
return;
}
var player = info.InitiatorPlayer;
if (!HasPermission(player, UsePermission) && !HasPermission(player, UsePermissionVIP)) {
return;
}
PlayerData data = GetPlayerData(player.userID);
data.Name = player.displayName;
if (scientist.name.Contains("heavy")) {
data.HeaviesKilled++;
var minHeavies = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minHeaviesKillsVIP : _config.AchievementsSet.minHeaviesKills;
if (_data.PlayerDatas[player.userID].HeaviesKilled == minHeavies) {
DisplayUI(player, "<color=#e8d473>JUGGERNAUT</color>", "Juggernaut");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#e8d473>JUGGERNAUT</color>");
}
}
}
else if (scientist.name.Contains("scientist")) {
data.ScientistsKilled++;
var minScientists = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minScientistsKillsVIP : _config.AchievementsSet.minScientistsKills;
if (_data.PlayerDatas[player.userID].ScientistsKilled == minScientists) {
DisplayUI(player, "<color=#73a6e8>OUTSMARTED</color>", "Outsmarted");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#73a6e8>OUTSMARTED</color>");
}
}
}
}
private void OnDispenserGather(ResourceDispenser dispenser, BasePlayer player, Item item) {
if (!HasPermission(player, UsePermission) && !HasPermission(player, UsePermissionVIP)) {
return;
}
if (dispenser == null || player == null || item == null) {
return;
}
PlayerData data = GetPlayerData(player.userID);
data.Name = player.displayName;
if (item.info.shortname == "wood") {
data.WoodGathered += item.amount;
var minWood = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minWoodGatheredVIP : _config.AchievementsSet.minWoodGathered;
if (_data.PlayerDatas[player.userID].WoodGathered >= minWood && !_data.PlayerDatas[player.userID].DisplayWood) {
DisplayUI(player, "<color=#d66f00>AXE MAN</color>", "AxeMan");
SendEffectTo(AchievementFX, player);
_data.PlayerDatas[player.userID].DisplayWood = true;
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#d66f00>AXE MAN</color>");
}
}
}
if (item.info.shortname == "stones") {
data.StoneGathered += item.amount;
var minStones = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minStonesGatheredVIP : _config.AchievementsSet.minStonesGathered;
if (_data.PlayerDatas[player.userID].StoneGathered >= minStones && !_data.PlayerDatas[player.userID].DisplayStone) {
DisplayUI(player, "<color=#c4b382>MINER</color>", "Miner");
SendEffectTo(AchievementFX, player);
_data.PlayerDatas[player.userID].DisplayStone = true;
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#c4b382>MINER</color>");
}
}
}
if (item.info.shortname == "metal.ore") {
data.MetalGathered += item.amount;
var minMetal = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minMetalsGatheredVIP : _config.AchievementsSet.minMetalsGathered;
if (_data.PlayerDatas[player.userID].MetalGathered >= minMetal && !_data.PlayerDatas[player.userID].DisplayMetal) {
DisplayUI(player, "<color=#adadad>METAL GEAR</color>", "MetalGear");
SendEffectTo(AchievementFX, player);
_data.PlayerDatas[player.userID].DisplayMetal = true;
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#adadad>METAL GEAR</color>");
}
}
}
if (item.info.shortname == "sulfur.ore") {
data.SulfurGathered += item.amount;
var minSulfur = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minSulfursGatheredVIP : _config.AchievementsSet.minSulfursGathered;
if (_data.PlayerDatas[player.userID].SulfurGathered >= minSulfur && !_data.PlayerDatas[player.userID].DisplaySulfur) {
DisplayUI(player, "<color=#eb3e00>EVIL MINER</color>", "EvilMiner");
SendEffectTo(AchievementFX, player);
_data.PlayerDatas[player.userID].DisplaySulfur = true;
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#eb3e00>EVIL MINER</color>");
}
}
}
if (item.info.shortname == "cloth") {
data.ClothSkinned += item.amount;
var minCloth = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minClothSkinnedVIP : _config.AchievementsSet.minClothSkinned;
if (_data.PlayerDatas[player.userID].ClothSkinned >= minCloth && !_data.PlayerDatas[player.userID].DisplayCloth) {
DisplayUI(player, "<color=#95283b>SKINNER</color>", "Skinner");
SendEffectTo(AchievementFX, player);
_data.PlayerDatas[player.userID].DisplayCloth = true;
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#95283b>SKINNER</color>");
}
}
}
}
private void OnWeaponFired(BaseProjectile projectile, BasePlayer player, ItemModProjectile mod) {
if (!HasPermission(player, UsePermission) && !HasPermission(player, UsePermissionVIP)) {
return;
}
if (player != null) {
if (mod != null) {
if (mod.ToString().Contains("ammo")) {
PlayerData data = GetPlayerData(player.userID);
data.Name = player.displayName;
data.BulletsFired++;
var minBullets = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minBulletsVIP : _config.AchievementsSet.minBullets;
if (_data.PlayerDatas[player.userID].BulletsFired == minBullets) {
DisplayUI(player, "<color=#ffea80>MANIAC</color>", "Maniac");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#ffea80>MANIAC</color>");
}
}
}
}
}
}
private void OnExplosiveThrown(BasePlayer player, BaseEntity entity, ThrownWeapon item) {
if (!HasPermission(player, UsePermission) && !HasPermission(player, UsePermissionVIP)) {
return;
}
if (player != null) {
if (item != null) {
if (item.name.Contains("explosive.timed") || item.name.Contains("explosive.satchel") || item.name.Contains("grenade.beancan") || item.name.Contains("grenade.f1")) {
PlayerData data = GetPlayerData(player.userID);
data.Name = player.displayName;
data.ExplosivesThrown++;
var minExplosives = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minExplosivesVIP : _config.AchievementsSet.minExplosives;
if (_data.PlayerDatas[player.userID].ExplosivesThrown == minExplosives) {
DisplayUI(player, "<color=#ff9c42>BOOM</color>", "Explosion");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#ff9c42>BOOM</color>");
}
}
}
}
}
}
private void OnRocketLaunched(BasePlayer player, BaseEntity entity) {
if (!HasPermission(player, UsePermission) && !HasPermission(player, UsePermissionVIP)) {
return;
}
if (player != null) {
PlayerData data = GetPlayerData(player.userID);
data.Name = player.displayName;
data.RocketsLaunched++;
var minRockets = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minRocketsVIP : _config.AchievementsSet.minRockets;
if (_data.PlayerDatas[player.userID].RocketsLaunched == minRockets) {
DisplayUI(player, "<color=#ff712e>RPG</color>", "RPG");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#ff712e>RPG</color>");
}
}
}
}
#endregion
#region Core Methods
private void ProcessPVPKills(BasePlayer player, BasePlayer victim) {
PlayerData data = GetPlayerData(player.userID);
data.Name = player.displayName;
if (victim.IsSleeping()) {
data.SleepersKilled++;
var minSleepers = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minSleepersKillsVIP : _config.AchievementsSet.minSleepersKills;
if (_data.PlayerDatas[player.userID].SleepersKilled == minSleepers) {
DisplayUI(player, "<color=#785959>NIGHTMARE</color>", "Nightmare");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#785959>NIGHTMARE</color>");
}
}
return;
}
data.PVPKills++;
var minKills = HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minPVPKillsVIP : _config.AchievementsSet.minPVPKills;
if (_data.PlayerDatas[player.userID].PVPKills == minKills) {
DisplayUI(player, "<color=#ff5633>KILLER</color>", "Killer");
SendEffectTo(AchievementFX, player);
if (_config.AchievementsImg.achievementBroadcast) {
Server.Broadcast($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] <color=#54a3f2>{player.displayName}</color> unlocked an Achievement: <color=#ff5633>KILLER</color>");
}
}
}
#endregion
#region Commands
[ChatCommand("achievements")]
private void AchievementsCommand(BasePlayer player) {
if (!HasPermission(player, UsePermission) && !HasPermission(player, UsePermissionVIP)) {
player.ChatMessage(Lang(LangKeys.NoPermission, player.UserIDString));
return;
}
DisplayAchievements(player);
}
[ChatCommand("checkachievements")]
private void AchievementsCheckCommand(BasePlayer player) {
if (!HasPermission(player, UsePermission) && !HasPermission(player, UsePermissionVIP)) {
player.ChatMessage(Lang(LangKeys.NoPermission, player.UserIDString));
return;
}
player.ChatMessage($"<color=#e3e3e3>[<color=#ACFA58>Achievement System</color>] Your achievement stats are:\n" + $"PVP Kills: {_data.PlayerDatas[player.userID].PVPKills} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minPVPKillsVIP : _config.AchievementsSet.minPVPKills)}\n" + $"Scientists Killed: {_data.PlayerDatas[player.userID].ScientistsKilled} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minScientistsKillsVIP : _config.AchievementsSet.minScientistsKills)}\n" + $"Heavy Scientists Killed: {_data.PlayerDatas[player.userID].HeaviesKilled} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minHeaviesKillsVIP : _config.AchievementsSet.minHeaviesKills)}\n" + $"Boars Killed: {_data.PlayerDatas[player.userID].BoarsKilled} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minBoarsKillsVIP : _config.AchievementsSet.minBoarsKills)}\n" + $"Bears Killed: {_data.PlayerDatas[player.userID].BearsKilled} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minBearsKillsVIP : _config.AchievementsSet.minBearsKills)}\n" + $"Chickens Killed: {_data.PlayerDatas[player.userID].ChickensKilled} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minChickensKillsVIP : _config.AchievementsSet.minChickensKills)}\n" + $"Stags Killed: {_data.PlayerDatas[player.userID].StagsKilled} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minStagsKillsVIP : _config.AchievementsSet.minStagsKills)}\n" + $"Wolves Killed: {_data.PlayerDatas[player.userID].WolvesKilled} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minWolvesKillsVIP : _config.AchievementsSet.minWolvesKills)}\n" + $"Bradleys Destroyed: {_data.PlayerDatas[player.userID].BradleyDestroyed} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minBradleysKillsVIP : _config.AchievementsSet.minBradleysKills)}\n" + $"Choppers Destroyed: {_data.PlayerDatas[player.userID].HelicopterDestroyed} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minChoppersKillsVIP : _config.AchievementsSet.minChoppersKills)}\n" + $"Sleepers Killed: {_data.PlayerDatas[player.userID].SleepersKilled} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minSleepersKillsVIP : _config.AchievementsSet.minSleepersKills)}\n" + $"Headshots: {_data.PlayerDatas[player.userID].HeadShots} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minHeadshotsVIP : _config.AchievementsSet.minHeadshots)}\n" + $"Barrels Destroyed: {_data.PlayerDatas[player.userID].BarrelsDestroyed} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minBarrelsDestroyedVIP : _config.AchievementsSet.minBarrelsDestroyed)}\n" + $"Explosives Thrown: {_data.PlayerDatas[player.userID].ExplosivesThrown} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minExplosivesVIP : _config.AchievementsSet.minExplosives)}\n" + $"Bullets Fired: {_data.PlayerDatas[player.userID].BulletsFired} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minBulletsVIP : _config.AchievementsSet.minBullets)}\n" + $"Rockets Launched: {_data.PlayerDatas[player.userID].RocketsLaunched} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minRocketsVIP : _config.AchievementsSet.minRockets)}\n" + $"Hemps Picked up: {_data.PlayerDatas[player.userID].HempPickedUp} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minHempsVIP : _config.AchievementsSet.minHemps)}\n" + $"Pumpkins Picked up: {_data.PlayerDatas[player.userID].PumpkinPickedUp} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minPumpkinsVIP : _config.AchievementsSet.minPumpkins)}\n" + $"Corns Picked up: {_data.PlayerDatas[player.userID].CornPickedUp} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minCornsVIP : _config.AchievementsSet.minCorns)}\n" + $"Wood Picked up: {_data.PlayerDatas[player.userID].WoodPickedUp} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minWoodVIP : _config.AchievementsSet.minWood)}\n" + $"Stones Picked up: {_data.PlayerDatas[player.userID].StonePickedUp} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minStonesVIP : _config.AchievementsSet.minStones)}\n" + $"Metals Picked up: {_data.PlayerDatas[player.userID].MetalPickedUp} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minMetalsVIP : _config.AchievementsSet.minMetals)}\n" + $"Sulfurs Picked up: {_data.PlayerDatas[player.userID].SulfurPickedUp} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minSulfursVIP : _config.AchievementsSet.minSulfurs)}\n" + $"Stones Gathered: {_data.PlayerDatas[player.userID].StoneGathered} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minStonesGatheredVIP : _config.AchievementsSet.minStonesGathered)}\n" + $"Wood Gathered: {_data.PlayerDatas[player.userID].WoodGathered} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minWoodGatheredVIP : _config.AchievementsSet.minWoodGathered)}\n" + $"Metals Gathered: {_data.PlayerDatas[player.userID].MetalGathered} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minMetalsGatheredVIP : _config.AchievementsSet.minMetalsGathered)}\n" + $"Sulfurs Gathered: {_data.PlayerDatas[player.userID].SulfurGathered} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minSulfursGatheredVIP : _config.AchievementsSet.minSulfursGathered)}\n" + $"Cloth Skinned: {_data.PlayerDatas[player.userID].ClothSkinned} / {(HasPermission(player, UsePermissionVIP) ? _config.AchievementsSetVIP.minClothSkinnedVIP : _config.AchievementsSet.minClothSkinned)}</color>");
}
#endregion
#region Configuration
private Configuration _config;
private class Configuration {
[JsonProperty(PropertyName = "Achievements for Regular Players")]
public AchievementsSettings AchievementsSet {
get;
set;
}
[JsonProperty(PropertyName = "Achievements for VIP Players")]
public AchievementsSettingsVIP AchievementsSetVIP {
get;
set;
}
[JsonProperty(PropertyName = "Reward Settings for Regular Players")]
public RewardSettings RewardSet {
get;
set;
}
[JsonProperty(PropertyName = "Reward Settings for VIP Players")]
public RewardSettingsVIP RewardSetVIP {
get;
set;
}
[JsonProperty(PropertyName = "Achievements Image URL")]
public AchievementsImage AchievementsImg {
get;
set;
}
}
private class AchievementsSettings {
[JsonProperty("PVP Kills Amount for Achievement")]
public int minPVPKills {
get;
set;
}
[JsonProperty("Scientists Kills Amount for Achievement")]
public int minScientistsKills {
get;
set;
}
[JsonProperty("Heavy Scientists Kills Amount for Achievement")]
public int minHeaviesKills {
get;
set;
}
[JsonProperty("Boars Kills Amount for Achievement")]
public int minBoarsKills {
get;
set;
}
[JsonProperty("Bears Kills Amount for Achievement")]
public int minBearsKills {
get;
set;
}
[JsonProperty("Chickens Kills Amount for Achievement")]
public int minChickensKills {
get;
set;
}
[JsonProperty("Stags Kills Amount for Achievement")]
public int minStagsKills {
get;
set;
}
[JsonProperty("Wolves Kills Amount for Achievement")]
public int minWolvesKills {
get;
set;
}
[JsonProperty("Bradleys Destroyed Amount for Achievement")]
public int minBradleysKills {
get;
set;
}
[JsonProperty("Choppers Destroyed Amount for Achievement")]
public int minChoppersKills {
get;
set;
}
[JsonProperty("Sleepers Kills Amount for Achievement")]
public int minSleepersKills {
get;
set;
}
[JsonProperty("Headshots Amount for Achievement")]
public int minHeadshots {
get;
set;
}
[JsonProperty("Barrels Destroyed Amount for Achievement")]
public int minBarrelsDestroyed {
get;
set;
}
[JsonProperty("Explosives Thrown Amount for Achievement")]
public int minExplosives {
get;
set;
}
[JsonProperty("Bullets Fired Amount for Achievement")]
public int minBullets {
get;
set;
}
[JsonProperty("Rockets Launched Amount for Achievement")]
public int minRockets {
get;
set;
}
[JsonProperty("Hemps Picked Up Amount for Achievement")]
public int minHemps {
get;
set;
}
[JsonProperty("Pumpkins Picked Up Amount for Achievement")]
public int minPumpkins {
get;
set;
}
[JsonProperty("Corns Picked Up Amount for Achievement")]
public int minCorns {
get;
set;
}
[JsonProperty("Stones Picked Up Amount for Achievement")]
public int minStones {
get;
set;
}
[JsonProperty("Wood Picked Up Amount for Ac
// ... [Code preview truncated due to length. Full source in attached file] ...