-- LUA Script - precede every function and global member with lowercase name of script + '_main' local U = require "scriptbank\\utillib" local Q = require "scriptbank\\quatlib" local rad = math.rad local hurtAmount = 5 local spikeVars = { baseAng = -90, framestart = 1, frameend = 80, spikelen = 70 } local spikes ={} function spikes_init_name( e, name ) Include( "utillib.lua" ) Include( "quatlib.lua" ) spikes[ e ] = { name = name, state = 'init' } end local minFrame = math.huge local maxFrame = 0 local controlEnt = nil function spikes_main( e ) local spike = spikes[ e ] if spike == nil then return end local frame = GetAnimationFrame( e ) --PromptLocal( e, spike.name .. ", " .. frame ) if controlEnt == nil then controlEnt = e --elseif -- controlEnt == e then -- if frame > maxFrame then -- maxFrame = frame -- elseif -- frame < minFrame then -- minFrame = frame -- end -- Prompt( minFrame .. ", " .. maxFrame ) end if spike.state == 'init' then SetAnimationSpeed( e, 0.3 + math.random() ) spike.obj = g_Entity[ e ].obj local x, y, z, xA, yA, zA = GetObjectPosAng( spike.obj ) spike.pos = { x = x, y = y, z = z } local baseRotQ = Q.FromEuler( 0, rad( spikeVars.baseAng ), 0 ) spike.quat = Q.Mul( Q.FromEuler( rad( xA ), rad( yA ), rad( zA ) ), baseRotQ ) spike.state = 'ready' elseif spike.state == 'ready' and U.PlayerCloserThanPos( spike.pos.x, spike.pos.y, spike.pos.z, 200 ) then local angle = ( frame - spikeVars.framestart ) * ( -360 / ( spikeVars.frameend - spikeVars.framestart ) ) --if controlEnt == e then PromptLocal( e, angle ) end local quat = Q.Mul( spike.quat, Q.FromEuler( 0, rad( angle ), 0 ) ) local xa, ya, za = Q.ToEuler( quat ) local xo, yo, zo = U.Rotate3D( 0, 20, spikeVars.spikelen, xa, ya, za ) if U.PlayerCloserThanPos( spike.pos.x + xo, spike.pos.y + yo, spike.pos.z + zo, 50 ) then HurtPlayer( e, hurtAmount ) end xo, yo, zo = U.Rotate3D( 0, 60, spikeVars.spikelen, xa, ya, za ) if U.PlayerCloserThanPos( spike.pos.x + xo, spike.pos.y + yo, spike.pos.z + zo, 50 ) then HurtPlayer( e, hurtAmount ) end end end