From no-reply_wiki at metalforge.org Mon Mar 1 11:51:42 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Mon, 01 Mar 2010 11:51:42 -0600 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: people Message-ID: <1267465902.571791.19778.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/01 11:51 User : Edit Summary: @@ -32,8 +32,9 @@ | Arvid Norlander | [[user:anmaster]] | anmaster | [[https://sourceforge.net/users/anmaster|anmaster]] | [[https://launchpad.net/~anmaster|anmaster]] | | | | | [[user:kshinji]] | | | | | | | Dany Talbot | [[user:Cybersoft]] | Cybersoft | [[https://sourceforge.net/users/crystalmir|crystalmir]] | | | | | Craig Kelleher | [[user:skate3241]] | skate3241 | | | | | + | Logan Perkins | |Alestan| [[https://sourceforge.net/users/alestan|alestan]] | | | | ===== Package Maintainers ===== ^ Full Name ^ irc ^ Distribution ^ IP-Address : 147.222.200.82 Old Revision: http://wiki.metalforge.net/doku.php/people?rev=1251863215 New Revision: http://wiki.metalforge.net/doku.php/people -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Sat Mar 20 06:57:46 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Sat, 20 Mar 2010 06:57:46 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:todo Message-ID: <1269086266.177849.11211.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/20 06:57 User : Edit Summary: @@ -1,4 +1,15 @@ + ==healthbars for monsters== + In progress. + + ==expansion to dialogue options== + + Fallback files for dialogue with npcs, holding general conversation details about the town. Different files for distinct groups of people. + eg, foo, an NPC in a tavern bar in the town baz: + may use foo.msg for conversations only he will have + will then use bar.msg for general conversation about the bar (who the other patrons are, where the toilets are, etc) + will then use baz.msg for general chat about the town (where the shops are located, maybe pointers to some low level quests). + == Spell Descriptions == currently sitting [[user:cavesomething:todo:Spelldescriptions|here]] == == party_lists == @@ -7,35 +18,11 @@ == == goto (combat, applying, saying) - deferred == for clicking on the mapview == == extended stats command == - keymode, applymode, map name, about a dozen others [[user:cavesomething:todo:stats| suggestions]] - - == == coloured text for jcrossclient - later == - - == == merge rods and horns - later == - - == == c-bay == - for auctioning items. - - == == generalise the shop currancy handling code. == - commodities tracking - commodities trading - fluctuating economies - - == == Transfer of maps between regions in response to external events == - war - - == == shop shares == - based on activity in them. - - == == skill hiscore tables == - using python - - == == applet-ise jcrossclient == + keymode, applymode, map name, about a dozen others [[user:cavesomething:todo:stats| suggestions]] maybe deffered. - == == Huffman-encode the commands in the protocol == - or maybe just map to single bytes. + == == HTML 5 Canvas Client == == == Player lists == like spell lists, but for players IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:todo?rev=1140291180 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:todo -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Sat Mar 20 21:33:12 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Sat, 20 Mar 2010 21:33:12 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:todo Message-ID: <1269138792.295226.16446.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/20 21:33 User : Edit Summary: update @@ -1,6 +1,17 @@ ==healthbars for monsters== In progress. + + ==quests without custom scripting== + In progress, still to be added: + For conversations, the following special keys: + 'grantitem' to make an npc give the player an object from their inventory + 'haskey' to check whether a player has a given key + 'takekey' to remove that key + 'triggerconnection' to cause a connected value to work. + + that'll give 6 special commands (in addition to the two quest ones already added) from which most sensible types of logic can be done + for the crazy types of logic, 'script' would be a nice addition. ==expansion to dialogue options== Fallback files for dialogue with npcs, holding general conversation details about the town. Different files for distinct groups of people. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:todo?rev=1269086264 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:todo -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Sat Mar 20 21:34:31 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Sat, 20 Mar 2010 21:34:31 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:todo Message-ID: <1269138871.835377.16449.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/20 21:34 User : Edit Summary: @@ -3,12 +3,12 @@ ==quests without custom scripting== In progress, still to be added: For conversations, the following special keys: - 'grantitem' to make an npc give the player an object from their inventory - 'haskey' to check whether a player has a given key - 'takekey' to remove that key - 'triggerconnection' to cause a connected value to work. + * 'grantitem' to make an npc give the player an object from their inventory + * 'haskey' to check whether a player has a given key + * 'takekey' to remove that key + * 'triggerconnection' to cause a connected value to work. that'll give 6 special commands (in addition to the two quest ones already added) from which most sensible types of logic can be done for the crazy types of logic, 'script' would be a nice addition. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:todo?rev=1269138789 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:todo -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Sun Mar 21 05:36:56 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Sun, 21 Mar 2010 05:36:56 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:todo Message-ID: <1269167816.712203.16435.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/21 05:36 User : Edit Summary: add random @@ -7,8 +7,9 @@ * 'grantitem' to make an npc give the player an object from their inventory * 'haskey' to check whether a player has a given key * 'takekey' to remove that key * 'triggerconnection' to cause a connected value to work. + * 'random' [chance] [seed] - should trigger chance% of the time. This should be generated against the object ID of the NPC (which won't change between resets), seed should be used to control the group of NPCs that are selected (so that two rules with the same chance and seed number will trigger on the same NPCs). Likewise, changing chance but not seed should increase or decrease the number of people included, but not reroll them (so you could have "chance" "20" "43" to tell a character about something, then "chance" "10" "43" to give more useful information on further questioning). '-seed' should invert the selection of 'seed' - more for convenience than anything else. that'll give 6 special commands (in addition to the two quest ones already added) from which most sensible types of logic can be done for the crazy types of logic, 'script' would be a nice addition. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:todo?rev=1269138870 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:todo -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Mon Mar 22 15:28:40 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Mon, 22 Mar 2010 15:28:40 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:todo Message-ID: <1269289720.276835.27437.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/22 15:28 User : cavehippo Edit Summary: update, link to guide @@ -1,14 +1,11 @@ ==healthbars for monsters== In progress. ==quests without custom scripting== + [[guide to quest dialogs]] In progress, still to be added: For conversations, the following special keys: - * 'grantitem' to make an npc give the player an object from their inventory - * 'haskey' to check whether a player has a given key - * 'takekey' to remove that key - * 'triggerconnection' to cause a connected value to work. * 'random' [chance] [seed] - should trigger chance% of the time. This should be generated against the object ID of the NPC (which won't change between resets), seed should be used to control the group of NPCs that are selected (so that two rules with the same chance and seed number will trigger on the same NPCs). Likewise, changing chance but not seed should increase or decrease the number of people included, but not reroll them (so you could have "chance" "20" "43" to tell a character about something, then "chance" "10" "43" to give more useful information on further questioning). '-seed' should invert the selection of 'seed' - more for convenience than anything else. that'll give 6 special commands (in addition to the two quest ones already added) from which most sensible types of logic can be done for the crazy types of logic, 'script' would be a nice addition. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:todo?rev=1269167814 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:todo -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Mon Mar 22 19:27:21 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Mon, 22 Mar 2010 19:27:21 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page added: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269304041.503211.29235.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/22 19:27 User : cavehippo Edit Summary: created ====== Dialog-Driven Quests ====== The following is a guide to creating your own dialog-driven quest. By dialog-driven, I mean that most of the events in the quest occur from talking to NPCs. You can construct a quest without speaking to any NPCs, but it is harder to write a narrative when you do that. ===== Dialogs ===== Dialogs are specified using a JSON syntax, we'll have a simple example first, followed by a general explanation of all the options: ==== Example ==== { "location" : "friendlypeep", "rules": [ { "match" : ["*"], "pre" : [["token", "seenbefore", "yes"], ["item", "money", "100"]], "post": [], "msg" : ["Hello again $you, you are rich."] },{ "match" : ["*"], "pre" : [["token", "seenbefore", "yes"]], "post": [], "msg" : ["Hello again $you."] },{ "match" : ["*"], "pre" : [], "post": [["settoken", "seenbefore", "yes"]], "msg" : ["Hello I'm $me."] } ]} ==== Taking it apart ==== Each potential line of dialog forms a 'rule' these rules are checked in sequence, from the top of the file down. * The first part of each rule is the 'match' - This is what the player has said to the NPC - These ones are all * so will match on anything the player might say. * Next are the 'pre' conditions, in order to match a rule, **all** of the pre-conditions must be true. * After that we have 'post' actions, these are things that happen after Because we check from the top down, the most restrictive rule goes first. === Rule 1 === We'll look at the topmost rule first. { "match" : ["*"], "pre" : [["token", "seenbefore", "yes"], ["item", "money", "100"]], "post": [], "msg" : ["Hello again $you, you are rich."] } There are two conditions we must meet. The first condition is: ["token", "seenbefore", "yes"] This checks that the token "seenbefore" has been set to yes. Tokens are set in dialogs by the 'post' actions, if this is your first time speaking to this character, it won't have been set yet. The second condition is: ["item", "money", "100"] This checks if the player has enough of a certain item, first there is the item to check for, then the number required. "Money" is a special case, it checks for silver, gold or platinum, up to the required value in silver. (so in this instance 2 platinum would meet the target, as would 1 platinum, 4 gold and 10 silver) There are no post actions for this rule, so now we look at the message: "msg" : ["Hello again $you, you are rich."] This is the text that the NPC will say to the player. //$you// is replaced by the name of the player ===Rule 2=== Rule 2 is similar to rule 1, except that the item condition is missing, as such it will trigger when the token is present, but the amount of money held by the player is less than 100 ===Rule 3=== { "match" : ["*"], "pre" : [], "post": [["settoken", "seenbefore", "yes"]], "msg" : ["Hello I'm $me."] } Rule 3 has no pre block, and matches *, so it will always work if one of the other rules hasn't triggered first (that is why it is the last rule to be checked). Here we have a 'post' block which sets the token 'seenbefore' to yes, this means that the next time that we speak to this character, the check ["token", "seenbefore", "yes"] will pass and one of the first two rules will be used. Tokens are stored in the player file, under the "location" which was specified at the top of the file. Any dialog files which point to the same location have access to the same tokens (and can affect the values they hold). Two tokens with the same name but in different locations are treated separately. Finally there is the message block where //$me// is replaced by the name of the NPC. ==== Full List of options ==== The options that can be used vary in the different blocks: === The Match Block === This holds the text that the player should say before we check if the rule applies. There can be one or multiple words specified, or "*" which matches anything. eg "match" : ["gork","hoard","yes","want"] This will match any out of "gork", "hoard", "yes" or "want" === The Pre Block === In the Pre Block, the following checks are supported: * Quest * Item * Token == Quest == Quest is followed by two fields, the name of the quest, and the stage that the player must be at or past. eg ["quest", "testquest", "5"] Checks that the player has reached at least step 5 of the quest 'testquest' == Item == Item is followed by the name of the item to check for, and optionally the number that are required. eg ["item", "testquesttarget"] or ["item", "money", "100"] The first example looks to see if the player is holding at least one item called "testquesttarget", the second looks to see if he is holding at least 100 "money". "Money" is a special case, it checks for silver, gold or platinum, up to the required value in silver. (so if you look for 100 money then 2 platinum would meet the target, as would 1 platinum, 4 gold and 10 silver, or 1 gold and 90 silver, etc) The number of items required may be omitted, if so it will look for '1' of the item. The number may also be set to '0', this checks that the player does **not** have the item. == Token == Checks for Token to have a value from the list of values provided. eg ["token", "pester", "1"] Checks whether the token "pester" holds the value "1" There can be more than 1 value provided. Tokens are stored in the player file, under the "location" which was specified at the top of the file. Any dialog files which point to the same location have access to the same tokens (and can affect the values they hold). Two tokens with the same name but in different locations are treated separately. === The Post Block === After the Pre block is used to decide whether a message should trigger, the post block holds the consequences. There are 5 different options here: * quest * giveitem * takeitem * settoken * connection == quest == This sets the named quest to the stage which is specified. eg: ["quest", "testquest" "5"] Moves the player to stage 5 in "testquest" If the quest hasn't been started yet, this also starts the quest. Note that you can not set a quest to a stage which is earlier than the one it is currently at. In order to prevent that happening, you should have an earlier rule which checks for the stage you want to advance to, typically this not going to do much other than remind the player what already happened. eg "match" : ["*"], "pre" : [["quest", "testquest" "5"]], "post": [], "msg" : ["I've already opened the door."] },{ "match" : ["*"], "pre" : [["quest", "testquest" "4"]], "post": [["connection", "4"], ["quest", "testquest" "5"]], "msg" : ["I'll just open the door for you."] The first rule triggers when we are already at stage 5, the second rule when we are at stage 4, and then moves us to stage 5 == giveitem == Gives the player an item or items from the NPCs inventory. eg ["giveitem", "biccie", "2"] or ["giveitem", "money", "74"] The first of these gives the player an 2 'biccie's - There **must** be at least one such an item in the NPC's inventory already for this to work. This item may be customised in any manner you want in the map editor. It does not matter how many biccies the NPC actually has, one is enough; when they give items, they create copies of the ones they already have. The second of these gives the player 74 money, made up of the smallest possible number of platinum, gold and silver coins. The NPC does **not** need to have money in his inventory in order to give it. The name should be the name of the item to be given, or money. The number may be omitted, if so it is treated as 1. Note that items which are given away are in the NPCs inventory, so if the NPC is killed, they will drop. If you don't want to be able to acquire these items through killing the NPC, then you should set the god-given flag on the item. - This is removed when the item is given to the player. == takeitem == Removes the given number of an item from the inventory of the player. eg ["takeitem","testquesttarget"] Removes one instance of an item called testquesttarget from the players inventory. You may specify "money" and coins will be removed to the correct value. You may omit the number, and 1 will be assumed. You may specify '0', which will take all of the items of the specified type. Note that you will need to check that the player has the item(s) to take first, as such you should always use this in the following way: "match" : ["*"], "pre" : [["item", "testquesttarget"]] "post": [["takeitem","testquesttarget"]] That is to say, having a matching item check before removing the item. == settoken == Sets the specified token to the specified value, other rules can query this value using 'token' in the pre block. Tokens are stored in the player file, under the "location" which was specified at the top of the file. Any dialog files which point to the same location have access to the same tokens (and can affect the values they hold). Two tokens with the same name but in different locations are treated separately. == connection == Triggers the specified connection on the map eg ["connection", "4"] This allows NPCs to appear to do things for the player. eg { "match" : ["*"], "pre" : [["quest", "testquest" "4"]], "post": [["connection", "4"], ["quest", "testquest" "5"]], "msg" : ["I'll just open the door for you."] } will give the impression the NPC has opened a door as long as there is a door with connection 4 set in the map editor. === The msg Block === This is send directly to the player, if the pre conditions are matched, with the following exceptions: //$you// is replaced by the name of the player //$me// is replaced by the name of the NPC Obviously, it probably doesn't make sense to use $you on the first line of dialogue that will be spoken, unless there is a story-based reason for the NPC to know who the player is. IP-Address : 81.141.60.247 Old Revision: none New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Mon Mar 22 21:01:09 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Mon, 22 Mar 2010 21:01:09 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269309669.254356.29698.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/22 21:01 User : cavehippo Edit Summary: update, add level. @@ -130,8 +130,9 @@ * Quest * Item * Token + * Level == Quest == Quest is followed by two fields, the name of the quest, and the stage that the player must be at or past. @@ -169,8 +170,18 @@ Checks whether the token "pester" holds the value "1" There can be more than 1 value provided. Tokens are stored in the player file, under the "location" which was specified at the top of the file. Any dialog files which point to the same location have access to the same tokens (and can affect the values they hold). Two tokens with the same name but in different locations are treated separately. + + == Level == + + Checks if the player is at or above the specified level, + + "pre" : [["level", "10"]], + + + Will trigger if the player is at least at level 10, and will not trigger if they are below it. + While you can use this to block of entire quest lines until certain levels, it is probably better in general to use this test to bypass a warning about being too weak. === The Post Block === After the Pre block is used to decide whether a message should trigger, the post block holds the consequences. @@ -246,9 +257,9 @@ Removes one instance of an item called testquesttarget from the players inventory. You may specify "money" and coins will be removed to the correct value. You may omit the number, and 1 will be assumed. - You may specify '0', which will take all of the items of the specified type. + You may specify '0', which will take all of the items that the player has. - Be careful with this, while you can specify ["takeitem", "money", "0"], you probably shouldn't. Note that you will need to check that the player has the item(s) to take first, as such you should always use this in the following way: IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269304037 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Tue Mar 23 13:54:05 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Tue, 23 Mar 2010 13:54:05 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269370445.340123.32693.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/23 13:54 User : Edit Summary: describe NPC_Gift_Box @@ -3,8 +3,10 @@ The following is a guide to creating your own dialog-driven quest. By dialog-driven, I mean that most of the events in the quest occur from talking to NPCs. + + Dialogs can be used separately from any quests at all, but because quests are going to use them, we will cover them first. You can construct a quest without speaking to any NPCs, but it is harder to write a narrative when you do that. ===== Dialogs ===== @@ -134,14 +136,16 @@ * Level == Quest == - Quest is followed by two fields, the name of the quest, and the stage that the player must be at or past. + Quest is followed by two fields, the name of the quest, and the step that the player must be at or past. eg ["quest", "testquest", "5"] Checks that the player has reached at least step 5 of the quest 'testquest' + + Have a look at the 'Quest' Section for an explanation of the 'steps' == Item == Item is followed by the name of the item to check for, and optionally the number that are required. @@ -241,9 +245,10 @@ The second of these gives the player 74 money, made up of the smallest possible number of platinum, gold and silver coins. The NPC does **not** need to have money in his inventory in order to give it. The name should be the name of the item to be given, or money. The number may be omitted, if so it is treated as 1. - Note that items which are given away are in the NPCs inventory, so if the NPC is killed, they will drop. If you don't want to be able to acquire these items through killing the NPC, then you should set the god-given flag on the item. - This is removed when the item is given to the player. + Note that items which are given away are in the NPCs inventory, so if the NPC is killed, they will drop. + If you **don't** want to be able to acquire these items through killing the NPC, then you should create an NPC_Gift_Box item in the NPCs inventory, and put the items in there. This is checked before the rest of the NPCs inventory is. == takeitem == Removes the given number of an item from the inventory of the player. @@ -306,6 +311,12 @@ //$you// is replaced by the name of the player //$me// is replaced by the name of the NPC Obviously, it probably doesn't make sense to use $you on the first line of dialogue that will be spoken, unless there is a story-based reason for the NPC to know who the player is. + + + ==== Quest Definition ==== + + Quests are defined in a text file, in a similar way to archetypes. There are a collection of fields that may be used to express different properties of the quest. + IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269309665 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Tue Mar 23 14:54:50 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Tue, 23 Mar 2010 14:54:50 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269374090.852769.515.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/23 14:54 User : Edit Summary: @@ -247,8 +247,18 @@ The name should be the name of the item to be given, or money. The number may be omitted, if so it is treated as 1. Note that items which are given away are in the NPCs inventory, so if the NPC is killed, they will drop. If you **don't** want to be able to acquire these items through killing the NPC, then you should create an NPC_Gift_Box item in the NPCs inventory, and put the items in there. This is checked before the rest of the NPCs inventory is. + + == givecontents == + + This is like giveitem, except that it gives whatever is in the container specified, rather than the container. + + You should use this when: + * There are a lot of items you want to give at the same time + * You want to use a treasure list to create an item, you won't know what items will be generated exactly, but by putting it in a container, you can give the player whatever is in there. + + **Warning:** You probably //Don't// want to use a treasure list that contains monsters, it'll sort of work, but don't do it. == takeitem == Removes the given number of an item from the inventory of the player. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269370442 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Tue Mar 23 15:38:44 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Tue, 23 Mar 2010 15:38:44 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269376724.192127.709.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/23 15:38 User : Edit Summary: @@ -193,8 +193,9 @@ There are 5 different options here: * quest * giveitem + * givecontents * takeitem * settoken * connection IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269374087 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Tue Mar 23 16:02:13 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Tue, 23 Mar 2010 16:02:13 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269378133.828839.1756.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/23 16:02 User : Edit Summary: @@ -247,9 +247,11 @@ The name should be the name of the item to be given, or money. The number may be omitted, if so it is treated as 1. Note that items which are given away are in the NPCs inventory, so if the NPC is killed, they will drop. - If you **don't** want to be able to acquire these items through killing the NPC, then you should create an NPC_Gift_Box item in the NPCs inventory, and put the items in there. This is checked before the rest of the NPCs inventory is. + If you **don't** want to be able to acquire these items through killing the NPC, then you should create an NPC_Gift_Box item in the NPCs inventory, and put the items in there. This is checked before the rest of the NPCs inventory is, so if you want to give an item that is similar to one that might come from the NPCs treasure list, then that should go their too. + + You will particularly want to use the NPC_Gift_Box if you have any easily accessible NPCs who are rewarding Inaccessible quests. (eg, someone in a town who asks you to fetch something from a very deep dungeon). == givecontents == This is like giveitem, except that it gives whatever is in the container specified, rather than the container. @@ -329,5 +331,16 @@ Quests are defined in a text file, in a similar way to archetypes. There are a collection of fields that may be used to express different properties of the quest. + ==== How Do I? ==== + + The following are common things to want to do, and how to go about doing them. + + * Make an object either be given in a dialogue, or be found on the corpse of the NPC when killed, but not both? + First of all, put one copy of the item in an NPC_Gift_Box (this is the copy that will be tied to the dialog), and one on the NPC directly. + Make sure that the same messages that cause the item(s) to be given to the player, also set a quest step (if you have no suitable quest, then you can create a simple one-step quest which is hidden ** TODO **) + Next, put an event_death listener on the NPC + Use the script **Script not written yet** with the options **TODO** to remove the copy of the object from the monster's inventory if they are killed by a player who is past a certain stage in the given quest. + + Now the player can either kill the NPC and claim the item, or he can talk to him and claim the item, but can not talk to the NPC, get the item, then kill the NPC and get another copy of the item. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269376721 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Tue Mar 23 18:31:17 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Tue, 23 Mar 2010 18:31:17 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269387077.771817.2306.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/23 18:31 User : Edit Summary: @@ -133,8 +133,9 @@ * Quest * Item * Token * Level + * Age == Quest == Quest is followed by two fields, the name of the quest, and the step that the player must be at or past. @@ -184,8 +185,49 @@ Will trigger if the player is at least at level 10, and will not trigger if they are below it. While you can use this to block of entire quest lines until certain levels, it is probably better in general to use this test to bypass a warning about being too weak. + + == Age == + + This checks if the date of a time marker is older than the specified age. + + there are 6 things you will want to set. + + The marker name, which should've been set with 'marktime' (see the post section) + then the time to wait in + * years + * months + * Days + * Hours + * Minutes + + + "pre" : [["age", "mymarker", "0", "0", "1", "10", "0"]], + + + is true if the marker "mymarker" was last marked as being set at least 1 day and 10 hours ago. + + This time is in server time, which is accelerated from real-time, it is also the time defined in the game world. In the crossfire game world: + + * 1 Year has 17 Months + * 1 Month has 35 Days + * 1 Day has 28 hours + * 1 Hour has 60 minutes + + Any attempt to check for an age of more than these values is an error - ie, + + This is **Wrong**: + + "pre" : [["age", "mymarker", "0", "0", "36", "0", "0"]], + + use this: + + "pre" : [["age", "mymarker", "0", "1", "1", "0", "0"]], + + + Instead + === The Post Block === After the Pre block is used to decide whether a message should trigger, the post block holds the consequences. @@ -292,8 +334,10 @@ Sets the specified token to the specified value, other rules can query this value using 'token' in the pre block. Tokens are stored in the player file, under the "location" which was specified at the top of the file. Any dialog files which point to the same location have access to the same tokens (and can affect the values they hold). Two tokens with the same name but in different locations are treated separately. + + NB: Tokens and time markers are actually the same thing, so if you need to reset a timemarker, then you can use settoken, and set it to 0, if you do, all age checks against the marker will fail until it is set again. == connection == Triggers the specified connection on the map @@ -316,8 +360,21 @@ } will give the impression the NPC has opened a door as long as there is a door with connection 4 set in the map editor. + + == marktime == + + Stores the current server time in a time token with the name specified. + + eg + + ["marktime", "mymarker"] + + + Stores the current time in "mymarker", you can then check this with 'age' in a 'pre' block to check how long has passed since that point. + + This can be used for putting time limits on parts of dialog/quests etc. === The msg Block === This is send directly to the player, if the pre conditions are matched, with the following exceptions: @@ -335,12 +392,12 @@ ==== How Do I? ==== The following are common things to want to do, and how to go about doing them. - * Make an object either be given in a dialogue, or be found on the corpse of the NPC when killed, but not both? - First of all, put one copy of the item in an NPC_Gift_Box (this is the copy that will be tied to the dialog), and one on the NPC directly. - Make sure that the same messages that cause the item(s) to be given to the player, also set a quest step (if you have no suitable quest, then you can create a simple one-step quest which is hidden ** TODO **) - Next, put an event_death listener on the NPC - Use the script **Script not written yet** with the options **TODO** to remove the copy of the object from the monster's inventory if they are killed by a player who is past a certain stage in the given quest. + - Make an object either be given in a dialogue, or be found on the corpse of the NPC when killed, but not both? + * First of all, put one copy of the item in an NPC_Gift_Box (this is the copy that will be tied to the dialog), and one on the NPC directly. + * Make sure that the same messages that cause the item(s) to be given to the player, also set a quest step (if you have no suitable quest, then you can create a simple one-step quest which is hidden ** TODO **) + * Next, put an event_death listener on the NPC + * Use the script **Script not written yet** with the options **TODO** to remove the copy of the object from the monster's inventory if they are killed by a player who is past a certain stage in the given quest. Now the player can either kill the NPC and claim the item, or he can talk to him and claim the item, but can not talk to the NPC, get the item, then kill the NPC and get another copy of the item. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269378131 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Tue Mar 23 18:41:22 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Tue, 23 Mar 2010 18:41:22 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269387682.266043.2330.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/23 18:41 User : Edit Summary: @@ -206,9 +206,9 @@ is true if the marker "mymarker" was last marked as being set at least 1 day and 10 hours ago. - This time is in server time, which is accelerated from real-time, it is also the time defined in the game world. In the crossfire game world: + This time is in game time, which is accelerated from real-time, it is also the time defined in the game world. In the crossfire game world: * 1 Year has 17 Months * 1 Month has 35 Days * 1 Day has 28 hours IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269387073 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Tue Mar 23 20:56:25 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Tue, 23 Mar 2010 20:56:25 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269395785.075351.2848.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/23 20:56 User : cavehippo Edit Summary: @@ -213,21 +213,19 @@ * 1 Month has 35 Days * 1 Day has 28 hours * 1 Hour has 60 minutes - Any attempt to check for an age of more than these values is an error - ie, + Any attempt to check for an bigger numbers than these will be silently rewritten in use - ie, - This is **Wrong**: "pre" : [["age", "mymarker", "0", "0", "36", "0", "0"]], - use this: + gets treated the same as: "pre" : [["age", "mymarker", "0", "1", "1", "0", "0"]], - Instead - + Although it would be better to use the second version because it is easier to compare to other age checks. === The Post Block === After the Pre block is used to decide whether a message should trigger, the post block holds the consequences. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269387679 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Wed Mar 24 12:42:19 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Wed, 24 Mar 2010 12:42:19 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: cfpython Message-ID: <1269452539.441362.5733.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/24 12:42 User : cavehippo Edit Summary: @@ -725,8 +725,15 @@ Argument: * ''string'' to say. Equivalent to ''Say''. + + ==== Split ==== + This should only be called on stacks of objects (where Object.Quantity is greater than 1) + This takes an object with n items in it's stack, and splits it into two objects, returning the new object. This new object contains the number of items specified by the argument, the original object has its Quantity reduced by the same amount. + + Argument: + * ''Number'' how many of the item should be moved to the new object. ==== Take ==== Current object picks up specified object, which will be put in inventory, or in a container, depending on applied containers. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/cfpython?rev=1264347746 New Revision: http://wiki.metalforge.net/doku.php/cfpython -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Thu Mar 25 01:09:21 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Thu, 25 Mar 2010 01:09:21 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269497361.968775.5275.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/25 01:09 User : cavehippo Edit Summary: update description of quest definition @@ -2,13 +2,13 @@ The following is a guide to creating your own dialog-driven quest. - By dialog-driven, I mean that most of the events in the quest occur from talking to NPCs. + By dialog-driven, I mean that most (but not all) of the events in the quest occur from talking to NPCs. - Dialogs can be used separately from any quests at all, but because quests are going to use them, we will cover them first. + Dialogues can be used without having any associated quests at all, likewise you can create a quest without having any dialog, but you will find it much easier if you use dialogue to drive a narrative forward. - You can construct a quest without speaking to any NPCs, but it is harder to write a narrative when you do that. + The first section of this guide covers dialogues. ===== Dialogs ===== Dialogs are specified using a JSON syntax, we'll have a simple example first, followed by a general explanation of all the options: @@ -280,18 +280,18 @@ ["giveitem", "biccie", "2"] or ["giveitem", "money", "74"] - The first of these gives the player an 2 'biccie's - There **must** be at least one such an item in the NPC's inventory already for this to work. This item may be customised in any manner you want in the map editor. It does not matter how many biccies the NPC actually has, one is enough; when they give items, they create copies of the ones they already have. + The first of these gives the player a stack of 2 'biccie's - There **must** be at least one such item in the NPC's inventory already for this to work. This item may be customised in any manner you want in the map editor. It does not matter how many biccies the NPC actually has, one is enough; when they give items, they create copies of the ones they already have. The second of these gives the player 74 money, made up of the smallest possible number of platinum, gold and silver coins. The NPC does **not** need to have money in his inventory in order to give it. The name should be the name of the item to be given, or money. The number may be omitted, if so it is treated as 1. Note that items which are given away are in the NPCs inventory, so if the NPC is killed, they will drop. - If you **don't** want to be able to acquire these items through killing the NPC, then you should create an NPC_Gift_Box item in the NPCs inventory, and put the items in there. This is checked before the rest of the NPCs inventory is, so if you want to give an item that is similar to one that might come from the NPCs treasure list, then that should go their too. + If you **don't** want to be able to acquire these items through killing the NPC, then you should create an 'NPC_Gift_Box' item in the NPCs inventory, and put the items in there. This is checked before the rest of the NPCs inventory is, so if you want to give an item that is similar to one that might be generated from the NPCs treasure list, then it is probably better to put that in their also. - You will particularly want to use the NPC_Gift_Box if you have any easily accessible NPCs who are rewarding Inaccessible quests. (eg, someone in a town who asks you to fetch something from a very deep dungeon). + You will particularly want to use the NPC_Gift_Box if you have any easily accessible NPCs who are rewarding inaccessible quests. (eg, someone in a town who asks you to fetch something from a very deep dungeon). == givecontents == This is like giveitem, except that it gives whatever is in the container specified, rather than the container. @@ -385,17 +385,172 @@ ==== Quest Definition ==== Quests are defined in a text file, in a similar way to archetypes. There are a collection of fields that may be used to express different properties of the quest. + The following is an example of a quest definition. + + + quest scorn/GorksTreasure + title Gorks Treasure Hoard + description + Gain access to Gork's treasure + end_description + stopstep 50 + restart 1 + step 10 + description + I have been told that there is a troll in town called Gork, who guards a stash of treasure, it may be worth paying him a visit. + end_description + end_step + step 20 + description + I have spoken to a peaceful, but distinctly unpleasant troll called Gork, who is guarding a stash of treasure. Maybe if I continue to speak with him I can find a way to get access to his stash. + end_description + end_step + step 30 + description + Gork has indicated that his friend Mork can also open the treasure room. Maybe if I can find Mork he will be more agreeable than Gork is + end_description + end_step + step 40 + description + I have spoken to Mork, and he has given me the key to Mork's treasure room + end_description + end_step + step 50 + description + I have used Mork's key to gain access to Gork's treasure room. + end_description + end_step + end_quest + + + Again, I'll take this apart step by step: + + === The header === + + quest scorn/GorksTreasure + title Gorks Treasure Hoard + description + Gain access to Gork's treasure + end_description + stopstep 50 + restart 1 + + There are a number of entries here, I'll cover them in the order they appear, then explain the other options this quest doesn't use. + + == quest == + The start of any quest is the 'quest' line, which gives the name the quest is known by internally. This is a mandatory entry + Good practice is to set up quests as region/questname - + + == title == + The title provides the name that the players will know the quest by - This is optional (but recommended) + + ==description== + 'description' appears on a line on its own on a line on its own, everything that follows until a line containing 'end_description' is a summary of the purpose of the quest overall. - This is optional (but recommended for non-hidden quests) + + ==stopstep== + This is the step after which the quest will be consider 'complete' + you need to specify a stopstep if you want your quest to be able to end. + + ==restart== + either 0 or 1. + Whether it is permitted for a player to play through this quest multiple times. 1 indicates a restartable quest, 0 a non-restartable one. If constructing a quest which is restartable, then you should be careful of items like keys, which might be able to be kept between attempts allowing parts of the quest to be bypassed. consider also the use of a marktime/age combination in a conversation to stop the quest restarting immediately. + + Other options: + + ==hidden== + **TODO**: Indicates that the quest is tracked, but that updates are not sent to the player. You can use this to create convenience quests which silently track progress in other quests. + + ==party== + **TODO**: define how the quest should interact with party membership, options are: + * solo - No members of the player's party can assist with this quest at all. + * assist - members of the player's party can choose to assist with this quest, and can trigger updates for the player if they are on the same map. + * team - members of the player's party can choose to work with the player on this quest, and any updates triggered act for all players if they are on the same map. (regardless of what the state was for non-triggering players) + * globalteam - members of the player's party can choose to work with the player on this quest, and any updates triggered act for all players regardless of where they are in the world. (regardless of what the state was for non-triggering players) + + Members of a party can find quests to help their party members with by using the 'party quest' command **TODO ** Not implemented yet. + + ===The Quest Steps=== + A quest step is a single 'state' within a quest. Any given player may only be in one state in a quest at any one time. + + A quest step looks like this: + + + step 40 + description + I have spoken to Mork, and he has given me the key to Mork's treasure room + end_description + end_step + + + entries are as follows: + + == step == + Followed by a number, this marks the start of the step definition, which continues until you reach the next end_step + The step numbers are what you will need to use to refer to this quest in dialogs and other events. It is good practice (though not required) to number steps 10,20,30, etc, that way if it is necessary to add additional steps at a later date, it will not be necessary to hunt through maps and dialogs for existing step numbers to change. + + == description == + + descriptions act the same as the description for the quest overall, but have a slightly different meaning. The description of a step should be thought of as a 'what just happened/what should I be doing now' type of text, whereas the quest description is more abstract. + + == solo == + ** TODO ** + may appear on its own, and indicates that an update **to** this step should not apply to other members of the team, this can be used for steps where items are given out so that all players in a team can get the item(s) in question. + + ====Interacting with quests outside of Dialog ==== + We have covered how to handle quest updates in Dialog, and how to define the quests that are updated, but what about updating a quest in response to picking up an object, killing a particular monster or reaching a certain place? + + In the map editor there is the option to bind events to objects, you will already have used this to bind event_say to an NPC. + + In order to have map-based updates, you will want to bind other events to items. + + The following page lists the types of events you can bind to, and describes when they trigger. + + [[http://wiki.metalforge.net/doku.php/server_plugin#hooking_to_an_object-specific_event]] + + For quest building, you will probably find that apply, attack, death, pickup and trigger are the most useful events, although you may find occasional use for other events too. + + When you bind events to objects, you need to pick a script to use, so far you will have been using python/dialog/npc_dialog.py, but you can use any script you want. + + For general-purpose quest updating the first place to look will be QuestAdvance.py + + == QuestAdvance.py == + + QuestAdvance.py should be used as in the following example: + + {{user:cavesomething:questadvance.png|}} + + Here we see that the script is bound to event_pickup, which means it will trigger whenever this item is picked up. + + First the name of the quest is specified, then the update rules. + + An update rule is a step number or range of step numbers and then a step number to move to. + + So 0>3 means, if the player is currently at step 0 (ie, haven't started the quest yet) then move them to step 3 + 1>2 means, if the player is currently at step 1, move them to step 2 + + if the player were not at either step 0 or 1 in this example, then nothing would happen when the event triggered. + + NB: Be careful about binding to event_pickup for items that are not taken away as part of a quest soon afterwards, especially for restartable quests, an event_pickup will return ==== How Do I? ==== The following are common things to want to do, and how to go about doing them. - - Make an object either be given in a dialogue, or be found on the corpse of the NPC when killed, but not both? + == Make an object either be given in a dialogue, or be found on the corpse of the NPC when killed, but not both? == * First of all, put one copy of the item in an NPC_Gift_Box (this is the copy that will be tied to the dialog), and one on the NPC directly. * Make sure that the same messages that cause the item(s) to be given to the player, also set a quest step (if you have no suitable quest, then you can create a simple one-step quest which is hidden ** TODO **) * Next, put an event_death listener on the NPC * Use the script **Script not written yet** with the options **TODO** to remove the copy of the object from the monster's inventory if they are killed by a player who is past a certain stage in the given quest. Now the player can either kill the NPC and claim the item, or he can talk to him and claim the item, but can not talk to the NPC, get the item, then kill the NPC and get another copy of the item. + == Make a quest update on a player reaching a certain point on a map?== + Put a small button under the floor, add to the small button's inventory a 'trigger' event. point the event at python/dialog/QuestAdvance.py and give the appropriate stage update rules. + + == Do something really complex that no one has considered before? == + + Hop on IRC and and ask for advice. + + == Make the outcome of a quest determine which map an exit leads to (ie, define aftermath maps for quests that players can return to) == + I don't know yet, working on it. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269395781 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Thu Mar 25 11:41:16 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Thu, 25 Mar 2010 11:41:16 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269535276.781325.11229.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/25 11:41 User : cavehippo Edit Summary: @@ -1,5 +1,5 @@ - ====== Dialog-Driven Quests ====== + ======= Dialog-Driven Quests ======= The following is a guide to creating your own dialog-driven quest. @@ -8,13 +8,13 @@ Dialogues can be used without having any associated quests at all, likewise you can create a quest without having any dialog, but you will find it much easier if you use dialogue to drive a narrative forward. The first section of this guide covers dialogues. - ===== Dialogs ===== + ====== Dialogs ====== Dialogs are specified using a JSON syntax, we'll have a simple example first, followed by a general explanation of all the options: - ==== Example ==== + ===== Example ===== { "location" : "friendlypeep", @@ -37,19 +37,21 @@ } ]} - ==== Taking it apart ==== + ===== Taking it apart ===== Each potential line of dialog forms a 'rule' these rules are checked in sequence, from the top of the file down. * The first part of each rule is the 'match' - This is what the player has said to the NPC - These ones are all * so will match on anything the player might say. * Next are the 'pre' conditions, in order to match a rule, **all** of the pre-conditions must be true. - * After that we have 'post' actions, these are things that happen after + * After that we have 'post' actions, these are things that happen after + * Then we have the 'msg' which is what the NPC will say. + * Finally, there is an optional last part, which can have two forms, 'suggests' or 'requires' - these hold responses that the client can give. Because we check from the top down, the most restrictive rule goes first. - === Rule 1 === + ==== Rule 1 ==== We'll look at the topmost rule first. @@ -86,13 +88,13 @@ This is the text that the NPC will say to the player. //$you// is replaced by the name of the player - ===Rule 2=== + ====Rule 2==== Rule 2 is similar to rule 1, except that the item condition is missing, as such it will trigger when the token is present, but the amount of money held by the player is less than 100 - ===Rule 3=== + ====Rule 3==== { "match" : ["*"], @@ -109,13 +111,13 @@ Tokens are stored in the player file, under the "location" which was specified at the top of the file. Any dialog files which point to the same location have access to the same tokens (and can affect the values they hold). Two tokens with the same name but in different locations are treated separately. Finally there is the message block where //$me// is replaced by the name of the NPC. - ==== Full List of options ==== + ===== Full List of options ===== The options that can be used vary in the different blocks: - === The Match Block === + ==== The Match Block ==== This holds the text that the player should say before we check if the rule applies. There can be one or multiple words specified, or "*" which matches anything. @@ -125,9 +127,9 @@ This will match any out of "gork", "hoard", "yes" or "want" - === The Pre Block === + ==== The Pre Block ==== In the Pre Block, the following checks are supported: * Quest @@ -135,9 +137,9 @@ * Token * Level * Age - == Quest == + === Quest === Quest is followed by two fields, the name of the quest, and the step that the player must be at or past. eg @@ -146,9 +148,9 @@ Checks that the player has reached at least step 5 of the quest 'testquest' Have a look at the 'Quest' Section for an explanation of the 'steps' - == Item == + === Item === Item is followed by the name of the item to check for, and optionally the number that are required. eg @@ -163,9 +165,9 @@ The number of items required may be omitted, if so it will look for '1' of the item. The number may also be set to '0', this checks that the player does **not** have the item. - == Token == + === Token === Checks for Token to have a value from the list of values provided. eg @@ -176,9 +178,9 @@ There can be more than 1 value provided. Tokens are stored in the player file, under the "location" which was specified at the top of the file. Any dialog files which point to the same location have access to the same tokens (and can affect the values they hold). Two tokens with the same name but in different locations are treated separately. - == Level == + === Level === Checks if the player is at or above the specified level, "pre" : [["level", "10"]], @@ -186,9 +188,9 @@ Will trigger if the player is at least at level 10, and will not trigger if they are below it. While you can use this to block of entire quest lines until certain levels, it is probably better in general to use this test to bypass a warning about being too weak. - == Age == + === Age === This checks if the date of a time marker is older than the specified age. there are 6 things you will want to set. @@ -225,9 +227,9 @@ Although it would be better to use the second version because it is easier to compare to other age checks. - === The Post Block === + ==== The Post Block ==== After the Pre block is used to decide whether a message should trigger, the post block holds the consequences. There are 5 different options here: @@ -238,9 +240,9 @@ * takeitem * settoken * connection - == quest == + === quest === This sets the named quest to the stage which is specified. eg: @@ -270,9 +272,9 @@ The first rule triggers when we are already at stage 5, the second rule when we are at stage 4, and then moves us to stage 5 - == giveitem == + === giveitem === Gives the player an item or items from the NPCs inventory. eg @@ -291,9 +293,9 @@ If you **don't** want to be able to acquire these items through killing the NPC, then you should create an 'NPC_Gift_Box' item in the NPCs inventory, and put the items in there. This is checked before the rest of the NPCs inventory is, so if you want to give an item that is similar to one that might be generated from the NPCs treasure list, then it is probably better to put that in their also. You will particularly want to use the NPC_Gift_Box if you have any easily accessible NPCs who are rewarding inaccessible quests. (eg, someone in a town who asks you to fetch something from a very deep dungeon). - == givecontents == + === givecontents === This is like giveitem, except that it gives whatever is in the container specified, rather than the container. You should use this when: @@ -301,9 +303,9 @@ * You want to use a treasure list to create an item, you won't know what items will be generated exactly, but by putting it in a container, you can give the player whatever is in there. **Warning:** You probably //Don't// want to use a treasure list that contains monsters, it'll sort of work, but don't do it. - == takeitem == + === takeitem === Removes the given number of an item from the inventory of the player. eg @@ -327,17 +329,17 @@ That is to say, having a matching item check before removing the item. - == settoken == + === settoken === Sets the specified token to the specified value, other rules can query this value using 'token' in the pre block. Tokens are stored in the player file, under the "location" which was specified at the top of the file. Any dialog files which point to the same location have access to the same tokens (and can affect the values they hold). Two tokens with the same name but in different locations are treated separately. NB: Tokens and time markers are actually the same thing, so if you need to reset a timemarker, then you can use settoken, and set it to 0, if you do, all age checks against the marker will fail until it is set again. - == connection == + === connection === Triggers the specified connection on the map eg @@ -359,9 +361,9 @@ will give the impression the NPC has opened a door as long as there is a door with connection 4 set in the map editor. - == marktime == + === marktime === Stores the current server time in a time token with the name specified. eg @@ -372,18 +374,30 @@ Stores the current time in "mymarker", you can then check this with 'age' in a 'pre' block to check how long has passed since that point. This can be used for putting time limits on parts of dialog/quests etc. - === The msg Block === + ==== The msg Block ==== This is send directly to the player, if the pre conditions are matched, with the following exceptions: //$you// is replaced by the name of the player //$me// is replaced by the name of the NPC + //\n// is replaced by a new line character. Obviously, it probably doesn't make sense to use $you on the first line of dialogue that will be spoken, unless there is a story-based reason for the NPC to know who the player is. + Note also that you can expect clients to wrap message text for you, the reason to use \n is if you use - ==== Quest Definition ==== + + + some blank space + + + + + for emphasis. + + + ===== Quest Definition ===== Quests are defined in a text file, in a similar way to archetypes. There are a collection of fields that may be used to express different properties of the quest. The following is an example of a quest definition. @@ -425,9 +439,9 @@ Again, I'll take this apart step by step: - === The header === + ==== The header ==== quest scorn/GorksTreasure title Gorks Treasure Hoard description @@ -437,41 +451,41 @@ restart 1 There are a number of entries here, I'll cover them in the order they appear, then explain the other options this quest doesn't use. - == quest == + === quest === The start of any quest is the 'quest' line, which gives the name the quest is known by internally. This is a mandatory entry Good practice is to set up quests as region/questname - - == title == + === title === The title provides the name that the players will know the quest by - This is optional (but recommended) - ==description== + ===description=== 'description' appears on a line on its own on a line on its own, everything that follows until a line containing 'end_description' is a summary of the purpose of the quest overall. - This is optional (but recommended for non-hidden quests) - ==stopstep== + ===stopstep=== This is the step after which the quest will be consider 'complete' you need to specify a stopstep if you want your quest to be able to end. - ==restart== + ===restart=== either 0 or 1. Whether it is permitted for a player to play through this quest multiple times. 1 indicates a restartable quest, 0 a non-restartable one. If constructing a quest which is restartable, then you should be careful of items like keys, which might be able to be kept between attempts allowing parts of the quest to be bypassed. consider also the use of a marktime/age combination in a conversation to stop the quest restarting immediately. Other options: - ==hidden== + ===hidden=== **TODO**: Indicates that the quest is tracked, but that updates are not sent to the player. You can use this to create convenience quests which silently track progress in other quests. - ==party== + ===party=== **TODO**: define how the quest should interact with party membership, options are: * solo - No members of the player's party can assist with this quest at all. * assist - members of the player's party can choose to assist with this quest, and can trigger updates for the player if they are on the same map. * team - members of the player's party can choose to work with the player on this quest, and any updates triggered act for all players if they are on the same map. (regardless of what the state was for non-triggering players) * globalteam - members of the player's party can choose to work with the player on this quest, and any updates triggered act for all players regardless of where they are in the world. (regardless of what the state was for non-triggering players) Members of a party can find quests to help their party members with by using the 'party quest' command **TODO ** Not implemented yet. - ===The Quest Steps=== + ====The Quest Steps==== A quest step is a single 'state' within a quest. Any given player may only be in one state in a quest at any one time. A quest step looks like this: @@ -484,21 +498,21 @@ entries are as follows: - == step == + === step === Followed by a number, this marks the start of the step definition, which continues until you reach the next end_step The step numbers are what you will need to use to refer to this quest in dialogs and other events. It is good practice (though not required) to number steps 10,20,30, etc, that way if it is necessary to add additional steps at a later date, it will not be necessary to hunt through maps and dialogs for existing step numbers to change. - == description == + === description === descriptions act the same as the description for the quest overall, but have a slightly different meaning. The description of a step should be thought of as a 'what just happened/what should I be doing now' type of text, whereas the quest description is more abstract. - == solo == + === solo === ** TODO ** may appear on its own, and indicates that an update **to** this step should not apply to other members of the team, this can be used for steps where items are given out so that all players in a team can get the item(s) in question. - ====Interacting with quests outside of Dialog ==== + =====Interacting with quests outside of Dialog ===== We have covered how to handle quest updates in Dialog, and how to define the quests that are updated, but what about updating a quest in response to picking up an object, killing a particular monster or reaching a certain place? In the map editor there is the option to bind events to objects, you will already have used this to bind event_say to an NPC. @@ -513,9 +527,9 @@ When you bind events to objects, you need to pick a script to use, so far you will have been using python/dialog/npc_dialog.py, but you can use any script you want. For general-purpose quest updating the first place to look will be QuestAdvance.py - == QuestAdvance.py == + ==== QuestAdvance.py ==== QuestAdvance.py should be used as in the following example: {{user:cavesomething:questadvance.png|}} @@ -532,25 +546,25 @@ if the player were not at either step 0 or 1 in this example, then nothing would happen when the event triggered. NB: Be careful about binding to event_pickup for items that are not taken away as part of a quest soon afterwards, especially for restartable quests, an event_pickup will return - ==== How Do I? ==== + ===== How Do I? ===== The following are common things to want to do, and how to go about doing them. - == Make an object either be given in a dialogue, or be found on the corpse of the NPC when killed, but not both? == + === Make an object either be given in a dialogue, or be found on the corpse of the NPC when killed, but not both? === * First of all, put one copy of the item in an NPC_Gift_Box (this is the copy that will be tied to the dialog), and one on the NPC directly. * Make sure that the same messages that cause the item(s) to be given to the player, also set a quest step (if you have no suitable quest, then you can create a simple one-step quest which is hidden ** TODO **) * Next, put an event_death listener on the NPC * Use the script **Script not written yet** with the options **TODO** to remove the copy of the object from the monster's inventory if they are killed by a player who is past a certain stage in the given quest. Now the player can either kill the NPC and claim the item, or he can talk to him and claim the item, but can not talk to the NPC, get the item, then kill the NPC and get another copy of the item. - == Make a quest update on a player reaching a certain point on a map?== + === Make a quest update on a player reaching a certain point on a map?=== Put a small button under the floor, add to the small button's inventory a 'trigger' event. point the event at python/dialog/QuestAdvance.py and give the appropriate stage update rules. - == Do something really complex that no one has considered before? == + === Do something really complex that no one has considered before? === Hop on IRC and and ask for advice. - == Make the outcome of a quest determine which map an exit leads to (ie, define aftermath maps for quests that players can return to) == + === Make the outcome of a quest determine which map an exit leads to (ie, define aftermath maps for quests that players can return to) === I don't know yet, working on it. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269497358 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Thu Mar 25 12:18:51 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Thu, 25 Mar 2010 12:18:51 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269537531.071138.11405.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/25 12:18 User : cavehippo Edit Summary: Add some general advice @@ -545,8 +545,34 @@ if the player were not at either step 0 or 1 in this example, then nothing would happen when the event triggered. NB: Be careful about binding to event_pickup for items that are not taken away as part of a quest soon afterwards, especially for restartable quests, an event_pickup will return + + ===== General Principles ===== + + * If you have a 'takeitem' instruction in a dialog's post block, you should always have a matching 'item' check in the 'pre' block. - possible exception, if you want to take '0' (ie, all) of an item, whether the player has it or not. + + * "takeitem", "money", "0" will work, but don't expect it to win you friends. + + * if you are updating a quest as part of a dialog, and you want to only make a quest go forward, not backwards, then you can 'shield' the quest advance rule by putting a similar rule just above it. ie: + + + { + "match" : ["cookie"], + "pre" : [["quest", "cookiequest", "30"]], + "post" : [], + "msg" : ["I already gave you a cookie."] + },{ + "match" : ["cookie"], + "pre" : [["quest", "cookiequest", "20"]], + "post" : [["quest", "cookiequest", "30"], ["giveitem", "cookie"]], + "msg" : ["Well done, have a cookie."] + } + + + This will only give the player one cookie when they do the quest (with more possible later if it is a restartable quest. + + * If you have a quest item that the player is given and which they will need later in the quest, then attach the script "python/dialog/questessentialuntil.py" to an event_drop for the object. This will make the player unable to drop the item while they are early on in the quest, and if they pass a stage where it is no longer needed, it will disappear when they drop it. You probably shouldn't use this for a quest reward. ===== How Do I? ===== The following are common things to want to do, and how to go about doing them. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269535272 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Thu Mar 25 20:15:16 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Thu, 25 Mar 2010 20:15:16 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269566116.510315.14199.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/25 20:15 User : cavehippo Edit Summary: more principles @@ -546,9 +546,9 @@ if the player were not at either step 0 or 1 in this example, then nothing would happen when the event triggered. NB: Be careful about binding to event_pickup for items that are not taken away as part of a quest soon afterwards, especially for restartable quests, an event_pickup will return - ===== General Principles ===== + ===== General Principles/Advice ===== * If you have a 'takeitem' instruction in a dialog's post block, you should always have a matching 'item' check in the 'pre' block. - possible exception, if you want to take '0' (ie, all) of an item, whether the player has it or not. * "takeitem", "money", "0" will work, but don't expect it to win you friends. @@ -571,8 +571,13 @@ This will only give the player one cookie when they do the quest (with more possible later if it is a restartable quest. * If you have a quest item that the player is given and which they will need later in the quest, then attach the script "python/dialog/questessentialuntil.py" to an event_drop for the object. This will make the player unable to drop the item while they are early on in the quest, and if they pass a stage where it is no longer needed, it will disappear when they drop it. You probably shouldn't use this for a quest reward. + + * If you are using that script on an item, it is probably best that it isn't too heavy, remember a player may need to carry it around for quite a long time before they complete the quest. + You can modify the weight of the item in the map editor. + + * If you are picking a quest item, be sure to pick a type of item that is fairly inert, it is no good making an item undroppable and relying on it to be present if the player can middle click on it and eat it. Keys are quite a good base item to modify from, remember that you can customise the face of an object independently of it's other properties. ===== How Do I? ===== The following are common things to want to do, and how to go about doing them. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269537527 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Thu Mar 25 20:34:39 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Thu, 25 Mar 2010 20:34:39 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269567279.846122.14225.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/25 20:34 User : cavehippo Edit Summary: explain QuestEssentialUntil.py @@ -544,9 +544,21 @@ 1>2 means, if the player is currently at step 1, move them to step 2 if the player were not at either step 0 or 1 in this example, then nothing would happen when the event triggered. - NB: Be careful about binding to event_pickup for items that are not taken away as part of a quest soon afterwards, especially for restartable quests, an event_pickup will return + NB: Be careful about binding to event_pickup for items that can be dropped and picked up multiple times, see the next section for how to stop that happening. + + ==== QuestEssentialUntil.py ==== + + This script should be bound to the drop event of items. It prevents players disposing of quest items in a way that would make the quest impossible to finish. It should be used as in the following example. + + {{user:cavesomething:questdrop.png|}} + + Here you have the script bound to an event on the 'mcguffin'. If the player tries to drop the mcguffin and has started the quest 'testquest2' but isn't yet up to step 40, he won't be able to drop the item, if he has passed that stage, he will be able to drop the item, but it will be considered god-given and disappear (in the same way that starting equipment does). + + If the player has never started the quest, then: + - He should never have been able to get hold of the item + - It will disappear when dropped. ===== General Principles/Advice ===== * If you have a 'takeitem' instruction in a dialog's post block, you should always have a matching 'item' check in the 'pre' block. - possible exception, if you want to take '0' (ie, all) of an item, whether the player has it or not. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269566111 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Thu Mar 25 20:53:59 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Thu, 25 Mar 2010 20:53:59 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269568439.675995.14262.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/25 20:53 User : cavehippo Edit Summary: NPC spacing @@ -588,8 +588,10 @@ * If you are using that script on an item, it is probably best that it isn't too heavy, remember a player may need to carry it around for quite a long time before they complete the quest. You can modify the weight of the item in the map editor. * If you are picking a quest item, be sure to pick a type of item that is fairly inert, it is no good making an item undroppable and relying on it to be present if the player can middle click on it and eat it. Keys are quite a good base item to modify from, remember that you can customise the face of an object independently of it's other properties. + + * NPCs will respond to talking within a range of a couple of squares, if you have a map with more than one dialog character on, especially if you have quite complex dialog there, try to space out the NPCs so that you don't have 2 or 3 respond to a player at once. ===== How Do I? ===== The following are common things to want to do, and how to go about doing them. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269567276 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Fri Mar 26 09:30:40 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Fri, 26 Mar 2010 09:30:40 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: cfpython Message-ID: <1269613840.153392.16423.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/26 09:30 User : cavehippo Edit Summary: Update cfpython map documentation @@ -775,19 +775,10 @@ * Width: ''Number'' * Height: ''Number'' * EnterX: ''Number'' * EnterY: ''Number'' - * Temperature: ''Number'' - * Pressure: ''Number'' - * Humidity: ''Number'' - * WindSpeed: ''Number'' - * WindDirection: ''Number'' - * Sky: ''Number'' - * WPartX: ''Number'' - * WPartY: ''Number'' * Message: ''String'' * Region: ''Crossfire.Region'' - * Exists (special meaning, ''False'' if cf map has been freed from memory, ''True'' otherwise) * Unique: ''Number'' ==== Print ==== Prints the specified message to all players on the map. @@ -819,8 +810,13 @@ * ''Integer'', optional ''x'' and ''y'' coordinates Return: * the first object at the specified location matching specified name + + ==== Next ==== + Arguments: + * + ??? I don't actually know what this does yet ??? ==== ChangeLight ==== Change the map's light level. @@ -837,9 +833,16 @@ * ''Number'', X and Y, coordinates where to insert Return: ''Crossfire.Object'' representing the inserted object. Can be ''None'' if object was removed for some reason (eaten by an altar, ...) + ==== TriggerConnected ==== + Triggers the connected value for the map, this is normally used for activating gates, etc. + Arguments: + * ''connected'' The connection that is to be triggered. + * ''state'' Connections have two states, push and release (or on/off), zero causes the map to be sent the release (or off) state, non-zero the ''push'' + * ''cause'' The object that caused the trigger to occur. + ===== Player ===== This class inherits from Crossfire.Object, and introduces the new properties (bold = read-write): * IP: ''String''. * **BedMap**: ''string'' containing the map in which the player last saved. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/cfpython?rev=1269452531 New Revision: http://wiki.metalforge.net/doku.php/cfpython -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Fri Mar 26 12:01:48 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Fri, 26 Mar 2010 12:01:48 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269622908.830097.17098.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/26 12:01 User : cavehippo Edit Summary: player detection that actually works. @@ -604,12 +604,12 @@ Now the player can either kill the NPC and claim the item, or he can talk to him and claim the item, but can not talk to the NPC, get the item, then kill the NPC and get another copy of the item. === Make a quest update on a player reaching a certain point on a map?=== - Put a small button under the floor, add to the small button's inventory a 'trigger' event. point the event at python/dialog/QuestAdvance.py and give the appropriate stage update rules. + Put a checkinv under the floor, set it to match type =1. Now put an event_trigger in the inventory of the check inv and point it at python/dialog/QuestAdvance.py giving the appropriate stage update rules. === Do something really complex that no one has considered before? === Hop on IRC and and ask for advice. === Make the outcome of a quest determine which map an exit leads to (ie, define aftermath maps for quests that players can return to) === I don't know yet, working on it. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269568435 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Sat Mar 27 07:47:13 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Sat, 27 Mar 2010 07:47:13 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269694033.075500.20849.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/27 07:47 User : cavehippo Edit Summary: $me, $i, $my @@ -506,8 +506,11 @@ === description === descriptions act the same as the description for the quest overall, but have a slightly different meaning. The description of a step should be thought of as a 'what just happened/what should I be doing now' type of text, whereas the quest description is more abstract. + ** TODO ** + If you have a quest that can be played by a party of people, your description, rather than saying I or me or my, use $I $me and $my, if the player is part of a party, then we, us and our will be substituted in, if they are alone then I, me and my will be. As long as you write in the correct tenses past, perfect or imperative (I think?) then the grammer will be the same. + === solo === ** TODO ** may appear on its own, and indicates that an update **to** this step should not apply to other members of the team, this can be used for steps where items are given out so that all players in a team can get the item(s) in question. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269622903 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Mon Mar 29 11:56:50 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Mon, 29 Mar 2010 11:56:50 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269881810.384405.3476.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/29 11:56 User : cavehippo Edit Summary: update usage of finishes_quest, add plans for link_region @@ -407,9 +407,8 @@ title Gorks Treasure Hoard description Gain access to Gork's treasure end_description - stopstep 50 restart 1 step 10 description I have been told that there is a troll in town called Gork, who guards a stash of treasure, it may be worth paying him a visit. @@ -430,8 +429,9 @@ I have spoken to Mork, and he has given me the key to Mork's treasure room end_description end_step step 50 + finishes_quest description I have used Mork's key to gain access to Gork's treasure room. end_description end_step @@ -446,9 +446,8 @@ title Gorks Treasure Hoard description Gain access to Gork's treasure end_description - stopstep 50 restart 1 There are a number of entries here, I'll cover them in the order they appear, then explain the other options this quest doesn't use. @@ -501,8 +500,20 @@ === step === Followed by a number, this marks the start of the step definition, which continues until you reach the next end_step The step numbers are what you will need to use to refer to this quest in dialogs and other events. It is good practice (though not required) to number steps 10,20,30, etc, that way if it is necessary to add additional steps at a later date, it will not be necessary to hunt through maps and dialogs for existing step numbers to change. + + === finishes_quest === + + If this line is present in the quest step, then being advanced to this step causes the quest to be marked as 'complete.' + + + === link_region === + + ** TODO ** + Should be followed by the name of a region, as defined in the regions file; indicates that the region in question is somehow connected to the quest. Once client side interfaces to this are supported, then expect there to be a dropdown - 'show only quests connected to .....' + + This should be used when updating to a quest stage would let the player know to go there, not before. (ie, if the NPC says go to 'navar and speak to foo' then link_region navar, if he merely says 'try and find where foo lives and speak to him' then you probably shouldn't link Navar until some other character hints to go to navar - and these would be two separate steps in the quest). === description === descriptions act the same as the description for the quest overall, but have a slightly different meaning. The description of a step should be thought of as a 'what just happened/what should I be doing now' type of text, whereas the quest description is more abstract. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269694028 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Tue Mar 30 12:06:27 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Tue, 30 Mar 2010 12:06:27 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:todo Message-ID: <1269968787.648244.9315.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/30 12:06 User : cavehippo Edit Summary: update @@ -1,23 +1,15 @@ ==healthbars for monsters== - In progress. + In progress. -Defferred until after release. ==quests without custom scripting== [[guide to quest dialogs]] In progress, still to be added: - For conversations, the following special keys: - * 'random' [chance] [seed] - should trigger chance% of the time. This should be generated against the object ID of the NPC (which won't change between resets), seed should be used to control the group of NPCs that are selected (so that two rules with the same chance and seed number will trigger on the same NPCs). Likewise, changing chance but not seed should increase or decrease the number of people included, but not reroll them (so you could have "chance" "20" "43" to tell a character about something, then "chance" "10" "43" to give more useful information on further questioning). '-seed' should invert the selection of 'seed' - more for convenience than anything else. - - that'll give 6 special commands (in addition to the two quest ones already added) from which most sensible types of logic can be done - for the crazy types of logic, 'script' would be a nice addition. - + [[questification]] + In progress ==expansion to dialogue options== - Fallback files for dialogue with npcs, holding general conversation details about the town. Different files for distinct groups of people. - eg, foo, an NPC in a tavern bar in the town baz: - may use foo.msg for conversations only he will have - will then use bar.msg for general conversation about the bar (who the other patrons are, where the toilets are, etc) - will then use baz.msg for general chat about the town (where the shops are located, maybe pointers to some low level quests). + Allow dialog files to include other dialog files to hold rules in common, eg general conversation details about the town. == Spell Descriptions == currently sitting [[user:cavesomething:todo:Spelldescriptions|here]] IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:todo?rev=1269289717 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:todo -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Tue Mar 30 12:07:50 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Tue, 30 Mar 2010 12:07:50 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:guide_to_quest_dialogs Message-ID: <1269968870.079530.9319.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/30 12:07 User : cavehippo Edit Summary: Move from main todo page @@ -226,8 +226,12 @@ "pre" : [["age", "mymarker", "0", "1", "1", "0", "0"]], Although it would be better to use the second version because it is easier to compare to other age checks. + + ===Random=== + ** TODO ** + * 'random' [chance] [seed] - should trigger chance% of the time. This should be generated against the object ID of the NPC (which won't change between resets), seed should be used to control the group of NPCs that are selected (so that two rules with the same chance and seed number will trigger on the same NPCs). Likewise, changing chance but not seed should increase or decrease the number of people included, but not reroll them (so you could have "chance" "20" "43" to tell a character about something, then "chance" "10" "43" to give more useful information on further questioning). '-seed' should invert the selection of 'seed' - more for convenience than anything else. ==== The Post Block ==== After the Pre block is used to decide whether a message should trigger, the post block holds the consequences. IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs?rev=1269881806 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:guide_to_quest_dialogs -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Tue Mar 30 12:19:04 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Tue, 30 Mar 2010 12:19:04 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page added: user:cavesomething:questification Message-ID: <1269969544.862308.9347.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/30 12:19 User : cavehippo Edit Summary: created Quests which will be tracked through the quest system | Quest | Location | Status| Notes| | Gramps Malone's Earhorn | Scorn | Needs more dialogue| | | Gramps Malone's Walking Stick | Scorn | Needs more dialogue| | | The Head of the Goblin Chief | Scorn | Needs playtesting| Subquest of The Scorn Nobility | | The Head of the Ogre Chief| Scorn | Needs playtesting| Subquest of The Scorn Nobility | | Outbreak of Undead| Scorn | Needs playtesting| Subquest of The Scorn Nobility | | The Scorn Nobility| Scorn | Partially Implemented| Only tiers 1-3 done so far | | Getting out of scorn| Scorn | Needs playtesting| | | Down to the docks| Scorn | Needs playtesting| | | Gate Pass| Scorn | Needs playtesting| Subquest of Getting out of scorn | | Port Pass| Scorn | Needs playtesting| Subquest of Down to the Docks | | Scorn Password| Scorn | Needs playtesting| Subquest of Getting out of scorn and Down to the Docks | | The Hero of Scorn| Scorn | Needs playtesting| Subquest of Getting out of scorn and Down to the Docks, related to The Head of the Goblin Chief | | The Special Goose Chase| Scorn | Partially implemented| Middle parts of the quest need fleshing out. | | Getting Past Locked Doors | Newbie's house | Needs playtesting | | | Gork's Treasure Hoard| Scorn | Needs playtesting| | | testquest| N/A| Subject to revision as I expand upon it | | | testquest2| N/A| Subject to revision as I expand upon it | | | Custom Armour| Scorn | Needs playtesting/ maybe some balancing| | | Bandits at Terry's Farm | Scorn | Not implemented properly yet | | IP-Address : 81.141.60.247 Old Revision: none New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:questification -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Tue Mar 30 18:23:59 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Tue, 30 Mar 2010 18:23:59 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:questification Message-ID: <1269991439.442998.11653.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/30 18:23 User : cavehippo Edit Summary: new entry @@ -19,4 +19,5 @@ | testquest| N/A| Subject to revision as I expand upon it | | | testquest2| N/A| Subject to revision as I expand upon it | | | Custom Armour| Scorn | Needs playtesting/ maybe some balancing| | | Bandits at Terry's Farm | Scorn | Not implemented properly yet | | + | The Grumpy Office Clerk | Scorn | Needs playtesting| Can trigger The Special Goose Chase and be triggered as part of Gate Pass or Port Pass | IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:questification?rev=1269969541 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:questification -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Tue Mar 30 20:13:18 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Tue, 30 Mar 2010 20:13:18 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:questification Message-ID: <1269997998.646957.12146.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/30 20:13 User : cavehippo Edit Summary: @@ -18,6 +18,6 @@ | Gork's Treasure Hoard| Scorn | Needs playtesting| | | testquest| N/A| Subject to revision as I expand upon it | | | testquest2| N/A| Subject to revision as I expand upon it | | | Custom Armour| Scorn | Needs playtesting/ maybe some balancing| | - | Bandits at Terry's Farm | Scorn | Not implemented properly yet | | + | Bandits at Terry's Farm | Scorn | In Progress | | | The Grumpy Office Clerk | Scorn | Needs playtesting| Can trigger The Special Goose Chase and be triggered as part of Gate Pass or Port Pass | IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:questification?rev=1269991435 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:questification -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Wed Mar 31 11:38:35 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Wed, 31 Mar 2010 11:38:35 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: start Message-ID: <1270053515.506643.14864.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/31 11:38 User : Edit Summary: @@ -48,20 +48,21 @@ * [[Windows]] * All *[[BSD]]'s * [[Solaris]] * Mac [[OSX]] (Server and clients compile, in testing) + ====== Helpful Link(s) ====== * http://wiki.splitbrain.org/wiki:markup_compare - Helpful conversion guide for text formatting in dokuwiki if you are familiar with other wikis * http://crossfire.real-time.com/ - The "Official" Crossfire Website. - * http://dooler.woosworld.net/cf_map/ - CFWorldView, world map viewer. - * http://mids.student.utwente.nl/~avogl/map_guide/ - Semi-Obsolete guide to making maps (with [[crossedit]]). [[CFJavaEditor]] (soon to be replaced with [[Gridarta]]) is used more often now. + * [[http://tudopop.com|http://dooler.woosworld.net/cf_map/]] - CFWorldView, world map viewer. + * [[http://rentboy.com|http://mids.student.utwente.nl/~avogl/map_guide/]] - Semi-Obsolete guide to making maps (with [[crossedit]]). [[CFJavaEditor]] (soon to be replaced with [[Gridarta]]) is used more often now. * Get together ([[g2g]]) meeting notes, summary, proposal(s) * **Important**: If you want to test things please use the [[playground]]. * [[Content migration]] TODO list ===== Wiki Content Editors ===== * [[orphans and missing | Missing and Orphaned Pages]] IP-Address : 64.20.2.2 Old Revision: http://wiki.metalforge.net/doku.php/start?rev=1262979574 New Revision: http://wiki.metalforge.net/doku.php/start -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Wed Mar 31 11:59:13 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Wed, 31 Mar 2010 11:59:13 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: start Message-ID: <1270054753.799465.14906.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/31 11:59 User : leaf Edit Summary: old revision restored @@ -48,21 +48,20 @@ * [[Windows]] * All *[[BSD]]'s * [[Solaris]] * Mac [[OSX]] (Server and clients compile, in testing) - ====== Helpful Link(s) ====== * http://wiki.splitbrain.org/wiki:markup_compare - Helpful conversion guide for text formatting in dokuwiki if you are familiar with other wikis * http://crossfire.real-time.com/ - The "Official" Crossfire Website. - * [[http://tudopop.com|http://dooler.woosworld.net/cf_map/]] - CFWorldView, world map viewer. - * [[http://rentboy.com|http://mids.student.utwente.nl/~avogl/map_guide/]] - Semi-Obsolete guide to making maps (with [[crossedit]]). [[CFJavaEditor]] (soon to be replaced with [[Gridarta]]) is used more often now. + * http://dooler.woosworld.net/cf_map/ - CFWorldView, world map viewer. + * http://mids.student.utwente.nl/~avogl/map_guide/ - Semi-Obsolete guide to making maps (with [[crossedit]]). [[CFJavaEditor]] (soon to be replaced with [[Gridarta]]) is used more often now. * Get together ([[g2g]]) meeting notes, summary, proposal(s) * **Important**: If you want to test things please use the [[playground]]. * [[Content migration]] TODO list ===== Wiki Content Editors ===== * [[orphans and missing | Missing and Orphaned Pages]] IP-Address : 65.193.16.100 Old Revision: http://wiki.metalforge.net/doku.php/start?rev=1270053513 New Revision: http://wiki.metalforge.net/doku.php/start -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Wed Mar 31 12:25:42 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Wed, 31 Mar 2010 12:25:42 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:questification Message-ID: <1270056342.315155.15076.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/31 12:25 User : cavehippo Edit Summary: update @@ -18,6 +18,8 @@ | Gork's Treasure Hoard| Scorn | Needs playtesting| | | testquest| N/A| Subject to revision as I expand upon it | | | testquest2| N/A| Subject to revision as I expand upon it | | | Custom Armour| Scorn | Needs playtesting/ maybe some balancing| | - | Bandits at Terry's Farm | Scorn | In Progress | | + | Old Man Terry Had a Farm | Scorn | Defined, but defferred until after release | This requires more complete parent/child support | + | Kill the Bandit Guuh at Terry's Farm | Scorn | Needs playtesting | Will become a subquest of Old Man Terry Had a Farm | + | Kill the Farmer Terry on Guuh's land | Scorn | Defined, but defferred until after release | This requires more complete parent/child support, will become a subquest of Old Man Terry had a farm. | | The Grumpy Office Clerk | Scorn | Needs playtesting| Can trigger The Special Goose Chase and be triggered as part of Gate Pass or Port Pass | IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:questification?rev=1269997994 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:questification -- This mail was generated by DokuWiki at http://wiki.metalforge.net/ From no-reply_wiki at metalforge.org Wed Mar 31 21:14:09 2010 From: no-reply_wiki at metalforge.org (no-reply_wiki at metalforge.org) Date: Wed, 31 Mar 2010 21:14:09 -0500 Subject: [Crossfire-wiki] [Crossfire DokuWiki] page changed: user:cavesomething:questification Message-ID: <1270088049.603240.18059.nullmailer@metalforge.net> A page in your DokuWiki was added or changed. Here are the details: Date : 2010/03/31 21:14 User : cavehippo Edit Summary: update @@ -3,7 +3,7 @@ | Quest | Location | Status| Notes| - | Gramps Malone's Earhorn | Scorn | Needs more dialogue| | - | Gramps Malone's Walking Stick | Scorn | Needs more dialogue| | + | Gramps Malone's Earhorn | Scorn | Needs Playtesting| | + | Gramps Malone's Walking Stick | Scorn | Needs Playtesting| | | The Head of the Goblin Chief | Scorn | Needs playtesting| Subquest of The Scorn Nobility | | The Head of the Ogre Chief| Scorn | Needs playtesting| Subquest of The Scorn Nobility | | Outbreak of Undead| Scorn | Needs playtesting| Subquest of The Scorn Nobility | | The Scorn Nobility| Scorn | Partially Implemented| Only tiers 1-3 done so far | @@ -12,9 +12,9 @@ | Gate Pass| Scorn | Needs playtesting| Subquest of Getting out of scorn | | Port Pass| Scorn | Needs playtesting| Subquest of Down to the Docks | | Scorn Password| Scorn | Needs playtesting| Subquest of Getting out of scorn and Down to the Docks | | The Hero of Scorn| Scorn | Needs playtesting| Subquest of Getting out of scorn and Down to the Docks, related to The Head of the Goblin Chief | - | The Special Goose Chase| Scorn | Partially implemented| Middle parts of the quest need fleshing out. | + | The Special Goose Chase| Scorn | Needs playtesting| May require some additional hints for the middle parts of the quest. | | Getting Past Locked Doors | Newbie's house | Needs playtesting | | | Gork's Treasure Hoard| Scorn | Needs playtesting| | | testquest| N/A| Subject to revision as I expand upon it | | | testquest2| N/A| Subject to revision as I expand upon it | | IP-Address : 81.141.60.247 Old Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:questification?rev=1270056339 New Revision: http://wiki.metalforge.net/doku.php/user:cavesomething:questification -- This mail was generated by DokuWiki at http://wiki.metalforge.net/