diff --git a/README.md b/README.md index 2c0c0d3..173cc50 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,9 @@ [在root过的android手机上运行MAClient](https://github.com/fffonion/MAClient/wiki/%E5%9C%A8Android%E6%89%8B%E6%9C%BA%E4%B8%8A%E8%BF%90%E8%A1%8CMAClient) -Windows用户可以从[这里](http://pan.baidu.com/s/19qI4m)获得二进制文件,或者从[release](releases)下载 +Windows用户可以从[这里](http://pan.baidu.com/s/19qI4m)获得二进制文件,或者从[release](https://github.com/fffonion/MAClient/releases)下载 -其他平台用户:需要下载修改的[httplib2库](https://github.com/fffonion/httplib2-plus),选择安装PyCrypto库 +其他平台用户:需要下载修改的[httplib2库](https://github.com/fffonion/httplib2-plus),和PyCrypto库 ##运行 MAClient可以在支持websocket的浏览器上运行![chaojibang](http://ww1.sinaimg.cn/bmiddle/436919cbjw1ebx3ktnokkg200m00k741.gif)[炒鸡棒在线版](http://ma.mengsky.net/) @@ -23,6 +23,8 @@ MAClient_cli.py [config file] [task]/[commands] ``` 子模块为针对py2x的httplib2;对py3x,你需要下载[针对py3x的httplib2](https://github.com/fffonion/httplib2-plus/tree/python3) +**使用打包的exe的windows用户注意**:路径不能包含中文,这是pyinstaller的缺陷 + ##CONFIG.INI文件说明 关于config.ini可以参考config_sample.ini diff --git a/config_sample.ini b/config_sample.ini index 8f8c6e8..7474cd9 100644 --- a/config_sample.ini +++ b/config_sample.ini @@ -1,88 +1,72 @@ -[placeholder] - [tasker] -b = 'fairy_battle' -f = 'set_card factor|factor_battle' +e = 'e' [system] -server =cn -loglevel =2 -taskname =b -tasker_times =50 -try_factor_times =20 -factor_sleep =10 -explore_sleep =2 -fairy_battle_times =20 -fairy_battle_sleep =0,4,6|4,7,4|7,8,2|8,11,2|11,14,1|14,16,2|16,19,0.8|19,21,1.5|21,24,2 -fairy_battle_sleep_factor=1 -delay =2 +server = tw +loglevel = 1 +taskname = e +tasker_times = 0 +try_factor_times = 20 +factor_sleep = 10 +explore_sleep = 2 +fairy_battle_times = 10 +fairy_battle_sleep = 0,4,6|4,7,4|7,8,2|8,11,2|11,14,1|14,16,2|16,19,0.8|19,21,1.5|21,24,2 +fairy_battle_sleep_factor = 0.8 +delay = 1 +display_ani = 0 user-agent = -device_token = -display_ani=1 -save_traffic=0 -auto_update=1 -enable_plugin=1 +device_token = huiHignkjiuhiuBiu98gUiGuiyuguYfgIUguIGIugugiUGuigYufuYfyuVyuYuyvYU= +save_traffic = 0 +auto_update = 1 +enable_plugin = 1 [tactic] -auto_explore =1 -auto_green_tea =0 -auto_red_tea =0 -auto_red_tea_level =1 -strict_bc =0 -auto_sell_card =1 -auto_fp_gacha =1 -auto_build =1 -auto_fairy_rewards =1 -fp_gacha_bulk =1 -sell_card_warning =1 -fairy_final_kill_hp=30000 -display_ani =1 -del_friend_day =5 -greet_words=ã -factor_getnew=1 +auto_explore = 1 +auto_green_tea = 0 +auto_red_tea = 0 +auto_red_tea_level = 1 +strict_bc = 0 +auto_sell_card = 1 +auto_fp_gacha = 1 +auto_build = 1 +auto_fairy_rewards = 0 +fp_gacha_bulk = 1 +sell_card_warning = 1 +del_friend_day = 5 +fairy_final_kill_hp = 0 +auto_greet = 1 +greet_words = +factor_getnew = 1 [account_tw] username = password = -userid = +user_id = session = -[carddeck] -min = 124 -factor = 124,89,8 - -[fairy] +[account_cn] -[account_cn2] -username = -password = -userid = -session = +[account_cn] [account_cn3] -username = -password = -userid = -session = -[account_cn] -username = -password = -userid = -session = +[fairy] +[carddeck]min = 124factor = 124,89,8 [condition] -fairy_select =fairy.NOT_BATTLED -explore_floor =floor.NOT_FINNISHED| -fairy_select_carddeck =fairy.IS_WAKE and (fairy.IS_MINE and (fairy.TIME_LIMIT<1200 and 'full' or 'min') or 'min') or (BC>50 and (fairy.hp<100000 and 'fast' or 'min') or 'min') -factor =star in [1,2] -explore_area =area.NOT_FINNISHED and area.name in ['Ůĵ','ľ','','Ӿе׷','Ů','УſڵԼ','ϣȪ','εԼ','У']|area.NOT_FINNISHED and area.IS_EVENT -select_card_to_sell =card.star in [1,2] and card.lv<=3 and not card.mid in [124,49,8] +fairy_select = fairy.NOT_BATTLED +explore_area = not FAIRY_ALIVE and area.NOT_FINNISHED and area.IS_EVENT +explore_floor = not FAIRY_ALIVE and floor.NOT_FINNISHED +fairy_select_carddeck = 'min' +factor = deck_rank<=20 +select_card_to_sell = card.star in [1,2] and card.lv<=3 and not card.mid in [124,49,8] factor_limit = BC>20 [record] -last_set_card = -last_set_bc = +last_set_card = 0 +last_set_bc = 0 [plugin] +disabled = bgm + diff --git a/cross_platform.py b/cross_platform.py index ab2eec2..e84c033 100644 --- a/cross_platform.py +++ b/cross_platform.py @@ -10,7 +10,8 @@ PYTHON3 = sys.version.startswith('3') IRONPYTHON = sys.platform == 'cli' EXEBUNDLE = opath.split(sys.argv[0])[1].find('py') == -1 - +LOCALE = locale.getdefaultlocale()[0] +CODEPAGE = locale.getdefaultlocale()[1] convhans = lambda x:x try: import ZhConversion @@ -18,9 +19,9 @@ pass else: chans = ZhConversion.convHans() - if locale.getdefaultlocale()[0] == 'zh_TW': + if LOCALE == 'zh_TW': convhans = chans.toTW - elif locale.getdefaultlocale()[0] == 'zh_HK': + elif LOCALE == 'zh_HK': convhans = chans.toHK getPATH0 = (not EXEBUNDLE or IRONPYTHON) and \ @@ -37,4 +38,4 @@ raw_inputd = PYTHON3 and \ (lambda s:input(s)) \ or \ - (lambda s:raw_input(du8(s).encode(locale.getdefaultlocale()[1] or 'utf-8')).decode(locale.getdefaultlocale()[1] or 'utf-8').encode('utf-8')) + (lambda s:raw_input(du8(s).encode(CODEPAGE or 'utf-8')).decode(CODEPAGE or 'utf-8').encode('utf-8')) diff --git a/db/card.cn.txt b/db/card.cn.txt index 146c470..2f5b300 100644 --- a/db/card.cn.txt +++ b/db/card.cn.txt @@ -275,6 +275,17 @@ 492,华恋型尤廉斯,5,19,使用了制造试作型尤廉斯时完全相同的因子而制作的骑士。外表和原型一模一样,但这次则被制造成了女性骑士。事先进行战术策划能力和政治能力全部继承,并将这些用于和骑士们圆滑地进行交流。然而对魔法的憧憬也同样被继承,到处分发加入了自己调制的媚药的巧克力,这种强硬的计策也十分明显。\n\n11月16日-12月7日,对妖精攻击力300%,Inject Lover,毒媚药入#14,攻击力上升150% 502,华恋型安托瓦内特,5,18,和安托瓦内特制造得一模一样的骑士。积极地和其他骑士进行交流,然而时常一副高高在上的样子则成为阻碍交流的障碍。对喜欢的人一心一意,但还是无法改变高高在上的态度。另一方面,也会做出将自己加以装饰作为礼物这种大胆的行为。另外她的吻是巧克力味的。,Self Important Ribbon,术火/梨凡赠爱,攻击回合数越多\nHP回复越多 548,幻兽型天马,5,14,使用白马的因子和天鹅的因子融合而成的合成兽。将保护伙伴视为自己的使命,每天都保持盾不离手的状态。拥有天真的性格,但每次都会上里丘亚的当就只能用天然呆来形容了。,White Inploitation,白魔骑=庇喜护军,回复卡牌HP的150% +549,幻兽型里昂,2,7,使用猫的因子和豹的因子融合而成的合成兽。自认为有身为「百兽之王」的荣耀,看不起其他猫科动物,喜欢睡午觉。特技是无论在哪儿都能睡着。总是在打哈欠。,Great Roar Lion,威吠雄=狮爪牙斩,战斗胜利后一定概率\n获得经验值1.5倍 +551,幻兽型爱多娜,5,17,使用猫的因子和人类的因子融合而成的合成兽。外表更接近于人类。希望自己变得越来越可爱的漂亮猫娘。从心底将使用百兽之王狮子因子的里昂视为对手。「只知道睡觉算什么百兽之王啊!(明明我长得更可爱的说!)」,她似乎有这样的想法。,Love Cat Stamp,术援/爱萌肉球,攻击回合数越多\n攻击力提升 +552,幻兽型格里芬,4,16,两种因子融合而生,受到突然变异而制造出的合成兽。外表和内心都十分接近人类。通常十分重视感情,然而闻到血的味道就会迷失自我,对敌我双方进行无差别攻击。一旦有人给她甜点就会恢复原来的样子。,Blood Tare Storm,好血滴=鹰爪裂狮,HP在50%以上时\n攻击力上升100% +554,幻兽型黄龙,6,24,使用鳄鱼的因子和蝙蝠的因子融合而成的合成兽。黄龙属于水属性,具有可以操纵水的能力。性格接近于人类,十分友好。黄龙自身十分想结交人类的朋友,然而人们则害怕她奇怪的外表不愿和她接触。\n\n1月17日-1月31日,对妖精攻击力300%,Dazzling Bubble Phi,泡龙神斗#99,攻击回合数越多\nHP回复越多 +555,幻兽型里丘亚,4,15,使用蝙蝠的因子和人类的因子融合而成的合成兽。喜欢恶作剧的孩子。不太喜欢战斗,但是喜欢令敌方或己方陷入混乱。总是在说谎,偶尔说真话的时候也没人相信。,Ultra Sonic Wave,黑蝙激波#21,战斗胜利后一定概率\nBC回复15 +556,幻兽型鳄鱼,2,10,使用鳄鱼的因子和人类的因子融合而成的合成兽。由于皮肤和鳄鱼一样所以没有人类朋友,本人对这一点十分在意。和里丘亚关系很好,是唯一一个能分辨出他究竟是在说谎还是说实话的人。,Laugh Alligator Crash,杀笑碎鳄#46,回复卡牌HP的100% +557,幻兽型阿德拉梅莱克,4,13,使用孔雀的因子和山羊的因子融合而成的合成兽。虽然年纪很小但是脑筋十分灵活,可以领导人们扭转战局的角色。平时十分老实,不喜欢与人争斗。,Sexual Greed Ask,诱爱欲灭#33,自己的HP越高\nHP回复回复越多 +558,幻兽型米克特兰,3,18,使用孔雀的因子和人类的因子融合而成的合成兽。身为战士,对战斗感到荣耀。总是一副威风凛凛的样子,非常认真的人。就算曾经是朋友,一旦转而敌对就会毫不留情地砍上去。,Peacock Draw Bow,放雀羽矢#57,SUPER越多\n攻击力提升(大) +559,幻兽型蒙斯,5,20,使用天鹅的因子和人类的因子融合而成的合成兽。平时一副开朗温柔的样子,一旦到了临战的场面就会被一股冷气所笼罩。喜欢小孩子,总是在扮演合成兽小孩的大姐姐一般的角色。\n\n1月17日-1月31日,对妖精攻击力200%,Pointed Bill Prick,白鸟剑=尖嘴突敌,SUPER越多\n攻击力提升(大) +560,幻兽型希梅尔,5,17,使用黑天鹅的因子和人类的因子融合而成的合成兽。有虐待倾向的性格,看到人们痛苦的样子就会感到兴奋。身穿睡衣只是单纯的兴趣而已。十分在意自己的胸部尺寸。,Darkness Thunder Tornado,术暗/黑包雷鸣,攻击力上升125% +561,幻兽型独角兽,6,20,使用天马的因子和尼卡尔的因子融合,受到突然变异而制造出的合成兽。额头上的角可以拿在手中作为武器使用,并且可以迅速生长。虽然对战争没有抵触情绪,认为外敌要是早点毁灭就好了。\n\n1月1日-1月16日,对妖精攻击力500%,Slow Horn Windy,术风/投角贯闪,HP在50%以下时\n回复卡牌HP的250% 577,第二型索菲昂,6,24,应对圆桌的危机时刻,担当着在亚瑟王逃走的时候,拖住敌人争取时间而制造的骑士,机动性和攻击力的能力非常均衡,对亚瑟王也很顺从。右手装备了特殊魔法的袖套防具,当出力达到最大时能以迅雷不及掩耳的速度挥舞着斧头。在制造时被输入了“就算是牺牲自己的性命也要守护亚瑟王”的程序指令,所以对亚瑟王以外的人或骑士几乎毫不关心。,Double-bit Ax,钢斧双=甲彫碧瞳,HP在50%以下时\n攻击力上升200% 578,虚无型永恒烈焰,6,26,带着龙的因子,在『湖』作用下而生。天生具备非凡的能力,传说是因两种火焰交织而来,实际上并不明确。本人并不在意这个传说的由来。而且即便是跟她很亲近的人也会被其伤害,所以她总是孤身一人。,IceFire,双龙炎=双手火焰,攻击力上升200% 600,特异型小龙女,5,14,只在东方古老传记中出现过的神秘女子,相貌倾城。唯一一个不是通过『湖』产生的奇特骑士,似乎受到不列颠所有亚瑟的召唤,破除时间的界限而降临,但对所有人都保持冷漠的态度,而一直都在等待另外一个人的到来。,冷月窥人,玉女剑法#9,第一轮攻击时\n攻击力上升50% @@ -348,7 +359,7 @@ 672,魔装型奥莲,5,17,生活在魔法庄园中的孤僻少女,身边都是魔法属性的朋友,但自己并未涉足魔法。在他房屋后就是她种植的大片南瓜地,每当万圣节来临之际,那些硕大的南瓜都能卖个好价钱,可以看出来奥莲很有经济头脑。,lost shadow,迷踪魂影#672,攻击力上升100% 674,特异型苏菲,5,19,阳光可爱的外来骑士,开始住在不列颠总是有一些不适应,但是无法抗拒亚瑟们的诱惑,毅然的留了下来,从她好朋友艾琳娜传来的消息,她之所以留下是因为爱上了一名亚瑟。,flyings,术风/听雨飞花,自己的最大BC越多\n攻击力提升(大) 675,特异型艾琳娜,5,15,同样是在『湖』的作用下产生的骑士,但是由于过程中协助的骑士睡着了,导致发生了奇怪的现象。艾琳娜出现后,就拥有了催眠的能力,也许当时在生产时,其他骑士睡着并非偶然,而是被她的天赋所影响。,arouse,术心/幽冥唤醒,好友越多\n攻击力提升越大 -676,纯白型小龙女,5,19,纯粹的复制品是没有记忆的,她将嫁给一个全新的骑士,虽然并不是完全按照本体复制,但她依然保持着非常挑剔的眼光,仿佛一直寻找着曾经在梦里的流浪骑士。总是到深夜才能彻底入眠,心事重重的样子。\n\n12月17日-12月31日,对妖精攻击力300%,冰清玉洁,心炎再生#676,自己的最大BC越多\n攻击力提升(大) +676,纯白型小龙女,5,19,纯粹的复制品是没有记忆的,她将嫁给一个全新的骑士,虽然并不是完全按照本体复制,但她依然保持着非常挑剔的眼光,仿佛一直寻找着曾经在梦里的流浪骑士。总是到深夜才能彻底入眠,心事重重的样子。,冰清玉洁,心炎再生#676,自己的最大BC越多\n攻击力提升(大) 677,纯白型德斯菲亚,5,19,作为一名杰出的候补新娘,平时是天然呆,单纯,喜欢鲜花与星星的魔族少女,但拥有着与表象完全相反的一面,诸位亚瑟可要小心哦。\n\n1月1日-1月16日,对妖精攻击力200%,please,晨辉赞歌#677,攻击力上升200% 678,纯白型琪妮安,5,16,在众多以琪妮安的因子制作的骑士之中,以她的个体差异最为巨大,尽管如此,难以捉摸的性格依然是琪妮安的特点,也因此亚瑟无论被作弄多少次,都完全猜不到她到底在想什么。除了性格难以捉摸外,同时也钓得一手好鱼。,Endless Fishing,术暗/戏言幻葬,HP在50%以下时\n攻击力上升150% 679,纯白型诺蕾,5,16,并不用于直接战斗,作为候补新娘,诺蕾看着教堂里的婚礼好像很害羞的样子,但是她总会说“就算我是幽灵,也还是想体验一下当新娘的感觉。”,Fireworks explode,纯白焰花#680,攻击力上升100% @@ -361,9 +372,17 @@ 686,圣夜型莱比,5,18,为纪念圣诞节制造的骑士。他的任务是与伙伴一起装饰圣诞树。虽然外表看起来很不耐烦,但是心里可高兴着呢。,Christmas Tree Boy,短滑行=初次探索,卡组中卡牌数量越多\n攻击力提升 687,圣夜型李奥德,5,18,为了孤苦伶仃女骑士能度过圣诞节而特别制造的骑士。\n给没有男朋友的女骑士担当男朋友的角色,兼职为别人送上惊喜。因为他帅气的外表,找他的人越来越多。,Marry Me,术心/祝福伪装,HP在60%以下时\n攻击力上升110% 688,圣夜型艾皮,5,17,采集遥远东洋小岛上发现的少女因子制作的骑士。通过拥抱治愈人们的精神创伤。给予人们拥抱并拥有一个温暖的心的人。因为这颗温暖的心,很多外族人正在被治愈。,Free Hug,心惊跳=免费拥抱,自己的最大BC越多\n攻击力提升(大) +689,感谢型妮妙,6,15,某次庆祝仪式的时候用妖精因子复制而来的。对任何事情都抱有感激之心。在梅林的研究室发现迷之药品服下后身体发生了异变,可惜效果持续不长。据说在此事发生之后不久,梅林研究所中被抓住来偷吃药品的女骑士越来越多了。,Million Arthur,术祝/百万乃王,攻击力上升100% +690,异界型雪椰,5,11,穿越时空而来的异界骑士,紫发紫眼,拥有神秘的灵能力,一次意外让她成为了孤独的人,于是她来到了这个新的世界。在这里依然承担着保卫孩子们的责任。,strike,愤恨怒=灵力一击,HP在35%以下时\n回复卡牌HP的150% +691,阿狄拉,5,16,原本在“断绝时代”,用来承担侦查敌国任务的妖精。“断绝时代”的崩坏,侦查的对象消失了,但现在依然不变的进行着侦查任务。一旦断定人类是敌人的间谍,就会单方面进行攻击,对于人们来说是一个非常恐怖的存在。,spirit,Error 9ecc0fa,对手是「妖精」的时候\n攻击力上升200% +692,幻兽型小狐妖,5,12,“断绝时代”,为在森林中迷失方向的人指引方向。帮助寻找歇脚处人安排住处的小狐妖。随着时代的崩溃带来的系统错误,经常会对进入森林中的人进行恶作剧。不会对人或者其他骑士带来致命的伤害。\n\n1月1日-1月16日,对妖精攻击力300%,Fox spirit,精灵珠=甜美惊吓,攻击力上升200% +693,幻兽型九尾狐,5,17,在距离不列颠大陆很远的洞穴中发现的书籍中采集的因子而制造的骑士。看起来像具有魅力外表与突出口才。虽然是活了数千年具有神奇力量的狐狸,但相传可以变为人形。被制造成骑士以后,变身的能力依然存在,可以自由的变成所希望的人形态。\n\n1月17日-1月31日,对妖精攻击力200%,Legendary Fox,读魂心术#693,攻击力上升150% +694,幻兽型白虎,5,18,从遥远的东方之虎皮毛中提取出来的因子制造而成,因为本身水属性体质,在夏天相当抢手。跟朱雀凑一起总会大打出手。拿手好戏就是爪子刮玻璃发出刺耳的声音。\n\n1月1日-1月16日,对妖精攻击力300%,Cold of claw,极寒之爪#694,第一轮攻击时\n攻击力上升200% +695,幻兽型朱雀,5,15,从遥远的东方之鸟的羽翼中提取出来的因子,因为本身火属性体质被大家当成移动取暖器,自身能够听懂鸟类语言经常充当大家的鸟语翻译机。平时一点都不安静,是一个十足的中二病患者。,nirvana,术援/极乐涅槃,攻击回合数越多\n攻击力提升 +696,涅扣儿,5,16,传说在『断绝时代』为了解决财政问题而制作出来的妖精,据说可招来财运。性格怕生不轻易出现在人前,受到惊吓常会暴乱并到处逃窜,破坏了许多贵重物品。至今仍躲藏在不列颠各个隐密的角落里,过着独来独往的生活。谣传如果能够加以收服,性格就会变得温驯又黏人,另外还能得到一大笔不为人知的宝藏。,treasure,Error 42a7fc3,HP在60%以下时\n攻击力上升110% 742,支援型可咪妮,5,18,在『湖』的作用下产生,只身一人忘我修行的少女,拜修行所赐,取得了能够自如地操纵旋棍立刻击中人的命门的技能。她舞动旋棍的姿态是如此优美,在肉体派骑士中格外显眼。不仅对自己要求很严,对其他人也相当严格。对于懒惰的人总会送去轻蔑的眼神。,Dancing,秘孔中=旋棍真髄,第一轮攻击时\n攻击力上升100% 749,支援型凯洛琳,6,26,拿着能够操纵小型云雨的伞型魔法杖的少女。从她可爱的外表你无法想象她拥有着与外表不相称的强力魔法。云雨的主要使用方法是让敌人的视线变得更加糟糕,导致他们的行动变得迟缓。此外,阳光照射的时候,她也执行雨水降下的特殊任务。,Rain make,术水/幼云呼水,自己的最大BC越多\n攻击力提升(大) 754,纯白型毕斯克拉乌莉特,6,25,并不用于直接战斗,培育强力因子计划一环中制造的一名候补新娘。使用了小狼女乌莉特的因子制造而成。由于非常可爱的外表引来大量骑士进行求婚,据说全部都被拒绝了。\n\n1月1日-1月16日,对妖精攻击力300%,Smash the relationship,恋心粉碎#754,自己的最大BC越多\n攻击力提升(大) -755,纯白型妮妙,6,26,并不用于直接战斗,培育强力因子计划一环中制造的一名候补新娘。使用妮妙的因子制造而成。命令她提供因子的时候,不知道为什么事情并不顺利。似乎是和以前的骑士承诺了什么事情的关系,这件事情至今不明。\n\n12月17日-12月31日,对妖精攻击力500%,defense,术土/嫁入妨害,第一轮攻击时\n攻击力上升200% +755,纯白型妮妙,6,26,并不用于直接战斗,培育强力因子计划一环中制造的一名候补新娘。使用妮妙的因子制造而成。命令她提供因子的时候,不知道为什么事情并不顺利。似乎是和以前的骑士承诺了什么事情的关系,这件事情至今不明。,defense,术土/嫁入妨害,第一轮攻击时\n攻击力上升200% 759,纯白型丝宁,5,17,并不用于直接战斗,培育强力因子计划一环中制造的一名候补新娘。使用丝宁的因子制造而成。由于增加了独特的程序,造成食欲大增。为了采取她的因子,尝试着用点心勾引她,至今实验结果还没有报告。,leafage,白柔保=叶子盛束,回复卡牌HP的150% -761,纯白型桂妮薇儿,5,19,并不用于直接战斗,培育强力因子计划一环中制造的一名候补新娘。是桂妮薇儿为了逃避必须嫁给拯救了不列颠的亚瑟王的命运,自己偷偷制造的。\n\n12月17日-12月31日,对妖精攻击力300%,outburst,华丽姫=耻怒爆发,卡片等级MAX时\n回复卡牌HP的200% \ No newline at end of file +761,纯白型桂妮薇儿,5,19,并不用于直接战斗,培育强力因子计划一环中制造的一名候补新娘。是桂妮薇儿为了逃避必须嫁给拯救了不列颠的亚瑟王的命运,自己偷偷制造的。,outburst,华丽姫=耻怒爆发,卡片等级MAX时\n回复卡牌HP的200% \ No newline at end of file diff --git a/db/card.tw.txt b/db/card.tw.txt index 09c82b4..deb85a4 100644 --- a/db/card.tw.txt +++ b/db/card.tw.txt @@ -306,6 +306,7 @@ 393,擄獲型摩根最終形態,5,14,跟其他魔女相同,通過密探奮不顧身的行動得到了毛髮。從中抽取因子後經複製製造而出。\n\n同一因子的交配的干擾結果,使得水準達不到原型的程度。但因為能夠進行實戰而被派往戰場。\n由憎恨亞瑟的魔女所製造出,但複製體卻意外地很天真……?,WinterDestruction,術水/冰牙豪雨,{} 394,異界型 結,5,27,發現於傳說能通往異世界的祠堂中的因子製造出的騎士。\n天然呆,積極向上、擁有拳系能力的第88號鶺鴒。為了葦牙,帶著愛進行著嵩天之戰。,BearKnuckle,八十八=熊拳,最初攻擊時\n攻擊力上升100% 395,異界型甜甜圈貓,5,22,發現於傳說能通往異世界的祠堂中的因子製造出的騎士。\n變異體的貓。充滿了謎題的那個洞也許是看透一切的異界之門。\n處於食物鏈的下級。,ZeroSweetSlide,天輪果斬#0,HP在30%以下時\n回復卡片HP70% +397,異界型小黑,5,15,發現於傳說能通往異世界的祠堂中的因子製造出的騎士。\n與人類訂下契約的上位神靈女孩。有些不諳世事、但到了戰鬥之時,通過同步能夠發揮出強大的能力。,MegaEXE,超越技=滅牙得救世,HP在30%以下時\n攻擊力上升70% 398,異界型雫,5,25,發現於傳說能通往異世界的祠堂中的因子製造出的騎士。\n是悄悄建於坡道上的當鋪的女子高中生店長。通過能夠與物體對話的能力,將人們的內心聯繫在一起。,HeartFul,術心/物質念話,戰鬥勝利後一定機率\nSUPER中幅提升 399,第一型莫德雷德魔劍侵蝕,6,17,憎恨亞瑟的魔女摩高斯潛入亞瑟們的宮殿卡美洛,有意往『湖』的製造計畫中混入的異物。\n\n結合了所有亞瑟的因子和魔女摩高斯的因子的不規則騎士、通過搜索體內的亞瑟因子,能夠正確地『創造』出所有亞瑟的弱點。\n一開始就被迫背負著背叛卡美洛的命運、但亞瑟們因為『可以當做卡美洛因力量而暴走時的安全裝置』,而作為夥伴接受了他。,DragonKillerClarent,王政終焉#99,{} 404,極限突破切爾莉,6,99,在「斷絕時代」以輔助妖精為生的妖精中的一種。曾被認為在「斷絕時代」滅絕了,但近年確認到了生存。有著與生俱來的顏色,好像相應地能力也有所不同,但詳細情況並不明瞭。極限突破切爾莉似乎可以將極限突破的界限通過某種形式進行破壞,然而詳細情況不明。,0,無,{} @@ -598,4 +599,5 @@ 1079,白雪,5,22,從『斷絕時代』就高山上生存的妖精,喜歡下雪,喜歡打雪仗,更喜歡假扮成人類所堆的雪人對小孩子惡作劇。討厭會發出熱源的東西,一感受到就會馬上逃走。但融化到無法變身雪人的狀態,則會失去理智攻擊他人。,聖誕白雪的氣息,Error 12mas25,攻擊力上升200% 1080,聖誕型艾菲,6,20,對人非常關愛的少女,相信自己是神的後代,在聖誕期間目標是帶給人們溫暖與祝福,所以固定會在街頭進行免費擁抱關懷人群的活動,希望可以使這個紛爭不斷的世界,淨化人心。,Free Hug,溫暖擁抱#1225,HP在45%以下時\n回復卡片HP240% 1081,聖誕型哈薇,5,18,從聖誕樹中取出的因子所製作出的妖精騎士。喜歡待在爐火邊聽著亞瑟們所傳授的故事,也相信自己將能在名為『歷史』的這本書上面寫上自己的優良事蹟。,Christmas Tree Girl,術援/溫暖爐光,攻擊回數越多\n攻擊力提升(大) -1082,聖誕型蒂妮,5,16,擁有奇妙口袋的聖誕少女,見到每個人都會送禮物給他們。從神秘的口袋中掏出許多不同的禮物,會依照每個人內心的需求給最真實接近的禮物。,Xmas Present,聖誕夜=無盡禮物,「劍術之城」越多\n攻擊力提升(大) \ No newline at end of file +1082,聖誕型蒂妮,5,16,擁有奇妙口袋的聖誕少女,見到每個人都會送禮物給他們。從神秘的口袋中掏出許多不同的禮物,會依照每個人內心的需求給最真實接近的禮物。,Xmas Present,聖誕夜=無盡禮物,「劍術之城」越多\n攻擊力提升(大) +1083,鳳仙,5,22,遠東傳說中的狐狸精幻化的人型,雖然是魅惑的狐狸精後代,但是意外純情,對於自己心愛的人會一心一意的呵護。對於覬覦自己心愛的人會使盡全力驅趕,但總是沒什麼效果。,Pure Heart,術援/純情獻心,「妖精」在3枚以上\n回復卡片HP120% \ No newline at end of file diff --git a/db/item.cn.txt b/db/item.cn.txt index c62fb6d..3ae8761 100644 --- a/db/item.cn.txt +++ b/db/item.cn.txt @@ -37,5 +37,7 @@ 75,摩提团子,摩提工房特别活动收集道具 76,纯白捧花,大量收集可带来意外惊喜・・・ 77,11连扭蛋点数,12月17日-31日,收集可循环兑换本期全新卡牌! +78,萌兽の尾巴,大量收集可带来意外惊喜・・・ +79,11连扭蛋点数,1月1日-1月17日,收集可循环兑换本期全新卡牌! 103,VIP特权礼包,使用后每天登陆得AP药*1、BC药*1,持续30天 8001,公会徽记,以此鉴证公会的荣耀! \ No newline at end of file diff --git a/db/revision.txt b/db/revision.txt index 6dfb073..b608909 100644 --- a/db/revision.txt +++ b/db/revision.txt @@ -1,4 +1,4 @@ -cn,216,216 -tw,199,168 +cn,218,218 +tw,200,168 kr,225,167 jp,0,0 diff --git a/maclient.py b/maclient.py index a918977..395dd4c 100644 --- a/maclient.py +++ b/maclient.py @@ -30,13 +30,13 @@ import maclient_smart import maclient_plugin -__version__ = 1.64 +__version__ = 1.65 # CONSTS: EXPLORE_BATTLE, NORMAL_BATTLE, TAIL_BATTLE, WAKE_BATTLE = 0, 1, 2, 3 GACHA_FRIENNSHIP_POINT, GACHAgacha_TICKET, GACHA_11 = 1, 2, 4 EXPLORE_HAS_BOSS, EXPLORE_NO_FLOOR, EXPLORE_OK, EXPLORE_ERROR, EXPLORE_NO_AP = -2, -1, 0, 1, 2 BC_LIMIT_MAX, BC_LIMIT_CURRENT = -2, -1 -SERV_CN, SERV_CN2, SERV_TW = 'cn', 'cn2', 'tw' +#SERV_CN, SERV_CN2, SERV_TW = 'cn', 'cn2', 'tw' # eval dicts eval_fairy_select = [('LIMIT', 'time_limit'), ('NOT_BATTLED', 'not_battled'), ('.lv', '.fairy.lv'), ('IS_MINE', 'user.id == self.player.id'), ('IS_WAKE_RARE', 'wake_rare'), ('IS_WAKE', 'wake'), ('IS_GUILD', "race_type=='12'"), ('STILL_ALIVE', "self.player.fairy['alive']")] eval_fairy_select_carddeck = [('IS_MINE', 'discoverer_id == self.player.id'), ('IS_WAKE_RARE', 'wake_rare'), ('IS_WAKE', 'wake'), ('STILL_ALIVE', "self.player.fairy['alive']"), ('LIMIT', 'time_limit')] @@ -55,7 +55,7 @@ def setT(strt): import System.Console System.Console.Title = strt else: - os.system('TITLE %s' % strt) + os.system(convhans('TITLE %s' % strt)) class set_title(threading.Thread): def __init__(self, maInstance): @@ -164,6 +164,7 @@ def load_config(self): self.cfg_strict_bc = self._read_config('tactic', 'strict_bc') == '1' self.cfg_fairy_final_kill_hp = int(self._read_config('tactic', 'fairy_final_kill_hp') or '20000') self.cfg_save_traffic = not self._read_config('system', 'save_traffic') == '0' + self.cfg_auto_greet = (self._read_config('tactic', 'auto_greet') or '1') == '1' self.cfg_greet_words = self._read_config('tactic', 'greet_words') or ( self.loc == 'tw' and random.choice(['大家好.', '問好']) or random.choice(['你好!', '你好!请多指教!'])) self.cfg_factor_getnew = not self._read_config('tactic', 'factor_getnew') == '0' @@ -307,7 +308,7 @@ def _read_config(self, sec, key): if self.cf.has_option(sec, key): val = self.cf.get(sec, key) if sys.platform == 'win32' and not PYTHON3: - val = val.decode('cp936') # .encode('utf-8') + val = val.decode(CODEPAGE) # .encode('utf-8') else: val = '' if val == '':return '' @@ -466,7 +467,7 @@ def login(self, uname = '', pwd = '', fast = False): #ct = self._dopost('check_inspection', xmlresp = False, extraheader = {}, usecookie = False, no2ndkey = True)[1] # self.poster.update_server(ct) pdata='login_id=%s&password=%s&app=and&token=%s' % (self.username, self.password, token) - if not self.loc[:2]=='cn': + if self.loc[:2] not in ['cn','tw']: pdata='S=nosessionid&%s' % pdata self._dopost('notification/post_devicetoken', postdata =pdata , xmlresp = False) resp, ct = self._dopost('login', postdata = 'login_id=%s&password=%s' % (self.username, self.password)) @@ -684,9 +685,8 @@ def set_card(self, deckkey, **kwargs): break logging.sleep('休息%d秒,假装在找卡' % t) time.sleep(t) - postparam = 'C=%s&lr=%s' % (','.join(param), lc) - if self.loc != 'tw':#cn, jp, kr: - postparam = '%s&deck_id=1'%postparam + postparam = 'C=%s&lr=%s&deck_id=1' % (','.join(param), lc) + #if self.loc != 'tw':#cn, jp, kr: if self._dopost('cardselect/savedeckcard', postdata = postparam)[0]['error']: break logging.info('成功更换卡组为%s cost%d' % (deckkey, last_set_bc)) @@ -1472,7 +1472,7 @@ def fairy_floor(f = fairy): if not need_tail: fairy_floor() # 如果是醒妖则问好 - if bt_type == WAKE_BATTLE: + if bt_type == WAKE_BATTLE and self.cfg_auto_greet: self.like() @plugin.func_hook @@ -1556,7 +1556,7 @@ def friends(self, choice = '', autodel = False): deluser = user maxlogintime = user.logintime i += 1 - print(du8(strf)) + print(du8(strf).encode(locale.getdefaultlocale()[1] or 'utf-8', 'replace')) confirm = False if deluser != None: if not autodel: @@ -1602,7 +1602,7 @@ def friends(self, choice = '', autodel = False): i, user.name, user.town_level, user.last_login, user.friends, user.friend_max, user.cost ) i += 1 - print(du8('%s%s' % ('申请列表:\n', strf))) + print(du8('%s%s' % ('申请列表:\n', strf)).encode(locale.getdefaultlocale()[1] or 'utf-8', 'replace')) adduser = raw_inputd('选择要添加的好友序号,空格分割,序号前加减号表示拒绝> ').split(' ') if adduser != ['']: for u in adduser: @@ -1644,7 +1644,7 @@ def friends(self, choice = '', autodel = False): i, user.name, user.town_level, user.last_login, user.friends, user.friend_max, user.cost ) i += 1 - print(du8('%s%s' % ('搜索结果:\n', strf))) + print(du8('%s%s' % ('搜索结果:\n', strf)).encode(locale.getdefaultlocale()[1] or 'utf-8', 'replace')) usel = raw_inputd('选择要添加的好友序号, 空格分割多个,回车返回> ') uids = [] for u in usel.split(' '): @@ -1767,13 +1767,11 @@ def point_setting(self): @plugin.func_hook def factor_battle(self, minbc = 0, sel_lake = ''): - if self.loc =='tw': - def get_parts(): - self._dopost('battle/area', xmlresp = False) - return self._dopost('battle/competition_parts?redirect_flg=1', noencrypt = True) - else: - def get_parts(): - return self._dopost('battle/area') + # if self.loc =='tw': + # def get_parts(): + # self._dopost('battle/area', xmlresp = False) + # return self._dopost('battle/competition_parts?redirect_flg=1', noencrypt = True) + # else: minbc = int(minbc) # try count trycnt = self._read_config('system', 'try_factor_times') @@ -1781,7 +1779,7 @@ def get_parts(): trycnt = '999' sel_lake = sel_lake.split(',') battle_win = 1 - resp, cmp_parts_ct = get_parts() + resp, cmp_parts_ct = self._dopost('battle/area') if resp['error']: return cmp_parts = cmp_parts_ct.body.competition_parts @@ -1911,7 +1909,7 @@ def get_parts(): self.player.bc['current'], self.player.bc['max'])) time.sleep(8.62616513) - resp, cmp_parts_ct = get_parts() + resp, cmp_parts_ct = self._dopost('battle/area') if result == '1': # 赢过一次就置为真 battle_win += 1 cmp_parts = cmp_parts_ct.body.competition_parts diff --git a/maclient_cli.py b/maclient_cli.py index ce7b7c9..9b12336 100644 --- a/maclient_cli.py +++ b/maclient_cli.py @@ -155,7 +155,7 @@ def read_proxy(work = 0): '\n| 分割多个,空格分隔命令与参数\n' '插件的附加命令:%s\n' '以t:开头可执行任务\n' - 'http://www.yooooo.us/2013/maclient' % ','.join(maclient1.plugin.extra_cmd.keys()))) + 'http://yooooo.us/2013/maclient' % ','.join(maclient1.plugin.extra_cmd.keys()))) elif ch == '------': print(du8('此功能暂停使用')) continue diff --git a/maclient_network.py b/maclient_network.py index 2b1ad1d..0c240b4 100644 --- a/maclient_network.py +++ b/maclient_network.py @@ -49,7 +49,7 @@ class Crypt(): def __init__(self,loc): self.init_cipher(loc=loc) self.random_cipher_plain='' - if loc[:2]=='cn': + if loc in ['cn','tw']: self.gen_rsa_pubkey() def gen_cipher_with_uid(self, uid, loc): @@ -87,7 +87,7 @@ def init_cipher(self,loc = 'cn', uid = None): self.cipher_res = self._gen_cipher(_key['res']) def decode_res(self, bytein): - return cipher.decrypt(bytein) + return self.cipher_res.decrypt(bytein) def decode_data(self, bytein): if len(bytein) == 0: @@ -148,12 +148,12 @@ def decrypt_file(self, filein, fileout, ext = 'png'): pass #ht = httplib2.Http(timeout = 15,proxy_info = httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP_NO_TUNNEL, "192.168.124.1", 23300)) -ht = httplib2.Http(timeout = 15) + class poster(): def __init__(self, loc, logger, ua): self.cookie = '' - # self.maClientInstance=mac + self.ht = httplib2.Http(timeout = 15) # ironpython版的httplib2的iri2uri中用utf-8代替了idna,因此手动变回来 self.rollback_utf8 = sys.platform.startswith('cli') and \ (lambda dt:dt.decode('utf-8')) or\ @@ -180,7 +180,7 @@ def load_svr(self, loc, ua=''): self.header = dict(headers_main) self.header.update(headers_post) if self.shortloc in ['cn','kr']: - ht.add_credentials("iW7B5MWJ", "8KdtjVfX") + self.ht.add_credentials("iW7B5MWJ", "8KdtjVfX") if ua != '': if '%d' in ua: # formatted ua self.header['User-Agent'] = ua % getattr(maclient_smart, 'app_ver_%s' % self.shortloc) @@ -212,7 +212,7 @@ def post(self, uri, postdata = '', usecookie = True, setcookie = True, extrahead if usecookie: header.update({'Cookie':self.cookie}) if not noencrypt : - if self.shortloc=='cn':#pass key to server + if self.shortloc in ['cn','tw']:#pass key to server #add sign to param self.crypt.gen_random_cipher() sign='K=%s'%self.crypt.urlunescape( @@ -236,7 +236,7 @@ def post(self, uri, postdata = '', usecookie = True, setcookie = True, extrahead callback_hook = lambda x:x while trytime < ttimes: try: - resp, content = ht.request('%s%s%s' % (serv[self.servloc], uri, not noencrypt and '?cyt=1' or ''), method = 'POST', headers = header, body = postdata, callback_hook = callback_hook, chunk_size = None) + resp, content = self.ht.request('%s%s%s' % (serv[self.servloc], uri, not noencrypt and '?cyt=1' or ''), method = 'POST', headers = header, body = postdata, callback_hook = callback_hook, chunk_size = None) except socket.error as e: if e.errno == None: err = 'Timed out' @@ -254,7 +254,7 @@ def post(self, uri, postdata = '', usecookie = True, setcookie = True, extrahead except TypeError: # 使用了官方版的httplib2 if savetraffic and self.issavetraffic: self.logger.warning(du8('你正在使用官方版的httplib2,因此省流模式将无法正常工作')) - resp, content = ht.request('%s%s%s' % (serv[self.servloc], uri, not noencrypt and '?cyt=1' or ''), method = 'POST', headers = header, body = postdata) + resp, content = self.ht.request('%s%s%s' % (serv[self.servloc], uri, not noencrypt and '?cyt=1' or ''), method = 'POST', headers = header, body = postdata) break else: if int(resp['status']) < 400: diff --git a/maclient_smart.py b/maclient_smart.py index 0ab7f04..a834c1c 100644 --- a/maclient_smart.py +++ b/maclient_smart.py @@ -6,13 +6,13 @@ import time import math import itertools -__version__ = '1.1-build20131226' +__version__ = '1.1-build20140103' # server specified configutaions max_card_count_cn = max_card_count_kr = max_card_count_tw = max_card_count_jp = 250 max_fp_cn = max_fp_kr = 50000 max_fp_tw = max_fp_jp = 1000000 -key_tw = {'res': 'A1dPUcrvur2CRQyl', 'helper':'A1dPUcrvur2CRQyl', 'crypt':'rBwj1MIAivVN222b'} -key_cn = key_kr = {'res': 'A1dPUcrvur2CRQyl', 'helper':'A1dPUcrvur2CRQyl', 'crypt':'011218525486l6u1'} +#key_tw = {'res': 'A1dPUcrvur2CRQyl', 'helper':'A1dPUcrvur2CRQyl', 'crypt':'rBwj1MIAivVN222b'} +key_cn = key_tw = key_kr = {'res': 'A1dPUcrvur2CRQyl', 'helper':'A1dPUcrvur2CRQyl', 'crypt':'011218525486l6u1'} key_jp = {'res': 'A1dPUcrvur2CRQyl', 'helper':'A1dPUcrvur2CRQyl', 'crypt':'uH9JF2cHf6OppaC1'} key_rsa_pool = [ "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANV2ohKiVs/2cOiGN7TICmQ/NbkuellbTtcKbuDbIlBMocH+Eu0n2nBYZQ2xQbAv+E9na8K2FyMyVY4+RIYEJ+0CAwEAAQ==", @@ -26,8 +26,9 @@ "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANr/4m+Z7qKlr2kmyZmgNjf49LSgm6QP5JZwk+Wi2m8E68sUMyfKkhr1t2OXlvNAEfQrSYHu6rlXqpSf2o1zvSkCAwEAAQ==", "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANqJlJznVfrsXd/Nnn4L7E7Kcz2u1YwIExrJC3uyxsEk+HiCnNJ8ZUFtkc7XeZKEyw2UFfiQ73SOFAzhVfkCCS0CAwEAAQ==", ] + app_ver_cn = 102 -app_ver_tw = 102 +app_ver_tw = 200 app_ver_kr = 105 app_ver_jp = 236 # wake diff --git a/maclient_update.py b/maclient_update.py index 45205a1..9b37b62 100644 --- a/maclient_update.py +++ b/maclient_update.py @@ -50,7 +50,7 @@ def check_revision(loc, rev_tuple): def update_master(loc, need_update, poster): new_rev = [None, None] if need_update[0]: - a, b = poster.post('masterdata/card/update', postdata = '%s&revision=0' % poster.cookie, noencrypt = loc=='tw') + a, b = poster.post('masterdata/card/update', postdata = '%s&revision=0' % poster.cookie) resp = XML2Dict().fromstring(b.replace('&', '--').replace('--#', '&#')).response # 不替换会解析出错摔 cards = resp.body.master_data.master_card_data.card strs = [] @@ -71,7 +71,7 @@ def update_master(loc, need_update, poster): new_rev[0] = resp.header.revision.card_rev save_revision(loc, cardrev = new_rev[0]) if need_update[1]: - a, b = poster.post('masterdata/item/update', postdata = '%s&revision=0' % poster.cookie, noencrypt = loc=='tw') + a, b = poster.post('masterdata/item/update', postdata = '%s&revision=0' % poster.cookie) resp = XML2Dict().fromstring(b).response itmes = resp.body.master_data.master_item_data.item_info strs = [] diff --git a/utils/download_full.py b/utils/download_full.py index 5631d2a..d4e7d5a 100644 --- a/utils/download_full.py +++ b/utils/download_full.py @@ -44,7 +44,7 @@ def download_card(cardid, level = CARD_NORM): method = 'GET', headers = {'ua':'Million/%s' % getattr(maclient_smart, 'app_ver_%s' % loc), 'accept':'gzip', 'connection':'keep-alive'}) return content - +ci=maclient_network.Crypt('cn') def fuckall(_loc = 'tw', download_dir = '.'): global loc loc = _loc @@ -82,7 +82,7 @@ def fuckall(_loc = 'tw', download_dir = '.'): skip.append('%d_%d' % (i, j)) print('error') else: - dt = maclient_network.decode_res(a) + dt = ci.decode_res(a) open('%s/%s-%s_%d.png' % (download_dir, cname[i][0].decode('utf-8'), i, j), 'wb').write(dt) time.sleep(random.randint(1, 3))