def ranking(request, village_index=None): user_id = request.user.id user = request.user if user.is_region_selected is False: return redirect("selectRegion") selected_village_index = getVillageIndex(request, user, village_index) if (selected_village_index is 'outOfList'): return redirect('ranking') allPlayers = getAllPlayersOrderedByPoints() print(allPlayers) my_villages = user.get_my_villages() data = { 'villages_info': my_villages, 'selectedVillage': my_villages[selected_village_index], 'gameConfig': gameConfig, 'allPlayers': allPlayers, 'unviewedReportExists': user.is_unviewed_reports_exists, 'page': 'ranking' } data = json.loads(json.dumps(data, cls=DjangoJSONEncoder)) my_villages = json.loads(json.dumps(my_villages, cls=DjangoJSONEncoder)) return render(request, 'ranking.html', { 'myVillages': my_villages, 'data': data })
def playerProfile(request, player_id, village_index=None): user = request.user if user.is_region_selected is False: return redirect("selectRegion") selected_village_index = getVillageIndex(request, user, village_index) if (selected_village_index == 'outOfList'): return redirect('playerProfile') try: player = Users.objects.get(id=player_id) except: #TODO Handle this (player_id doesnt exists) return None player_info = player.get_player_profile_dict() my_villages = player.get_my_villages() data = { 'selectedVillage': my_villages[selected_village_index], 'gameConfig': gameConfig, 'profileOfPlayerID': player_id, 'profileOfPlayerInfo': player_info, 'unviewedReportExists': user.is_unviewed_reports_exists, 'page': 'playerProfile' } current_user = {'id': user.id} data = json.loads(json.dumps(data, cls=DjangoJSONEncoder)) my_villages = json.loads(json.dumps(my_villages, cls=DjangoJSONEncoder)) return render(request, 'profiles/playerProfile.html', { 'currentUser': current_user, 'myVillages': my_villages, 'data': data })
def clans(request, village_index=None): user_id = request.user.id user = request.user if user.is_region_selected is False: return redirect("selectRegion") selected_village_index = getVillageIndex(request, user, village_index) if (selected_village_index is 'outOfList'): return redirect('myVillage') return render(request, 'clans.html')
def villages(request, village_index=None): user_id = request.user.id user = request.user if user.is_region_selected is False: return redirect("selectRegion") selected_village_index = getVillageIndex(request, user, village_index) if (selected_village_index is 'outOfList'): return redirect('myVillage') totalOnMove = [] totalIncomingStrangerTroops = [] my_villages = user.get_my_villages() for village in my_villages: for task_id, onMoveElement in village['troops']['onMove'].items(): onMoveElement['task_id'] = task_id totalOnMove.append(onMoveElement) for task_id, incomingStrangerTroopsElement in village['troops'][ 'incomingStrangerTroops'].items(): incomingStrangerTroopsElement['task_id'] = task_id totalIncomingStrangerTroops.append(incomingStrangerTroopsElement) print("wololo") print(totalOnMove) print(totalIncomingStrangerTroops) print("wololo") data = { 'totalIncomingStrangerTroops': totalIncomingStrangerTroops, 'totalOnMove': totalOnMove, 'villages_info': my_villages, 'selectedVillage': my_villages[selected_village_index], 'gameConfig': gameConfig, 'unviewedReportExists': user.is_unviewed_reports_exists, 'page': 'myVillages' } data = json.loads(json.dumps(data, cls=DjangoJSONEncoder)) my_villages = json.loads(json.dumps(my_villages, cls=DjangoJSONEncoder)) print(data['selectedVillage']) return render(request, 'villages.html', { 'myVillages': my_villages, 'data': data })
def get(self, request, village_index=None): # user_id = request.user.id # user = request.user # TODO revert when auth added user = request.user if user.is_region_selected is False: return redirect("selectRegion") selected_village_index = getVillageIndex(request, user, village_index) if (selected_village_index is 'outOfList'): return redirect('villageApi') totalOnMove = [] totalIncomingStrangerTroops = [] my_villages = user.get_my_villages() for village in my_villages: for task_id, onMoveElement in village['troops']['onMove'].items(): onMoveElement['task_id'] = task_id totalOnMove.append(onMoveElement) for task_id, incomingStrangerTroopsElement in village['troops'][ 'incomingStrangerTroops'].items(): incomingStrangerTroopsElement['task_id'] = task_id totalIncomingStrangerTroops.append( incomingStrangerTroopsElement) print("wololo") print(totalOnMove) print(totalIncomingStrangerTroops) print("wololo") my_villages = json.loads(json.dumps(my_villages, cls=DjangoJSONEncoder)) data = { 'totalIncomingStrangerTroops': totalIncomingStrangerTroops, 'totalOnMove': totalOnMove, 'villagesInfo': my_villages, 'selectedVillage': my_villages[selected_village_index], 'gameConfig': gameConfig, 'unviewedReportExists': user.is_unviewed_reports_exists, 'page': 'myVillages', } return Response(data)
def cancelUpgrade(request): now = datetime.datetime.now(pytz.utc) village_id = request.POST.get("village_id") building_path = request.POST.get("building_path") firing_time = request.POST.get("firingTime") user_id = request.user.id user = request.user user.cancelUpgrading(village_id, building_path, now) user.update() selected_village_index = getVillageIndex(request, user, None) newResources = user.myVillages[selected_village_index]['buildings'][ 'resources'] data = {'result': 'Success', 'newResources': newResources} return Response(data)
def report(request, report_index, village_index=None): user_id = request.user.id user = request.user if user.is_region_selected is False: return redirect("selectRegion") selected_village_index = getVillageIndex(request, user, village_index) if (selected_village_index == 'outOfList'): return redirect('reportsList') print(type(report_index)) reports = user.get_reports() reports[report_index]['viewed'] = True if user.is_unviewed_reports_exists: viewed_all_reports = True for reportElement in reports: if reportElement['viewed'] == False: viewed_all_reports = False break if viewed_all_reports: user.is_unviewed_reports_exists = False user.setUnviewedReportExists(False) user.setReports(reports) my_villages = user.get_my_villages() data = { 'report_index': report_index, 'user_id': user.id, 'villages_info': my_villages, 'selectedVillage': my_villages[selected_village_index], 'gameConfig': gameConfig, 'report': reports[report_index], 'unviewedReportExists': user.is_unviewed_reports_exists, 'page': 'report' } data = json.loads(json.dumps(data, cls=DjangoJSONEncoder)) my_villages = json.loads(json.dumps(my_villages, cls=DjangoJSONEncoder)) return render(request, 'report.html', { 'myVillages': my_villages, 'data': data })
def map(request, village_index=None): user_id = request.user.id user = request.user my_villages = user.get_my_villages() if user.is_region_selected is False: return redirect("selectRegion") selected_village_index = getVillageIndex(request, user, village_index) if (selected_village_index is 'outOfList'): return redirect('map') totalOnMove, totalIncomingStrangerTroops = [], [] my_villages = user.get_my_villages() for village in my_villages: for task_id, onMoveElement in village['troops']['onMove'].items(): onMoveElement['task_id'] = task_id totalOnMove.append(onMoveElement) for task_id, incomingStrangerTroopsElement in village['troops'][ 'incomingStrangerTroops'].items(): incomingStrangerTroopsElement['task_id'] = task_id totalIncomingStrangerTroops.append(incomingStrangerTroopsElement) public_villages = Villages.objects.exclude(user_id=None) public_villages_info = get_public_villages(user_id) data = { 'selectedVillage': my_villages[selected_village_index], 'gameConfig': gameConfig, 'unviewedReportExists': user.is_unviewed_reports_exists, 'page': 'map' } data = json.loads(json.dumps(data, cls=DjangoJSONEncoder)) my_villages = json.loads(json.dumps(my_villages, cls=DjangoJSONEncoder)) return render( request, 'map.html', { 'publicVillages': json.dumps(public_villages_info), 'myVillages': my_villages, 'data': data })
def commandCenter(request, village_index=None): user = request.user if user.is_region_selected is False: return redirect("selectRegion") selected_village_index = getVillageIndex(request, user, village_index) if (selected_village_index == 'outOfList'): return redirect('commandCenter') #TODO improve this code target_village_id = request.POST.get("commandTargetVillageID") target_village = Villages.objects.get(id=target_village_id) target_village_info = target_village.get_village_profile_dict() my_villages = user.get_my_villages() source = my_villages[selected_village_index] target = target_village_info # DRY !!! path = calculate_map_pathfinding(source['coords'], target['coords']) data = { 'selectedVillage': my_villages[selected_village_index], 'gameConfig': gameConfig, 'targetVillage': target_village_info, 'unviewedReportExists': user.is_unviewed_reports_exists, 'distance': len(path), 'page': 'commandCenter' } current_user = {'id': user.id} data = json.loads(json.dumps(data, cls=DjangoJSONEncoder)) my_villages = json.loads(json.dumps(my_villages, cls=DjangoJSONEncoder)) public_villages = get_public_villages(user) return render( request, 'commandCenter.html', { 'currentUser': current_user, 'publicVillages': json.dumps(public_villages), 'myVillages': my_villages, 'data': data })
def reportsList(request, village_index=None): print(0, str(datetime.datetime.now())) user_id = request.user.id user = request.user if user.is_region_selected is False: return redirect("selectRegion") selected_village_index = getVillageIndex(request, user, village_index) if (selected_village_index is 'outOfList'): return redirect('myVillage') print(2, str(datetime.datetime.now())) # # re = Reports.objects.all()[0] # print(re) # print(re.__dict__) # reports = user.get_reports() print(reports) print(3, str(datetime.datetime.now())) my_villages = user.get_my_villages() data = { 'user_id': user.id, 'villages_info': my_villages, 'selectedVillage': my_villages[selected_village_index], 'gameConfig': gameConfig, 'reports': reports, 'unviewedReportExists': user.is_unviewed_reports_exists, 'page': 'reports' } data = json.loads(json.dumps(data, cls=DjangoJSONEncoder)) my_villages = json.loads(json.dumps(my_villages, cls=DjangoJSONEncoder)) return render(request, 'reports.html', { 'myVillages': my_villages, 'data': data })
def barracks(request, village_index=None): user_id = request.user.id user = request.user if user.is_region_selected is False: return redirect("selectRegion") selected_village_index = getVillageIndex(request, user, village_index) if (selected_village_index is 'outOfList'): return ('barracks') my_villages = user.get_my_villages() selected_village = user.get_my_villages()[selected_village_index] # vil_obj = Villages.objects.get(id=selected_village['village_id']) print(vil_obj.get_last_training_queue_by_unit_type('infantry')) # data = { 'selectedVillage': selected_village, 'gameConfig': gameConfig, 'unviewedReportExists': user.is_unviewed_reports_exists, 'page': 'barracks', } data = json.loads(json.dumps(data, cls=DjangoJSONEncoder)) my_villages = json.loads(json.dumps(my_villages, cls=DjangoJSONEncoder)) return render( request, 'buildingPages/barracks.html', { 'myVillages': my_villages, 'data': data, 'infantry_training_queue': vil_obj.training_queues.filter(unit_type="infantry").all() })
def post(self, request, village_index): now = datetime.datetime.now(pytz.utc) user = request.user village_id = request.data.get("village_id") print("village_id arrived => ", village_id) building_path = request.data.get("building_path") # if user.regionSelected is False : # return redirect("selectRegion") selected_village_index = getVillageIndex(request, user, village_index) village = user.get_my_villages()[selected_village_index] #upgrade_levelTo = village[building_path]['level'] + 1 if '.' in building_path: # print(village['resources'],"kololo") upgrade_levelTo = str( int(village['buildings']['resources'][building_path.split('.') [1]]['level']) + 1) required_clay = gameConfig['buildings']['resources'][ building_path.split( '.')[1]]['upgradingCosts'][upgrade_levelTo]['clay'] required_iron = gameConfig['buildings']['resources'][ building_path.split( '.')[1]]['upgradingCosts'][upgrade_levelTo]['iron'] required_wood = gameConfig['buildings']['resources'][ building_path.split( '.')[1]]['upgradingCosts'][upgrade_levelTo]['wood'] else: upgrade_levelTo = str( int(village['buildings'][building_path]['level']) + 1) required_clay = gameConfig['buildings'][building_path][ 'upgradingCosts'][upgrade_levelTo]['clay'] required_iron = gameConfig['buildings'][building_path][ 'upgradingCosts'][upgrade_levelTo]['iron'] required_wood = gameConfig['buildings'][building_path][ 'upgradingCosts'][upgrade_levelTo]['wood'] # retrieve required resources from gameConfig.json with upgrade_level #reqiured_time = getRequiredTimeForUpgrade(village, building_path, upgrade_levelTo) reqiured_time = 10 # required_clay = 0 # required_iron = 0 # required_wood = 0 current_resources = user.get_current_resources(village_id) wood_total = current_resources['woodCamp'] clay_total = current_resources['clayPit'] iron_total = current_resources['ironMine'] if (wood_total >= required_wood and iron_total >= required_iron and clay_total >= required_clay): with transaction.atomic(): # update sum and lastInteractionDate of resources (-cost) set_sum_and_last_interaction_date_of_resource( user.id, village_id, 'woodCamp', wood_total - required_wood, now) set_sum_and_last_interaction_date_of_resource( user.id, village_id, 'clayPit', clay_total - required_clay, now) set_sum_and_last_interaction_date_of_resource( user.id, village_id, 'ironMine', iron_total - required_iron, now) task_id = schedule_upgrade_building.apply_async( (user.id, village_id, building_path, upgrade_levelTo), countdown=reqiured_time) task_id = task_id.id user.set_upgrading_time_and_state(village_id, building_path, reqiured_time, str(task_id), now) # print(user.myVillages[selected_village_index]['buildings']['resources']) # user.update() # newResources = user.myVillages[selected_village_index]['buildings']['resources'] newResources = user.get_my_villages( )[selected_village_index]['buildings']['resources'] print(newResources) data = {'result': 'Success', 'newResources': newResources} if ('.' not in building_path): data['newBuilding'] = user.get_my_villages( )[selected_village_index]['buildings'][building_path] print("upgrading") print(datetime.datetime.now(pytz.utc)) return Response(data) else: data = { 'result': 'Fail', } print("not enough resources") return Response(data)
def trainUnits(request): now = datetime.datetime.now(pytz.utc) firing_time = request.POST.get( "firingTime") #TODO we should use this instead of now user_id = request.user.id user = request.user selected_village_index = getVillageIndex(request, user, None) village_id = request.POST.get("village_id") unit_type = request.POST.get("unitType") unit_name = request.POST.get("unitName") number_of_units_to_train = int(request.POST.get("value")) vil_obj = Villages.objects.get(id=village_id) #if we have resources if (user.has_resources_to_train_units(village_id, unit_type, unit_name, number_of_units_to_train)): reqiured_time = vil_obj.get_required_time_for_train_units( unit_type, unit_name) current_resources = user.get_current_resources(village_id) reqiuredWood = gameConfig['units'][unit_type][unit_name]['Cost'][ 'Wood'] * number_of_units_to_train reqiuredIron = gameConfig['units'][unit_type][unit_name]['Cost'][ 'Iron'] * number_of_units_to_train reqiuredClay = gameConfig['units'][unit_type][unit_name]['Cost'][ 'Clay'] * number_of_units_to_train reqiuredWood, reqiuredIron, reqiuredClay = 0, 0, 0 #FOR DEBUGGING reqiured_time = 10 #FOR DEBUGGING with transaction.atomic(): set_sum_and_last_interaction_date_of_resource( user_id, village_id, 'woodCamp', current_resources['woodCamp'] - reqiuredWood, now) set_sum_and_last_interaction_date_of_resource( user_id, village_id, 'clayPit', current_resources['ironMine'] - reqiuredIron, now) set_sum_and_last_interaction_date_of_resource( user_id, village_id, 'ironMine', current_resources['clayPit'] - reqiuredClay, now) # # print(vil_obj.village_troops.in_village_troops_quantity_json) # # tq_last_unit_type = user.checkTrainingQueueReturnLastOneIfExists(village_id, unit_type) tq_last_unit_type = vil_obj.get_last_training_queue_by_unit_type( 'infantry') if (tq_last_unit_type == False): subtasks = [] for i in range(number_of_units_to_train): subtasks.append( train_unit.si( user_id=user_id, village_id=village_id, unit_type=unit_type, unit_name=unit_name).set(countdown=reqiured_time)) workflow = chain(*subtasks) generated_chain = workflow.apply_async() chain_id = generated_chain.id will_end_at = now + datetime.timedelta( 0, reqiured_time * number_of_units_to_train) vil_obj.add_to_training_queue(chain_id, unit_type, unit_name, number_of_units_to_train, now, will_end_at) else: will_start_at = tq_last_unit_type.started_at print("i will wait in queue totally seconds = >") first_task_delayed_countdown = math.ceil( ((tq_last_unit_type.will_end_at + datetime.timedelta(0, reqiured_time)) - now).total_seconds()) print(first_task_delayed_countdown) subtasks = [] for i in range(number_of_units_to_train): if i == 0: subtasks.append( train_unit.si( user_id=user_id, village_id=village_id, unit_type=unit_type, unit_name=unit_name).set( countdown=first_task_delayed_countdown)) else: subtasks.append( train_unit.si(user_id=user_id, village_id=village_id, unit_type=unit_type, unit_name=unit_name).set( countdown=reqiured_time)) workflow = chain(*subtasks) generated_chain = workflow.apply_async() chain_id = generated_chain.id will_end_at = will_start_at + datetime.timedelta( 0, reqiured_time * number_of_units_to_train) vil_obj.add_to_training_queue(chain_id, unit_type, unit_name, number_of_units_to_train, will_start_at, will_end_at) print(datetime.datetime.now(pytz.utc)) print(datetime.datetime.now(pytz.utc)) new_resources = user.get_my_villages( )[selected_village_index]['buildings']['resources'] data = { 'result': 'Success', 'newResources': new_resources, 'newQueueElement': { 'willEndAt': will_end_at, 'unitName': unit_name, 'unitsLeft': number_of_units_to_train } } return JsonResponse(data) else: data = {"result": 'Fail'} return JsonResponse(data)