游戏精英
 
- 贡献度
- 431
- 金元
- 20730
- 积分
- 3857
- 精华
- 6
- 注册时间
- 2008-1-10
|
本帖最后由 zjwzero 于 2012-2-5 21:05 编辑
首先,统一下文件的路径:game\modules\tome-3.9.37.team\ ;接下来列出的路径请自行前后相接
接下来我介绍一下掌管【种族】以及【职业】效果的一系列文件路径,及其关联方式。
我们打开游戏,选择新游戏进入的界面,需要选择一个种族,以及一个职业。它们其实很简单的就放在某个固定的文件路径中,其中的内容也是一目了然。
【种族】这个文件就放在:“data\birth\races”里面
【职业】:“data\birth\classes”
这些文件夹里面的文件都可以用“txt”打开,当然我还是推荐你们用一些具有基础编程能力的工具打开,至少也得是notepad2这类“txt”工具
这些文件都写了许多内容,但是你可以发现里面没有编写任何的【技能】,这是因为它们都采用了“引用”的方式来表达。
那么,我们只需要找到引用的路径就能知道那些【技能】隐藏在哪里。
我选择一个种族文件elf.lua来方便介绍
接下来你们看到的内容就是所谓的种族文件之一,精灵种族
接下来你们会看到3个以newBirthDescriptor开头的大括号及其内容。很容易联想到,游戏选择的时候不是有个种族总类别吗:
“
-精灵
永恒精灵
自然精灵
”
就是如此,这三个大括号就是这个意思,至于它们的格式为什么是这样不重要,只要你完完全全的按照这个格式去模仿,就能轻松的制作出新的种族选项,但是,种族技能就另当别论了。
先过目一下,只需过目一下就可以了,接下来我再介绍【技能】的引用位置
【elf.lua】***************************************【Start】
---------------------------------------------------------
-- Elves --
---------------------------------------------------------
newBirthDescriptor{
type = "race",
name = "Elf",
display_name = "精灵",
desc = {
" 精灵这个名字通常被用来不正 确地称呼整个精灵种族。",
" 精灵分为 3个相互联系的种族 而目前只有两种还幸存着。",
" 除了永恒精灵用魔法保持永生 其他精灵通常能活一千年。",
" 在不同的精灵种族之间他们对 世界的看法很不相同。",
},
descriptor_choices =
{
subrace =
{
Shalore = "allow",
Thalore = "allow",
__ALL__ = "disallow",
},
subclass =
{
-- Only human and elves make sense to play celestials
['Sun Paladin'] = "allow",
Anorithil = "allow",
-- Only human, elves, halflings and undeads are supposed to be archmages
Archmage = "allow",
},
},
copy = {
type = "humanoid", subtype="elf",
starting_zone = "trollmire",
starting_quest = "start-allied",
resolvers.inventory{ id=true, {defined="ORB_SCRYING"} },
resolvers.generic(function(e) e.hotkey[10] = {"inventory", "鉴定水晶球"} end),
},
}
---------------------------------------------------------
-- Elves --
---------------------------------------------------------
newBirthDescriptor
{
type = "subrace",
name = "Shalore",
display_name = "永恒精灵",
desc = {
" 永恒精灵与魔法世界有着千丝 万缕的联系,曾一度出现过许多伟 大的魔法师。",
" 尽管如此,他们仍试图保持避 世并隐藏他们的魔法能力。因为他 们深深记得那一段血腥的历史魔法 会战(Spellblaze)还有紧随其后 的魔法猎捕(Spellhunt)。",
" 他们天生掌握#GOLD#不朽的恩赐#WHITE#,允 许他们在短时间内提高移动速度。",
"#GOLD#属性修正:",
"#LIGHT_BLUE# * -2 力量,+1 敏捷,+0 体质",
"#LIGHT_BLUE# * +2 魔法,+3 意志,+1 灵巧",
"#GOLD#每等级增加生命值:#LIGHT_BLUE# 9",
"#GOLD#经验惩罚:#LIGHT_BLUE# 35%",
},
inc_stats = { str=-2, mag=2, wil=3, cun=1, dex=1, con=0 },
experience = 1.3,
talents_types = { ["race/shalore"]={true, 0} },
talents = { [ActorTalents.T_SHALOREN_SPEED]=1 },
copy = {
moddable_tile = "elf_#sex#",
moddable_tile_base = "base_shalore_01.png",
moddable_tile_ornament = {female="braid_02"},
random_name_def = "shalore_#sex#", random_name_max_syllables = 4,
default_wilderness = {"playerpop", "shaloren"},
starting_zone = "scintillating-caves",
starting_quest = "start-shaloren",
faction = "shalore",
starting_intro = "shalore",
life_rating = 9,
resolvers.inscription("RUNE:_SHIELDING", {cooldown=14, dur=5, power=100}),
resolvers.inscription("RUNE:_PHASE_DOOR", {cooldown=7, range=10}),
},
experience = 1.35,
random_escort_possibilities = { {"scintillating-caves", 2, 3}, {"daikara", 1, 3}, {"old-forest", 1, 5}, {"dreadfell", 1, 8}, {"reknor", 1, 2}, },
}
newBirthDescriptor
{
type = "subrace",
name = "Thalore",
display_name = "自然精灵",
desc = {
" 在大部分岁月里,自然精灵隐 藏在丛林里,很少离开。岁月流逝, 这一习惯都没有改变。",
" 他们长期隐居在自然中,由于 和自然的紧密联系,自然精灵成为 自然秩序的保护者,并与他们的近 亲永恒精灵处于对立状态。",
" 他们天生掌握#GOLD#自然之怒#WHITE#,允许他们 在短时间内提高伤害和抵抗。",
"#GOLD#属性修正:",
"#LIGHT_BLUE# * +2 力量,+3 敏捷,+1 体质",
"#LIGHT_BLUE# * -2 魔法,+1 意志,+0 灵巧",
"#GOLD#每等级增加生命值:#LIGHT_BLUE# 11",
"#GOLD#经验惩罚:#LIGHT_BLUE# 35%",
},
inc_stats = { str=2, mag=-2, wil=1, cun=0, dex=3, con=1 },
experience = 1.3,
talents_types = { ["race/thalore"]={true, 0} },
talents = { [ActorTalents.T_THALOREN_WRATH]=1 },
copy = {
moddable_tile = "elf_#sex#",
moddable_tile_base = "base_thalore_01.png",
moddable_tile_ornament = {female="braid_01"},
random_name_def = "thalore_#sex#",
default_wilderness = {"playerpop", "thaloren"},
starting_zone = "norgos-lair",
starting_quest = "start-thaloren",
faction = "thalore",
starting_intro = "thalore",
life_rating = 11,
resolvers.inscription("INFUSION:_REGENERATION", {cooldown=10, dur=5, heal=60}),
resolvers.inscription("INFUSION:_WILD", {cooldown=12, what={physical=true}, dur=4, power=14}),
},
experience = 1.35,
random_escort_possibilities = { {"norgos-lair", 2, 3}, {"heart-gloom", 1, 2}, {"daikara", 1, 3}, {"old-forest", 1, 5}, {"dreadfell", 1, 8}, {"reknor", 1, 2}, },
}
【elf.lua】***************************************【End】
从上面的内容可以看出,虽然这个文件没有编写【技能】,但是种族的属性修正却明摆在那里,你们还可以看到其它的信息,例如经验惩罚,这些暂且不谈,最重要的,技能的引用链接分别是
永恒精灵:talents_types = { ["race/shalore"]={true, 0} },
自然精灵:talents_types = { ["race/thalore"]={true, 0} },
它们分别对应了文件路径:
永恒精灵:data\talents\misc\ 文件races.lua里面搜索shalore,可得到这样一句话
newTalentType{ type="race/shalore", name = "永恒精灵", generic = true, is_spell=true, description = "角色所拥有的各种种族专长技能。" }
注意这个type="race/shalore"
自然精灵:data\talents\misc\ 同上
按照我个人的理解,文件放在哪里关系不是太大,关键就在于这句话,elf.lua中引用的路径“race/shalore”正好与 races.lua中的type="race/shalore"重合了,至于细节上,文件在不讲究的情况下大致放在哪个位置就行了,我没有研究过,但肯定是有一定讲究的,就目前而言,纯粹的模仿路径就足够了。
另外就是职业路径,有些不同,随便打开“data\birth\classes”的一个文件mage.lua
就以大法师为例子。你找不到只引用某个技能的路径,取而代之的是一大堆引用技能的路径
接下来先过目,过目就可以了
【mage.lua的片段】**********************************【Start】
newBirthDescriptor{
type = "subclass",
name = "Archmage",
display_name= "元素法师",
locked = function() return profile.mod.allow_build.mage end,
locked_desc = "憎恨、折磨、追捕、隐藏... 我们 的道路被禁止,但是我们的事业是 公正的。在我们隐藏的山谷里我们 自由学习我们自己的魔法艺术从这 个世界的愤怒中寻求抚慰。只有友 谊和宽容才能获得我们的信任。",
desc = {
" 对一个元素法师来说魔法超越一切, 他们尽其一生学习魔法。",
" 元素法师缺乏最基本的物理格斗技 能,他们用魔法取而代之。",
" 元素法师从学院里获得魔法知识, 他们通常拒绝任何妖术。",
" 元素法师在一个名叫Angolwen的秘 密小镇接受训练,并拥有一个直接 传送到那里的独特技能。",
"他们最重要的属性是:魔法和意志。",
"#GOLD#属性修正:",
"#LIGHT_BLUE# * +0 力量,+0 敏捷,+0 体质",
"#LIGHT_BLUE# * +5 魔法,+3 意志,+1 灵巧",
},
stats = { mag=5, wil=3, cun=1, },
talents_types = {
["spell/arcane"]={true, 0.3},
["spell/fire"]={true, 0.3},
["spell/earth"]={true, 0.3},
["spell/water"]={true, 0.3},
["spell/air"]={true, 0.3},
["spell/phantasm"]={true, 0.3},
["spell/temporal"]={false, 0.3},
["spell/meta"]={false, 0.3},
["spell/divination"]={true, 0.3},
["spell/conveyance"]={true, 0.3},
["spell/aegis"]={true, 0.3},
["cunning/survival"]={false, -0.1},
},
unlockable_talents_types = {
["spell/wildfire"]={false, 0.3, "mage_pyromancer"},
["spell/ice"]={false, 0.3, "mage_cryomancer"},
["spell/stone"]={false, 0.3, "mage_geomancer"},
["spell/storm"]={false, 0.3, "mage_tempest"},
},
birth_example_particles = "arcane_power",
talents = {
[ActorTalents.T_ARCANE_POWER] = 1,
[ActorTalents.T_FLAME] = 1,
[ActorTalents.T_LIGHTNING] = 1,
[ActorTalents.T_PHASE_DOOR] = 1,
},
copy = {
-- Mages start in angolwen
class_start_check = function(self)
if self.descriptor.world == "Maj'Eyal" and (self.descriptor.race == "Human" or self.descriptor.race == "Elf" or self.descriptor.race == "Halfling") then
self.archmage_race_start_quest = self.starting_quest
self.default_wilderness = {"zone-pop", "angolwen-portal"}
self.starting_zone = "town-angolwen"
self.starting_quest = "start-archmage"
self.starting_intro = "archmage"
self.faction = "angolwen"
self:learnTalent(self.T_TELEPORT_ANGOLWEN, true, nil, {no_unlearn=true})
end
end,
max_life = 90,
resolvers.equip{ id=true,
{type="weapon", subtype="staff", name="榆木法杖", autoreq=true, ego_chance=-1000},
{type="armor", subtype="cloth", name="亚麻长袍", autoreq=true, ego_chance=-1000},
},
},
copy_add = {
life_rating = -4,
},
}
【mage.lua的片段】**********************************【End】
这个文件的内容中
talents_types = {
}
这里面的内容十分丰富,它们就是这个职业所具备的所有技能。
而这所有技能的引用路径都在“data\talents\”里面
以闪电系为例子:["spell/air"]={true, 0.3}, (这个true表示不需要投入大系点来解锁,0.3是系数,表示1.3你懂的
你可以在“data\talents\spells”里面的air.lua文件里看到
分别有4个技能,而每一个技能都有一个type:
闪电术:type = {"spell/air", 1},
连锁闪电:type = {"spell/air", 2},
风之羽翼:type = {"spell/air",3},
闪电风暴:type = {"spell/air", 4},
很容易理解了把,1、2、3、4表示技能的需要,你必须学习前面几个技能才能学习后面的技能的意思,技能的排序则直接按照文件中编写的顺序决定,“spell/air”则是关键所在。。。。。。你们会发现,这个文件的路径是“data\talents\spells\air.lua”,这之中的“spells”&“air.lua”组合起来并不是"spell/air"和种族技能是一样的,这个lua语言在此处的应用并不在意文件名,关键是type来连接各个位置的引用,所以air.lua即使改成了“use ege hit LZ.lua”也没关系。虽然lua语言肯定存在着直接引用文件名的功能,但是此处无关。
也正如你们所看到的,一个技能系到底有多少个技能,只需要type = {"spell/air", 5}, 这样无限制的加下去就OK了。
其实还有很多其它的功能,例如技能属性需求,等级需求,但我只是大概的让你们了解一下,就不细说了。
而最后,同样是大概的让你们了解一下,【单个技能】是如何编写的 (至少看起来是这样
继续以闪电系为例子,也就是这个air.lua文件里面的闪电术
它的代码如下,过目一下就可以了,我在这之中会有一些简单的注释,详细的以后再讨论,毕竟我也看得不是很懂
好了,初初初级入门完毕,打酱油去。。。
< |
评分
-
2
查看全部评分
-
|