首页
课程中心
LUA实例应用
玩家事件(二)
玩家事件(二)
小燕 更新时间: 2022-08-25 11:18:25

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)
课程目录
共50节
1 事件系统
2 世界事件
3 游戏逻辑事件
4 玩家事件(一)
5 玩家事件(二)
6 玩家事件(三)
7 玩家事件(四)
8 生物事件
9 方块与道具事件
10 世界管理(一)
11 世界管理(三)
12 世界管理(二)
13 方块管理(一)
14 方块管理(二)
15 Actor管理(一)
16 Actor管理(二)
17 Actor管理(三)
18 玩家管理(一)
19 玩家管理(二)
20 生物管理
21 区域管理(一)
22 区域管理(二)
23 区域管理(三)
24 联机管理
25 背包管理
26 文字板管理
27 容器管理
28 自定义UI管理(一)
29 自定义UI管理(二)
30 自定义UI管理(三)
31 自定义UI应用(一)
32 自定义UI应用(二)
33 自定义UI应用(三)
34 自定义UI应用(四)
35 考试系统
36 购物商城(一)
37 购物商城(二)
38 计算器
39 打击类音游
40 弹球游戏
41 追逐游戏
42 空战游戏(一)
43 空战游戏(二)
44 空战游戏(三)
45 颜色跳跳
46 炮台挑战
47 炸弹游戏
48 推箱子
49 心跳水立方
50 塔防游戏
站点有内容要更新是否更新。
更新
忽略