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)
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'
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)
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)
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)
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'