def battle_cry(life): _battle_cry = lfe.execute_raw(life, 'talk', 'battle_cry') if _battle_cry == 'action': _battle_cry_action = lfe.execute_raw(life, 'talk', 'battle_cry_action') lfe.say(life, _battle_cry_action, action=True)
def conditions(life, alife_seen, alife_not_seen, targets_seen, targets_not_seen, source_map): RETURN_VALUE = STATE_UNCHANGED _mode = None if lfe.execute_raw(life, 'state', 'combat'): _mode = 'combat' if not _mode and lfe.execute_raw(life, 'state', 'hunt'): _mode = 'hunt' if not _mode: return False if not lfe.execute_raw(life, 'combat', 'ranged') and not lfe.execute_raw(life, 'combat', 'melee'): return False if not life['state'] == STATE: life['state_flags'] = {} stats.battle_cry(life) if gfx.position_is_in_frame(life['pos']) and SETTINGS['controlling']: _can_see = sight.can_see_position(life, LIFE[SETTINGS['controlling']]['pos']) if _can_see: _knows = brain.knows_alife_by_id(life, SETTINGS['controlling']) if _knows and judgement.can_trust(life, SETTINGS['controlling']): if lfe.ticker(life, 'enter_combat_message', 3, fire=True): logic.show_event('%s readies up.' % ' '.join(life['name']), life=life) RETURN_VALUE = STATE_CHANGE brain.flag(life, 'combat_mode', value=_mode) return RETURN_VALUE
def parse_raw_judgements(life, target_id): lfe.execute_raw(life, 'judge', 'trust', break_on_false=False, life_id=target_id) if lfe.execute_raw(life, 'judge', 'break_trust', life_id=target_id): brain.knows_alife_by_id(life, target_id)['trust'] = bad_numbers.clip(brain.knows_alife_by_id(life, target_id)['trust'], -1000, -1) return True return False
def tick(life, alife_seen, alife_not_seen, targets_seen, targets_not_seen, source_map): _all_targets = judgement.get_threats(life, ignore_escaped=1) if lfe.execute_raw(life, 'combat', 'ranged_ready', break_on_true=True, break_on_false=False): combat.ranged_combat(life, _all_targets) if lfe.execute_raw(life, 'combat', 'melee_ready', break_on_true=True, break_on_false=False): combat.melee_combat(life, _all_targets)
def parse_raw_judgements(life, target_id): lfe.execute_raw(life, "judge", "trust", break_on_false=False, life_id=target_id) if lfe.execute_raw(life, "judge", "break_trust", life_id=target_id): brain.knows_alife_by_id(life, target_id)["trust"] = numbers.clip( brain.knows_alife_by_id(life, target_id)["trust"], -1000, -1 ) return True return False
def conditions(life): RETURN_VALUE = STATE_UNCHANGED if lfe.execute_raw(life, 'state', 'managing'): return True return False
def get_target_to_follow(life): _highest = {'id': None, 'score': 0} for target_id in get_trusted(life, visible=False, only_recent=False): if not lfe.execute_raw(life, 'follow', 'follow_target_if', life_id=target_id): continue _score = 0 _known_target = brain.knows_alife_by_id(life, target_id) if not _known_target['last_seen_at']: continue if _known_target['escaped'] == 2: continue #_score += _known_target['trust'] if life['group'] and groups.is_leader(life, life['group'], target_id) and groups.get_stage(life, life['group']) == STAGE_RAIDING: _score += 1 if _score > _highest['score']: _highest['id'] = target_id _highest['score'] = _score return _highest['id']
def get_target_to_follow(life): _highest = {"id": None, "score": 1} for target_id in get_trusted(life, visible=False, only_recent=False): if not lfe.execute_raw(life, "follow", "follow_target_if", life_id=target_id): continue _score = 0 _known_target = brain.knows_alife_by_id(life, target_id) if not _known_target["last_seen_at"]: continue if _known_target["escaped"] == 2: continue _score += _known_target["trust"] if life["group"] and groups.is_leader(life, life["group"], target_id): _score += 1 if _score >= _highest["score"]: _highest["id"] = target_id _highest["score"] = _score return _highest["id"]
def can_talk_to(life, life_id): if LIFE[life_id]['asleep'] or LIFE[life_id]['dead']: return False if not lfe.execute_raw(life, 'talk', 'can_talk_to', life_id=life_id): return False return True
def desires_to_create_group(life): if life['group']: return False if not lfe.execute_raw(life, 'group', 'create_group'): return False return True
def get_target_to_guard(life): for target_id in get_targets(life): if not lfe.execute_raw(life, "guard", "guard_target_if", life_id=target_id): continue return target_id return None
def desires_shelter(life): if not lfe.execute_raw(life, 'discover', 'desires_shelter'): return False #TODO: Why? if life['state'] == 'needs': return False return True
def manage_inventory(life): if manage_hands(life): return False for weapon_uid in combat.get_equipped_weapons(life): if not combat.weapon_is_working(life, weapon_uid): if combat.weapon_is_in_preferred_working_condition(life, weapon_uid): if not len(lfe.find_action(life,matches=[{'action': 'refillammo'}])): combat.reload_weapon(life, weapon_uid) return True _item_to_wear = {'score': 0, 'item_uid': None} _item_to_equip = {'score': 0, 'item_uid': None} for item in [lfe.get_inventory_item(life, item) for item in lfe.get_all_unequipped_items(life)]: judgement.judge_item(life, item['uid']) _known_item = brain.get_remembered_item(life, item['uid']) if _known_item['score']: if lfe.can_wear_item(life, item['uid']): if _known_item['score'] > _item_to_wear['score']: _item_to_wear['score'] = _known_item['score'] _item_to_wear['item_uid'] = item['uid'] else: if rawparse.raw_has_section(life, 'items') and rawparse.raw_section_has_identifier(life, 'items', item['type']): _action = lfe.execute_raw(life, 'items', item['type']) if item['type'] == 'gun' and lfe.get_all_equipped_items(life, matches=[{'type': 'gun'}]): continue if _action == 'equip': if _known_item['score'] > _item_to_equip['score']: _item_to_equip['score'] = _known_item['score'] _item_to_equip['item_uid'] = item['uid'] _item = None if _item_to_wear['score'] > _item_to_equip['score']: _item = _item_to_wear['item_uid'] elif _item_to_equip['item_uid']: _item = _item_to_equip['item_uid'] if _item: _equip_action = {'action': 'equipitem', 'item': _item} if len(lfe.find_action(life, matches=[_equip_action])): return False lfe.add_action(life, _equip_action, 401, delay=lfe.get_item_access_time(life, _item)) return False return True
def is_nervous(life, life_id): if not lfe.execute_raw(life, 'judge', 'nervous', life_id=life_id): return False _dist = numbers.distance(life['pos'], LIFE[life_id]['pos']) if _dist <= sight.get_vision(LIFE[life_id])/2: return True return False
def conditions(life, alife_seen, alife_not_seen, targets_seen, targets_not_seen, source_map): RETURN_VALUE = STATE_UNCHANGED if not lfe.execute_raw(life, 'state', 'hidden'): return False if not life['state'] == STATE: RETURN_VALUE = STATE_CHANGE return RETURN_VALUE
def reflect(life): while life['unchecked_memories']: _memory = lfe.get_memory_via_id(life, life['unchecked_memories'].pop()) if not rawparse.raw_section_has_identifier(life, 'memory', _memory['text']): continue _return_value = lfe.execute_raw(life, 'memory', _memory['text']) if _return_value == 'investigate_chunk': judgement.judge_chunk(life, _memory['chunk_key'], investigate=True)
def tick(life): if not lfe.execute_raw(life, 'discover', 'discover_type'): _lost_method = lfe.execute_raw(life, 'discover', 'when_lost') if _lost_method: if not life['path'] or not brain.retrieve_from_memory(life, 'discovery_lock'): if not 'scanned_chunks' in life['state_flags']: life['state_flags']['scanned_chunks'] = [] sight.scan_surroundings(life, _chunks=brain.get_flag(life, 'visible_chunks'), ignore_chunks=life['state_flags']['scanned_chunks']) _explore_chunk = chunks.find_best_chunk(life, ignore_starting=True, ignore_time=True, lost_method=_lost_method, only_recent=True) brain.store_in_memory(life, 'discovery_lock', True) brain.store_in_memory(life, 'explore_chunk', _explore_chunk) if not _explore_chunk: brain.flag(life, 'lost') return False survival.explore_known_chunks(life) else: return False
def conditions(life, alife_seen, alife_not_seen, targets_seen, targets_not_seen, source_map): RETURN_VALUE = STATE_UNCHANGED if not lfe.execute_raw(life, 'state', 'guard'): if life['state'] == STATE: lfe.clear_actions(life) return False if not life['state'] == STATE: RETURN_VALUE = STATE_CHANGE return RETURN_VALUE
def judge_chunk_visually(life, chunk_id): if not chunk_id in life['known_chunks']: life['known_chunks'][chunk_id] = {'last_visited': -1, 'last_seen': -1, 'last_checked': -1, 'discovered_at': WORLD_INFO['ticks'], 'flags': {}, 'life': [], 'score': 0} if lfe.ticker(life, 'judge_shelters', 5): if lfe.execute_raw(life, 'discover', 'remember_shelter'): judge_shelter(life, chunk_id)
def conditions(life, alife_seen, alife_not_seen, targets_seen, targets_not_seen, source_map): RETURN_VALUE = STATE_UNCHANGED if not lfe.execute_raw(life, 'state', 'surrender'): return False if not life['state'] == STATE: lfe.stop(life) lfe.say(life, '@n gives up.', action=True) RETURN_VALUE = STATE_CHANGE return RETURN_VALUE
def desires_conversation_with(life, life_id): _knows = brain.knows_alife_by_id(life, life_id) if not _knows: logging.error('FIXME: Improperly Used Function: Doesn\'t know talking target.') return False if not lfe.execute_raw(life, 'talk', 'desires_conversation_with', life_id=life_id): return False if not judgement.can_trust(life, life_id): return False return True
def manage_inventory(life): if manage_hands(life): return False for weapon_uid in combat.get_equipped_weapons(life): if not combat.weapon_is_working(life, weapon_uid): if combat.weapon_is_in_preferred_working_condition(life, weapon_uid): combat.reload_weapon(life, weapon_uid) return True _item_to_wear = {"score": 0, "item_uid": None} _item_to_equip = {"score": 0, "item_uid": None} for item in [lfe.get_inventory_item(life, item) for item in lfe.get_all_unequipped_items(life)]: judgement.judge_item(life, item["uid"]) _known_item = brain.get_remembered_item(life, item["uid"]) if _known_item["score"]: if lfe.can_wear_item(life, item["uid"]): if _known_item["score"] > _item_to_wear["score"]: _item_to_wear["score"] = _known_item["score"] _item_to_wear["item_uid"] = item["uid"] else: if rawparse.raw_has_section(life, "items") and rawparse.raw_section_has_identifier( life, "items", item["type"] ): _action = lfe.execute_raw(life, "items", item["type"]) if _action == "equip": if _known_item["score"] > _item_to_equip["score"]: _item_to_equip["score"] = _known_item["score"] _item_to_equip["item_uid"] = item["uid"] _item = None if _item_to_wear["score"] > _item_to_equip["score"]: _item = _item_to_wear["item_uid"] elif _item_to_equip["item_uid"]: _item = _item_to_equip["item_uid"] if _item: _equip_action = {"action": "equipitem", "item": _item} if len(lfe.find_action(life, matches=[_equip_action])): return False lfe.add_action(life, _equip_action, 401, delay=lfe.get_item_access_time(life, _item)) return True return False
def judge_chunk_visually(life, chunk_id): if not chunk_id in life["known_chunks"]: life["known_chunks"][chunk_id] = { "last_visited": -1, "last_seen": -1, "last_checked": -1, "discovered_at": WORLD_INFO["ticks"], "flags": {}, "life": [], "score": 0, } if lfe.ticker(life, "judge_shelters", 5): if lfe.execute_raw(life, "discover", "remember_shelter"): judge_shelter(life, chunk_id)
def is_threat_too_close(life): _nearest_threat = judgement.get_nearest_threat(life) _knows = brain.knows_alife_by_id(life, _nearest_threat) if not _nearest_threat: return False if _knows['last_seen_time'] >= 100: return False _danger_close_range = int(lfe.execute_raw(life, 'safety', 'danger_close_range')) if numbers.distance(life['pos'], _knows['last_seen_at'])<_danger_close_range: return True return False
def wants_group_member(life, life_id): if not life['group']: return False if groups.is_member(life, life['group'], life_id): return False if not groups.is_leader(life, life['group'], life['id']): return False if not lfe.execute_raw(life, 'group', 'wants_group_member', life_id=life_id): return False _know = brain.knows_alife_by_id(life, life_id) if not _know: return False if not judgement.can_trust(life, life_id): return False return True
def wants_group_member(life, life_id): if not life['group']: return False if groups.is_member(life, life['group'], life_id): return False if not groups.is_leader(life, life['group'], life['id']): return False if not lfe.execute_raw( life, 'group', 'wants_group_member', life_id=life_id): return False _know = brain.knows_alife_by_id(life, life_id) if not _know: return False if not judgement.can_trust(life, life_id): return False return True
def conditions(life, alife_seen, alife_not_seen, targets_seen, targets_not_seen, source_map): return False RETURN_VALUE = STATE_UNCHANGED if not lfe.execute_raw(life, "state", "explore"): return False if not life["state"] == STATE: RETURN_VALUE = STATE_CHANGE # _leading_target = judgement.get_leading_target(life) # if _leading_target: # _known = brain.knows_alife_by_id(life, _leading_target) # # print _leading_target _explore_chunk = chunks.find_best_chunk(life, ignore_time=True) brain.store_in_memory(life, "explore_chunk", _explore_chunk) if not _explore_chunk: return False return RETURN_VALUE
def judge_chunk(life, chunk_id, visited=False, seen=False, checked=True, investigate=False): if lfe.ticker(life, 'judge_tick', 30): return False chunk = maps.get_chunk(chunk_id) _score = 0 if not chunk_id in life['known_chunks']: life['known_chunks'][chunk_id] = {'last_visited': -1, 'last_seen': -1, 'last_checked': -1, 'discovered_at': WORLD_INFO['ticks'], 'flags': {}, 'life': []} _camp = chunks.get_global_flag(chunk_id, 'camp') if _camp and not _camp in life['known_camps']: camps.discover_camp(life, _camp) _known_chunk = life['known_chunks'][chunk_id] if seen: _known_chunk['last_seen'] = WORLD_INFO['ticks'] if visited: _known_chunk['last_visited'] = WORLD_INFO['ticks'] _known_chunk['last_seen'] = WORLD_INFO['ticks'] if checked: _known_chunk['last_checked'] = WORLD_INFO['ticks'] _trusted = 0 for _target in life['know'].values(): if not _target['last_seen_at']: continue _is_here = False _actually_here = False if chunks.position_is_in_chunk(_target['last_seen_at'], chunk_id) and not _target['life']['path']: _is_here = True elif not _target['last_seen_time'] and _target['life']['path'] and chunks.position_is_in_chunk(lfe.path_dest(_target['life']), chunk_id): _is_here = True if chunks.position_is_in_chunk(_target['life']['pos'], chunk_id): _actually_here = True if _is_here: if not _target['life']['id'] in _known_chunk['life']: _known_chunk['life'].append(_target['life']['id']) if is_target_dangerous(life, _target['life']['id']): _score -= 10 elif life['group'] and groups.is_leader(life, life['group'], _target['life']['id']): _trusted += _target['trust'] else: if _target['life']['id'] in _known_chunk['life']: _known_chunk['life'].remove(_target['life']['id']) if investigate and not visited: chunks.flag(life, chunk_id, 'investigate', True) elif visited and chunks.get_flag(life, chunk_id, 'investigate'): chunks.unflag(life, chunk_id, 'investigate') if chunks.get_flag(life, chunk_id, 'investigate'): _score += 5 #for camp in life['known_camps']: # if not chunk_id in camps.get_camp(camp)['reference']: # continue #if not life['camp'] == camp['id']: # continue #if stats.desires_shelter(life): # _score += judge_camp(life, life['camp']) if lfe.execute_raw(life, 'discover', 'remember_shelter'): judge_shelter(life, chunk_id) #if stats.desires_interaction(life): # _score += _trusted if seen: pass #TODO: Still a good idea... maybe use for shelter? #for item in chunk['items']: # _item = brain.remember_known_item(life, item) # if _item: # _score += _item['score'] life['known_chunks'][chunk_id]['score'] = _score return _score
def judge_chunk(life, chunk_id, visited=False, seen=False, checked=True, investigate=False): if lfe.ticker(life, "judge_tick", 30): return False chunk = maps.get_chunk(chunk_id) _score = 0 if not chunk_id in life["known_chunks"]: life["known_chunks"][chunk_id] = { "last_visited": -1, "last_seen": -1, "last_checked": -1, "discovered_at": WORLD_INFO["ticks"], "flags": {}, "life": [], } _camp = chunks.get_global_flag(chunk_id, "camp") if _camp and not _camp in life["known_camps"]: camps.discover_camp(life, _camp) _known_chunk = life["known_chunks"][chunk_id] if seen: _known_chunk["last_seen"] = WORLD_INFO["ticks"] if visited: _known_chunk["last_visited"] = WORLD_INFO["ticks"] _known_chunk["last_seen"] = WORLD_INFO["ticks"] if checked: _known_chunk["last_checked"] = WORLD_INFO["ticks"] _trusted = 0 for _target in life["know"].values(): if not _target["last_seen_at"]: continue _is_here = False _actually_here = False if chunks.position_is_in_chunk(_target["last_seen_at"], chunk_id) and not _target["life"]["path"]: _is_here = True elif ( not _target["last_seen_time"] and _target["life"]["path"] and chunks.position_is_in_chunk(lfe.path_dest(_target["life"]), chunk_id) ): _is_here = True if chunks.position_is_in_chunk(_target["life"]["pos"], chunk_id): _actually_here = True if _is_here: if not _target["life"]["id"] in _known_chunk["life"]: _known_chunk["life"].append(_target["life"]["id"]) if is_target_dangerous(life, _target["life"]["id"]): _score -= 10 elif life["group"] and groups.is_leader(life, life["group"], _target["life"]["id"]): _trusted += _target["trust"] else: if _target["life"]["id"] in _known_chunk["life"]: _known_chunk["life"].remove(_target["life"]["id"]) if investigate and not visited: chunks.flag(life, chunk_id, "investigate", True) elif visited and chunks.get_flag(life, chunk_id, "investigate"): chunks.unflag(life, chunk_id, "investigate") if chunks.get_flag(life, chunk_id, "investigate"): _score += 5 # for camp in life['known_camps']: # if not chunk_id in camps.get_camp(camp)['reference']: # continue # if not life['camp'] == camp['id']: # continue # if stats.desires_shelter(life): # _score += judge_camp(life, life['camp']) if lfe.execute_raw(life, "discover", "remember_shelter"): judge_shelter(life, chunk_id) # if stats.desires_interaction(life): # _score += _trusted if seen: pass # TODO: Still a good idea... maybe use for shelter? # for item in chunk['items']: # _item = brain.remember_known_item(life, item) # if _item: # _score += _item['score'] life["known_chunks"][chunk_id]["score"] = _score return _score
def judge_search_pos(life, pos): return lfe.execute_raw(life, "search", "judge", break_on_true=True, pos1=life["pos"], pos2=pos)
def manage_inventory(life): if manage_hands(life): return False for weapon_uid in combat.get_equipped_weapons(life): if not combat.weapon_is_working(life, weapon_uid): if combat.weapon_is_in_preferred_working_condition( life, weapon_uid): if not len( lfe.find_action(life, matches=[{ 'action': 'refillammo' }])): combat.reload_weapon(life, weapon_uid) return True _item_to_wear = {'score': 0, 'item_uid': None} _item_to_equip = {'score': 0, 'item_uid': None} for item in [ lfe.get_inventory_item(life, item) for item in lfe.get_all_unequipped_items(life) ]: judgement.judge_item(life, item['uid']) _known_item = brain.get_remembered_item(life, item['uid']) if _known_item['score']: if lfe.can_wear_item(life, item['uid']): if _known_item['score'] > _item_to_wear['score']: _item_to_wear['score'] = _known_item['score'] _item_to_wear['item_uid'] = item['uid'] else: if rawparse.raw_has_section( life, 'items') and rawparse.raw_section_has_identifier( life, 'items', item['type']): _action = lfe.execute_raw(life, 'items', item['type']) if item['type'] == 'gun' and lfe.get_all_equipped_items( life, matches=[{ 'type': 'gun' }]): continue if _action == 'equip': if _known_item['score'] > _item_to_equip['score']: _item_to_equip['score'] = _known_item['score'] _item_to_equip['item_uid'] = item['uid'] _item = None if _item_to_wear['score'] > _item_to_equip['score']: _item = _item_to_wear['item_uid'] elif _item_to_equip['item_uid']: _item = _item_to_equip['item_uid'] if _item: _equip_action = {'action': 'equipitem', 'item': _item} if len(lfe.find_action(life, matches=[_equip_action])): return False lfe.add_action(life, _equip_action, 401, delay=lfe.get_item_access_time(life, _item)) return False return True
def judge_search_pos(life, pos): return lfe.execute_raw(life, 'search', 'judge', break_on_true=True, pos1=life['pos'], pos2=pos)
def is_target_threat(life, target_id): if lfe.execute_raw(life, 'judge', 'is_threat_if', life_id=target_id): return True return False
def create_function_map(): FUNCTION_MAP.update({'is_family': stats.is_family, 'name': lambda life: ' '.join(life['name']), 'is_same_species': stats.is_same_species, 'can_trust': judgement.can_trust, 'is_dangerous': judgement.is_target_dangerous, 'can_bite': stats.can_bite, 'can_scratch': stats.can_scratch, 'weapon_equipped_and_ready': combat.weapon_equipped_and_ready, 'prepare_for_ranged': combat.prepare_for_ranged, 'explore_unknown_chunks': survival.explore_unknown_chunks, 'is_nervous': stats.is_nervous, 'is_aggravated': stats.is_aggravated, 'is_scared': judgement.is_scared, 'is_safe': judgement.is_safe, 'is_healthy': None, 'is_intimidated': stats.is_intimidated, 'is_intimidating': lambda life, life_id: stats.is_intimidated_by(LIFE[life_id], life['id']), 'is_confident': stats.is_confident, 'is_situation_tense': lambda life: judgement.get_tension(life)>=10, 'is_combat_ready': lambda life, life_id: not LIFE[life_id]['state'] in ['hiding', 'hidden'], 'is_surrendering': lambda life, life_id: LIFE[life_id]['state'] == 'surrender', 'is_being_surrendered_to': lambda life: len(judgement.get_combat_targets(life, ignore_escaped=True, filter_func=lambda life, life_id: LIFE[life_id]['state'] == 'surrender'))>0, 'closest': None, 'kill': lambda life: lfe.kill(life, 'their own dumb self'), 'has_attacked_trusted': stats.has_attacked_trusted, 'has_attacked_self': stats.has_attacked_self, 'distance_to_pos': stats.distance_from_pos_to_pos, 'current_chunk_has_flag': lambda life, flag: chunks.get_flag(life, lfe.get_current_chunk_id(life), flag)>0, 'is_idle': lambda life: life['state'] == 'idle', 'is_relaxed': lambda life: life['state_tier'] == TIER_RELAXED, 'is_child_of': stats.is_child_of, 'is_parent_of': stats.is_parent_of, 'has_parent': stats.has_parent, 'has_child': stats.has_child, 'is_night': logic.is_night, 'is_born_leader': stats.is_born_leader, 'is_psychotic': stats.is_psychotic, 'is_safe_in_shelter': stats.is_safe_in_shelter, 'is_incapacitated': stats.is_incapacitated, 'is_target': lambda life, life_id: life_id in judgement.get_targets(life) or life_id in judgement.get_combat_targets(life), 'seen_target_recently': lambda life, life_id: brain.knows_alife_by_id(life, life_id)['last_seen_time']<=150, 'is_combat_target': lambda life, life_id: life_id in judgement.get_combat_targets(life), 'is_traitor': lambda life, life_id: len(lfe.get_memory(life, matches={'text': 'traitor', 'target': life_id}))>0, 'is_awake': judgement.is_target_awake, 'is_dead': judgement.is_target_dead, 'is_target_dead': judgement.is_target_dead, 'is_raiding': lambda life: (life['group'] and groups.get_stage(life, life['group'])==STAGE_RAIDING)==True, 'find_and_announce_shelter': groups.find_and_announce_shelter, 'desires_shelter': stats.desires_shelter, 'travel_to_position': movement.travel_to_position, 'find_target': movement.find_target, 'can_see_target': sight.can_see_target, 'has_threats': lambda life: len(judgement.get_threats(life, ignore_escaped=1))>0, 'has_visible_threat': lambda life: len(judgement.get_visible_threats(life))>0, 'has_combat_targets': lambda life: len(judgement.get_combat_targets(life))>0, 'has_lost_threat': lambda life: len(judgement.get_threats(life, escaped_only=True, ignore_escaped=2))>0, 'has_ready_combat_targets': lambda life: len(judgement.get_ready_combat_targets(life, recent_only=True, limit_distance=sight.get_vision(life)+10))>0, 'danger_close': stats.is_threat_too_close, 'number_of_alife_in_chunk_matching': lambda life, chunk_key, matching, amount: len(chunks.get_alife_in_chunk_matching(chunk_key, matching))>amount, 'number_of_alife_in_reference_matching': lambda life, reference_id, matching, amount: len(references.get_alife_in_reference_matching(reference_id, matching))>amount, 'announce_to_group': groups.announce, 'is_in_chunk': chunks.is_in_chunk, 'is_in_shelter': lfe.is_in_shelter, 'has_shelter': lambda life: len(judgement.get_known_shelters(life))>0, 'has_completed_job': lambda life, job_id: job_id in life['completed_jobs'], 'has_completed_task': lambda life, job_id: job_id in life['completed_jobs'], 'retrieve_from_memory': brain.retrieve_from_memory, 'pick_up_and_hold_item': lfe.pick_up_and_hold_item, 'has_usable_weapon': lambda life: not combat.has_ready_weapon(life) == False, 'has_potentially_usable_weapon': lambda life: combat.has_potentially_usable_weapon(life) == True, 'target_is_combat_ready': judgement.target_is_combat_ready, 'create_item_need': survival.add_needed_item, 'group_needs_resources': lambda life, group_id: groups.needs_resources(group_id), 'has_needs_to_meet': survival.has_needs_to_meet, 'has_unmet_needs': survival.has_unmet_needs, 'has_needs_to_satisfy': survival.has_needs_to_satisfy, 'has_needs': lambda life: survival.has_needs_to_meet(life) or survival.has_unmet_needs(life) or survival.has_needs_to_satisfy(life), 'has_number_of_items_matching': lambda life, matching, amount: len(lfe.get_all_inventory_items(life, matches=matching))>=amount, 'flag_item_matching': lambda life, matching, flag: lfe.get_all_inventory_items(life, matches=[matching]) and brain.flag_item(life, lfe.get_all_inventory_items(life, matches=[matching])[0], flag)>0, 'drop_item_matching': lambda life, matching: lfe.get_all_inventory_items(life, matches=[matching]) and lfe.drop_item(life, lfe.get_all_inventory_items(life, matches=[matching])[0]['uid'])>0, 'has_target_to_follow': lambda life: judgement.get_target_to_follow(life)>0, 'has_target_to_guard': lambda life: judgement.get_target_to_guard(life)>0, 'get_recent_events': speech.get_recent_events, 'get_target': lambda life, life_id: speech.get_target(life, lfe.has_dialog_with(life, life_id), dialog.get_flag(lfe.has_dialog_with(life, life_id), 'NEXT_GIST')), 'get_needs': lambda life, life_id: speech.get_needs(life, lfe.has_dialog_with(life, life_id), dialog.get_flag(lfe.has_dialog_with(life, life_id), 'NEXT_GIST')), 'get_location': lambda life: '%s, %s' % (life['pos'][0], life['pos'][1]), 'join_group': lambda life, **kwargs: groups.join_group(life, kwargs['group_id']), 'add_group_member': lambda life, life_id: groups.add_member(life, life['group'], life_id), 'claim_to_be_group_leader': lambda life, life_id: groups.set_leader(life, life['group'], life['id']), 'is_group_leader': lambda life: groups.is_leader_of_any_group(life)==True, 'is_in_same_group': lambda life, life_id: (life['group'] and LIFE[life_id]['group'] == life['group'])>0, 'is_target_group_leader': lambda life, life_id: (groups.is_leader_of_any_group(LIFE[life_id]))==True, 'is_in_group': lambda life: life['group']>0, 'is_target_hostile': lambda life, life_id: brain.knows_alife_by_id(life, life_id) and brain.knows_alife_by_id(life, life_id)['alignment'] == 'hostile', 'is_target_in_group': lambda life, life_id, **kwargs: brain.knows_alife_by_id(life, life_id) and brain.knows_alife_by_id(life, life_id)['group']==kwargs['group'], 'is_target_in_any_group': lambda life, life_id: brain.knows_alife_by_id(life, life_id) and brain.knows_alife_by_id(life, life_id)['group']>0, 'is_target_group_friendly': lambda life, life_id: brain.knows_alife_by_id(life, life_id) and brain.knows_alife_by_id(life, life_id)['group'] and groups.get_group_memory(life, brain.knows_alife_by_id(life, life_id)['group'], 'alignment')=='trust', 'is_target_group_hostile': groups.is_target_group_hostile, 'is_target_group_neutral': lambda life, life_id: brain.knows_alife_by_id(life, life_id) and brain.knows_alife_by_id(life, life_id)['group'] and groups.get_group_memory(life, brain.knows_alife_by_id(life, life_id)['group'], 'alignment')=='neutral', 'is_group_hostile': lambda life, **kwargs: groups.get_group_memory(life, kwargs['group_id'], 'alignment')=='hostile', 'is_injured': lambda life: len(lfe.get_cut_limbs(life)) or len(lfe.get_bleeding_limbs(life)), 'inform_of_group_members': speech.inform_of_group_members, 'update_group_members': speech.update_group_members, 'get_group_flag': groups.get_flag, 'get_flag': brain.get_flag, 'get_group': lambda life: life['group'], 'discover_group': lambda life, **kwargs: groups.discover_group(life, kwargs['group_id']), 'add_target_to_known_group': lambda life, life_id, **kwargs: groups.add_member(life, kwargs['group_id'], life_id), 'knows_about_group': lambda life, **kwargs: groups.group_exists(life, kwargs['group_id']), 'group_has_shelter': lambda life: groups.get_shelter(life, life['group'])>0, 'declare_group_hostile': lambda life, **kwargs: stats.declare_group_hostile(life, kwargs['group_id']), 'declare_group_trusted': lambda life, **kwargs: stats.declare_group_trusted(life, kwargs['group_id']), 'declare_group_target': lambda life, life_id: stats.declare_group_target(life, life_id, 'hostile'), 'get_group_shelter': lambda life: groups.get_shelter(life, life['group']), 'set_group_shelter': lambda life, **kwargs: groups.set_shelter(life, kwargs['group_id'], kwargs['shelter']), 'get_group_stage': lambda life: groups.get_stage(life, life['group']), 'get_group_stage_message': speech.get_group_stage_message, 'set_group_stage': lambda life, **kwargs: groups.set_stage(life, kwargs['group_id'], kwargs['stage']), 'is_group_motivated_for_crime': lambda life: life['group'] and groups.get_motive(life, life['group']) == 'crime', 'wants_to_leave_group_for_group': lambda life: stats.wants_to_abandon_group(life, life['group']), 'knows_items_matching': lambda life, **kwargs: len(brain.get_multi_matching_remembered_items(life, kwargs['items'], no_owner=True))>0, 'get_known_group': speech.get_known_group, 'inform_of_group': speech.inform_of_group, 'force_inform_of_group': speech.force_inform_of_group, 'inform_of_items': lambda life, life_id, **kwargs: speech.inform_of_items(life, life_id, kwargs['items']), 'update_location': lambda life, life_id: brain.update_known_life(life, life_id, 'last_seen_at', LIFE[life_id]['pos'][:]), 'has_questions_for_target': lambda life, life_id: len(memory.get_questions_for_target(life, life_id))>0, 'has_orders_for_target': lambda life, life_id: len(memory.get_orders_for_target(life, life_id))>0, 'ask_target_question': memory.ask_target_question, 'give_target_order_message': memory.give_target_order_message, 'give_target_order': memory.give_target_order, 'take_order': memory.take_order, 'reject_order': memory.reject_order, 'get_introduction_message': speech.get_introduction_message, 'get_introduction_gist': speech.get_introduction_gist, 'establish_trust': stats.establish_trust, 'establish_feign_trust': stats.establish_feign_trust, 'establish_aggressive': stats.establish_aggressive, 'establish_hostile': stats.establish_hostile, 'establish_scared': stats.establish_scared, 'claim_hostile': lambda life, target, **kwargs: stats.establish_hostile(life, kwargs['target_id']), 'describe_target': lambda life, life_id, **kwargs: speech.describe_target(life, kwargs['target']), 'consume': lfe.consume, 'explode': items.explode, 'is_player': lambda life: 'player' in life, 'is_neutral': lambda life, life_id: brain.knows_alife_by_id(life, life_id)['alignment'] == 'neutral', 'reset_think_timer': lfe.reset_think_rate, 'mark_target_as_combat_ready': lambda life, life_id: brain.flag_alife(life, life_id, 'combat_ready'), 'mark_target_as_not_combat_ready': lambda life, life_id: brain.flag_alife(life, life_id, 'combat_ready', value=False), 'saw_target_recently': lambda life, **kwargs: brain.knows_alife_by_id(life, kwargs['target_id']) and -1<brain.knows_alife_by_id(life, kwargs['target_id'])['last_seen_time']<6000, 'update_location_of_target_from_target': speech.update_location_of_target_from_target, 'ping': lambda life: logging.debug('%s: Ping!' % ' '.join(life['name'])), 'wander': lambda life: alife_discover.tick(life), 'pick_up_item': lambda life: alife_needs.tick(life), 'take_shelter': lambda life: alife_shelter.tick(life), 'has_non_relaxed_goal': lambda life: life['state_tier']>TIER_RELAXED, 'needs_to_manage_inventory': lambda life: alife_manage_items.conditions(life) == True, 'manage_inventory': lambda life: alife_manage_items.tick(life), 'cover_exposed': lambda life: len(combat.get_exposed_positions(life))>0, 'ranged_ready': lambda life: lfe.execute_raw(life, 'combat', 'ranged_ready'), 'ranged_attack': lambda life: alife_combat.ranged_attack(life), 'melee_ready': lambda life: lfe.execute_raw(life, 'combat', 'melee_ready'), 'melee_attack': lambda life: alife_combat.melee_attack(life), 'take_cover': lambda life: alife_cover.tick(life), 'hide': lambda life: alife_escape.tick(life), 'stop': lfe.stop, 'search_for_threat': lambda life: alife_search.tick(life), 'has_low_recoil': lambda life: life['recoil']>=.25, 'has_medium_recoil': lambda life: life['recoil']>=.5, 'has_high_recoil': lambda life: life['recoil']>=.75, 'has_focus_point': lambda life: len(lfe.get_memory(life, matches={'text': 'focus_on_chunk'}))>0, 'walk_to': lambda life: movement.travel_to_chunk(life, lfe.get_memory(life, matches={'text': 'focus_on_chunk'})[len(lfe.get_memory(life, matches={'text': 'focus_on_chunk'}))-1]['chunk_key']), 'follow_target': alife_follow.tick, 'guard_focus_point': lambda life: movement.guard_chunk(life, lfe.get_memory(life, matches={'text': 'focus_on_chunk'})[0]['chunk_key']), 'disarm': lambda life, life_id: brain.flag_alife(life, life_id, 'disarm', value=WORLD_INFO['ticks']), 'drop_weapon': lambda life: lfe.drop_item(life, lfe.get_held_items(life, matches={'type': 'gun'})[0]), 'is_disarming': lambda life, life_id: brain.get_alife_flag(life, life_id, 'disarm')>0, 'set_raid_location': lambda life, **kwargs: lfe.memory(life, 'focus_on_chunk', chunk_key=kwargs['chunk_key']), 'move_to_chunk': lambda life, **kwargs: movement.set_focus_point(life, kwargs['chunk_key']), 'move_to_chunk_key': movement.set_focus_point, 'recruiting': lambda life, life_id: speech.send(life, life_id, 'recruit'), 'is_raiding': lambda life: life['group'] and groups.get_stage(life, life['group']) == STAGE_ATTACKING, 'is_in_target_chunk': lambda life, target_id: lfe.get_current_chunk_id(life) == lfe.get_current_chunk_id(LIFE[target_id]), 'get_chunk_key': lfe.get_current_chunk_id, 'has_threat_in_combat_range': stats.has_threat_in_combat_range, 'find_nearest_chunk_in_reference': references.find_nearest_chunk_key_in_reference_of_type, 'has_item_type': lambda life, item_match: not lfe.get_inventory_item_matching(life, item_match) == None, 'move_to_target': lambda life, target_id: movement.travel_to_position(life, LIFE[target_id]['pos']), 'is_in_range_of_target': lambda life, target_id, distance: numbers.distance(life['pos'], LIFE[target_id]['pos'])<=int(distance), 'track_target': lambda life, target_id: brain.meet_alife(life, LIFE[target_id]) and judgement.track_target(life, target_id), 'untrack_target': judgement.untrack_target, 'clear_tracking': lambda life: brain.flag(life, 'tracking_targets', []), 'can_see_item': lambda life, item_uid: item_uid in life['seen_items'], 'has_item': lambda life, item_uid: item_uid in life['inventory'], 'pick_up_item': movement.pick_up_item, 'create_mission': missions.create_mission_for_self, 'give_mission': missions.create_mission_and_give, 'do_mission': alife_work.tick, 'has_mission': lambda life: len(life['missions'])>0, 'drop_item': lfe.drop_item, 'get_id': lambda life: life['id'], 'always': lambda life: 1==1, 'pass': lambda life, *a, **k: True, 'never': lambda life: 1==2})
def is_target_threat(life, target_id): if lfe.execute_raw(life, "judge", "is_threat_if", life_id=target_id): return True return False
def desires_interaction(life): if not lfe.execute_raw(life, 'talk', 'desires_interaction'): return False return True
def desires_life(life, life_id): if not lfe.execute_raw(life, 'judge', 'factors', life_id=life_id): return False return True
def is_intimidated_by(life, life_id): if lfe.execute_raw(life, 'safety', 'intimidated', life_id=life_id): return True return False
def is_aggravated(life, life_id): if lfe.execute_raw(life, 'judge', 'aggravated', life_id=life_id): return True return False
def can_create_camp(life): if not lfe.execute_raw(life, 'camp', 'can_create_camp'): return False return True