Преглед изворни кода

Improve factories.py, move data to JSON files

JoostSijm пре 5 година
родитељ
комит
247bdb4467

+ 2 - 0
.gitignore

@@ -2,3 +2,5 @@
 *.html
 *__pycache__/
 .venv
+*.json
+!example_*.json

+ 0 - 300
factories.py

@@ -1,300 +0,0 @@
-"""Calculate production in different factories"""
-
-from rival_regions_calc import Item, WorkProduction
-
-DEPARTMENTS = {
-    'oil': 1.5,
-    'gold': 0.4,
-    'diamond': 0.1,
-    'uranium': 0,
-    'ore': 0,
-}
-
-PRICE = {
-    'oil': 255,
-    'gold': 0,
-    'diamond': 1650000,
-    'uranium': 2300,
-    'ore': 235,
-}
-
-REGIONS = {
-    4001: {
-        'name': 'Northern Netherlands',
-        'resources': {
-            'gold': 379,
-            'oil': 223,
-            'ore': 247,
-            # 'uranium': 2,
-            'uranium': 25,
-            'diamond': 5,
-        },
-        'tax': {
-            'gold': 15,
-            'oil': 15,
-            'ore': 15,
-            'uranium': 15,
-            'diamond': 15,
-        },
-    },
-    4002: {
-        'name': 'Eastern Netherlands',
-        'resources': {
-            'gold': 359,
-            # 'oil': 266,
-            'oil': 371,
-            'ore': 250,
-            'uranium': 2,
-            'diamond': 2,
-        },
-        'tax': {
-            'gold': 15,
-            'oil': 2,
-            'ore': 15,
-            'uranium': 15,
-            'diamond': 15,
-        },
-    },
-    4003: {
-        'name': 'Western Netherlands',
-        'resources': {
-            'gold': 372,
-            'oil': 296,
-            'ore': 230,
-            'uranium': 2,
-            'diamond': 2,
-        },
-        'tax': {
-            'gold': 15,
-            'oil': 15,
-            'ore': 15,
-            'uranium': 15,
-            'diamond': 15,
-        },
-    },
-    4004: {
-        'name': 'Southern Netherlands',
-        'resources': {
-            'gold': 366,
-            'oil': 296,
-            'ore': 211,
-            'uranium': 2,
-            'diamond': 2,
-        },
-        'tax': {
-            'gold': 15,
-            'oil': 15,
-            'ore': 15,
-            'uranium': 15,
-            'diamond': 15,
-        },
-    },
-    4008: {
-        'name': 'Amsterdam',
-        'resources': {
-            'gold': 418,
-            'oil': 307,
-            'ore': 303,
-            'uranium': 4,
-            'diamond': 13,
-        },
-        'tax': {
-            'gold': 15,
-            'oil': 15,
-            'ore': 15,
-            'uranium': 15,
-            'diamond': 15,
-        },
-    },
-    4801: {
-        'name': 'Luxembourg',
-        'resources': {
-            'gold': 435,
-            'oil': 283,
-            'ore': 267,
-            'uranium': 2,
-            'diamond': 2,
-        },
-        'tax': {
-            'gold': 15,
-            'oil': 15,
-            'ore': 15,
-            'uranium': 15,
-            'diamond': 15,
-        },
-    }
-}
-
-RESOURCES = {
-    'oil': {
-        45760: {
-            'name': 'OIL RAFINERY',
-            'level': 185,
-            'region_id': 4002,
-            'wage': 100,
-        },
-        32282: {
-            'name': 'OIL - Lorenzo Industries',
-            'level': 157,
-            'region_id': 4801,
-            'wage': 100,
-        },
-        59465: {
-            'name': 'Verenigde Nederlanden Oil',
-            'level': 144,
-            'region_id': 4003,
-            'wage': 99,
-        },
-        90420: {
-            'name': 'Shelby oil',
-            'level': 124,
-            'region_id': 4002,
-            'wage': 95,
-        },
-        61361: {
-            'name': 'Koninklijke Olie',
-            'level': 120,
-            'region_id': 4001,
-            'wage': 100,
-            'fixed_wage': 150500500,
-        },
-        60828: {
-            'name': 'Austins wegenolie',
-            'level': 117,
-            'region_id': 4008,
-            'wage': 100,
-            'fixed_wage': 130000000,
-        },
-    },
-    'ore': {
-        32145: {
-            'name': 'DS ore',
-            'level': 139,
-            'region_id': 4801,
-            'wage': 99,
-        },
-        48500: {
-            'name': 'Shelby ore',
-            'level': 138,
-            'region_id': 4004,
-            'wage': 95,
-        },
-        29239: {
-            'name': 'Nederlands Ore EN',
-            'level': 73,
-            'region_id': 4002,
-            'wage': 80,
-        },
-    },
-    'uranium': {
-        34997: {
-            'name': 'Quite a serious power plant!',
-            'level': 147,
-            'region_id': 4001,
-            'wage': 100,
-            'fixed_wage': 350000000,
-        },
-
-    },
-    'diamond': {
-        33263: {
-            'name': 'Shelby Diamonds #2',
-            'level': 148,
-            'region_id': 4008,
-            'wage': 95,
-        },
-        63317: {
-            'name': 'Vone I',
-            'level': 30,
-            'region_id': 4008,
-            'wage': 80,
-        },
-    },
-}
-
-
-WP = WorkProduction()
-WP.user_level = 95
-WP.work_exp = 80000 + 200 * 350
-WP.nation_bonus = True
-WP.profit_share = 75
-
-
-def calculate_wage(resource_name, factory):
-    """Calculate production"""
-    if 'fixed_wage' in factory:
-        return factory['fixed_wage']
-    resource = Item(resource_name)
-    WP.resource = resource
-    WP.factory_level = factory['level']
-    WP.department_bonus = DEPARTMENTS[resource_name]
-    WP.resource_max = REGIONS[factory['region_id']]['resources'][resource_name]
-    WP.wage_percentage = factory['wage']
-    WP.tax_rate = REGIONS[factory['region_id']]['tax'][resource_name]
-    WP.calculate()
-    return WP.wage() * PRICE[resource_name]
-
-
-def all_factories():
-    """return all factories"""
-    factory_dict = {}
-    for factories in RESOURCES.values():
-        factory_dict.update(factories)
-    return factory_dict 
-
-
-def print_per_resource():
-    """Print wages per resource"""
-    for resource_name, factories in RESOURCES.items():
-        print(resource_name)
-        for factory in sorted(factories.values(), key=lambda k: k['wage'], reverse=True):
-            print('{:30} {:>12}'.format(
-                factory['name'],
-                int(factory['wage']),
-            ))
-
-
-def print_all():
-    """Print wages per resource"""
-    factory_dict = all_factories()
-
-    print("total")
-    sorted_factories = sorted(factory_dict.values(), key=lambda k: k['wage'], reverse=True)
-    top_wage = sorted_factories[0]['wage']
-    for factory in sorted_factories:
-        print('{:28}  {:>11,}  {:>3}'.format(
-            factory['name'],
-            int(factory['wage']),
-            int(100 / top_wage * factory['wage']),
-        ).replace(',', '.'))
-
-
-def print_factory_list():
-    """print all factories"""
-    for resource_name, factories in RESOURCES.items():
-        print('[rr]{}[/rr]'.format(resource_name.capitalize()))
-        for factory_id, factory in factories.items():
-            print('[url=https://rivalregions.com/#factory/index/{}]Desktop[/url] [url=https://m.rivalregions.com/#factory/index/{}]Mobile[/url] {}, {} '.format(
-                factory_id,
-                factory_id,
-                factory['name'],
-                REGIONS[factory['region_id']]['name'],
-            ))
-
-
-
-def main():
-    """Main function"""
-
-    for resource_name, factories in RESOURCES.items():
-        for factory_id, factory in factories.items():
-            wage = calculate_wage(resource_name, factory)
-            RESOURCES[resource_name][factory_id]['wage'] = wage
-
-    # print_per_resource()
-    print_all()
-    # print_factory_list()
-
-
-if __name__ == '__main__':
-    main()

+ 7 - 0
factories/example_departments.json

@@ -0,0 +1,7 @@
+{
+    "oil": 1.5,
+    "gold": 0.4,
+    "diamond": 0.1,
+    "uranium": 0,
+    "ore": 0
+}

+ 7 - 0
factories/example_prices.json

@@ -0,0 +1,7 @@
+{
+    "oil": 255,
+    "gold": 0,
+    "diamond": 1650000,
+    "uranium": 2300,
+    "ore": 235
+}

+ 104 - 0
factories/example_regions.json

@@ -0,0 +1,104 @@
+{
+    "4001": {
+        "name": "Northern Netherlands",
+        "resources": {
+            "gold": 379,
+            "oil": 223,
+            "ore": 247,
+            "uranium": 25,
+            "diamond": 5
+        },
+        "tax": {
+            "gold": 15,
+            "oil": 15,
+            "ore": 15,
+            "uranium": 15,
+            "diamond": 15
+        }
+    },
+    "4002": {
+        "name": "Eastern Netherlands",
+        "resources": {
+            "gold": 359,
+            "oil": 371,
+            "ore": 250,
+            "uranium": 2,
+            "diamond": 2
+        },
+        "tax": {
+            "gold": 15,
+            "oil": 2,
+            "ore": 15,
+            "uranium": 15,
+            "diamond": 15
+        }
+    },
+    "4003": {
+        "name": "Western Netherlands",
+        "resources": {
+            "gold": 372,
+            "oil": 296,
+            "ore": 230,
+            "uranium": 2,
+            "diamond": 2
+        },
+        "tax": {
+            "gold": 15,
+            "oil": 15,
+            "ore": 15,
+            "uranium": 15,
+            "diamond": 15
+        }
+    },
+    "4004": {
+        "name": "Southern Netherlands",
+        "resources": {
+            "gold": 366,
+            "oil": 296,
+            "ore": 211,
+            "uranium": 2,
+            "diamond": 2
+        },
+        "tax": {
+            "gold": 15,
+            "oil": 15,
+            "ore": 15,
+            "uranium": 15,
+            "diamond": 15
+        }
+    },
+    "4008": {
+        "name": "Amsterdam",
+        "resources": {
+            "gold": 418,
+            "oil": 307,
+            "ore": 303,
+            "uranium": 4,
+            "diamond": 13
+        },
+        "tax": {
+            "gold": 15,
+            "oil": 15,
+            "ore": 15,
+            "uranium": 15,
+            "diamond": 15
+        }
+    },
+    "4801": {
+        "name": "Luxembourg",
+        "resources": {
+            "gold": 435,
+            "oil": 283,
+            "ore": 267,
+            "uranium": 2,
+            "diamond": 2
+        },
+        "tax": {
+            "gold": 15,
+            "oil": 15,
+            "ore": 15,
+            "uranium": 15,
+            "diamond": 15
+        }
+    }
+}

+ 85 - 0
factories/example_resources.json

@@ -0,0 +1,85 @@
+ {
+    "oil": {
+        "45760": {
+            "name": "OIL RAFINERY",
+            "level": 185,
+            "region_id": 4002,
+            "wage": 100
+        },
+        "32282": {
+            "name": "OIL - Lorenzo Industries",
+            "level": 157,
+            "region_id": 4801,
+            "wage": 100
+        },
+        "59465": {
+            "name": "Verenigde Nederlanden Oil",
+            "level": 144,
+            "region_id": 4003,
+            "wage": 99
+        },
+        "90420": {
+            "name": "Shelby oil",
+            "level": 124,
+            "region_id": 4002,
+            "wage": 95
+        },
+        "61361": {
+            "name": "Koninklijke Olie",
+            "level": 120,
+            "region_id": 4001,
+            "wage": 100,
+            "fixed_wage": 150500500
+        },
+        "60828": {
+            "name": "Austins wegenolie",
+            "level": 117,
+            "region_id": 4008,
+            "wage": 100,
+            "fixed_wage": 130000000
+        }
+    },
+    "ore": {
+        "32145": {
+            "name": "DS ore",
+            "level": 139,
+            "region_id": 4801,
+            "wage": 99
+        },
+        "48500": {
+            "name": "Shelby ore",
+            "level": 138,
+            "region_id": 4004,
+            "wage": 95
+        },
+        "29239": {
+            "name": "Nederlands Ore EN",
+            "level": 73,
+            "region_id": 4002,
+            "wage": 80
+        }
+    },
+    "uranium": {
+        "34997": {
+            "name": "Quite a serious power plant!",
+            "level": 147,
+            "region_id": 4001,
+            "wage": 100,
+            "fixed_wage": 350000000
+        }
+    },
+    "diamond": {
+        "33263": {
+            "name": "Shelby Diamonds #2",
+            "level": 148,
+            "region_id": 4008,
+            "wage": 95
+        },
+        "63317": {
+            "name": "Vone I",
+            "level": 30,
+            "region_id": 4008,
+            "wage": 80
+        }
+    }
+}

+ 109 - 0
factories/factories.py

@@ -0,0 +1,109 @@
+"""Calculate production in different factories"""
+
+import json
+
+from rival_regions_calc import Item, WorkProduction
+
+
+DEPARTMENTS = None
+with open('departments.json') as file:  
+    DEPARTMENTS = json.load(file)
+
+PRICE = None
+with open('prices.json') as file:  
+    PRICE = json.load(file)
+
+REGIONS = None
+with open('regions.json') as file:  
+    REGIONS = json.load(file)
+
+RESOURCES = None
+with open('resources.json') as file:  
+    RESOURCES = json.load(file)
+
+
+WP = WorkProduction()
+WP.user_level = 95
+WP.work_exp = 80000 + 200 * 350
+WP.nation_bonus = True
+WP.profit_share = 75
+
+
+def calculate_wage(resource_name, factory):
+    """Calculate production"""
+    if 'fixed_wage' in factory:
+        return factory['fixed_wage']
+    resource = Item(resource_name)
+    WP.resource = resource
+    WP.factory_level = factory['level']
+    WP.department_bonus = DEPARTMENTS[resource_name]
+    WP.resource_max = REGIONS[str(factory['region_id'])]['resources'][resource_name]
+    WP.wage_percentage = factory['wage']
+    WP.tax_rate = REGIONS[str(factory['region_id'])]['tax'][resource_name]
+    WP.calculate()
+    return WP.wage() * PRICE[resource_name]
+
+
+def all_factories():
+    """return all factories"""
+    factory_dict = {}
+    for factories in RESOURCES.values():
+        factory_dict.update(factories)
+    return factory_dict 
+
+
+def print_per_resource():
+    """Print wages per resource"""
+    for resource_name, factories in RESOURCES.items():
+        print(resource_name)
+        for factory in sorted(factories.values(), key=lambda k: k['wage'], reverse=True):
+            print('{:30} {:>12}'.format(
+                factory['name'],
+                int(factory['wage']),
+            ))
+
+
+def print_all():
+    """Print wages per resource"""
+    factory_dict = all_factories()
+
+    print("total")
+    sorted_factories = sorted(factory_dict.values(), key=lambda k: k['wage'], reverse=True)
+    top_wage = sorted_factories[0]['wage']
+    for factory in sorted_factories:
+        print('{:28}  {:>11,}  {:>3}'.format(
+            factory['name'],
+            int(factory['wage']),
+            int(100 / top_wage * factory['wage']),
+        ).replace(',', '.'))
+
+
+def print_factory_list():
+    """print all factories"""
+    for resource_name, factories in RESOURCES.items():
+        print('[rr]{}[/rr]'.format(resource_name.capitalize()))
+        for factory_id, factory in factories.items():
+            print('[url=https://rivalregions.com/#factory/index/{}]Desktop[/url] [url=https://m.rivalregions.com/#factory/index/{}]Mobile[/url] {}, {} '.format(
+                factory_id,
+                factory_id,
+                factory['name'],
+                REGIONS[factory['region_id']]['name'],
+            ))
+
+
+
+def main():
+    """Main function"""
+
+    for resource_name, factories in RESOURCES.items():
+        for factory_id, factory in factories.items():
+            wage = calculate_wage(resource_name, factory)
+            RESOURCES[resource_name][factory_id]['wage'] = wage
+
+    # print_per_resource()
+    print_all()
+    # print_factory_list()
+
+
+if __name__ == '__main__':
+    main()