找回密码
 点一下
查看: 1762|回复: 15

还是关于JASS移植的问题

  [复制链接]
发表于 2008-10-15 22:57:32 | 显示全部楼层 |阅读模式
   我本来的地图已经有了 自定义脚本代码 ``
   但是我想把这个图的自定义脚本代码移植到我的地图里````不关怎样都不行```~~帮忙```

   新建一个触发器不行`~~不知道为什么

[JASS培训班素材]AI-自动学习技能.w3x

26 KB, 下载次数: 29

这个技能

恶声恶气 该用户已被删除
发表于 2008-10-15 22:58:23 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2008-10-15 23:32:37 | 显示全部楼层
我想把自定义脚本代码放在新建一个触发器~~~怎么不行呢
回复

使用道具 举报

发表于 2008-10-15 23:36:49 | 显示全部楼层
触发里面必须有Init_TrigXX这个函数的哦
回复

使用道具 举报

 楼主| 发表于 2008-10-15 23:46:36 | 显示全部楼层
能帮忙添加下吗~~我现在正在学JASS学到这里了`~卡住了
  你帮我添加下~~我学习~~~谢谢了猪头大大

通宵再线等 , 谢谢
回复

使用道具 举报

发表于 2008-10-15 23:58:17 | 显示全部楼层
那个函数是创建触发就有的
回复

使用道具 举报

 楼主| 发表于 2008-10-16 00:03:34 | 显示全部楼层
那我要怎么把自定义脚本代码放在新建一个触发器呢~~~新建一个触发器然后把代码全部复制过去吗~~这样行吗~~~我GA的JASS教程没有说这个怎么弄~~~郁闷噢`
回复

使用道具 举报

发表于 2008-10-16 00:04:09 | 显示全部楼层
一般把函数放在自定义脚本里就好了呀
回复

使用道具 举报

发表于 2008-10-16 00:10:08 | 显示全部楼层
一般自定义脚本里面的函数都是公共函数
移植的时候可以把自定义脚本的内容全部加到其他地图的自定义脚本的后面,保存时如果有函数重复,则删除一个重复的函数就可以了

如果非要加到触发器里面,新建一个触发器转化为文本后,保留//===================下面那个函数(函数内容可以删除,但函数要保留)
回复

使用道具 举报

 楼主| 发表于 2008-10-16 00:28:14 | 显示全部楼层
还是不懂~~~能帮我转换下那~~谢谢了各位大大```~~我边看教程边边看你们的答案  还是不行~~~
   

 OK,现在可以保存了~

  如此一来,我们很容易实现函数分门别类的保存,不必把所有函数全放在一堆;不过像H2I这样使用频率比较高的函数,最好还是放自定义代码保存比较好。

  如果你要使用这种用触发器保存函数的方法,需要注意一些地方。

  “YD男,你的演示我复制过去怎么用不了,说缺少XX函数,可我是全部复制过去的啊!”

  这样的问题我被问到过很多次,由于正确的解决方法有点复杂,因此我只好叫他们把我保存在触发器里的函数剪切下来,复制到自定义代码里。

  为何明明有那个函数,系统还会提示找不到那函数呢?还是之前提过的——调用函数时被调用函数与调用函数放置顺序的问题。

  当你把别人含有自定义函数的演示复制过来时,保存有被调用函数的触发器A,跟含有调用函数的触发器B,由于位置问题,系统在保存时可能会先保存触发器B,这时它当然会提示找不到调用的函数。

  解决方案如下:

1>在复制别人的T时,先复制保存触发器A,复制完毕保存地图;然后再复制触发器B。如此一来,就不会出错了。

2>当系统提示出错,找不到函数后,把触发器B禁用,保存地图;然后新建个触发器C,把触发器B的事件环境动作全复制或剪切,然后粘贴到触发器C里。删除触发器B,保存地图,系统不会提示出错,保存成功~

3>使用ExecuteFunc(native ExecuteFunc takes string funcName returns nothing),它的功能是搜索所有函数,使用方法为ExecuteFunc(”函数名”)。
  ExecuteFunc的优点是可以搜索调用在后面的函数,独立创建进程,使用wait不影响调用它的函数,能续承TriggerUnit之类的东东,但是……
它只能执行takes nothing(不传递任何参数)的SB函数,因此,要使用它,我们必须用到全局变量来传递数据。使用方法如下





---------------------------
我看了这个还是不行~~~帮帮忙`~大大们
回复

使用道具 举报

发表于 2008-10-16 00:33:43 | 显示全部楼层
你的函数有重复吗?有重名吗?这些都是要考虑到要去避免的
回复

使用道具 举报

 楼主| 发表于 2008-10-16 00:36:40 | 显示全部楼层
function H2I takes handle h returns integer
    return h
    return 0
endfunction

function I2U takes integer i returns unit
    return i
    return null
endfunction

function Dig2Str takes integer i returns string
    if i == 1 then
       return "1"
     elseif i == 2 then
       return "2"
     elseif i == 3 then
       return "3"
     elseif i == 4 then
       return "4"
     elseif i == 5 then
       return "5"
     elseif i == 6 then
       return "6"
     elseif i == 7 then
       return "7"
     elseif i == 8 then
       return "8"
     elseif i == 9 then
       return "9"
     else
       return "0"
    endif
endfunction

function Int2Str takes integer ic returns string
    local string s = ""
    local integer i = ic
    local integer ialt = 0
    local boolean neg = false   
    if i == 0 then
       return "0"
    endif
    if i < 0 then
       set neg = true
       set i = (-1)*i
    endif
    loop
       exitwhen i == 0
       set ialt = i
       set i = i / 10
       set s = Dig2Str( ialt - 10*i ) + s
    endloop
    if neg then
       set s = "-"+s
    endif
    return s
endfunction





function StringFind takes string subject,string find,integer offset returns integer
    local integer len = StringLength(find)
    local integer pos = offset
    local string s
    local string str   
    if ( offset < 1 ) then
        set pos = 1
    endif
    if ( find == "" ) then
        return -1
    endif   
    loop
        set s = SubString(subject, pos-1, pos+len-1)
        if ( s == find ) then
            return pos
        endif
        if ( SubString(subject, pos-1, pos) == "" ) then
            return -1
        endif
        set pos = pos + 1
    endloop
    return -1
endfunction
               

function RecordAbility takes integer uid,integer ab1,integer ab2,integer ab3,integer ab4,integer ab5 returns nothing
    call StoreInteger(udg_GC,"HeroAbilities",I2S(uid)+"_1",ab1)
    call StoreInteger(udg_GC,"HeroAbilities",I2S(uid)+"_2",ab2)
    call StoreInteger(udg_GC,"HeroAbilities",I2S(uid)+"_3",ab3)
    call StoreInteger(udg_GC,"HeroAbilities",I2S(uid)+"_4",ab4)
    call StoreInteger(udg_GC,"HeroAbilities",I2S(uid)+"_5",ab5)
endfunction

function RecordLearn_sequence takes integer uid,string ls1,string ls2,string ls3,string ls4,string ls5 returns nothing
    call StoreString(udg_GC,"learn_quence",I2S(uid)+"_1",ls1)
    call StoreString(udg_GC,"learn_quence",I2S(uid)+"_2",ls2)
    call StoreString(udg_GC,"learn_quence",I2S(uid)+"_3",ls3)
    call StoreString(udg_GC,"learn_quence",I2S(uid)+"_4",ls4)
    call StoreString(udg_GC,"learn_quence",I2S(uid)+"_5",ls5)
endfunction

function HeroLearnSkillAI takes unit hero,integer uid,integer level returns integer
    local string array learn_sequence
    local integer numofskill = 5
    local integer array skills
    local integer i = 1
    local integer learnskill  
    set skills[1] = GetStoredInteger(udg_GC,"HeroAbilities",I2S(uid)+"_1")
    set skills[2] = GetStoredInteger(udg_GC,"HeroAbilities",I2S(uid)+"_2")
    set skills[3] = GetStoredInteger(udg_GC,"HeroAbilities",I2S(uid)+"_3")
    set skills[4] = GetStoredInteger(udg_GC,"HeroAbilities",I2S(uid)+"_4")
    set skills[5] = GetStoredInteger(udg_GC,"HeroAbilities",I2S(uid)+"_5")
    set learn_sequence[1] = GetStoredString(udg_GC,"learn_quence",I2S(uid)+"_1")
    set learn_sequence[2] = GetStoredString(udg_GC,"learn_quence",I2S(uid)+"_2")
    set learn_sequence[3] = GetStoredString(udg_GC,"learn_quence",I2S(uid)+"_3")
    set learn_sequence[4] = GetStoredString(udg_GC,"learn_quence",I2S(uid)+"_4")
    set learn_sequence[5] = GetStoredString(udg_GC,"learn_quence",I2S(uid)+"_5")
   
    loop
        exitwhen i > numofskill
        if StringFind(learn_sequence , "^" + Int2Str(level) + "^", 1) != -1 then
        //trace msg

//            if GetUnitAbilityLevel(hero,skills)==0 then
//                 call UnitAddAbility(hero,skills)
//               else
//                  call IncUnitAbilityLevel(hero,skills)   
//            endif
              
            call SelectHeroSkill(hero,skills)
            call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 3600, ( "学习  " + GetAbilityName(skills)+ "," +  "目前技能等级为" +I2S(GetUnitAbilityLevel(hero,skills))))   
            return skills
        endif
        set i = i + 1
    endloop
    return 0
endfunction

function HeroMaxSkillAI takes unit hero returns nothing
    local integer level = GetHeroLevel(hero)
    local integer uid = GetUnitTypeId(hero)
    local integer numofskill = 5
    local integer i
    local integer array skills
    call ModifyHeroSkillPoints( hero, bj_MODIFYMETHOD_SET, level )
    call  HeroLearnSkillAI(hero,uid,1)

    set i = 0
    loop  
        set i = i + 1         
        exitwhen i>level           
        call  HeroLearnSkillAI(hero,uid,i)
    endloop   
endfunction



这个了~~~你看下怎么把它弄进新建触发器里`~谢谢了~~~我快哭了````
回复

使用道具 举报

发表于 2008-10-16 00:43:26 | 显示全部楼层
………………哭什么,问题都是自己找的

触发代码的前后与创建触发的顺序有关,因为你新创建的触发在最后,所以代码在最后,而调用的函数必须在之前被申明
所以只要把下面的所有触发再复制一次就好了
回复

使用道具 举报

 楼主| 发表于 2008-10-16 00:52:06 | 显示全部楼层
我把图发给你~~~你帮我看看`谢谢了猪头大大~~~
~~~麻烦你了~~~刚学JASS一天~

KOF小组击退系统技能运用xxxxxxxxx.w3x

19 KB, 下载次数: 7

这个图~~

回复

使用道具 举报

发表于 2008-10-16 01:12:42 | 显示全部楼层
看下,本来就有不少语法错误,而且基本就是上面3楼+12楼的问题

KOF小组击退系统技能运用xxxxxxxxx.w3x (20 KB, 下载次数: 9)
回复

使用道具 举报

 楼主| 发表于 2008-10-16 01:15:52 | 显示全部楼层
~~太感谢你猪头大大~~~
    也辛苦你了~~~以后我会更加麻烦你滴~~~呵呵~~
   我会认真学习JASS的~~~谢谢~~
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 00:44 , Processed in 0.058475 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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