Personal healer [debug]
Ive made this script to do the sunday dauta, with a healer bot. Basically it follows the party leader, on the set distance and heals when needed.
If you are playing on english servers, rename the healing spells and the names of healing buffs. - from RUSSIAN Calculator to - ENGLISH Calculator
--
Хилер бот, зделан для прохождения выходной дауты, но может и използоватся на других босах или ежедневном фарме. Следует за парти лидером на указаной дистанции и лечит если надо..
Ive made this script to do the sunday dauta, with a healer bot. Basically it follows the party leader, on the set distance and heals when needed.
If you are playing on english servers, rename the healing spells and the names of healing buffs. - from RUSSIAN Calculator to - ENGLISH Calculator
--
Хилер бот, зделан для прохождения выходной дауты, но может и използоватся на других босах или ежедневном фарме. Следует за парти лидером на указаной дистанции и лечит если надо..
Code:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using ArcheBuddy.Bot.Classes;
namespace _Healer_1{
public class _Healer1 : Core
{
////////////////////////////////////////////////////////
//////// EDITABLES
////////////////////////////////////////////////////////
bool doLogs = true; // Logging for debug purposes.
private Double _followRange = 15.0;
private Creature _leader = null;
private Double _healRange = 15.0;
private String _healSkill1 = "Дар жизни";
private String _healSkill2 = "Свет и тьма";
private String _healSkill3 = "Непрерывное исцеление";
private String _healSkill4 = "Массовое исцеление";
private String _HealBuffSkill = "Жертвенный огонь";
private String _ConversionShield = "Энергетический щит";
private String _HealingBuff1 = "Дар жизни";
private String _HealingBuff2 = "Благословение";
private Double _MinihealPercentage = 95.0;
private Double _doublehealPercentage = 80.0;
private Double _tripplehealPercentage = 60.0;
private Double _superhealPercentage = 40.0;
private Double _MassHealPercentage = 30.0;
////////////////////////////////////////////////////////
//////// Mainloop
////////////////////////////////////////////////////////
public void PluginRun()
{
ClearLogs();
DebugLog("Script started");
SetPartyLeader();
while(true)
{
Thread.Sleep(500);
if(_leader != null)
{
if(/*_leader.inFight && */me.dist(_leader) < _healRange)
{
healRoutine();
}
else
{
moveToPlayer(_leader);
}
}
}
}
////////////////////////////////////////////////////////
//////// Heal routine
////////////////////////////////////////////////////////
public void healRoutine()
{
Creature healTarget = getLowestHPMember();
if(healTarget != null)
{
if(me.target != healTarget)
{
SetTarget(healTarget);
}
if(me.dist(healTarget) < _healRange)
{
if(healTarget.hpp <= _MassHealPercentage)
{
CheckIfHasbuff(_HealingBuff2, _HealBuffSkill);
CheckIfHasbuff(_HealingBuff1, _healSkill1);
UseSkillAndWait(_ConversionShield);
UseSkillAndWait(_healSkill2);
UseSkillAndWait(_healSkill3);
UseSkillAndWait(_healSkill3);
UseSkillAndWait(_healSkill3);
UseSkillAndWait(_healSkill3);
UseSkillAndWait(_healSkill4);
}
if(healTarget.hpp <= _superhealPercentage)
{
CheckIfHasbuff(_HealingBuff2, _HealBuffSkill);
CheckIfHasbuff(_HealingBuff1, _healSkill1);
UseSkillAndWait(_ConversionShield);
UseSkillAndWait(_healSkill2);
UseSkillAndWait(_healSkill3);
UseSkillAndWait(_healSkill3);
}
if(healTarget.hpp <= _tripplehealPercentage)
{
CheckIfHasbuff(_HealingBuff2, _HealBuffSkill);
CheckIfHasbuff(_HealingBuff1, _healSkill1);
UseSkillAndWait(_healSkill2);
}
if(healTarget.hpp <= _doublehealPercentage)
{
CheckIfHasbuff(_HealingBuff2, _HealBuffSkill);
CheckIfHasbuff(_HealingBuff1, _healSkill1);
}
if(healTarget.hpp <= _MinihealPercentage)
{
CheckIfHasbuff(_HealingBuff1, _healSkill1);
}
}
}
}
////////////////////////////////////////////////////////
//////// Get Lowest HP
////////////////////////////////////////////////////////
public Creature getLowestHPMember(){
List<PartyMember> party = getPartyMembers();
PartyMember lowestHP = party[0];
foreach(PartyMember member in party)
{
if(((double)member.curhp / (double)member.maxhp) * 100 < ((double)lowestHP.curhp / (double)lowestHP.maxhp) * 100)
{
lowestHP = member;
}
}
//DebugLog(lowestHP.nick + " has the lowest HP (" + lowestHP.curhp + " | " + (((double)lowestHP.curhp / (double)lowestHP.maxhp) * 100) + ")");
return lowestHP.obj;
}
////////////////////////////////////////////////////////
//////// UseSkill
////////////////////////////////////////////////////////
public void UseSkillAndWait(string skillName, bool selfTarget = false)
{
//wait cooldowns first, before we try to cast skill
while (me.isCasting || me.isGlobalCooldown)
Thread.Sleep(50);
if (!UseSkill(skillName, true, selfTarget))
{
if (me.target != null && GetLastError() == LastError.NoLineOfSight)
{
//No line of sight, try come to target.
if (dist(me.target) <= 5)
ComeTo(me.target, 2);
else if (dist(me.target) <= 10)
ComeTo(me.target, 3);
else if (dist(me.target) < 20)
ComeTo(me.target, 8);
else
ComeTo(me.target, 8);
}
}
//wait cooldown again, after we start cast skill
//while (me.isCasting || me.isGlobalCooldown)
//Thread.Sleep(50);
}
////////////////////////////////////////////////////////
//////// Check if has buff, if not cast the buff
////////////////////////////////////////////////////////
public void CheckIfHasbuff(string Buffname, string Sklname, bool selftargeting = false)
{
if (!me.target.getBuffs().Exists(b => b.name == Buffname))
{
UseSkillAndWait(Sklname, selftargeting);
}
}
////////////////////////////////////////////////////////
//////// Following party leader
////////////////////////////////////////////////////////
public void moveToPlayer(Creature obj)
{
ComeTo(obj, _followRange);
}
////////////////////////////////////////////////////////
//////// Seting up party leader
////////////////////////////////////////////////////////
public void SetPartyLeader()
{
_leader = getPartyLeaderObj();
if(_leader == null || _leader == me)
{
DebugLog("No party leader found");
}
}
////////////////////////////////////////////////////////
//////// Debug
////////////////////////////////////////////////////////
public void DebugLog(string Logger_string)
{
if (doLogs == true)
{
Log(Time() + Logger_string);
}
}
////////////////////////////////////////////////////////
//////// GetTime
////////////////////////////////////////////////////////
public string Time() //- Get Time
{
string A = DateTime.Now.ToString("[hh:mm:ss] ");
return A;
}
////////////////////////////////////////////////////////
//////// Stop
////////////////////////////////////////////////////////
public void PluginStop()
{
DebugLog("Script stoped");
}
////////////////////////////////////////////////////////
//////// INFO
////////////////////////////////////////////////////////
public static string GetPluginAuthor()
{
return "CAMOTbIK";
}
public static string GetPluginVersion()
{
return "0.0.0.1 ALPHA";
}
public static string GetPluginDescription()
{
return "Personal healer";
}
}
}
Last edited:






