Example #1
0
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')
Example #2
0
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')
Example #3
0
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
Example #4
0
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