Don't Starve вики
Advertisement
Don't Starve вики
2144
страницы

function c_sel()return GetDebugEntity()end____________________________________________________________________________function c_select(inst)return SetDebugEntity(inst)end____________________________________________________________________________function c_tile()local s = "" local ground = GetWorld()local mx, my, mz = TheInput:GetWorldPosition():Get()local tx, ty = ground.Map:GetTileCoordsAtPoint(mx,my,mz)s = s..string.format("world[%f,%f,%f] tile[%d,%d] ", mx,my,mz, tx,ty) local tile = ground.Map:GetTileAtPoint(TheInput:GetWorldPosition():Get())for k,v in pairs(GROUND) doif v == tile thens = s..string.format("ground[%s] ", k)breakendend print(s)end____________________________________________________________________________-- Apply a scenario script to the selection and run it.function c_doscenario(scenario)local inst = GetDebugEntity()if not inst thenprint("Need to select an entity to apply the scenario to.")returnendif inst.components.scenariorunner theninst.components.scenariorunner:ClearScenario()end -- force reload the script -- this is for testing after all!package.loaded["scenarios/"..scenario] = nil inst:AddComponent("scenariorunner")inst.components.scenariorunner:SetScript(scenario)inst.components.scenariorunner:Run()SuUsed("c_doscenario_"..scenario, true)end____________________________________________________________________________-- Some helper shortcut functionsfunction c_season() return GetWorld().components.seasonmanager endfunction c_sel_health()if c_sel() thenlocal health = c_sel().components.healthif health thenreturn healthelseprint("Gah! Selection doesn't have a health component!")returnendelseprint("Gah! Need to select something to access it's components!")endend____________________________________________________________________________function c_setminhealth(n)SuUsed("c_minhealth", true)GetPlayer().components.health:SetMinHealth(n)end____________________________________________________________________________function c_pos(inst)return inst and Point(inst.Transform:GetWorldPosition())end function c_printpos(inst)print(c_pos(inst))end____________________________________________________________________________function c_move(inst)inst = inst or c_sel()inst.Transform:SetPosition(TheInput:GetWorldPosition():Get())SuUsed("c_move", true)end____________________________________________________________________________function c_goto(dest, inst)inst = inst or GetPlayer()if dest theninst.Transform:SetPosition(dest.Transform:GetWorldPosition())endSuUsed("c_goto", true)end____________________________________________________________________________function c_inst(guid)return Ents[guid]end____________________________________________________________________________function c_list(prefab)local x,y,z = GetPlayer().Transform:GetWorldPosition()local ents = TheSim:FindEntities(x,y,z, 9001)for k,v in pairs(ents) doif v.prefab == prefab thenprint(string.format("%s {%2.2f, %2.2f, %2.2f}", tostring(v), v.Transform:GetWorldPosition()))endendendПо-моему, показывает координаты объекта.____________________________________________________________________________function c_listtag(tag)local tags = {tag}local x,y,z = GetPlayer().Transform:GetWorldPosition()local ents = TheSim:FindEntities(x,y,z, 9001, tags)for k,v in pairs(ents) doprint(string.format("%s {%2.2f, %2.2f, %2.2f}", tostring(v), v.Transform:GetWorldPosition()))endend____________________________________________________________________________local lastfound = -1function c_findnext(prefab, radius, inst)inst = inst or GetPlayer()radius = radius or 9001 local trans = inst.Transformlocal found = nillocal foundlowestid = nillocal reallowest = nillocal reallowestid = nil print("Finding a ",prefab) local x,y,z = trans:GetWorldPosition()local ents = TheSim:FindEntities(x,y,z, radius)for k,v in pairs(ents) doif v ~= inst and v.prefab == prefab thenprint(v.GUID,lastfound,foundlowestid )if v.GUID > lastfound and (foundlowestid == nil or v.GUID < foundlowestid) thenfound = vfoundlowestid = v.GUIDendif not reallowestid or v.GUID < reallowestid thenreallowest = vreallowestid = v.GUIDendendendif not found thenfound = reallowestendif found thenlastfound = found.GUIDendreturn foundend____________________________________________________________________________function c_find(prefab, radius, inst)inst = inst or GetPlayer()radius = radius or 9001 local trans = inst.Transformlocal found = nillocal founddistsq = nil local x,y,z = trans:GetWorldPosition()local ents = TheSim:FindEntities(x,y,z, radius)for k,v in pairs(ents) doif v ~= inst and v.prefab == prefab thenif not founddistsq or inst:GetDistanceSqToInst(v) < founddistsq thenfound = vfounddistsq = inst:GetDistanceSqToInst(v)endendendreturn foundend____________________________________________________________________________function c_findtag(tag, radius, inst)return GetClosestInstWithTag(tag, inst or GetPlayer(), radius or 1000)end____________________________________________________________________________function c_gonext(name)c_goto(c_findnext(name))endПереносит игрока к объекту, вроде.

____________________________________________________________________________

function c_printtextureinfo( filename )

TheSim:PrintTextureInfo( filename )

end

____________________________________________________________________________

function c_simphase(phase)

GetWorld():PushEvent("phasechange", {newphase = phase})

end

____________________________________________________________________________

function c_anim(animname, loop)

if GetDebugEntity() then

GetDebugEntity().AnimState:PlayAnimation(animname, loop or false)

else

print("No DebugEntity selected")

end

end

____________________________________________________________________________

function c_light(c1, c2, c3)

TheSim:SetAmbientColour(c1, c2 or c1, c3 or c1)

end

____________________________________________________________________________

function c_spawn_ds(prefab, scenario)

local inst = c_spawn(prefab)

if not inst then

print("Need to select an entity to apply the scenario to.")

return

end

if inst.components.scenariorunner then

inst.components.scenariorunner:ClearScenario()

end

-- force reload the script -- this is for testing after all!

package.loaded["scenarios/"..scenario] = nil

inst:AddComponent("scenariorunner")

inst.components.scenariorunner:SetScript(scenario)

inst.components.scenariorunner:Run()

end

____________________________________________________________________________

function c_countprefabs(prefab, noprint)

local count = 0

for k,v in pairs(Ents) do

if v.prefab == prefab then

count = count + 1

end

end

if not noprint then

print("There are ", count, prefab.."s in the world.")

end

return count

end

____________________________________________________________________________

function c_countallprefabs()

local counted = {}

for k,v in pairs(Ents) do

if v.prefab and not table.findfield(counted, v.prefab) then

local num = c_countprefabs(v.prefab, true)

counted[v.prefab] = num

end

end

local function pairsByKeys (t, f)

local a = {}

for n in pairs(t) do table.insert(a, n) end

table.sort(a, f)

local i = 0      -- iterator variable

local iter = function ()   -- iterator function

i = i + 1

if a[i] == nil then return nil

else return a[i], t[a[i]]

end

end

return iter

end

for k,v in pairsByKeys(counted) do

print(k, v)

end

print("There are ", GetTableSize(counted), " different prefabs in the world.")

end

____________________________________________________________________________

function c_forcecrash(unique)

local path = "a"

if unique then

    path = string.random(10, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV")

end

if GetWorld() then

    GetWorld():DoTaskInTime(0,function() _G[path].b = 0 end)

elseif TheFrontEnd then

    TheFrontEnd.screenroot.inst:DoTaskInTime(0,function() _G[path].b = 0 end)

end

end

____________________________________________________________________________

function c_teststate(state)

c_sel().sg:GoToState(state)

end

____________________________________________________________________________

function c_poison()-накладывает отравление (разобрался, не знаю, куда вставить в статью)

____________________________________________________________________________ function c_warp(dest)'c_gonext(dest) end____________________________________________________________________________function c_holdingdevtool()local item = GetPlayer().components.inventory:GetEquippedItem(EQUIPSLOTS.HANDS)if item and item.prefab == "devtool" thenreturn trueend return falseend____________________________________________________________________________c_wetseason(skipPlayer)'c_greenseason(skipPlayer)' c_dryseason(skipPlayer)'c_nextseason(skipPlayer)'Вроде сезоны в св меняют.'____________________________________________________________________________function c_erupt()local vm = GetWorld().components.volcanomanagerif vm thenvm:StartEruption(60.0, 60.0, 60.0, 1 / 8)endend function c_nexterupt()local sm = GetSeasonManager()local vm = GetWorld().components.volcanomanager if not sm:IsDrySeason() thenc_dryseason()end if vm thenlocal segs = vm:GetNumSegmentsUntilEruption() or 0if segs > 0 thenprint("Skipping", segs)LongUpdate(TUNING.SEG_TIME * segs, true)endendend____________________________________________________________________________function c_prefabexists(prefab)if not PrefabExists(prefab) thenprint(prefab, "doest not exist!")return falseendreturn trueend____________________________________________________________________________

function c_treasuretest()

local l = GetTreasureLootDefinitionTable()

for name, data in pairs(l) do

if type(data) == "table" then

if type(data.loot) == "table" then

for k, _ in pairs(data.loot) do

c_prefabexists(k)

end

end

if type(data.random_loot) == "table" then

for k, _ in pairs(data.random_loot) do

c_prefabexists(k)

end

end

if type(data.chance_loot) == "table" then

for k, _ in pairs(data.chance_loot) do

c_prefabexists(k)

end

end

end

end

local t = GetTreasureDefinitionTable()

local obj_layout = require("map/object_layout")

for name, data in pairs(t) do

if type(data) == "table" then

for i, stage in ipairs(data) do

if type(stage) == "table" then

if stage.treasure_set_piece then

obj_layout.LayoutForDefinition(stage.treasure_set_piece)

end

if stage.treasure_prefab then

c_prefabexists(stage.treasure_prefab)

end

if stage.map_set_piece then

obj_layout.LayoutForDefinition(stage.map_set_piece)

end

if stage.map_prefab then

c_prefabexists(stage.map_prefab)

end

if stage.tier == nil then

if stage.loot == nil then

print("missing loot!", name)

elseif l[stage.loot] == nil then

print("missing loot!", name, stage.loot)

end

end

end

end

end

end

end

____________________________________________________________________________

function c_sounddebug()

if not package.loaded["debugsounds"] then

require "debugsounds"

end

SOUNDDEBUG_ENABLED = true

TheSim:SetDebugRenderEnabled(true)

end

____________________________________________________________________________

function c_mapstats()

local map = GetWorld().Map

local ground = {}

for k,v in pairs(GROUND) do

ground[v] = 0

end

local width, height = map:GetSize()

for y = 0, height, 1 do

for x = 0, width, 1 do

local g = map:GetTile(x, y)

if ground[g] then

ground[g] = ground[g] + 1

end

end

end

local totaltiles = width * height

local totalwater = 0

local totalland = 0

for k,v in pairs(ground) do

if map:IsWater(k) then

totalwater = totalwater + ground[k]

else

totalland = totalland + ground[k]

end

end

print("Map Stats")

print(string.format("  Shallow    \t%d\t(%4.4f%%)", ground[GROUND.OCEAN_SHALLOW], ground[GROUND.OCEAN_SHALLOW] / totaltiles * 100))

print(string.format("  Shore      \t%d\t(%4.4f%%)", ground[GROUND.OCEAN_SHORE], ground[GROUND.OCEAN_SHORE] / totaltiles * 100))

print(string.format("  Medium     \t%d\t(%4.4f%%)", ground[GROUND.OCEAN_MEDIUM], ground[GROUND.OCEAN_MEDIUM] / totaltiles * 100))

print(string.format("  Deep       \t%d\t(%4.4f%%)", ground[GROUND.OCEAN_DEEP], ground[GROUND.OCEAN_DEEP] / totaltiles * 100))

print(string.format("  Coral      \t%d\t(%4.4f%%)", ground[GROUND.OCEAN_CORAL], ground[GROUND.OCEAN_CORAL] / totaltiles * 100))

print(string.format("  Coral Shore\t%d\t(%4.4f%%)", ground[GROUND.OCEAN_CORAL_SHORE], ground[GROUND.OCEAN_CORAL_SHORE] / totaltiles * 100))

print(string.format("  Mangrove   \t%d\t(%4.4f%%)", ground[GROUND.MANGROVE], ground[GROUND.MANGROVE] / totaltiles * 100))

print(string.format("  Mangrove Sh\t%d\t(%4.4f%%)", ground[GROUND.MANGROVE_SHORE], ground[GROUND.MANGROVE_SHORE] / totaltiles * 100))

print(string.format("  Impassible \t%d\t(%4.4f%%)", ground[GROUND.IMPASSABLE], ground[GROUND.IMPASSABLE] / totaltiles * 100))

print(string.format("  Total water\t%d\t(%4.4f%%)", totalwater, totalwater / totaltiles * 100))

print(string.format("  Total land \t%d\t(%4.4f%%)", totalland, totalland / totaltiles * 100))

print(string.format("  Total tiles\t%d", totaltiles))

end

____________________________________________________________________________

function c_regenwater(data)

print("Water regen...")

local map = GetWorld().Map

local width, height = map:GetSize()

--clear water

for y = 0, height, 1 do

for x = 0, width, 1 do

local tile = map:GetTile(x, y)

if tile == GROUND.MANGROVE_SHORE then

map:SetTile(x, y, GROUND.MANGROVE)

elseif map:IsWater(tile) and tile ~= GROUND.MANGROVE then

map:SetTile(x, y, GROUND.IMPASSABLE)

end

end

end

WorldSim:SetTileMap(map:GetTileMap()) --so so hacky

require("map/water")

if type(data) == "table" then

ConvertImpassibleToWater(width, height, data)

elseif type(data) == "string" then

ConvertImpassibleToWater(width, height, require(data))

package.loaded[data] = nil

else

ConvertImpassibleToWater(width, height, require("map/watergen"))

package.loaded["map/watergen"] = nil

end

AddShoreline(width, height)

print("Rebuild...")

local tiles =

{

GROUND.OCEAN_SHALLOW, GROUND.OCEAN_MEDIUM, GROUND.OCEAN_DEEP, GROUND.OCEAN_CORAL, GROUND.MANGROVE,

GROUND.OCEAN_SHIPGRAVEYARD, GROUND.JUNGLE, GROUND.BEACH, GROUND.MAGMAFIELD, GROUND.TIDALMARSH,

GROUND.MEADOW, GROUND.IMPASSABLE

}

map:Finalize(1, COLLISION_TYPE.WATER)

local minimap = TheSim:FindFirstEntityWithTag("minimap")

if minimap then

for i = 1, #tiles, 1 do

minimap.MiniMap:RebuildLayer( tiles[i], 2, 2 )

end

end

c_mapstats()

WorldSim:SetTileMap(nil)

print("Water regen done.")

end

____________________________________________________________________________

function c_selectnear(prefab, rad)

local player = GetPlayer()

local x,y,z = player.Transform:GetWorldPosition()

local ents = TheSim:FindEntities(x,y,z, rad or 30)

local closest = nil

local closeness = nil

for k,v in pairs(ents) do

    if v.prefab == prefab then

        if closest == nil or player:GetDistanceSqToInst(v) < closeness then

            closest = v

            closeness = player:GetDistanceSqToInst(v)

        end

    end

end

if closest then

    c_select(closest)

end

end

____________________________________________________________________________

function c_skipdays(num)

LongUpdate(TUNING.TOTAL_DAY_TIME * num, true)

end

____________________________________________________________________________

function c_setlightningflashenabled(enabled)

GetWorld().components.clock:SetLightningFlashEnabled(enabled)

end 

Advertisement