示例#1
0
def make_target_surrender(entity):
    _last_seen_at = entity['ai']['life_memory'][
        entity['ai']['nearest_target']]['last_seen_at']

    movement.walk_to_position(entity, _last_seen_at[0], _last_seen_at[1],
                              zones.get_active_astar_map(),
                              zones.get_active_weight_map())
示例#2
0
def _search_for_target(entity, target_id):
    _nodes = flags.get_flag(entity, 'search_nodes')

    if not _nodes:
        flags.delete_flag(entity, 'search_nodes')

        entities.trigger_event(entity,
                               'target_search_failed',
                               target_id=target_id)

        return

    _node_list = _nodes.keys()
    _node_list.sort()
    _node_x, _node_y = _nodes[_node_list[0]][0]
    _distance = numbers.distance(movement.get_position(entity),
                                 (_node_x, _node_y))

    if _distance <= 15 and life.can_see_position(entity, (_node_x, _node_y)):
        _nodes[_node_list[0]].remove((_node_x, _node_y))

        if not _nodes[_node_list[0]]:
            del _nodes[_node_list[0]]
    else:
        movement.walk_to_position(entity, _node_x, _node_y,
                                  zones.get_active_astar_map(),
                                  zones.get_active_weight_map())
示例#3
0
def handle_raid(entity, camp_id):
    entity['movement']['override_speed'] = 2  #60 * 1

    ai_factions.FACTIONS[entity['faction']]['money'] -= get_attack_cost(
        entity, camp_id)

    movement.walk_to_position(entity, camp_id[0], camp_id[1],
                              zones.get_active_astar_map(),
                              zones.get_active_weight_map())
示例#4
0
def find_cover(entity):
	_squad = entities.get_entity(ai_factions.FACTIONS[entity['ai']['faction']]['squads'][entity['ai']['squad']])
	_cover_position = ai_squad_director.get_cover_position(_squad, entity['_id'])
	
	if not _cover_position or not numbers.distance(movement.get_position(entity), _cover_position):
		entities.trigger_event(entity, 'finish_turn')
	
		return
	
	movement.walk_to_position(entity, _cover_position[0], _cover_position[1], zones.get_active_astar_map(), zones.get_active_weight_map())
示例#5
0
def find_push_position(entity):
	_squad = entities.get_entity(ai_factions.FACTIONS[entity['ai']['faction']]['squads'][entity['ai']['squad']])
	_x, _y = movement.get_position(entity)
	_push_position = ai_squad_director.get_push_position(_squad, entity['_id'])
	
	if not _push_position:
		return
	
	#if not numbers.distance((_x, _y), _push_position) and not entity['ai']['visible_targets']:
	#	entity['ai']['meta']['has_lost_target'] = True
	
	movement.walk_to_position(entity, _push_position[0], _push_position[1], zones.get_active_astar_map(), zones.get_active_weight_map())
示例#6
0
def find_cover(entity):
    _squad = entities.get_entity(ai_factions.FACTIONS[entity['ai']['faction']]
                                 ['squads'][entity['ai']['squad']])
    _cover_position = ai_squad_director.get_cover_position(
        _squad, entity['_id'])

    if not _cover_position or not numbers.distance(
            movement.get_position(entity), _cover_position):
        entities.trigger_event(entity, 'finish_turn')

        return

    movement.walk_to_position(entity, _cover_position[0], _cover_position[1],
                              zones.get_active_astar_map(),
                              zones.get_active_weight_map())
示例#7
0
def find_push_position(entity):
    _squad = entities.get_entity(ai_factions.FACTIONS[entity['ai']['faction']]
                                 ['squads'][entity['ai']['squad']])
    _x, _y = movement.get_position(entity)
    _push_position = ai_squad_director.get_push_position(_squad, entity['_id'])

    if not _push_position:
        return

    #if not numbers.distance((_x, _y), _push_position) and not entity['ai']['visible_targets']:
    #	entity['ai']['meta']['has_lost_target'] = True

    movement.walk_to_position(entity, _push_position[0], _push_position[1],
                              zones.get_active_astar_map(),
                              zones.get_active_weight_map())
示例#8
0
def handle_movement_order(x, y):
	global WALK_PATH, WALK_DEST
	
	if not is_squad_member_selected() or (x, y) in zones.get_active_solids({}, ignore_calling_entity=True):
		return False
	
	_entity = get_selected_squad_member()
	
	movement.walk_to_position(_entity, x, y, zones.get_active_astar_map(), zones.get_active_weight_map())
	
	WALK_PATH = _entity['movement']['path']['positions']
	WALK_DEST = _entity['movement']['path']['destination']
	
	settings.set_tick_mode('normal')
	
	return True
示例#9
0
def _get_item(entity, item_id, hold=False, weight=None):
	_item = entities.get_entity(item_id)
	_x, _y = movement.get_position(_item)
	_distance = numbers.distance(movement.get_position(entity), (_x, _y))
	
	if weight:
		ai.set_meta_weight(entity, weight, 10*numbers.clip(_distance/30.0, 0, 1))
	
	if _distance:
		movement.walk_to_position(entity, _x, _y, zones.get_active_astar_map(), zones.get_active_weight_map(), smp=True)
	
	else:
		if hold:
			life.get_and_hold_item(entity, item_id)
		else:
			life.get_and_store_item(entity, item_id)
示例#10
0
def find_melee_position(entity):
	_target = entity['ai']['nearest_target']
	_x, _y = entity['ai']['life_memory'][_target]['last_seen_at']
	_closest_pos = {'pos': None, 'distance': 0}
	_solids = zones.get_active_solids(entity, ignore_entities=[_target])
	
	for x, y in [(_x-1, _y), (_x+1, _y), (_x, _y-1), (_x, _y+1), (_x-1, _y-1), (_x+1, _y-1), (_x-1, _y+1), (_x+1, _y+1)]:
		if (x, y) in _solids:
			continue
		
		_distance = numbers.distance(movement.get_position(entity), (x, y))
		
		if not _closest_pos['pos'] or _distance < _closest_pos['distance']:
			_closest_pos['distance'] = _distance
			_closest_pos['pos'] = (x, y)
	
	movement.walk_to_position(entity, _closest_pos['pos'][0], _closest_pos['pos'][1], zones.get_active_astar_map(), zones.get_active_weight_map())
示例#11
0
def handle_movement_order(x, y):
    global WALK_PATH, WALK_DEST

    if not is_squad_member_selected() or (x, y) in zones.get_active_solids(
        {}, ignore_calling_entity=True):
        return False

    _entity = get_selected_squad_member()

    movement.walk_to_position(_entity, x, y, zones.get_active_astar_map(),
                              zones.get_active_weight_map())

    WALK_PATH = _entity['movement']['path']['positions']
    WALK_DEST = _entity['movement']['path']['destination']

    settings.set_tick_mode('normal')

    return True
示例#12
0
def _search_for_target(entity, target_id):
	_nodes = flags.get_flag(entity, 'search_nodes')
	
	if not _nodes:
		flags.delete_flag(entity, 'search_nodes')
		
		entities.trigger_event(entity, 'target_search_failed', target_id=target_id)
		
		return
	
	_node_list = _nodes.keys()
	_node_list.sort()	
	_node_x, _node_y = _nodes[_node_list[0]][0]
	_distance = numbers.distance(movement.get_position(entity), (_node_x, _node_y))
	
	if _distance <= 15 and life.can_see_position(entity, (_node_x, _node_y)):
		_nodes[_node_list[0]].remove((_node_x, _node_y))
		
		if not _nodes[_node_list[0]]:
			del _nodes[_node_list[0]]
	else:
		movement.walk_to_position(entity, _node_x, _node_y, zones.get_active_astar_map(), zones.get_active_weight_map())
示例#13
0
def _get_item(entity, item_id, hold=False, weight=None):
    _item = entities.get_entity(item_id)
    _x, _y = movement.get_position(_item)
    _distance = numbers.distance(movement.get_position(entity), (_x, _y))

    if weight:
        ai.set_meta_weight(entity, weight,
                           10 * numbers.clip(_distance / 30.0, 0, 1))

    if _distance:
        movement.walk_to_position(entity,
                                  _x,
                                  _y,
                                  zones.get_active_astar_map(),
                                  zones.get_active_weight_map(),
                                  smp=True)

    else:
        if hold:
            life.get_and_hold_item(entity, item_id)
        else:
            life.get_and_store_item(entity, item_id)
示例#14
0
def find_melee_position(entity):
    _target = entity['ai']['nearest_target']
    _x, _y = entity['ai']['life_memory'][_target]['last_seen_at']
    _closest_pos = {'pos': None, 'distance': 0}
    _solids = zones.get_active_solids(entity, ignore_entities=[_target])

    for x, y in [(_x - 1, _y), (_x + 1, _y), (_x, _y - 1), (_x, _y + 1),
                 (_x - 1, _y - 1), (_x + 1, _y - 1), (_x - 1, _y + 1),
                 (_x + 1, _y + 1)]:
        if (x, y) in _solids:
            continue

        _distance = numbers.distance(movement.get_position(entity), (x, y))

        if not _closest_pos['pos'] or _distance < _closest_pos['distance']:
            _closest_pos['distance'] = _distance
            _closest_pos['pos'] = (x, y)

    movement.walk_to_position(entity, _closest_pos['pos'][0],
                              _closest_pos['pos'][1],
                              zones.get_active_astar_map(),
                              zones.get_active_weight_map())
示例#15
0
def handle_raid(entity, camp_id):
	entity['movement']['override_speed'] = 2#60 * 1
	
	ai_factions.FACTIONS[entity['faction']]['money'] -= get_attack_cost(entity, camp_id)
	
	movement.walk_to_position(entity, camp_id[0], camp_id[1], zones.get_active_astar_map(), zones.get_active_weight_map())
示例#16
0
def make_target_surrender(entity):
    _last_seen_at = entity["ai"]["life_memory"][entity["ai"]["nearest_target"]]["last_seen_at"]

    movement.walk_to_position(
        entity, _last_seen_at[0], _last_seen_at[1], zones.get_active_astar_map(), zones.get_active_weight_map()
    )