| Putting Templates into different Files and different folders | |
|
|
Author | Message |
---|
RoH_JamesProctor Foundation Developer
Posts : 7 Join date : 2012-01-05
| Subject: Putting Templates into different Files and different folders Sat 14 Jan - 0:37 | |
| Ok so I was looking at my Config files for Sample World last night. Having ALL of your templates in a single file is just NOT going to be doable! It's going to get very unmanageable very quickly. I attempted to create a Folder called templates right there in the Config folder. In that folder I added a __init__.py file and then added a templates.py file. In that file I created a class called TestTemplates and then from the TemplateHook class I created a new instance of the TestTemplates class which should have created all the templates. However when I start the server and enter the world none of the mobs or NPCs are showing up which tells me the templates were not created.
Any help or suggestions on this would be great! | |
|
| |
RoH_JamesProctor Foundation Developer
Posts : 7 Join date : 2012-01-05
| Subject: Re: Putting Templates into different Files and different folders Sat 14 Jan - 3:35 | |
| I have found a solution to this issue! You are able to register different Activate Hooks from with in your Obj_Manager script located in your Common config folder. objectManager.registerActivateHook(TemplateHook()) objectManager.registerActivateHook(ItemTemplateHook()) Then create a folder in your world's config folder where you will keep all of your template scripts. Create a new Script (Name of the script doesn't matter). And then in that new script create a class named whatever you registered so in my case ItemTemplateHook(): - Code:
-
from multiverse.mars import * from multiverse.mars.objects import * from multiverse.mars.core import * from multiverse.mars.events import * from multiverse.mars.util import * from multiverse.mars.plugins import * from multiverse.server.plugins import * from multiverse.server.math import * from multiverse.server.events import * from multiverse.server.objects import * from multiverse.server.engine import * from java.lang import *
True=1 False=0
class ItemTemplateHook(EnginePlugin.PluginActivateHook): def activate(self): # # Item Templates # item = Template("Wolf Skin") item.put(InventoryClient.ITEM_NAMESPACE, InventoryClient.TEMPL_ICON, "Interface\Icons\INV_hide_basic-pelt") ObjectManagerClient.registerTemplate(item) item = Template("Wolf Bones") item.put(InventoryClient.ITEM_NAMESPACE, InventoryClient.TEMPL_ICON, "Interface\Icons\INV_mined_ironore") ObjectManagerClient.registerTemplate(item) item = Template("Healing Potion") item.put(InventoryClient.ITEM_NAMESPACE, InventoryClient.TEMPL_ICON, "Interface\FantasyWorldIcons\ITEM_potion_A") item.put(InventoryClient.ITEM_NAMESPACE, InventoryClient.TEMPL_ACTIVATE_HOOK, AbilityActivateHook("heal potion")) ObjectManagerClient.registerTemplate(item) item = Template("Mana Potion") item.put(InventoryClient.ITEM_NAMESPACE, InventoryClient.TEMPL_ICON, "Interface\FantasyWorldIcons\ITEM_potion_A") item.put(InventoryClient.ITEM_NAMESPACE, InventoryClient.TEMPL_ACTIVATE_HOOK, AbilityActivateHook("restore mana potion")) ObjectManagerClient.registerTemplate(item) item = Template("Tome of Heal") item.put(InventoryClient.ITEM_NAMESPACE, InventoryClient.TEMPL_ICON, "Interface\FantasyWorldIcons\ITEM_book_C") item.put(InventoryClient.ITEM_NAMESPACE, InventoryClient.TEMPL_ACTIVATE_HOOK, AbilityActivateHook("teach self heal ability")) ObjectManagerClient.registerTemplate(item) item = Template("Tome of Fireball") item.put(InventoryClient.ITEM_NAMESPACE, InventoryClient.TEMPL_ICON, "Interface\FantasyWorldIcons\ITEM_book_A") item.put(InventoryClient.ITEM_NAMESPACE, InventoryClient.TEMPL_ACTIVATE_HOOK, AbilityActivateHook("teach self fireball ability")) ObjectManagerClient.registerTemplate(item)
Then you edit your batch file and include your new script so that it gets run: - Code:
-
echo Starting object manager START /B java ^ %JAVA_FLAGS% ^ -Dmultiverse.loggername=objmgr ^ multiverse.server.marshalling.Trampoline ^ multiverse.server.engine.Engine ^ -i wmgr_local1.py ^ -i %MV_COMMON%\mvmessages.py ^ -i %MV_WORLD%\worldmessages.py ^ -m %MV_COMMON%\mvmarshallers.txt ^ -m %MV_WORLD%\worldmarshallers.txt ^ %MV_COMMON%\global_props.py ^ %MV_WORLD%\global_props.py ^ [b]%MV_WORLD%\scripts\StarterTemplates.py ^ %MV_WORLD%\scripts\ItemTemplates.py ^[/b] %MV_COMMON%\obj_manager.py ^ %MV_WORLD%\mobs_db.py ^ %MV_WORLD%\items_db.py ^ %MV_WORLD%\extensions_objmgr.py
| |
|
| |
Tristan Administrator
Posts : 306 Join date : 2011-08-03 Location : Liverpool, UK
| Subject: Re: Putting Templates into different Files and different folders Sat 14 Jan - 8:17 | |
| Congrats on finding the solution Jim!
At some point, we'll probably put this on the Wiki, so thanks for the fix. | |
|
| |
Delurin Head of Platform Development
Posts : 424 Join date : 2011-08-03
| Subject: Re: Putting Templates into different Files and different folders Sun 15 Jan - 10:29 | |
| Just as a warning you can not exceed 65535 bytes or around there for each template file. | |
|
| |
awaredev Experienced Newbie
Posts : 32 Join date : 2012-06-29 Location : Halifax, NS, Canada
| Subject: Re: Putting Templates into different Files and different folders Thu 5 Jul - 3:34 | |
| Hi folks-
Good to know we can split up the templates.
Also- Can the templates be registered using JAVA instead of Python, or is template registration done only via script? | |
|
| |
Delurin Head of Platform Development
Posts : 424 Join date : 2011-08-03
| Subject: Re: Putting Templates into different Files and different folders Fri 6 Jul - 3:43 | |
| there is no reason why they cant be registered in java but then you have to recompile the jar file every time you want to make a change in a quest which would probably be annoying. | |
|
| |
awaredev Experienced Newbie
Posts : 32 Join date : 2012-06-29 Location : Halifax, NS, Canada
| Subject: Re: Putting Templates into different Files and different folders Fri 6 Jul - 3:58 | |
| Thanks for the reply I'm actually looking at creating methods to register items, mobs, etc. from custom database tables rather than scripting or coding every template. Am I correct in saying that Templates are registered only at the engine start? You can't dynamically register a new template while the server is running? Thanks | |
|
| |
Delurin Head of Platform Development
Posts : 424 Join date : 2011-08-03
| Subject: Re: Putting Templates into different Files and different folders Fri 6 Jul - 4:13 | |
| As it currently stands there is not a way to add templates. But you could probably add a command to add new templates or a function that checks every once in awhile for new templates. If you do allow for template changes without restarting you probably will want to have a way to designate that a given template has changed: for example if you change the template on a sword you will need to update all of the characters with that change. It is even more important if you are doing mobs and quests so that a player who started a quest will not get stuck with aversion of a quest that cannot be completed. | |
|
| |
awaredev Experienced Newbie
Posts : 32 Join date : 2012-06-29 Location : Halifax, NS, Canada
| Subject: Re: Putting Templates into different Files and different folders Fri 6 Jul - 4:17 | |
| Ahh, yes. That makes sense, as the templates are registered via code. Adding new ones would be easy.
However, I see what you mean that there would need to be a system in place that checks any instance of the template currently active in-game.
It is really rather impressive that this can be done, as it would allow for a lot of dynamic game mechanics.
Thanks Again | |
|
| |
Sponsored content
| Subject: Re: Putting Templates into different Files and different folders | |
| |
|
| |
| Putting Templates into different Files and different folders | |
|