ballparks.py (4995B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\utility\ballparks.py 2 import evetypes 3 from eveexceptions import UserError 4 from inventorycommon.const import categoryShip 5 try: 6 import geo2 7 except ImportError: 8 geo2 = None 9 10 def check_ball_released(ball, raises = ReferenceError): 11 if ball.broker is None: 12 raise raises 13 14 15 def get_ball_position(task, ball_id): 16 ball = task.context.ballpark.balls[ball_id] 17 return (ball.x, ball.y, ball.z) 18 19 20 def get_ball_positions(task, ball_ids): 21 return [ get_ball_position(task, ball_id) for ball_id in ball_ids if is_ball_in_park(task, ball_id) and not is_ball_cloaked(task, ball_id) ] 22 23 24 def get_ball_warp_to_position(task, ball_id): 25 try: 26 ball = get_ball(task, ball_id) 27 return (ball.gotoX, ball.gotoY, ball.gotoZ) 28 except (UserError, RuntimeError): 29 return None 30 31 32 def is_ball_in_park(task, ball_id): 33 return ball_id in task.context.ballpark.balls 34 35 36 def is_ball_in_range(task, ball1_id, ball2_id, required_range): 37 distance = get_distance_between(task, ball1_id, ball2_id) 38 if distance is not None and distance <= required_range: 39 return True 40 return False 41 42 43 def get_distance_between(task, ball1_id, ball2_id): 44 return task.context.ballpark.GetSurfaceDist(ball1_id, ball2_id) 45 46 47 def is_coordinate_in_range(task, coordinate, required_range): 48 my_coordinate = get_ball_position(task, task.context.myBall.id) 49 distance = geo2.Vec3DistanceD(coordinate, my_coordinate) 50 return distance <= required_range 51 52 53 def is_coordinate_in_range_of_ball(task, ball_id, coordinates, required_range): 54 ball_coordinate = get_ball_position(task, ball_id) 55 distance = geo2.Vec3DistanceD(ball_coordinate, coordinates) 56 return distance <= required_range 57 58 59 def get_item_owner(task, item_id): 60 slim_item = task.context.ballpark.slims.get(item_id) 61 if slim_item is None: 62 return 63 return slim_item.ownerID 64 65 66 def is_ball_cloaked(task, ball_id): 67 is_cloaked = False 68 try: 69 is_cloaked = task.context.ballpark.IsCloaked(ball_id) 70 except (UserError, RuntimeError): 71 pass 72 73 return is_cloaked 74 75 76 def get_ball(task, ball_id): 77 return task.context.ballpark.GetBall(ball_id) 78 79 80 def get_balls_in_bubble(task, bubble_id): 81 return task.context.ballpark.bubbles.get(bubble_id) 82 83 84 def get_ship_balls_in_bubble(task, bubble_id): 85 return task.context.ballpark.GetShipsInBubble(bubble_id) 86 87 88 def get_slim_item(task, ball_id): 89 return task.context.ballpark.GetSlimItem(ball_id) 90 91 92 def get_ball_type_id(task, ball_id): 93 slim_item = get_slim_item(task, ball_id) 94 if slim_item is not None: 95 return slim_item.typeID 96 97 98 def get_my_position(task): 99 return (task.context.myBall.x, task.context.myBall.y, task.context.myBall.z) 100 101 102 def is_invulnerable(task, item_id): 103 return task.context.ballpark.IsInvulnerable(item_id) 104 105 106 def is_target_valid(task, target_id, target_list = None, required_types = None, requires_groups = None, required_categories = None): 107 if target_id is None: 108 return False 109 slim_item = get_slim_item(task, target_id) 110 if slim_item is None: 111 return False 112 elif target_list is not None and target_id not in target_list: 113 return False 114 elif required_types and slim_item.typeID not in required_types: 115 return False 116 elif requires_groups and slim_item.groupID not in requires_groups: 117 return False 118 elif required_categories and slim_item.categoryID not in required_categories: 119 return False 120 elif is_ball_cloaked(task, target_id): 121 return False 122 else: 123 return True 124 125 126 def is_ship(task, item_id): 127 slim_item = get_slim_item(task, item_id) 128 return slim_item is not None and slim_item.categoryID == categoryShip 129 130 131 def get_specific_globals(task, type_id = None, group_id = None, category_id = None): 132 specific_globals = {} 133 if type_id is None and group_id is None and category_id is None: 134 return specific_globals 135 for global_ball_id, ball in task.context.ballpark.globals.iteritems(): 136 slim_item = get_slim_item(task, global_ball_id) 137 if slim_item.typeID == type_id or slim_item.groupID == group_id or slim_item.categoryID == category_id: 138 specific_globals[global_ball_id] = ball 139 140 return specific_globals 141 142 143 def get_id_and_types_in_bubble_by_typelist(ballpark, bubble_id, type_list_id): 144 balls_of_interest = [] 145 balls_in_bubble = ballpark.bubbles.get(bubble_id) 146 if not balls_in_bubble: 147 return balls_of_interest 148 get_slim = ballpark.slims.get 149 types_of_interest = evetypes.GetTypeIDsByListID(type_list_id) 150 for ball_id in balls_in_bubble.keys(): 151 if not ballpark.HasBall(ball_id): 152 continue 153 slim_item = get_slim(ball_id) 154 if slim_item is None: 155 continue 156 if slim_item.typeID in types_of_interest: 157 balls_of_interest.append((ball_id, slim_item.typeID)) 158 159 return balls_of_interest