public override void castWhenNear(Camp camp) { if (Q.IsReady() && camp.campPosition.Distance(player.Position, true) < 1200*1200) { Q.Cast(); } }
public override float getDPS(Camp camp) { float dps = 0; var qDmg = (getSpellDmgRaw(SpellSlot.Q) + 50 + 25 * Q.Level); var tillNext = Qdata.Cooldown / (1 + 0.5f * player.AttackSpeedMod); // Console.WriteLine("tillNext: " + Qdata.Cooldown); dps += qDmg / tillNext; dps += ((player.BaseAttackDamage + player.FlatPhysicalDamageMod) / (1.1f / player.AttackDelay)); dpsFix = dps; return(dps); }
public static bool isInBuffWay(Camp camp) { Camp bestBuff = getBestBuffCamp(); if (bestBuff == null) { return(false); } float distTobuff = bestBuff.campPosition.Distance(HypaJungle.player.Position, true); float distToCamp = camp.campPosition.Distance(HypaJungle.player.Position, true); float distCampToBuff = camp.campPosition.Distance(bestBuff.campPosition, true); if (distTobuff > distToCamp + 800 && distTobuff > distCampToBuff) { return(true); } return(false); }
public abstract float getTimeToDoDmgAoe(Camp.JungleMinion camp, float damageToDo, float cdResetTime);
// public abstract float getDmgDoneInTime(Camp.JungleMinion camp, float time, float cdResetTime); public abstract float getAoeDmgDoneInTime(Camp.JungleMinion camp, float time, float cdResetTime);
public static void updateJungleCleaner() { if (player.IsDead) { jcState = JungleCleanState.RecallForHeal; //Console.WriteLine("RecallForHeal"); return; } if (jcState == JungleCleanState.SearchingBestCamp) { focusedCamp = getBestCampToGo(); if (focusedCamp != null) { if (focusedCamp.priority >= 20) { GamePacket gPacketT; gPacketT = Packet.S2C.Ping.Encoded(new Packet.S2C.Ping.Struct(player.Position[0], player.Position[1], 0, 0, Packet.PingType.Normal)); gPacketT.Process(); gPacketT = Packet.S2C.Ping.Encoded(new Packet.S2C.Ping.Struct(player.Position[0], player.Position[1], 0, 0, Packet.PingType.Fallback)); gPacketT.Process(); } Console.WriteLine("New camp found " + focusedCamp); Console.WriteLine("Time to finish camp " + focusedCamp.timeToKill); Console.WriteLine("HP left after camp " + focusedCamp.hpLeftAfterFight); Console.WriteLine("Camp level " + focusedCamp.level); //puss out or kill? if ((focusedCamp.willKillMe || (focusedCamp.priority > 25 && player.Health / player.MaxHealth < 0.85f))) { Console.WriteLine("gona diee"); jcState = JungleCleanState.RecallForHeal; } else { jcState = JungleCleanState.RunningToCamp; Console.WriteLine("RunningToCamp"); } } else { jcState = JungleCleanState.RecallForHeal; Console.WriteLine("RecallForHeal"); } } if (jcState == JungleCleanState.RunningToCamp) { if (focusedCamp.State != Camp.JungleCampState.Dead && focusedCamp.side != GameObjectTeam.Neutral) { jungler.castWhenNear(focusedCamp); } jungler.checkItems(); logicRunToCamp(); } if (jcState == JungleCleanState.RunningToCamp && jungler.canMove() && (HypaJungle.player.Position.Distance(focusedCamp.campPosition) < 200 || isCampVisible())) { jcState = JungleCleanState.WaitingMinions; Console.WriteLine("WaitingMinions"); } if (jcState == JungleCleanState.WaitingMinions) { doWhileIdling(); } if (jcState == JungleCleanState.WaitingMinions && (isCampVisible())) { jcState = JungleCleanState.AttackingMinions; Console.WriteLine("AttackingMinions"); } if (jcState == JungleCleanState.AttackingMinions) { attackCampMinions(); if (focusedCamp.inAARangeMinCount() == 0 && !player.IsMelee()) { player.IssueOrder(GameObjectOrder.MoveTo, focusedCamp.campPosition); } } if (jcState == JungleCleanState.AttackingMinions && isCampFinished()) { if (HypaJungle.Config.Item("autoBuy").GetValue <bool>()) { jcState = JungleCleanState.GoingToShop; Console.WriteLine("GoingToShop"); } else { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } } if (jcState == JungleCleanState.ThinkAfterFinishCamp) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } if (jcState == JungleCleanState.RecallForHeal) { if (jungler.recall.IsReady() && !player.IsChanneling && !jungler.inSpwan() && !recalCasted) { jungler.recall.Cast(); recalCasted = true; } if (jungler.inSpwan()) { if (HypaJungle.Config.Item("autoBuy").GetValue <bool>()) { jcState = JungleCleanState.GoingToShop; } else { if (jungler.inSpwan() && player.Health > player.MaxHealth * 0.7f && (!jungler.gotMana || player.Mana > player.MaxMana * 0.7f)) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } } } } if (jcState == JungleCleanState.GoingToShop) { if (!HypaJungle.Config.Item("autoBuy").GetValue <bool>()) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } if (jungler.inSpwan()) { jungler.getItemPassiveBoostDps(); jungler.setupSmite(); } if (jungler.inSpwan() && player.IsChanneling) { Vector3 stopRecPos = new Vector3(6, 30, 2); player.IssueOrder(GameObjectOrder.MoveTo, player.Position + stopRecPos); } if (jungler.nextItem != null && player.GoldCurrent - 12 >= jungler.nextItem.goldReach) { if (jungler.recall.IsReady() && !player.IsChanneling && !jungler.inSpwan() && !recalCasted) { jungler.recall.Cast(); recalCasted = true; } } else { if (jungler.inSpwan() && player.Health > player.MaxHealth * 0.8f && (!jungler.gotMana || player.Mana > player.MaxMana * 0.8f) && (jungler.nextItem == null || player.GoldCurrent + 40 <= jungler.nextItem.goldReach)) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } if (!player.IsChanneling && !jungler.inSpwan()) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } } } else if (jcState != JungleCleanState.RecallForHeal && jcState != JungleCleanState.GoingToShop) { recalCasted = false; } if (jcState == JungleCleanState.GoingToShop && jungler.inSpwan()) { if (jungler.nextItem != null && player.GoldCurrent >= jungler.nextItem.goldReach) { jungler.buyItems(); } if (player.Health > player.MaxHealth * 0.75f && player.Mana > player.MaxMana * 0.75f) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } } }
public static int getPriorityNumber(Camp camp) { if (camp.isDrag && !canDoDragon()) { return(999); } if (!(canDoDragon() && camp.isDrag)) { if (((camp.side != HypaJungle.player.Team)) && !HypaJungle.Config.Item("enemyJung").GetValue <bool>()) { return(999); } if (camp.side == GameObjectTeam.Neutral && !HypaJungle.Config.Item("doCrabs").GetValue <bool>()) { return(999); } } int priority = 0; var timeToCamp = camp.timeToCamp; var spawnTime = (Game.Time < camp.SpawnTime.TotalSeconds) ? camp.SpawnTime.TotalSeconds : camp.RespawnTimer.TotalSeconds; float revOn = camp.ClearTick + (float)spawnTime; float timeTillSpawn = (camp.State == Camp.JungleCampState.Dead)?((revOn - Game.Time > 0) ? (revOn - Game.Time) : 0):0; camp.willKillMe = false; if (camp.willKillMe && HypaJungle.Config.Item("checkKillability").GetValue <bool>()) { priority += 777; } //Console.WriteLine("emm time?? " + camp.distToCamp/player.MoveSpeed); if (camp.isBuff) { priority -= jungler.buffPriority; } // priority -= camp.bonusPrio; priority += (int)(camp.distToCamp / player.MoveSpeed); priority += (int)timeTillSpawn; //Console.WriteLine(timeTillSpawn +" wadawdawd"); // priority -= (camp.isBuff) ? jungler.buffPriority : 0; //priority -= (int)(timeTillSpawn - timeToCamp); //alive on come is better ;) //Priority focus!! if (player.Level <= 3) { priority -= camp.bonusPrioLowLvl; } else { priority -= camp.bonusPrio; } //if(!camp.isBuff) // priority -= (isInBuffWay(camp)) ? 10 : 0; return(priority); }
/* private void Fight(Camp campFighting) * { * Camp.JungleMinion minHpMin = campFighting.Minions.OrderBy(cp => cp.UpdatedStats.health).First(); * Camp.JungleMinion maxHpMin = campFighting.Minions.OrderByDescending(cp => cp.UpdatedStats.health).First(); * * Console.WriteLine("Minion count: " + maxHpMin.UpdatedStats.health); * * float heroAoeDps = heroFigher.getSkillAoePerSec(); * float heroDps = heroFigher.getDPS(campFighting); * * Console.WriteLine("Hero dps:" + heroDps); * * float timeToKIllMin = heroFigher.getTimeToDoDmgAoe(minHpMin, minHpMin.UpdatedStats.health, (campFighting.timeToCamp - 3) < 0 ? 0 : campFighting.timeToCamp - 3); * float timeToKIllMax = heroFigher.getTimeToDoDmg(maxHpMin, maxHpMin.UpdatedStats.health, (campFighting.timeToCamp - 3) < 0 ? 0 : campFighting.timeToCamp - 3); * * float fullCampDps = campFighting.Minions.Sum(min => min.getDps()); * * float fullDmgDoneToMe = 0; * * float timeToFinish = 0; * * //Much aoe * if (timeToKIllMin < timeToKIllMax) * { * Console.WriteLine("Aeo better"); * fullDmgDoneToMe += timeToKIllMin*fullCampDps; * float restTimeToKill = timeToKIllMax - timeToKIllMin; * fullDmgDoneToMe += restTimeToKill * maxHpMin.getDps() * heroFigher.getKrugBuffDmgRemove(campFighting.timeToCamp, timeToKIllMax); * timeToFinish += timeToKIllMin+restTimeToKill; * } * else * { * Console.WriteLine("Single dps better: " + maxHpMin.UpdatedStats.health); * fullDmgDoneToMe += timeToKIllMax * fullCampDps; * float dmgDoneAor = timeToKIllMax*heroAoeDps; * float leftMin = campFighting.Minions.Count - 1; * float leftMinHp = leftMin * (minHpMin.UpdatedStats.health - dmgDoneAor); * * float tmeToFinish = leftMinHp/(heroAoeDps + heroDps); * timeToFinish = tmeToFinish + timeToKIllMax; * fullDmgDoneToMe += minHpMin.getDps()*2; * } * * Console.WriteLine("TimeTOfinish: " + timeToFinish); * float myHpTillThere = heroFigher.getFulHeal((campFighting.timeToCamp - 3) < 0 ? 0 : campFighting.timeToCamp - 3, timeToFinish) + Jungler.player.Health; * * float relDmgToMe = heroFigher.realPhysDmgDoneToMe(fullDmgDoneToMe); * * Console.WriteLine("HpLeft: " + (myHpTillThere-relDmgToMe)); * * }*/ public bool AroundFight(Camp campFighting, bool smite = false, bool aoeSmite = false, bool smiteIfNeedTo = false) { Camp.JungleMinion minHpMin = campFighting.Minions.OrderBy(cp => cp.UpdatedStats.health).First(); Camp.JungleMinion maxHpMin = campFighting.Minions.OrderByDescending(cp => cp.UpdatedStats.health).First(); smite = getSmiteCd(campFighting.timeToCamp) == 0 && smite; // Console.WriteLine("Smite: " + smite + " dmg: " + heroFigher.getSmiteDmg()); float maxMinHp = maxHpMin.UpdatedStats.health - ((smite) ? (heroFigher.getSmiteDmg() / 2) : 0);; float minMinHp = minHpMin.UpdatedStats.health - ((smite && aoeSmite)?(heroFigher.getSmiteDmg() / 2):0); //Console.WriteLine("Fighting: " + campFighting.ToString()); float timeToKillMin = heroFigher.getTimeToDoDmgAoe(minHpMin, minMinHp, (campFighting.timeToCamp - 3) < 0 ? 0 : campFighting.timeToCamp - 3); float timeToKillMax = heroFigher.getTimeToDoDmg(maxHpMin, maxMinHp, (campFighting.timeToCamp - 3) < 0 ? 0 : campFighting.timeToCamp - 3); float fullCampDps = campFighting.Minions.Sum(min => min.getDps()); float fullDmgDoneToMe = 0; float timeToKillCamp = 0; // Console.WriteLine("timeToKillMin " + timeToKillMin); //Console.WriteLine("timeToKillMax " + timeToKillMax); if (campFighting.aliveMinCount() == 1) { timeToKillCamp = timeToKillMax; fullDmgDoneToMe = maxHpMin.getDps() * heroFigher.getKrugBuffDmgRemove(campFighting.timeToCamp, timeToKillMax); } else { //Good aoe if (timeToKillMin < timeToKillMax) { // Console.WriteLine("Aeo better: " + timeToKillMin); float restTimeToKill = timeToKillMax - timeToKillMin; fullDmgDoneToMe += fullCampDps * timeToKillMin; fullDmgDoneToMe += restTimeToKill * maxHpMin.getDps() * heroFigher.getKrugBuffDmgRemove(campFighting.timeToCamp, timeToKillMax); timeToKillCamp = restTimeToKill + timeToKillMin; } else { fullDmgDoneToMe += timeToKillMax * fullCampDps; float dmgDoneAor = heroFigher.getAoeDmgDoneInTime(minHpMin, timeToKillMax, campFighting.timeToCamp) + heroFigher.getFrogBuffAoe(campFighting.timeToCamp, timeToKillMin - timeToKillMax); float leftMin = campFighting.Minions.Count - 1; float leftMinHp = leftMin * (minMinHp - dmgDoneAor); float tmeToFinish = heroFigher.getTimeToDoDmg(minHpMin, leftMinHp, 6); timeToKillCamp = tmeToFinish + timeToKillMax; fullDmgDoneToMe += minHpMin.getDps() * tmeToFinish; } } // Console.WriteLine("TimeTOfinish: " + timeToKillCamp); float myHpTillThere = heroFigher.getFulHeal((campFighting.timeToCamp - 3) < 0 ? 0 : campFighting.timeToCamp - 3, timeToKillCamp); float relDmgToMe = heroFigher.realPhysDmgDoneToMe(fullDmgDoneToMe); // Console.WriteLine("HpLeft: " + (myHpTillThere + Jungler.player.Health - relDmgToMe) + " will heal:" + myHpTillThere); hpLeftAfter = (myHpTillThere + Jungler.player.Health - relDmgToMe); timeToKill = timeToKillCamp; if (smiteIfNeedTo && hpLeftAfter <= 100 && getSmiteCd(campFighting.timeToCamp) == 0) { AroundFight(campFighting, true, aoeSmite); campFighting.forceSmite = true; // Console.WriteLine("force smite!!!!"); } //Update camp campFighting.willKillMe = hpLeftAfter < 250; campFighting.hpLeftAfterFight = hpLeftAfter; campFighting.timeToKill = timeToKill; return(hpLeftAfter > 250); }
public override float getTimeToDoDmg(Camp.JungleMinion camp, float damageToDo, float cdResetTime) { float damage = 0; //Qdmg can deal var qDmg = camp.UpdatedStats.physicGoesThrough * (getSpellDmgRaw(SpellSlot.Q)); var tillNext = ((Qdata.Cooldown == 0) ? 10 : Qdata.Cooldown); var qDps = qDmg / tillNext; // Console.WriteLine(qDmg); float aaDps = camp.UpdatedStats.physicGoesThrough * (player.BaseAttackDamage + player.FlatPhysicalDamageMod) * getAAperSecond(); float timeSkip = 0; if (Q.IsReady((int)(cdResetTime * 1000))) { damage += qDmg; timeSkip += tillNext; } damage += (player.BaseAttackDamage + player.FlatPhysicalDamageMod); if (damage >= damageToDo) return 1; float time = (damageToDo - damage) / (aaDps + getItemPassiveBoostDps()); float timeWithRed = (damageToDo - damage + timeSkip * qDps) / (aaDps + qDps + getItemPassiveBoostDps() + getRedBuffDmg(cdResetTime, time)); return timeWithRed; }
public override float getTimeToDoDmgAoe(Camp.JungleMinion camp, float damageToDo, float cdResetTime) { // Console.WriteLine("AS: " + player.AttackSpeedMod + " asbase " + player.AttackDelay); //Qdmg can deal var qDmg = camp.UpdatedStats.physicGoesThrough * (getSpellDmgRaw(SpellSlot.E)); // Console.WriteLine("Qdmg: " + qDmg + " raw: " + getSpellDmgRaw(SpellSlot.Q)); var tillNext = ((Edata.Cooldown == 0) ? 18 : Edata.Cooldown); // Console.WriteLine("Ŗeal q cd: " + tillNext); var castTimes = 0; var cdLeft = (Edata.CooldownExpires - Game.Time - cdResetTime > 0) ? Edata.CooldownExpires - Game.Time - cdResetTime : 0; int aproxCastTimes = (int)(damageToDo / (qDmg)); float aproxTime = aproxCastTimes * tillNext; //GotNoFrogBuff if (timeTillFrogBuffEnd() <= cdResetTime || timeTillFrogBuffEnd() == 0 || aproxCastTimes == 0) { // Console.WriteLine("aaprox: " + Qdata.Cooldown); return aproxTime * aproxCastTimes + cdLeft; } float buffDmg = getFrogBuffAoe(cdResetTime, aproxTime); float buffQdmg = (qDmg + tillNext * buffDmg); //With frog castTimes = (int)((damageToDo - cdLeft * buffDmg) / (buffQdmg)); float bonusTime = 0; bonusTime += ((damageToDo - cdLeft * buffDmg) + tillNext * buffDmg - (castTimes) * buffQdmg) / buffDmg; return castTimes * tillNext + cdLeft + bonusTime; }
public override float getAoeDmgDoneInTime(Camp.JungleMinion camp, float time, float cdResetTime) { float damage = 0; //Qdmg can deal var qDmg = camp.UpdatedStats.physicGoesThrough * (getSpellDmgRaw(SpellSlot.E)); var tillNext = ((Edata.Cooldown == 0) ? 18 : Edata.Cooldown); if (E.IsReady((int)(cdResetTime * 1000))) { damage += qDmg; } int qCastsMore = (int)(time / tillNext); damage += qDmg * qCastsMore; return damage; }
public override float getAoeDmgDoneInTime(Camp.JungleMinion camp, float time, float cdResetTime) { float damage = 0; //Qdmg can deal var qDmg = camp.UpdatedStats.physicGoesThrough * (getQdmg ()+ 50 + 25 * Q.Level); var tillNext = ((Qdata.Cooldown == 0) ? 18 : Qdata.Cooldown) / (1 + getAAperSecond()); if(Q.IsReady((int)(cdResetTime*1000))) { damage += qDmg; } int qCastsMore = (int)(time/tillNext); damage += qDmg * qCastsMore; return damage; }
public static void updateJungleCleaner() { if (player.IsDead) { jcState = JungleCleanState.RecallForHeal; //Console.WriteLine("RecallForHeal"); return; } if (jcState == JungleCleanState.SearchingBestCamp) { focusedCamp = getBestCampToGo(); if (focusedCamp != null) { if (focusedCamp.priority >= 20) { GamePacket gPacketT; gPacketT = Packet.S2C.Ping.Encoded(new Packet.S2C.Ping.Struct(player.Position[0], player.Position[1], 0, 0, Packet.PingType.Normal)); gPacketT.Process(); gPacketT = Packet.S2C.Ping.Encoded(new Packet.S2C.Ping.Struct(player.Position[0], player.Position[1], 0, 0, Packet.PingType.Fallback)); gPacketT.Process(); } Console.WriteLine("New camp found "+focusedCamp); Console.WriteLine("Time to finish camp " + focusedCamp.timeToKill); Console.WriteLine("HP left after camp " + focusedCamp.hpLeftAfterFight); Console.WriteLine("Camp level " + focusedCamp.level); //puss out or kill? if ( (focusedCamp.willKillMe || (focusedCamp.priority>25 && player.Health/player.MaxHealth<0.85f))) { Console.WriteLine("gona diee"); jcState = JungleCleanState.RecallForHeal; } else { jcState = JungleCleanState.RunningToCamp; Console.WriteLine("RunningToCamp"); } } else { jcState = JungleCleanState.RecallForHeal; Console.WriteLine("RecallForHeal"); } } if (jcState == JungleCleanState.RunningToCamp) { if (focusedCamp.State != Camp.JungleCampState.Dead && focusedCamp.side != GameObjectTeam.Neutral) jungler.castWhenNear(focusedCamp); jungler.checkItems(); logicRunToCamp(); } if (jcState == JungleCleanState.RunningToCamp && jungler.canMove() &&(HypaJungle.player.Position.Distance(focusedCamp.campPosition) < 200 || isCampVisible())) { jcState = JungleCleanState.WaitingMinions; Console.WriteLine("WaitingMinions"); } if (jcState == JungleCleanState.WaitingMinions) { doWhileIdling(); } if (jcState == JungleCleanState.WaitingMinions && (isCampVisible())) { jcState = JungleCleanState.AttackingMinions; Console.WriteLine("AttackingMinions"); } if (jcState == JungleCleanState.AttackingMinions) { attackCampMinions(); if (focusedCamp.inAARangeMinCount() == 0 && !player.IsMelee()) player.IssueOrder(GameObjectOrder.MoveTo, focusedCamp.campPosition); } if (jcState == JungleCleanState.AttackingMinions && isCampFinished()) { if (HypaJungle.Config.Item("autoBuy").GetValue<bool>()) { jcState = JungleCleanState.GoingToShop; Console.WriteLine("GoingToShop"); } else { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } } if (jcState == JungleCleanState.ThinkAfterFinishCamp) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } if (jcState == JungleCleanState.RecallForHeal) { if (jungler.recall.IsReady() && !player.IsChanneling && !jungler.inSpwan() && !recalCasted) { jungler.recall.Cast(); recalCasted = true; } if (jungler.inSpwan()) { if (HypaJungle.Config.Item("autoBuy").GetValue<bool>()) { jcState = JungleCleanState.GoingToShop; } else { if (jungler.inSpwan() && player.Health > player.MaxHealth*0.7f && (!jungler.gotMana || player.Mana > player.MaxMana*0.7f)) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } } } } if (jcState == JungleCleanState.GoingToShop) { if (!HypaJungle.Config.Item("autoBuy").GetValue<bool>()) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } if (jungler.inSpwan()) { jungler.getItemPassiveBoostDps(); jungler.setupSmite(); } if (jungler.inSpwan() && player.IsChanneling) { Vector3 stopRecPos = new Vector3(6, 30, 2); player.IssueOrder(GameObjectOrder.MoveTo, player.Position + stopRecPos); } if (jungler.nextItem != null && player.GoldCurrent-12 >= jungler.nextItem.goldReach) { if (jungler.recall.IsReady() && !player.IsChanneling && !jungler.inSpwan() && !recalCasted) { jungler.recall.Cast(); recalCasted = true; } } else { if (jungler.inSpwan() && player.Health > player.MaxHealth*0.8f && (!jungler.gotMana || player.Mana > player.MaxMana * 0.8f) && (jungler.nextItem == null || player.GoldCurrent+40 <= jungler.nextItem.goldReach)) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } if (!player.IsChanneling && !jungler.inSpwan()) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } } } else if (jcState != JungleCleanState.RecallForHeal && jcState != JungleCleanState.GoingToShop) { recalCasted = false; } if (jcState == JungleCleanState.GoingToShop && jungler.inSpwan()) { if (jungler.nextItem != null && player.GoldCurrent >= jungler.nextItem.goldReach ) jungler.buyItems(); if (player.Health > player.MaxHealth*0.75f && player.Mana > player.MaxMana*0.75f) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } } }
public static bool isInBuffWay(Camp camp) { Camp bestBuff = getBestBuffCamp(); if (bestBuff == null) return false; float distTobuff = bestBuff.campPosition.Distance(HypaJungle.player.Position,true); float distToCamp = camp.campPosition.Distance(HypaJungle.player.Position, true); float distCampToBuff = camp.campPosition.Distance(bestBuff.campPosition, true); if (distTobuff > distToCamp + 800 && distTobuff > distCampToBuff) return true; return false; }
public static int getPriorityNumber(Camp camp) { if (camp.isDrag && !canDoDragon()) return 999; if (!(canDoDragon() && camp.isDrag)) { if (((camp.side != HypaJungle.player.Team)) && !HypaJungle.Config.Item("enemyJung").GetValue<bool>()) return 999; if (camp.side == GameObjectTeam.Neutral && !HypaJungle.Config.Item("doCrabs").GetValue<bool>()) return 999; } int priority = 0; var timeToCamp = camp.timeToCamp; var spawnTime = (Game.Time < camp.SpawnTime.TotalSeconds) ? camp.SpawnTime.TotalSeconds : camp.RespawnTimer.TotalSeconds; float revOn = camp.ClearTick + (float)spawnTime; float timeTillSpawn = (camp.State == Camp.JungleCampState.Dead)?((revOn - Game.Time > 0) ? (revOn - Game.Time) : 0):0; camp.willKillMe = false; if (camp.willKillMe && HypaJungle.Config.Item("checkKillability").GetValue<bool>()) { priority += 777; } //Console.WriteLine("emm time?? " + camp.distToCamp/player.MoveSpeed); if (camp.isBuff) priority -= jungler.buffPriority; // priority -= camp.bonusPrio; priority += (int)(camp.distToCamp / player.MoveSpeed); priority += (int) timeTillSpawn; //Console.WriteLine(timeTillSpawn +" wadawdawd"); // priority -= (camp.isBuff) ? jungler.buffPriority : 0; //priority -= (int)(timeTillSpawn - timeToCamp); //alive on come is better ;) //Priority focus!! if (player.Level <= 3) { priority -= camp.bonusPrioLowLvl; } else { priority -= camp.bonusPrio; } //if(!camp.isBuff) // priority -= (isInBuffWay(camp)) ? 10 : 0; return priority; }
public void startAttack(Camp.JungleMinion minion, bool smite) { usePots(); getDPS(minion.unit); if (minion == null || !minion.unit.IsValid || !minion.unit.IsVisible) return; if ((smite ||player.Health/player.MaxHealth<0.14f) && minion.smiteBuff != Camp.JungleMinion.SmiteBuff.None) { if (HypaJungle.Config.Item("smiteToKill").GetValue<bool>()) { if (player.GetSummonerSpellDamage(minion.unit, Damage.SummonerSpell.Smite) >= minion.unit.Health) doSmite(minion.unit); } else { //if (minion.Health / getDPS(minion) > ((!HypaJungle.jTimer.jungleCamps.Where(cp => cp.isBuff).Any()) ? 8 : 5) * (player.Health / player.MaxHealth) || (JungleClearer.focusedCamp.isBuff && minion.MaxHealth >= 1400)) if(minion.unit.Health>getSmiteDmg()*0.70f) doSmite(minion.unit); } } attackMinion(minion.unit,smite); }
public override float getAoeDmgDoneInTime(Camp.JungleMinion camp, float time, float cdResetTime) { return 0.1f; }
public override void castWhenNear(Camp camp) { if (Q.IsReady() && player.Distance(camp.campPosition) < Q.Range) Q.Cast(camp.campPosition); }
public override float getTimeToDoDmgAoe(Camp.JungleMinion camp, float damageToDo, float cdResetTime) { var bufDmg = getFrogBuffAoe(cdResetTime, 1); if (bufDmg == 0) return 0.1f; return damageToDo / bufDmg; }
public override void castWhenNear(Camp camp) { }
public static void updateJungleCleaner() { if (player.IsDead) { jcState = JungleCleanState.RecallForHeal; Console.WriteLine("RecallForHeal"); return; } if (jcState == JungleCleanState.SearchingBestCamp) { focusedCamp = getBestCampToGo(); if (focusedCamp != null) { //puss out or kill? if ((focusedCamp.willKillMe || (focusedCamp.priority > 25 && player.Health / player.MaxHealth < 0.85f))) { Console.WriteLine("gona diee"); jcState = JungleCleanState.RecallForHeal; } else { jcState = JungleCleanState.RunningToCamp; Console.WriteLine("RunningToCamp"); } } else { jcState = JungleCleanState.RecallForHeal; Console.WriteLine("RecallForHeal"); } } if (jcState == JungleCleanState.RunningToCamp) { if (focusedCamp.State != Camp.JungleCampState.Dead && focusedCamp.side != GameObjectTeam.Neutral) { jungler.castWhenNear(focusedCamp); } jungler.checkItems(); logicRunToCamp(); } if (jcState == JungleCleanState.RunningToCamp && jungler.canMove() && (HypaJungle.player.Position.Distance(focusedCamp.campPosition) < 200 || isCampVisible())) { jcState = JungleCleanState.WaitingMinions; Console.WriteLine("WaitingMinions"); } if (jcState == JungleCleanState.WaitingMinions) { doWhileIdling(); } if (jcState == JungleCleanState.WaitingMinions && (isCampVisible())) { jcState = JungleCleanState.AttackingMinions; Console.WriteLine("AttackingMinions"); } if (jcState == JungleCleanState.AttackingMinions) { attackCampMinions(); } if (jcState == JungleCleanState.AttackingMinions && isCampFinished()) { if (HypaJungle.Config.Item("autoBuy").GetValue <bool>()) { jcState = JungleCleanState.GoingToShop; Console.WriteLine("GoingToShop"); } else { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } } if (jcState == JungleCleanState.ThinkAfterFinishCamp) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } if (jcState == JungleCleanState.RecallForHeal) { if (jungler.recall.IsReady() && !player.IsChanneling && !jungler.inSpwan() && !recalCasted) { jungler.recall.Cast(); recalCasted = true; } if (jungler.inSpwan()) { if (HypaJungle.Config.Item("autoBuy").GetValue <bool>()) { jcState = JungleCleanState.GoingToShop; } else { if (jungler.inSpwan() && player.Health > player.MaxHealth * 0.7f && (!jungler.gotMana || player.Mana > player.MaxMana * 0.7f)) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } } } } if (jcState == JungleCleanState.GoingToShop) { if (!HypaJungle.Config.Item("autoBuy").GetValue <bool>()) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } if (jungler.inSpwan()) { jungler.getItemPassiveBoostDps(); jungler.setupSmite(); } if (jungler.inSpwan() && player.IsChanneling) { Vector3 stopRecPos = new Vector3(6, 30, 2); player.IssueOrder(GameObjectOrder.MoveTo, player.Position + stopRecPos); } if (jungler.nextItem != null && player.GoldCurrent >= jungler.nextItem.goldReach && recalCasted) { if (jungler.recall.IsReady() && !player.IsChanneling && !jungler.inSpwan() && !recalCasted) { jungler.recall.Cast(); } } else { if (jungler.inSpwan() && player.Health > player.MaxHealth * 0.8f && (!jungler.gotMana || player.Mana > player.MaxMana * 0.8f) && (jungler.nextItem == null)) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } if (!player.IsChanneling && !jungler.inSpwan()) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } } } else if (jcState != JungleCleanState.RecallForHeal && jcState != JungleCleanState.GoingToShop) { recalCasted = false; } if (jcState == JungleCleanState.GoingToShop && jungler.inSpwan()) { if (jungler.nextItem != null && player.GoldCurrent >= jungler.nextItem.goldReach) { jungler.buyItems(); } if (player.Health > player.MaxHealth * 0.75f && player.Mana > player.MaxMana * 0.75f) { jcState = JungleCleanState.SearchingBestCamp; Console.WriteLine("SearchingBestCamp"); } } }
/* private void Fight(Camp campFighting) { Camp.JungleMinion minHpMin = campFighting.Minions.OrderBy(cp => cp.UpdatedStats.health).First(); Camp.JungleMinion maxHpMin = campFighting.Minions.OrderByDescending(cp => cp.UpdatedStats.health).First(); Console.WriteLine("Minion count: " + maxHpMin.UpdatedStats.health); float heroAoeDps = heroFigher.getSkillAoePerSec(); float heroDps = heroFigher.getDPS(campFighting); Console.WriteLine("Hero dps:" + heroDps); float timeToKIllMin = heroFigher.getTimeToDoDmgAoe(minHpMin, minHpMin.UpdatedStats.health, (campFighting.timeToCamp - 3) < 0 ? 0 : campFighting.timeToCamp - 3); float timeToKIllMax = heroFigher.getTimeToDoDmg(maxHpMin, maxHpMin.UpdatedStats.health, (campFighting.timeToCamp - 3) < 0 ? 0 : campFighting.timeToCamp - 3); float fullCampDps = campFighting.Minions.Sum(min => min.getDps()); float fullDmgDoneToMe = 0; float timeToFinish = 0; //Much aoe if (timeToKIllMin < timeToKIllMax) { Console.WriteLine("Aeo better"); fullDmgDoneToMe += timeToKIllMin*fullCampDps; float restTimeToKill = timeToKIllMax - timeToKIllMin; fullDmgDoneToMe += restTimeToKill * maxHpMin.getDps() * heroFigher.getKrugBuffDmgRemove(campFighting.timeToCamp, timeToKIllMax); timeToFinish += timeToKIllMin+restTimeToKill; } else { Console.WriteLine("Single dps better: " + maxHpMin.UpdatedStats.health); fullDmgDoneToMe += timeToKIllMax * fullCampDps; float dmgDoneAor = timeToKIllMax*heroAoeDps; float leftMin = campFighting.Minions.Count - 1; float leftMinHp = leftMin * (minHpMin.UpdatedStats.health - dmgDoneAor); float tmeToFinish = leftMinHp/(heroAoeDps + heroDps); timeToFinish = tmeToFinish + timeToKIllMax; fullDmgDoneToMe += minHpMin.getDps()*2; } Console.WriteLine("TimeTOfinish: " + timeToFinish); float myHpTillThere = heroFigher.getFulHeal((campFighting.timeToCamp - 3) < 0 ? 0 : campFighting.timeToCamp - 3, timeToFinish) + Jungler.player.Health; float relDmgToMe = heroFigher.realPhysDmgDoneToMe(fullDmgDoneToMe); Console.WriteLine("HpLeft: " + (myHpTillThere-relDmgToMe)); }*/ public bool AroundFight(Camp campFighting, bool smite=false,bool aoeSmite = false, bool smiteIfNeedTo = false) { Camp.JungleMinion minHpMin = campFighting.Minions.OrderBy(cp => cp.UpdatedStats.health).First(); Camp.JungleMinion maxHpMin = campFighting.Minions.OrderByDescending(cp => cp.UpdatedStats.health).First(); smite = getSmiteCd(campFighting.timeToCamp) == 0 && smite; // Console.WriteLine("Smite: " + smite + " dmg: " + heroFigher.getSmiteDmg()); float maxMinHp = maxHpMin.UpdatedStats.health - ((smite) ? (heroFigher.getSmiteDmg() / 2) : 0); ; float minMinHp = minHpMin.UpdatedStats.health - ((smite && aoeSmite)?(heroFigher.getSmiteDmg()/2):0); //Console.WriteLine("Fighting: " + campFighting.ToString()); float timeToKillMin = heroFigher.getTimeToDoDmgAoe(minHpMin, minMinHp, (campFighting.timeToCamp - 3) < 0 ? 0 : campFighting.timeToCamp - 3); float timeToKillMax = heroFigher.getTimeToDoDmg(maxHpMin, maxMinHp, (campFighting.timeToCamp - 3) < 0 ? 0 : campFighting.timeToCamp - 3); float fullCampDps = campFighting.Minions.Sum(min => min.getDps()); float fullDmgDoneToMe = 0; float timeToKillCamp = 0; // Console.WriteLine("timeToKillMin " + timeToKillMin); //Console.WriteLine("timeToKillMax " + timeToKillMax); if (campFighting.aliveMinCount() == 1) { timeToKillCamp = timeToKillMax; fullDmgDoneToMe = maxHpMin.getDps()* heroFigher.getKrugBuffDmgRemove(campFighting.timeToCamp, timeToKillMax); } else { //Good aoe if (timeToKillMin < timeToKillMax) { // Console.WriteLine("Aeo better: " + timeToKillMin); float restTimeToKill = timeToKillMax - timeToKillMin; fullDmgDoneToMe += fullCampDps*timeToKillMin; fullDmgDoneToMe += restTimeToKill * maxHpMin.getDps() * heroFigher.getKrugBuffDmgRemove(campFighting.timeToCamp, timeToKillMax); timeToKillCamp = restTimeToKill + timeToKillMin; } else { fullDmgDoneToMe += timeToKillMax * fullCampDps; float dmgDoneAor = heroFigher.getAoeDmgDoneInTime(minHpMin, timeToKillMax, campFighting.timeToCamp) + heroFigher.getFrogBuffAoe(campFighting.timeToCamp, timeToKillMin - timeToKillMax); float leftMin = campFighting.Minions.Count - 1; float leftMinHp = leftMin * (minMinHp - dmgDoneAor); float tmeToFinish = heroFigher.getTimeToDoDmg(minHpMin,leftMinHp,6); timeToKillCamp = tmeToFinish + timeToKillMax; fullDmgDoneToMe += minHpMin.getDps() * tmeToFinish; } } // Console.WriteLine("TimeTOfinish: " + timeToKillCamp); float myHpTillThere = heroFigher.getFulHeal((campFighting.timeToCamp - 3) < 0 ? 0 : campFighting.timeToCamp - 3, timeToKillCamp) ; float relDmgToMe = heroFigher.realPhysDmgDoneToMe(fullDmgDoneToMe); // Console.WriteLine("HpLeft: " + (myHpTillThere + Jungler.player.Health - relDmgToMe) + " will heal:" + myHpTillThere); hpLeftAfter = (myHpTillThere + Jungler.player.Health - relDmgToMe); timeToKill = timeToKillCamp; if (smiteIfNeedTo && hpLeftAfter <= 100 && getSmiteCd(campFighting.timeToCamp)==0) { AroundFight(campFighting, true, aoeSmite); campFighting.forceSmite = true; // Console.WriteLine("force smite!!!!"); } //Update camp campFighting.willKillMe = hpLeftAfter < 250; campFighting.hpLeftAfterFight = hpLeftAfter; campFighting.timeToKill = timeToKill; return hpLeftAfter > 250; }
public abstract void castWhenNear(Camp camp);
public abstract float getDPS(Camp camp);