|
发表于 2015-6-8 21:51:43
|
显示全部楼层
本帖最后由 卡特铁角 于 2015-6-8 21:55 编辑
--投掷烟雾弹(突击手)
------------------------------------------global----------------------------------
local _G = _G
------------------------------------------require---------------------------------
local luacom = require("mapdata.lua.common.luacom")
------------------------------------------module----------------------------------
module("mapdata.lua.skill.skill31")
-----------------------------------------无效值约定-------------------------------
local INVALID_POSITION = -0x7fffffff
local INVALID_TIME = 0
local INVALID_ID = 0
-----------------------------------------施放失败类型-----------------------------
local CAST_FAIL_INTERRUPT = 1 --主动打断
local CAST_FAIL_DISTANCE = 2 --距离
local CAST_FAIL_DIR = 3 --方向
local CAST_FAIL_COST = 4 --所需开销不足
local CAST_FAIL_SRC_REL = 5 --技能发起人关系匹配
local CAST_FAIL_TAR_NIL = 6 --技能需要一个目标
local CAST_FAIL_AREA = 7 --不能在该区域释放此技能
local CAST_FAIL_SILENCE = 8 --被沉默
local CAST_FAIL_CD = 9 --冷却
local CAST_FAIL_INVALID = 10 --无效技能
local CAST_FAIL_WRONG_WEAPON = 11 --武器不匹配
local CAST_FAIL_OUT_OF_AMMO = 12 --弹药耗尽
local CAST_FAIL_OUT_OF_ITEM = 13 --缺少道具
local CAST_FAIL_OUT_OF_SP = 14 --SP不足
local CAST_FAIL_OUT_OF_HP = 15 --HP不足
local CAST_FAIL_OUT_OF_FOOD = 16 --FOOD不足
local CAST_FAIL_WRONG_ENVIROMENT = 17 --不能在当前环境施放
local CAST_FAIL_WRONG_TARGET = 18 --不能对该目标施放
local CAST_FAIL_OUT_OF_RANGE = 19 --超出射程
local CAST_FAIL_ANOTHER_SKILL_CASTING = 20 --正在施放其它技能
local CAST_FAIL_NOT_COOL_DOWN = 21 --技能还未冷却
local CAST_FAIL_OUT_OF_MONEY = 22 --金钱不足
local CAST_FAIL_OUT_OF_FUEL = 23 --燃料不足
local CAST_FAIL_OUT_OF_ENDURE = 24 --机体耐久不足
local CAST_FAIL_CAN_NOT_MOVE = 25 --不能在移动中施放
local CAST_FAIL_OUT_OF_ENERGY = 26 --机体能量不足
local SKILL_WRONG_WEAPONTYPE = 29 --武器类型不匹配
local CAST_FAIL_NO_SKILL = 30 --没有(学会)该技能
local CAST_FAIL_CASTER_DEAD = 31 --施放者已死亡
-------------------------------宏定义---------------------------------------------
local PI = 3.1415
local DOUBLE_PI = 6.283
local ANGLE_TO_RADIAN = 3.1415/180
-------------------------------code-----------------------------------------------
-----------------------------------事件处理函数数组------------------------------------
local eventProcessor = {}
eventProcessor[luacom.SKILL_BULLET_IMPACT_TARGET] = function(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
local skillID = arg1
local casterID = arg2
local impact_x = arg4
local impact_y = arg5
local impact_z = arg6
local itemID = arg8
local npcTypeID
if(itemID == 299) then
npcTypeID = 1002
end
local mapID,roomID = luacom.GetCharacterMap(casterID)
local npcInstanceID = luacom.CreateNpc(npcTypeID,mapID,roomID,impact_x,impact_y,impact_z)
if(npcInstanceID) then
luacom.SetNpcView(npcInstanceID,0,0)
luacom.SetDelayedEvent(0,1,luacom.NPC_CHARACTER_ENTER_VIEW,npcInstanceID,0,0,0,0,0,0,0)
end
end
eventProcessor[luacom.SKILL_EXPLODE_AFFECT_CHARACTER] = function(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
end
-----------------------------------------事件脚本固定结构------------------------------------------------------
function OnLoad()
local scriptType = luacom.SKILL_SCRIPT
local scriptID = 31
local event_tab = {luacom.SKILL_BULLET_IMPACT_TARGET}
luacom.RegisterEvent(event_tab,scriptType,scriptID,OnEvent)
end
function OnEvent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
eventProcessor[event](arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)
end
OnLoad()
这是好多年前的一段技能脚本。
OnEvent()是每个执行脚本的唯一入口
由脚本总入口中的一个事件分发函数统一调用,事件分发函数则是C调用脚本的唯一入口
luacom.RegisterEvent()用来对当前脚本需要响应的事件进行注册
当脚本总入口中的分发函数接收到某个事件,则根据事件注册表调用注册过这个事件的所有执行脚本 |
|