找回密码
 点一下
查看: 2830|回复: 9

Jass字符如何转换到技能

[复制链接]
发表于 2007-12-13 20:40:58 | 显示全部楼层 |阅读模式
我在JASS区无法发贴,无法选择帖子分类。


字符如何转换到技能。



//技能转字符
native GetObjectName takes integer objectId returns string
//整数转字符
native I2S  takes integer i returns string

如果用他们来转技能,会得到不一样的结果
如果用S2I来转字符到整数,也不会得到正确的技能整数。如何?


今天看到人吵架。貌似GA不欢迎新手,鄙视触发器。绝对JASS才是王道…
我倒。我晕。我趴……新手少了。这个论坛永远不会有新的高手。
发表于 2007-12-13 20:48:00 | 显示全部楼层
估计LZ想要的是 http://www.gacn.net/bbs/read.php?tid=858
这个KOOK的帖子................
回复

使用道具 举报

发表于 2007-12-13 21:02:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2007-12-13 21:35:43 | 显示全部楼层
我晕,2楼发的东西一点用都没。他做的那个,不过是和一个16进制转换类似的东西罢了。
回复

使用道具 举报

发表于 2007-12-13 21:47:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2007-12-13 22:01:18 | 显示全部楼层
谁说米用............下面那个函数还是拜托他专门写出来的....
回复

使用道具 举报

 楼主| 发表于 2007-12-14 10:31:40 | 显示全部楼层
噶~`噶~``噶````
我的主题问题…………………
回复

使用道具 举报

 楼主| 发表于 2007-12-14 10:34:38 | 显示全部楼层
偶有个Jass 数组操作。和KOOK的原理半斤二两。
//ArLook("11,22,33,44,55,66,77,88,99",3) = "33"
//ArSet("11,22,33,44,55,66,77,88,99",1,"aaaa") = "aaaa,22,33,44,55,66,77,88,99"
回复

使用道具 举报

发表于 2007-12-14 11:55:14 | 显示全部楼层
这个不能算是数组吧,字符串的分割处理。。。
GetObjectName 得到的是通过技能id得到技能名字,每一个id有相对应技能的名字,这个在物体编辑器中可以看
I2S 是将整数以看得到的字符形式“显示”出来
至于S2I,原则上是将“0”-“9”这10个字符在10进制的基础上将输入的字符转化为整数,比如I2S(“abc”)就是无效的,得到0.

那么lz想要的所谓字符转化技能是什么呢

创造单位的函数有除了按id之外按单位名字的,比如CreateUnitByName(Player(0),"Footman",0,0,0),属于其本废弃的系列,这个“单位名字”实指单位的slk中的comments 项,算是冗余关键字。。而且对自定义单位支持很差。


好了,以上是废话。
技能名至技能id
constant native AbilityId takes string abilityIdString returns integer
id至名字
constant native AbilityId2String takes integer abilityId returns string
还未找到可用的方法。
回复

使用道具 举报

发表于 2007-12-16 11:02:23 | 显示全部楼层
技能名字ID可以通过一些算法来得出~~~
S2ID是把字符比如"I00A"等转换为数字ID
ID2S是把数字ID转化字符.
如果有兴趣,可以用一些办法,让技能名与字符ID相关系,那样问题就解决了~
  1. constant function StringNum takes nothing returns string
  2. return "0123456789"
  3. endfunction
  4. constant function StringABC takes nothing returns string
  5. return "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  6. endfunction
  7. constant function Stringabc takes nothing returns string
  8. return "abcdefghijklmnopqrstuvwxyz"
  9. endfunction
  10. function S2ID takes string source returns integer
  11. local integer Id = 0
  12. local integer n1 = 1
  13. local integer n2 = 1
  14. loop
  15. exitwhen(n1>StringLength(source))
  16. loop
  17. exitwhen(n2>10)
  18. if(SubString(source,n1-1,n1)==SubString(StringNum(),n2-1,n2))then
  19. set Id=Id+R2I(('0'+n2-1)*Pow(256.00,I2R(StringLength(source)-n1)))
  20. set n2=n2+1
  21. else
  22. set n2=n2+1
  23. endif               
  24. endloop
  25. set n2=1
  26. loop
  27. exitwhen(n2>26)
  28. if(SubString(source,n1-1,n1)==SubString(StringABC(),n2-1,n2))then
  29. set Id=Id+R2I(I2R('A'+n2-1)*Pow(256.00,I2R(StringLength(source)-n1)))
  30. set n2=n2+1
  31. else
  32. set n2=n2+1
  33. endif               
  34. endloop
  35. set n2=1
  36. loop
  37. exitwhen(n2>26)
  38. if(SubString(source,n1-1,n1) == SubString(Stringabc(),n2-1,n2))then
  39. set Id=Id+R2I(('a'+n2-1)*Pow(256.00,I2R(StringLength(source)-n1)))
  40. set n2=n2+1
  41. else
  42. set n2=n2+1
  43. endif               
  44. endloop
  45. set n2=1
  46. set n1=n1+1
  47. endloop
  48. return Id
  49. endfunction
  50. function ID2S takes integer int returns string
  51. local string target=""
  52. local integer n=0
  53. local integer dis=0
  54. loop
  55. exitwhen(int==0)
  56. set n=ModuloInteger(int,256)
  57. if(n>='0' and n<='9')then
  58. set dis=n-'0'
  59. set target=SubString(StringNum(),dis,dis+1)+target
  60. endif
  61. if(n>='A' and n<='Z')then
  62. set dis=n-'A'
  63. set target=SubString(StringABC(),dis,dis+1)+target
  64. endif
  65. if(n>='a' and n<='z')then
  66. set dis=n-'a'
  67. set target=SubString(Stringabc(),dis,dis+1)+target
  68. endif
  69. set int=int/256
  70. endloop
  71. return target
  72. endfunction
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-22 16:02 , Processed in 0.076020 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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