Beispiel #1
0
def manage_territory(life, group_id):
	_shelter = get_shelter(life, group_id)
	
	if not _shelter:
		return False
	
	_shelter_chunk = chunks.get_nearest_chunk_in_list(life['pos'], references.get_reference(_shelter))
	
	for known_group_id in life['known_groups']:
		if group_id == known_group_id:
			continue
		
		_opposing_shelter = get_possible_group_location(life, known_group_id)
		if not _opposing_shelter:
			continue
		
		_distance = chunks.get_distance_to_nearest_chunk_in_list(WORLD_INFO['chunk_map'][_shelter_chunk]['pos'], references.get_reference(_opposing_shelter))
		
		if _distance<=30:
			print '2 CLOSE 2 HANDLE'
	
	for seen_life_id in life['seen']:
		_target = brain.knows_alife_by_id(life, seen_life_id)
		
		if not _target or _target['alignment'] == 'trust' or not _target['last_seen_at'] or _target['dead']:
			continue
		
		if chunks.get_distance_to_nearest_chunk_in_list(_target['last_seen_at'], references.get_reference(_shelter))>30:
			continue
		
		print 'L@@K'* 20
		print life['name'], LIFE[seen_life_id]['name'], _target['alignment']
		
		memory.create_question(life, seen_life_id, 'territory_violation', ignore_if_said_in_last=-1)
Beispiel #2
0
def manage_territory(life, group_id):
    if get_stage(life, group_id) == STAGE_ATTACKING:
        return False

    _shelter = get_shelter(life, group_id)

    if not _shelter:
        return False

    _shelter_chunk = chunks.get_nearest_chunk_in_list(
        life['pos'],
        factions.get_territory(_shelter)['chunk_keys'])

    for known_group_id in life['known_groups']:
        if group_id == known_group_id:
            continue

        _opposing_shelter = get_possible_group_location(life, known_group_id)
        if not _opposing_shelter:
            continue

        _distance = chunks.get_distance_to_nearest_chunk_in_list(
            WORLD_INFO['chunk_map'][_shelter_chunk]['pos'],
            factions.get_territory(_opposing_shelter)['chunk_keys'])

        if _distance <= 30:
            print '2 CLOSE 2 HANDLE'
Beispiel #3
0
def fight_or_flight(life, group_id, target_group_id):
	_distance = chunks.get_distance_to_nearest_chunk_in_list(life['pos'], references.get_reference(get_shelter(life, target_group_id)))
	
	if is_combat_ready(life, group_id):
		stats.declare_group_hostile(life, target_group_id)
	elif _distance<=100:
		stats.declare_group_scared(life, target_group_id)
	else:
		prepare_for_raid(life, group_id)
Beispiel #4
0
def fight_or_flight(life, group_id, target_group_id):
    _distance = chunks.get_distance_to_nearest_chunk_in_list(
        life['pos'],
        references.get_reference(get_shelter(life, target_group_id)))

    if is_combat_ready(life, group_id):
        stats.declare_group_hostile(life, target_group_id)
    elif _distance <= 100:
        stats.declare_group_scared(life, target_group_id)
    else:
        prepare_for_raid(life, group_id)
Beispiel #5
0
def manage_combat(life, group_id):
	if get_stage(life, group_id) == STAGE_RAIDING:
		prepare_for_raid(life, group_id)
		return False
	
	for known_group_id in life['known_groups']:
		if group_id == known_group_id:
			continue
		
		if get_group_memory(life, known_group_id, 'alignment') == 'neutral':
			_known_group_members = get_group_memory(life, known_group_id, 'members')
			
			announce(life, group_id, 'inform_of_known_group', group_id=known_group_id,
			         filter_if=lambda alife: group_exists(alife, known_group_id))
			
			if _known_group_members:
				update_group_memory(life, known_group_id, 'shelter', get_possible_group_location(life, known_group_id))
				
				_people_to_ask_about = []
				for member in _known_group_members:
					_target = brain.knows_alife_by_id(life, member)
					
					if not _target['last_seen_at'] or not _target['state'] in ['idle', 'shelter']:
						continue
					
					_people_to_ask_about.append(member)
				
				if get_group_memory(life, known_group_id, 'shelter'):
					fight_or_flight(life, group_id, known_group_id)
				elif _people_to_ask_about:
					announce(life, group_id, 'last_seen_target', target_id=random.choice(_people_to_ask_about))
				else:
					print 'Nobody to ask about group location'
					print 'LOST' * 100
		
		elif get_group_memory(life, known_group_id, 'alignment') == 'scared':
			_known_group_shelter = get_group(life, known_group_id)['shelter']
			
			if not _known_group_shelter:
				print 'FREE-FLOATING ANXIETY'
				continue
			
			_distance = chunks.get_distance_to_nearest_chunk_in_list(life['pos'], references.get_reference(_known_group_shelter))
			
			if get_stage(life, group_id) >= STAGE_SETTLED:
				if _distance<=100:
					set_stage(life, group_id, STAGE_SETTLING)
					set_shelter(life, group_id, None)
Beispiel #6
0
def manage_territory(life, group_id):
	if get_stage(life, group_id) == STAGE_ATTACKING:
		return False
	
	_shelter = get_shelter(life, group_id)
	
	if not _shelter:
		return False
	
	_shelter_chunk = chunks.get_nearest_chunk_in_list(life['pos'], factions.get_territory(_shelter)['chunk_keys'])
	
	for known_group_id in life['known_groups']:
		if group_id == known_group_id:
			continue
		
		_opposing_shelter = get_possible_group_location(life, known_group_id)
		if not _opposing_shelter:
			continue
		
		_distance = chunks.get_distance_to_nearest_chunk_in_list(WORLD_INFO['chunk_map'][_shelter_chunk]['pos'], factions.get_territory(_opposing_shelter)['chunk_keys'])
		
		if _distance<=30:
			print '2 CLOSE 2 HANDLE'