玩家事件(二)
LUA实例应用:玩家事件(二)
本课将会学习玩家事件的相关知识,实现玩家的被击增益和反伤功能。在玩家血量较低时,会进行预警,并使玩家获得护盾,快速回血。另外,玩家每次攻击会永久提高攻击力,并使怪物进入眩晕状态
视频时间节点:
- 15:37 被击增益
- 24:57 属性预警与提示
- 32:19 点击事件
老师介绍:
怪物大乱斗
buff_list1 = {
-- 有益buff
-- 缓慢生命恢复,疾跑,跳高高,强力击退,击退抵抗,夜视,强力攻击,强力射击,
-- 强力爆炸,魔物猎手,人类猎手,近战防御,远程防御,爆炸防御,燃烧抗性,
-- 水下呼吸,快速生命恢复,近战无敌,远程无敌,爆炸防御无敌,继续探险
3, 4, 6, 12, 13, 16, 17, 18, 19, 23, 25, 26, 27, 28, 29, 37, 50, 206, 207, 208, 999
}
buff_list2 = {
-- 有害buff
-- 迟缓,着火,中毒,食物中毒,蜂毒,冰冻,禁锢,混乱,眩晕,减速
8, 33, 34, 36, 44, 45, 46, 201, 230, 1000
}
-- 游戏开始时运行
local function Game_Start()
-- 设置怪物数量
local monster_num = 100
-- 创建地图区域
local result, areaid = Area:createAreaRectByRange({x=0,y=7,z=0},{x=15,y=7,z=15})
if(result == 1001)
then
Chat:sendSystemMsg("创建地图区域失败")
end
-- 随机位置生成怪物
for i=1,monster_num
do
local result, pos = Area:getRandomPos(areaid)
if(result == 1001)
then
Chat:sendSystemMsg("获取随机位置失败")
end
-- 生成野萌宝
local result,objids=World:spawnCreature(pos.x,pos.y,pos.z,3102,1)
if(result == 1001)
then
Chat:sendSystemMsg("生成生物失败")
end
end
end
-- 玩家受到伤害时运行
local function Player_BeHurt(event)
-- 给玩家附加有益状态
Actor:addBuff(event.eventobjid, buff_list1[math.random(1,#buff_list1)], 1, math.abs(event.hurtlv)*20)
end
-- 生物造成对方伤害时运行
local function Actor_Damage(event)
if(event.toobjid == 893344914)
then
-- 反伤
result =Actor:playerHurt(event.toobjid, event.eventobjid, math.abs(event.hurtlv), HURTTYPE.ANTIINJURY)
-- 攻击玩家的怪物获得有害状态
Actor:addBuff(event.eventobjid, buff_list2[math.random(1,#buff_list2)], 1, math.abs(event.hurtlv)*20)
end
end
-- 玩家属性变化时运行
local function Player_ChangeAttr(event)
if(event.playerattr == PLAYERATTR.CUR_HP)
then
-- 获取玩家当前生命值
local result,cur_hp=Player:getAttr(event.eventobjid, PLAYERATTR.CUR_HP)
if(result == 1001)
then
Chat:sendSystemMsg("获取玩家当前生命值失败")
end
-- 获取玩家最大生命值
local result,max_hp=Player:getAttr(event.eventobjid, CREATUREATTR.MAX_HP)
if(result == 1001)
then
Chat:sendSystemMsg("获取玩家最大生命值失败")
end
if(cur_hp / max_hp < 0.3)
then
Player:notifyGameInfo2Self(event.eventobjid, "注意:生命值低于30%")
-- 获得近战无敌状态
Actor:addBuff(event.eventobjid, 206, 1, 100)
-- 获得快速回血状态
Actor:addBuff(event.eventobjid, 50, 1, 100)
end
end
end
-- 注册游戏开始监听器
ScriptSupportEvent:registerEvent([=[Game.Start]=], Game_Start)
-- 注册玩家受到伤害监听器
ScriptSupportEvent:registerEvent([=[Player.BeHurt]=], Player_BeHurt)
-- 注册生物造成对方伤害监听器
ScriptSupportEvent:registerEvent([=[Actor.Damage]=], Actor_Damage)
-- 注册玩家属性变化监听器
ScriptSupportEvent:registerEvent([=[Player.ChangeAttr]=], Player_ChangeAttr)