Пример #1
0
def display_team_upkeep(cursor, the_world, team_id):
    output = []
    breakdown = {}
    sub_total = {}
    output.append(
        """
	<div class="ti_section" id="upkeep_div">"""
    )

    stat_f_amount = 0

    # Copy of function: team_f.get_upkeep
    the_team = the_world.teams()[team_id]
    unit_dict = the_world.units()
    army_dict = the_world.armies()
    squad_dict = the_world.squads_from_team(the_team.id)

    # Cache iron, makes it faster
    the_team.get_resources(the_world.cursor)  # force_requery=True)
    if the_team.resources.get("Iron") > 0:
        has_iron = True
    else:
        has_iron = False

    stat_f_amount = 0
    for squad_id, the_squad in squad_dict.items():
        if the_squad.amount < 1:
            continue

        the_unit = unit_dict[the_squad.unit]
        the_army = army_dict[the_squad.army]

        # Get Iron/Material cost
        if has_iron:
            unit_cost = the_unit.get_cost(cursor=the_world.cursor, the_world=the_world)["material_upkeep"].get(
                "Materials", 0
            )
        else:
            unit_cost = the_unit.get_cost(cursor=the_world.cursor, the_world=the_world)["iron_upkeep"].get(
                "Materials", 0
            )

            # Skip it if it's not got any upkeep
        if unit_cost <= 0:
            continue

            # If we haven't started on this army then lets start now!
        if the_squad.army not in breakdown:
            breakdown[the_squad.army] = ['<span class="stitle">%s</span><br />' % army_dict[the_squad.army].name]
            sub_total[the_squad.army] = 0

            # If it's a ship or airship we don't divide by the divisor
        if the_unit.type_cat == unit.categories.index("Ship") or the_unit.type_cat == unit.categories.index("Airship"):
            temp_cost = unit_cost * the_squad.amount
        else:
            temp_cost = unit_cost * the_squad.amount / military_rules.amount_divisor

            # Now we take into account the army type
        if the_army.garrison > 0:
            temp_cost *= military_rules.garrison_upkeep
            unit_cost *= military_rules.garrison_upkeep
        else:
            temp_cost *= military_rules.army_upkeep
            unit_cost *= military_rules.army_upkeep

        stat_f_amount += temp_cost

        # Break it down
        breakdown[the_squad.army].append(
            "{squad}: {amount} x {name} @ {price} = {cost}<br />".format(
                squad=the_squad.name, amount=the_squad.amount, name=the_unit.name, price=unit_cost, cost=temp_cost
            )
        )
        sub_total[the_squad.army] += temp_cost

    stat_f_amount = team_rules.alter_upkeep(the_world.cursor, the_team, stat_f_amount, the_world)

    # We need to confirm that the number we got here is the same as from the function
    team_f_amount = team_f.get_upkeep(the_world.teams()[team_id], the_world)

    if stat_f_amount != team_f_amount:
        output.append(
            '<span style="font-weight:bold;color:#F00;">There is an error in the workings: team_f = %d, stat_f = %d</span><br /><br />'
            % (team_f_amount, stat_f_amount)
        )

        # Now for the actual output
    if has_iron:
        output.append("Calcuated with Iron<br /><br />")
    else:
        output.append("Calcuated without Iron<br /><br />")

    for army_id, the_army in army_dict.items():
        if army_id in breakdown:
            output.append("".join(breakdown[army_id]))
            output.append("<strong>Sub total</strong>: %s<br /><br />" % sub_total[army_id])

    output.append("Grand total: %s" % stat_f_amount)

    output.append("</div>")
    return "".join(output)
Пример #2
0
def get_upkeep(the_team, the_world):
	"""Returns the upkeep cost of the nation's army"""
	# We need to do this on a per-army basis now
	unit_dict = the_world.units()
	army_dict = the_world.armies()
	squad_dict = the_world.squads_from_team(the_team.id)
	city_dict = the_world.cities_from_team(the_team.id)
	
	the_world.mass_get_city_buildings()
	
	# Cache iron, makes it faster
	the_team.get_resources(the_world.cursor)#force_requery=True)
	if the_team.resources.get("Iron") > 0:
		has_iron = True
	else:
		has_iron = False
	
	military_upkeep = 0
	for squad_id, the_squad in squad_dict.items():
		if the_squad.amount < 1: continue
		
		the_unit = unit_dict[the_squad.unit]
		the_army = army_dict[the_squad.army]
		
		# Don't wanna pay upkeep for units that are not ours!
		if the_unit.team != 0 and the_unit.team != the_team.id:
			continue
		
		# Get Iron/Material cost
		if has_iron:
			unit_cost = the_unit.get_cost(cursor=the_world.cursor, the_world=the_world)['material_upkeep'].get("Materials", 0)
		else:
			unit_cost = the_unit.get_cost(cursor=the_world.cursor, the_world=the_world)['iron_upkeep'].get("Materials", 0)
		
		# Upkeep override for things like magical affinity
		unit_cost = unit_rules.unit_upkeep_override(the_world, the_unit, unit_cost, the_team)
		
		# If it's a ship or airship we don't divide by the divisor
		if the_unit.type_cat == unit.categories.index("Ship") or \
			the_unit.type_cat == unit.categories.index("Airship"):
			temp_cost = (unit_cost * the_squad.amount)
		else:
			temp_cost = (unit_cost * the_squad.amount/military_rules.amount_divisor)
		
		# Now we take into account the army type
		if the_army.garrison > 0:
			temp_cost *= military_rules.garrison_upkeep
		else:
			temp_cost *= military_rules.army_upkeep
		
		# Used for debugging
		if temp_cost > 0:
			pass
			# print "%s: %s * %s = %s<br />" % (unit_dict_c[unit_id].name, unit_cost, unit_count, temp_cost)
		
		# if the_army.name == "Kan Putri garrison":
		# 	print(the_squad.name, str(temp_cost), "<br />")
		
		military_upkeep += temp_cost
	
	# exit()
	
	# Now for buildings
	building_upkeep = 0
	# building_upkeep_dict = {}
	# for k, b in the_world.buildings().items():
	# 	building_upkeep_dict[k] = res_dict.Res_dict(b.upkeep)['Materials']
	# 
	# for city_id, the_city in city_dict.items():
	# 	for building_id, amount in the_city.buildings_amount.items():
	# 		building_upkeep += amount * building_upkeep_dict[building_id]
	
	# print str(the_team.resources), " - ", total_cost, "<br />"
	military_upkeep = team_rules.alter_upkeep(the_world.cursor, the_team, military_upkeep, the_world)
	return military_upkeep + building_upkeep