コード例 #1
0
ファイル: references.py プロジェクト: hovatterz/Reactor-3
def path_along_reference(life, ref_type):
    _best_reference = _find_best_unknown_reference(life, ref_type)["reference"]

    if not _best_reference:
        print "NO BEST", ref_type
        return False

    _starting_chunk_key = find_nearest_key_in_reference(life, _best_reference)
    _chunk_path_keys = []
    _directions = {}

    for neighbor_key in mapgen.get_neighbors_of_type(WORLD_INFO, _starting_chunk_key, ref_type, diagonal=True):
        if maps.get_chunk(neighbor_key) == lfe.get_current_chunk(life):
            continue

        _neighbor_pos = [int(val) + (WORLD_INFO["chunk_size"] / 2) for val in neighbor_key.split(",")]
        _cent = (
            lfe.get_current_chunk(life)["pos"][0] + (WORLD_INFO["chunk_size"] / 2),
            lfe.get_current_chunk(life)["pos"][1] + (WORLD_INFO["chunk_size"] / 2),
        )
        _neighbor_direction = numbers.direction_to(_cent, _neighbor_pos)
        _directions[_neighbor_direction] = {"key": neighbor_key, "score": 9999}

    _best_dir = {"dir": -1, "score": 0}
    for mod in range(-45, 361, 45):
        _new_dir = life["discover_direction"] + mod

        if _new_dir >= 360:
            _new_dir -= 360

        if _new_dir in _directions:
            _score = 0

            if _directions[_new_dir]["key"] in life["known_chunks"]:
                continue

            _score += (180 - (abs(_new_dir - life["discover_direction"]))) / 45
            _score += life["discover_direction_history"].count(_new_dir)

            if _score >= _best_dir["score"]:
                if _score == _best_dir["score"]:
                    _chunk = maps.get_chunk(_directions[_new_dir]["key"])

                _best_dir["dir"] = _new_dir
                _best_dir["score"] = _score

    if _best_dir["dir"] == -1:
        return None

        # print _best_dir,_directions[_best_dir['dir']]

    life["discover_direction_history"].append(life["discover_direction"])
    if len(life["discover_direction_history"]) >= 5:
        life["discover_direction_history"].pop(0)

    life["discover_direction"] = _best_dir["dir"]
    return _directions[_best_dir["dir"]]["key"]
コード例 #2
0
ファイル: references.py プロジェクト: penny64/Reactor-3
def path_along_reference(life, ref_type):
	_reference = WORLD_INFO['references'][WORLD_INFO['reference_map']['roads'][0]]
	_visible_chunks = alife.brain.get_flag(life, 'visible_chunks')
	_starting_chunk_key = alife.chunks.get_nearest_chunk_in_list(life['pos'], _reference, check_these_chunks_first=_visible_chunks)
	_chunk_path_keys = []
	_directions = {}
	
	for neighbor_key in mapgen.get_neighbors_of_type(WORLD_INFO, _starting_chunk_key, ref_type, diagonal=True):
		if maps.get_chunk(neighbor_key) == lfe.get_current_chunk(life):
			continue
		
		_neighbor_pos = [int(val)+(WORLD_INFO['chunk_size']/2) for val in neighbor_key.split(',')]
		_cent = (lfe.get_current_chunk(life)['pos'][0]+(WORLD_INFO['chunk_size']/2),
			lfe.get_current_chunk(life)['pos'][1]+(WORLD_INFO['chunk_size']/2))
		_neighbor_direction = numbers.direction_to(_cent, _neighbor_pos)
		_directions[_neighbor_direction] = {'key': neighbor_key, 'score': 9999}
	
	_best_dir = {'dir': -1, 'score': 0}
	for mod in range(-45, 361, 45):
		_new_dir = life['discover_direction']+mod
		
		if _new_dir>=360:
			_new_dir -= 360
		
		if _new_dir in _directions:
			_score = 0
			
			if _directions[_new_dir]['key'] in life['known_chunks']:
				continue
			
			_score += (180-(abs(_new_dir-life['discover_direction'])))/45
			_score += life['discover_direction_history'].count(_new_dir)
			
			if _score>=_best_dir['score']:
				if _score==_best_dir['score']:
					_chunk = maps.get_chunk(_directions[_new_dir]['key'])
				
				_best_dir['dir'] = _new_dir
				_best_dir['score'] = _score

	if _best_dir['dir'] == -1:
		return None
	
	#print _best_dir,_directions[_best_dir['dir']]
	
	life['discover_direction_history'].append(life['discover_direction'])
	if len(life['discover_direction_history'])>=5:
		life['discover_direction_history'].pop(0)
	
	life['discover_direction'] = _best_dir['dir']
	return _directions[_best_dir['dir']]['key']
コード例 #3
0
ファイル: references.py プロジェクト: hovatterz/Reactor-3
def _find_nearest_reference(life, ref_type, skip_current=False, skip_known=False, skip_unknown=False, ignore_array=[]):
    _lowest = {"chunk_key": None, "reference": None, "distance": -1}

    for reference in WORLD_INFO["reference_map"][ref_type]:
        if reference in ignore_array:
            continue

        _nearest_key = find_nearest_key_in_reference(life, reference)

        if skip_current and maps.get_chunk(_nearest_key) == lfe.get_current_chunk(life):
            continue

        if skip_known and _nearest_key in life["known_chunks"]:
            continue

        if skip_unknown and not _nearest_key in life["known_chunks"]:
            continue

        _center = [int(val) + (WORLD_INFO["chunk_size"] / 2) for val in _nearest_key.split(",")]
        _distance = numbers.distance(life["pos"], _center)

        if not _lowest["chunk_key"] or _distance < _lowest["distance"]:
            _lowest["distance"] = _distance
            _lowest["chunk_key"] = _nearest_key
            _lowest["reference"] = reference

    return _lowest
コード例 #4
0
ファイル: references.py プロジェクト: penny64/Reactor-3
def _find_nearest_reference(life, ref_type, skip_current=False, skip_known=False, skip_unknown=False, ignore_array=[]):
	_lowest = {'chunk_key': None, 'reference': None, 'distance': -1}
	
	for reference in WORLD_INFO['reference_map'][ref_type]:
		if reference in ignore_array:
			continue
		
		_nearest_key = find_nearest_key_in_reference(life, reference)

		if skip_current and maps.get_chunk(_nearest_key) == lfe.get_current_chunk(life):
			continue
			
		if skip_known and _nearest_key in life['known_chunks']:
			continue

		if skip_unknown and not _nearest_key in life['known_chunks']:
			continue

		_center = [int(val)+(WORLD_INFO['chunk_size']/2) for val in _nearest_key.split(',')]
		_distance = numbers.distance(life['pos'], _center)
		
		if not _lowest['chunk_key'] or _distance<_lowest['distance']:
			_lowest['distance'] = _distance
			_lowest['chunk_key'] = _nearest_key
			_lowest['reference'] = reference
	
	return _lowest
コード例 #5
0
ファイル: groups.py プロジェクト: flags/Reactor-3
def get_jobs(life, group_id):
	_group = get_group(life, group_id)
	_jobs = []
	_leader = LIFE[_group['leader']]
	
	if not has_camp(group_id):
		_nearest_camp = camps.get_nearest_known_camp(_leader)
		
		if _leader['known_camps']:
			_j = jobs.create_job(_leader, 'Raid', gist='start_raid', description='Raid camp %s.' % _nearest_camp['id'])
			_pos = lfe.get_current_chunk(_leader)['pos']
			_chunk_key = lfe.get_current_chunk_id(_leader)
		
			jobs.add_task(_j, '0', 'announce_to_group',
			              action.make_small_script(function='announce_to_group',
			                                       kwargs={'group_id': group_id,
			                                               'gist': 'announce_group_job',
			                                               'message': jobs.get_job(_j)['description'],
			                                               'job_id': _j}),
			              player_action=action.make_small_script(function='always'),
			              description='Gather group members.')
			jobs.add_task(_j, '1', 'move_to_chunk',
			              action.make_small_script(function='travel_to_position',
			                                       kwargs={'pos': _pos}),
			              player_action=action.make_small_script(function='is_in_chunk',
	                                           kwargs={'chunk_key': _chunk_key}),
			              description='Travel to position %s, %s' % (_pos[0], _pos[1]),
				          delete_on_finish=False)
			jobs.add_task(_j, '2', 'wait_for_number_of_group_members_in_chunk',
			              action.make_small_script(function='number_of_alife_in_chunk_matching',
			                                       kwargs={'amount': 2,
			                                               'chunk_key': _chunk_key,
			                                               'matching': {'group': _leader['group']}}),
			              description='Wait until everyone arrives.')
			#jobs.add_task(_j, '3', 'talk',
			#              action.make_small_script(function='travel_to_position',
			#                                       kwargs={'pos': chunks.get_nearest_chunk_in_list(_leader['pos'], camps.get_camp(_nearest_camp['id'])['reference'])}),
			#              requires=['1'],
			#              delete_on_finish=False)
			
			_jobs.append(_j)
	
	if len(_leader['known_groups'])>1:
		_lowest = {'score': 0, 'group': None}
		for group_id in [g for g in _leader['known_groups'] if not g==_leader['group']]:
			_score = judgement.judge_group(_leader, group_id)
			
			if not _lowest['group'] or _score < _lowest['score']:
				_lowest['score'] = _score
				_lowest['group'] = group_id
			
		
		print 'RAID', _lowest
	else:
		print 'ony one'
	
	return _jobs
コード例 #6
0
def get_jobs(life, group_id):
    _group = get_group(life, group_id)
    _jobs = []
    _leader = LIFE[_group['leader']]

    if not has_camp(group_id):
        _nearest_camp = camps.get_nearest_known_camp(_leader)

        if _leader['known_camps']:
            _j = jobs.create_job(_leader,
                                 'Raid',
                                 gist='start_raid',
                                 description='Raid camp %s.' %
                                 _nearest_camp['id'])
            _pos = lfe.get_current_chunk(_leader)['pos']
            _chunk_key = lfe.get_current_chunk_id(_leader)

            jobs.add_task(
                _j,
                '0',
                'announce_to_group',
                action.make_small_script(function='announce_to_group',
                                         kwargs={
                                             'group_id':
                                             group_id,
                                             'gist':
                                             'announce_group_job',
                                             'message':
                                             jobs.get_job(_j)['description'],
                                             'job_id':
                                             _j
                                         }),
                player_action=action.make_small_script(function='always'),
                description='Gather group members.')
            jobs.add_task(
                _j,
                '1',
                'move_to_chunk',
                action.make_small_script(function='travel_to_position',
                                         kwargs={'pos': _pos}),
                player_action=action.make_small_script(
                    function='is_in_chunk', kwargs={'chunk_key': _chunk_key}),
                description='Travel to position %s, %s' % (_pos[0], _pos[1]),
                delete_on_finish=False)
            jobs.add_task(_j,
                          '2',
                          'wait_for_number_of_group_members_in_chunk',
                          action.make_small_script(
                              function='number_of_alife_in_chunk_matching',
                              kwargs={
                                  'amount': 2,
                                  'chunk_key': _chunk_key,
                                  'matching': {
                                      'group': _leader['group']
                                  }
                              }),
                          description='Wait until everyone arrives.')
            #jobs.add_task(_j, '3', 'talk',
            #              action.make_small_script(function='travel_to_position',
            #                                       kwargs={'pos': chunks.get_nearest_chunk_in_list(_leader['pos'], camps.get_camp(_nearest_camp['id'])['reference'])}),
            #              requires=['1'],
            #              delete_on_finish=False)

            _jobs.append(_j)

    if len(_leader['known_groups']) > 1:
        _lowest = {'score': 0, 'group': None}
        for group_id in [
                g for g in _leader['known_groups'] if not g == _leader['group']
        ]:
            _score = judgement.judge_group(_leader, group_id)

            if not _lowest['group'] or _score < _lowest['score']:
                _lowest['score'] = _score
                _lowest['group'] = group_id

        print 'RAID', _lowest
    else:
        print 'ony one'

    return _jobs