Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
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'
Exemple #8
0
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'
Exemple #9
0
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
Exemple #10
0
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
Exemple #11
0
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
Exemple #12
0
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
Exemple #13
0
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
Exemple #14
0
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
Exemple #15
0
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
Exemple #16
0
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
Exemple #17
0
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)
Exemple #18
0
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
Exemple #19
0
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)
Exemple #20
0
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)
Exemple #21
0
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
Exemple #22
0
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)