def react_to_tension(life, life_id): if brain.knows_alife_by_id(life, life_id)['alignment'] in ['hostile']: return False if life['group'] and not groups.is_leader( life, life['group'], life['id']) and groups.get_leader( life, life['group']): if sight.can_see_target(life, groups.get_leader( life, life['group'])) and sight.can_see_target( LIFE[life_id], groups.get_leader(life, life['group'])): return False _disarm = brain.get_alife_flag(life, life_id, 'disarm') if _disarm: #For now... if not sight.can_see_position(life, LIFE[life_id]['pos']): groups.announce(life, life['group'], 'attacked_by_hostile', filter_if=lambda life_id: brain.knows_alife_by_id( life, life_id)['last_seen_time'] <= 30, target_id=life_id) return False for item_uid in lfe.get_all_visible_items(LIFE[life_id]): if ITEMS[item_uid]['type'] == 'gun': break else: brain.unflag_alife(life, life_id, 'disarm') speech.start_dialog(life, life_id, 'clear_drop_weapon') return False _time_elapsed = WORLD_INFO['ticks'] - _disarm if _time_elapsed > 135 and not speech.has_sent(life, life_id, 'threaten'): speech.start_dialog(life, life_id, 'threaten') speech.send(life, life_id, 'threaten') elif _time_elapsed > 185: speech.start_dialog(life, life_id, 'establish_hostile') elif not speech.has_sent(life, life_id, 'confront'): speech.start_dialog(life, life_id, 'confront') speech.send(life, life_id, 'confront')
def react_to_tension(life, life_id): if brain.knows_alife_by_id(life, life_id)['alignment'] in ['hostile']: return False if life['group'] and not groups.is_leader(life, life['group'], life['id']) and groups.get_leader(life, life['group']): if sight.can_see_target(life, groups.get_leader(life, life['group'])) and sight.can_see_target(LIFE[life_id], groups.get_leader(life, life['group'])): return False _disarm = brain.get_alife_flag(life, life_id, 'disarm') if _disarm: #For now... if not sight.can_see_position(life, LIFE[life_id]['pos']): groups.announce(life, life['group'], 'attacked_by_hostile', filter_if=lambda life_id: brain.knows_alife_by_id(life, life_id)['last_seen_time']<=30, target_id=life_id) return False for item_uid in lfe.get_all_visible_items(LIFE[life_id]): if ITEMS[item_uid]['type'] == 'gun': break else: brain.unflag_alife(life, life_id, 'disarm') speech.start_dialog(life, life_id, 'clear_drop_weapon') return False _time_elapsed = WORLD_INFO['ticks']-_disarm if _time_elapsed>135 and not speech.has_sent(life, life_id, 'threaten'): speech.start_dialog(life, life_id, 'threaten') speech.send(life, life_id, 'threaten') elif _time_elapsed>185: speech.start_dialog(life, life_id, 'establish_hostile') elif not speech.has_sent(life, life_id, 'confront'): speech.start_dialog(life, life_id, 'confront') speech.send(life, life_id, 'confront')
def desires_first_contact_with(life, life_id): #print life['name'], LIFE[life_id]['name'],brain.knows_alife_by_id(life, life_id)['alignment'] if not brain.knows_alife_by_id(life, life_id)['alignment'] == 'neutral': return False if life['group'] and not groups.is_leader(life, life['group'], life['id']): #Don't talk if we're in a group and near our leader. #TODO: #judgement Even then, we should consider having group members avoid non-members regardless. #TODO: #judgement How do group types play into this? _leader = brain.knows_alife_by_id(life, groups.get_leader(life, life['group'])) if _leader: #TODO: #judgement Placeholder for future logic. if numbers.distance(life['pos'], _leader['life']['pos']) < 100: return False if life['stats']['motive_for_crime']>=4: return True if life['stats']['sociability']>=6: return True return False
def desires_first_contact_with(life, life_id): #print life['name'], LIFE[life_id]['name'],brain.knows_alife_by_id(life, life_id)['alignment'] if not brain.knows_alife_by_id(life, life_id)['alignment'] == 'neutral': return False if life['group'] and not groups.is_leader(life, life['group'], life['id']): #Don't talk if we're in a group and near our leader. #TODO: #judgement Even then, we should consider having group members avoid non-members regardless. #TODO: #judgement How do group types play into this? _leader = brain.knows_alife_by_id( life, groups.get_leader(life, life['group'])) if _leader: #TODO: #judgement Placeholder for future logic. if numbers.distance(life['pos'], _leader['life']['pos']) < 100: return False if life['stats']['motive_for_crime'] >= 4: return True if life['stats']['sociability'] >= 6: return True return False