3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 6119|回复: 2
打印 上一主题 下一主题

[求助] 出现attempt to index local 'attacker'(anilvalue) LUA ERROR stack traceback错误

[复制链接]

1

主题

102

帖子

161

积分

中级玩家

Rank: 3Rank: 3

贡献度
4
金元
1447
积分
161
精华
0
注册时间
2010-6-3
跳转到指定楼层
主题
发表于 2018-10-8 07:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
精神值到0的时候打暗影兽,四-五次里面有1次会一砍 游戏就报错。出现attempt to index local 'attacker'(anilvalue) LUA ERROR stack traceback错误,求大哥解决!谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

1

主题

102

帖子

161

积分

中级玩家

Rank: 3Rank: 3

贡献度
4
金元
1447
积分
161
精华
0
注册时间
2010-6-3
舒服的沙发
 楼主| 发表于 2018-10-8 07:54 | 只看该作者
报错图片如图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

1

主题

102

帖子

161

积分

中级玩家

Rank: 3Rank: 3

贡献度
4
金元
1447
积分
161
精华
0
注册时间
2010-6-3
硬硬的板凳
 楼主| 发表于 2018-10-8 08:14 | 只看该作者
shadowcreature.lua文件内容如下


local prefabs =
{
    "nightmarefuel",
}

local function retargetfn(inst)
    local entity = FindEntity(inst, TUNING.SHADOWCREATURE_TARGET_DIST, function(guy)
                return guy:HasTag("player") and guy.components.sanity:IsCrazy() and inst.components.combat:CanTarget(guy)
    end)
    return entity
end

local function onkilledbyother(inst, attacker)
        if attacker and attacker.components.sanity then
                attacker.components.sanityoDelta(inst.sanityreward or TUNING.SANITY_SMALL)
        end
end

local loot = {"nightmarefuel"}

local function CalcSanityAura(inst, observer)
        if inst.components.combat.target then
                return -TUNING.SANITYAURA_LARGE
        end       
        return 0
end

local function canbeattackedfn(inst, attacker)
        return inst.components.combat.target ~= nil or
                (attacker.components.sanity and attacker.components.sanity:IsCrazy())
end

local function OnAttacked(inst, data)
    inst.components.combat:SetTarget(data.attacker)
    inst.components.combat:ShareTarget(data.attacker, 30, function(dude) return dude:HasTag("shadowcreature") and not dude.components.health:IsDead() end, 1)
end

local function MakeShadowCreature(data)

    local bank = data.bank
    local build = data.build
   
    local assets=
    {
            Asset("ANIM", "anim/"..data.build..".zip"),
    }
   
    local sounds =
    {
        attack = "dontstarve/sanity/creature"..data.num.."/attack",
        attack_grunt = "dontstarve/sanity/creature"..data.num.."/attack_grunt",
        death = "dontstarve/sanity/creature"..data.num.."/die",
        idle = "dontstarve/sanity/creature"..data.num.."/idle",
        taunt = "dontstarve/sanity/creature"..data.num.."/taunt",
        appear = "dontstarve/sanity/creature"..data.num.."/appear",
        disappear = "dontstarve/sanity/creature"..data.num.."/dissappear",
    }

    local function fn()
            local inst = CreateEntity()
            local trans = inst.entity:AddTransform()
            local anim = inst.entity:AddAnimState()
        local physics = inst.entity:AddPhysics()
            local sound = inst.entity:AddSoundEmitter()
        inst.Transform:SetFourFaced()
        inst:AddTag("shadowcreature")
           
        MakeCharacterPhysics(inst, 10, 1.5)
        RemovePhysicsColliders(inst)
            inst.Physics:SetCollisionGroup(COLLISION.SANITY)
            inst.Physics:CollidesWith(COLLISION.SANITY)
            --inst.Physics:CollidesWith(COLLISION.WORLD)
        
         
        anim:SetBank(bank)
        anim:SetBuild(build)
        animlayAnimation("idle_loop")
        anim:SetMultColour(1, 1, 1, 0.5)
        inst:AddComponent("locomotor") -- locomotor must be constructed before the stategraph
        inst.components.locomotor.walkspeed = data.speed
        inst.sounds = sounds
        inst:SetStateGraph("SGshadowcreature")

        inst:AddTag("monster")
            inst:AddTag("hostile")
        inst:AddTag("shadow")

        local brain = require "brains/shadowcreaturebrain"
        inst:SetBrain(brain)
        
            inst:AddComponent("sanityaura")
            inst.components.sanityaura.aurafn = CalcSanityAura
        
        inst:AddComponent("transparentonsanity")
        inst:AddComponent("health")
        inst.components.health:SetMaxHealth(data.health)
        
                inst.sanityreward = data.sanityreward
               
        inst:AddComponent("combat")
        inst.components.combat:SetDefaultDamage(data.damage)
        inst.components.combat:SetAttackPeriod(data.attackperiod)
        inst.components.combat:SetRetargetFunction(3, retargetfn)
        inst.components.combat.onkilledbyother = onkilledbyother
        inst.components.combat.canbeattackedfn = canbeattackedfn

        inst:AddComponent("lootdropper")
        inst.components.lootdropper:SetLoot(loot)
        inst.components.lootdropper:AddChanceLoot("nightmarefuel", 0.5)
        
        instistenForEvent("attacked", OnAttacked)

        return inst
    end
        
    return Prefab("monsters/"..data.name, fn, assets, prefabs)
end


local data = {{name="crawlinghorror", build = "shadow_insanity1_basic", bank = "shadowcreature1", num = 1, speed = TUNING.CRAWLINGHORROR_SPEED, health=TUNING.CRAWLINGHORROR_HEALTH, damage=TUNING.CRAWLINGHORROR_DAMAGE, attackperiod = TUNING.CRAWLINGHORROR_ATTACK_PERIOD, sanityreward = TUNING.SANITY_MED},
                          {name="terrorbeak", build = "shadow_insanity2_basic", bank = "shadowcreature2", num = 2, speed = TUNING.TERRORBEAK_SPEED, health=TUNING.TERRORBEAK_HEALTH, damage=TUNING.TERRORBEAK_DAMAGE, attackperiod = TUNING.TERRORBEAK_ATTACK_PERIOD, sanityreward = TUNING.SANITY_LARGE}}

local ret = {}
for k,v in pairs(data) do
        table.insert(ret, MakeShadowCreature(v))
end


return unpack(ret)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2025-3-15 07:02 , Processed in 0.110290 second(s), 14 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表