Пример #1
0
def _solution(request, char_id, is_guest, encoded_char_id=None):
    char = get_object_or_404(Char, pk=char_id)
    
    inclusions = get_all_inclusions_en_names(char)
    exclusions = get_all_exclusions_en_names(char)
    
    solution = get_solution(char)
    solution_result = SolutionResult(solution,
                                     inclusions,
                                     exclusions)
    params = {'char_id': char_id,
              'lock_item': static('chardata/lock-icon.png'),
              'switch_item': static('chardata/1412645636_Left-right.png'),
              'delete_item': static('chardata/delete-icon.png'),
              'add_item': static('chardata/add-icon.png'),
              'ajax_loader': json.dumps(get_ajax_loader_URL(request)),
              'link_external_image': json.dumps(get_external_image_URL(request)),
              'is_guest': is_guest,
              'is_guest_json': json.dumps(is_guest),
              'encoded_char_id': encoded_char_id,
              'link_shared': char.link_shared,
              'owner_alias': get_alias(char.owner),
              'is_dueler': chardata.smart_build.char_has_aspect(char, 'duel')}
              
    if char.link_shared:
        params['initial_link'] = generate_link(char)

    params.update(solution_result.get_params())

    response = set_response(request, 
                            'chardata/solution.html',
                            params, 
                            char)
    return response
Пример #2
0
def _get_difference(item, slot, char):
    result = get_solution(char)
    current_stats = result.stats_total.copy()
    result.switch_item(item, slot)
    new_stats = result.stats_total.copy()

    difference = {}
    for (stat, _) in current_stats.iteritems():
        if stat in new_stats:
            if (new_stats[stat] - current_stats[stat] != 0):
                difference[stat] = new_stats[stat] - current_stats[stat]
        else:
            difference[stat] = 0 - current_stats[stat]
    for (stat, _) in new_stats.iteritems():  
        if stat not in current_stats:
            difference[stat] = new_stats[stat]
            
    ordered_diff = sorted(difference.iteritems(),
                          key=lambda x: STAT_ORDER[x[0]])
    
    stats_lines = []
    for stat_key, stat_value in ordered_diff:
        stat_name = get_structure().get_stat_by_key(stat_key).name
        stats_lines.append(AttributeLine(stat_value, stat_name))
    return stats_lines
Пример #3
0
def _spells(request, char, is_guest, char_id, encoded_char_id=None):
    char_class = char.char_class
    
    solution = get_solution(char)
    if solution is None:
        return fashion(request, char_id, True)    

    digests = []
    weapons = solution.items['Weapon']
    if len(weapons) > 0:
        weapon = weapons[0]
        if weapon.item_added:
            web_digest = _create_weapon_web_digest(weapon)
            digests.append(web_digest)
    for spell in DAMAGE_SPELLS[char_class] + DAMAGE_SPELLS['default']:
        web_digest = _create_spell_web_digest(spell)
        digests.append(web_digest)
    digests_json = jsonpickle.encode(digests, unpicklable=False)
    stats_json = jsonpickle.encode(solution.get_stats_total(), unpicklable=False)
    return set_response(request, 
                        'chardata/spells.html', 
                        {'request': request,
                         'is_guest': is_guest,
                         'encoded_char_id': encoded_char_id,
                         'user': request.user,
                         'digests_json': digests_json,
                         'char_id': char_id,
                         'char_level': char.level,
                         'char_stats_json': stats_json},
                        char)
Пример #4
0
def load_a_project(request, char_id):
    char = get_object_or_404(Char, pk=char_id)
    if get_solution(char) is not None:
        return HttpResponseRedirect(
            reverse('chardata.solution_view.solution', args=(char.id, )))
    return HttpResponseRedirect(
        reverse('chardata.wizard_view.wizard', args=(char.id, )))
Пример #5
0
def remove_item(request, char_id):
    char = get_char_or_raise(request, char_id)
    slot = request.POST.get('slot', None)
    assert slot in SLOTS
    
    result = get_solution(char)
    result.switch_item(None, slot)
    set_solution(char, result)
    remove_cache_for_char(char_id)

    
    return HttpResponseText('ok')
Пример #6
0
def _order_by_hits(item_type, char, search_term):
    structure = get_structure()
    items = structure.get_unique_items_by_type_and_level(item_type, char.level)
    search_term = search_term.lower()
    search_term = strip_accents(search_term)
    if search_term is not None and search_term is not '':
        items = filter(lambda i: _item_contains_term(i, re.sub(r'\W+', '', search_term)),
                       items)
    items = filter(lambda i: _hide_removed_item(i), items)
    solution = get_solution(char)
    sorted_items = sorted(items, key=lambda item: _get_weapon_rate(item, char, solution), reverse=True)
    #print sorted_items[:5]
    return sorted_items
Пример #7
0
def switch_item(request, char_id): 
    char = get_char_or_raise(request, char_id)
    item_name = request.POST.get('itemName', None)
    slot = request.POST.get('slot', None)
    assert slot in SLOTS
    
    structure = get_structure()
    result = get_solution(char)
    result.switch_item(structure.get_item_by_id(int(item_name)), slot)
    set_solution(char, result)
    remove_cache_for_char(char_id)

    return HttpResponseText('ok')
Пример #8
0
def solution(request, char_id, empty=False):
    char = get_char_or_raise(request, char_id)
    solution = get_solution(char)
    if solution is None:
        if not empty:
            return fashion(request, char_id)
        else:
            input_ = {}
            input_['options'] = get_options(request, char_id)
            input_['base_stats_by_attr'] = get_base_stats_by_attr(request, char_id)
            input_['char_level'] = char.level
            set_minimal_solution(char, ModelResultMinimal.generate_empty_solution(input_))
    return _solution(request, char_id, False)
Пример #9
0
def compare_sets(request, sets_params):
    char_strs = _process_parameters(sets_params)

    chars = [
        get_char_possibly_encoded_or_raise(request, char_str)
        for char_str in char_strs
    ]
    solutions = {}
    is_guest = {}
    links = {}
    all_chars_are_shared = True
    for char in chars:
        solution = get_solution(char)
        sol_result = SolutionResult(solution)
        solutions[char.pk] = sol_result.get_params()
        is_guest[char.pk] = not char_belongs_to_user(request, char)
        if not char_belongs_to_user(request, char):
            links[char.pk] = generate_link(char)
        else:
            links[char.pk] = request.build_absolute_uri(
                reverse('chardata.solution_view.solution', args=(char.pk, )))
        all_chars_are_shared = all_chars_are_shared and char.link_shared

    char_ids = [char.pk for char in chars]
    if len(char_ids) > 2:
        char_ids_cols = char_ids
    else:
        char_ids_cols = char_ids + ['diff']

    compare_link_shared = None
    if all_chars_are_shared:
        compare_link_shared = _generate_share_compare_link(char_ids)

    get_compare_link_url = reverse(
        'chardata.compare_sets_view.get_sharing_link', args=(sets_params, ))

    params = {
        'chars': chars,
        'char_ids': char_ids,
        'char_ids_cols': char_ids_cols,
        'solutions': solutions,
        'items_sorted': _sort_items(solutions),
        'char_is_guest': is_guest,
        'links': links,
        'compare_link_shared': compare_link_shared,
        'get_compare_link_url': get_compare_link_url
    }

    response = set_response(request, 'chardata/compare_sets.html', params)
    return response
Пример #10
0
def compare_set_search_proj_name(request):
    name_piece = request.POST.get('name[term]', None)

    if (request.user is not None and not request.user.is_anonymous()):
        chars = Char.objects.filter(owner=request.user)
        chars = chars.exclude(deleted=True)

        char_list = []
        if name_piece:
            name_piece = name_piece.lower()
            for char in chars:
                if name_piece in char.name.lower():
                    if get_solution(char) is not None:
                        char_list.append({'label': char.name, 'idx': char.id})
    else:
        char_list = []
    return HttpResponseJson(json.dumps(char_list))
Пример #11
0
def check_if_violates(item, slot, char): 
    result = get_solution(char)
    result.switch_item(item, slot)
    minimums = get_min_stats_digested_by_key(char)
    return result.get_all_project_violations(item.type, minimums)
Пример #12
0
def _get_weapon_info(weapon, char):
    weapon_info = {}
    structure = get_structure()
    result = get_solution(char)
    result_item = result.switch_item(weapon, 'weapon')
    new_stats = result.stats_total.copy()
    weapon_obj = structure.get_weapon_by_name(weapon.name)
    
    if result_item.is_mageable:
        result_item.mage_weapon_smartly(new_stats)
        element = result_item.element_maged
    else:
        element = NEUTRAL
    #print element
    
    weapon_info['is_mageable'] = result_item.is_mageable
    weapon_info['element'] = _(ELEMENT_KEY_TO_NAME[element])
        
    calculated_damage = {}
    for elementnew in DAMAGE_TYPES:
        calculated_damage[elementnew] = calculate_damage(weapon_obj.non_crit_hits[element],
                                                         new_stats, critical_hit=False, is_spell=False)
    
    min_noncrit_dam = 0
    for damage in calculated_damage[element]:
        if damage.heals:
            min_noncrit_dam -= damage.min_dam
        else:
            min_noncrit_dam += damage.min_dam
            
    weapon_info['min_noncrit_dam'] = min_noncrit_dam
    
    max_noncrit_dam = 0
    for damage in calculated_damage[element]:
        if damage.heals:
            max_noncrit_dam -= damage.max_dam
        else:
            max_noncrit_dam += damage.max_dam
            
    weapon_info['max_noncrit_dam'] = max_noncrit_dam  
    
    if weapon_obj.has_crits:
    
        calculated_crit_damage = {}
        for elementnew in DAMAGE_TYPES:
            calculated_crit_damage[elementnew] = calculate_damage(weapon_obj.crit_hits[element],
                                                         new_stats, critical_hit=True, is_spell=False)
    
        min_crit_dam = 0
        for damage in calculated_crit_damage[element]:
            if damage.heals:
                min_crit_dam -= damage.min_dam
            else:
                min_crit_dam += damage.min_dam
                
        weapon_info['min_crit_dam'] = min_crit_dam
        
        max_crit_dam = 0
        for damage in calculated_crit_damage[element]:
            if damage.heals:
                max_crit_dam -= damage.max_dam
            else:
                max_crit_dam += damage.max_dam
                
        weapon_info['max_crit_dam'] = max_crit_dam  
    
    
    solution = get_solution(char)
    rating = _get_weapon_rate(weapon, char, solution)
    weapon_info['rating'] = rating
    
    return weapon_info