-- LUA Script - precede every function and global member with lowercase name of script + '_main' local presses_required = 10 --how many times the player needs to press E to free himself local activate_range = 60 --how close the player can get before the trap is triggered local trap_triggered_anim = 1 --the trap closing local trap_set_anim = 0 --the trap opening local damage = 20 --the damage the trap does when triggered -- state to ensure user must release E key before can open/close again local beartrap_pressed = 0 local current_presses = 0 local g_state = {} --sound 1 = trap triggered --sound 2 = trap (re)set function beartrap_init(e) g_state[e] = "set" SetAnimationFrame(e,GetEntityAnimationFinish(e,trap_set_anim)) end function beartrap_main(e) if g_state[e] == "set" then if GetPlayerDistance(e) <= activate_range then rayid = IntersectAll(g_PlayerPosX,g_PlayerPosY,g_PlayerPosZ,g_PlayerPosX,GetEntityPositionY(e),g_PlayerPosZ,0) if rayid == g_Entity[e]['obj'] then SetAnimation(trap_triggered_anim) PlayAnimation(e) PlaySound(e,1) g_state[e] = "triggering" g_Entity[e]['animating'] = 1 SetFreezePosition(g_PlayerPosX,g_PlayerPosY,g_PlayerPosZ) end end elseif g_state[e] == "triggering" then TransportToFreezePositionOnly() if g_Entity[e]['animating'] == 0 then HurtPlayer(e,damage) g_state[e] = "triggered" current_presses = 0 end elseif g_state[e] == "triggered" then if g_PlayerHealth < 1 then SetAnimation(trap_set_anim) PlayAnimation(e) PlaySound(e,2) g_Entity[e]['animating'] = 1 g_state[e] = "resetting" else TransportToFreezePositionOnly() Prompt("You're stuck in a bear trap, mash [e] to escape!") if g_Scancode == 18 then if beartrap_pressed == 0 then beartrap_pressed = 1 current_presses = current_presses + 1 if current_presses >= presses_required then SetAnimation(trap_set_anim) PlayAnimation(e) PlaySound(e,2) g_Entity[e]['animating'] = 1 g_state[e] = "resetting" end end else beartrap_pressed = 0 end end elseif g_state[e] == "resetting" then if g_Entity[e]['animating'] == 0 then g_state[e] = "reset" end elseif g_state[e] == "reset" then if GetPlayerDistance(e) > activate_range*1.5 then g_state[e] = "set" end end end