public bool CanGatherElement(int id, int distance) { if (distance <= 1 && distance >= 0) { return(true); } if (m_Account.Inventory.HasFishingRod) { MapPoint characterPoint = new MapPoint(Character.CellId); //Elements.StatedElement element = (Elements.StatedElement)StatedElements.GetValueOrNull(id); Elements.StatedElement element = null; if (StatedElements.ContainsKey(id)) { element = StatedElements[id]; } if (element != null) { //StatedElement selectedStatedElement = findValue(StatedElements, id); //if (selectedStatedElement != null) // element = (Elements.StatedElement)selectedStatedElement; MapPoint elementPoint = new MapPoint((int)element.CellId); List <MapPoint> goodPointsList = GetListPointAtGoodDistance(characterPoint, elementPoint, 1); //m_Account.Inventory.WeaponRange); var selectedPoint = goodPointsList.FirstOrDefault((point) => point.CellId == characterPoint.CellId); if (selectedPoint != null) { return(true); } } } return(false); }
public bool MoveToElement(int id, int maxDistance) { Elements.StatedElement element = null; if (StatedElements.ContainsKey(id)) { element = StatedElements[id]; } if (element != null) { return(MoveToCellWithDistance((int)element.CellId, maxDistance, false)); } else { return(false); } }
public bool MoveToSecureElement(int id) { Elements.StatedElement element = null; if (StatedElements.ContainsKey(id)) { element = StatedElements[id]; } if (element != null) { return(MoveToCellWithDistance((int)element.CellId, 1, true)); } else { //m_Account.Log(new ErrorTextInformation("Element introuvable"), 0); return(false); } }
private void HandleMapComplementaryInformationsDataMessage(IAccount account, MapComplementaryInformationsDataMessage message) { lock (CheckLock) { SubAreaId = message.SubAreaId; Data = MapsManager.FromId(message.MapId); var subArea = ObjectDataManager.Instance.Get <SubArea>(SubAreaId); var mapName = FastD2IReader.Instance.GetText(ObjectDataManager.Instance.Get <Area>(subArea.AreaId).NameId); var subAreaName = FastD2IReader.Instance.GetText(subArea.NameId); Position = $"[{X}, {Y}]"; Zone = $"{mapName} ({subAreaName})"; Entities.Clear(); Monsters.Clear(); Npcs.Clear(); Players.Clear(); Resources.Clear(); AddActors(message.Actors); StatedElements.Clear(); //Populate the StateElements with new ones received. //StatesElements are the elements which our current bot in theory can harvest. foreach (var statedElement in message.StatedElements) { if (!StatedElements.ContainsKey(statedElement.ElementId)) { StatedElements.Add(statedElement.ElementId, new StatedElement(statedElement.ElementCellId, (uint)statedElement.ElementId, statedElement.ElementState)); } } InteractiveElements.Clear(); Doors.Clear(); //populate the interactiveElements which are essencially items that we can interact with. Their location is hardcoded into the map.layer foreach (var interactiveElement in message.InteractiveElements) { if (!InteractiveElements.ContainsKey(interactiveElement.ElementId)) { InteractiveElements.Add(interactiveElement.ElementId, new InteractiveElement((uint)interactiveElement.ElementId, interactiveElement.ElementTypeId, interactiveElement.EnabledSkills, interactiveElement.DisabledSkills)); } } } UpdateMapControl(); OnMapChanged(); }
private void HandleMapComplementaryInformationsDataMessage(IAccount account, MapComplementaryInformationsDataMessage message) { lock (CheckLock) { SubAreaId = message.SubAreaId; Data = MapsManager.FromId(message.MapId); var subArea = ObjectDataManager.Instance.Get <SubArea>(SubAreaId); var mapName = FastD2IReader.Instance.GetText(ObjectDataManager.Instance.Get <Area>(subArea.AreaId).NameId); var subAreaName = FastD2IReader.Instance.GetText(subArea.NameId); Position = $"[{X}, {Y}]"; Zone = $"{mapName} ({subAreaName})"; Entities.Clear(); Monsters.Clear(); Npcs.Clear(); Players.Clear(); AddActors(message.Actors); StatedElements.Clear(); foreach (var statedElementDofus in message.StatedElements) { if (!StatedElements.ContainsKey(statedElementDofus.ElementId) && statedElementDofus.OnCurrentMap) { StatedElements.Add(statedElementDofus.ElementId, new StatedElement(statedElementDofus.ElementCellId, (uint)statedElementDofus.ElementId, statedElementDofus.ElementState)); } } InteractiveElements.Clear(); Doors.Clear(); foreach (var element in message.InteractiveElements) { if (!element.OnCurrentMap) { continue; } InteractiveElements.Add(element.ElementId, new InteractiveElement((uint)element.ElementId, element.ElementTypeId, element.EnabledSkills.ToList(), element.DisabledSkills.ToList())); var interactiveElement = element; var listDoorSkillId = new List <int>(new[] { 184, 183, 187, 198, 114 }); var listDoorTypeId = new List <int>(new[] { -1, 128, 168, 16 }); if (!listDoorTypeId.Contains(interactiveElement.ElementTypeId) || interactiveElement.EnabledSkills.Count <= 0 || !listDoorSkillId.Contains((int)interactiveElement.EnabledSkills[0].SkillId)) { continue; } foreach (var layer in ((API.Gamedata.D2p.Map)Data).Layers) { foreach (var cell in layer.Cells) { foreach (var layerElement in cell.Elements) { if (layerElement is GraphicalElement graphicalElement) { if (graphicalElement.Identifier == interactiveElement.ElementId && !Doors.ContainsKey(cell.CellId)) { Doors.Add(cell.CellId, new InteractiveElement((uint)element.ElementId, element.ElementTypeId, element.EnabledSkills.ToList(), element.DisabledSkills.ToList())); } } } } } } } UpdateMapControl(); OnMapChanged(); }