Browse Source

Added #25 - option to select payout percent for afk players

RadBuilder 4 years ago
parent
commit
32526bd1dd

+ 50 - 29
Plugin/src/main/java/de/Linus122/TimeIsMoney/Main.java

@@ -266,6 +266,9 @@ public class Main extends JavaPlugin {
 				if (finalconfig.getString("payouts." + key + ".commands") != null) {
 					payout.commands = finalconfig.getStringList("payouts." + key + ".commands");
 				}
+				if (finalconfig.isSet("payouts." + key + ".commands_if_afk")) {
+					payout.commands_if_afk = finalconfig.getStringList("payouts." + key + ".commands_if_afk");
+				}
 				
 				if (finalconfig.getString("payouts." + key + ".chance") != null) {
 					payout.chance = finalconfig.getInt("payouts." + key + ".chance");
@@ -358,12 +361,25 @@ public class Main extends JavaPlugin {
 		}
 		
 		//AFK CHECK
-		if (!finalconfig.getBoolean("afk_payout") && !p.hasPermission("tim.afkbypass")) {
+		boolean afk = false;
+		double afkPercent = 0.0D;
+		if (!p.hasPermission("tim.afkbypass")) {
 			//ESENTIALS_AFK_FEATURE
 			if (Bukkit.getServer().getPluginManager().isPluginEnabled("Essentials")) {
 				Essentials essentials = (com.earth2me.essentials.Essentials) Bukkit.getServer().getPluginManager().getPlugin("Essentials");
 				if (essentials.getUser(p).isAfk()) {
-					//AFK
+					afk = true;
+				}
+			} else {
+				//PLUGIN_AFK_FEATURE
+				if (lastLocation.containsKey(p.getUniqueId())) { //AntiAFK
+					if (lastLocation.get(p.getUniqueId()).getX() == p.getLocation().getX() && lastLocation.get(p.getUniqueId()).getY() == p.getLocation().getY() && lastLocation.get(p.getUniqueId()).getZ() == p.getLocation().getZ() || lastLocation.get(p.getUniqueId()).getYaw() == p.getLocation().getYaw()) {
+						afk = true;
+					}
+				}
+			}
+			if (afk) {
+				if (!finalconfig.getBoolean("afk_payout")) { // Payout is disabled
 					if (finalconfig.getBoolean("display-messages-in-chat")) {
 						sendMessage(p, finalconfig.getString("message_afk"));
 					}
@@ -371,52 +387,57 @@ public class Main extends JavaPlugin {
 						sendActionbar(p, finalconfig.getString("message_afk_actionbar"));
 					}
 					return;
-				}
-			} else {
-				//PLUGIN_AFK_FEATURE
-				if (lastLocation.containsKey(p.getUniqueId())) { //AntiAFK
-					if (lastLocation.get(p.getUniqueId()).getX() == p.getLocation().getX() && lastLocation.get(p.getUniqueId()).getY() == p.getLocation().getY() && lastLocation.get(p.getUniqueId()).getZ() == p.getLocation().getZ() || lastLocation.get(p.getUniqueId()).getYaw() == p.getLocation().getYaw()) {
-						//AFK
-						if (finalconfig.getBoolean("display-messages-in-chat")) {
-							sendMessage(p, finalconfig.getString("message_afk"));
-						}
-						if (finalconfig.getBoolean("display-messages-in-actionbar") && useActionbars) {
-							sendActionbar(p, finalconfig.getString("message_afk_actionbar"));
-						}
-						return;
+				} else { // Payout is enabled
+					if (!finalconfig.isSet("afk_payout_percent")) {
+						afkPercent = 100; // Payout % isn't set (older config), so assume 100% as before
+					} else {
+						afkPercent = finalconfig.getDouble("afk_payout_percent");
 					}
 				}
 			}
 		}
 		
 		//DEPOSIT
+		double payout_amt = afk ? payout.payout_amount * (afkPercent / 100) : payout.payout_amount;
 		if (finalconfig.getBoolean("store-money-in-bank")) {
-			ATM.depositBank(p, payout.payout_amount);
+			ATM.depositBank(p, payout_amt);
 		} else {
 			double before = 0;
 			if (economy.hasAccount(p)) {
 				before = economy.getBalance(p);
 			}
 			
-			economy.depositPlayer(p, payout.payout_amount);
-			log(p.getName() + ": Deposited: " + payout.payout_amount + " Balance-before: " + before + " Balance-now: " + economy.getBalance(p));
-			
+			economy.depositPlayer(p, payout_amt);
+			log(p.getName() + ": Deposited: " + payout_amt + " Balance-before: " + before + " Balance-now: " + economy.getBalance(p));
 		}
-		if (finalconfig.getBoolean("display-messages-in-chat")) {
-			sendMessage(p, message.replace("%money%", economy.format(payout.payout_amount)));
-		}
-		if (finalconfig.getBoolean("display-messages-in-actionbar") && useActionbars) {
-			sendActionbar(p, messageActionbar.replace("%money%", economy.format(payout.payout_amount)));
-		}
-		for (String cmd : payout.commands) {
-			dispatchCommandSync(cmd.replace("/", "").replaceAll("%player%", p.getName()));
+		
+		if (!afk) {
+			if (finalconfig.getBoolean("display-messages-in-chat")) {
+				sendMessage(p, message.replace("%money%", economy.format(payout_amt)));
+			}
+			if (finalconfig.getBoolean("display-messages-in-actionbar") && useActionbars) {
+				sendActionbar(p, messageActionbar.replace("%money%", economy.format(payout_amt)));
+			}
+			for (String cmd : payout.commands) {
+				dispatchCommandSync(cmd.replace("/", "").replaceAll("%player%", p.getName()));
+			}
+		} else {
+			if (finalconfig.getBoolean("display-messages-in-chat") && finalconfig.isSet("message_afk_payout")) {
+				sendMessage(p, CC(finalconfig.getString("message_afk_payout").replace("%money%", economy.format(payout_amt)).replace("%percent%", "" + afkPercent)));
+			}
+			if (finalconfig.getBoolean("display-messages-in-actionbar") && finalconfig.isSet("message_afk_actionbar_payout") && useActionbars) {
+				sendActionbar(p, CC(finalconfig.getString("message_afk_actionbar_payout").replace("%money%", economy.format(payout_amt)).replace("%percent%", "" + afkPercent)));
+			}
+			for (String cmd : payout.commands_if_afk) {
+				dispatchCommandSync(cmd.replace("/", "").replaceAll("%player%", p.getName()));
+			}
 		}
 		
 		//ADD PAYED MONEY
 		if (payedMoney.containsKey(p.getName())) {
-			payedMoney.put(p.getName(), payedMoney.get(p.getName()) + payout.payout_amount);
+			payedMoney.put(p.getName(), payedMoney.get(p.getName()) + payout_amt);
 		} else {
-			payedMoney.put(p.getName(), payout.payout_amount);
+			payedMoney.put(p.getName(), payout_amt);
 		}
 		
 		lastLocation.put(p.getUniqueId(), p.getLocation());

+ 4 - 0
Plugin/src/main/java/de/Linus122/TimeIsMoney/Payout.java

@@ -30,4 +30,8 @@ class Payout {
 	 * The list of commands to execute if this payout is earned.
 	 */
 	List<String> commands = new ArrayList<>();
+	/**
+	 * The list of commands to execute if this payout is earned while afk.
+	 */
+	List<String> commands_if_afk = new ArrayList<>();
 }

+ 7 - 0
Plugin/src/main/resources/config.yml

@@ -9,6 +9,9 @@ disabled_in_worlds:
 # You can define if the player gets a payout whether player is afk or not.
 # the permission tim.afkbypass would avoid this for certain user or groups.
 afk_payout: false
+# If afk payout is enabled, what percent should be paid out?
+afk_payout_percent: 10
+
 display-messages-in-chat: true
 display-messages-in-actionbar: true
 display-messages-in-actionbar-time: 10
@@ -34,6 +37,8 @@ payouts:
     max_payout_per_day: 10000
     commands:
       - /give %player% diamond 1
+    commands_if_afk:
+      - /give %player% dirt 1
     # chance: 90
     # You can use any permission name you want. e.g. myserver.donor
     permission: tim.vip
@@ -42,10 +47,12 @@ payouts:
 message: "&aYou earned &c%money% &afor 10 minutes online time!"
 message_payoutlimit_reached: "&cYou have reached the payout limit today. You earned 0$"
 message_afk: "&cYou havn't earned money because you were afk!"
+message_afk_payout: "&6You earned &c%money% (%percent%% of normal payout) &6for 10 minutes online time while afk!"
 message_multiple_ips: "&cYou havn't earned money because you're playing with multiple accounts!"
 message_actionbar: "&aYou earned &c%money% &afor 10 minutes online time!"
 message_payoutlimit_reached_actionbar: "&cYou have reached the payout limit today. You got 0$"
 message_afk_actionbar: "&cYou haven't earned money because you were afk!"
+message_afk_actionbar_payout: "&6You earned &c%money% &6for 10 minutes online time while afk!"
 message_atm_noperms: "&cYou don't have the permission to use ATM's!"
 message_atm_nomoneyinbank: "&cYou don't have enough money in bank!"
 message_atm_nomoney: "&cYou don't have enough money!"