超级玩家
- 贡献度
- 48
- 金元
- 6019
- 积分
- 804
- 精华
- 1
- 注册时间
- 2009-3-16
|
本帖最后由 weichiche 于 2012-4-21 11:05 编辑
2.职业——光明的前途需要良好的职业规划
要想你的人物成为人生的赢家,笑傲Maj'Eyal世界,职业规划是很重要的,它决定了人物的发展和命运,也指导着人物需要哪些天赋。职业文件和种族文件存放的位置很近,在\data\birth\classes,在这个Maj'Eyal的人才市场里,提供了五花八门的职业选择,这些职业需要运用对应的能量(mana、psi、stamina……),有的会影响人物初始的际遇(Archmage),有的甚至会让你的人物多“长”出一个部位(Mindslayer)。但是,和种族的问题一样,如果我的人物来自一个不太一样的地方,他/她/它/祂所掌握的技巧、运用的能量都不符合这个人才市场里所提供职业的要求,怎么办?找不到工作有木有!一事无成有木有!!英雄无用武之地啊有木有!!!
没关系,让我们为自己的人物定制一个职业,让他/她/它/祂们用自己的双手(或者别的肢体)为Maj'Eyal贡献自己的力量。
blacklove同学已经发过帖说明一个职业文件应该包含哪些模块,但是为了LZ帖子的完整性,也为了LZ不甚明了的地方能够得到解决,LZ决定重复一遍blacklove同学的工作。LZ同样选择Wilder作为开始。
newBirthDescriptor{
type = "class", --表明这是一个职业定义
name = "Wilder", --这个职业叫Wilder,由于没有定义,所以display_name也是Wilder
locked = function() return profile.mod.allow_build.wilder_wyrmic or profile.mod.allow_build.wilder_summoner or profile.mod.allow_build.wilder_stone_warden end,
--这就是传说中的解锁选项啦,Wlider本来是被锁定的,但是只要一个子职业被解锁,整个职业大类就可见了
locked_desc = "Natural abilities can go beyond mere skill. Experience the true powers of nature to learn of its amazing gifts.", --被锁定时的描述
desc = { --职业描述
"Wilders are one with nature, in one manner or another. There are as many different Wilders as there are aspects of nature.",
"They can take on the aspects of creatures, summon creatures to them, feel the druidic call, ...",
},
descriptor_choices =
{
subclass = --Wilder职业大类中包括哪些子职业
{
__ALL__ = "disallow",
Summoner = "allow",
Wyrmic = "allow",
["Stone Warden"] = "allow", --对的,各位没有看错,这个Stone Warden是真实存在的
},
},
copy = { --copy,没有,那LZ就借这块空地啰嗦一下吧。
--在新建一个人物的时候,各个选择是有先后的,你需要先选择种族,然后选择子种族(这个时候会有对应的形象出现)
--接着选择职业,最后是子职业(这个时候人物形象可能会稍有改变)。copy这个模块的作用是和这个顺序有关的
--当你选择种族的时候,定义在race部分的copy选项起作用,比如人物每等级血量。
--下一步,你选择了子种族后,定义在subrace部分的copy选项被加入进来,这时如果和race部分的copy模块有冲突的选项,则以后一个为准。
--比如在race中定义了最大血量为110,在其后的某个subrace中定义了最大血量为120,则实际的最大血量是120。
--继续,选择职业和子职业,情况是类似的。
--但是关于背包物品的语句,因为是添加物品,所以不覆盖前面定义的物品;符文和纹身也一样。(是否有误?)
},
--Psionic需要一个放置灵能控制武器/宝石的位置,所以在职业定义的这个位置,有一句特殊的语句用,相当于增加一个身体部位,详见附A.
--同样的做法应该可以用在种族的定义上,比如当你想创造一个多头蛇蜥或者千手观音什么的,不过LZ没有试过,不敢保证正确性
}
newBirthDescriptor{
type = "subclass", --表明这里定义的是一个子种族
name = "Summoner", --它的名字叫Summoner,由于没有定义display_name,所以默认为Summoner
locked = function() return profile.mod.allow_build.wilder_summoner end,
locked_desc = "Not all might comes from within. Hear the invocations of nature, hear its calling power. See that from without we can find our true strengths.",
desc = {
"Summoners never fight alone. They are always ready to summon one of their many minions to fight at their side.",
"Summons can range from a combat hound to a fire drake.",
"Their most important stats are: Willpower and Cunning",
"#GOLD#Stat modifiers:",
"#LIGHT_BLUE# * +0 Strength, +1 Dexterity, +0 Constitution",
"#LIGHT_BLUE# * +0 Magic, +5 Willpower, +3 Cunning",
},
getStatDesc = function(stat, actor) --这个函数用来计算Summoner召唤物个数,可能在相关天赋的定义中要调用这个值
if stat == actor.STAT_CUN then
return "Max summons: "..math.floor(actor:getCun()/10)
end
end,
stats = { wil=5, cun=3, dex=1, }, --子职业赋予的属性修正
talents_types = { --子职业赋予的天赋树,这里体现了职业之所以叫职业,就是因为它规定了你的能力和技巧
["wild-gift/call"]={true, 0.2}, --个别职业会有一些可解锁的天赋树,比如Archmage的ice、wildfire、stone和storm,详见附B.
["wild-gift/harmony"]={false, 0.1},
["wild-gift/summon-melee"]={true, 0.3},
["wild-gift/summon-distance"]={true, 0.3},
["wild-gift/summon-utility"]={true, 0.3},
["wild-gift/summon-augmentation"]={false, 0.3},
["wild-gift/summon-advanced"]={false, 0.3},
["cunning/survival"]={true, 0},
["technique/combat-techniques-active"]={false, 0},
["technique/combat-techniques-passive"]={false, 0},
["technique/combat-training"]={true, 0},
},
talents = { --子职业赋予的初始天赋
[ActorTalents.T_WAR_HOUND] = 1, --其实在上面的职业部分也可以定义天赋树和天赋,比如某个职业的所有子职业都有某个天赋树
[ActorTalents.T_RITCH_FLAMESPITTER] = 1, --就可以把定义放在职业部分,而每个子职业就无需再各写一次了
[ActorTalents.T_MEDITATION] = 1,
[ActorTalents.T_TRAP_HANDLING] = 1,
},
copy = { --Archmage在这个部分会改变人物的初始任务和地区,详见附C.
max_life = 90, --Summoner的初始生命上限
resolvers.equip{ id=true, --添加一件初始装备,几个属性分别是类型、子类型、名字、自动装备(?),附魔概率(默认应该就是-1000,没有附魔)
{type="armor", subtype="light", name="rough leather armour", autoreq=true, ego_chance=-1000}
}, --注意,不要给你的1级人物太好的物品,如果材料等级高于2的话,开始游戏后人物身上是不会有这件物品的
}, --(好像这个其实是和初始地区挂钩的?LZ记不太清了)
}
newBirthDescriptor{
type = "subclass",
name = "Wyrmic",
locked = function() return profile.mod.allow_build.wilder_wyrmic end,
locked_desc = "Sleek, majestic, powerful... In the path of dragons we walk, and their breath is our breath. See their beating hearts with your eyes and taste their majesty between your teeth.",
desc = {
"Wyrmics are fighters who have learnt how to mimic some of the aspects of the dragons.",
"They have access to talents normally belonging to the various kind of drakes.",
"Their most important stats are: Strength and Willpower",
"#GOLD#Stat modifiers:",
"#LIGHT_BLUE# * +5 Strength, +0 Dexterity, +1 Constitution",
"#LIGHT_BLUE# * +0 Magic, +3 Willpower, +0 Cunning",
},
stats = { str=5, wil=3, con=1, },
talents_types = {
["wild-gift/call"]={true, 0.2},
["wild-gift/harmony"]={false, 0.1},
["wild-gift/sand-drake"]={true, 0.3},
["wild-gift/fire-drake"]={true, 0.3},
["wild-gift/cold-drake"]={true, 0.3},
["wild-gift/storm-drake"]={true, 0.3},
["cunning/survival"]={false, 0},
["technique/shield-offense"]={true, 0.1},
["technique/2hweapon-offense"]={true, 0.1},
["technique/combat-techniques-active"]={false, 0},
["technique/combat-techniques-passive"]={true, 0},
["technique/combat-training"]={true, 0},
},
talents = {
[ActorTalents.T_ICE_CLAW] = 1,
[ActorTalents.T_MEDITATION] = 1,
[ActorTalents.T_WEAPONS_MASTERY] = 1,
[ActorTalents.T_WEAPON_COMBAT] = 1,
},
copy = {
max_life = 110,
resolvers.equip{ id=true,
{type="weapon", subtype="battleaxe", name="iron battleaxe", autoreq=true, ego_chance=-1000},
{type="armor", subtype="light", name="rough leather armour", autoreq=true, ego_chance=-1000}
},
},
copy_add = { --这个copy_add又是什么呢?前面说了,copy模块中冲突的部分将以建立人物顺序中靠后的
life_rating = 2, --但是像life_rating这样的参数,在race/subrace中定义了,而某个class/subclass又会额外提供一些每等级生命,怎么办?
}, --就放在这个copy_add模块里边。(是否有误?)
}
newBirthDescriptor{
type = "subclass",
name = "Stone Warden",
locked = function() return profile.mod.allow_build.wilder_stone_warden and true or "hide" end,
locked_desc = "",
desc = {
"Stone Wardens are dwarves trained in both the eldritch arts and the worship of nature.",
"While other races are stuck in their belief that arcane forces and natural forces are meant to oppose, dwarves have found a way to combine them in harmony.",
"Stone Wardens are armoured fighters, using a shield to channel many of their powers.",
"#GOLD#Stat modifiers:",
"#LIGHT_BLUE# * +2 Strength, +0 Dexterity, +0 Constitution",
"#LIGHT_BLUE# * +4 Magic, +3 Willpower, +0 Cunning",
},
not_on_random_boss = true, --这一句什么意思?在种族Construct/Rune Golem中好像也有,随机boss不能是Stone Warden职业?随机boss是啥东西?
stats = { str=2, wil=3, mag=4, },
talents_types = {
["wild-gift/call"]={true, 0.2},
["wild-gift/earthen-stone"]={true, 0.3},
["wild-gift/earthen-vines"]={true, 0.3},
["spell/arcane-shield"]={true, 0.3},
["spell/earth"]={true, 0.2},
["spell/stone"]={false, 0.2},
["cunning/survival"]={true, 0},
["technique/combat-training"]={true, 0},
},
talents = {
[ActorTalents.T_STONE_VINES] = 1,
[ActorTalents.T_STONESHIELD] = 1,
[ActorTalents.T_ELDRITCH_BLOW] = 1,
[ActorTalents.T_ARMOUR_TRAINING] = 3,
[ActorTalents.T_WEAPONS_MASTERY] = 1,
},
copy = {
max_life = 110,
resolvers.equip{ id=true,
{type="weapon", subtype="mace", name="iron mace", autoreq=true, ego_chance=-1000, ego_chance=-1000},
{type="armor", subtype="shield", name="iron shield", autoreq=true, ego_chance=-1000, ego_chance=-1000},
{type="armor", subtype="heavy", name="iron mail armour", autoreq=true, ego_chance=-1000, ego_chance=-1000}
},
},
copy_add = {
life_rating = 2,
},
}
附A. Psionic中关于灵能控制武器/宝石的语句
newBirthDescriptor{
type = "class",
name = "Psionic",
............
copy = {
psi_regen = 0.2, --Psionic提供灵能回复,别的职业是没有的,即使各位通过别的方法获得了灵能也不会有天然的回复能力
},
body = { PSIONIC_FOCUS = 1, QS_PSIONIC_FOCUS = 1,}, --就是它了,在身体上增加一个灵能装备槽,主副武器都有(感谢charoxuan同学)
}
........................
newBirthDescriptor{
type = "subclass",
name = "Mindslayer",
............
copy = {
............
resolvers.generic(function(self) --这是给添加的部位装备上一把巨剑,具体请参考charoxuan同学在20楼的解释,今天太晚了,LZ还没细看……
-- Make and wield some alchemist gems
local gs = game.zone:makeEntity(game.level, "object", {type="weapon", subtype="greatsword", name="iron greatsword", ego_chance=-1000}, nil, true)
if gs then
local pf = self:getInven("PSIONIC_FOCUS")
if pf then
self:addObject(pf, gs)
gs:identify(true)
end
end
end),
},
copy_add = {
............
},
}
附B. Archmage中关于可解锁天赋树的定义
talents_types = {
............
},
unlockable_talents_types = {
["spell/wildfire"]={false, 0.3, "mage_pyromancer"}, --第三个参数是指解锁条件。解锁条件在哪查,要根据条件内容来定
["spell/ice"]={false, 0.3, "mage_cryomancer"}, --比如这个,就要到\data\achievements\talents里边找
["spell/stone"]={false, 0.3, "mage_geomancer"}, --(是不是所有解锁都和某一个成就挂钩呢?如果是的话,那就全在\data\achievements\talents了)
["spell/storm"]={false, 0.3, "mage_tempest"},
},
birth_example_particles = "arcane_power", --这个是当你选择Archmage作为职业的时候,人物形象会增加一个效果。还有什么别的效果,LZ也不知道
talents = {
............
},
附C. Archmage中关于初始地区和任务的修正
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
--这个效果只在“Maj'Eyal的传说”这个战役中有效,只对人类精灵和半身人有效
self.archmage_race_start_quest = self.starting_quest --这一句不明,是为了保存作为种族的初始任务吗?有什么用?
self.default_wilderness = {"zone-pop", "angolwen-portal"} --这个仍然不懂,反正就是把你原来的这个属性改了
self.starting_zone = "town-angolwen" --不管你的种族是什么,初始区域改为了Archmage的初始区域
self.starting_quest = "start-archmage" --不管你的种族是什么,初始任务改为了Archmage的初始任务
self.starting_intro = "archmage" --不管你的种族是什么,介绍改为了Archmage的介绍
self.faction = "angolwen" --不管你的种族阵营是什么,阵营改为了Angolwen
self:learnTalent(self.T_TELEPORT_ANGOLWEN, true, nil, {no_unlearn=true}) --给你一个能传送到Angolwen的天赋(?LZ没用过人类精灵半身人元素法)
end
end,
............
},
和种族类似,当各位编写好自己的职业.lua文件以后,需要在worlds.lua和descriptors.lua中做相应的修改。相信大家一定能找对地方的,所以这次我就不单独拿出来说了,祝大家好运。
|
|