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

宁哥,能不能根据生存天数,杀死怪的数量和等级在人物死后弄一个评分系统啊 这样玩久了也不会腻啊 求了好几次了,再求
页: 159 160 161 162 163 164 165 166 167 168 [169] 170 171 172 173 174 175 176 177 178
查看完整版本: 易宁:饥荒游戏实用修改技巧(非MOD模式,请自行备份)支持海难版——6月6日更新:简化修船工具制作材料(只用木板和绳子)