mirror of
https://github.com/MCCTeam/Minecraft-Console-Client
synced 2025-10-14 21:22:49 +00:00
Add setting for overriding attack speed for autoattack (#1512)
* Add setting for overriding attack speed for autoattack * Change cooldown value type to float * Fix minor grammar issue
This commit is contained in:
parent
70d3b6175b
commit
53e2413204
5 changed files with 58 additions and 7 deletions
|
|
@ -15,14 +15,15 @@ namespace MinecraftClient.ChatBots
|
||||||
private int attackCooldown = 6;
|
private int attackCooldown = 6;
|
||||||
private int attackCooldownCounter = 6;
|
private int attackCooldownCounter = 6;
|
||||||
private Double attackSpeed = 4;
|
private Double attackSpeed = 4;
|
||||||
private Double attackCooldownSecond;
|
private Double attackCooldownSeconds;
|
||||||
|
private bool overrideAttackSpeed = false;
|
||||||
private int attackRange = 4;
|
private int attackRange = 4;
|
||||||
private Double serverTPS;
|
private Double serverTPS;
|
||||||
private float health = 100;
|
private float health = 100;
|
||||||
private bool singleMode = true;
|
private bool singleMode = true;
|
||||||
private bool priorityDistance = true;
|
private bool priorityDistance = true;
|
||||||
|
|
||||||
public AutoAttack(string mode, string priority)
|
public AutoAttack(string mode, string priority, bool overrideAttackSpeed = false, double cooldownSeconds = 1)
|
||||||
{
|
{
|
||||||
if (mode == "single")
|
if (mode == "single")
|
||||||
singleMode = true;
|
singleMode = true;
|
||||||
|
|
@ -35,6 +36,20 @@ namespace MinecraftClient.ChatBots
|
||||||
else if (priority == "health")
|
else if (priority == "health")
|
||||||
priorityDistance = false;
|
priorityDistance = false;
|
||||||
else LogToConsoleTranslated("bot.autoAttack.priority", priority);
|
else LogToConsoleTranslated("bot.autoAttack.priority", priority);
|
||||||
|
|
||||||
|
if (overrideAttackSpeed)
|
||||||
|
{
|
||||||
|
if (cooldownSeconds <= 0)
|
||||||
|
{
|
||||||
|
LogToConsoleTranslated("bot.autoAttack.invalidcooldown");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.overrideAttackSpeed = overrideAttackSpeed;
|
||||||
|
this.attackCooldownSeconds = cooldownSeconds;
|
||||||
|
attackCooldown = Convert.ToInt32(Math.Truncate(attackCooldownSeconds / 0.1) + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
|
|
@ -137,6 +152,8 @@ namespace MinecraftClient.ChatBots
|
||||||
|
|
||||||
public override void OnPlayerProperty(Dictionary<string, double> prop)
|
public override void OnPlayerProperty(Dictionary<string, double> prop)
|
||||||
{
|
{
|
||||||
|
if (overrideAttackSpeed)
|
||||||
|
return;
|
||||||
foreach (var attackSpeedKey in new[] { "generic.attackSpeed", "minecraft:generic.attack_speed" })
|
foreach (var attackSpeedKey in new[] { "generic.attackSpeed", "minecraft:generic.attack_speed" })
|
||||||
{
|
{
|
||||||
// adjust auto attack cooldown for maximum attack damage
|
// adjust auto attack cooldown for maximum attack damage
|
||||||
|
|
@ -146,8 +163,8 @@ namespace MinecraftClient.ChatBots
|
||||||
{
|
{
|
||||||
serverTPS = GetServerTPS();
|
serverTPS = GetServerTPS();
|
||||||
attackSpeed = prop[attackSpeedKey];
|
attackSpeed = prop[attackSpeedKey];
|
||||||
attackCooldownSecond = 1 / attackSpeed * (serverTPS / 20.0); // server tps will affect the cooldown
|
attackCooldownSeconds = 1 / attackSpeed * (serverTPS / 20.0); // server tps will affect the cooldown
|
||||||
attackCooldown = Convert.ToInt32(Math.Truncate(attackCooldownSecond / 0.1) + 1);
|
attackCooldown = Convert.ToInt32(Math.Truncate(attackCooldownSeconds / 0.1) + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -155,10 +172,12 @@ namespace MinecraftClient.ChatBots
|
||||||
|
|
||||||
public override void OnServerTpsUpdate(double tps)
|
public override void OnServerTpsUpdate(double tps)
|
||||||
{
|
{
|
||||||
|
if (overrideAttackSpeed)
|
||||||
|
return;
|
||||||
serverTPS = tps;
|
serverTPS = tps;
|
||||||
// re-calculate attack speed
|
// re-calculate attack speed
|
||||||
attackCooldownSecond = 1 / attackSpeed * (serverTPS / 20.0); // server tps will affect the cooldown
|
attackCooldownSeconds = 1 / attackSpeed * (serverTPS / 20.0); // server tps will affect the cooldown
|
||||||
attackCooldown = Convert.ToInt32(Math.Truncate(attackCooldownSecond / 0.1) + 1);
|
attackCooldown = Convert.ToInt32(Math.Truncate(attackCooldownSeconds / 0.1) + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -204,7 +204,7 @@ namespace MinecraftClient
|
||||||
if (Settings.ScriptScheduler_Enabled) { BotLoad(new ChatBots.ScriptScheduler(Settings.ExpandVars(Settings.ScriptScheduler_TasksFile))); }
|
if (Settings.ScriptScheduler_Enabled) { BotLoad(new ChatBots.ScriptScheduler(Settings.ExpandVars(Settings.ScriptScheduler_TasksFile))); }
|
||||||
if (Settings.RemoteCtrl_Enabled) { BotLoad(new ChatBots.RemoteControl()); }
|
if (Settings.RemoteCtrl_Enabled) { BotLoad(new ChatBots.RemoteControl()); }
|
||||||
if (Settings.AutoRespond_Enabled) { BotLoad(new ChatBots.AutoRespond(Settings.AutoRespond_Matches)); }
|
if (Settings.AutoRespond_Enabled) { BotLoad(new ChatBots.AutoRespond(Settings.AutoRespond_Matches)); }
|
||||||
if (Settings.AutoAttack_Enabled) { BotLoad(new ChatBots.AutoAttack(Settings.AutoAttack_Mode, Settings.AutoAttack_Priority)); }
|
if (Settings.AutoAttack_Enabled) { BotLoad(new ChatBots.AutoAttack(Settings.AutoAttack_Mode, Settings.AutoAttack_Priority, Settings.AutoAttack_OverrideAttackSpeed, Settings.AutoAttack_CooldownSeconds)); }
|
||||||
if (Settings.AutoFishing_Enabled) { BotLoad(new ChatBots.AutoFishing()); }
|
if (Settings.AutoFishing_Enabled) { BotLoad(new ChatBots.AutoFishing()); }
|
||||||
if (Settings.AutoEat_Enabled) { BotLoad(new ChatBots.AutoEat(Settings.AutoEat_hungerThreshold)); }
|
if (Settings.AutoEat_Enabled) { BotLoad(new ChatBots.AutoEat(Settings.AutoEat_hungerThreshold)); }
|
||||||
if (Settings.Mailer_Enabled) { BotLoad(new ChatBots.Mailer()); }
|
if (Settings.Mailer_Enabled) { BotLoad(new ChatBots.Mailer()); }
|
||||||
|
|
|
||||||
|
|
@ -138,6 +138,7 @@ matchesfile=matches.ini
|
||||||
enabled=false
|
enabled=false
|
||||||
mode=single # single or multi. single target one mob per attack. multi target all mobs in range per attack
|
mode=single # single or multi. single target one mob per attack. multi target all mobs in range per attack
|
||||||
priority=distance # health or distance. Only needed when using single mode
|
priority=distance # health or distance. Only needed when using single mode
|
||||||
|
cooldownseconds=auto # How long to wait between each attack. Use auto to let MCC calculate it
|
||||||
|
|
||||||
[AutoFishing]
|
[AutoFishing]
|
||||||
# Entity Handling NEED to be enabled first
|
# Entity Handling NEED to be enabled first
|
||||||
|
|
|
||||||
|
|
@ -338,6 +338,7 @@ cmd.useitem.use=Used an item
|
||||||
# AutoAttack
|
# AutoAttack
|
||||||
bot.autoAttack.mode=Unknown attack mode: {0}. Using single mode as default.
|
bot.autoAttack.mode=Unknown attack mode: {0}. Using single mode as default.
|
||||||
bot.autoAttack.priority=Unknown priority: {0}. Using distance priority as default.
|
bot.autoAttack.priority=Unknown priority: {0}. Using distance priority as default.
|
||||||
|
bot.autoAttack.invalidcooldown=Attack cooldown value cannot be smaller than 0. Using auto as default
|
||||||
|
|
||||||
# AutoCraft
|
# AutoCraft
|
||||||
bot.autoCraft.cmd=Auto-crafting ChatBot command
|
bot.autoCraft.cmd=Auto-crafting ChatBot command
|
||||||
|
|
|
||||||
|
|
@ -173,6 +173,8 @@ namespace MinecraftClient
|
||||||
public static bool AutoAttack_Enabled = false;
|
public static bool AutoAttack_Enabled = false;
|
||||||
public static string AutoAttack_Mode = "single";
|
public static string AutoAttack_Mode = "single";
|
||||||
public static string AutoAttack_Priority = "distance";
|
public static string AutoAttack_Priority = "distance";
|
||||||
|
public static bool AutoAttack_OverrideAttackSpeed = false;
|
||||||
|
public static double AutoAttack_CooldownSeconds = 1;
|
||||||
|
|
||||||
//Auto Fishing
|
//Auto Fishing
|
||||||
public static bool AutoFishing_Enabled = false;
|
public static bool AutoFishing_Enabled = false;
|
||||||
|
|
@ -577,6 +579,17 @@ namespace MinecraftClient
|
||||||
case "enabled": AutoAttack_Enabled = str2bool(argValue); break;
|
case "enabled": AutoAttack_Enabled = str2bool(argValue); break;
|
||||||
case "mode": AutoAttack_Mode = argValue.ToLower(); break;
|
case "mode": AutoAttack_Mode = argValue.ToLower(); break;
|
||||||
case "priority": AutoAttack_Priority = argValue.ToLower(); break;
|
case "priority": AutoAttack_Priority = argValue.ToLower(); break;
|
||||||
|
case "cooldownseconds":
|
||||||
|
if (argValue.ToLower() == "auto")
|
||||||
|
{
|
||||||
|
AutoAttack_OverrideAttackSpeed = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AutoAttack_OverrideAttackSpeed = true;
|
||||||
|
AutoAttack_CooldownSeconds = str2float(argValue);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -726,6 +739,23 @@ namespace MinecraftClient
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert the specified string to a float number, defaulting to zero if invalid argument
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="str">String to parse as a float number</param>
|
||||||
|
/// <returns>Float number</returns>
|
||||||
|
public static float str2float(string str)
|
||||||
|
{
|
||||||
|
float f;
|
||||||
|
if (float.TryParse(str.Trim(), out f))
|
||||||
|
return f;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ConsoleIO.WriteLogLine(Translations.Get("error.setting.str2int", str));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert the specified string to a boolean value, defaulting to false if invalid argument
|
/// Convert the specified string to a boolean value, defaulting to false if invalid argument
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue