|
发表于 2006-8-12 21:16:00
|
显示全部楼层
Re:谁会用we里的jass编辑脚本!可否提供些案例看下
well,这是我以前写的一些脚本,可以作下参考。
- //===========================================================================
- function InitTrig_Base takes nothing returns nothing
- endfunction//===========================================================================
- // Trigger: Data conversion
- //
- // // 跳过某种字节数据
- // function ScanByte takes string sSrc, string byMatchs, integer iStart returns integer
- // // 反向跳过某种字节数据
- // function ScanByteRev takes string sSrc, string byMatchs, integer iStart returns integer
- // // 去掉首尾的某些字节
- // function StrTrim takes string sSrc, string byTrims, boolean bTrimStart, boolean bTrimEnd returns string
- // //任意进制转换
- // function ConvRadix takes integer v, integer iRadix returns string
- // //将任意进制字符串转为整数
- // function DecodeRadix takes string s, integer iRadix returns integer
- //===========================================================================
- // 跳过某种字节数据
- function ScanByte takes string sSrc, string byMatchs, integer iStart returns integer
- local integer cbSrc = StringLength(sSrc)
- local integer cbMatchs = StringLength(byMatchs)
- local string byCur
- local integer I
- local integer J
- if cbSrc <= 0 then
- return 0
- endif
- if iStart < 0 then
- set iStart = 0
- endif
- if cbMatchs <= 0 then
- return iStart
- endif
- set I = iStart
- loop
- exitwhen I >= cbSrc
- set byCur = SubString(sSrc, I, I + 1)
- set J = 0
- loop
- exitwhen J >= cbMatchs
- exitwhen SubString(byMatchs, J, J + 1) == byCur
- set J = J + 1
- endloop
- exitwhen J >= cbMatchs
- set I = I + 1
- endloop
- return I
- endfunction
- // 反向跳过某种字节数据
- function ScanByteRev takes string sSrc, string byMatchs, integer iStart returns integer
- local integer cbSrc = StringLength(sSrc)
- local integer cbMatchs = StringLength(byMatchs)
- local string byCur
- local integer I
- local integer J
- if cbSrc <= 0 then
- return -1
- endif
- if iStart >= cbSrc then
- set iStart = cbSrc - 1
- endif
- if cbMatchs <= 0 then
- return iStart
- endif
- set I = iStart
- loop
- exitwhen I < 0
- set byCur = SubString(sSrc, I, I + 1)
- set J = 0
- loop
- exitwhen J >= cbMatchs
- exitwhen SubString(byMatchs, J, J + 1) == byCur
- set J = J + 1
- endloop
- exitwhen J >= cbMatchs
- set I = I - 1
- endloop
- return I
- endfunction
- // 去掉首尾的某些字节
- function StrTrim takes string sSrc, string byTrims, boolean bTrimStart, boolean bTrimEnd returns string
- local integer cbSrc = StringLength(sSrc)
- local string sRet
- local integer I
- // Check: do nothing
- if (cbSrc <= 0) or (StringLength(byTrims) <= 0) or ((false == bTrimStart) and (false == bTrimEnd)) then
- return sSrc
- endif
- // Start
- set sRet = sSrc
- // Trim Start
- if bTrimStart then
- set I = ScanByte(sRet, byTrims, 0)
- set sRet = SubString(sRet, I, cbSrc)
- endif
- // Trim End
- if bTrimEnd then
- set I = ScanByteRev(sRet, byTrims, StringLength(sRet))
- set sRet = SubString(sRet, 0, I + 1)
- endif
- return sRet
- endfunction
- //任意进制转换
- function ConvRadix takes integer v, integer iRadix returns string
- local string chSample = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZcefgjklmnorstuvyz!@#$&*()_+<>?=~,.:;[]{}"
- local integer cbSample = StringLength(chSample)
- local string sRet = ""
- local boolean bSign = false
- local integer n
- local integer m
- if (iRadix < 2) and (iRadix > cbSample) then
- return ""
- endif
- if 0x80000000 == v then
- return ""
- endif
- if v < 0 then
- set v = - v
- set bSign = true
- endif
- loop
- set n = v / iRadix
- set m = v - n * iRadix
- set v = n
- set sRet = SubString(chSample, m, m + 1) + sRet
- exitwhen 0 == v
- endloop
- if bSign then
- set sRet = "-" + sRet
- endif
- return sRet
- endfunction
- //将任意进制字符串转为整数
- function DecodeRadix takes string s, integer iRadix returns integer
- local string chSample = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZcefgjklmnorstuvyz!@#$&*()_+<>?=~,.:;[]{}"
- local integer cbSample = StringLength(chSample)
- local string sSrc = StrTrim(s, " \t", true, false)
- local integer cbSrc = StringLength(sSrc)
- local integer iRet = 0
- local string byCur
- local boolean bSign = false
- local integer m = 0
- local integer I
- local integer J
- if (iRadix < 2) and (iRadix > cbSample) then
- return 0
- endif
- set I = 0
- loop
- exitwhen I >= cbSrc
- set byCur = SubString(sSrc, I, I + 1)
- set J = 0
- loop
- exitwhen J >= iRadix
- exitwhen SubString(chSample, J, J + 1) == byCur
- set J = J + 1
- endloop
- if J < iRadix then
- set m = iRet * iRadix + J
- exitwhen m < 0 // Overflow
- set iRet = m
- else
- if (false == bSign) and ("-" == byCur) then
- set bSign = true
- else
- exitwhen true
- endif
- endif
- set I = I + 1
- endloop
- if bSign then
- set iRet = -iRet
- endif
- return iRet
- endfunction
- //===========================================================================
- function InitTrig_Data_conversion takes nothing returns nothing
- endfunction
- //===========================================================================
- // Trigger: String
- //===========================================================================
- //将单个ASCII字符转为数字
- function AsciiCharToInteger takes string char returns integer
- local string u = SubString(char, 0, 1)
- local string c
- local integer i = 0
- if u == "" or u == null then
- return 0
- elseif u == "\b" then // BackSpace?
- return 8
- elseif u == "\t" then // Horizontal Tab?
- return 9
- elseif u == "\n" then // Newline?
- return 10
- elseif u == "\f" then // Form feed?
- return 12
- elseif u == "\r" then // Carriage return
- return 13
- endif
- loop
- set c = SubString(GetCharacterSet(), i, i + 1)
- exitwhen c == ""
- if c == u then
- return i + 32
- endif
- set i = i + 1
- endloop
- return 0
- endfunction
- //将数字转为ASCII字符
- function AsciiIntegerToChar takes integer i returns string
- if i == 0 then
- return null
- elseif i >= 8 and i <= 10 then
- return SubString("\b\t\n", i - 8, i - 7)
- elseif i >= 12 and i <= 13 then
- return SubString("\f\r", i - 12, i - 11)
- elseif i >= 32 and i <= 127 then
- return SubString(GetCharacterSet(), i - 32, i - 31)
- endif
- return ""
- endfunction
- //获得字符串中某个字符的索引
- function IndexOfSubstring takes string text, string searchtext returns integer
- local integer i = 1
- if (StringLength(text) >= StringLength(searchtext)) then
- loop
- exitwhen (i > (StringLength(text) - StringLength(searchtext) + 1))
- if (SubString(text,i-1,i + StringLength(searchtext) - 1) == searchtext) then
- return i - 1
- endif
- set i = i + 1
- endloop
- endif
- return -1
- endfunction
- //将数字加密转换为字符串
- function Int2Alphanumeric takes integer int, string charmap returns string
- local string alphanumeric = ""
- local integer index = 0
- if ((int < 0) or (int > 0x7FFFFFFF)) then
- return "|cffff0000Invalid parameter passed to function Int2Alphanumeric()!|r"
- endif
- loop
- set index = ModuloInteger(int, StringLength(charmap)) + 1
- set int = int / StringLength(charmap)
- set alphanumeric = SubStringBJ(charmap, index, index) + alphanumeric
- exitwhen (int == 0)
- endloop
- return alphanumeric
- endfunction
- //将加密的字符串转换为数字
- function Alphanumeric2Int takes string str, string charmap returns integer
- local integer int = 0
- local integer index = 1
- loop
- set int = int + ( ( IndexOfSubstring( charmap, SubString(str, StringLength(str) - 1, StringLength(str)) ) ) * index )
- exitwhen StringLength(str) == 1
- set str = SubStringBJ( str, 1, StringLength(str) - 1 )
- set index = index * StringLength(charmap)
- endloop
- return int
- endfunction
- //增加换行符号
- function StringAddNewLine takes string Str, integer index returns string
- local string s = ""
- local integer a = 1
- loop
- exitwhen a > StringLength(Str)
- if ModuloInteger(a,index) == 0 then
- set s = s + "\n"
- endif
- set s = s + SubString(Str,a-1,a)
- set a = a + 1
- endloop
- return s
- endfunction
- //获得字符串的效检码
- function GetPassCodeCheckNumber takes string passcode returns integer
- local integer index = 1
- local integer check = 0
- if passcode == "" and passcode == null then
- return 0
- endif
- loop
- exitwhen index > StringLength(passcode)
- //数学算法,总之怎么乱怎么算老
- set check = check + AsciiCharToInteger(SubString(passcode,index-1,index))/index*(index/2)
- set index = index + 1
- endloop
- if StringLength(I2S(check)) > 3 then
- return S2I(SubString(I2S(check),StringLength(I2S(check))-3,StringLength(I2S(check))))
- endif
- return check
- endfunction
- //根据效检码效对字符串
- function CheckPassCode takes string passcode ,integer checknumber returns boolean
- return GetPassCodeCheckNumber(passcode) == checknumber
- endfunction
- //将object作为分解符号去分解字符串
- function SubStringForChar takes string s, string object,integer p returns string
- local integer a = 1
- local integer b = 1
- local string array phase
- set phase[b] = ""
- loop
- exitwhen a > StringLength(s)
- if SubString(s, a-1, a) == object then
- set b = b + 1
- set phase[b] = ""
- else
- set phase[b] = phase[b]+SubString(s, a-1, a)
- endif
- set a = a + 1
- endloop
- if p > b then
- return null
- endif
- return phase[p]
- endfunction
- //获得种族的介绍文本
- function GetRaceIntro takes integer raceN returns string
- if raceN == 1 then
- return GetElfIntro()
- elseif raceN == 2 then
- return GetHumanIntro()
- elseif raceN == 3 then
- return GetOrcIntro()
- elseif raceN == 4 then
- return GetUndeadIntro()
- endif
- return ""
- endfunction
- //获得角色的介绍文本
- //1-弓手 2-铁手 3-兵士 4-女巫 5-游士 6-战士 7-术士 8-地怪
- function GetRoleIntro takes integer RoleN returns string
- if RoleN == 1 then
- return GetGongShouIntro()
- elseif RoleN == 2 then
- return GetTieShouIntro()
- elseif RoleN == 3 then
- return GetBingShiIntro()
- elseif RoleN == 4 then
- return GetNvWuIntro()
- elseif RoleN == 5 then
- return GetYouShiIntro()
- elseif RoleN == 6 then
- return GetZhanShiIntro()
- elseif RoleN == 7 then
- return GetShuShiIntro()
- elseif RoleN == 8 then
- return GetDiGuaiIntro()
- endif
- return ""
- endfunction
- //判断字符是不是数字
- function IsNumber takes string Str returns boolean
- local string number = "0123456789"
- local integer a = 1
- if Str == null or Str == "" then
- return false
- endif
- loop
- exitwhen a > StringLength(number)
- if Str == SubString(number,a-1,a) then
- return true
- endif
- set a = a + 1
- endloop
- return false
- endfunction
- //判断字符是不是小写
- function IsLowercase takes string Str returns boolean
- local string lowercase = "abcdefghijklmnopqrstuvwxyz"
- local integer a = 1
- if Str == null or Str == "" then
- return false
- endif
- loop
- exitwhen a > StringLength(lowercase)
- if Str == SubString(lowercase,a-1,a) then
- return true
- endif
- set a = a + 1
- endloop
- return false
- endfunction
- //判断字符是不是大写
- function IsCapitaliz takes string Str returns boolean
- local string capitaliz = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- local integer a = 1
- if Str == null or Str == "" then
- return false
- endif
- loop
- exitwhen a > StringLength(capitaliz)
- if Str == SubString(capitaliz,a-1,a) then
- return true
- endif
- set a = a + 1
- endloop
- return false
- endfunction
- //判断字符是不是标点
- function IsInterpunc takes string Str returns boolean
- local string interpunc = " !\"#$%%&'()*+,-./:;<=>?@[\\]^_`{|}~"
- local integer a = 1
- if Str == null or Str == "" then
- return false
- endif
- loop
- exitwhen a > StringLength(interpunc)
- if Str == SubString(interpunc,a-1,a) then
- return true
- endif
- set a = a + 1
- endloop
- return false
- endfunction
- //字符串着色
- function BatchStringColor takes string Str returns string
- local integer a = 1
- local string ReturnString =""
- local string Temp = ""
- local string TempNext = ""
- local string TempUp = ""
- loop
- exitwhen a > StringLength(Str)
- set Temp = SubString(Str,a-1,a)
- set TempNext = SubString(Str,a,a+1)
- set TempUp = SubString(Str,a-2,a-1)
- if a == 1 then
- set TempUp = ""
- endif
- //数字?
- if IsNumber(TempUp)==false and IsNumber(Temp)==true then
- set ReturnString = ReturnString+"|cff87ceeb"
- //小写?
- elseif IsLowercase(TempUp)==false and IsLowercase(Temp)==true then
- set ReturnString = ReturnString+"|c009D9D9D"
- //大写?
- elseif IsCapitaliz(TempUp)==false and IsCapitaliz(Temp)==true then
- set ReturnString = ReturnString+"|r"
- //标点?
- elseif IsInterpunc(TempUp)==false and IsInterpunc(Temp)==true then
- set ReturnString = ReturnString+"|c00FF2828"
- endif
- set ReturnString = ReturnString+SubString(Str,a-1,a)
- set a = a + 1
- endloop
- return ReturnString
- endfunction
复制代码 |
|