NAVY Posted August 2, 2018 Share Posted August 2, 2018 (edited) Hey! This is probably an easy question for you, however I am new to modding and couldn't find yet a solution, so this is why I do this post. I want to ask if there is a way to make the modmain.lua read code from another lua file, instead of attaching all the .lua files to the mod? In my case, I want to edit the amout of wool the beefalo drops when it is shaven. In my mod folder I add: scripts/prefabs/beelafo.lua and edit there one line: inst.components.beard.bits = 3 Or I could edit the default "3" into GetModConfigData("Settings") and add options to my mod in modinfo.lua. This I figured. Question: Is there a way to specificly edit this line, or other lines of code without attaching the original beefalo.lua file into my mod? This could help me for example with mod conflicts or simpy not loading all the lua files and code, only because I need to change a few lines. This is the local function code from the beefalo.lua: Spoiler local function beefalo() local inst = CreateEntity() inst.entity:AddTransform() inst.entity:AddAnimState() inst.entity:AddSoundEmitter() inst.entity:AddDynamicShadow() inst.entity:AddNetwork() MakeCharacterPhysics(inst, 100, .5) inst.DynamicShadow:SetSize(6, 2) inst.Transform:SetSixFaced() inst.AnimState:SetBank("beefalo") inst.AnimState:SetBuild("beefalo_build") inst.AnimState:PlayAnimation("idle_loop", true) inst.AnimState:Hide("HEAT") inst:AddTag("beefalo") inst:AddTag("animal") inst:AddTag("largecreature") inst:AddTag("bearded") inst:AddTag("trader") inst:AddTag("herdmember") inst:AddTag("saddleable") inst:AddTag("domesticatable") inst:AddTag("saltlicker") inst.sounds = sounds inst.entity:SetPristine() if not TheWorld.ismastersim then return inst end inst:AddComponent("bloomer") inst:AddComponent("beard") inst.components.beard.bits = 3 inst.components.beard.daysgrowth = TUNING.BEEFALO_HAIR_GROWTH_DAYS + 1 inst.components.beard.onreset = OnResetBeard inst.components.beard.canshavetest = CanShaveTest inst.components.beard.prize = "beefalowool" inst.components.beard:AddCallback(0, OnShaved) inst.components.beard:AddCallback(TUNING.BEEFALO_HAIR_GROWTH_DAYS, OnHairGrowth) inst:AddComponent("brushable") inst.components.brushable.regrowthdays = 1 inst.components.brushable.max = 1 inst.components.brushable.prize = "beefalowool" inst.components.brushable:SetOnBrushed(OnBrushed) inst:AddComponent("eater") inst.components.eater:SetDiet({ FOODTYPE.VEGGIE, FOODTYPE.ROUGHAGE }, { FOODTYPE.VEGGIE, FOODTYPE.ROUGHAGE }) inst.components.eater:SetAbsorptionModifiers(4,1,1) inst.components.eater:SetOnEatFn(OnEat) inst:AddComponent("combat") inst.components.combat.hiteffectsymbol = "beefalo_body" inst.components.combat:SetDefaultDamage(TUNING.BEEFALO_DAMAGE.DEFAULT) inst.components.combat:SetRetargetFunction(1, Retarget) inst.components.combat:SetKeepTargetFunction(KeepTarget) inst:AddComponent("health") inst.components.health:SetMaxHealth(TUNING.BEEFALO_HEALTH) inst.components.health.nofadeout = true inst.components.health:StartRegen(TUNING.BEEFALO_HEALTH_REGEN, TUNING.BEEFALO_HEALTH_REGEN_PERIOD) inst:ListenForEvent("death", OnDeath) -- need to handle this due to being mountable inst:ListenForEvent("healthdelta", OnHealthDelta) -- to inform rider inst:AddComponent("lootdropper") inst.components.lootdropper:SetChanceLootTable('beefalo') inst:AddComponent("inspectable") inst.components.inspectable.getstatus = GetStatus inst:AddComponent("knownlocations") inst:ListenForEvent("entermood", OnEnterMood) inst:ListenForEvent("leavemood", OnLeaveMood) inst:AddComponent("leader") inst:AddComponent("follower") inst.components.follower.maxfollowtime = TUNING.BEEFALO_FOLLOW_TIME inst.components.follower.canaccepttarget = false inst:ListenForEvent("newcombattarget", OnNewTarget) inst:ListenForEvent("attacked", OnAttacked) inst:AddComponent("periodicspawner") inst.components.periodicspawner:SetPrefab("poop") inst.components.periodicspawner:SetRandomTimes(40, 60) inst.components.periodicspawner:SetDensityInRange(20, 2) inst.components.periodicspawner:SetMinimumSpacing(8) inst.components.periodicspawner:Start() inst:AddComponent("rideable") inst.components.rideable:SetRequiredObedience(TUNING.BEEFALO_MIN_BUCK_OBEDIENCE) inst:ListenForEvent("saddlechanged", OnSaddleChanged) inst:ListenForEvent("refusedrider", OnRefuseRider) inst:AddComponent("trader") inst.components.trader:SetAcceptTest(ShouldAcceptItem) inst.components.trader.onaccept = OnGetItemFromPlayer inst.components.trader.onrefuse = OnRefuseItem inst.components.trader.deleteitemonaccept = false inst:AddComponent("hunger") inst.components.hunger:SetMax(TUNING.BEEFALO_HUNGER) inst.components.hunger:SetRate(TUNING.BEEFALO_HUNGER_RATE) inst.components.hunger:SetPercent(0) inst.components.hunger:SetOverrideStarveFn(OnStarving) inst:AddComponent("domesticatable") inst.components.domesticatable:SetDomesticationTrigger(DomesticationTriggerFn) MakeLargeBurnableCharacter(inst, "beefalo_body") MakeLargeFreezableCharacter(inst, "beefalo_body") inst:AddComponent("locomotor") inst.components.locomotor.walkspeed = TUNING.BEEFALO_WALK_SPEED inst.components.locomotor.runspeed = TUNING.BEEFALO_RUN_SPEED.DEFAULT inst:AddComponent("sleeper") inst.components.sleeper:SetResistance(3) inst.components.sleeper.sleeptestfn = MountSleepTest inst:AddComponent("timer") inst:AddComponent("saltlicker") inst.components.saltlicker:SetUp(TUNING.SALTLICK_BEEFALO_USES) inst:ListenForEvent("saltchange", ToggleDomesticationDecay) inst:ListenForEvent("gotosleep", ToggleDomesticationDecay) inst:ListenForEvent("onwakeup", ToggleDomesticationDecay) inst.ApplyBuildOverrides = ApplyBuildOverrides inst.ClearBuildOverrides = ClearBuildOverrides inst.tendency = TENDENCY.DEFAULT inst._bucktask = nil inst:AddComponent("herdmember") inst.components.herdmember:Enable(true) inst:AddComponent("mood") inst.components.mood:SetMoodTimeInDays(TUNING.BEEFALO_MATING_SEASON_LENGTH, TUNING.BEEFALO_MATING_SEASON_WAIT) inst.components.mood:SetInMoodFn(OnEnterMood) inst.components.mood:SetLeaveMoodFn(OnLeaveMood) inst.components.mood:CheckForMoodChange() inst.components.mood:Enable(false) inst.UpdateDomestication = UpdateDomestication inst:ListenForEvent("domesticated", OnDomesticated) inst.DoFeral = DoFeral inst:ListenForEvent("goneferal", OnFeral) inst:ListenForEvent("obediencedelta", OnObedienceDelta) inst:ListenForEvent("domesticationdelta", OnDomesticationDelta) inst:ListenForEvent("beingridden", OnBeingRidden) inst:ListenForEvent("riderchanged", OnRiderChanged) inst:ListenForEvent("riderdoattackother", OnRiderDoAttack) inst:ListenForEvent("hungerdelta", OnHungerDelta) inst:ListenForEvent("ridersleep", OnRiderSleep) inst:AddComponent("uniqueid") inst:AddComponent("beefalometrics") MakeHauntablePanic(inst) AddHauntableCustomReaction(inst, CustomOnHaunt, true, false, true) inst.SetTendency = SetTendency inst:SetTendency() inst.ShouldBeg = ShouldBeg inst:SetBrain(brain) inst:SetStateGraph("SGBeefalo") inst:DoTaskInTime(0, OnInit) inst.debugstringfn = GetDebugString inst.OnSave = OnSave inst.OnLoad = OnLoad return inst end Edited August 2, 2018 by NAVY Link to comment Share on other sites More sharing options...
Lumina Posted August 2, 2018 Share Posted August 2, 2018 Yes, it should be possible. Usually you edit a bit of a file, not the entire file, so mods could be compatible between each other without trouble. You can find the API with some examples : Here is the example of the API : local function BetterCarrotInit(prefab) prefab.components.edible.hungervalue = 200 -- carrots are the best food ever!! end AddPrefabPostInit("carrot", BetterCarrotInit) The example is a bit old, so maybe not 100% accurate, but you can find similar examples in other mods. Link to comment Share on other sites More sharing options...
NAVY Posted August 2, 2018 Author Share Posted August 2, 2018 Hey, thanks for the reply. With the example mod and some other posts, I was able to make this work. This is the code I came up with, and it works. Leaving it here if someone is having a similar issue or searching for a solution. local function updateLootTableBeefaloWool(inst) if(inst.components.beard == nil) then inst:AddComponent("beard") end inst.components.beard.bits = 3 --You can edit the number here. end AddPrefabPostInit("beefalo", updateLootTableBeefaloWool) Note: This is an example for the beefalo drops when shaved. With some changes it will work with any components. Link to comment Share on other sites More sharing options...
Recommended Posts