-- Only the authoritative raycast may select the target. No client-supplied ID. return { state_schema_version=1, initialize=function() return {type="integer",value=0} end, migrate=function(_,state) return state end, tick=function(frame,state) for eventIndex,event in ipairs(frame.events) do if event.name=="package_skill_invoked" and event.fields.skill_id=="breach-wall" then local target=event.fields.target_id if target then for index=0,frame.entity_count-1 do if pajama.entity_id(frame,index)==target then local flags=pajama.entity_flags(frame,index) if bit32.band(flags,pajama.flags.damageable)~=0 and bit32.band(flags,pajama.flags.player+pajama.flags.npc)==0 then return {{kind="apply_damage",source_id=event.source_id,target_id=target,amount=60}}, {type="integer",value=state.value+1},{{event_index=eventIndex}} end end end end end end return {},state end, }