コード例 #1
0
def item_add():
    # 여기서 필요한거? 딱히 없는듯......;;
    # 목록에서 추가되는거 설정유지 해야하나?
    # 뒤로 돌아가는거 대비?

    conn = mysql.connect()
    cursor = conn.cursor()

    # 아이템 목록 설명부분을 넣어야함.
    # 아이템 효과는 시즌템이나 아니나 무조건 동일함.
    # 고로 어떤걸로 하던 한쪽만 가져와도 추방함.

    # 템 항목 설명
    cursor.execute("show FULL COLUMNS from items")

    item_info_columns = cursor.fetchall()
    print('item_info_columns: {}'.format(item_info_columns))

    # 템 능력치별 항목 설명ㅊ
    cursor.execute("show FULL COLUMNS from items_effect")
    item_effect_columns = cursor.fetchall()
    item_effect_columns_len = len(item_effect_columns)

    # 다 끝내면 연결 바로바로 종료시킨다.
    cursor.close()
    conn.close()

    return render_template('admin_item_info.html'
                           , item_edit=0, item_info_columns=item_info_columns
                           , item_effect_columns_len=item_effect_columns_len
                           , item_effect_columns=item_effect_columns)
コード例 #2
0
def aaa():
    # sample.
    topic = '플레이어 명단'
    conn = mysql.connect()
    cursor = conn.cursor()
    print('A?')
    cursor.execute('select a.user_num, a.user_id, a.user_email,  b.player_unique_id, b.player_nick , b.player_highscore, c.crew_name '
                   'from _users as a  JOIN `_players` as b  JOIN crew as c on a.user_num = b.user_num and b.affiliated_crew_id = c.crew_id')
    # select
    # a.user_num, a.user_id, a.user_email, b.player_unique_id, b.player_nick, b.player_highscore, c.crew_name
    # from
    # `_users` as a
    # JOIN
    # `_players` as b
    # JOIN
    # crew as c
    # on
    # a.user_num = b.user_num and b.affiliated_crew_id = c.crew_id;

    p = cursor.fetchall()
    print(p)
    print(p[0][1])
    print('******')
    for a in p:
        print(a)
    print('진입')
    return render_template('admin_player_list.html', a='1', player_list=p, topic=topic)
コード例 #3
0
def register():
    # 여기서 기초적인 회원가입을 실시한다.
    # 회원가입에 쓰일 테이블은 _users, _pass 두가지다.
    userid = request.args.get("id")
    passwd = request.args.get("pwd")
    email = request.args.get('email')

    hashed_pwd = pwd.crpyt_pass(passwd)
    conn = mysql.connect()
    cursor = conn.cursor()

    try:
        print("INSERT INTO `_users`(user_id, user_email) VALUES ({}, {})".format(userid, email))
        cursor.execute("INSERT INTO `_users`(user_id, user_email) VALUES (\"{}\", \"{}\")".format(userid, email))
        print('chkpt')
        cursor.execute("SELECT user_num FROM `_users` WHERE user_id = \"{}\"".format(userid))
        user_num = cursor.fetchone()
        print(user_num[0])
        # conn.close()
        cursor.execute("INSERT into `_pass`(user_num, pwd) VALUES (\"{}\", \"{}\")".format(user_num[0], hashed_pwd))
        print(conn.commit())
    except Exception as e:
        # 리턴값 따로 만들어야함. 이대로 나가면 안됨.
        print(e.args)
        print(e.__class__)
        return "Eraro ozakis. {}".format(e)

    cursor.close()
    conn.close()

    return 'done probably'
コード例 #4
0
def admin_player_list(page_num=1):

    # 관리자한테 필요한거?
    # 계정확인.
    #
    conn = mysql.connect()
    cursor = conn.cursor()
    print('A?')
    cursor.execute('select a.user_num, a.user_id, a.user_email,  b.player_unique_id, b.player_nick, '
                   'b.player_highscore, c.crew_name '
                   'from `_users` as a  JOIN `_players` as b  JOIN crew as c '
                   'on a.user_num = b.user_num and b.affiliated_crew_id = c.crew_id')
    # select
    # a.user_num, a.user_id, a.user_email, b.player_unique_id, b.player_nick, b.player_highscore, c.crew_name
    # from
    # `_users` as a
    # JOIN
    # `_players` as b
    # JOIN
    # crew as c
    # on
    # a.user_num = b.user_num and b.affiliated_crew_id = c.crew_id;

    player_list = cursor.fetchall()
    print(player_list)
    print(player_list[0][1])
    for a in player_list:
        print(a)

    cursor.close()
    conn.close()

    return render_template('admin_player_list.html', a='1', player_list=player_list, page_num=page_num)
コード例 #5
0
def get_friend():
    # 친구목록 불러오기.
    # 플레이어 고유번호
    player_unique_id = request.args.get('player_id')

    conn = mysql.connect()
    cursor = conn.cursor()
    # cursor.execute('select * from INNER JOIN `_friends` on `_players`.player_unique_id = `_friends`.friend_unique_id '
    #                'WHERE `_friends`.friend_unique_id = "{}"'.format(user_id))
    # redonas numero de rezultoj
    cursor.execute('SELECT friend_unique_id FROM `_friends_copy` '
                   'WHERE player_unique_id = "{0}" '
                   'UNION '
                   'SELECT player_unique_id FROM `_friends_copy`'
                   'WHERE friend_unique_id = "{0}"'.format(player_unique_id))

    friend_ids = cursor.fetchall()

    loads = []

    content = {}

    for f in friend_ids:
        cursor.execute(
            'select a.player_unique_id, a.player_nick  from `_players` AS a WHERE player_unique_id'
        )
        content = {PLAYER_UNIQUE_ID: f[1], 'email': f[2]}

    cursor.close()
    conn.close()
    # 미완성. 자료가 유니티로 어떻게 넘겨지는지에 대해 좀 알아봐야함.
    # 이름, 크루, 랭크, 고유 식별번호
    # MUST BE IN JSON
    return jsonify(loads)
コード例 #6
0
def auth():
    username = request.args.get('user')
    password = request.args.get('pass')
    cursor = mysql.connect().cursor()
    cursor.execute("SELECT * FROM users WHERE user_id='" + username + "' AND pass='******'")
    # cursor.execute("")
    data = cursor.fetchone()
    print(data)
    if data is None:
        return "Username or Password is wrong"
    else:
        return "Logged in successfully"
コード例 #7
0
def debug():

    # return "10"
    player_unique_id = request.args.get('player_id')
    conn = mysql.connect()
    cursor = conn.cursor()
    userid = 10

    cursor.execute('SELECT * FROM `_users` WHERE user_num = "{}"'.format(userid))
    # 친구목록 불러오기.
    # 해당 execute 자체는 목록의 수를 반환함.
    cursor.execute('SELECT friend_unique_id FROM `_friends_copy` '
                   'WHERE player_unique_id = "{0}" '.format(player_unique_id))
                   # 'UNION '
                   # 'SELECT player_unique_id FROM `_friends_copy`'
                   # 'WHERE friend_unique_id = "{0}"'.format(player_unique_id))

    print(cursor.fetchall())
    # return 'a'

    # print('res {}, type {}'.format(res, type(res)))

    # 이 방식으로 jSON화.

    smth = cursor.fetchall()
    loads = []
    content = {}

    for s in smth:
        print(s)
        content = {'user_id': s[1], 'email': s[2]}
        loads.append(content)

    print('sss')
    # dumps = json.dumps()
    print('loads : {}, type: {}'.format(loads, type(loads)))
    # print(bool)
    # stringify = ''
    jsonified = jsonify(loads)
    stringify = json.dumps(loads)

    print('type: {}'.format(type(jsonified)))
    print('stringify: {}, type: {}'.format(stringify, type(stringify)))
    stringify = stringify.encode('utf-8')
    hasher = hashlib.md5()
    hasher.update(stringify)

    # 다 끝내면 연결 바로바로 종료시킨다.
    cursor.close()
    conn.close()

    return hasher.hexdigest()
コード例 #8
0
def total_item_list():
    # connect to the sql server
    conn = mysql.connect()
    cursor = conn.cursor()

    # 안에 들어가야 하는 값들.
    json_dic = {}

    # 모든 템 관련 머시기들을 빼와야 하기 때문.
    table_list = ['items', 'crew_item', 'season_item']
    dic_total = {}
    for tl in table_list:
        cursor.execute('SELECT * FROM {}'.format(tl))
        # 테이블 칼럼명
        # table_desc = cursor.description
        # 셀렉트문 결과값
        table_val = cursor.fetchall()

        # print(table_desc)
        print(table_val)

        dic_item = {tl: []}

        for i in range(len(table_val)):
            _table = []
            # 낱개
            for j in range(len(table_val[i])):
                print('table_val[i][j]', table_val[i][j])
                _table.append(table_val[i][j])

            dic_item[tl].append(_table)

        dic_total.update(dic_item)

    print(dic_total)

    # print(json.dumps(dic_total, ensure_ascii=False))

    cursor.close()
    conn.close()

    return json.dumps(dic_total, ensure_ascii=False)
コード例 #9
0
def aldoni_amikon():
    # 의문사항. 플레이어를 연결해야 하는가? 계정을 연결해야 하는가? - 플레이어(캐릭터).
    # 우선은 플레이어를 연결해야 한다고 가정함.
    friend_id = request.args.get('friend_id')
    player_id = request.args.get('player_id')
    # 자기가 뜨면 안됨
    if friend_id == player_id:
        return ERR_SAME_ID

    conn = mysql.connect()
    cursor = conn.cursor()
    cursor.execute(
        'insert into `_friends`(player_unique_id, friend_unique_id) VALUES ("{}", "{}")'
        .format(player_id, friend_id))

    conn.commit()
    cursor.close()
    conn.close()

    return OK
コード例 #10
0
def item_adding():

    # 통상 여기서
    print('????????')
    # 포스트 방식으로 name 태그 붙은 인풋들. 다 잘 받아지긴 함.
    res = request.form

    # 여기서 값을 가져올 시
    # request.form.getlist('항목')[0]
    # 위 처럼 쓴다.
    # 없으면 아예 오류가 떠버림.

    # phase 1. 값을 받아온다.
    # 그리고 이건 sql 테이블명을 직접 뜯어오는 거기 때문에
    # 테이블을 수정하면 이거 꼭!! 바꿔야 한다.

    print(res)

    print('getting requests')

    # try:

    # 아이템 소개 부분.
    item_name = request.form.getlist('item_name')[0]
    item_desc = request.form.getlist('item_desc')[0]
    item_rank = request.form.getlist('item_rank')[0]

    # effects 부분
    itm_atk = request.form.getlist('itm_atk')[0]
    itm_timer = request.form.getlist('itm_timer')[0]
    itm_max_pause = request.form.getlist('itm_max_pause')[0]
    itm_min_pause = request.form.getlist('itm_min_pause')[0]
    itm_collider_size = request.form.getlist('itm_collider_size')[0]
    itm_max_speed = request.form.getlist('itm_max_speed')[0]
    itm_accel = request.form.getlist('itm_accel')[0]
    itm_boost_time = request.form.getlist('itm_boost_time')[0]
    itm_boost_spd = request.form.getlist('itm_boost_spd')[0]
    itm_fever_gauge = request.form.getlist('itm_fever_gauge')[0]
    itm_fever_time = request.form.getlist('itm_fever_time')[0]
    itm_fever_bonus = request.form.getlist('itm_fever_bonus')[0]
    itm_train_hp = request.form.getlist('itm_train_hp')[0]
    itm_spw_chance = request.form.getlist('itm_spw_chance')[0]
    itm_obstacle_power = request.form.getlist('itm_obstacle_power')[0]

    # # 여기에 걸리면 뭔가 기입이 빠졌다는거. 보통 빠질리가 없음.
    # except IndexError as a:
    #     print(a)

    print('checking types...')
    # phase 2. 개인|크루|시즌 템 확인여부
    item_type = int(request.form.getlist('is_item_type')[0])
    print("item_type: {}".format(item_type))
    print('connecting to sql...')
    # 이 시점부터 서버 연결.
    conn = mysql.connect()
    cursor = conn.cursor()

    # phase 3. 유료템 여부 확인. 다만 개인템만 유료템일 가능성이 있음
    # 아이템타입이 0이면 개인템임
    # phase 4병행: 템의 종류에 따라 필요한 테이블을 찾는다.
    table_name = None
    effect_table_name = None
    item_iap = 0
    if item_type == 0:
        print('0')
        # iap 가 존재하는가? 존재하면 유료
        if request.form.getlist('iap'):
            item_iap = 1
        table_name = 'items'
        effect_table_name = 'items_effect'
    # 1 == season_item
    elif item_type == 1:
        print(1)
        table_name = 'season_item'
        effect_table_name = 'season_item_effect'
    # 2 == crew_item
    elif item_type == 2:
        print(2)
        table_name = 'crew_item'
        effect_table_name = 'crew_item_effect'

    print('grabbing table number, table_name == {}'.format(table_name))
    # phase 5. 테이블의 마지막 번호 추출한 후 이미지 저장한다.
    # id_num 맨 끝번호 추출
    cursor.execute('SELECT id_num from {} ORDER BY id_num DESC LIMIT 1'.format(table_name))
    id_res = cursor.fetchone()
    if id_res:
        # 'items 12' 같은 식...
        id_num = table_name + " " + str(int(id_res[0]) + 1)
    else:
        id_num = table_name + " 1"

    print('saving file')
    # 이게 파일임. bool 적용이 되니 그걸로 판단한다.
    img = request.files['image']

    # try:
    #     img = request.files['image']
    # # 여기 걸린다는건 업로드한 사진이 없다는거임. 여기서 걸리면 이상한거임!!!
    # except Exception as e:
    #     img = False
    # # print(bool(img))

    # 이거 기능: 파일명을 더 안정적인 버전으로 변환.
    file_name = secure_filename(id_num)
    print('file_name: {}'.format(file_name))
    print(img)
    img.save(os.path.join(app.config['UPLOAD_FOLDER']+'/pic/items'
                          , file_name + '.{}'.format(img.filename.split('.')[-1])))

    print('inserting. FINALLY.')
    # phase 6. 본격적으로 테이블에 인서트.
    cursor.execute('INSERT INTO {}'
                   '(item_name, item_desc, item_image, item_rank) '
                   'VALUES ("{}", "{}", "{}", "{}")'
                   .format(table_name, item_name, item_desc, file_name, item_rank))
    # 인서트할때 등록된 item_name
    cursor.execute('SELECT LAST_INSERT_ID()')
    current_id = cursor.fetchone()[0]

    # 개인템인 경우 유료템인지 확인한다. 유료면 처리!
    if item_iap == 1:
        print('IAP!!')
        cursor.execute('UPDATE items SET item_iap="{}" WHERE id_num="{}"'
                       .format(item_iap, current_id))

    # items_effect 인서트
    cursor.execute('INSERT INTO {}'
                   '(id_num, itm_atk, itm_timer, itm_max_pause, itm_min_pause, '
                   'itm_collider_size, itm_max_speed, itm_accel, itm_boost_time, '
                   'itm_boost_spd, itm_fever_gauge, itm_fever_time, itm_fever_bonus, '
                   'itm_train_hp, itm_spw_chance, itm_obstacle_power) '
                   'VALUES ("{}", "{}", "{}", "{}", "{}", "{}", "{}", "{}", '
                   '"{}", "{}", "{}", "{}","{}", "{}", "{}", "{}")'
                   .format(effect_table_name, current_id, itm_atk, itm_timer, itm_max_pause, itm_min_pause,
                           itm_collider_size, itm_max_speed, itm_accel, itm_boost_time,
                           itm_boost_spd, itm_fever_gauge, itm_fever_time, itm_fever_bonus,
                           itm_train_hp, itm_spw_chance, itm_obstacle_power))

    conn.commit()
    cursor.close()
    conn.close()
    print('all finished')

    return 'done'
コード例 #11
0
def item_edit(item_type, item_num):
    """
    :param item_type:
    :param item_num:
    :return:
    """

    # phase 1. 우선 리퀘스트를 싹 다 가져온다.

    # 아이템 소개 부분.
    item_name = request.form.getlist('item_name')[0]
    item_desc = request.form.getlist('item_desc')[0]
    item_rank = request.form.getlist('item_rank')[0]

    try:
        page_num = request.form.getlist('page_num')[0]
    except IndexError:
        page_num = 1

    # effects 부분
    itm_atk = request.form.getlist('itm_atk')[0]
    itm_timer = request.form.getlist('itm_timer')[0]
    itm_max_pause = request.form.getlist('itm_max_pause')[0]
    itm_min_pause = request.form.getlist('itm_min_pause')[0]
    itm_collider_size = request.form.getlist('itm_collider_size')[0]
    itm_max_speed = request.form.getlist('itm_max_speed')[0]
    itm_accel = request.form.getlist('itm_accel')[0]
    itm_boost_time = request.form.getlist('itm_boost_time')[0]
    itm_boost_spd = request.form.getlist('itm_boost_spd')[0]
    itm_fever_gauge = request.form.getlist('itm_fever_gauge')[0]
    itm_fever_time = request.form.getlist('itm_fever_time')[0]
    itm_fever_bonus = request.form.getlist('itm_fever_bonus')[0]
    itm_train_hp = request.form.getlist('itm_train_hp')[0]
    itm_spw_chance = request.form.getlist('itm_spw_chance')[0]
    itm_obstacle_power = request.form.getlist('itm_obstacle_power')[0]

    print('checking types...')
    # phase 2. 개인|크루|시즌 템타입 확인여부
    # item_type = int(request.form.getlist('is_item_type')[0])
    print("item_type: {}".format(item_type))
    print('connecting to sql...')

    table = ''
    table_effect = ''
    # item_type에 따라 크루템인지 개인템인지 시즌템인지 등 확인.
    if item_type == 'crew':
        table = 'crew_item'
        table_effect = 'crew_item_effect'
    elif item_type == 'season':
        table = 'season_item'
        table_effect = 'season_item_effect'
    elif item_type == 'prsn':
        table = 'items'
        table_effect = 'items_effect'

    # 이 시점부터 서버 연결.
    conn = mysql.connect()
    cursor = conn.cursor()

    # phase 3. 이미지 확인.

    print('saving file')
    # 이게 파일임. bool 적용이 되니 그걸로 판단한다.
    try:
        img = request.files['image']
    # 여기 걸린다는건 업로드한 사진이 없다는거임.
    except Exception as e:
        img = False

    # 사진이 있을 경우 원래의 파일명으로 덮어씌운다. 없으면 넘기는거.
    if img:
        cursor.execute('SELECT item_image FROM {} WHERE id_num={}'.format(table, item_num))
        img_name = cursor.fetchone()[0]
        try:
            # 기존 사진 삭제
            os.remove(os.path.join(app.config['UPLOAD_FOLDER']+'/pic/items', img_name))
        # se ne povas serĉi la bildon, ĵus pasu.
        except FileNotFoundError:
            pass
        extension = img.filename.split('.')[-1]
        img_name = img_name.split('.')[0] + '.{}'.format(extension)
        # 새로 저장
        img.save(os.path.join(app.config['UPLOAD_FOLDER']+'/pic/items', img_name))
        # update.
        cursor.execute('UPDATE {} SET item_image="{}" WHERE id_num={}'.format(table, img_name, item_num))

    # phase 4. 유료템 여부 확인.
    if request.form.getlist('iap'):
        cursor.execute('UPDATE {} SET item_iap=1 WHERE id_num = {}'.format(table, item_num))
    else:
        cursor.execute('UPDATE {} SET item_iap=0 WHERE id_num = {}'.format(table, item_num))

    # phase 5. 수정 실시.
    # effects
    cursor.execute('UPDATE {} SET itm_atk={}'
                   ', itm_timer={}, itm_max_pause={}, itm_min_pause={}'
                   ', itm_collider_size={}, itm_max_speed={}, itm_accel={}'
                   ', itm_boost_time={}, itm_boost_spd={}, itm_fever_gauge={}'
                   ', itm_fever_time={}, itm_fever_bonus={}, itm_train_hp={}'
                   ', itm_spw_chance={}, itm_obstacle_power={} WHERE id_num={}'
                   .format(table_effect, itm_atk, itm_timer, itm_max_pause, itm_min_pause
                           , itm_collider_size, itm_max_speed, itm_accel
                           , itm_boost_time, itm_boost_spd, itm_fever_gauge
                           , itm_fever_time, itm_fever_bonus, itm_train_hp
                           , itm_spw_chance, itm_obstacle_power, item_num))
    # names and ranks, etc.
    cursor.execute('UPDATE {} SET item_name = "{}"'
                   ', item_rank = {}, item_desc = "{}" WHERE id_num = {}'
                   .format(table, item_name, item_rank, item_desc, item_num))

    conn.commit()
    cursor.close()
    conn.close()

    return redirect(url_for('admin_item_list', item_type=item_type, page_num=page_num))
コード例 #12
0
def admin_item_list():
    # 관리자 창에서 템 목록을 만든다.
    # 여기서 쓰이는 변수는 세가지
    # 1. item_type == 템 종류(기본값은 일반템)
    # 2. sort == 정렬기준(기본값은 번호순)
    # 3. page_num == 페이지 번호(기본값은 당연 1)

    # get, post ambaŭ povas ekzisti.
    if request.method == 'POST':
        # POST params
        res = request.form
        print('res: ', res)
        item_type = res.getlist('item_type')[0]
        sort = res.getlist('sort')[0]
        try:
            page_num = res.getlist('page_num')[0]
        except IndexError:
            page_num = 1

    else:
        # 1. GET 변수들 확인.
        item_type = request.args.get('item_type')
        sort = request.args.get('sort')
        try:
            page_num = request.args.get('page_num')
        except IndexError:
            page_num = 1
    # 한 페이지에 띄울 게시물 수
    base_rows = 50

    # 테이블 기본값. 적혀있지 않거나 잘못 적혔거나 'prsn'일 경우
    table = 'items'
    # 정렬기준 기본값. 적혀있지 않거나 잘못 적혔거나 'id'일 경우
    table_sort = 'id_num'

    # 2. 각 타입을 확인하고 이에 맞춰서 테이블 빼온다. 또한 기입이 안돼있을 경우 기본값을 설정한다.
    # 테이블값
    if item_type == 'season':
        # 시즌템일 경우
        table = 'season_item'
    elif item_type == 'crew':
        # 크루템인 경우
        table = 'crew_item'
    else:
        item_type = 'prsn'
        table = 'items'

    # 정렬기준. 아래 기준중에 crew_num이 빠졌는데 이건 추후 조치필요.
    if sort == 'name':
        table_sort = 'item_name'
    elif sort == 'rank':
        table_sort = 'item_rank'
    elif sort == 'id':
        table_sort = 'id_num'
    else:
        sort = 'id'
        table_sort = 'id_num'

    try:
        # 페이지 번호. 근데 번호가 기입되지 않은 경우에는?? 1로 초기화한다.
        if int(page_num):
            if int(page_num) < 1:
                page_numbro = 1
            else:
                page_numbro = int(page_num)

        else:
            page_numbro = 1
    except:
        page_numbro = 1

    # 2. 테이블을 열고 자료를 가져온다.
    conn = mysql.connect()
    cursor = conn.cursor()

    # 먼져 위에 페이지 번호에 맞는지부터 확인을 해야함.
    cursor.execute('SELECT count(*) FROM {}'.format(table))
    totalnum = cursor.fetchone()[0]
    # print(totalnum)
    # 50개 이하면 페이지가 하나뿐이니 1로 값 초기화.
    if (totalnum / base_rows) < 1:
        page_numbro = 1

    # 여기서 나오는 최대 페이지 수.
    total_page = math.ceil(totalnum / base_rows)

    # 페이징 - 몇번글부터 읽어들이는가?
    starting_number = base_rows * (page_numbro - 1)

    # 3. 템 목록 빼오기. 일반템이면 위, 그외는 아래.
    if table == 'items':
        crew_check = False
        cursor.execute('SELECT i.id_num, i.item_name, i.item_image '
                       ', i.item_iap, i.item_rank FROM {} i LIMIT {}, 50'.format(table, starting_number))
    else:
        crew_check = True
        # 일반템이 아닌 경우에는 소속된 크루가 있기에 같이 빼와야 한다.
        cursor.execute(
            'select i.id_num, i.item_name, i.item_image'
            ', i.item_iap, i.item_rank, i.item_crew , c.crew_name '
            'from {} i left join crew c on c.crew_id = i.item_crew'.format(table))

    items = cursor.fetchall()

    print(items)
    print('crew_check: ', crew_check)

    return render_template('admin_item_list.html', item_list=items, crew_check=crew_check
                           , total_page=total_page, current_page=page_numbro
                           , item_type=item_type, sort_type=sort)
コード例 #13
0
def admin_player_info(player_id):
    """

    :param player_id: 플레이어 고유번호 (유니크 아이디)
    :return:
    """

    # 여러번에 걸쳐서 테이블을 부른다. 한번에 다 하려고 했는데 졸라 머리아픔.

    conn = mysql.connect()
    cursor = conn.cursor()

    # 플레이어 별명, 고유번호, 유저번호, 랭크, 소속크루 번호.
    cursor.execute('select player_nick, player_unique_id, user_num, player_highscore, affiliated_crew_id '
                   'from _players WHERE player_unique_id = {}'.format(player_id))
    # 하나만 떠야 정상임.
    _player = cursor.fetchone()

    print("_player: {}".format(_player))

    # 이메일, 가입일자, 최종 로그인 일자, 등등이 필요. 현재는 미구현.

    # 소속크루
    crew_num = _player[4]
    print("crew_num: {}".format(crew_num))
    # 관리번호. 추후 고유번호로 바꿔야함.
    user_num = _player[2]
    print("user_num: {}".format(user_num))

    # 유저의 아이디.
    cursor.execute('select user_id from _users WHERE _users.user_num = {}'.format(user_num))
    user_id = cursor.fetchone()[0]
    print('user_id: {}'.format(user_id))
    # 소속 크루 관련 정보. 소속 크루 번호에 따른 이름.
    cursor.execute('SELECT crew_id, crew_name from crew WHERE crew_id = {}'.format(crew_num))

    _crew = cursor.fetchone()
    print("_crew: {}".format(_crew))
    # 현존하는 전체 크루 목록.
    cursor.execute('SELECT crew_id, crew_name from crew WHERE crew_exist = 1')
    # 모든 크루 목록.
    crew_list = cursor.fetchall()
    print("crew_list: {}".format(crew_list))

    # 보유 아이템 목록
    cursor.execute('select * from _player_items a '
                   'INNER JOIN items b on a.item_num = b.id_num where a.player_num = {0} '.format(user_num))
                   # 'UNION '
                   # 'select * from _player_items a '
                   # 'INNER JOIN items_iap c on a.item_num = c.id_num where a.player_num = {0}'.format(user_num))
    lists = cursor.fetchall()
    print("lists: {}".format(lists))

    # 가진 돈 목록:
    cursor.execute('select * from _players_cash WHERE _players_cash.player_unique_id = {}'.format(player_id))

    money = cursor.fetchone()
    print('money: {}'.format(money))

    cursor.close()
    conn.close()

    return render_template('admin_user_profile.html', _player=_player, _crew=_crew, crew_list=crew_list, lists=lists
                           , user_id=user_id, money=money)
コード例 #14
0
def item_info(item_type, item_num):
    """
    템 정보 조회·수정·삭제기능
    :param type: 아이템의 유형. 저게 뭐냐에 따라 갈린다.
    :param item_num: 아이템 번호.
    :return:
    """

    # 아이템의 종류. 크루템, 시즌템, 개인템 세종류가 있으니 그에 맞춘다.
    type_list = ['crew', 'season', 'prsn']
    type_mismatch = True
    # 여기에 걸린다면 type 주소가 잘못됐단 소리. 오류 반환한다.
    # 추후에 이렇게 하지 말고 그냥 이전 페이지로 날려야함. 현재 그 페이지가 없는 상황.
    for ty in type_list:
        if ty == item_type:
            type_mismatch = False
            break
    if type_mismatch:
        return 'FAIL! NO SUCH type'

    # 테이블 이름
    table = None
    # 효과 테이블 이름
    table_effect = None
    # item_type에 따라 크루템인지 개인템인지 시즌템인지 등 확인.
    if item_type == 'crew':
        table = 'crew_item'
        table_effect = 'crew_item_effect'
    elif item_type == 'season':
        table = 'season_item'
        table_effect = 'season_item_effect'
    elif item_type == 'prsn':
        table = 'items'
        table_effect = 'items_effect'

    conn = mysql.connect()
    cursor = conn.cursor()

    cursor.execute('show FULL COLUMNS from {}'.format(table_effect))
    # 아이템 능력치 항목(칼럼)명들.
    item_effect_columns = cursor.fetchall()
    print("effect: {}".format(item_effect_columns))
    print('\n {}'.format(item_effect_columns[0]))

    # 해당 템의 아이디번호
    cursor.execute("select * from {} WHERE id_num = {}".format(table, item_num))
    item = cursor.fetchone()
    print("item: {}".format(item))

    cursor.execute("show FULL COLUMNS from {}".format(table))
    # 아이템 정보 관련
    item_info_columns = cursor.fetchall()
    print('item_info_columns: {}'.format(item_info_columns))

    cursor.execute("select * from {} WHERE id_num = {}".format(table_effect, item_num))
    item_info = cursor.fetchone()
    print('info: {}'.format(item_info))

    target = os.path.join(APP_ROUTE, 'pic\\items\\')
    print('target: {}'.format(target))
    # 이미지 저장된 위치. 현재 설정상 /src/pic/items 에 전부 위치
    item_pic_location = "pic/items/{}".format(item[3])

    item_effect_columns_len = len(item_effect_columns)

    # 다 끝내면 연결 바로바로 종료시킨다.
    cursor.close()
    conn.close()

    # item_reg 템 등록중인가? 이 항목은 템을 등록하는게 아니라 조회하는거니 해당사항 아니다.
    return render_template("admin_item_info.html", item=item, item_info_columns=item_info_columns
                           , item_effect_columns=item_effect_columns
                           , item_info=item_info
                           , item_edit=1, item_pic_location=item_pic_location
                           , item_effect_columns_len=item_effect_columns_len
                           , type=item_type)
コード例 #15
0
def trovi_ensaluti(user_id=None, pwd=None, reg=False):
    """
    :param user_id:
    :param pwd:
    :param reg:
    위 세 변수는 회원가입 됐을 시 한정으로만 작동한다.
    :return:
    """
    password = request.args.get('pass')
    identify = request.args.get('id')

    # 먼져 아이디가 있는지 확인한다.
    # 그 후 암호 확인. 아래 함수에서 별도 실행함. 다른 모든 기능들도 이래야함.
    result = verify.kontroli(identify, password)
    print("res", result)

    if not result:
        # 로그인 오류: 암호 또는 아이디이 불일치.
        return error(-4)

    # 여기서부터 본격적인 작업 실시.
    conn = mysql.connect()
    cursor = conn.cursor()

    cursor.execute(
        'SELECT user_num FROM `_users` WHERE user_id="{}"'.format(identify))
    # 유저번호 빼오기.
    user_num = cursor.fetchone()[0]
    print('user_num: {}'.format(user_num))
    # 확인이 끝나면 반환값들 찾아야함.
    # 여기(테이블)서 나와야 할 사안: id, 별명, 소속크루,
    cursor.execute('SELECT player_nick, player_unique_id, affiliated_crew_id '
                   'FROM `_players` WHERE user_num="{}"'.format(user_num))
    player_inf = cursor.fetchone()
    player_unique = player_inf[1]
    player_json = {
        PLAYER_NICK: player_inf[0],
        PLAYER_UNIQUE_ID: player_inf[1],
        CREW_ID: player_inf[2]
    }

    # progreso de kru-o. we need a full list of crew and their names and their
    cursor.execute('select crew_id, crew_name, crew_desc, crew_boundary '
                   'from crew where crew_exist = 1'.format(player_inf[2]))
    crew_inf = cursor.fetchall()
    # 안에 각종 크루 내용물 드가야 함.
    crew_json = {CREW_STATS: {}}
    # sample = {CREW_ID: {CREW_NAME: 0, CREW_DESC: 10, CREW_BOUNDARY: 3 }}
    for crew_ind_inf in crew_inf:
        print(crew_ind_inf)
        crew_ind_json = {
            crew_ind_inf[0]: {
                CREW_NAME: crew_ind_inf[1],
                CREW_DESC: crew_ind_inf[2],
                CREW_BOUNDARY: crew_ind_inf[3]
            }
        }
        # CREW_STATS 안에다가 새로 값을 넣는다.
        crew_json[CREW_STATS].update(crew_ind_json)

    player_json.update(crew_json)

    # ero, mono.
    cursor.execute(
        'SELECT * FROM `_players_cash` WHERE player_unique_id = {}'.format(
            player_unique))
    player_mono = cursor.fetchone()
    player_mono_inf = {
        CASH: {
            1: player_mono[1],
            2: player_mono[2],
            3: player_mono[3],
            4: player_mono[4]
        }
    }

    player_json.update(player_mono_inf)
    """
    NOT NEEDED IN THIS PART.
    COMMENTED INSTEAD OF DELETED SINCE i'LL NEED IT LATER IN OTHER AREA.
    
    # amikoj
    cursor.execute('SELECT friend_unique_id FROM `_friends_copy` '
                   'WHERE player_unique_id = {0} AND friend_accepted = 1 '
                   'UNION '
                   'SELECT player_unique_id FROM `_friends_copy`'
                   'WHERE friend_unique_id = {0}'.format(player_inf[1]))
    amikoj = cursor.fetchall()
    print('amikoj: {}'.format(amikoj))
    friends_list = []

    # 친구가 없으면 돌리는 의미가 없다.
    if amikoj:
        print()
        # 각 친구들의 현황 추가해야함
        for amiko in amikoj:
            # 이름과 별명, 소속크루
            cursor.execute('SELECT player_unique_id, player_nick, affiliated_crew_id '
                           'from `_players` '
                           'WHERE player_unique_id = "{}"'.format(amiko[0]))
            friend_stat = cursor.fetchone()
            # 크루이름.
            cursor.execute('select crew_name '
                           'from crew where crew_id="{}"'.format(friend_stat[2]))
            friend_crew = cursor.fetchone()[0]
            # 친구목록 넣는다.
            friend_json = {PLAYER_UNIQUE_ID: friend_stat[0], PLAYER_NICK: friend_stat[1], CREW_NAME: friend_crew[0]}
            friends_list.append(friend_json)
    else:
        print('no friends')
    # 다 넣었으면 바로 추가작업 진행한다.
    player_json.update({FRIENDS: friends_list})
    print(player_json)
    """
    # todo 테이블을 쪼개되 종류별로 나눠야 함.
    # 테이블에서 프라이머리 키는 둘 이상 됨. 고로 아이템번호와 계정아이디를 엮는다.

    # json.dumps == dic를 JSON.stringify형태로 변환시켜준다.
    stringify = json.dumps(player_json, ensure_ascii=False)
    print('type: {} | {}'.format(type(stringify), stringify))
    # jsoned = json.loads(player_json)
    # print('type: {} | {}'.format(type(jsoned), jsoned))

    # 다 끝내면 연결 바로바로 종료시킨다.
    cursor.close()
    conn.close()

    return stringify
コード例 #16
0
def reg_player():
    """
    플레이어 등록.
    :user_num
    :return:
    """
    # 플레이어 이름(계정아이디)
    user_num = request.args.get('user_num')
    # 게임닉
    nick = request.args.get('nick')
    crew_id = request.args.get('crew_id')
    # test = request
    print('user_num: {}, nick: {}, crew_id: {}'.format(user_num, nick,
                                                       crew_id))
    conn = mysql.connect()
    cursor = conn.cursor()
    print('chk2')
    # 0. 이게 걸릴일은 없긴 한데... 이미 플레이어 등록된 계정에 새로 시도할 경우 중복아이디 오류
    cursor.execute(
        'SELECT player_unique_id from `_players` WHERE user_num = "{}"'.format(
            user_num))
    if cursor.fetchone():
        cursor.close()
        conn.close()
        return ERR_SAME_ID

    print('chk3')
    # 1. 닉이 중복되는지 확인한다.
    # 2. 크루가 존재하는지 확인한다.
    # 2. 등록완료.
    cursor.execute(
        'SELECT player_nick FROM `_players` WHERE player_nick = "{}"'.format(
            nick))
    # 여기 걸리면 닉이 있는거임.
    if cursor.fetchone():
        cursor.close()
        conn.close()
        return error(ERR_SAME_NICK)
    print('chk4')
    # 크루 확인. 존재하는 크루인지 확인한다. 사실 인위적으로 뭘 잘못 건드리지 않는 한 문제는 안생길거라고 예상함.
    # what_the = cursor.execute('select crew_id from crew where crew_id = "{}" AND crew_exist = "{}"'.format(crew_id, str(1)))
    # print('crew? {}'.format(what_the))
    # if not what_the:
    if not cursor.execute(
            'select crew_id from crew where crew_id = "{}" AND crew_exist = "{}"'
            .format(crew_id, str(1))):
        print('checkin')
        cursor.close()
        conn.close()
        return error(ERR_NO_CREW)
    # print("huh", cursor.fetchall())

    # 고유 식별번호.
    unique_number = random.randint(1, 999000)
    # 중복확인
    cursor.execute(
        'SELECT player_unique_id FROM `_players` WHERE player_unique_id = "{}"'
        .format(unique_number))
    sama = cursor.fetchone()  # 여기서 None 반환 안하면 중복임.
    print('sama: {}, unique_number: {}'.format(sama, unique_number))
    # 식별번호가 중복? 그럼 중복 안될때까지 1더한다. Facile, ĉu ne?
    while sama:
        unique_number += 1
        cursor.execute(
            'SELECT player_unique_id FROM `_players` WHERE player_unique_id = "{}"'
            .format(unique_number))
        sama = cursor.fetchone()

    cursor.execute(
        'INSERT INTO `_players`(player_unique_id, user_num, affiliated_crew_id, player_nick) '
        'VALUES ("{}", "{}", "{}", "{}")'.format(unique_number, user_num,
                                                 crew_id, nick))
    conn.commit()
    cursor.close()
    conn.close()

    return 'OK'