本帖最后由 mtz 于 2023-1-19 07:53 PM 编辑
自我介绍:
刚接触北侠的新人一个,游戏中的人物名字:法盲,暂入日月神教,1级。(说不定哪天suicide -f,重新开始。)
动手起因:
刚入北侠,被各种信息刷屏,眼花缭乱。怎么样把各种信息分类显示呢?开始研究前辈的示例,实现了fullme和分屏后又冒出了新想法;
- 第二个想法:既然做了为什么不做的好看一点呢?开始画背景图;
- 第三个想法:界面肯定要能显示状态,确定了四个状态:气血、精神、食物、饮水;
- 第四个想法:显示状态,肯定要弄个血条、蓝球的动态显示;
- 第五个想法:好像少了个北侠的特征,于是就有了这个0.1版的功能界面。
- 第六个想法:...........
界面简介:
利用下部四分之一空间模拟出一个游戏的功能界面,现在具有四种状态的显示、聊天和玩家动作的分类显示。未来可能持续制作其它功能页面和功能。
V0.1版实现的功能:
- 聊天信息(闲聊、QQ聊、谣言)和游戏玩家的移动(过来、离开等)信息的分类、分屏显示,中间显示聊天相关的信息,左右两个窗口显示其它信息,左侧暂未使用,右侧显示游戏中玩家的移动信息;
- 人物状态的显示,气血(左边红球)、精神(右侧蓝球)、食物(中间橙红条)、饮水(中间淡蓝条);
- 状态更新,频率5秒(可自定义),1%精度显示;
- 自定义按键开户或关闭状态监控;
- 界面跟随窗口调整大小,按游戏主窗口1920*881的分辨率制作,高度不建议缩小,宽度建议不低于1600,可用lua getMainWindowSize()查询游戏主窗口的数据。
注意:12楼补充了使用GMCP更新四种状态的方法,使用hpbrief的更新方法可以弃用了。其它功能、方法不变。
界面效果图:
界面背景图:
侠客行:
实现的思路,以及相关脚本、触发、按钮:
思路:
- 创建Geyser.Gauge,将四种状态的计算为百分比,Geyser.Gauge根据百分比显示适当的进度条
- 创建Label,作为背景层只显示背景图片(可以用)
- 创建MiniConsole,用以显示分类的信息
- 创建多行匹配触发,收集相关状态数据,并设定Geyser.Gauge值
- 创建触发,分类聊天信息
- 创建触发,分类游戏人物过来离去相关信息
相关的脚本:
1、四个状态条
- --气血红球状态条
- --orientation
- --"horizontal" is the default and creates a horizontal gauge that fills from left to right.
- --"vertical" creates a gauge that fills from bottom to top.
- --"goofy" is horizontal but fills right to left.
- --"batty" is vertical but fills from top to bottom.
- --气血状态条设置参数------------------------------------------------
- pkuxkx.bl_hpbar_nm = "nm_hpbar" --状态条名字
- pkuxkx.bl_hpbar_x = "25%" --左边距离
- pkuxkx.bl_hpbar_y = "-15%" --顶边距离
- pkuxkx.bl_hpbar_width = "130px" --宽
- pkuxkx.bl_hpbar_height = "125px" --高
- pkuxkx.bl_hpbar_orientation = "vertical" --设置状态1到100的方向,vertical从下往上
- --创建气血状态条------------------------------------------------
- function pkuxkx.MiniConsole_hpbar(hpnow)
- if(pkuxkx.bl_hpbar) then
- print("HP红球已存在!")
- else
- pkuxkx.bl_hpbar = Geyser.Gauge:new({
- name=pkuxkx.bl_hpbar_nm,
- x=pkuxkx.bl_hpbar_x,
- y=pkuxkx.bl_hpbar_y,
- width=pkuxkx.bl_hpbar_width,
- height=pkuxkx.bl_hpbar_height,
- orientation=pkuxkx.bl_hpbar_orientation,
- })
- pkuxkx.bl_hpbar.front:setStyleSheet([[
- background-color:#830708;
- border-top: 1px black solid;
- border-left: 1px black solid;
- border-bottom: 1px black solid;
- border-radius: 7;
- padding: 3px;
- ]])
- pkuxkx.bl_hpbar.back:setStyleSheet([[
- background-color: #000;
- border-width: 1px;
- border-color: black;
- border-style: solid;
- border-radius: 7;
- padding: 3px;]])
- pkuxkx.bl_hpbar:setValue(50,100)
- end
- end
- --设置气血状态条------------------------------------------------
- function pkuxkx.MiniConsole_sethpbar(hp_now,hp_max)
- local hpzs,hpxs = math.modf(tonumber(tonumber(hp_now)/tonumber(hp_max)*100))
- if(hpzs <= 100) then
- pkuxkx.bl_hpbar:setValue(hpzs,100)
- else
- pkuxkx.bl_hpbar:setValue(100,100)
- end
- end
- --精神蓝球状态条
- --orientation
- --"horizontal" is the default and creates a horizontal gauge that fills from left to right.
- --"vertical" creates a gauge that fills from bottom to top.
- --"goofy" is horizontal but fills right to left.
- --"batty" is vertical but fills from top to bottom.
- --精神状态条设置参数------------------------------------------------
- pkuxkx.bl_jsbar_nm = "nm_jsbar" --状态条名字
- pkuxkx.bl_jsbar_x = "68%" --左边距离
- pkuxkx.bl_jsbar_y = "-15%" --顶边
- pkuxkx.bl_jsbar_width = "130px" --宽
- pkuxkx.bl_jsbar_height = "125px" --高
- pkuxkx.bl_jsbar_orientation = "vertical" --设置状态1到100的方向,vertical从下往上
- --创建精神状态条------------------------------------------------
- function pkuxkx.MiniConsole_jsbar()
- if(pkuxkx.bl_jsbar) then
- print("HP红球已存在!")
- else
- pkuxkx.bl_jsbar = Geyser.Gauge:new({
- name=pkuxkx.bl_jsbar_nm,
- x=pkuxkx.bl_jsbar_x,
- y=pkuxkx.bl_jsbar_y,
- width=pkuxkx.bl_jsbar_width,
- height=pkuxkx.bl_jsbar_height,
- orientation=pkuxkx.bl_jsbar_orientation,
- })
- pkuxkx.bl_jsbar.front:setStyleSheet( --设置状态条前面的变化条
- [[background-color:#0000cd;
- border-top: 1px black solid;
- border-left: 1px black solid;
- border-bottom: 1px black solid;
- border-radius: 7;
- padding: 3px;
- ]])
- pkuxkx.bl_jsbar.back:setStyleSheet( --设置状态条底面的变化条
- [[background-color: #000;
- border-width: 1px;
- border-color: black;
- border-style: solid;
- border-radius: 7;
- padding: 3px;]])
- pkuxkx.bl_jsbar:setValue(50,100)
- end
- end
- --设置精神状态条------------------------------------------------
- function pkuxkx.MiniConsole_setjsbar(js_now,js_max)
- local jszs,jsxs = math.modf(tonumber(tonumber(js_now)/tonumber(js_max)*100))
- if(jszs <= 100) then
- pkuxkx.bl_jsbar:setValue(jszs,100)
- else
- pkuxkx.bl_jsbar:setValue(100,100)
- end
- end
- --食物、饮水状态条
- --orientation
- --"horizontal" is the default and creates a horizontal gauge that fills from left to right.
- --"vertical" creates a gauge that fills from bottom to top.
- --"goofy" is horizontal but fills right to left.
- --"batty" is vertical but fills from top to bottom.
- --食物状态条设置参数------------------------------------------------
- pkuxkx.bl_foodbar_nm = "nm_foodbar" --状态条名字
- pkuxkx.bl_foodbar_x = "37%" --左边距离
- pkuxkx.bl_foodbar_y = "-21%" --顶边
- pkuxkx.bl_foodbar_width = "13%" --宽
- pkuxkx.bl_foodbar_height = "25px" --高
- pkuxkx.bl_foodbar_orientation = "horizontal" --设置状态1到100的方向,horizontal从左往右
- --创建食物状态条------------------------------------------------
- function pkuxkx.MiniConsole_foodbar()
- if(pkuxkx.bl_foodbar) then
- print("食物条已存在!")
- else
- pkuxkx.bl_foodbar = Geyser.Gauge:new({
- name=pkuxkx.bl_foodbar_nm,
- x=pkuxkx.bl_foodbar_x,
- y=pkuxkx.bl_foodbar_y,
- width=pkuxkx.bl_foodbar_width,
- height=pkuxkx.bl_foodbar_height,
- orientation=pkuxkx.bl_foodbar_orientation,
- })
- pkuxkx.bl_foodbar.front:setStyleSheet( --设置状态条前面的变化条
- [[background-color:#ff4500;
- border-top: 1px black solid;
- border-left: 1px black solid;
- border-bottom: 1px black solid;
- border-radius: 7;
- padding: 3px;
- ]])
- pkuxkx.bl_foodbar.back:setStyleSheet( --设置状态条底面的变化条
- [[background-color: #000;
- border-width: 1px;
- border-color: black;
- border-style: solid;
- border-radius: 7;
- padding: 3px;]])
- pkuxkx.bl_foodbar:setValue(50,100) --设置一个初始值,可删除
- end
- end
- --设置食物状态条数值------------------------------------------------
- function pkuxkx.MiniConsole_setfoodbar(food_now)
- local foodzs,foodxs = math.modf(tonumber(tonumber(food_now)/300*100)) --计算当前食物数值对应的百分比,foodzs保存整数部分
- if(foodzs <= 100) then --防止百分值大于100时,状态条过长
- pkuxkx.bl_foodbar:setValue(foodzs,100) --设置数值
- else
- pkuxkx.bl_foodbar:setValue(100,100) --设置数值
- end
- end
- --饮水状态条------------------------------------------------
- pkuxkx.bl_waterbar_nm = "nm_waterbar" --状态条名字
- pkuxkx.bl_waterbar_x = "50%" --左边
- pkuxkx.bl_waterbar_y = "-21%" --顶边
- pkuxkx.bl_waterbar_width = "13%" --宽
- pkuxkx.bl_waterbar_height = "25px" --高
- pkuxkx.bl_waterbar_orientation = "goofy" --设置状态1到100的方向,goofy从左往右
- --创建饮水状态条------------------------------------------------
- function pkuxkx.MiniConsole_waterbar()
- if(pkuxkx.bl_waterbar) then
- print("饮水条已存在!")
- else
- pkuxkx.bl_waterbar = Geyser.Gauge:new({
- name=pkuxkx.bl_waterbar_nm,
- x=pkuxkx.bl_waterbar_x,
- y=pkuxkx.bl_waterbar_y,
- width=pkuxkx.bl_waterbar_width,
- height=pkuxkx.bl_waterbar_height,
- orientation=pkuxkx.bl_waterbar_orientation,
- })
- pkuxkx.bl_waterbar.front:setStyleSheet([[
- background-color:#1e90ff;
- border-top: 1px black solid;
- border-left: 1px black solid;
- border-bottom: 1px black solid;
- border-radius: 7;
- padding: 3px;
- ]])
- pkuxkx.bl_waterbar.back:setStyleSheet([[
- background-color: #000;
- border-width: 1px;
- border-color: black;
- border-style: solid;
- border-radius: 7;
- padding: 3px;]])
- pkuxkx.bl_waterbar:setValue(50,100)
- end
- end
- --设置饮水状态条------------------------------------------------
- function pkuxkx.MiniConsole_setwaterbar(water_now)
- local waterzs,waterxs = math.modf(tonumber(tonumber(water_now)/300*100))
- if(waterzs <= 100) then
- pkuxkx.bl_waterbar:setValue(waterzs,100)
- else
- pkuxkx.bl_waterbar:setValue(100,100)
- end
- end
复制代码
2、游戏玩家信息分类
- --创建显示玩家来去信息的MiniConsole
- --相关配置参数--------------------------------------------------------
- pkuxkx.bl_lqwd_nm = "nm_lqwd" --显示来去信息MiniConsole的名字
- pkuxkx.bl_lqwd_x = "-17.7%" --左边位置
- pkuxkx.bl_lqwd_y = "24%" --顶边位置
- pkuxkx.bl_lqwd_width = "16.1%" --宽
- pkuxkx.bl_lqwd_height = "70%" --高
- pkuxkx.bl_lqwd_fontsize = 12 --字体大小
- pkuxkx.bl_lqwd_color = "black" --背景颜色
- pkuxkx.bl_lqwd_scrollbar = false --是否显示滚动条
- pkuxkx.bl_lqwd_wrap = 15 --换行的字符数
- --创建显示窗口--------------------------------------------------------
- function pkuxkx.MiniConsole_laiqu()
- if(pkuxkx.bl_lqwd) then --判断MiniConsole是否存在
- selectCurrentLine() --选择当前行的内容
- copy() --拷贝当前行的内容
- pkuxkx.bl_lqwd:appendBuffer() --将当前复制的内容追加到窗口中
- else
- pkuxkx.bl_lqwd = Geyser.MiniConsole:new({ --创建MiniConsole窗口,配置如上
- name = pkuxkx.bl_lqwd_nm,
- x = pkuxkx.bl_lqwd_x,
- y = pkuxkx.bl_lqwd_y,
- width = pkuxkx.bl_lqwd_width,
- height = pkuxkx.bl_lqwd_height,
- fontSize = pkuxkx.bl_lqwd_fontsize,
- color = pkuxkx.bl_lqwd_color,
- scrollBar = pkuxkx.bl_lqwd_scrollbar,
- },pkuxkx.bl_dbbjwd)
- setWindowWrap(pkuxkx.bl_lqwd_nm,pkuxkx.bl_lqwd_wrap) --设置窗口换行的字符数
- selectCurrentLine() --选择当前行的内容
- copy() --拷贝当前行的内容
- pkuxkx.bl_lqwd:appendBuffer() --将当前复制的内容追加到窗口bl_lqwd中
- end
- deleteLine() --从主窗口中删除当前行
- end
复制代码
3、聊天信息分类
- --聊天MiniConsole
- --相关配置参数--------------------------------------------------------
- pkuxkx.bl_ltwd_nm = "nm_ltwd" --显示来去信息MiniConsole的名字
- pkuxkx.bl_ltwd_x = "32.5%" --左边位置
- pkuxkx.bl_ltwd_y = "32%" --顶边位置
- pkuxkx.bl_ltwd_width = "35%" --宽
- pkuxkx.bl_ltwd_height = "56.2%" --高
- pkuxkx.bl_ltwd_fontsize = 12 --字体大小
- pkuxkx.bl_ltwd_color = "black" --背景颜色
- pkuxkx.bl_ltwd_scrollbar = false --是否显示滚动条
- pkuxkx.bl_ltwd_wrap = 44 --换行的字符数
- --创建显示窗口--------------------------------------------------------
- function pkuxkx.MiniConsole_liaotian()
- if(pkuxkx.bl_ltwd) then --判断聊天窗口是否存在
- selectCurrentLine() --选择当前行
- copy() --复制当前行
- pkuxkx.bl_ltwd:appendBuffer() --将当前复制的内容追加到窗口bl_ltwd中
- else
- --local wi,he = getMainWindowSize()
- pkuxkx.bl_ltwd = Geyser.MiniConsole:new({ --创建聊天窗口,并放置于pkuxkx.bl_dbbjwd中,用于显示相关文本
- name = pkuxkx.bl_ltwd_nm,
- x = pkuxkx.bl_ltwd_x,
- y = pkuxkx.bl_ltwd_y,
- width = pkuxkx.bl_ltwd_width,
- height = pkuxkx.bl_ltwd_height,
- fontSize = pkuxkx.bl_ltwd_fontsize,
- color = pkuxkx.bl_ltwd_color,
- scrollBar = pkuxkx.bl_ltwd_scrollbar,
- },pkuxkx.bl_dbbjwd)
- setWindowWrap(pkuxkx.bl_ltwd_nm,pkuxkx.bl_ltwd_wrap) --设置换行字符数
- selectCurrentLine() --选择当前行的内容
- copy() --复制当前行的内容
- pkuxkx.bl_ltwd:appendBuffer() --将当前复制的内容追加到窗口中
- end
- deleteLine() --删除匹配成功的信息(不在主窗口显示)
- end
复制代码 4、创建背景Label
注意:请使用命令“getMudletHomeDir()”获取路径,在其中新建“pnp”文件夹,并请素材将bj.pnp放入php文件夹中。
- --底边背景Label
- ----------------------------------------------------------
- pkuxkx.bl_dbbjwd_nm = "nm_ltbjwd" --显示底边背景MiniConsole的名字
- pkuxkx.bl_dbbjwd_x = "0%" --左边位置
- pkuxkx.bl_dbbjwd_y = "-25%" --顶边位置
- pkuxkx.bl_dbbjwd_width = "100%" --宽
- pkuxkx.bl_dbbjwd_height = "26%" --高
- pkuxkx.bl_dbbjwd_color = "black" --背景颜色
- pkuxkx.bl_dbbjwd_scrollbar = false --是否显示滚动条
- ----------------------------------------------------------
- function pkuxkx.Label_dbbjwd()
- if(pkuxkx.bl_dbbjwd) then --判断聊天窗口是否存在
- print("底边背景(bl_dbbjwd)MiniConsole已存在!")
- else
-
- pkuxkx.bl_dbbjwd = Geyser.Label:new({ --创建背景窗口,只用于显示背景图片
- neme = pkuxkx.bl_dbbjwd_nm,
- x = pkuxkx.bl_dbbjwd_x,
- y = pkuxkx.bl_dbbjwd_y,
- width = pkuxkx.bl_dbbjwd_width,
- height = pkuxkx.bl_dbbjwd_height,
- --fontSize = pkuxkx.bl_dbbjwd_fontsize,
- fgcolor = pkuxkx.bl_dbbjwd_color,
- --scrollBar = pkuxkx.bl_dbbjwd_scrollbar,
- })
- pkuxkx.bl_dbbjwd:setColor(0,255,0,1)
- pkuxkx.bl_dbbjwd:setStyleSheet([[border-image: url(]] .. getMudletHomeDir() .. [[/pnp/bj.png);]]) --设置背景图片
- print("底边背景(bl_dbbjwd)MiniConsole已存在!")
- end
- end
复制代码
相关的触发:
1、匹配hpbrief信息的
1.1表达式
- ^#(.+),(.+),(.+),(.+),(.+),(.+)$
复制代码 1.2配置截图
注意:截图有误,不重传图了,请将4修改为2。请将4修改为2。请将4修改为2。
1.3触发器中的脚本
- --[[
- --hpbrief
- #经验,潜能,最大内力,当前内力,最大精力,当前精力
- #最大气血,有效气血,当前气血,最大精神,有效精神,当前精神
- set hpbrief long情况下可另显示一行真气,真元,食物,饮水
- --]]
- --气血--------------------------------------------------------------------------------------
- pkuxkx.hp_max = multimatches[3][2]
- pkuxkx.hp_maxbf = multimatches[3][3]
- pkuxkx.hp_now = multimatches[3][4]
- pkuxkx.MiniConsole_sethpbar(pkuxkx.hp_now,pkuxkx.hp_max)
- --精神--------------------------------------------------------------------------------------
- pkuxkx.js_max = multimatches[3][5]
- pkuxkx.js_max2 = multimatches[3][6]
- pkuxkx.js_now = multimatches[3][7]
- pkuxkx.MiniConsole_setjsbar(pkuxkx.js_now,pkuxkx.js_max)
- --食物--------------------------------------------------------------------------------------
- pkuxkx.food_now = multimatches[5][4]
- pkuxkx.MiniConsole_setfoodbar(pkuxkx.food_now)
- --饮水--------------------------------------------------------------------------------------
- pkuxkx.water_now = multimatches[5][5]
- pkuxkx.MiniConsole_setwaterbar(pkuxkx.water_now)
- --隐藏hpbrief信息--------------------------------------------------------------------------------------
- ----[[
- moveCursor(0,getLineCount()-2)
- deleteLine()
- moveCursor(0,getLineCount()-1)
- deleteLine()
- moveCursor(0,getLineCount())
- pkuxkx.deleteFull()
- --]]
复制代码
2、匹配玩家过来离去相关信息
2.1表达式
- ^.+(进去|过来|过去|离去|离开|消失不见|人影一闪|出现|早已没有|进入这个世界).+$
复制代码 2.2配置截图
2.3触发器中的脚本
- pkuxkx.MiniConsole_laiqu()
- --显示游戏人物过来离去相关信息小窗口的触发
复制代码
3、匹配聊天相关信息
3.1表达式
3.2配置截图
3..3触发器中的脚本
- pkuxkx.MiniConsole_liaotian()
- --显示聊天相关信息小窗口的触发
复制代码
4、界面初始化(暂时不知道其它办法,暂用此法)
4.1表达式
4.2配置截图
4.3触发器中的脚本
- pkuxkx.MiniConsole_foodbar()
- pkuxkx.MiniConsole_waterbar()
- pkuxkx.MiniConsole_hpbar()
- pkuxkx.MiniConsole_jsbar()
- pkuxkx.Label_dbbjwd()
复制代码
相关的定时器:
1、hpbrief定时(5秒或自己决定)
相关的按钮:
1、启停hpbrief监控
- lua enableTimer("hpbrief") echo("状态监视启动")
复制代码- lua disableTimer("hpbrief") echo("状态监视关闭")
复制代码
|