From 108ae2f424b7075e20a39ccae475e5e11ab2a2f8 Mon Sep 17 00:00:00 2001 From: troido Date: Wed, 8 Apr 2020 12:07:08 +0200 Subject: [PATCH] convert old objects into new ones when loading them --- asciifarm/server/gameobjects/__init__.py | 6 +++++- asciifarm/server/gameobjects/conversions.py | 19 +++++++++++++++++++ asciifarm/server/gameobjects/crops.py | 6 ++++-- asciifarm/server/main.py | 2 +- 4 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 asciifarm/server/gameobjects/conversions.py diff --git a/asciifarm/server/gameobjects/__init__.py b/asciifarm/server/gameobjects/__init__.py index 37474c8..4c811ed 100644 --- a/asciifarm/server/gameobjects/__init__.py +++ b/asciifarm/server/gameobjects/__init__.py @@ -2,6 +2,7 @@ from ..entity import Entity +from .conversions import convert from .base import entities as base from .crops import entities as crops from .exchangers import entities as exchangers @@ -27,8 +28,11 @@ def createEntity(data): elif isinstance(data, dict): if "type" in data: obj = entities[data["type"]](*(data.get("args", [])), **(data.get("kwargs", {}))) + elif "components" in data: + obj = createEntity(convert(data)) + #obj = Entity.fromJSON(data) else: - obj = Entity.fromJSON(data) + raise ValueError("invalid entity data: " + str(data)) return obj def buildEntity(data, roomData, preserve=False): diff --git a/asciifarm/server/gameobjects/conversions.py b/asciifarm/server/gameobjects/conversions.py new file mode 100644 index 0000000..e936747 --- /dev/null +++ b/asciifarm/server/gameobjects/conversions.py @@ -0,0 +1,19 @@ + + +conversions = { + "food": "eldritch_radish", + "sword": "sword", + "godsword": {"type": "weapon", "kwargs": {"strength": 500, "name": "godsword"}}, + "pebble": "pebble", + "club": "club", + "seed": "radishseed", + "stone": "stone", + "wall": "wall", + "armour": "armour" +} + +def convert(item): + name = item["name"] + if name in conversions: + return conversions[name] + raise ValueError("Unknown old object:", str(item)) diff --git a/asciifarm/server/gameobjects/crops.py b/asciifarm/server/gameobjects/crops.py index c06f625..727f5a5 100644 --- a/asciifarm/server/gameobjects/crops.py +++ b/asciifarm/server/gameobjects/crops.py @@ -95,14 +95,16 @@ createCrop("radish", [ Stage("{}plant", sprite="smallplant", height=0.5, harvest=[("radishseed", .92), ("radishseed", .20), ("radishes", .8), ("radishes", .4)]) ], 10) -entities["radishes"] = lambda: Entity(sprite="food", name="radishes", height=0.3, components={"item": Food(2), "serialize": Static("radishes")}) +entities["radish"] = lambda: Entity(sprite="food", name="radish", height=0.3, components={"item": Food(2), "serialize": Static("radishes")}) -entities["food"] = entities["radishes"] +entities["food"] = entities["radish"] +entities["radishes"] = entities["radish"] entities["sownseed"] = entities["plantedradishseed"] entities["youngplant"] = entities["youngradishplant"] entities["plant"] = entities["radishplant"] entities["seed"] = entities["radishseed"] +entities["eldritch_radish"] = lambda: Entity(sprite="food", name="eldritch radish", height=0.3, components={"item": Food(20), "serialize": Static("eldritch_radish")}) diff --git a/asciifarm/server/main.py b/asciifarm/server/main.py index 1693cee..e109043 100644 --- a/asciifarm/server/main.py +++ b/asciifarm/server/main.py @@ -38,7 +38,7 @@ def main(argv=None): sockets = [] for socktype, address in socketargs: assert socktype in ["abstract", "unix", "inet"] - if address is "": + if address == "": address = defaultAdresses[socktype] if socktype == "abstract": address = '\0' + address