Browse Source

Add productivity calculcation script

JoostSijm 5 years ago
parent
commit
71424bfc56

+ 7 - 0
productivity/example_departments.json

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

+ 7 - 0
productivity/example_prices.json

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

+ 18 - 0
productivity/example_regions.json

@@ -0,0 +1,18 @@
+{
+    "1": {
+        "name": "Ideal region",
+        "resources": {
+            "oil": 371,
+            "ore": 356,
+            "uranium": 25,
+            "diamond": 27
+        },
+        "tax": {
+            "gold": 5,
+            "oil": 5,
+            "ore": 5,
+            "uranium": 5,
+            "diamond": 5
+        }
+    }
+}

+ 34 - 0
productivity/example_resources.json

@@ -0,0 +1,34 @@
+ {
+    "oil": {
+        "1000": {
+            "name": "150",
+            "level": 150,
+            "region_id": 1,
+            "wage_percentage": 100
+        }
+    },
+    "ore": {
+        "2000": {
+            "name": "150",
+            "level": 150,
+            "region_id": 1,
+            "wage_percentage": 100
+        }
+    },
+    "uranium": {
+        "3000": {
+            "name": "150",
+            "level": 150,
+            "region_id": 1,
+            "wage_percentage": 100
+        }
+    },
+    "diamond": {
+        "4000": {
+            "name": "150",
+            "level": 150,
+            "region_id": 1,
+            "wage_percentage": 100
+        }
+    }
+}

+ 125 - 0
productivity/productivity.py

@@ -0,0 +1,125 @@
+"""Calculate production in different factories"""
+
+import json
+import copy
+
+
+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 = 80
+WP.work_exp = 80000 + 200 * 250
+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_percentage']
+    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']):
+            print('{}'.format(
+                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():
+        factory = None
+        factory_id = None
+        for factory_id, factory in factories.items():
+            factory = factory
+            factory_id = factory_id
+
+        RESOURCES[resource_name][factory_id]['wage'] = calculate_wage(resource_name, factory)
+
+        for i in range(factory['level'], 221, 5):
+            new_factory_id = int(factory_id) + i - 150
+            new_factory = copy.copy(factory)
+            new_factory['level'] = i
+            new_factory['name'] = i
+            new_factory['wage'] = calculate_wage(resource_name, new_factory)
+            RESOURCES[resource_name][str(new_factory_id)] = new_factory
+
+    print_per_resource()
+    # print_all()
+    # print_factory_list()
+
+
+def print_json(json_text):
+    """Print data to console"""
+    print(json.dumps(json_text, sort_keys=True, indent=4))
+
+if __name__ == '__main__':
+    main()