[crossfire] Vote: Next major project

Yann Chachkoff yann.chachkoff at myrealbox.com
Tue Aug 21 02:15:41 CDT 2007


Le lundi 20 août 2007, Mark Wedel a écrit :
>   We've pretty much figured out the choice of major projects, now to decide
> which one to vote on.  Like source control vote, we will do a ranked choice
> vote.  Brief list of choices below:
<snip>
I find rather strange that monster AI didn't get included in that list...

> K) With crossfire, there is a lore field that can be used to hold
> information about creatures, objects, etc, but this is infrequently used. 
> As such, most readable materials found within the game are pretty useless. 
> If lore was used, then this readable information would be useful, and could
> also provide a way to have hooks for quests or dungeons.
>
More generally, add more background information to the game, not only stuff in 
the "lore" tags.

> L) NPC chat right now really isn't very good. 
*sigh*

From the header of maps/python/CFDialog.py:

# What is this about ?
#=======================
# This is a small set of utility classes, to help you creating
# complex dialogs. It is made for those who do not want to
# bother about complex programming, but just want to make a few
# dialogs that are better than the @match system used in the
# server.
#
# How to use this.
#=======================
# First, you need to import DialogRule and Dialog classes. Add the
# following line at the beginning of your script:
# from CFDialog import DialogRule, Dialog
# Then, you can go to the dialogs themselves. A dialog is made of
# several rules. Each rule is made of keywords, preconditions,
# postconditions, and answers.
# - Keywords are what the rule will be an answer to. For example, if
#   you want a rule to be triggered when the player will say "hi",
#   then "hi" is the keyword to use. You can associate more than a
#   keyword to a rule by concatenating them with the "|" character.
#   Finally, "*" is a special keyword that means: "match everything".
#   "*" is useful to provide generic answers.
# - Answers are what will be said when the rule is triggered. This is
#   what the NPC replies to the player. Answers are stored in a list.
#   When there is more than one answer in that list, one will be
#   selected at random.
# - Preconditions are flags that must match for the rule to be triggered.
#   Each precondition has a name and a value. The default value of a
#   precondition is "0". The flags are stored into each player, and will
#   survive between gaming sessions. They are useful to set the point in
#   a dialog reached by a player - you can see those as an "NPC memory".
#   All conditions must have a name and a value. The ":" and ";" characters
#   are forbidden. For a rule to be triggered, all the player's flags should
#   match the preconditions. If you give "*" as the value for a precondition,
#   it means that there is no need to match it.
#   A precondition is a list in the form: [key, value]. All preconditions
#   are stored in a list.
#   - Postconditions are the status changes to apply to the player's
#   conditions after the rule has been triggered. Their format is similar to
#   preconditions. A value of "*" means that the condition will not be 
touched.
#
# Once you have defined your rules, you have to assemble them into a dialog.
# Each dialog involves somebody who triggers it, somebody who answers, and
# has a unique name so it cannot be confused with other dialogs.
# Typically, the "one who triggers" will be the player, and the "one who
# answers" is an NPC the player was taking to. You are free to chose whatever
# you want for the dialog name, as long as it contains no space or special
# characters, and is not used by another dialog.
# You can then add the rules you created to the dialog. Rules are parsed in
# a given order, so you must add the most generic answer last.
#
# A simple example
#=================
# I want to create a dialog for an old man. If I say "hello" or "hi" for the
# first time, grandpa will greet me. If I say it for the second time, he'll
# grumble (because he's like that, you know :)). I also need a generic answer
# if I say whatever else.
# In this example, the player is stored in 'player', and the old man 
in 'grandpa'.
# What the player said is in 'message'.
#
## Dialog creation:
# speech = Dialog(player, grandpa, "test_grandpa_01")
#
## The first rule is the "hello" answer, so we place it at index 0 of the
## rules list. The precondition is that we never said hello before.
## The postcondition is to mark "hello" as "1", to remember we already
## greeted grandpa.
# prer = [["hello","0"]]
# postr = [["hello", "1"]]
# rmsg = ["Hello, lad!","Hi, young fellow!","Howdy!"]
# speech.addRule(DialogRule("hello|hi", prer, rmsg, postr),0)
#
## The second rule is the answer to an hello if we already said it before.
## Notice that we used "*" for the postcondition value, meaning that we
## are leaving it as it is.
# prer = [["hello","1"]]
# postr = [["hello", "*"]]
# rmsg = ["I've heard, you know, I'm not deaf *grmbl*"]
# speech.addRule(DialogRule("hello|hi", prer, rmsg, postr),1)
#
## And finally, the generic answer. This is the last rule of the list.
## We don't need to match any condition, and we don't need to change them,
## so we use "*" in both cases this time.
# prer = [["hello","*"]]
# postr = [["hello", "*"]]
# rmsg = ["What ?", "Huh ?", "What do you want ?"]
# speech.addRule(DialogRule("*", prer, rmsg, postr),2)
#

See also http://wiki.metalforge.net/doku.php/cfdialog

It is always refreshing to see how one's work is appreciated :).
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part.
Url : http://mailman.metalforge.org/pipermail/crossfire/attachments/20070821/593a6af0/attachment.pgp 


More information about the crossfire mailing list