Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local assets =
- {
- Asset("ANIM", "anim/books.zip"),
- Asset("ATLAS", "images/inventoryimages/book_rabbit.xml"),
- Asset("IMAGE", "images/inventoryimages/book_rabbit.tex"),
- }
- local prefabs =
- {
- "book_fx",
- }
- local rabbit_uses = 5
- local max_rabbits = 20
- local med_rabbits = 10
- local function getspawnpoint(pt)
- local theta = math.random() * 2 * PI
- local radius = 6+math.random()*6
- local result_offset = FindValidPositionByFan(theta, radius, 12, function(offset)
- local ground = GetWorld()
- local spawn_point = pt + offset
- if not (ground.Map and ground.Map:GetTileAtPoint(spawn_point.x, spawn_point.y, spawn_point.z) == GROUND.IMPASSABLE) then
- return true
- end
- return false
- end)
- if result_offset then
- return pt+result_offset
- end
- end
- local function rabbitfn(inst, reader)
- reader.components.sanity:DoDelta(-TUNING.SANITY_HUGE)
- local num = 20 + math.random(10)
- local x, y, z = reader.Transform:GetWorldPosition()
- local ents = TheSim:FindEntities(x,y,z, 10, nil, nil, {'magicalrabbit'})
- if #ents > max_rabbits then
- num = 0
- reader.components.talker:Say(GetString(reader.prefab, "There's too many rabbits already!"))
- elseif #ents > med_rabbits then
- reader.components.talker:Say(GetString(reader.prefab, "There's already a lot of rabbits."))
- num = 10 + math.random(10)
- end
- if num > 0 then
- reader:StartThread(function()
- for k = 1, num do
- local pt = getspawnpoint(Vector3(reader.Transform:GetWorldPosition()))
- if pt then
- local rabbit = SpawnPrefab("rabbit")
- rabbit:AddTag("magicalrabbit")
- local spawn_point = Vector3(pt.x, pt.y, pt.z)
- rabbit.Transform:SetPosition(spawn_point)
- end
- Sleep(math.random(.2, .25))
- end
- end)
- end
- return true
- end
- local function onfinished(inst)
- inst:Remove()
- end
- local function fn(Sim)
- local inst = CreateEntity()
- local trans = inst.entity:AddTransform()
- local anim = inst.entity:AddAnimState()
- local sound = inst.entity:AddSoundEmitter()
- anim:SetBank("books")
- anim:SetBuild("books")
- anim:PlayAnimation(name)
- MakeInventoryPhysics(inst)
- -----------------------------------
- inst:AddComponent("inspectable")
- inst:AddComponent("book")
- inst.components.book.onread = rabbitfn
- inst:AddComponent("characterspecific")
- inst.components.characterspecific:SetOwner("wickerbottom")
- inst:AddComponent("inventoryitem")
- inst.components.inventoryitem.imagename = "book_rabbit"
- inst.components.inventoryitem.atlasname = "images/inventoryimages/book_rabbit.xml"
- inst:AddComponent("finiteuses")
- inst.components.finiteuses:SetMaxUses(rabbit_uses)
- inst.components.finiteuses:SetUses(rabbit_uses)
- inst.components.finiteuses:SetOnFinished(onfinished)
- MakeSmallBurnable(inst)
- MakeSmallPropagator(inst)
- return inst
- end
- return Prefab( "common/book_rabbit", fn, assets, prefabs)
Advertisement
Add Comment
Please, Sign In to add comment