def desires_to_join_camp(life, camp_id): if life['group']: return False if life['camp']: print life['name'], 'already has camp', camps.knows_founder( life, life['camp']) return False if life['stats']['lone_wolf']: return False _memories = lfe.get_memory(life, matches={ 'text': 'heard_about_camp', 'camp': camp_id, 'founder': '*' }) if _memories: _memory = _memories.pop() if not judgement.can_trust(life, _memory['founder']): print life['name'], 'Cant trust founder' * 10 return False if lfe.get_memory(life, matches={ 'text': 'ask_to_join_camp', 'camp': camp_id }): return False return 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 will_obey(life, life_id): _know = brain.knows_alife_by_id(life, life_id) if not _know: return False if judgement.can_trust(life, life_id): return True return False
def get_unwanted_members_with_perspective(life, group_id): _group = get_group(life, group_id) _untrusted = [] for member in [m for m in _group['members'] if not life['id'] == m]: if judgement.can_trust(life, member): continue _untrusted.append(member) return _untrusted
def get_stance_towards(life, target_id): _know = brain.knows_alife_by_id(life, target_id) if _know: if judgement.can_trust(life, target_id): return 'friendly' elif judgement.is_target_dangerous(life, target_id): return 'hostile' else: return 'neutral' else: return 'neutral'
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 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 get_status(life, group_id): _group = get_group(life, group_id) _total_trust = 0 _total_danger = 0 for member1 in _group['members']: for member2 in _group['members']: if member1 == member2: continue if not brain.knows_alife_by_id(LIFE[member1], member2): continue if judgement.can_trust(LIFE[member1], member2): _total_trust += judgement.get_trust(LIFE[member1], member2) else: _total_danger += LIFE[member1]['know'][member2]['danger'] return _total_trust,_total_danger
def get_status(life, group_id): _group = get_group(life, group_id) _total_trust = 0 _total_danger = 0 for member1 in _group['members']: for member2 in _group['members']: if member1 == member2: continue if not brain.knows_alife_by_id(LIFE[member1], member2): continue if judgement.can_trust(LIFE[member1], member2): _total_trust += judgement.get_trust(LIFE[member1], member2) else: _total_danger += LIFE[member1]['know'][member2]['danger'] return _total_trust, _total_danger
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 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 desires_to_join_camp(life, camp_id): if life['group']: return False if life['camp']: print life['name'],'already has camp',camps.knows_founder(life, life['camp']) return False if life['stats']['lone_wolf']: return False _memories = lfe.get_memory(life, matches={'text': 'heard_about_camp', 'camp': camp_id, 'founder': '*'}) if _memories: _memory = _memories.pop() if not judgement.can_trust(life, _memory['founder']): print life['name'],'Cant trust founder' * 10 return False if lfe.get_memory(life, matches={'text': 'ask_to_join_camp', 'camp': camp_id}): return False return True
def listen(life): for event in life['heard'][:]: if not event['from']['id'] in life['know']: pass if not brain.knows_alife(life, event['from']): brain.meet_alife(life, event['from']) logging.info('%s learned about %s via listen.' % (' '.join(life['name']), ' '.join(event['from']['name']))) if event['gist'] == 'looks_hostile': #speech.communicate(life, 'surrender', matches=[{'id': event['from']['id']}]) pass elif event['gist'] == 'camp_raid': print '*' * 10 print 'RAID IN EFFECT!!!!!!!!!!' print '*' * 10 _knows = brain.knows_alife(life, event['from']) _raid = raids.defend_camp(event['camp']['id'], life['id']) if _knows and not judgement.is_target_dangerous(life, _knows['life']['id']): lfe.memory(life, 'heard about a camp raid', camp=event['camp']['id']) _raid_score = judgement.judge_raid(life, event['raiders'], event['camp']['id']) speech.announce(life, 'raid_score', raid_score=_raid_score) elif event['gist'] == 'raid_score': print life['name'],'Got friendly raid score:', event['raid_score'] elif event['gist'] == 'share_item_info': if event['item'] in ITEMS: if not brain.has_remembered_item(life, event['item']): lfe.memory(life, 'heard about an item', item=event['item'], target=event['from']['id']) brain.remember_item(life, ITEMS[event['item']]) elif event['gist'] == 'camp_founder': lfe.memory(life, 'heard about camp', camp=event['camp'], target=event['founder'], founder=event['founder']) print 'Thanks for the camp founder info!' elif event['gist'] == 'under_attack': _knows_attacker = True if life['id'] == event['attacker']: pass else: print life['name'], 'HEARD CALL FOR HELP FROM', event['from']['name'] if not brain.knows_alife_by_id(life, event['attacker']): brain.meet_alife(life, LIFE[event['attacker']]) _knows_attacker = False _target = brain.knows_alife_by_id(life, event['attacker']) _believes = judgement.believe_which_alife(life, [event['from']['id'], event['attacker']]) #SITUATION 1: We believe it if _believes == event['from']['id']: lfe.memory(life, 'heard about attack', attacker=event['attacker'], target=event['from']['id']) lfe.memory(life, 'target attacked victim', target=event['attacker'], victim=event['from']['id']) if event['last_seen_at']: _target['last_seen_at'] = event['last_seen_at'][:] else: _target['last_seen_at'] = event['from']['pos'][:] judgement.judge_life(life, event['attacker']) else: lfe.memory(life, 'reject under_attack: attacker is trusted', attacker=event['attacker'], target=event['from']['id']) elif event['gist'] == 'bit': #React to attack... this needs to be a function in stats.py if event['target'] == life['id']: pass else: _trust_sender = judgement.can_trust(life, event['from']['id']) if brain.knows_alife_by_id(life, event['target']): _trust_target = judgement.can_trust(life, event['target'], low=5) else: brain.meet_alife(life, LIFE[event['target']]) _trust_target = False if _trust_target and not _trust_sender and 1==4: lfe.memory(life, 'trusted target attacked by', victim=event['target'], target=event['from']['id']) elif event['gist'] == 'consume_item': lfe.memory(life, 'consume_item', target=event['from']['id']) elif event['gist'] == 'call': if judgement.can_trust(life, event['from']['id']): speech.start_dialog(life, event['from']['id'], 'call_accepted', remote=True) elif event['gist'] == 'order_attack': lfe.memory(life, 'ordered to attack', target=event['target']) elif event['gist'] == 'threw_an_item': print 'CHECK THIS HERE' * 100 pass elif event['gist'] == '_group_leader_state_change': life['think_rate'] = 0 elif event['gist'] == 'dialog': if not 'player' in life and not event['dialog_id'] in life['dialogs']: life['dialogs'].append(event['dialog_id']) else: logging.warning('Unhandled ALife context: %s' % event['gist']) life['heard'].remove(event)
def _execute(action): _struct = {} if "life" in action["kwargs"]: _struct["life"] = LIFE[action["kwargs"]["life"]] if "add_to" in action["kwargs"]: _struct["add_to"] = action["kwargs"]["add_to"] else: _struct["add_to"] = [] if "retrieve" in action["kwargs"]: _struct["list"] = retrieve(action["kwargs"]["retrieve"], life=_struct["life"]) if "store_retrieve_as" in action["kwargs"]: _struct["store_retrieve_as"] = action["kwargs"]["store_retrieve_as"] if "filter_by" in action["kwargs"]: for entry in action["kwargs"]["filter_by"]: if entry in _struct["list"]: _struct["list"].remove(entry) if "matching" in action["args"]: _struct["match_mask"] = action["kwargs"]["matching"] else: _struct["match_mask"] = {"id": "*"} if "question" in action["kwargs"]: _struct["question"] = action["kwargs"]["question"] if "ask" in action["args"]: if not _struct["list"]: return False lfe.speech.start_dialog_with_question(_struct["life"], _struct["list"][0], _struct["question"]) if "add_to" in _struct: if not _struct["list"][0] in _struct["list"]: _struct["add_to"].append(_struct["list"][0]) print "LOOK OUT!" * 55, _struct["add_to"] return True if "return" in action["args"]: if "include" in action["kwargs"]: _struct.update(action["kwargs"]["include"]) return _struct if "return_key" in action["args"]: if "key" in action["kwargs"]: return _struct[action["kwargs"]["key"]] if "return_key" in action["kwargs"]: return _struct[action["kwargs"]["return_key"]] if "return_function" in action["kwargs"]: return rawparse.FUNCTION_MAP[action["kwargs"]["return_function"]] if "function" in action["kwargs"]: _arguments = execute(action["kwargs"]["arguments"]) if "filter" in action["args"]: _ret_list = [] for key in _arguments.keys(): if not key in action["kwargs"]["arguments"]["kwargs"]: if ( "include" in action["kwargs"]["arguments"]["kwargs"] and key in action["kwargs"]["arguments"]["kwargs"]["include"] ): continue del _arguments[key] for result in _struct["list"]: _arguments.update({_struct["store_retrieve_as"]: result}) if not action["kwargs"]["function"](**_arguments): _ret_list.append(result) continue for entry in _ret_list: _struct["list"].remove(entry) print "filter function", _struct["list"] return _struct["list"] if "get_known_alife" in action["args"]: return _struct["life"]["know"].keys() if "track_alife" in action["args"]: if not _struct["list"]: return False if movement._find_alife(_struct["life"], target=_struct["list"][0]): if not _struct["list"][0] in _struct["add_to"]: _struct["add_to"].append(_struct["list"][0]) print "FOUND HIM!!!!!!!!!!!" * 50 lfe.focus_on(_struct["life"]) print _struct["life"]["name"], "Tracking", LIFE[_struct["list"][0]]["name"] print judgement.can_trust(_struct["life"], _struct["list"][0]) return True
def desires_help_from(life, life_id): return judgement.can_trust(life, life_id) and judgement.get_tension_with(life, life_id)<=judgement.get_max_tension_with(life, life_id)
def desires_help_from(life, life_id): return judgement.can_trust(life, life_id) and judgement.get_tension_with( life, life_id) <= judgement.get_max_tension_with(life, life_id)
def _execute(action): _struct = {} if 'life' in action['kwargs']: _struct['life'] = LIFE[action['kwargs']['life']] if 'add_to' in action['kwargs']: _struct['add_to'] = action['kwargs']['add_to'] else: _struct['add_to'] = [] if 'retrieve' in action['kwargs']: _struct['list'] = retrieve(action['kwargs']['retrieve'], life=_struct['life']) if 'store_retrieve_as' in action['kwargs']: _struct['store_retrieve_as'] = action['kwargs']['store_retrieve_as'] if 'filter_by' in action['kwargs']: for entry in action['kwargs']['filter_by']: if entry in _struct['list']: _struct['list'].remove(entry) if 'matching' in action['args']: _struct['match_mask'] = action['kwargs']['matching'] else: _struct['match_mask'] = {'id': '*'} if 'question' in action['kwargs']: _struct['question'] = action['kwargs']['question'] if 'ask' in action['args']: if not _struct['list']: return False lfe.speech.start_dialog_with_question(_struct['life'], _struct['list'][0], _struct['question']) if 'add_to' in _struct: if not _struct['list'][0] in _struct['list']: _struct['add_to'].append(_struct['list'][0]) print 'LOOK OUT!' * 55, _struct['add_to'] return True if 'return' in action['args']: if 'include' in action['kwargs']: _struct.update(action['kwargs']['include']) return _struct if 'return_key' in action['args']: if 'key' in action['kwargs']: return _struct[action['kwargs']['key']] if 'return_key' in action['kwargs']: return _struct[action['kwargs']['return_key']] if 'return_function' in action['kwargs']: return rawparse.FUNCTION_MAP[action['kwargs']['return_function']] if 'function' in action['kwargs']: _arguments = execute(action['kwargs']['arguments']) if 'filter' in action['args']: _ret_list = [] for key in _arguments.keys(): if not key in action['kwargs']['arguments']['kwargs']: if 'include' in action['kwargs']['arguments'][ 'kwargs'] and key in action['kwargs']['arguments'][ 'kwargs']['include']: continue del _arguments[key] for result in _struct['list']: _arguments.update({_struct['store_retrieve_as']: result}) if not action['kwargs']['function'](**_arguments): _ret_list.append(result) continue for entry in _ret_list: _struct['list'].remove(entry) print 'filter function', _struct['list'] return _struct['list'] if 'get_known_alife' in action['args']: return _struct['life']['know'].keys() if 'track_alife' in action['args']: if not _struct['list']: return False if movement._find_alife(_struct['life'], target=_struct['list'][0]): if not _struct['list'][0] in _struct['add_to']: _struct['add_to'].append(_struct['list'][0]) print 'FOUND HIM!!!!!!!!!!!' * 50 lfe.focus_on(_struct['life']) print _struct['life']['name'], 'Tracking', LIFE[_struct['list'] [0]]['name'] print judgement.can_trust(_struct['life'], _struct['list'][0]) return True
def listen(life): for event in life['heard'][:]: if not event['from']['id'] in life['know']: pass if not brain.knows_alife(life, event['from']): brain.meet_alife(life, event['from']) logging.info( '%s learned about %s via listen.' % (' '.join(life['name']), ' '.join(event['from']['name']))) if event['gist'] == 'looks_hostile': #speech.communicate(life, 'surrender', matches=[{'id': event['from']['id']}]) pass elif event['gist'] == 'camp_raid': print '*' * 10 print 'RAID IN EFFECT!!!!!!!!!!' print '*' * 10 _knows = brain.knows_alife(life, event['from']) _raid = raids.defend_camp(event['camp']['id'], life['id']) if _knows and not judgement.is_target_dangerous( life, _knows['life']['id']): lfe.memory(life, 'heard about a camp raid', camp=event['camp']['id']) _raid_score = judgement.judge_raid(life, event['raiders'], event['camp']['id']) speech.announce(life, 'raid_score', raid_score=_raid_score) elif event['gist'] == 'raid_score': print life['name'], 'Got friendly raid score:', event['raid_score'] elif event['gist'] == 'share_item_info': if event['item'] in ITEMS: if not brain.has_remembered_item(life, event['item']): lfe.memory(life, 'heard about an item', item=event['item'], target=event['from']['id']) brain.remember_item(life, ITEMS[event['item']]) elif event['gist'] == 'camp_founder': lfe.memory(life, 'heard about camp', camp=event['camp'], target=event['founder'], founder=event['founder']) print 'Thanks for the camp founder info!' elif event['gist'] == 'under_attack': _knows_attacker = True if life['id'] == event['attacker']: pass else: print life['name'], 'HEARD CALL FOR HELP FROM', event['from'][ 'name'] if not brain.knows_alife_by_id(life, event['attacker']): brain.meet_alife(life, LIFE[event['attacker']]) _knows_attacker = False _target = brain.knows_alife_by_id(life, event['attacker']) _believes = judgement.believe_which_alife( life, [event['from']['id'], event['attacker']]) #SITUATION 1: We believe it if _believes == event['from']['id']: lfe.memory(life, 'heard about attack', attacker=event['attacker'], target=event['from']['id']) lfe.memory(life, 'target attacked victim', target=event['attacker'], victim=event['from']['id']) if event['last_seen_at']: _target['last_seen_at'] = event['last_seen_at'][:] else: _target['last_seen_at'] = event['from']['pos'][:] judgement.judge_life(life, event['attacker']) else: lfe.memory(life, 'reject under_attack: attacker is trusted', attacker=event['attacker'], target=event['from']['id']) elif event['gist'] == 'bit': #React to attack... this needs to be a function in stats.py if event['target'] == life['id']: pass else: _trust_sender = judgement.can_trust(life, event['from']['id']) if brain.knows_alife_by_id(life, event['target']): _trust_target = judgement.can_trust(life, event['target'], low=5) else: brain.meet_alife(life, LIFE[event['target']]) _trust_target = False if _trust_target and not _trust_sender and 1 == 4: lfe.memory(life, 'trusted target attacked by', victim=event['target'], target=event['from']['id']) elif event['gist'] == 'consume_item': lfe.memory(life, 'consume_item', target=event['from']['id']) elif event['gist'] == 'call': if judgement.can_trust(life, event['from']['id']): speech.start_dialog(life, event['from']['id'], 'call_accepted', remote=True) elif event['gist'] == 'order_attack': lfe.memory(life, 'ordered to attack', target=event['target']) elif event['gist'] == 'threw_an_item': print 'CHECK THIS HERE' * 100 pass elif event['gist'] == '_group_leader_state_change': life['think_rate'] = 0 elif event['gist'] == 'dialog': if not 'player' in life and not event['dialog_id'] in life[ 'dialogs']: life['dialogs'].append(event['dialog_id']) else: logging.warning('Unhandled ALife context: %s' % event['gist']) life['heard'].remove(event)