找回密码
 点一下
查看: 3224|回复: 17

codeid与整数之间的对应关系

[复制链接]
发表于 2006-12-16 16:07:16 | 显示全部楼层 |阅读模式
不知道有米有人发过,如果有的话就华丽滴无视吧

War3中的对象如unit,item,spell等都有一个唯一的codeid
如山丘之王是'Hmkg',风暴之锤是'AHtb'
实际上codeid是一个integer
war3遇到'Hmkg'是会自动把它转成一个integer
如果能知道其中的转换机制我们就可以大大简化一组相似技能的操作

转换机制其实很简单
将每个字母转成相应的16进制ascii码
如'Hmkg'->"486D6B67"
如'A00A'->"41303041"
把后面的id看成一个整数就是16进制的codeid...
 楼主| 发表于 2006-12-16 20:20:55 | 显示全部楼层
貌似素偶冥王星料...
回复

使用道具 举报

发表于 2006-12-16 20:26:59 | 显示全部楼层
555 我也冥王星一次好老~~


就是说一个简单的ID转整数的法子~~用变量就行老~~随便设个变量I~~

set udg_I='Asdf'
然后将I的内容Debug一下~~出现的就是Asdf的对应整数老~~555~~



冥王星人口众多~~55
回复

使用道具 举报

 楼主| 发表于 2006-12-16 20:30:13 | 显示全部楼层
引用第2楼麦德三世B2006-12-16 20:26发表的:
555 我也冥王星一次好老~~


就是说一个简单的ID转整数的法子~~用变量就行老~~随便设个变量I~~

.......

这个知道...
因为自定义object滴codeid素有规律的
偶想实现滴素通过1个已知的codeid得到下一个codeid...
回复

使用道具 举报

发表于 2006-12-17 11:27:31 | 显示全部楼层
不晓得转换完以后怎么使用啊?而且转换也不容易啊,我不会jass 能debug么?
回复

使用道具 举报

发表于 2006-12-17 13:35:29 | 显示全部楼层
引用第3楼苍天の游戏王2006-12-16 20:30发表的:


这个知道...
因为自定义object滴codeid素有规律的
偶想实现滴素通过1个已知的codeid得到下一个codeid...


555 米看懂~~
回复

使用道具 举报

发表于 2006-12-17 15:54:04 | 显示全部楼层
自定义物件的ID使用‘0-9’,‘A-Z’36个ASCII码
将256进制转化为36进制再做+1运算,然后转回去就可以了
回复

使用道具 举报

发表于 2006-12-17 17:36:54 | 显示全部楼层
冥王星滴语言偶完全看不懂的说。。
我想知道这ASCII码能够做什么
回复

使用道具 举报

发表于 2006-12-17 19:06:13 | 显示全部楼层
能参考对应的.........
回复

使用道具 举报

发表于 2006-12-17 19:50:19 | 显示全部楼层
看样子米人理解偶滴意思恩...
偶滴意思素如果你做了100个相似技能想通过数组方式访问
但是又不希望写100句"set XX=XX"
你就可以首先得到第一个技能的codeid,
通过计算得到第N个技能滴codeid...
那个计算就需要把codeid先转成一个字符串...
回复

使用道具 举报

发表于 2006-12-17 21:08:37 | 显示全部楼层
555 我知道啊~~其实我一直是这样算的~~

I='Asdf'

for...0->N
{
I=I+N
}
回复

使用道具 举报

发表于 2006-12-17 21:17:05 | 显示全部楼层
i=i+N?
回复

使用道具 举报

发表于 2006-12-17 21:34:04 | 显示全部楼层
555 好吧~~我是笨蛋好了~~
回复

使用道具 举报

发表于 2006-12-18 01:29:38 | 显示全部楼层
引用第9楼白银の游戏王2006-12-17 19:50发表的:
看样子米人理解偶滴意思恩...
偶滴意思素如果你做了100个相似技能想通过数组方式访问
但是又不希望写100句"set XX=XX"
你就可以首先得到第一个技能的codeid,
通过计算得到第N个技能滴codeid...
.......

听不懂说什么。。。
如果是说'A001','A002','A003'这种排序的话
我6楼说的就是了
回复

使用道具 举报

发表于 2007-1-2 11:09:15 | 显示全部楼层
这个是javascript的吧aaaa转换成1212121212的程序 保存为网页运行就可以了
  1. <SCRIPT LANGUAGE="JavaScript">
  2. <!--
  3. function encMe() {
  4. var charout = 0;
  5. var code = 0;
  6. for(i=0;i<document.encme.inps.value.length-1;i++) {
  7. code = document.encme.inps.value.charCodeAt(0);
  8. charout+=code*Math.pow(2,8*(document.encme.inps.value.length-i-1));
  9. }
  10. charout+=document.encme.inps.value.charCodeAt(encme.inps.value.length-1);
  11. document.encme.outs.value=charout;
  12. }
  13. //-->
  14. </SCRIPT>
  15. <title>String To Int 转换程序</title>
  16. </head>   
  17. <body>   
  18. <form name=encme>      
  19. <input type=text name=inps size=40>
  20. <input type=button onclick=encMe() value="转换">
  21. <br /><input type=text name=outs size=47>
  22. </form>
  23. </body>
复制代码


这个是jass的互相转换的例子 呵呵不是我写的
  1. function S2Id takes string source returns integer
  2.     local string num = "0123456789"
  3.     local string ABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  4.     local string abc = "abcdefghijklmnopqrstuvwxyz"
  5.     local integer Id = 0
  6.     local integer n1 = 1
  7.     local integer n2 = 1
  8.     loop
  9.         exitwhen n1 > StringLength(source)
  10.             loop
  11.                 exitwhen n2 > 10
  12.                 if SubString(source,n1-1,n1) == SubString(num,n2-1,n2) then
  13.                     set Id = Id + R2I(('0'+n2-1)*Pow(256.00,I2R(StringLength(source)-n1)))
  14.                     set n2 = n2 + 1
  15.                 else
  16.                     set n2 = n2 + 1
  17.                 endif               
  18.             endloop
  19.         set n2 = 1
  20.             loop
  21.                 exitwhen n2 > 26
  22.                 if SubString(source,n1-1,n1) == SubString(ABC,n2-1,n2) then
  23.                     set Id = Id + R2I(I2R('A'+n2-1)*Pow(256.00,I2R(StringLength(source)-n1)))
  24.                     set n2 = n2 + 1
  25.                 else
  26.                     set n2 = n2 + 1
  27.                 endif               
  28.             endloop
  29.         set n2 = 1
  30.             loop
  31.                 exitwhen n2 > 26
  32.                 if SubString(source,n1-1,n1) == SubString(abc,n2-1,n2) then
  33.                     set Id = Id + R2I(('a'+n2-1)*Pow(256.00,I2R(StringLength(source)-n1)))
  34.                     set n2 = n2 + 1
  35.                 else
  36.                     set n2 = n2 + 1
  37.                 endif               
  38.             endloop
  39.         set n2 = 1
  40.         set n1 = n1 + 1
  41.     endloop
  42.     return Id
  43.     //return
  44. endfunction
  45. function Id2S takes integer int returns string
  46.     local string num = "0123456789"
  47.     local string ABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  48.     local string abc = "abcdefghijklmnopqrstuvwxyz"
  49.     local string target = ""
  50.     local integer n = 0
  51.     local integer dis = 0
  52.     loop
  53.         exitwhen int == 0
  54.         set n = ModuloInteger(int,256)
  55.         if n>='0' and n<='9' then
  56.             set dis = n-'0'
  57.             set target = SubString(num,dis,dis+1) + target
  58.         endif
  59.         if n>='A' and n<='Z' then
  60.             set dis = n-'A'
  61.             set target = SubString(ABC,dis,dis+1) + target
  62.         endif
  63.         if n>='a' and n<='z' then
  64.             set dis = n-'a'
  65.             set target = SubString(abc,dis,dis+1) + target
  66.         endif
  67.         set int = int/256
  68.     endloop
  69.     return target
  70.     //return
  71. endfunction
复制代码
回复

使用道具 举报

发表于 2007-1-2 12:25:43 | 显示全部楼层
不知道实际上能怎么应用
100个技能显然不现实
单位也不大可能
回复

使用道具 举报

发表于 2007-1-2 22:36:52 | 显示全部楼层
没什么不现实的
我做魔法抗性是50个4级的技能 (-100~100)
闪避是25个4级技能(0~100)+7个壳技能(魔法书用于隐藏图标)

至于4级技能吗,嗯的嗯的,因为可以完全写入SLK文件
回复

使用道具 举报

发表于 2007-1-3 10:01:44 | 显示全部楼层
有几个是像LS那么BT 的......
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 18:05 , Processed in 0.104918 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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