ФЭНДОМ


В этой статье все будут писать все что знают о конфигурации ДС, как менять параметры мобов, персонажей, оружия и т.д.

Статья будет постепенно расти и пополняться полезной информацией. Если кто знает и хочет, пусть сделает удобное оформление.

Эта статья не для тех, кто все это уже знает и прошу не флудить в коментах типа "Блин а нафиг все это я уже знаю как все это делается", "ты нуб там еще много вещей которые ты не написал", "бесполезна удаляйте эту статью", она для тех, кто не в курсе всего этого!  Постараюсь все объяснить на простейшем языке, чтобы даже ребенок смог колдовать над игрой и сделать ее сложнее или легче.

Начало

В основном что нам надо будет все в папке: D:\Steam\SteamApps\common\dont_starve\data\scripts\prefabs , а на пиратке просто надо зайти в папку с игрой\data\scripts\prefabs , первым делом открываем любой из файлов с помощью блокнота/ворда(Notepad/Word), теперь все файлы можно беспрепятственно открывать с помощью блокнота/ворда. Рекомендую Notepad++ с подсветкой синтаксиса.

Перейдем к главному

Теперь напишу собственно о том как, что и где менять. Приведу примеры а остальное потребует только начального уровня знание английского и знание цифр что-ли?

Пример как поменять урон оружию: находим оружие/инструмент, к примеру топор, находим и заходим в папку axe.lua или у кого-то просто axe и находим строку -inst.components.weapon:SetDamage(TUNING.AXE_DAMAGE)

это собственно и есть урон, для того чтобы поменять его вписываем туда "*" и цифру на которую хотим умножить урон -

inst.components.weapon:SetDamage(TUNING.AXE_DAMAGE*2)

это сделает урон в 2 раза больше, а если вписать туда цифру меньше 1, то это понизит урон топора

inst.components.weapon:SetDamage(TUNING.AXE_DAMAGE*0.5)

то же самое и для копья, шипа щупальца, кирки, молота и вообще можно даже зонтику урон сделать как у копья... Все что надо сделать это только найти название оружия/инструмента папке с игрой\data\scripts\prefabs и проделать вышеуказаное действие.

Посмотрим на другие строки: строка

inst:AddComponent("tool")

inst.components.tool:SetAction(ACTIONS.CHOP)

мы видим там CHOP - это по английски рубить, если написать под этими двумя строками еще одну эдентичную второй, только вместо CHOP напишем MINE(долбить, добывать) то есть у нас получится 

inst:AddComponent("tool")

inst.components.tool:SetAction(ACTIONS.CHOP)

inst.components.tool:SetAction(ACTIONS.MINE)

то топор будет добывать и рубить(читерство?).

Еще одна другая строка: пониже есть строчки

inst:AddComponent("finiteuses")

inst.components.finiteuses:SetMaxUses(TUNING.AXE_USES)

inst.components.finiteuses:SetUses(TUNING.AXE_USES)

inst.components.finiteuses:SetOnFinished( onfinished)

inst.components.finiteuses:SetConsumption(ACTIONS.CHOP, 1)

это прочность, 2 и 3 строки отвечают за то чтобы у предмета было 100% прочности и впринципе мы можем их не трогать если хотим сделать чтоб топор дольше ломался, самая главная строчка это 5, она отвечает за поломку топора за один удар, в нашем случае 1, если поменять 1 на 0.1 то за 10 удар топором только он испортится на 1%, осталась 4 строчка только я не знаю зачем она, но есть предплолжения что это отвечает за то чтоб у тебя отобрался топор после достижения 0%.

Вот наверное все о инструментах...но может что нибудь и добавлю еще...потом...

Как менять параметры персонажам: чтобы изменить параметры любого из персонажей надо сперва найти его имя, это не сложно все они начинаются на W значит все они в конце всех файлов, вот вам всегда сложно(не всем конечно) что у Виллоу мало рассудка и вы хотите повысить ей рассудок.

Для этого заходим в Willow.lua (Уже Player_common) или же просто Willow(у кого как) находим строку 

inst.components.sanity:SetMax(TUNING.WILLOW_SANITY)

и по знакомому нам методу добавляем туда звездочку и цифру

inst.components.sanity:SetMax(TUNING.WILLOW_SANITY*1.2)

это немножко повысит ей рассудок, кстати SANITY - это рассудок.

Или же вы хотите построить мясное чучело в 1 зиму, но также хотите чтобы борода грела его зимой и не приходилось надевать шапку, для этого заходим в Wilson/Wilson.lua и находим там

--tune the beard economy...

local beard_days = {3, 5, 9}

local beard_bits = {1, 3,  9}

2 строка отвечает за дни, а 3 за количество получаемых клочков бороды за бритье, думаю пример приводить бессмысленно так как тут все понятно и просто - на верхней строке сказано что на 3 день щетина будет, на 5 борода а на 9 бородище, а на нижней что за бритье щетины 1 клочок дадут, за бороду 3 а за бородище 9 ( У меня уже это изменено у вас должно быть иначе)

Для интереса можно посмотреть также файл Вэса Wes/Wes.lua , открыв его мы видим 

local fn = function(inst)

inst.components.health:SetMaxHealth(TUNING.WILSON_HEALTH * .75 )

inst.components.hunger:SetMax(TUNING.WILSON_HUNGER * .75 )

inst.components.combat.damagemultiplier = .75

inst.components.hunger:SetRate(TUNING.WILSON_HUNGER_RATE*1.25)

inst.components.sanity:SetMax(TUNING.WILSON_SANITY*.75)

inst.components.inventory:GuaranteeItems(start_inv)

мы видим что Вэс не имеет собственное хп, рассудок, голод а все это взято с Вилсона, тогда как у других персонажей там написано собственное имя.

Остальное о персонажах вы можете посмотреть сами, не маленькие думаю сами разберетесь.

О топливе: если мы войдем в файл любого горючего предмета скажем бревна(log)(может не бревно а полено или чтото еще, у меня английская версия я не в курсе), то мы увидем там 

inst:AddComponent("fuel")

inst.components.fuel.fuelvalue = TUNING.MED_FUEL

MED - MEDIUM(средний), FUEL - горючее, что значит средней горуючести, можно поставить там 

inst:AddComponent("fuel")

inst.components.fuel.fuelvalue = TUNING.LARGE_FUEL

LARGE - большой , тогда бревно будет давать самый большой огонь от которого Виллоу будет балдеть, а вы без проблем переживать долгие зимние ночи без добавления еще чегонибудь в костер.

А если вам не хватает мест в рюкзаке: находим Backpack/Backpack.lua открываем его и сворачиваем и находим еще один файл Krampus_Sack, открываем и находим там строки 

local slotpos = {}


for y = 0, 6 do

table.insert(slotpos, Vector3(-162, -y*75 + 240 ,0))

table.insert(slotpos, Vector3(-162 +75, -y*75 + 240 ,0))

end

вот это будет отвечать за ячейки, далее находим подобные строчки в Backpack/Backpack.lua и заменяем вышеприведенные, и вуаля, у вас рюкзак с 14 ячейкми.

Меняем лут: это можно сделать так заходим в файл любого животного(которому собственно и будем менять лут)(кто не знает лут это дроп, добыча, то что выпадает из него если его забить в мясо(попонятнее объяснить не могу)), выбираем к примеру кроликов Rabbit/Rabbit.lua , там ищем строки 

inst.components.lootdropper:SetLoot({"smallmeat"})

smallmeat - маленькое мясо, можно сделать чтобы из кроликов выпадало бревно, для этого дописываем 

inst.components.lootdropper:SetLoot({"smallmeat"}, {"log"})

теперь из него будет выпадать бревно, а на самом деле можно заставить любое животное дропать любую вещь в любых количествах, ах да количество обозначается повторным написанием слова, скажем если надо чтобы выпало 2 бревна то пишем

inst.components.lootdropper:SetLoot({"smallmeat"}, {"log"}, {"log"})

можно даже 3 или 4 и так до бесконечности(или пока вам не надоест)

стакообразные(стэки, стаки, количество вещей в одной стопке(кому как удобно, но знайте это называют стаком)): предположим вам надоело таскать мало бревен, ведь скажем надо пойти кудато туда и построить 2 базу или склад неподалеку от базы и вам переносить много вещей, экономить место в инвентаре.

Тогда заходим в файл предмета стак которого мы хотим увеличить, к примеру пепел(ash)(первое что попало под руку), там будет строчка

inst:AddComponent("stackable")

inst.components.stackable.maxsize = TUNING.STACK_SIZE_SMALLITEM

пепел складывается в 40 штук, это самый большой стак в игре если вы не знаете, заметьте что тут написанно size smallitem, small это маленький а стак самый большой, SMALLITEM - маленький предмет, а маленькие предметы можно складывать в много, а большие соответственно в мало. Есть стаки в 40, 20, 10 и те которые не складываются

TUNING.STACK_SIZE_SMALLITEM                   это 40

TUNING.STACK_SIZE_LARGEITEM                  это 20 и 10 насколько я понял

ну тут собственно менять нечего а вот в boards(доски) и меняем там 

inst:AddComponent("stackable")

inst.components.stackable.maxsize = TUNING.STACK_SIZE_LARGEITEM

на 

inst:AddComponent("stackable")

inst.components.stackable.maxsize = TUNING.STACK_SIZE_SMALLITEM

!ВНИМАНИЕ! Открою вам секрет - так можно менять не только boards а также другие вещи!

Меняем рецепты:

Для этого нужно зайти в папку скриптов,то есть в Dont Starve\data\scripts и найти там файл recipes.lua

далее ищем категорию,в которой мы будем менять рецепты,например: TOOLS

Там ищем строку рецепта предмета,который нужно изменить,например:

Recipe("axe", {Ingredient("twigs", 1),Ingredient("flint", 1)}, RECIPETABS.TOOLS, TECH.NONE)

Пример изменения рецепта

Изменение рецепта с 12 лепестков до 6.

Где axe-это название самого предмета,Ingredient-ингредиенты для создания вещи и их кол-во,RECIPETABS-категория вещи,и 

TECH-уровень науки/магии

Можно выставлять в ингредиенты почти любые вещи,не более 3-4,любое количество оных,и уровень науки/магии для создания вещи






Примечания от автора:

1) Перед каждым изменением желательно сделать бекап файла, войти и проверить, если запустилась то все нормально, а если все плохо то игра вылетит.

2) Не делайте урон копья +100500, а то будет не интересно играть.

3) не всегда название предмета совпадет с названием в скриптах.

4) не судите статью строго, я не мастер в статьяписательном ремесле.

5) не удаляйте статью =).

6) надеюсь люди знающие толк в этом деле помогут дополнять статью или исправлять.

7) если кто-то возьмется помочь, то пожалуйста прочитай остальное, чтобы не было написанно об одном и том же дважды.

8) если какой-то вандал испортит статью, то знай, у меня есть ее копия!

А теперь немного практики:

Добавим мэрму способность кушать рыбу, лягушачьи лапки и возможно дружба (хотяб как у свина)

[spoiler=merm.lua]local assets = { Asset("ANIM", "anim/merm_build.zip"), Asset("ANIM", "anim/ds_pig_basic.zip"), Asset("ANIM", "anim/ds_pig_actions.zip"), Asset("ANIM", "anim/ds_pig_attacks.zip"), Asset("SOUND", "sound/merm.fsb"), }

local prefabs = { "fish", "froglegs", "mermhead", }

local loot = { "fish", "froglegs", "mermhead", }

local MAX_TARGET_SHARES = 5 local SHARE_TARGET_DIST = 30

--local function ontalk(inst, script) -- inst.SoundEmitter:PlaySound("dontstarve/creatures/bunnyman/idle_med") --inst.SoundEmitter:PlaySound("dontstarve/pig/grunt") --end

local function CalcSanityAura(inst, observer)

if inst.beardlord then return -TUNING.SANITYAURA_MED end

if inst.components.follower and inst.components.follower.leader == observer then return TUNING.SANITYAURA_SMALL end

return 0 end


local function ShouldAcceptItem(inst, item) if item.components.equippable and item.components.equippable.equipslot == EQUIPSLOTS.HEAD then return true end if item.components.edible then

if (item.prefab == "fish" or item.prefab == "fish_cooked" or item.prefab == "froglegs" or item.prefab == "froglegs_cooked") and inst.components.follower.leader and inst.components.follower:GetLoyaltyPercent() > 0.9 then return false end

return true end end

local function OnGetItemFromPlayer(inst, giver, item)

--I eat food if item.components.edible then if (item.prefab == "fish" or item.prefab == "fish_cooked" or item.prefab == "froglegs" or item.prefab == "froglegs_cooked") then if inst.components.combat.target and inst.components.combat.target == giver then inst.components.combat:SetTarget(nil) elseif giver.components.leader then inst.SoundEmitter:PlaySound("dontstarve/common/makeFriend") giver.components.leader:AddFollower(inst) inst.components.follower:AddLoyaltyTime(TUNING.RABBIT_CARROT_LOYALTY) end end

if inst.components.sleeper:IsAsleep() then inst.components.sleeper:WakeUp() end end

local function ShouldSleep(inst) return GetClock():IsDay() and not (inst.components.combat and inst.components.combat.target) and not (inst.components.homeseeker and inst.components.homeseeker:HasHome() ) and not (inst.components.burnable and inst.components.burnable:IsBurning() ) and not (inst.components.freezable and inst.components.freezable:IsFrozen() ) end

local function ShouldWake(inst) return not GetClock():IsDay() or (inst.components.combat and inst.components.combat.target) or (inst.components.homeseeker and inst.components.homeseeker:HasHome() ) or (inst.components.burnable and inst.components.burnable:IsBurning() ) or (inst.components.freezable and inst.components.freezable:IsFrozen() ) end

--I wear hats if item.components.equippable and item.components.equippable.equipslot == EQUIPSLOTS.HEAD then local current = inst.components.inventory:GetEquippedItem(EQUIPSLOTS.HEAD) if current then inst.components.inventory:DropItem(current) end

inst.components.inventory:Equip(item) inst.AnimState:Show("hat") end end

local function OnRefuseItem(inst, item) inst.sg:GoToState("refuse") if inst.components.sleeper:IsAsleep() then inst.components.sleeper:WakeUp() end end

local function OnEat(inst, food) if food.components.edible and food.components.edible.foodtype == "MEAT" and inst.components.werebeast and not inst.components.werebeast:IsInWereState() then if food.components.edible:GetHealth() < 0 then inst.components.werebeast:TriggerDelta(1) end end

end

local function NormalKeepTargetFn(inst, target)

return inst.components.combat:CanTarget(target) and not (target.sg and target.sg:HasStateTag("hiding")) end


local function giveupstring(combatcmp, target) return STRINGS.MERM_GIVEUP[math.random(#STRINGS.MERM_GIVEUP)] end


local function battlecry(combatcmp, target) return STRINGS.MERM_BATTLECRY[math.random(#STRINGS.MERM_BATTLECRY)] end

local function RetargetFn(inst) local defenseTarget = inst local home = inst.components.homeseeker and inst.components.homeseeker.home if home and inst:GetDistanceSqToInst(home) < TUNING.MERM_DEFEND_DIST*TUNING.MERM_DEFEND_DIST then defenseTarget = home end local invader = FindEntity(defenseTarget or inst, TUNING.MERM_TARGET_DIST, function(guy) return guy:HasTag("character") and not guy:HasTag("merm") end) return invader end

local function KeepTargetFn(inst, target) local home = inst.components.homeseeker and inst.components.homeseeker.home if home then return home:GetDistanceSqToInst(target) < TUNING.MERM_DEFEND_DIST*TUNING.MERM_DEFEND_DIST and home:GetDistanceSqToInst(inst) < TUNING.MERM_DEFEND_DIST*TUNING.MERM_DEFEND_DIST end return inst.components.combat:CanTarget(target) end

local function OnAttacked(inst, data) local attacker = data and data.attacker if attacker and inst.components.combat:CanTarget(attacker) then inst.components.combat:SetTarget(attacker) local targetshares = MAX_TARGET_SHARES if inst.components.homeseeker and inst.components.homeseeker.home then local home = inst.components.homeseeker.home if home and home.components.childspawner and inst:GetDistanceSqToInst(home) <= SHARE_TARGET_DIST*SHARE_TARGET_DIST then targetshares = targetshares - home.components.childspawner.childreninside home.components.childspawner:ReleaseAllChildren(attacker) end inst.components.combat:ShareTarget(attacker, SHARE_TARGET_DIST, function(dude) return dude.components.homeseeker and dude.components.homeseeker.home and dude.components.homeseeker.home == home end, targetshares) end end end

--local function CheckTransformState(inst) -- if not inst.components.health:IsDead() then -- if GetPlayer().components.sanity:GetPercent() > TUNING.BEARDLING_SANITY then -- SetNormalRabbit(inst) -- else -- SetBeardlord(inst) -- end -- end --end

--local function OnWake(inst) -- CheckTransformState(inst) -- inst.checktask = inst:DoPeriodicTask(10, CheckTransformState) --end

--local function OnSleep(inst) -- if inst.checktask then -- inst.checktask:Cancel() -- inst.checktask = nil -- end --end

local function fn() local inst = CreateEntity() local trans = inst.entity:AddTransform() local anim = inst.entity:AddAnimState() local sound = inst.entity:AddSoundEmitter() local shadow = inst.entity:AddDynamicShadow() shadow:SetSize( 1.5, .75 ) inst.Transform:SetFourFaced() local s = 1.25 inst.Transform:SetScale(s,s,s)

inst.entity:AddLightWatcher()

MakeCharacterPhysics(inst, 50, .5)

anim:SetBank("pigman") anim:SetBuild("merm_build") anim:PlayAnimation("idle_loop")

inst:AddComponent("locomotor") inst.components.locomotor.runspeed = TUNING.MERM_RUN_SPEED inst.components.locomotor.walkspeed = TUNING.MERM_WALK_SPEED

inst:SetStateGraph("SGmerm") anim:Hide("hat")

inst:AddTag("character") inst:AddTag("merm") inst:AddTag("wet") inst:AddTag("scarytoprey")


-- inst.CheckTransformState = CheckTransformState --used for purpleamulet

------------------------------------------ inst:AddComponent("eater") inst.components.eater:SetOmnivore() inst.components.eater:SetCanEatHorrible() inst.components.eater.strongstomach = true -- can eat monster meat! inst.components.eater:SetOnEatFn(OnEat)

------------------------------------------ inst:AddComponent("combat") inst.components.combat.hiteffectsymbol = "pig_torso" inst.components.combat:SetAttackPeriod(TUNING.MERM_ATTACK_PERIOD) inst.components.combat:SetRetargetFunction(1, RetargetFn) inst.components.combat:SetKeepTargetFunction(KeepTargetFn)

inst.components.combat.GetBattleCryString = battlecry inst.components.combat.GetGiveUpString = giveupstring


MakeMediumBurnableCharacter(inst, "manrabbit_torso")

inst:AddComponent("named") inst.components.named.possiblenames = STRINGS.PIGNAMES inst.components.named:PickNewName()

------------------------------------------ inst:AddComponent("follower") inst.components.follower.maxfollowtime = TUNING.PIG_LOYALTY_MAXTIME ------------------------------------------ inst:AddComponent("health") inst.components.health:SetMaxHealth(TUNING.MERM_HEALTH) inst.components.combat:SetDefaultDamage(TUNING.MERM_DAMAGE) inst.components.combat:SetAttackPeriod(TUNING.MERM_ATTACK_PERIOD) ------------------------------------------

inst:AddComponent("inventory")

------------------------------------------

inst:AddComponent("lootdropper") inst.components.lootdropper:SetLoot(loot)

------------------------------------------

inst:AddComponent("knownlocations") -- inst:AddComponent("talker") -- inst.components.talker.ontalk = ontalk -- inst.components.talker.fontsize = 24 -- inst.components.talker.font = TALKINGFONT -- inst.components.talker.offset = Vector3(0,-500,0)

------------------------------------------

inst:AddComponent("trader") inst.components.trader:SetAcceptTest(ShouldAcceptItem) inst.components.trader.onaccept = OnGetItemFromPlayer inst.components.trader.onrefuse = OnRefuseItem

------------------------------------------

inst:AddComponent("sanityaura") inst.components.sanityaura.aurafn = CalcSanityAura


------------------------------------------

inst:AddComponent("sleeper")

------------------------------------------ MakeMediumFreezableCharacter(inst, "pig_torso")

------------------------------------------


inst:AddComponent("inspectable") inst.components.inspectable.getstatus = function(inst) if inst.components.follower.leader ~= nil then return "FOLLOWER" end end ------------------------------------------

inst:ListenForEvent("attacked", OnAttacked) inst:ListenForEvent("newcombattarget", RetargetFn)


--inst.components.werebeast:SetOnWereFn(SetBeardlord) --inst.components.werebeast:SetOnNormaleFn(SetNormalRabbit)

-- CheckTransformState(inst) -- inst.OnEntityWake = OnWake -- inst.OnEntitySleep = OnSleep


inst.components.sleeper:SetResistance(2) inst.components.sleeper.nocturnal = true

inst.components.combat:SetKeepTargetFunction(NormalKeepTargetFn)


inst.components.trader:Enable() --inst.Label:Enable(true) --inst.components.talker:StopIgnoringAll()

local brain = require "brains/mermbrain" inst:SetBrain(brain)

return inst end


return Prefab("forest/animals/merm", fn, assets, prefabs)[/spoiler]

Не могу ему докрутить чтоб после приручения не бил меня нужен совет (возможно надо править mermbrain.lua)

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на ФЭНДОМЕ

Случайная вики