1692532967
发表于 2013-12-23 20:57
yzzn2009 发表于 2013-12-23 20:15 static/image/common/back.gif
不是一句两句能说清的,“我的小屋”、“新移民”、“观赏蜘蛛”、“自动取款机”等都用到了创生并改造物 ...
是在物品栏创造,比如说大理石用石头在物品栏创造
yzzn2009
发表于 2013-12-23 21:43
1692532967 发表于 2013-12-23 20:57 static/image/common/back.gif
是在物品栏创造,比如说大理石用石头在物品栏创造
修改技巧中的“修改制作道具的配方”里有比较详细的介绍
smovie
发表于 2013-12-23 21:48
好帖,多谢分享!
yzzn2009
发表于 2013-12-24 06:03
本帖最后由 yzzn2009 于 2013-12-24 06:05 编辑
授人以渔:开端
我们的修改技巧发展到今天,已经不单单只是修改,而是不断在加入一些创造性的内容,使饥荒世界不再是那个苦寒之地,逐渐演变成一片自由的乐土。我们可以生产销售产品,交女友,养孩子,建立海岛,空中巡逻,也可以创建小镇甚至变身为巨鹿,这都是用一行行枯燥的代码实现的,它就像乐高积木,每一片都平淡无奇,但组合在一起,却可以开创新的天地。几个月前,我对lua语言还一无所知,几个月后,却可以做出一些有趣的东西了。如果我可以,你也一定能做得到,更不要说还有这290余项的修改条目做你的案例。授人以鱼,不如授人以渔,相信许多人都是因为无从下手,才没有机会做出自己的作品的,今天讲一点修改的基础性问题,希望成为你走上创作之路的契机。
饥荒游戏中的功能,都是用命令调用function来实现的,例如行走手杖,文件是游戏目录\data\scripts\prefabs\cane.lua,以local function fn(Sim)语句为分水岭,上面为function,下面为命令,我详细解释一下每句的意思。
local assets= 声明调用的动画文件
{
Asset("ANIM", "anim/cane.zip"), 行走手杖动画
Asset("ANIM", "anim/swap_cane.zip"), 行走手杖装备动画
}
local function onfinished(inst) 名为onfinished的function,是在物品结束时起作用的,括号中的inst为声明的主语,在游戏中inst就是该物品自己
inst:Remove() 自己被删除
end 每一个function都必须用end结束,否则会报错。需要用end结束的还有if开头的语句等
local function onequip(inst, owner) 名为onequip的function,是在被装备时起作用的,括号中声明了inst(自己)、owner(所有者)两个主语
owner.AnimState:OverrideSymbol("swap_object", "swap_cane", "swap_cane") 所有者装备时的动画,其中swap_object是手部,swap_cane是行走手杖装备时的动画
owner.AnimState:Show("ARM_carry") 所有者显示携带物品的胳膊动画
owner.AnimState:Hide("ARM_normal") 所有者隐藏正常胳膊的动画
end 结束onequip这个function
local function onunequip(inst, owner) 名为onunequip的function,是脱下装备时起作用的,括号中声明了inst(自己)、owner(所有者)两个主语
owner.AnimState:Hide("ARM_carry") 所有者隐藏携带物品的胳膊动画
owner.AnimState:Show("ARM_normal") 所有者显示正常胳膊的动画
end 结束onunequip这个function
local function fn(Sim) 这是物品属性的function,上面那些function如果没有命令调用,就不会被执行。但fn这个function会在开始游戏时自动被执行
local inst = CreateEntity() 声明自己等于创建实体,这是基本格式,一般都修改都不会碰
local trans = inst.entity:AddTransform() 声明trans等于增加改变位置,也是基本格式
local anim = inst.entity:AddAnimState() 声明anim等于自己的实体加入的动画,也是基本格式
inst.entity:AddSoundEmitter() 自己的实体加入声音播放器,也是基本格式
MakeInventoryPhysics(inst) 制作库存物品的物理性,这是在别的文件中打包做好的一套物理性语句,用这句就可以全部插入了。这样整套的物理性还包括人物物理性、建筑物理性等
anim:SetBank("cane") 动画设置模型,cane为行走手杖,这里的anim在前面已经声明了,所以才可以用它做主语,如果没有声明,则需要写成inst.AnimState:SetBank("cane")
anim:SetBuild("cane") 动画设置贴图,cane为行走手杖
anim:PlayAnimation("idle") 动画设置播放idle(闲置)动画
inst:AddComponent("weapon") 自己添加物品标签,一些原本不是武器的物品,通过添加这个标签,就可以作武器用了,比如“犬牙手雷”,当然还要有下面的标签参数
inst.components.weapon:SetDamage(TUNING.CANE_DAMAGE) 自己武器标签设置伤害值为游戏目录\data\scripts\tuning.lua文件中的CANE_DAMAGE(行走拐杖伤害值),具体是34*0.5=17
inst:AddComponent("inspectable") 自己添加查看标签,inspectable(查看)标签几乎是所有物品都有的,所以修改技巧中许多新增的代码就都插在这句下面
inst:AddComponent("inventoryitem") 自己添加库存标签,有这句才能将行走手杖放进物品栏和背包中
inst:AddComponent("equippable") 自己添加可装备标签
inst.components.equippable:SetOnEquip( onequip ) 自己可装备标签设置在装备时调用的function为onequip,有这句,名为onequip的function才会起作用
inst.components.equippable:SetOnUnequip( onunequip ) 自己可装备标签设置在脱下装备时调用的function为onunequip,有这句,名为onunequip的function才会起作用
inst.components.equippable.walkspeedmult = TUNING.CANE_SPEED_MULT 自己可装备标签行走速度倍数,为游戏目录\data\scripts\tuning.lua文件中的CANE_SPEED_MULT(行走手杖速度倍数)具体为1.25倍
return inst 循环自己
end 结束fn这个function
return Prefab( "common/inventory/cane", fn, assets) 这句是任何物品都必不可少的,循环物品相关资源的路径,一般不会动到
以上就是饥荒游戏中一个典型物品的文件,首先了解了它的组成内容,才可以按自己想要的方式修改(插一句,行走手杖的代码中,名为onfinished的function因为没有命令调用,所以不会起作用,这是官方制作组留下的垃圾语句,像这样的垃圾在许多物品文件中都比比皆是,让那些以为官方做出来的东西就是最好的、修改不重要的人失望了)。我们可以修改标签参数中的数值,比如将inst.components.equippable.walkspeedmult = TUNING.CANE_SPEED_MULT替换为inst.components.equippable.walkspeedmult = TUNING.CANE_SPEED_MULT*2,就是将装备行走手杖的行走速度增加1倍;可以添加新的标签来扩展该物品功能,比如在inst:AddComponent("inspectable")的下一行插入inst:AddComponent("blinkstaff"),就可以让行走拐杖拥有鼠标右键点地实现瞬移的功能;还可以自己写function及命令,让行走手杖拥有更加强大的能力
好了,如果你耐心看完了,相信游戏的代码开始对你不再那么神秘了,当然,一旦入门你会产生更多的疑问,那就去钻研、去探索、去追寻(请不要问我,实在没有时间),将修改技巧中的条目和原文件做对比,最终你会得到满意的答案。抓住这个契机,从此刻开始,未来是属于你的
无语。。。
发表于 2013-12-24 06:58
yzzn2009 发表于 2013-12-24 06:03 static/image/common/back.gif
授人以渔:开端
我们要插入的是英语吗?我把整个拿去翻译,只有几个能翻译出来。
无语。。。
发表于 2013-12-24 07:02
本帖最后由 无语。。。 于 2013-12-24 07:36 编辑
为什么我在\data\scripts\prefabs\cave_banana.lua里面的inst:AddComponent("inspectable")的下一行插入local function OnDeploy (inst, pt)
local perd = SpawnPrefab("monkey")
if perd then
perd: PushEvent("growfromegg")
perd.Transform:SetPosition(pt.x, pt.y, pt.z)
inst.components.stackable:Get():Remove()
end
end
inst:AddComponent("deployable")
inst.components.deployable.ondeploy = OnDeploy
它无视我!!!!!不过可以打开
alex522
发表于 2013-12-24 07:53
我想问问呢其实那猎人可不可以改做变成
你点下路牌他会出现随机怪物。杀完自动给黄金。杀完那动物的奖励一样在 不过多加黄金给你
靚仔
发表于 2013-12-24 08:13
yzzn2009 发表于 2013-12-24 06:03 static/image/common/back.gif
授人以渔:开端
好在我在香港读的是英语学校,英文{:3_108:}全懂了
一语笑天下
发表于 2013-12-24 12:19
宁哥,可不可以修改一下把坟墓墓碑用铲子铲掉或者锤子敲掉,基地有几个坟墓看着不太舒服,强迫症木有办法啊:Q!!
yzzn2009
发表于 2013-12-24 13:36
一语笑天下 发表于 2013-12-24 12:19 static/image/common/back.gif
宁哥,可不可以修改一下把坟墓墓碑用铲子铲掉或者锤子敲掉,基地有几个坟墓看着不太舒服,强迫症木有办法啊 ...
原本修改技巧中是有去掉墓碑的,但存档会检查墓碑信息,容易导致报错,所以删除了条目
无语。。。
发表于 2013-12-24 13:40
为什么我在\data\scripts\prefabs\cave_banana.lua里面的inst:AddComponent("inspectable")的下一行插入local function OnDeploy (inst, pt)
local perd = SpawnPrefab("monkey")
if perd then
perd: PushEvent("growfromegg")
perd.Transform:SetPosition(pt.x, pt.y, pt.z)
inst.components.stackable:Get():Remove()
end
end
inst:AddComponent("deployable")
inst.components.deployable.ondeploy = OnDeploy
它无视我!!!!!不过可以打开
yzzn2009
发表于 2013-12-24 13:42
无语。。。 发表于 2013-12-24 07:02 static/image/common/back.gif
为什么我在\data\scripts\prefabs\cave_banana.lua里面的inst:AddComponent("inspectable")的下一行插入loc ...
文件名不对,你是插在cave_banana_tree.lua文件里了吧,等于用香蕉树种猴子,香蕉树拿不起来,当然没有用了。香蕉与其他蔬菜都在veggies.lua文件中,但会导致任何蔬菜都会种猴子,还是选别的物品来种吧
一语笑天下
发表于 2013-12-24 14:16
本帖最后由 一语笑天下 于 2013-12-24 14:18 编辑
yzzn2009 发表于 2013-12-24 13:42 static/image/common/back.gif
文件名不对,你是插在cave_banana_tree.lua文件里了吧,等于用香蕉树种猴子,香蕉树拿不起来,当然没有用 ...
0.0。。。
■華麗☆的★出
发表于 2013-12-24 16:26
190号那个孩子那个,远古守卫者角我咋搞不到?是不是一个大角上面一只眼睛?
无语。。。
发表于 2013-12-24 18:21
本帖最后由 无语。。。 于 2013-12-24 18:25 编辑
■華麗☆的★出 发表于 2013-12-24 16:26 static/image/common/back.gif
190号那个孩子那个,远古守卫者角我咋搞不到?是不是一个大角上面一只眼睛? ...
修改巨型超市(在主角制造栏中增加商店选项,用黄金买珍贵物品)就可以购买,或者去远古洞穴打犀牛 如果没有钱,可以
1.用记事本打开游戏目录\data\scripts\prefabs\cutreeds.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
local function OnDeploy (inst, pt)
local perd = SpawnPrefab("minotaurhorn")
if perd then
perd: PushEvent("growfromegg")
perd.Transform:SetPosition(pt.x, pt.y, pt.z)
inst.components.stackable:Get():Remove()
end
end
inst:AddComponent("deployable")
inst.components.deployable.ondeploy = OnDeploy
用芦苇种远古守卫者的角
远古守卫者的角就是犀牛角。
对了,把perd: PushEvent("growfromegg")这一句里面perd:后面的空格去掉,我加空格是因为会这样perd:PushEvent("growfromegg")
打死、烤肉酱
发表于 2013-12-24 18:25
兔人在洞穴里也会睡觉吗
无语。。。
发表于 2013-12-24 18:27
宁哥这样子可不可以perd: PushEvent("growfromegg")(中间加上空格)
库特
发表于 2013-12-24 18:39
没有5格货4格装备栏的修改么0.0
Mue战天。
发表于 2013-12-24 18:52
宁哥,您可以打近期修改的技巧完成的文件品发给我好吗,谢谢宁哥,祝好人一生平安!
cws1017460382
发表于 2013-12-24 18:59
ExperienceLossPerHandicapLevelAsP ercentage=20.0
这句话什么意思 ?:不是饥荒里的
yzzn2009
发表于 2013-12-24 19:37
打死、烤肉酱 发表于 2013-12-24 18:25 static/image/common/back.gif
兔人在洞穴里也会睡觉吗
是的,地上地下的时间是统一的
yzzn2009
发表于 2013-12-24 19:38
■華麗☆的★出 发表于 2013-12-24 16:26 static/image/common/back.gif
190号那个孩子那个,远古守卫者角我咋搞不到?是不是一个大角上面一只眼睛? ...
可以修改“巨型超市”购买,也可以在远古层打远古守护者(大犀牛)得到
yzzn2009
发表于 2013-12-24 19:38
无语。。。 发表于 2013-12-24 18:27 static/image/common/back.gif
宁哥这样子可不可以perd: PushEvent("growfromegg")(中间加上空格)
不能加空格
yzzn2009
发表于 2013-12-24 19:42
Mue战天。 发表于 2013-12-24 18:52 static/image/common/back.gif
宁哥,您可以打近期修改的技巧完成的文件品发给我好吗,谢谢宁哥,祝好人一生平安! ...
这是89685版的文件
http://pan.baidu.com/s/1F033C
无语。。。
发表于 2013-12-24 19:50
宁哥,我已经会改一些简单的种植的了:D
yzzn2009
发表于 2013-12-24 20:04
无语。。。 发表于 2013-12-24 19:50 static/image/common/back.gif
宁哥,我已经会改一些简单的种植的了
加油!
陈浩洋
发表于 2013-12-24 20:11
yzzn2009 发表于 2013-12-24 06:03 static/image/common/back.gif
授人以渔:开端
谢谢大神,我已经会改很多东西了:P
2416202910
发表于 2013-12-24 20:49
yzzn2009 发表于 2013-12-23 15:46 static/image/common/back.gif
孩子不会下地洞,可以命令他停在洞口等待
我说的是,孩子就在洞穴上面会不会太危险....
你在洞穴,儿子就死悄悄咯............
打死、烤肉酱
发表于 2013-12-24 21:24
怎么改孩子的移动速度
msunflower
发表于 2013-12-24 22:01
宁哥,能不能根据生存天数,杀死怪的数量和等级在人物死后弄一个评分系统啊 这样玩久了也不会腻啊 求了好几次了,再求