北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 3269|回复: 1

Mush端颜色处理

[复制链接]
发表于 2021-11-29 22:04:14 | 显示全部楼层 |阅读模式
本帖最后由 suwuji 于 2021-11-29 10:45 PM 编辑

使用范例:
脚本调用
cprint("$HIG$你$HIY$好") --本地输出

sprint("$HIG$你$HIY$好") --模拟服务端信息

--当前行内色彩替换

recolor("aqua","yellow")   --触发器当前行色彩修改,调试好后勾选屏蔽显示

  1. --[[
  2.     cprint.lua
  3. ]]

  4. function cprint_ansi_color_init()
  5.     local ESC = '\27'
  6.     return {
  7.         -- 前景色
  8.         BLK = ESC.."[30m", -- 黑色
  9.         RED = ESC.."[31m", -- 红色
  10.         GRN = ESC.."[32m", -- 绿色
  11.         YEL = ESC.."[33m", -- 黄色
  12.         BLU = ESC.."[34m", -- 蓝色
  13.         MAG = ESC.."[35m", -- 紫色
  14.         CYN = ESC.."[36m", -- 青色
  15.         WHT = ESC.."[37m", -- 白色
  16.         -- 加强前景色
  17.         GRA = ESC.."[1;30m", -- 灰色
  18.         HIR = ESC.."[1;31m", -- 亮红
  19.         HIG = ESC.."[1;32m", -- 亮绿
  20.         HIY = ESC.."[1;33m", -- 亮黄
  21.         HIB = ESC.."[1;34m", -- 亮蓝
  22.         HIM = ESC.."[1;35m", -- 亮紫
  23.         HIC = ESC.."[1;36m", -- 亮青
  24.         HIW = ESC.."[1;37m", -- 亮白
  25.         -- 背景色
  26.         BBLK = ESC.."[40m", --黑色
  27.         BRED = ESC.."[41m", --红色
  28.         BGRN = ESC.."[42m", --绿色
  29.         BYEL = ESC.."[43m", -- 黄色
  30.         BBLU = ESC.."[44m", --蓝色
  31.         BMAG = ESC.."[45m", --紫色
  32.         BCYN = ESC.."[46m", --青色
  33.         BWHT = ESC.."[47m", -- 白色
  34.         -- 加强背景色,一般不用会引起前景变色
  35.         HBRED = ESC.."[41;1m", -- 亮红
  36.         HBGRN = ESC.."[42;1m", -- 亮绿
  37.         HBYEL = ESC.."[43;1m", -- 亮黄
  38.         HBBLU = ESC.."[44;1m", -- 亮蓝
  39.         HBMAG = ESC.."[45;1m", -- 亮紫
  40.         HBCYN = ESC.."[46;1m", -- 亮青
  41.         HBWHT = ESC.."[47;1m", -- 亮白
  42.         --字形控
  43.         B = ESC.."[1m", --加重
  44.         I = ESC.."[3m", --斜体
  45.         U = ESC.."[4m", --下划线
  46.         REV = ESC.."[7m", --反色
  47.         HIREV = ESC.."[1;7m", --高亮反色
  48.         BLINK = ESC.."[5m", --闪烁,mushclient里BLINK和I显示一致
  49.         CROSS = ESC.."[9m", --删除线
  50.         -- 返回普通
  51.         NOR = ESC.."[2;37;0m",
  52.     }
  53. end

  54. if ansi_color==nil then ansi_color = cprint_ansi_color_init() end

  55. function ansi(str)
  56.     if str==nil or str=="%$" or str=="nil" then return "" end
  57.     local s,e = string.find(str,"%$([^%$]+)%$")
  58.     if s~=nil and e~=nil then
  59.         local mc = string.sub(str,s+1,e-1)
  60.         if ansi_color[mc]==nil then
  61.             print("$"..mc..'$没有此颜色定义!可用的有:\n')
  62.             for k,v in pairs(ansi_color) do
  63.                 print("$"..k.."$")
  64.             end
  65.             print('\n')
  66.             return ansi(string.sub(str,1,s-1))..ansi(string.sub(str,e+1))
  67.         else
  68.             return ansi(string.sub(str,1,s-1))..ansi_color[mc]..ansi(string.sub(str,e+1))
  69.         end
  70.     else
  71.         return str
  72.     end
  73. end

  74. ----获取当前行的styles--
  75. function styles()
  76.     return GetStyleInfo(GetLinesInBufferCount())
  77. end

  78. ----获取当前行info--
  79. function infos()
  80.     return GetLineInfo(GetLinesInBufferCount())
  81. end

  82. ----当前行色彩数--
  83. function styles_count()
  84.     return table.getn(styles())
  85. end

  86. function rgbname(color)
  87.     return RGBColourToName(color)
  88. end

  89. --
  90. function debugcolor()
  91.     local sall = styles()
  92.     for k,v in ipairs(sall) do
  93.         ColourTell(RGBColourToName(v.textcolour),RGBColourToName(v.backcolour),v.text)
  94.     end
  95.     ColourNote(0,0,"")
  96.     for k,v in ipairs(sall) do
  97.         print(RGBColourToName(v.textcolour)..","..RGBColourToName(v.backcolour).."=>"..v.text)
  98.     end
  99. end

  100. --色彩文字替换显示函数(自定义显示效果)
  101. function recolor(textcolour,new_textcolour,backcolour,new_backcolour,text,new_text)

  102.     if textcolour==nil and backcolour==nil and text==nil then
  103.         debugcolor()
  104.         return
  105.     end
  106.    
  107.     local sall = styles()
  108.     for k,v in ipairs(sall) do
  109.    
  110.         local forecolor = ""
  111.         local backcolor = ""
  112.         local tt = ""
  113.         if textcolour and textcolour==RGBColourToName(v.textcolour) then
  114.             forecolor = new_textcolour
  115.         else
  116.             forecolor = RGBColourToName(v.textcolour)
  117.         end
  118.         
  119.         if backcolour and backcolour==RGBColourToName(v.backcolour) then
  120.             backcolor = new_backcolour
  121.         else
  122.             backcolor = RGBColourToName(v.backcolour)
  123.         end
  124.         if text and text==v.text then
  125.             --替换
  126.             if new_text~=nil then
  127.                 tt = new_text
  128.             else
  129.                 tt = v.text
  130.             end
  131.         else
  132.             --不替换
  133.             tt = v.text
  134.         end
  135.         
  136.         ColourTell(forecolor,backcolor,tt)
  137.     end
  138.     ColourNote(0,0,"")
  139. end

  140. ----本地彩色文字输出(提示用)--
  141. function cprint(str)
  142.     AnsiNote(ansi(str)..ansi_color.NOR)
  143. end

  144. ----模拟服务端文字输出(可触发)--
  145. function sprint(str)
  146.     Simulate(ansi(str)..ansi_color.NOR)
  147. end



复制代码




北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2021-11-29 22:49:54 | 显示全部楼层
功能不错,支持一下~
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-23 10:16 PM , Processed in 0.012046 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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