Example #1
0
def _post(request, char_id):
    char = get_char_or_raise(request, char_id)

    for element_name, abr in STATS_NAMES:
        basestats_list = CharBaseStats.objects.filter(char=char,
                                                      stat=element_name)
        if len(basestats_list) == 0:
            basestats = CharBaseStats()
        else:
            basestats = basestats_list[0]
        basestats.char = char
        basestats.stat = element_name
        basestats.total_value = (
            safe_int(request.POST.get('points_%s' % abr, 0), 0) +
            safe_int(request.POST.get('scrolled_%s' % abr, 0), 0))
        basestats.scrolled_value = safe_int(
            request.POST.get('scrolled_%s' % abr, 0), 0)
        assert 0 <= basestats.total_value and basestats.total_value <= 3000
        assert 0 <= basestats.scrolled_value and basestats.scrolled_value <= 101
        basestats.save()

    allow_point_distribution = request.POST.get('choose_stats', False)
    char.allow_points_distribution = allow_point_distribution
    char.save()

    return char
Example #2
0
def choose_set(request):
    structure = get_structure()
    set_stats = {}

    set_id = safe_int(request.POST.get('id', None))
    set_reference = request.POST.get('name', None)
    set_reference = set_reference.split(' ', 1)
    if set_id == None:
        set_id = safe_int(set_reference[0])
    set_name = set_reference[1]

    s = None
    if set_id:
        s = structure.get_set_by_id(set_id)

    if not s and set_name:
        s = structure.get_set_by_name(set_name)

    if not s:
        return HttpResponseJson(json.dumps(set_stats))

    set_stats['name'] = s.name
    set_stats['id'] = s.id
    set_stats['ankama_id'] = s.ankama_id

    for lang in NON_EN_LANGUAGES:
        set_stats['translated_name_%s' % lang] = s.localized_names.get(
            lang, '')

    stats_per_num_items = {}
    for num_items in range(2, 8 + 1):
        for stat, value in s.bonus_per_num_items.get(num_items,
                                                     {}).iteritems():
            stats_per_num_items.setdefault(STAT_KEY_TO_NAME[stat],
                                           {})[num_items] = value
    stats = []
    for stat_name in sorted(
            stats_per_num_items,
            key=lambda stat: STAT_ORDER[structure.get_stat_by_name(stat).key]):
        stats.append((stat_name, stats_per_num_items[stat_name]))
    set_stats['stats'] = stats

    items = []
    for item_id in s.items:
        item = structure.get_item_by_id(item_id)
        item_name = item.name
        items.append({'name': item_name, 'id': item_id})

    result = {'set': set_stats, 'items': items}

    return HttpResponseJson(json.dumps(result))
Example #3
0
def delete_item_post(request):
    item_id = safe_int(request.POST.get('itemId', None))
    if not item_id:
        return HttpResponseText('not ok')

    worked = _delete_item(item_id)
    if not worked:
        return HttpResponseText('not ok')

    return HttpResponseText('ok')
Example #4
0
def delete_set_post(request):
    set_id = safe_int(request.POST.get('setId', None))
    if not set_id:
        return HttpResponseText('not ok')

    worked = _delete_set(set_id)
    if not worked:
        return HttpResponseText('not ok')

    return HttpResponseText('ok')
Example #5
0
def stats_post(request, char_id):
    char = get_char_or_raise(request, char_id)

    stats_weight = {}
    for stat in get_structure().get_stats_list():
        stats_weight[stat.key] = safe_int(
            request.POST.get('weight_%s' % stat.key, 0), 0)
    set_stats_weights(char, stats_weight)

    return HttpResponseJson(json.dumps(get_stats_weights(char)))
def set_wizard_sliders(char, slider_dict):
    weights = get_stats_weights(char)    
    
    for slider_key in SLIDER_RANGES:
        form_field_name = 'slider_%s' % slider_key
        slider_value_string = slider_dict.get(form_field_name, None)
        new_slider_value = safe_int(slider_value_string)
        if new_slider_value is not None:
            set_weights_from_slider_value(slider_key, new_slider_value, weights)

    _post_process_weights(weights)
    set_stats_weights(char, weights)
    remove_cache_for_char(char.id)
Example #7
0
def update_item_post(request):
    item = json.loads(request.POST.get('item', None))
    if item == None:
        return HttpResponseText('not ok')

    item_id = safe_int(item['id'])
    if item_id:
        new_item, new_weapon = _convert_json_item_to_item(item)
        old_item = get_structure().get_item_by_id(item_id)
        update_item(old_item, new_item, new_weapon, True)
        return HttpResponseText('ok')
    else:
        _insert_item(item)
        return HttpResponseText('ok')
Example #8
0
def min_stats_post(request, char_id):
    char = get_char_or_raise(request, char_id)
    structure = get_structure()

    minimum_values = {}
    for stat in get_structure().get_stats_list():
        minimum = safe_int(request.POST.get('min_%s' % stat.key, ''))
        if minimum is not None:
            minimum_values[stat.name] = minimum

    minimum = safe_int(request.POST.get('min_hp'))
    if minimum is not None:
        minimum_values['HP'] = minimum

    adv_stats = structure.get_adv_mins()
    minimum_values['adv_mins'] = {}
    for stat in adv_stats:
        minimum = safe_int(request.POST.get('min_%s' % stat['key'], ''))
        if minimum is not None:
            minimum_values['adv_mins'][stat['name']] = minimum
    set_min_stats(char, minimum_values)

    return HttpResponseJson(json.dumps(_get_initial_data(char)))
Example #9
0
def _get_state_from_post(request):

    where_to_go = 'solution' if request.POST.get('byhand', None) else 'wizard'
    aspects_set = set()
    for aspect in ALL_ASPECTS:
        if on_off_to_bool(request.POST.get('check_%s' % aspect, 'off')):
            aspects_set.add(aspect)
    return {
        'proj_name': request.POST.get('project', 'NoName'),
        'char_name': request.POST.get('charname', 'NoName'),
        'char_level': safe_int(request.POST.get('level', 200), 200),
        'char_class': request.POST.get('class', 'NoName'),
        'char_build_aspects_set': aspects_set,
        'where_to_go': where_to_go
    }
Example #10
0
def update_set_post(request):
    s = json.loads(request.POST.get('set', None))
    if s == None:
        return HttpResponseText('not ok')

    set_id = safe_int(s['id'])
    if set_id:
        new_set = _convert_json_set_to_set(s)
        worked = update_set(set_id, new_set)
        if worked:
            return HttpResponseText('ok')
        else:
            return HttpResponseText('not ok')
    else:
        _insert_set(s)
        return HttpResponseText('ok')
Example #11
0
def wizard_post(request, char_id):
    char = get_char_or_raise(request, char_id)

    minimum_values = get_min_stats(char)
    for stat_name in STATS_WITH_CONFIG_MINS:
        minimum = safe_int(request.POST.get('min_%s' % stat_name, ''))
        minimum_values[stat_name] = minimum

    set_min_stats(char, minimum_values)

    weapon_to_lock = request.POST.get('weapon', None)
    if weapon_to_lock:
        set_item_included(char, weapon_to_lock, 'weapon', True)
    else:
        inclusions = get_inclusions_dict(char)
        weapon = inclusions.get('weapon')
        if weapon:
            set_item_included(char, weapon, 'weapon', False)

    options = get_options(char)
    options.update(parse_options_post(request))
    set_options(char, options)

    for (red, item) in DOFUS_OPTIONS.iteritems():
        forbidden = request.POST.get(red) is None
        s = get_structure()
        item_id = s.get_item_by_name(item).id
        set_excluded(char, item_id, forbidden)

    set_wizard_sliders(char, request.POST)

    scroll = request.POST.get('scrolling', 'leave')
    if scroll == 'fully':
        _full_scroll_char(char)
    elif scroll == 'clean':
        _clean_scroll_char(char)

    return HttpResponseRedirect(
        reverse('chardata.fashion_action.fashion', args=(char.id, )))
Example #12
0
def _convert_json_item_to_item(json_item):
    structure = get_structure()

    item = Item()
    item.name = json_item['name']
    item.ankama_id = json_item['ankama_id']
    item.ankama_type = json_item['ankama_type']
    item.level = json_item['level']
    item.removed = json_item['removed']
    item.dofus_touch = json_item['dofus_touch']
    item.type = structure.get_type_id_by_name(json_item['type'])
    if json_item['set']:
        item_set = json_item['set']
        if '[DT]' in item_set:
            set_reference = item_set.split(' ', 2)
            item.set = safe_int(set_reference[1])
        else:
            item.set = structure.get_set_id_by_name(item_set)

    item.weird_conditions = json_item['weird_conditions']

    for stat in json_item['stats']:
        if stat['stat'] == '' or stat['stat'] == None:
            continue
        _add_to_old_stat(item,
                         structure.get_stat_by_name(stat['stat']).id,
                         int(stat['value']))

    for cond in json_item['conditions']:
        if cond['stat'] == '' or cond['stat'] == None:
            continue
        new_value = (int(cond['value']) -
                     1 if cond['min_max'] == '<' else int(cond['value']) + 1)
        _add_to_old_cond(item,
                         structure.get_stat_by_name(cond['stat']).id,
                         cond['min_max'] == '>', new_value)

    for lang, extras in json_item['extras'].iteritems():
        for extra in extras:
            if extra == '':
                continue
            _add_to_old_extra(item, lang, extra)

    for lang in NON_EN_LANGUAGES:
        name_translated = json_item['translated_name_%s' % lang]
        if not name_translated.startswith('[!]'):
            item.localized_names[lang] = name_translated

    weapon = None
    if json_item['type'] == 'Weapon':
        weapon = Weapon()
        weapon.ap = int(json_item['ap'])
        weapon.crit_chance = int(json_item['crit_chance'])
        weapon.crit_bonus = int(json_item['crit_bonus'])
        #        item.is_one_handed = json_item['one_handed']
        weapon.weapon_type = structure.get_weapon_type_by_name(
            json_item['weapon_type']).id

        for hit in json_item['hits']:
            if hit['min_hit'] == '':
                continue
            index = int(hit['index'])

            weapon.hits_dict[index] = DamageDigest(
                int(hit['min_hit']), int(hit['max_hit']),
                ELEMENT_NAME_TO_KEY[hit['stat']], hit['steals'], hit['heals'])

    return item, weapon
Example #13
0
def choose_item(request):
    structure = get_structure()

    item_id = safe_int(request.POST.get('id', None))
    item_reference = request.POST.get('name', None)
    item_name = None
    if item_reference:
        if '[DT]' in item_reference:
            item_reference = item_reference.split(' ', 2)
            if item_id == None:
                item_id = safe_int(item_reference[1])
            item_name = item_reference[2]
            dofus_touch = True
        else:
            item_reference = item_reference.split(' ', 1)
            if item_id == None:
                item_id = safe_int(item_reference[0])
            item_name = item_reference[1]
            dofus_touch = False

    item = None

    if item_id:
        item = structure.get_item_by_id(item_id)
        dofus_touch = item.dofus_touch

    if not item and item_name:
        item = structure.get_item_by_name(item_name, dofus_touch)

    if not item:
        return HttpResponseJson(json.dumps({}))

    item_stats = {}
    item_stats['name'] = item.name
    item_stats['id'] = item.id
    item_stats['ankama_id'] = item.ankama_id
    item_stats['ankama_type'] = item.ankama_type
    item_stats['level'] = item.level
    item_stats['type'] = structure.get_type_name_by_id(item.type)
    item_stats['removed'] = item.removed
    item_stats['dofus_touch'] = item.dofus_touch
    if item.set:
        item_stats['set'] = structure.get_set_by_id(item.set).name

    item_stats['weird_conditions'] = item.weird_conditions

    stats = []
    for stat, value in sorted(item.stats,
                              key=lambda stats: STAT_ORDER[
                                  structure.get_stat_by_id(stats[0]).key]):
        stats.append((structure.get_stat_by_id(stat).name, value))
    item_stats['stats'] = stats

    conditions = {}
    if item.min_stats_to_equip:
        for stat, value in item.min_stats_to_equip:
            conditions[structure.get_stat_by_id(stat).name] = ('>', value - 1)
    if item.max_stats_to_equip:
        for stat, value in item.max_stats_to_equip:
            conditions[structure.get_stat_by_id(stat).name] = ('<', value + 1)
    item_stats['conditions'] = conditions

    item_stats['extras'] = {
        lang: item.localized_extras.get(lang, [])
        for lang in LANGUAGES
    }

    if item_stats['type'] == 'Weapon':
        weapon = structure.get_weapon_by_name(item.name, dofus_touch)
        #        item_stats['one_handed'] = item.is_one_handed
        item_stats['ap'] = weapon.ap
        item_stats['crit_chance'] = weapon.crit_chance
        item_stats['crit_bonus'] = weapon.crit_bonus
        item_stats['weapon_type'] = structure.get_weapon_type_by_id(
            weapon.weapon_type).name
        hits = {}
        for key, value in weapon.hits_dict.iteritems():
            hits[key] = (value.min_dam, value.max_dam,
                         ELEMENT_KEY_TO_NAME[value.element], value.steals,
                         value.heals)
        item_stats['hits'] = hits

    for lang in NON_EN_LANGUAGES:
        item_stats['translated_name_%s' % lang] = item.localized_names.get(
            lang, '')

    or_items = []

    # Handle artificial items(Gelano, Turquoise Dofus)
    for alt_item in structure.get_items_by_or_name(item.or_name, dofus_touch):
        if alt_item.id != item.id:
            or_items.append({'id': alt_item.id, 'name': alt_item.name})

    result = {'item': item_stats, 'or_items': or_items}
    return HttpResponseJson(json.dumps(result))