- UID
- 826903
- 主题
- 0
- 阅读权限
- 20
- 帖子
- 47
- 精华
- 0
- 积分
- 44
- 金钱
- 100
- 荣誉
- 2
- 人气
- 0
- 在线时间
- 0 小时
- 评议
- 0
- 帖子
- 47
- 精华
- 0
- 积分
- 44
- 金钱
- 100
- 荣誉
- 2
- 人气
- 0
- 评议
- 0
|
继续介绍复杂对话的制作。
(一)游戏数据的操纵及对话的动态隐藏
画面如下:
主要功能:(1)金钱-1000。当钱>=1000时显示,当钱<1000时,该选项自动隐藏掉。点击这个选项,金钱减少1000。
(2)水晶-1。当水晶>=1时显示,当水晶<1时,该选项自动隐藏掉。点击这个选项,水晶减少1。
(3)金钱-1000,领导力+100。当钱>=1000时显示,当钱<1000时,该选项自动隐藏掉。点击这个选项,金钱减少1000,
同时领导力增加100。
下面来看代码是怎么实现的。请对照文件111111111.chat.txt,下面只列出重要的部分。
{Y}{EXPR}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {X}{war} = {00000000FFFFFF7F} //重要!判断当前代码块的状态,是比较还是赋值,这里是比较。
{Y}{ss}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {I}{>=1000} = {0} //判断式。把当前金钱与1000做比较,>=1000显示,否则隐藏。
}
{Y}{vv}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {Y}{lu_itm}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {A}{nam} = {m} //不重要,任意字符
{A}{lu} = {$hero} //代表当前值的所有者。指当前英雄身上的金钱。
{A}{cn} = {money} //金钱。还可以是其他值,crystals,leadership,rune_might等等
}
}
}
//个人理解,这个判断和赋值是基于函数 Logic.lu_hero_item("money","count")取当前英雄金钱
// Logic.lu_hero_item("money","count",1000)赋值
{Y}{EXPR}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {X}{war} = {00000000FEFFFFFF00000000FFFFFF7F} //重要!判断当前代码块的状态,是比较还是赋值,这里是赋值。
{Y}{ss}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {I}{-1000} = {0} //赋值。当前金钱减去1000。
}
{Y}{vv}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {Y}{lu_itm}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {A}{nam} = {m} //同上
{A}{lu} = {$hero} //同上
{A}{cn} = {money} //同上
}
}
}
测试MOD一里,三个例子由简单到复杂,好好看下代码有助于更好的理解。
第三个例子,操纵金钱用了另外一种方法,这里就不介绍了。
(二)利用程序来实现更复杂的功能
主要功能:(1)根据当前英雄类型,动态显示字符,战士,魔法师,圣骑士
(2)符石重新分配。动态显示与隐藏:当英雄为战士时,如果力量符石>5,则显示,否则隐藏。
当英雄为骑士时,如果意志符石>5,则显示,否则隐藏。
当英雄为法师时,如果魔法符石>5,则显示,否则隐藏。
点击这个选项,如果是战士,则力量符石清空,其他两种符石平分。骑士,法师同理。
下面来看代码,请参照111111111.chat.txt文件。前面介绍过的就不做多介绍了。
{Y}{a}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{1}
{ {Y}{-N/A-}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {W}{te} = {chat_system_111111111_snap_0_answer_0}
{A}{sn} = {snap_0}
{Y}{co}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {Y}{COMPLEX}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{
{Y}{conds}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {Y}{EXPR}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{
{X}{war} = {00000000FFFFFF7F}
{Y}{ss}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {I}{ ==1 } = {0} //dlg值==1,显示
}
{Y}{vv}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {Y}{lu_var}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {A}{nam} = {dlgname} //不重要,任意字符
{A}{lu} = {$hero} //也可以是$self
{A}{vn} = {dlg} //重要!变量dlg
}
}
}
//这边的判断依据的是函数Logic.hero_lu_var("dlg"),dlg相当于一个全局变量,取出它的值,如果等于1,则显示,否则隐藏
{Y}{SCRIPT}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {A}{fn} = {dlg_condition1} //在test.lua里面定义的函数。对话会先执行这个函数,用来对dlg变量赋值
}
}
}
}
{Y}{ac}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {Y}{EXECUTE_SCRIPT}, F_SORTED{0}, F_COMPACT_TAGS{1}, F_NONAMES{0}
{ {A}{fname} = {dlg_use1} //在test.lua里面定义的函数。点击这个选项的时候,会执行这个函数,来重新分配符石。
{A}{par} = {}
}
}
介绍完chat文件,下面来看lua中的代码,请参照test.lua文件。
function get_hero_class() //这个函数在eng_chat_castle.lng文件里有用到,用来动态显示字符,战士或法师,骑士
local hclass = Game.HSP_class() //取得英雄的类型,0表示战士,1表示骑士,2表示法师
if hclass == 0 then
return "<label=hero_class_warrior>" //返回"战士",hero_class_warrior在语言别文件eng_hero.lng中定义
elseif hclass == 1 then
return "<label=hero_class_paladin>" //返回"圣骑士"
elseif hclass == 2 then
return "<label=hero_class_mage>" //返回"魔法师"
end
end
function dlg_condition1(param)
//chat文件里用到的函数,这个函数里面条件是否满足,如果满足条件,则把全局变量dlg赋值1,那么"符石重新分配"选项就会显示出来
//具体怎么实现的,请看代码
end
function dlg_use1(param)
//chat文件里用到的函数,这个函数的作用是将符石重新进行分配。
end
因为代码比较简单,就不贴出来一一解释了。把代码看下应该就能明白了。
chat文件的应用其实到现在只涉及小小的一部分,不过掌握了这么多,对于MOD应该足够了,至于任务系统,我也不太清楚,暂时不能做介绍。
暂时先讲这么多,看情况,如果有需要的话,我再来写。
附件:
|
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
|