Jump to content

Recommended Posts

13 minutes ago, CarlZalph said:

I assume you're wanting the purple proposed line, then.


AddComponentPostInit(
    "sanityaura",
    function(self, inst)
        local GetAura_old = self.GetAura or function(...) return 0 end
        self.GetAura = function(self, observer)
            local retVal = GetAura_old(self, observer)
            if retVal<0 and observer and observer.prefab=="wilson"
            then
                local distsq = self.inst:GetDistanceSqToInst(observer)
                local dist = math.sqrt(distsq)
                local moddist = math.max(1, dist-2)
                retVal = retVal * math.max(1, distsq) / math.max(1, moddist*moddist)
            end
            return retVal
        end
    end
)

Change "wilson" to your character's prefab, and the "dist-2" to increase or decrease the cutoff threshold. (More negative = bigger inner radius and the 'purple' curve appears to start more right on the graph)

This code must be placed in master_postinit?

45 minutes ago, CarlZalph said:

I assume you're wanting the purple proposed line, then.

Change "wilson" to your character's prefab, and the "dist-2" to increase or decrease the cutoff threshold. (More negative = bigger inner radius and the 'purple' curve appears to start more right on the graph)

It is great)
Now everything works as I wanted, thank you very much)

Edited by Tezumoto
44 minutes ago, CarlZalph said:

I assume you're wanting the purple proposed line, then.

Change "wilson" to your character's prefab, and the "dist-2" to increase or decrease the cutoff threshold. (More negative = bigger inner radius and the 'purple' curve appears to start more right on the graph)

I would like to make one more difficult thing.
Chance of critical hit.
For example: the character x1 damage, but with a 25% chance it can strike x1.5
This can be done?

16 minutes ago, Tezumoto said:

I would like to make one more difficult thing.
Chance of critical hit.
For example: the character x1 damage, but with a 25% chance it can strike x1.5
This can be done?

This could be done like this.

So, lets say your character normally deals "inst.components.combat.damagemultiplier = 1" & you want deal 50% more damage on a critical hit you would put this inside YOUCHARACTER.lua inside master_postinit

inst:ListenForEvent("onattackother", function(inst, data)
local criticalchance = math.random(1,4) -- 1 out of 4 should be like 25% chance

if criticalchance == 4 and inst.next_hit_critical == nil then -- The random 25% chance of getting a critical hit has occured, so make next hit a critical hit.
inst.next_hit_critical = true
inst.components.combat.damagemultiplier = 1.5 -- Boost damage for critical hit.
else
return
end

if inst.next_hit_critical == true then
inst.next_hit_critical = nil
ShakeAllCameras(CAMERASHAKE.VERTICAL,.5, .01, .05, inst, .01) -- Give a tiny camera shake for cooler effect?
inst.components.talker:Say("Critical hit, oh yeah!") -- Have a critical hit quote, if u want?
inst:DoTaskInTime(0.05, function(inst) inst.components.combat.damagemultiplier = 1 end) -- Reset damage after scoring a critical hit.
end

end)

I didn't test this code so it might not work, tell me if it do'n't work. But I hope it works for you ;)!

EDIT: Use the newer edited code.

Edited by SuperDavid
6 minutes ago, SuperDavid said:

This could be done like this.

So, lets say your character normally deals "inst.components.combat.damagemultiplier = 1" & you want deal 50% more damage on a critical hit you would put this inside YOUCHARACTER.lua inside master_postinit


inst:ListenForEvent("onattackother", function(inst, data)
local criticalchance = math.random(1,4) -- 1 out of 4 should be like 25% chance

if criticalchance == 4 and inst.next_hit_critical == nil then -- The random 25% chance of getting a critical hit has occured, so make next hit a critical hit.
inst.next_hit_critical = true
inst.components.combat.damagemultiplier = 1.5 -- Boost damage for critical hit.
else
return
end

if inst.next_hit_critical == true then
inst.next_hit_critical = nil
ShakeAllCameras(CAMERASHAKE.VERTICAL,.5, .01, .05, inst, .01) -- Give a tiny camera shake for cooler effect?
inst.components.talker:Say("Critical hit, oh yeah!") -- Have a critical hit quote, if u want?
inst:DoTaskInTime(0.05, function(inst) inst.components.combat.damagemultiplier = 1 end) -- Reset damage after scoring a critical hit.
end

end)

I didn't test this code so it might not work, tell me if it do'n't work. But I hope it works for you ;)!

EDIT: Use the newer edited code.

This inst.components.sanity.night_drain_mult changes the speed of emptying of mind in the evening and at night.

It is possible to divide?
I want to mind in the evening emptied at a rate x1.5 and night x2

7 minutes ago, Tezumoto said:

I want to mind in the evening emptied at a rate x1.5 and night x2

So, lose 50% more mind in evening & 100% more mind in nighttime? Replace the "drain_sanity_at_day" thing I gave you before with these.

It'll make your character lose sanity at day & lose more sanity at nighttime/evening just like yiu want?

Above master_postinit

local function drain_sanity(inst, phase)
if phase == "day" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 2
inst.component.sanity.dapperness = inst.component.sanity.dapperness * -TUNING.DAPPERNESS_SMALL

elseif phase == "night" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 2
inst.component.sanity.dapperness = inst.component.sanity.dapperness * 0

elseif phase == "dusk" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 1.5
inst.component.sanity.dapperness = inst.component.sanity.dapperness * 0

end
end

Under master_postinit

inst:WatchWorldState("phase", drain_sanity)

 

12 minutes ago, SuperDavid said:

So, lose 50% more mind in evening & 100% more mind in nighttime? Replace the "drain_sanity_at_day" thing I gave you before with these.

It'll make your character lose sanity at day & lose more sanity at nighttime/evening just like yiu want?

Above master_postinit


local function drain_sanity(inst, phase)
if phase == "day" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 2
inst.component.sanity.dapperness = inst.component.sanity.dapperness * -TUNING.DAPPERNESS_SMALL

elseif phase == "night" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 2
inst.component.sanity.dapperness = inst.component.sanity.dapperness * 0

elseif phase == "dusk" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 1.5
inst.component.sanity.dapperness = inst.component.sanity.dapperness * 0

end
end

Under master_postinit


inst:WatchWorldState("phase", drain_sanity)

 

Can I remove the negative effect of the day?

Just now, Tezumoto said:

Can I remove the negative effect of the day?

Yes, just use this instead

master_postinitt

local function drain_sanity(inst, phase)
if phase == "day" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 2

elseif phase == "night" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 2

elseif phase == "dusk" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 1.5

end
end

 

2 minutes ago, SuperDavid said:

Yes, just use this instead

master_postinitt


local function drain_sanity(inst, phase)
if phase == "day" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 2

elseif phase == "night" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 2

elseif phase == "dusk" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 1.5

end
end

 

I can enhance the positive impact of the day?)

20 minutes ago, Tezumoto said:

I can enhance the positive impact of the day?)

You want to heal mind in day & 50% more mind lost in evening & 100% more mind lost in night then use this code instead all of the other ones

outside master_postinit

Spoiler

local function drain_sanity(inst, phase)
if phase == "day" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 2
inst.component.sanity.dapperness = inst.component.sanity.dapperness * -TUNING.DAPPERNESS_MED

elseif phase == "night" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 2
inst.component.sanity.dapperness = inst.component.sanity.dapperness * 0

elseif phase == "dusk" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 1.5
inst.component.sanity.dapperness = inst.component.sanity.dapperness * 0

end
end

 

inside master_postinit

inst:WatchWorldState("phase", drain_sanity)

 

17 minutes ago, SuperDavid said:

You want to heal mind in day & 50% more mind lost in evening & 100% more mind lost in night then use this code instead all of the other ones

 

 

I have a conflict between the two settings

	inst:WatchWorldState("phase", drain_sanity)

adn

	inst:WatchWorldState("phase",updatestats)
	updatestats(inst)

local function code:
 

local function updatestats(inst)

	if TheWorld.state.isfullmoon then
		
	        inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 1)
	        inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 1)
	        inst.components.hunger.hungerrate = 1.1 * TUNING.WILSON_HUNGER_RATE
			inst.components.talker:Say("Moon~")
		
		
	elseif TheWorld.state.phase == "day" then
	
	     inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 0.9)
	     inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 0.9)
	     inst.components.hunger.hungerrate = 1 * TUNING.WILSON_HUNGER_RATE
	
	
	elseif TheWorld.state.phase == "dusk" then
	
	     inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 0.9)
	     inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 0.9)
	     inst.components.hunger.hungerrate = 1 * TUNING.WILSON_HUNGER_RATE
	
	
	elseif TheWorld.state.phase == "night" then
		
	     inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 1)
	     inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 1)
	     inst.components.hunger.hungerrate = 1.1 * TUNING.WILSON_HUNGER_RATE
	

	end
	
end

local function drain_sanity(inst, phase)
if phase == "day" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 2
inst.component.sanity.dapperness = inst.component.sanity.dapperness * -TUNING.DAPPERNESS_MED

elseif phase == "night" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 2
inst.component.sanity.dapperness = inst.component.sanity.dapperness * 0

elseif phase == "dusk" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 1.5
inst.component.sanity.dapperness = inst.component.sanity.dapperness * 0

end
end

The error appears when the evening comes.

Edited by Tezumoto
14 minutes ago, Tezumoto said:

The error appears when the evening comes.

That's because you have to merge them :). Get rid of the code I gave you & replace your "updatestats" fucntion with this code it should be both codes combined into 1

I think this should work

edit: just incase maybe can you tell me the error too?

local function updatestats(inst)

	if TheWorld.state.isfullmoon then
    if inst:HasTag("playerghost") then -- Don't do anything if you're dead, to prevent crashes.
    return
    end

            inst.components.sanity.night_drain_mult = 2
            inst.component.sanity.dapperness = inst.component.sanity.dapperness * 0
		
	        inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 1)
	        inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 1)
	        inst.components.hunger.hungerrate = 1.1 * TUNING.WILSON_HUNGER_RATE
			inst.components.talker:Say("Moon~")
		
		
	elseif TheWorld.state.phase == "day" then
    if inst:HasTag("playerghost") then -- Don't do anything if you're dead, to prevent crashes.
    return
    end
	
         inst.components.sanity.night_drain_mult = 2
         inst.component.sanity.dapperness = inst.component.sanity.dapperness * -TUNING.DAPPERNESS_MED

	     inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 0.9)
	     inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 0.9)
	     inst.components.hunger.hungerrate = 1 * TUNING.WILSON_HUNGER_RATE
	
	
	elseif TheWorld.state.phase == "dusk" then
    if inst:HasTag("playerghost") then -- Don't do anything if you're dead, to prevent crashes.
    return
    end

         inst.components.sanity.night_drain_mult = 1.5
         inst.component.sanity.dapperness = inst.component.sanity.dapperness * 0
	
	     inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 0.9)
	     inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 0.9)
	     inst.components.hunger.hungerrate = 1 * TUNING.WILSON_HUNGER_RATE
	
	
	elseif TheWorld.state.phase == "night" then
    if inst:HasTag("playerghost") then -- Don't do anything if you're dead, to prevent crashes.
    return
    end
		
         inst.components.sanity.night_drain_mult = 2
         inst.component.sanity.dapperness = inst.component.sanity.dapperness * 0

	     inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 1)
	     inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 1)
	     inst.components.hunger.hungerrate = 1.1 * TUNING.WILSON_HUNGER_RATE
	

	end
	
end

 

Edited by SuperDavid
16 minutes ago, SuperDavid said:

That's because you have to merge them :). Get rid of the code I gave you & replace your "updatestats" fucntion with this code it should be both codes combined into 1

I think this should work

edit: just incase maybe can you tell me the error too?

 

And what to do with it?

 

30 minutes ago, Tezumoto said:

I have a conflict between the two settings


	inst:WatchWorldState("phase", drain_sanity)

and


	inst:WatchWorldState("phase",updatestats)
	updatestats(inst)

 

 

 

Just now, Tezumoto said:

And what to do with it?

 

31 minutes ago, Tezumoto said:

I have a conflict between the two settings



	inst:WatchWorldState("phase", drain_sanity)

and



	inst:WatchWorldState("phase",updatestats)
	updatestats(inst)

Delete

inst:watchworldstate(;phase", drain_sanity"

& keep the 

inst:watchworldstate(;phase", updatestats"

 

I don't really know if you need "updatestats(inst)" so just keep that or delete it, test it.

35 minutes ago, SuperDavid said:

Delete

inst:watchworldstate(;phase", drain_sanity"

& keep the 

inst:watchworldstate(;phase", updatestats"

 

I don't really know if you need "updatestats(inst)" so just keep that or delete it, test it.

It throws an error probably something wrong.

15 minutes ago, SuperDavid said:

Can you post your mod on this site https://dropfile.to/ & then send me a link then I can personally see what's wrong? Or tell me exactly what the crash is saying or else I won't have any idea of how to help :)...

 

20161101030253_1.jpg

And this code I use

local MakePlayerCharacter = require "prefabs/player_common"

local assets = {Asset("SCRIPT", "scripts/prefabs/player_common.lua"),}

local prefabs = {}

local start_inv = {"bedroll_furry"}

local function onbecamehuman(inst)

	inst.components.locomotor:SetExternalSpeedMultiplier(inst, "reisen_speed_mod", 1)
	
end

local function onbecameghost(inst)

   inst.components.locomotor:RemoveExternalSpeedMultiplier(inst, "reisen_speed_mod")
   
end

local function onload(inst)

    inst:ListenForEvent("ms_respawnedfromghost", onbecamehuman)
    inst:ListenForEvent("ms_becameghost", onbecameghost)

    if inst:HasTag("playerghost") then
	
        onbecameghost(inst)
		
    else
	
        onbecamehuman(inst)
		
    end
	
end

local function drain_sanity(inst, phase)
if phase == "day" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 2
inst.component.sanity.dapperness = inst.component.sanity.dapperness * -TUNING.DAPPERNESS_MED

elseif phase == "night" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 2
inst.component.sanity.dapperness = inst.component.sanity.dapperness * 0

elseif phase == "dusk" then
if inst:HasTag("playerghost") then
return
end

inst.components.sanity.night_drain_mult = 1.5
inst.component.sanity.dapperness = inst.component.sanity.dapperness * 0

end
end

local common_postinit = function(inst)

	inst.MiniMapEntity:SetIcon( "reisen.tex" )
	
end

local master_postinit = function(inst)

	inst.soundsname = "willow"
	
	inst.components.health:SetMaxHealth(200)
	inst.components.hunger:SetMax(150)
	inst.components.sanity:SetMax(150)
	
	inst.components.temperature.inherentinsulation = ( TUNING.INSULATION_PER_BEARD_BIT * 2.5 )
	
	inst.components.locomotor.walkspeed = ( TUNING.WILSON_WALK_SPEED * 0.9 )
	inst.components.locomotor.runspeed = ( TUNING.WILSON_RUN_SPEED * 0.9 )
	
	inst.components.combat.damagemultiplier = 1
	
	inst:ListenForEvent("onattackother", function(inst, data)
local criticalchance = math.random(1,4) -- 1 out of 4 should be like 25% chance

if criticalchance == 4 and inst.next_hit_critical == nil then -- The random 25% chance of getting a critical hit has occured, so make next hit a critical hit.
inst.next_hit_critical = true
inst.components.combat.damagemultiplier = 1.5 -- Boost damage for critical hit.
else
return
end

if inst.next_hit_critical == true then
inst.next_hit_critical = nil
ShakeAllCameras(CAMERASHAKE.VERTICAL,.5, .01, .05, inst, .01) -- Give a tiny camera shake for cooler effect?
inst.components.talker:Say("Э да, критический удар!") -- Have a critical hit quote, if u want?
inst:DoTaskInTime(0.05, function(inst) inst.components.combat.damagemultiplier = 1 end) -- Reset damage after scoring a critical hit.
end

end)
	
	inst.components.hunger.hungerrate = ( 1 * TUNING.WILSON_HUNGER_RATE )
	
	inst.components.eater:SetCanEatRaw()
	inst.components.eater.strongstomach = true
	
	inst.OnLoad = onload
    inst.OnNewSpawn = onload
	
	inst:WatchWorldState("phase", drain_sanity)
	
end

return MakePlayerCharacter("reisen", prefabs, assets, common_postinit, master_postinit, start_inv)

 

Edited by Tezumoto

@Tezumoto

Replace all of your character's code in reisen.lua with this new code, it should work.

Spoiler

local MakePlayerCharacter = require "prefabs/player_common"

local assets = {Asset("SCRIPT", "scripts/prefabs/player_common.lua"),}

local prefabs = {}

local start_inv = {"bedroll_furry"}

local function onbecamehuman(inst)

	inst.components.locomotor:SetExternalSpeedMultiplier(inst, "reisen_speed_mod", 1)
	
end

local function onbecameghost(inst)

   inst.components.locomotor:RemoveExternalSpeedMultiplier(inst, "reisen_speed_mod")
   
end

local function onload(inst)

    inst:ListenForEvent("ms_respawnedfromghost", onbecamehuman)
    inst:ListenForEvent("ms_becameghost", onbecameghost)

    if inst:HasTag("playerghost") then
	
        onbecameghost(inst)
		
    else
	
        onbecamehuman(inst)
		
    end
	
end


local function update_all_stats(inst, phase)

if TheWorld.state.isfullmoon then
if inst:HasTag("playerghost") then
return
end
inst.components.sanity.night_drain_mult = 2
inst.component.sanity.dapperness = 0
inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 1)
inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 1)
inst.components.hunger.hungerrate = 1.1 * TUNING.WILSON_HUNGER_RATE
inst.components.talker:Say("Moon~")

elseif phase == "day" then
if inst:HasTag("playerghost") then
return
end
inst.components.sanity.night_drain_mult = 2
inst.component.sanity.dapperness = TUNING.DAPPERNESS_MED
inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 0.9)
inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 0.9)
inst.components.hunger.hungerrate = 1 * TUNING.WILSON_HUNGER_RATE

elseif phase == "night" then
if inst:HasTag("playerghost") then
return
end
inst.components.sanity.night_drain_mult = 2
inst.component.sanity.dapperness = 0
inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 1)
inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 1)
inst.components.hunger.hungerrate = 1.1 * TUNING.WILSON_HUNGER_RATE

elseif phase == "dusk" then
if inst:HasTag("playerghost") then
return
end
inst.components.sanity.night_drain_mult = 1.5
inst.component.sanity.dapperness = 0
inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 0.9)
inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 0.9)
inst.components.hunger.hungerrate = 1 * TUNING.WILSON_HUNGER_RATE
end
end


local common_postinit = function(inst)

	inst.MiniMapEntity:SetIcon( "reisen.tex" )
	
end

local master_postinit = function(inst)

	inst.soundsname = "willow"
	
	inst.components.health:SetMaxHealth(200)
	inst.components.hunger:SetMax(150)
	inst.components.sanity:SetMax(150)
	
	inst.components.temperature.inherentinsulation = ( TUNING.INSULATION_PER_BEARD_BIT * 2.5 )
	
	inst.components.locomotor.walkspeed = ( TUNING.WILSON_WALK_SPEED * 0.9 )
	inst.components.locomotor.runspeed = ( TUNING.WILSON_RUN_SPEED * 0.9 )
	
	inst.components.combat.damagemultiplier = 1
	
inst:ListenForEvent("onattackother", function(inst, data)
local criticalchance = math.random(1,4) -- 1 out of 4 should be like 25% chance

if criticalchance == 4 and inst.next_hit_critical == nil then -- The random 25% chance of getting a critical hit has occured, so make next hit a critical hit.
inst.next_hit_critical = true
inst.components.combat.damagemultiplier = 1.5 -- Boost damage for critical hit.
else
return
end

if inst.next_hit_critical == true then
inst.next_hit_critical = nil
ShakeAllCameras(CAMERASHAKE.VERTICAL,.5, .01, .05, inst, .01) -- Give a tiny camera shake for cooler effect?
inst.components.talker:Say("Э да, критический удар!") -- Have a critical hit quote, if u want?
inst:DoTaskInTime(0.05, function(inst) inst.components.combat.damagemultiplier = 1 end) -- Reset damage after scoring a critical hit.
end

end)
	
	inst.components.hunger.hungerrate = ( 1 * TUNING.WILSON_HUNGER_RATE )
	
	inst.components.eater:SetCanEatRaw()
	inst.components.eater.strongstomach = true
	
	inst.OnLoad = onload
    inst.OnNewSpawn = onload
	
	inst:WatchWorldState("phase", update_all_stats)
	
end

return MakePlayerCharacter("reisen", prefabs, assets, common_postinit, master_postinit, start_inv)

 

7 minutes ago, SuperDavid said:

@Tezumoto

Replace all of your character's code in reisen.lua with this new code, it should work.

  Hide contents


local MakePlayerCharacter = require "prefabs/player_common"

local assets = {Asset("SCRIPT", "scripts/prefabs/player_common.lua"),}

local prefabs = {}

local start_inv = {"bedroll_furry"}

local function onbecamehuman(inst)

	inst.components.locomotor:SetExternalSpeedMultiplier(inst, "reisen_speed_mod", 1)
	
end

local function onbecameghost(inst)

   inst.components.locomotor:RemoveExternalSpeedMultiplier(inst, "reisen_speed_mod")
   
end

local function onload(inst)

    inst:ListenForEvent("ms_respawnedfromghost", onbecamehuman)
    inst:ListenForEvent("ms_becameghost", onbecameghost)

    if inst:HasTag("playerghost") then
	
        onbecameghost(inst)
		
    else
	
        onbecamehuman(inst)
		
    end
	
end


local function update_all_stats(inst, phase)

if TheWorld.state.isfullmoon then
if inst:HasTag("playerghost") then
return
end
inst.components.sanity.night_drain_mult = 2
inst.component.sanity.dapperness = 0
inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 1)
inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 1)
inst.components.hunger.hungerrate = 1.1 * TUNING.WILSON_HUNGER_RATE
inst.components.talker:Say("Moon~")

elseif phase == "day" then
if inst:HasTag("playerghost") then
return
end
inst.components.sanity.night_drain_mult = 2
inst.component.sanity.dapperness = TUNING.DAPPERNESS_MED
inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 0.9)
inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 0.9)
inst.components.hunger.hungerrate = 1 * TUNING.WILSON_HUNGER_RATE

elseif phase == "night" then
if inst:HasTag("playerghost") then
return
end
inst.components.sanity.night_drain_mult = 2
inst.component.sanity.dapperness = 0
inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 1)
inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 1)
inst.components.hunger.hungerrate = 1.1 * TUNING.WILSON_HUNGER_RATE

elseif phase == "dusk" then
if inst:HasTag("playerghost") then
return
end
inst.components.sanity.night_drain_mult = 1.5
inst.component.sanity.dapperness = 0
inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 0.9)
inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 0.9)
inst.components.hunger.hungerrate = 1 * TUNING.WILSON_HUNGER_RATE
end
end


local common_postinit = function(inst)

	inst.MiniMapEntity:SetIcon( "reisen.tex" )
	
end

local master_postinit = function(inst)

	inst.soundsname = "willow"
	
	inst.components.health:SetMaxHealth(200)
	inst.components.hunger:SetMax(150)
	inst.components.sanity:SetMax(150)
	
	inst.components.temperature.inherentinsulation = ( TUNING.INSULATION_PER_BEARD_BIT * 2.5 )
	
	inst.components.locomotor.walkspeed = ( TUNING.WILSON_WALK_SPEED * 0.9 )
	inst.components.locomotor.runspeed = ( TUNING.WILSON_RUN_SPEED * 0.9 )
	
	inst.components.combat.damagemultiplier = 1
	
inst:ListenForEvent("onattackother", function(inst, data)
local criticalchance = math.random(1,4) -- 1 out of 4 should be like 25% chance

if criticalchance == 4 and inst.next_hit_critical == nil then -- The random 25% chance of getting a critical hit has occured, so make next hit a critical hit.
inst.next_hit_critical = true
inst.components.combat.damagemultiplier = 1.5 -- Boost damage for critical hit.
else
return
end

if inst.next_hit_critical == true then
inst.next_hit_critical = nil
ShakeAllCameras(CAMERASHAKE.VERTICAL,.5, .01, .05, inst, .01) -- Give a tiny camera shake for cooler effect?
inst.components.talker:Say("Э да, критический удар!") -- Have a critical hit quote, if u want?
inst:DoTaskInTime(0.05, function(inst) inst.components.combat.damagemultiplier = 1 end) -- Reset damage after scoring a critical hit.
end

end)
	
	inst.components.hunger.hungerrate = ( 1 * TUNING.WILSON_HUNGER_RATE )
	
	inst.components.eater:SetCanEatRaw()
	inst.components.eater.strongstomach = true
	
	inst.OnLoad = onload
    inst.OnNewSpawn = onload
	
	inst:WatchWorldState("phase", update_all_stats)
	
end

return MakePlayerCharacter("reisen", prefabs, assets, common_postinit, master_postinit, start_inv)

 

Don't work =(

20161101040156_1.jpg

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
  • Create New...