示例#1
0
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
    })
示例#2
0
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
    })
示例#3
0
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')
示例#4
0
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
    })
示例#5
0
    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)
示例#6
0
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)
示例#7
0
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
    })
示例#8
0
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
        })
示例#9
0
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
        })
示例#10
0
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
    })
示例#11
0
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()
        })
示例#12
0
    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)
示例#13
0
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)