Test server have all accounts from the main server. The synchronization is made everyday.
Main server -> test server.
There is no synchronization in opposite direction.
There are 3 levels of map creating privileges:
- LEVEL 0: You can edit only visual look of your own map. To create your own map you need to be at level at least 50. You can create max 3 maps per account.I added this condition to prevent abuses.
- LEVEL 1: You can edit logic of your map. This means adding/editing portals, quests, chests, spawns, etc You can create up to 20 maps. If you created nice looking map and I like it then I can grant you this level. Please read rules listed below first and when you are ready contact me so I can give you access. You need discord account to join our map makers channel for work coordinating.
- LEVEL 2: You can create new enemies, NPC, tiles, items. You can edit all maps, modify existing quests, NPC, edit spawns. You can also use groovy scripts to create more complicated quests. You can get this level only if you are trustworthy player
These rules may be modified at any time by GMs. Mapmakers are responsible for following all other GM directions and restrictions that may be provided in the Mapmaking Discord. Mapmakers are required to join the Mapmaking Discord.
• Information discussed in mapmaking and testers channels is confidential. Nothing discussed in these channels should be passed along to others who do not have access to these channels.
• Mapmakers may show friends their own maps if it is just showing progress, but if maps are put into a testing phase they should no longer be accessible to anyone as it may hinder the testing process.
• Mapmaker privileges should only be used for creating and testing maps. There is no reason these privileges should be used to increase levels, provide items, create items, change status, or otherwise affect players on the test server without a connection to creating or working on maps.
• No mapmaker may use existing NPCs or change dialogue for existing NPCs on the test server without GM permission. This can create problems with existing quests.
• No maps intended for addition to the game may include “real money items” (e.g., pet item, etc.) in chests or as quest rewards without GM permission.
• No maps intended for addition to the game may include banks, forges, pet storage, or followers/pets without GM permission.
.
• No maps intended for addition to the game may include mining resources other than common rocks without GM permission. It is generally accepted that there are enough mining areas on the original FT continent and maps associated with the original continent.
• No new gear (e.g., weapons and armor) may be created without GM approval. This is necessary to keep stats appropriate for the desired level as well as to ensure other plans have not been made for similar-level gear near that desired level.
• No new monsters/mobs intended for addition to the game may have higher than a 15:1 ratio of XP to HP. Resistance can factor into this so that the 15:1 ratio is not exceeded after resistance is factored in.
• No maps intended for addition to the game may include “daily quests” that provide a full level reward or gold without GM approval. It is generally accepted that there are already enough daily rewards for higher-level players and that the value of gold is diminished. Daily quests with level parameters may be acceptable.
• No maps intended for addition to the game should be created for the direct benefit of any clan regardless of whether the mapmaker is in a clan or not. Maps adjacent to or in close proximity to clan maps will be reviewed.
• No mapmaker may create a “clan map” without GM permission.
In addition to the rules above there are some suggestions for mapmakers. Working on maps should be an enjoyable experience and there are some things that can be done to help not only mapmakers but testers and players.
• Ask questions or ask for help if needed. People are here to help. This is for design, coding, language, and anything else.
• Think quality, not quantity. Maps should be well designed and fit in with the overall FT theme and established stories of the game.
• Keep in mind the current diminished value of gold. The game could use more “gold sink” options.
• Think of level ranges where there may be a gap for existing quests or where leveling may be difficult for players. We don’t have to fill every gap with quests, but there are some levels where new quests are not really needed.
• Keep existing quests in mind as possible prerequisites or to continue with new quests. New quests may not require a new map as some quests could be used with existing NPCs (keep the rule above in mind for using existing NPCs) or on existing maps.
• Don’t forget some of the newer options for creating maps such as: traps, allowing quest items to be supplied in multiple visits to an NPC (this would also allow quests requiring more than 80 items), choices for quests (e.g., giving book to devil or human, selling or trading items, etc.), color filters for maps, and other options. Your map or quests can be very unique!
Here are a few suggestions specifically for language that is used for quests. Nobody is expected to be perfect, and it is completely understood that English may not be a first language. There are some basic things that mapmakers can keep in mind though.
• Avoid using contractions in dialogue such as I’m, don’t, can’t, we’re, etc. Contractions make dialogue more difficult to understand for some players (and translators) so they are now being removed during testing. This just makes the process easier.
• If a play on words, joke, or riddle is used it could require some additional work or explanations in the translating process, and it could be that something is lost in the translation. These can certainly be used for quests, but if something may be a regional phrase just keep that in mind.
• Try to make the dialogue interesting. Quests language doesn’t need to be plain or simple (e.g., “I need 10 planks) when it could be more of a story. Think of the mother in Kensington that tries to offer all kinds of food in the dialogue. The quest is a simple quest, but the language is very interesting.
• If it is easier mapmakers can write quests in their own language and then translate to English. The language will be cleaned up during testing. Mapmakers could also ask for help with language if needed and someone can assist.
LEVEL 0
Enter in chat window this command to create your own map:
Code: Select all
/map create
To create with custom size use:
Code: Select all
/map create 3.3
Code: Select all
/map resize x.y
Code: Select all
/map go
To start editing map use this:
Code: Select all
/e
To go to particular map use:
Code: Select all
/map go 1
/map go 2
/map go 3
Code: Select all
/map delete
Code: Select all
/map grant player_name
Code: Select all
/map revoke player_name
Code: Select all
/map access
Code: Select all
/map go player_name
Code: Select all
/map go player_name map_number(1,2 or3)
After opening map editor with chat command "/e" you will see something like this:
- The main menu.
- After clicking the first button you exit edit mode.
- Next button is for switching to tiles editor (this is opened by default).
- Next button switches to map logic editor (you edit during this mode behavior not how the map looks) and the last button enters walking mode (without exiting editor). You need special access granted by me to see this button.
- At the end you can see current clicked position.
- Here you can see tiles main categories (and also backgrounds). Click on one of them and you will see:
- tiles from current category. Drag selected tile to the desired position on the map.
- Buttons for editing tiles.
- First button is for erasing tile at specified position. If you are using PC version instead of using this button you can click right mouse button at specified point to remove tile.
- Grid button for displaying size of all tiles added to the map.
- Next button clears all tiles in current grid point. Grid is displayed in pink color.
- Next button is for rotating current tile - not implemented yet.
- Undo button removes last added tile. You can click it multiple times to remove last changes.
If you have access for editing map logic then after entering this mode you will see this window:
In first row you can choose object type and then in second will appear the list of all objects of chosen type.
In the screenshot you can see that I chose enemies. Click chosen object to add it at current position.
Some objects like enemies, NPC are spawned when player enters 10x10 area between pink corners you can see on screenshot. These objects are displayed in yellow circle. The spawn position is random.
Other objects like portals, signs, switches markers have constant position and are placed exactly in the selected point.
You can click on added object and you will see context buttons. You can move the object, delete it or edit its parameters.
On the screen below you can see parameters for selected portal object which is teleport destination.
Object you can add/edit:
Chest
Chest can be opened by player only once and one item is added to that player. Chest change texture after opening to indicate it was already opened.
The parameter for chest is just item ID. You can find all items IDs here: http://dmgamestudio.com/files/items.list
Portal
Portal teleports player to different location which can on other map or on the same map. Example parameters:
teleports to the position 80.80 at the same map80.80
teleports to the map 0.0 at position 80.800.0.80.80
If you want to teleport player just to opposite side of portal then leave it empty. You don't need to specify coordinates.
Shop
Example content:
First line is sell ratio, then buy ratio and then items which you can buy in this shop.0.9
0.7
3 6 60 61 8 9 10 11 12 23 24 25 50 51 52 53 54 55 56 57 58 59
Each item has PRICE parameter which define base price. The first item in above shop is:
Code: Select all
3 3 WEAPON Short Sword DAMAGE:2 SPEED:5 SUBTYPE:SWORD LEVEL:0 PRICE:10
Switch
Example content:
The lines before "closed" are used in first state, the lines after "closed" in second state.del 74.140 120 1
add 74.140 120 0
del 7.106 75 12
add 7.106 75 13
closed
del 74.140 120 0
add 74.140 120 1
del 7.106 75 13
add 7.106 75 12
In the first line in our example word "del" means that tile 120_1 will be removed from position 74.120.
You can check tiles number by downloading http://dmgamestudio.com/files/ft8_dev_client.zip
Go to directory atlas_source/tiles_back/ to find tiles identifiers.
Smart NPC
Example content:
Smart NPC is NPC that walks to certain position, do some work and then go back. For example it fisherman who walks to X point, start fishing for Y time and then go back to70.70 3 1 435
starting point. Another example is lumberjack which is defined in above example.
This lumberjack goes to position 70.70 and finds tree around at some random position. Then start chopping a tree for around 3 seconds and then change his skin to 435 and goes back
to starting position.
You can check skins IDs in entities.list file: http://dmgamestudio.com/ftmmorpg7/entities.list
Available work types:
MINING 0
FELLING 1
FISHING 2
BUILDING 3
So the parameters are:
destination_position work_time work_type walking_back_skin_id
Sign
This one is easy. It just contains text displayed as notification when you click on it.
Example:
Kedington village - West. Forester - North.
Quests
Quests can be attached to 2 types of objects: NPC and Quest Entities.
- NPC spawns in random position near the place you put it on map.
Quests attached to certain NPC are stored in single file. It means that the NPC added to multiple
places or maps use the same quest code. That's why it is important to not change NPC quests made by somebody else. - Quest entities stays at the position you put it on map. Doesn't change its position like NPC.
Bellow is example header:
Code: Select all
story big_adventure
map 3.10
position 40.121
entity 7081
This name should be unique.
It defines the set of quests which consist on your story.
This story tag will help translators and testers work on your quests.
Translators can use "/t big_adventure" command to load all quests with tag "story big_adventure"
The best way to learn how quests work is to use /sherlock command. When you enable sherlock mode
then you can click on any NPC or quest entity and open it quest file. You can't made any changes just read.
Example file:
Code: Select all
id 13
chat_npc Help! Help!
chat_me Calm down lad, tell me what happened.
chat_npc Those bandits assulted and robbed me, I hardly survived...
chat_me Where did they go?
chat_npc They went south. They stole my emerald jewel, a gift for my fiancée. I will pay you, if you retrieve it. It is a price less heirloom to me, it has been in my family for generations...
quest_log Retrieve an emerald jewel from the bandits and bring it to the owner near the road sign
id 14
finish 13
needed_item 72
xp 50
gold 40
chat_npc Blessed be the spirits, you made it. I knew you would manage! Please take this.
Then quest dialog and quest log.
Then next quest id and requirements for the that quest.
To start quest 14 you need first finish quest 13 and you must have item with id 72.
The prize for completing this quest is 50 experience points and 40 pieces of gold.
When server executes such quest file then it looks for first not yet finished quest where all conditions are fulfilled.
Look also at other quests to learn how to create your own.
Below is example quest from 111.111.12.56 (door to the crypt in the pyramid)
Code: Select all
id 38
needed_item 112
teleport 112.112.13.6
id 39
notification You need a key to open the door.
Available quest commands:
xp - xp added after finishing quest
gold - gold added after finishing quest
item - item added after finishing quest
class_item - the same as above but only for certain hero class. Example: "class_item 694 WAND" . Classes are: SWORD, BOW, AXE, CLUB, WAND
needed_gold - minimum gold needed to start quest ( it will be taken by NPC)
needed_item - item needed to start quest ( it will be taken by NPC)
needed_item_return - item needed to start quest ( you don't loose it)
quest_log - specify message added to quest log
teleport - teleport player to specified destination
notification - display notification message
needed_level - specify minimum required level to start quest
needed_quest - specify quest needed to be finished before starting this quest
finish - the same as above but also close the quest log from that quest
not_finished_quest - the specified quest cannot be finished to start this quest
finish_any - only one of specified quests me be finished to continue. Example: "finish_any 121:413"
follow - create pet with specified id
needed_follower - you need to have pet with specified id to start quest
kill - kill all units with the specified id on this map ( with death animation)
remove - remove all units with specified id (disappear immediately). Without ID it will remove current quest entity.
create - create unit with specified id
jointeam - the NPC will join you as pet
leaveteam - detach pet with specified id
repeatable - after finishing quest don't add this quest id to the list of finished quest so you can trigger it again
needed_follower - here need to have pet with certain ID
start_kills - quest starts killing counter. Example: "start_kills 18 25" Hero need to kill 25 enemies with ID 18.
end_kills - quest is executed when we accomplished task from previously defined start_kills
start_items_collect - start collecting items. Example: "start_items_collect 3 5" You need bring 5 short swords (item id 3).
end_items_collect - quest is executed when we accomplished task from previously defined end_items_collect
for_testers - quest can be executed only by player who has tester status
daily - quest will be removed from finished quests list after day so player will be able to execute it once a day.
play_sound - play sound. Currently available sounds (If you need specific sound please send it to me and I will add it to the game client) : battlecry bow buzz cavalry chicken chop click cow crow death destroy dinosaur dragon fanfarea fanfareb fanfarec female_attack fireworks ghost gollem groan hahaha hammer hit magic male_attack meow monster1 monster2 monster3 monster4 monster5 ogre open sell shield_impact shot1 shot2 sword1 sword2 sword3 thunderstorm wings wolf wooden-horn worm zombie
run_command - execute server command.
undo_quest ID1 ID2... - remove certain quests from the list of completed quests.
Seeds
Special random number called seed which is generated in every map start. It is random number from range 0-100.
You can check it in quests. In groovy scripts with "getSeed()" and in normal quests using "seed min max".
What is it for? You can add some randomness to set of linked quests.
For example we can have 3 quests with teleports.
id 1
seed 0 33
teleport X.Y
id 2
seed 34 67
teleport A.B
id 3
seed 68 100
teleport C.D
If the seed will be set to 80 then only quest "id 3" can be activated and quest 1 and 2 will be inactive.
Counters
If you would like to create a Counter npc, there are 2 mechanisms that can be used.
%COUNT
%ITEMS_COUNT
They would work as such,
Code: Select all
id 1388
daily
chat_npc Hello adventurer!
chat_me Hello sir.
chat_npc If you could kill 30 Snow Dragons for me every day, I'll reward you.
chat_me I'll start right now!
quest_log Kill 30 Snow Dragons. You killed %COUNT so far.
start_kills 84 30
________________
id 1389
finish 1388
chat_me I've done it.
chat_npc Wonderful!
end_kills 84 30
Code: Select all
id 100
chat_npc Bring me 5 Short Swords please.
chat_me Okay
quest_log Bring 5 short swords to the man. You have %ITEMS_COUNT so far.
start_items_collect 3 5
______________________
id 101
finish 100
chat_me Here you go!
chat_npc Thank you!
end_items_collect 3 5
The quest can also require certain amount of work to be done before continuing. Here is example:
Code: Select all
id 3028
chat_me It looks like something is buried here. I will have to remove these rocks.
start_work mining 10
id 2663
needed_quest 3028
needed_work mining 10
notification You found a treasure.
item 356
Below is example of the quest which ask player to choose one from two options.
loadnext command triggers next available quest after finishing current quest.
Quest which asks player to choose option can have only one chat_npc line. \n - is used for new line.
Code: Select all
id 39999
chat_npc Bla bla bla
loadnext
id 40000
finish 39999
chat_npc Choose option\nV - option A\nX - option B
choose 40001 40002
loadnext
id 40003
needed_quest 40001
chat_npc You have chosen option A
id 40004
needed_quest 40002
chat_npc You have chosen option B
If you want to achieve something more complicated then you need to use scripts. Game scripts are written using groovy language.
Script should be inside special blocks: check, execute, end.
Here is example:
Code: Select all
id 9903
repeatable
check
if (hasFactor("outlaw")) {
return true;
}
else {
return false;
}
execute
teleport("0.3.52.40");
end
notification You are not allowed to enter the Spawn Event Map while in outlaw status.
between "execute" and "end" is executed.
You can omit "check" or "execute" block if you don't need them.
In above example if player is outlawed then he is teleported to other map.
The methods you can use in script engine:
On test sever you can reset all your quests with command:long getGold();
void addGold(long gold);
int getLevel();
boolean hasItem(int itemId);
boolean hasItem(ItemType itemType, ItemParam itemParam, int minimumValue);
void removeItem(ItemType itemType, ItemParam itemParam, int minimumValue);
int countItem(int itemId);
void removeItem(int itemId);
void addItem(int itemId);
void addItem(int itemId, int count);
void addXp(long xp);
WeaponType getWeaponType();
boolean isQuestFinished(int questId);
void finishQuest(int questId);
void resetQuest(int questId);
void markQuestFinished(int questId);
ArrayList<Integer> getFollowers();
void createEntity(int entityId);
void follow(int entityId);
void unfollow(int entityId);
void teleport(String destination);
void setFactor(String name, int value);
boolean hasFactor(String name);
int getFactor(String name);
ArrayList<QuestInterface> getNearPlayers(int range);
void changeFactor(String name, int value);
void playSound(String soundName);
void runCommand(String cmd);
void showNotification(String msg);
void showNotification(String msg, String param);
boolean hasTile(byte terrainId, byte tileId, V2d position);
void setQuestData(String name, String value);
String getQuestData(String name);
void setGlobalData(String name, String value);
String getGlobalData(String name);
int getSeed();
/resetquests
This should help working on your quests.
To remove all quests assigned to specified story type:
/resetquests story_name
You can also remove specific quest from the list of finished quests with command:
Code: Select all
/player i quest undo QUEST_ID
Code: Select all
/player i quest undo START_QUEST_ID-END_QUEST_ID
Code: Select all
/player i quest finish QUEST_ID
/player i quest finish START_QUEST_ID-END_QUEST_ID
Code: Select all
/player i item add ITEM_ID
Code: Select all
/player i item add ITEM_ID COUNT
Code: Select all
/player i gold add AMOUNT
Code: Select all
/player i level set VALUE
Map parameters
You can set special parameters to your map.
For example this command:
/map underground
will set "underground" parameter to your map which will enable constant darkness
/map lighted
this will disable night/day cycle
To set certain colors use this:
/map filter 0.8;0.3;0.3
first number is red, next green and then blue.
The values must be between 0.0-1.0
In this example the map will have red filter.
All parameters which change lighting require player re-login to see effect.
To check current map parameters just type:
/map
To set your map non_pvp type:
/map non_pvp
To remove this parameter just retype this command:
/map non_pvp
To force players to be teleported to certain map and position after disconnecting type:
/map teleport 0.0.100.100
To remove all parameters type:
/map normal
Traps
Traps parameters:
damage absolute_value
damage hp_percentage_value%
dot damage count value (damage over time)
freeze seconds
slow seconds
tile terrainID tileID (change tile for 5 seconds, for example display blades)
effect name
effect name start_position
Available effects:
https://dmgamestudio.com/files/effects.list
LEVEL 2
You can use builtin map editor to create new items, monsters, NPC, tiles and other objects.
Resources
You can create new resources from builtin map editor.
In parameter field you can enter:
A,B,C
where A is item ID you acquire ,
B is work ID: mining 0, felling 1, fishing 2, building 3
C - is optional and it makes limitation for resource, how many times you can acquire item from it
if you put -1 in work ID then it works like chest and gives item after clicking on at and then disappers
Crafting
Crafting is defined in craft.list in server assets.
Example line:
First is category. We have currently 6 categories:normal_high,great_forge 70 1000 258:3
normal, normal_high, magic, magic_high, siege, special.
Next line defines building needed to craft that item or quest you had to finish before you can craft this item.
We have:
laboratory, great_laboratory, forge, great_forge, workshop
You can check in units.json file that for example blue castle provides:
Next parameter in every craft.list line is crafting item ID. Here is 70 which is Carbon Ingot. Next crafting chance. 1000 = 100%craft forge laboratory workshop
After this there are ingredients. Here are 3 x item 258 which is Carbon Ore. Items IDs you will find in items.list file.
Spawns
/editspawns
/editspawns file_name
If you don't define file name then it will be stored in current map name.
Example:
Code: Select all
map -1.-1
time /12
/s 8
Code: Select all
map 0.0,2.2
start_hour 19
time 13
/s 8
If you don't specify "start_hour" then it will be execute at every hour at specified time.
Map parameter options:
map1|map2|map3 - execute on one random map from this list
map1,map2,map3 - execute on all of them
map:any - random map
map:any_active - random map with at least one online player
map:any_inactive - random map without players
You can choose only dungeons with these options:
map:any_dungeon, map:any_inactive_dungeon, map:any_active_dungeon
You can define also a day of the week:
day 1
or multiple days:
day 3 5
to execute on 3th and 5th day of the week.
"/s" command parameters:
/s monster_ID count:# pos:x.y item:# chance:# ai:heal:# repeat:# time:# hp:# xp:# str:# arm:# dex:#
Example:
/s 57 count:2 hp:10000 xp:30000 str:40 arm:40 dex:20 item:177 pos:40.40 chance:20
-> "chance 20" means 20 drops out of 1000, so this is 2%
-> position pos is on the same map.
-> no special order required
-> if you do not specify, a parameter has the monster's default value.
-> ai:heal:5:20 -> every 5s the monster ID69 restores 10% of the HP of monsters nearby
-> we have a short version: /s 57 c:2 h:10000 x:30000 s:40 a:40 d:20 i:177 p:40.40 which does the same as the above example.
You can also use make repeating spawn. For example if you use parameters:
repeat:3 time:2
then the spawn will be repeated 3 times with delay 2 seconds every each spawn.
You can use shorter version:
r:3 t:2