From 0329b5354632031d12eef06c831c44399929e137 Mon Sep 17 00:00:00 2001 From: kavezo Date: Fri, 11 Dec 2020 22:31:24 -0700 Subject: [PATCH] Bug fixes - mirrors breaking when you reach a streak of 7 - mirrors streak not returning to 0 after 7 =w= - mirrors always bumping you to mirror 2 when moving to the next mirror - mirrors reward screen showing you got the amount of mirrors points that you actually have - quests with only one human enemy broke while trying to drop - buying some items restricted you to only one item - couldn't move more than one memoria to the vault at a time --- api/questEndpoints/get.py | 10 +++++++--- api/questEndpoints/send.py | 21 +++++++++++++-------- api/shop.py | 14 +++++++++----- api/userDeck.py | 4 ++-- api/userPiece.py | 6 ++++-- util/storyUtil.py | 3 ++- 6 files changed, 37 insertions(+), 21 deletions(-) diff --git a/api/questEndpoints/get.py b/api/questEndpoints/get.py index 9b06e11..e8de646 100644 --- a/api/questEndpoints/get.py +++ b/api/questEndpoints/get.py @@ -243,6 +243,9 @@ def dropItems(battleId, waveList): conditionalRate = min(1, dropRates[dropId]/numDroppers) for enemyId in enemyIds: + if len(enemyIdxs[enemyId])==0: + continue + numDrops = np.random.binomial(enemyCounts[enemyId], conditionalRate) idxs = np.random.choice(len(enemyIdxs[enemyId]), numDrops, replace=False) removeIdxs = [] @@ -259,6 +262,7 @@ def dropItems(battleId, waveList): for removeIdx in removeIdxs: enemyIdxs[enemyId].remove(removeIdx) # handle drops that can be dropped by anyone + for dropItemId, codes in possibleDropCodes.items(): numEnemies = len(availableIdxs) if numEnemies == 0: continue @@ -282,14 +286,12 @@ def dropItems(battleId, waveList): waveNo, enemyIdx = availableIdxs[availableIdx] waveList[waveNo]['enemyList'][enemyIdx]['dropItemType'] = rarityBox - promisedDrops[code] = promisedDrops.get(code, 0) + 1 removeIdxs.append((waveNo, enemyIdx)) for removeIdx in removeIdxs: availableIdxs.remove(removeIdx) # first clear reward userQuestBattle = dt.getUserObject('userQuestBattleList', battleId) if 'cleared' not in userQuestBattle or not userQuestBattle['cleared'] and 'firstClearRewardCodes' in battle: - waveNo, enemyIdx = availableIdxs[np.random.choice(len(availableIdxs), 1)[0]] code = battle['firstClearRewardCodes'] if code.startswith('RICHE'): rarityBox = 'BOX_BRONZE' @@ -300,7 +302,9 @@ def dropItems(battleId, waveList): giftId = extractGiftCode(code) rarityBox = 'BOX_'+boxTypes[dt.masterGifts[giftId]['rank']] - waveList[waveNo]['enemyList'][enemyIdx]['dropItemType'] = rarityBox + if len(availableIdxs) != 0: + waveNo, enemyIdx = availableIdxs[np.random.choice(len(availableIdxs), 1)[0]] + waveList[waveNo]['enemyList'][enemyIdx]['dropItemType'] = rarityBox promisedDrops[code] = promisedDrops.get(code, 0) + 1 dt.saveJson('data/user/promisedDrops.json', promisedDrops) diff --git a/api/questEndpoints/send.py b/api/questEndpoints/send.py index 478fbea..193d9d8 100644 --- a/api/questEndpoints/send.py +++ b/api/questEndpoints/send.py @@ -33,14 +33,16 @@ def sendArena(request,response): numTurnsCapped = min(max(request['totalTurn'], 2), 7) # cap to 2 and 7 turnBonus = 1.0 + 0.1*(7-numTurnsCapped) - # TODO: find the other codes opponentBonus = {'SAME': 1.0, 'HIGHER': 1.2, 'LOWER': 0.8}[userArenaBattleResult['arenaBattleOpponentType']] - consecBonus = [0,1,2,3,5,7,10][userArenaBattleResult['numberOfConsecutiveWins']] - userArenaBattle['freeRankArenaPoint'] += 10 * turnBonus * opponentBonus + consecBonus + consecBonus = [0,1,2,3,5,7,10][userArenaBattleResult['numberOfConsecutiveWins']-1] + getPoints = 10 * turnBonus * opponentBonus + consecBonus + userArenaBattle['freeRankArenaPoint'] += getPoints userArenaBattleResult['arenaBattleStatus'] = 'WIN' - userArenaBattleResult['numberOfConsecutiveWins'] += 1 - userArenaBattleResult['point'] = userArenaBattle['freeRankArenaPoint'] + userArenaBattleResult['numberOfConsecutiveWins'] = userArenaBattleResult['numberOfConsecutiveWins'] % 7 + 1 + userArenaBattleResult['point'] = getPoints + + dt.setGameUserValue('numberOfFreeRankTotalWins', dt.getGameUserValue('numberOfFreeRankTotalWins')+1) else: userArenaBattleResult['arenaBattleStatus']='LOSE' coins['quantity']+=1 @@ -49,6 +51,9 @@ def sendArena(request,response): userArenaBattle['freeRankArenaPoint'] += 3 userArenaBattleResult['point'] = userArenaBattle['freeRankArenaPoint'] + dt.setGameUserValue('freeRankArenaPoint', userArenaBattle['freeRankArenaPoint']) + gameUser = dt.setGameUserValue('numberOfFreeRankConsecutiveWins', userArenaBattleResult['numberOfConsecutiveWins']) + dt.saveJson('data/user/userArenaBattle.json', userArenaBattle) dt.saveJson('data/user/userArenaBattleResult.json', userArenaBattleResult) @@ -58,6 +63,7 @@ def sendArena(request,response): resultCode="success" response.update({ + 'gameUser': gameUser, 'userArenaBattle' : userArenaBattle, 'userItemList': userItemList, 'userArenaBattleResultList': [userArenaBattleResult], @@ -290,11 +296,10 @@ def send(): # clear if not cleared: resultUserQuestBattle = storyUtil.clearBattle(battle) + storyResponse = storyUtil.progressStory(battle) else: resultUserQuestBattle['lastClearedAt'] = homu.nowstr() - resultUserQuestBattle['clearCount'] = resultUserQuestBattle.get('clearCount', 0) + 1 - # add to stories TODO: move to only happen when first clear - storyResponse = storyUtil.progressStory(battle) + resultUserQuestBattle['clearCount'] = resultUserQuestBattle.get('clearCount', 0) + 1 # missions battle, resultUserQuestBattle, rewardResponse = clearMissions(body, battle) diff --git a/api/shop.py b/api/shop.py index 82b319f..79fd51e 100644 --- a/api/shop.py +++ b/api/shop.py @@ -98,13 +98,14 @@ def getCC(amount): def obtainSet(item, body, args): for code in item['rewardCode'].split(','): itemType = code.split('_')[0] + amount = int(code.split('_')[-1]) if itemType == 'ITEM': - args = dt.updateJson(args, getItem('_'.join(code.split('_')[1:-1]), int(code.split('_')[-1])*body['num'])) + args = dt.updateJson(args, getItem('_'.join(code.split('_')[1:-1]), amount*body['num'])) elif itemType == 'RICHE': - args = dt.updateJson(args, getCC(int(code.split('_')[-1])*body['num'])) + args = dt.updateJson(args, getCC(amount*body['num'])) elif itemType == 'GIFT': - args = dt.updateJson(args, getGift(int(code.split('_')[1]), int(code.split('_')[-1])*body['num'])) - + args = dt.updateJson(args, getGift(int(code.split('_')[1]), amount*body['num'])) + def obtain(item, body, args): if item['shopItemType'] == 'CARD': args = dt.updateJson(args, getCard(item['card']['charaNo'], body['num'])) @@ -116,7 +117,10 @@ def obtain(item, body, args): newGifts = getGift(int(item['gift']['rewardCode'].split('_')[1]), body['num']*int(item['rewardCode'].split('_')[-1])) args['userGiftList'] = args.get('userGiftList', []) + newGifts['userGiftList'] elif item['shopItemType'] == 'ITEM': - newItems = getItem(item['item']['itemCode'], body['num']*int(item['rewardCode'].split('_')[-1]) if 'rewardCode' in item else 1, item['item']) + amount = 1 + if 'rewardCode' in item: + amount = int(item['rewardCode'].split('_')[-1]) + newItems = getItem(item['item']['itemCode'], body['num']*amount, item['item']) args['userItemList'] = args.get('userItemList', []) + newItems['userItemList'] elif item['shopItemType'] == 'LIVE2D': args = dt.updateJson(args, getLive2d(item['chara']['id'], item['live2d']['live2dId'], item['live2d'])) diff --git a/api/userDeck.py b/api/userDeck.py index abbf404..13105b0 100644 --- a/api/userDeck.py +++ b/api/userDeck.py @@ -17,9 +17,9 @@ def save(): # not sure if the request ever doesn't have a deckType on the first time you edit a team if 'deckType' in body: deckType = body['deckType'] - dt.saveJson('data/deckType.json',{'deckType': body['deckType']}) + dt.saveJson('data/user/deckType.json',{'deckType': body['deckType']}) else: - deckType = dt.readJson('data/deckType.json')['deckType'] + deckType = dt.readJson('data/user/deckType.json')['deckType'] userDeck = dt.getUserObject('userDeckList', deckType) if userDeck is None: diff --git a/api/userPiece.py b/api/userPiece.py index 6f370d5..4438636 100644 --- a/api/userPiece.py +++ b/api/userPiece.py @@ -180,7 +180,8 @@ def setProtect(isProtected): def setArchive(isArchive): body = flask.request.json - + + resultUserPieceList = [] for pieceId in body['archiveUserPieceIdList']: targetUserPiece = dt.getUserObject('userPieceList', pieceId) if targetUserPiece is None: @@ -189,10 +190,11 @@ def setArchive(isArchive): targetUserPiece['archive'] = isArchive dt.setUserObject('userPieceList', pieceId, targetUserPiece) + resultUserPieceList.append(targetUserPiece) response = { 'resultCode': 'success', - 'userPieceList': [targetUserPiece] + 'userPieceList': resultUserPieceList } return flask.jsonify(response) diff --git a/util/storyUtil.py b/util/storyUtil.py index c2e4bd1..be928be 100644 --- a/util/storyUtil.py +++ b/util/storyUtil.py @@ -161,6 +161,7 @@ def progressMirrors(response): for i, arenaClass in enumerate(dt.arenaClassList[1:]): if currPoints >= arenaClass['requiredPoint']: arenaClassIdx = i + break if arenaClassIdx == -1: arenaClassIdx = len(dt.arenaClassList)-1 @@ -168,7 +169,7 @@ def progressMirrors(response): response['userArenaBattle']['currentFreeRankClassType'] = dt.arenaClassList[arenaClassIdx]['arenaBattleFreeRankClass'] response['userArenaBattle']['currentFreeRankClass'] = response['userArenaBattle']['nextFreeRankClass'] if 'nextClass' in dt.arenaClassList[arenaClassIdx]: - response['userArenaBattle']['nextFreeRankClass'] = dt.arenaClassList[arenaClassIdx] + response['userArenaBattle']['nextFreeRankClass'] = dt.arenaClassList[arenaClassIdx-1] elif 'nextFreeRankClass' in response['userArenaBattle']: del response['userArenaBattle']['nextFreeRankClass']