static void Game_OnGameProcessPacket(GamePacketEventArgs args) { if (args.PacketData[0] == Packet.S2C.Recall.Header) { PlayerInfo playerinfo = AddRecall(Helper.RecallDecode(args.PacketData)); //AddRecall(Packet.S2C.Recall.Decoded(args.PacketData)); if (Menu != null && Menu.Item("debugMode").GetValue <bool>()) { Game.PrintChat(playerinfo.GetPlayer().ChampionName + ": " + playerinfo.recall.Status); } } }
static void HandleRecallShot(PlayerInfo playerinfo) { Obj_AI_Hero player = playerinfo.GetPlayer(); float ultdamage = Ult.GetDamage(player, StageType) * UltDamageReductionMultiplicator; float timeneeded = Helper.GetSpellTravelTime(UltSpeed, UltDelay, EnemySpawnPos) + Game.Ping - 65; //increase timeneeded if it should arrive earlier, decrease if later if (Helper.GetTargetHealth(playerinfo, timeneeded) > ultdamage) { if (Menu != null && Menu.Item("debugMode").GetValue <bool>()) { Game.PrintChat("DONT SHOOT {0} (Health: {1} UltDamage: {2})", playerinfo.GetPlayer().ChampionName, Helper.GetTargetHealth(playerinfo, timeneeded), ultdamage); } return; } float distance = Vector3.Distance(ObjectManager.Player.ServerPosition, EnemySpawnPos); float countdown = playerinfo.GetTime() + playerinfo.recall.Duration - Environment.TickCount; if (countdown <= timeneeded && !(timeneeded - countdown > 100)) { if (ObjectManager.Player.ChampionName == "Ezreal" || Helper.CheckNoCollision(EnemySpawnPos.To2D(), player.NetworkId, UltWidth, UltDelay, UltSpeed, UltRange)) //dont check champ collision for Ezreal { if (Menu != null && Menu.Item("debugMode").GetValue <bool>()) { Game.PrintChat("SHOOT {0} (Health: {1} UltDamage: {2} ReactionTime: {3})", playerinfo.GetPlayer().ChampionName, Helper.GetTargetHealth(playerinfo, timeneeded), ultdamage, (timeneeded - countdown)); } Ult.Cast(EnemySpawnPos, true); UltCasted = Environment.TickCount; } else if (Menu != null && Menu.Item("debugMode").GetValue <bool>()) { Game.PrintChat("DONT SHOOT COLLISION {0} (Health: {1} UltDamage: {2})", playerinfo.GetPlayer().ChampionName, Helper.GetTargetHealth(playerinfo, timeneeded), ultdamage); } } }
public static float GetTargetHealth(PlayerInfo playerinfo, float additionalTime) { float predictedhealth = playerinfo.GetPlayer().Health + playerinfo.GetPlayer().HPRegenRate *((float)(Environment.TickCount - playerinfo.lastSeen + additionalTime) / 1000f); return(predictedhealth > playerinfo.GetPlayer().MaxHealth ? playerinfo.GetPlayer().MaxHealth : predictedhealth); }