2023年政策修订增补工作正在进行中,欢迎参与!
  • Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

User:SegFault/wiki.py

萌娘百科,万物皆可萌的百科全书!转载请标注来源页面的网页链接,并声明引自萌娘百科。内容不可商用。
跳转到导航 跳转到搜索


from urllib.request import urlopen
import json

def getShipName(ship):
    name = ship['title'].strip()
    idx = int(ship['shipIndex'])
    if idx < 1000 or name in [ '重庆', '奥希金斯', '信赖', '萝德尼' ]:
        return name
    elif idx < 2000:
        return name + '·改'
    else:
        return name + '(特殊)'

def getShipEquipts(ship, equipts):
    ret = [ '装备不可' ] * 4
    n = len(ship['equipment'])
    for i in range(n):
        ret[i] = [ e['title'] for e in equipts if e['cid'] == ship['equipment'][i] ][0]
    for i in range(n, ship['equipmentNum']):
        ret[i] = '未装备'
    return ret

def getMainAttr(ship, allShips, equipts):
    st = ship['strengthenTop']
    exp = ship['strengthenLevelUpExp']

    cap = [ 0 ] * 4
    if ship['capacityInit']:
        for i in range(len(ship['capacityInit'])):
            cap[i] = ship['capacityInit'][i]

    eq = [ '装备不可' ] * 4
    n = len(ship['equipment'])
    for i in range(n):
        eq[i] = [ e['title'] for e in equipts if e['cid'] == ship['equipment'][i] ][0]
    for i in range(n, ship['equipmentNum']):
        eq[i] = '未装备'

    t = [ '', '日本', '德国', '英国', '美国', '意大利', '法国', '苏联', '中国', '???' ]
    country = t[int(ship['country'])]
    t = { '戈本':'土耳其', '德·鲁伊特':'荷兰', '苏赫巴托尔':'蒙古', '奥希金斯':'智利' }
    if ship['title'] in t:
        country = t[ship['title']]

    ret = "ships['%s'] = {\n " % getShipName(ship)

    ret += "index=%s, " % int(ship['shipIndex'])
    ret += "rarity=%s, " % ship['star']
    t = [ '', 'CV', 'CVL', 'AV', 'BB', 'BBV', 'BC', 'CA', 'CAV', 'CLT', 'CL', 'BM', 'DD', 'SSV', 'SS', 'SC', 'AP' ]
    ret += "type='%s', " % t[ship['type']]
    ret += "country='%s', " % country
    ret += "class='%s', " % ship['classNo']

    ret = ret[:-1] + '\n '

    ret += "hp=%s, " % ship['hp']
    ret += "atk=%s, " % ship['atk']
    ret += "tpd=%s, " % ship['torpedo']
    ret += "def=%s, " % ship['def']
    ret += "aa=%s, " % ship['airDef']
    ret += "eva=%s, " % ship['miss']
    ret += "as=%s, " % ship['antisub']
    ret += "rec=%s, " % ship['radar']
    ret += "speed=%s, " % ship['speed']
    ret += "luck=%s, " % ship['luck']
    t = [ '', '短', '中', '长', '超长' ]
    ret += "range='%s', " % t[ship['range']]

    ret = ret[:-1] + '\n '

    ret += "atkMax=%s, " % (int(ship['atk']) + st['atk'] // exp)
    ret += "tpdMax=%s, " % (int(ship['torpedo']) + st['torpedo'] // exp)
    ret += "defMax=%s, " % (ship['def'] + st['def'] // exp)
    ret += "aaMax=%s, " % (int(ship['airDef']) + st['air_def'] // exp)
    ret += "evaMax=%s, " % ship['missMax']
    ret += "asMax=%s, " % ship['antisubMax']
    ret += "recMax=%s, " % ship['radarMax']

    ret = ret[:-1] + '\n '

    ret += "cap1=%s, " % cap[0]
    ret += "cap2=%s, " % cap[1]
    ret += "cap3=%s, " % cap[2]
    ret += "cap4=%s, " % cap[3]
    ret += "eq1='%s', " % eq[0]
    ret += "eq2='%s', " % eq[1]
    ret += "eq3='%s', " % eq[2]
    ret += "eq4='%s', " % eq[3]

    ret = ret[:-1] + '\n '

    ret += "sFuel=%s, " % ship['maxOil']
    ret += "sAmmo=%s, " % ship['maxAmmo']
    ret += "rFuel=%s, " % ship['repairOilModulus']
    ret += "rSteel=%s, " % ship['repairSteelModulus']
    ret += "sAtk=%s, " % ship['strengthenSupplyExp']['atk']
    ret += "sTpd=%s, " % ship['strengthenSupplyExp']['torpedo']
    ret += "sDef=%s, " % ship['strengthenSupplyExp']['def']
    ret += "sAa=%s, " % ship['strengthenSupplyExp']['air_def']

    t = [ s for s in allShips if int(s['shipIndex']) - int(ship['shipIndex']) == 1000 ]
    if len(t) != 0:
        mod = { '2':0, '3':0, '4':0, '9':0 }
        for k,v in ship['evoNeedResource'].items():
            mod[k] = v

        ret = ret[:-1] + '\n '
        ret += "mod='%s', " % getShipName(t[0])
        ret += "modLv=%s, " % ship['evoLevel']
        t = { 10441:'驱逐', 10341:'巡洋', 10241:'战列', 10141:'航母', 10541:'潜艇' }
        ret += "coreType='%s', " % t[ship['evoNeedItemCid']]
        ret += "coreNum=%s, " % ship['evoNeedResource'][str(ship['evoNeedItemCid'])]
        ret += "mFuel=%s, " % mod['2']
        ret += "mAmmo=%s, " % mod['3']
        ret += "mSteel=%s, " % mod['4']
        ret += "mBaux=%s, " % mod['9']

    return ret[:-2] + '\n}\n'


def getDialogue(ship):
    name = getShipName(ship)
    ret = "dialogue['" + name + "']= { }\n"
    ret += "dialogue['" + name + "']['登场台词'] = '" + ship['getDialogue'].strip() + "'\n"
    ret += "dialogue['" + name + "']['誓约台词'] = '" + ship['vow'].strip() + "'\n"
    if ship['mainDialogue'] and ship['mainDialogue'][0]:
        ret += "dialogue['" + name + "']['放置台词1'] = '" + ship['mainDialogue'][0].strip() + "'\n"
        ret += "dialogue['" + name + "']['放置台词2'] = '" + ship['mainDialogue'][1].strip() + "'\n"
        ret += "dialogue['" + name + "']['放置台词3'] = '" + ship['mainDialogue'][2].strip() + "'\n"
    if ship['mainDialogue'] and ship['mainDialogue'][6]:
        ret += "dialogue['" + name + "']['夜晚台词1'] = '" + ship['mainDialogue'][6].strip() + "'\n"
        ret += "dialogue['" + name + "']['夜晚台词2'] = '" + ship['mainDialogue'][7].strip() + "'\n"
        ret += "dialogue['" + name + "']['夜晚台词3'] = '" + ship['mainDialogue'][8].strip() + "'\n"
    if ship['atkDialogue']:
        ret += "dialogue['" + name + "']['攻击台词'] = '" + ship['atkDialogue'].strip() + "'\n"
    if ship['nightAtkDialogue']:
        ret += "dialogue['" + name + "']['夜战台词'] = '" + ship['nightAtkDialogue'].strip() + "'\n"
    if ship['breakDialogue']:
        ret += "dialogue['" + name + "']['受伤台词'] = '" + ship['breakDialogue'].strip() + "'\n"
    if ship['formationDialogue']:
        ret += "dialogue['" + name + "']['备战台词'] = '" + ship['formationDialogue'].strip() + "'\n"
    #ret = ret[:-1] + '\n'
    return ret + '\n'

def run(data):
    ships = [ s for s in data['shipCard'] if int(s['npc']) == 0 ]
    f = open('属性.txt', 'w')
    for s in ships:
        f.write(getMainAttr(s, ships, data['shipEquipmnt']))
        f.write('\n')
    f.close()

def formatEquipt(e):
    ret = "equipts['%s'] = { " % e['title']
    ret += 'index=%d, rarity=%d' % (int(e['equipIndex']), e['star'])
    if e['atk'] != 0: ret += ', atk=%d'  % e['atk']
    if e['def'] != 0: ret += ', def=%d'  % e['def']
    if e['torpedo'] != 0: ret += ', tpd=%d'  % e['torpedo']
    if e['antisub'] != 0: ret += ', as=%d'  % e['antisub']
    if e['radar'] != 0: ret += ', rec=%d'  % e['radar']
    if e['hit'] != 0: ret += ', acc=%d'  % e['hit']
    if e['range'] != 0: ret += ', range=%d' % e['range']
    if e['miss'] != 0: ret += ', eva=%d'  % e['miss']
    if e['luck'] != 0: ret += ', luck=%d'  % e['luck']
    if e['aircraftAtk'] != 0: ret += ', bomb=%d'  % e['aircraftAtk']
    if e['airDef'] != 0: ret += ', aa=%d'  % e['airDef']
    if e['airDefCorrect'] != 0: ret += ', aac=%d'  % (e['airDefCorrect'] * 100)
    if e['aluminiumUse'] != 0: ret += ', baux=%d'  % e['aluminiumUse']
    return ret + ' }'

def printShips(data):
    ships = [ s for s in data['shipCard'] if int(s['npc']) == 0 ]

    f = open('台词.txt', 'w')
    for s in ships:
        f.write(getDialogue(s))
    f.close()

    ships = [ s for s in data['shipCard'] if int(s['npc']) == 0 and int(s['shipIndex']) < 2000 ]

    f = open('属性.txt', 'w')
    for s in ships:
        f.write(getMainAttr(s, ships, data['shipEquipmnt']))
        f.write('\n')
    f.close()

    f = open('装备.txt', 'w')
    for equipt in data['shipEquipmnt']:
        if equipt['picId'] == 998: continue
        if equipt['title'] == '喵': continue
        f.write(formatEquipt(equipt))
        f.write('\n')
    f.close()

def download():
    j = urlopen('http://login.jianniang.com/index/getInitConfigs').read().decode('utf-8')
    return json.loads(j)

if __name__ == '__main__':
    data = download()
    printShips(data)