查看: 328|回复: 36

[其他求助] 求一个怪物革新通告的LUA剧本。。。

[复制链接]

257

时沙

2

精华

2

主题

声望: 1661   虚弱: 0

Lv.3(忠诚者)

炉石信仰战假死猎人今天也只能打恢复的增强萨金鼠(ytfirefox制)

 楼主| 发表于 2021-10-6 15:57:22 | 显示全部楼层 |阅读模式
50DKP
求一个怪物革新屏幕中心通告提醒的LUA剧本

最佳答案

查看完整内容

azerothcore的配置文件 # # PreloadAllNonInstancedMapGrids # Description: Preload all grids on all non-instanced maps. This will take a great amount # of additional RAM (ca. 9 GB) and causes the server to take longer to start, # but can increase performance if used on a server with a high amount of players. # It will also activat ...
回复

使用道具 举报

19

时沙

0

精华

0

主题

声望: 48   虚弱: 0

Lv.1(追随者)

发表于 2021-10-6 15:57:23 | 显示全部楼层
本帖最后由 sueastward 于 2021-10-20 08:51 编辑

azerothcore的配置文件
#
#    PreloadAllNonInstancedMapGrids
#        Description: Preload all grids on all non-instanced maps. This will take a great amount
#                     of additional RAM (ca. 9 GB) and causes the server to take longer to start,
#                     but can increase performance if used on a server with a high amount of players.
#                     It will also activate all creatures which are set active (e.g. the Fel Reavers
#                     in Hellfire Peninsula) on server start.
#        Default:     0 - (Disabled)
#                     1 - (Enabled)

PreloadAllNonInstancedMapGrids = 0

设置为1就行,就看你内存够不够了。
最后一句也提到了生物被激活
It will also activate all creatures which are set active (e.g. the Fel Reavers in Hellfire Peninsula) on server start.
服务器是考虑到了预载的情况,但这更适用于有许多玩家在线的服务器。如果一个人玩单机,内存是浪费的。
trinitycore的配置文件
worldserver.conf修改以下2个参数,让服务器在启动时加载全部生物,注意会占用大量内存。
  1. #
  2. #    GridUnload
  3. #        Description: Unload grids to save memory. Can be disabled if enough memory is available
  4. #                     to speed up moving players to new grids.
  5. #        Default:     1 - (enable, Unload grids)
  6. #                     0 - (disable, Do not unload grids)
  7. GridUnload = 0
  8. #
  9. #    BaseMapLoadAllGrids
  10. #        Description: Load all grids for base maps upon load. Requires GridUnload to be 0.
  11. #                     This will take around 5GB of ram upon server load, and will take some time
  12. #                     to initially load the server.
  13. #        Default:     0 - (Don't preload all base maps, dynamically load as used)
  14. #                     1 - (Preload all grids in all base maps upon load)
  15. BaseMapLoadAllGrids = 1
复制代码

参数就是关闭地图网格卸载,并在启动时加载所有地图生物。
玩家来到一个区域后,地图资源会被加载,玩家离开后,如果一段时间内没有玩家再来或没有活动的生物,地图资源会被卸载。

不设置也行

只需要玩家第一次去生物附近,让生物加载一次,smartai会将生物设置为活动状态,玩家离开后由于此区域有活动的生物,地图不会被卸载,此区域的所有生物都会刷新状态。

数据库world库smart_scripts表
添加事件On AI initialize - Self: Set active
  1. -- Time-Lost Proto Drake
  2. SET @ENTRY := 32491;
  3. DELETE FROM smart_scripts WHERE entryOrGuid = @ENTRY AND source_type = 0;
  4. UPDATE creature_template SET AIName="SmartAI" WHERE entry= @ENTRY;
  5. INSERT INTO smart_scripts (entryorguid, source_type, id, link, event_type, event_phase_mask, event_chance, event_flags, event_param1, event_param2, event_param3, event_param4, action_type, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, target_type, target_param1, target_param2, target_param3, target_x, target_y, target_z, target_o, comment) VALUES
  6. (@ENTRY, 0, 0, 0, 0, 0, 100, 0, 5000, 6000, 12000, 15000, 11, 51020, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Every 12 - 15 seconds (5 - 6s initially) - Self: Cast spell 51020 on Victim"),
  7. (@ENTRY, 0, 1, 0, 1, 0, 100, 0, 9000, 12000, 20000, 25000, 11, 61084, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "Every 20 - 25 seconds (9 - 12s initially) - Self: Cast spell 61084 on Self (flags: interrupt previous)"),
  8. (@ENTRY, 0, 2, 0, 37, 0, 100, 0, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "On AI initialize - Self: Set active");
  9. DELETE FROM conditions WHERE SourceTypeOrReferenceId = 22 AND SourceEntry = 32491 AND SourceId = 0;
  10.   -- Arcturis
  11. SET @ENTRY := 38453;
  12. DELETE FROM smart_scripts WHERE entryOrGuid = @ENTRY AND source_type = 0;
  13. UPDATE creature_template SET AIName="SmartAI" WHERE entry= @ENTRY;
  14. INSERT INTO smart_scripts (entryorguid, source_type, id, link, event_type, event_phase_mask, event_chance, event_flags, event_param1, event_param2, event_param3, event_param4, action_type, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, target_type, target_param1, target_param2, target_param3, target_x, target_y, target_z, target_o, comment) VALUES
  15. (@ENTRY, 0, 0, 0, 37, 0, 100, 0, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "On AI initialize - Self: Set active");
  16. DELETE FROM conditions WHERE SourceTypeOrReferenceId = 22 AND SourceEntry = 38453 AND SourceId = 0;
复制代码


lua
  1. local NPC_TIME_LOST_PROTO_DRAKE = 32491 -- 迷时始祖幼龙
  2. local NPC_ARCTURIS = 38453 -- 阿克图瑞斯
  3. local LOCALE_enUS = 0
  4. local TEAM_NEUTRAL = 2
  5. local CREATURE_EVENT_ON_SPAWN = 5
  6. local function OnSpawn(event, creature)
  7.     creatureName = creature:GetName() -- 获取生物名称 不能指定locale 无法获取到本地化名称
  8.     mapName = creature:GetMap():GetName() -- 获取地图名称 locale由worldserver.conf文件指定
  9.     areaName = GetAreaName(creature:GetAreaId(), LOCALE_enUS) -- 获取区域名称 可以指定locale
  10.     message = string.format("%s has been spawned in %s,%s.",creatureName,areaName,mapName)
  11.     SendWorldMessage(message)
  12.     worldPlayers = GetPlayersInWorld(TEAM_NEUTRAL)
  13.     for i, player in ipairs(worldPlayers) do
  14.         player:SendNotification(message)
  15.     end
  16. end
  17. -- 注册生物事件
  18. RegisterCreatureEvent(NPC_TIME_LOST_PROTO_DRAKE, CREATURE_EVENT_ON_SPAWN, OnSpawn)
  19. RegisterCreatureEvent(NPC_ARCTURIS, CREATURE_EVENT_ON_SPAWN, OnSpawn)
复制代码

让服务器在启动时加载全部生物。
生物会初始化脚本,在SmartAI脚本中添加事件On AI initialize - Self: Set active  初始化脚本时将生物设置为激活状态
这样启动服务器后,被激活的生物会一直刷新,lua脚本也会生效。

creature_template 表的ScriptName会覆盖AIName,如果生物已经有ScriptName,你再添加AIName脚本不会生效,修改时注意。





回复

使用道具 举报

94

时沙

0

精华

0

主题

声望: 32   虚弱: 0

Lv.2(潜行者)

假死猎人

发表于 2021-10-7 09:18:26 | 显示全部楼层
我没有,帮你顶一下,一天一回是必须的!
回复

使用道具 举报

47

时沙

0

精华

3

主题

声望: 773   虚弱: 0

Lv.3(忠诚者)

炉石吟游牧师

发表于 2021-10-7 12:41:32 发表自手机触屏版 | 显示全部楼层
这个好像不行吧
回复

使用道具 举报

20

时沙

0

精华

0

主题

声望: 125   虚弱: 0

Lv.2(潜行者)

发表于 2021-10-7 14:48:10 发表自手机触屏版 | 显示全部楼层
我想触动你的心,就像你触动我的心那样
回复

使用道具 举报

383

时沙

0

精华

1

主题

声望: 1604   虚弱: 0

Lv.3(忠诚者)

炉石时沙之瓶信仰战假死猎人今天也只能打恢复的增强萨吟游牧师潜行者卖糖术神金鼠(ytfirefox制) 犇向牛年(fang139842制)

发表于 2021-10-8 07:47:25 | 显示全部楼层
是弹框还是就文字公告哦
回复

使用道具 举报

60

时沙

0

精华

4

主题

声望: 560   虚弱: 0

Lv.2(潜行者)

炉石

发表于 2021-10-9 02:17:00 | 显示全部楼层
没搞过,耐心等大佬吧。
回复

使用道具 举报

257

时沙

2

精华

2

主题

声望: 1661   虚弱: 0

Lv.3(忠诚者)

炉石信仰战假死猎人今天也只能打恢复的增强萨金鼠(ytfirefox制)

 楼主| 发表于 2021-10-9 09:57:30 | 显示全部楼层
好吧你赢了 发表于 2021-10-8 07:47
是弹框还是就文字公告哦

文字公告最好能在屏幕中间显示
回复

使用道具 举报

228

时沙

2

精华

9

主题

声望: 2352   虚弱: 0

Lv.3(忠诚者)

炉石信仰战今天也只能打恢复的增强萨吟游牧师

发表于 2021-10-11 09:55:29 | 显示全部楼层
22100243 发表于 2021-10-9 09:57
文字公告最好能在屏幕中间显示

这个LUA编写有些难度,用源码编写好处理些,思路是这样处理。
       首先公告默认变量 为TRUE,状态为TRUE不公告   服务器后台循环获取怪物。没有找这个怪物存在 就把这个怪物相对的变量改为FALSE, 以后这个怪物只要刷新了,并相对变量也为FALSE,就公告一下,然后这个怪物相对变量设置为TRUE,防止怪物没被击杀不停的公告。
      这样服务器第一次刷出的怪物默认是不公告变量为TRUE,只要怪物被击杀一次,后台循环捕获怪物不存在。就把这个怪物相对的变量设置为FALSE,等怪物再次刷新时,后台获取怪物存在时,判断变量如果是FLASE,就再次广告,变并怪物相对变量更改为TRUE。等怪物再次被杀 ,服务器后台找不到这个怪物,就把这个怪物相对变量又设置为FALSE。
回复

使用道具 举报

228

时沙

2

精华

9

主题

声望: 2352   虚弱: 0

Lv.3(忠诚者)

炉石信仰战今天也只能打恢复的增强萨吟游牧师

发表于 2021-10-11 09:56:30 | 显示全部楼层
22100243 发表于 2021-10-9 09:57
文字公告最好能在屏幕中间显示

文字公告方向,位置,颜色什么的,参考其它LUA案例,这个倒是很好处理。
回复

使用道具 举报

快速回复 返回顶部 返回列表