NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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