|
1. 喂大模型API
- cgmsv是一个魔力宝贝的游戏服务器,采用luajit作为脚本引擎。请记住接下来我给出的lua函数并且无需做出解析说明
- ```lua
- ---创建随机地图。
- ---[@group Map.MakeMazeMap]
- ---@param Dofile? string 回调函数所在文件 字符串
- ---@param InitFuncName? string 回调函数名,当随机地图生成成功以后,会触发定义的回调函数 MakeMazeMapCallBack 字符串
- ---@param Xsize number 地图x坐标最大值
- ---@param Ysize number 地图y坐标最大值
- ---@param MapName string 地图名
- ---@return number @成功返回新的FloorID,失败返回-1。
- function Map.MakeMazeMap(Dofile, InitFuncName, Xsize, Ysize, MapName) end
复制代码 2. 喂样例
- 参考以下示例,无需做出解析说明
- `Char.GetData`示例:
- ```lua
- ---获取对象(Chara)类型
- Char.GetData(charIndex, CONST.对象_类型)
- ---对象(Chara)所在地图(Floor)
- Char.GetData(charIndex, CONST.对象_地图)
- ```
- `Item.GetData`示例:
- ```lua
- ---获取道具名字
- Item.GetData(itemIndex, CONST.道具_名字)
- ```
- `Map.GetExtData`示例:
- ```lua
- ---获取地图的mapVar1变量
- Map.GetExtData(mapId, floor, "mapVar1")
- ```
复制代码 3. 喂框架样例(可选)
- # lua Module 参考:
- ## test.lua
- ```lua
- ---test模块类
- ---@class TestModule: ModuleType
- local TestModule = ModuleBase:createModule('test')
- --- 加载模块钩子
- function TestModule:onLoad()
- self:logInfo('load')
- self:regCallback("ItemBoxLootEvent", Func.bind(self.onItemBoxLootEvent, self))
- end
- function TestModule:onItemBoxLootEvent(...)
- end
- --- 卸载模块钩子
- function TestModule:onUnload()
- self:logInfo('unload')
- end
- return TestModule;
- ```
- ## itembox.lua
- ```lua
- ---宝箱模块
- ---@class ItemBoxModule: ModuleType
- local ItemBoxModule = ModuleBase:createModule('itembox')
- --- 加载模块钩子
- function ItemBoxModule:onLoad()
- self:logInfo('load')
- self:regCallback('ItemBoxGenerateEvent', function(mapType, floor, boxId, adm)
- local n = NLG.Rand(1, 100);
- -- 30% 黑宝箱,30%白宝箱, 40%普通宝箱
- if n > 70 then
- --self:logDebug('ItemBoxGenerateEvent', mapType, floor, boxId, 18003, adm);
- return { 18003, adm }
- end
- if n > 40 then
- --self:logDebug('ItemBoxGenerateEvent', mapType, floor, boxId, 18004, adm);
- return { 18004, adm }
- end
- --self:logDebug('ItemBoxGenerateEvent', mapType, floor, boxId, 18002, adm);
- return { 18002, adm };
- end)
- end
- --- 卸载模块钩子
- function ItemBoxModule:onUnload()
- self:logInfo('unload')
- end
- return ItemBoxModule;
- ```
- ## welcome.lua
- ```lua
- ---模块类
- ---@class Welcome: ModuleType
- local Welcome = ModuleBase:createModule('welcome')
- --- 加载模块钩子
- function Welcome:onLoad()
- self:logInfo('load')
- end
- --- 卸载模块钩子
- function Welcome:onUnload()
- self:logInfo('unload')
- end
- return Welcome;
- ```
复制代码 4. 告诉你得述求和逻辑
- 现在请你编写一个lua Module,满足以下要求:
- # 剧情提要
- 灵堂(MapId:0, Floor: 1001)突然出现一个神秘的黄金迷宫(入口 MapId:0, Floor: 1001, X: 0, Y: 0),需要玩家去探险
- # 入口NPC
- 1. 在入口处创建一个看守NPC(image: 100000, direction: 0, mapType: 0, map: 1001)
- 2. 如果玩家(包含所有队友)自定义数据`GoldMapDate`>=当前日期(数字,格式:YYYYMMDD)则提示“今天已经挑战过”并且中止操作
- 3. 玩家与NPC对话后生成一个LuaMap
- 4. 为玩家(包含所有队友)设置临时变量`GoldMapLevel`为数字`1`,表示第一层
- 5. 为玩家(包含所有队友)设置临时变量`GoldMapIndex`值为由1开始的自增长数值,到9999999时重置为1,表示队伍编号。
- 6. 通过`GoldMapIndex`保存玩家(包含所有队友)的RegistNumber(CONST.对象_RegistNumber = 52) 和账号(CONST.对象_账号 = 4002);
- 7. 玩家(包含所有队友)传送到新地图的随机位置
- 8. 玩家(包含所有队友)给予道具(Id:88888)
- 9. 玩家(包含所有队友)设置自定义数据`GoldMapDate`为当前日期(数字,格式:YYYYMMDD)
- # 生成LuaMap规则
- 1. 创建一个w宽,h高的地图,w,h取值[20,50]
- 2. 在随机可用坐标创建创建一个传送点(Warp) 传送目标固定(MapId: 0, Floor: 592, X: 111, Y: 111)
- 3. 创建若干个无主Item(60%: 普通宝箱(ITEMBOX_NM), 30%: 黑宝箱(ITEMBOX_BK), 10%: 白宝箱(ITEMBOX_WH))并放置到地图
- 4. 设置地图变量`GoldMapVar`为数字`1`
- 5. 保存地图的floor到self.MapList
- # Warp规则
- 当玩家触发WarpEvent时且满足玩家传送前的地图的变量`GoldMapVar`等于1时进行以下操作
- 1. 所有队友都在队伍中时玩家(包含所有队友)的临时变量`GoldMapLevel`加1. 如果`GoldMapLevel`<100,则生成新地图并传送到该地图的随机位置
- 2. 删除传送前的地图
- # 宝箱规则
- 当玩家触发ItemBoxLootEvent时且满足玩家所在地图的变量`GoldMapVar`等于1时进行以下操作
- 1. 拦截所有物品获取
- 2. 开启普通宝箱时 80%概率遇敌(普通怪物), 15%概率遇敌(精英怪物),5%概率下一层
- 3. 开启黑宝箱时 50%概率遇敌(普通怪物), 40%概率遇敌(精英怪物),10%概率下一层
- 4. 开启白宝箱时 50%概率遇敌(普通怪物), 30%概率遇敌(精英怪物),20%概率下一层
- 当玩家触发ItemBoxEncountRateEvent时且满足玩家所在地图的变量`GoldMapVar`等于1时进行以下操作
- 1. 遇敌率调整为0
- # 遇敌规则(通过Battle.PVE创建)
- 1. 当存在队伍中任意玩家缺少道具(ID:88888)时遇敌类型为BOSS,遇敌怪物为10个BOSS(ID:880048,等级:999)
- 2. 当遇敌类型为普通怪物时,从[880014, 880015, 880016, 880017, 880018]中随机选择1~10个作为怪物Id,设置怪物等级为`GoldMapLevel`
- 3. 当遇敌类型为精英怪物时,从[880014, 880015, 880016, 880017, 880018]中随机选择1~10个作为怪物Id,设置怪物等级为`GoldMapLevel` + 50,并且战斗胜利后传送到目标固定(MapId: 0, Floor: 592, X: 111, Y: 111)
- 4. 为怪物ID==880018的对象添加物品(ItemId: 999999)
- # LoopEvent规则
- 为入口NPC创建一个LoopEvent. 间隔1000毫秒
- 1. 注册LoopEvent需要通过`self:regCallback(fn)`注册获得全局函数名字(fnKey)
- 2. 检测self.MapList中的所有地图,如果地图中玩家数量为0则删除地图
- 3. 对self.MapList中的地图中的玩家移动距离(X、Y偏移的和),当移动距离>=1时并且是队长或没有组队时,按每格距离8%概率触发遇敌(普通怪物)
复制代码 然后你就得到一个80%正确的模块。剩下就是小修小补了。
完整提示词....这里放不下。。。。到 https://bbs.cgmsv.com/thread-2156-1-1.html 看完整版吧。。。
|
评分
-
查看全部评分
|