找回密码
 点一下
查看: 1855|回复: 11

这段J在1。24已经不能用了,谁能修复一下

[复制链接]
发表于 2011-8-30 22:42:35 | 显示全部楼层 |阅读模式
这段J的代码在1。24不可以用,谁能修复一下吗?雇用兵系统的

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 I2Tm takes integer i returns timer
    return i
    return null
endfunction

function GetUnitCurrentFree_Func takes unit u returns boolean
    local string s = OrderId2String(GetUnitCurrentOrder(u))
    if s == null then
        return true
    endif
    return false   
endfunction


function SetGuard_Func takes nothing returns nothing
  local timer tm = GetExpiredTimer()
  local unit Eidolon = I2U(GetStoredInteger(udg_Shousave, I2S(H2I(tm)), "Eidolon"))
  local unit captain = I2U(GetStoredInteger(udg_Shousave, I2S(H2I(tm)), "Captain"))
  local real x = GetUnitX(captain) - GetUnitX(Eidolon)
  local real y = GetUnitY(captain) - GetUnitY(Eidolon)
  local real d = x*x + y*y
  local real v
  local real a
  local effect e
  local real life = GetStoredReal(udg_Shousave, I2S(H2I(tm)), "Life")
  local integer p = GetStoredInteger(udg_Shousave,I2S(H2I(tm)), "Percent")
  set v = GetStoredReal(udg_Shousave, I2S(H2I(tm)), "GuardRanger")      
  if GetUnitState(Eidolon, UNIT_STATE_LIFE) > 0 then   
      if d<v*v then
         if GetUnitCurrentFree_Func(Eidolon)==true and GetRandomInt(0,100)<p then
           set x = GetUnitX(captain)
           set y = GetUnitY(captain)
           set d = GetRandomReal(0,v)
           set a = GetRandomReal(0,360)
           call IssuePointOrder(Eidolon, "patrol", x+d*CosBJ(a), y+d*SinBJ(a))
         endif
      else
        set v = GetStoredReal(udg_Shousave, I2S(H2I(tm)), "ReturnRanger")
        if d<v*v then
          if GetUnitCurrentFree_Func(Eidolon)==true  then
            call IssuePointOrder(Eidolon, "patrol", GetUnitX(captain), GetUnitY(captain))
          endif
        else
          set v = GetStoredReal(udg_Shousave, I2S(H2I(tm)), "OutRanger")
            if d!=0 and d>v*v then
              call SetUnitPosition(Eidolon,GetUnitX(captain),GetUnitY(captain))
              set e =AddSpecialEffectTarget("Abilities\\Spells\\NightElf\\FaerieDragonInvis\\FaerieDragon_Invis.mdl" ,captain,"origin")
              call DestroyEffect(e)
            else
              call IssuePointOrder(Eidolon, "move", GetUnitX(captain), GetUnitY(captain))
            endif
          endif
       endif
  endif
  set tm = null
  set Eidolon = null
  set captain = null
endfunction


function SetGuard takes unit Eidolon, unit captain, real timeout, real guardRanger, real returnRanger, real outRanger,integer percent returns nothing
    local timer tm = CreateTimer()  
    call StoreInteger(udg_Shousave, I2S(H2I(Eidolon)), "Timer", H2I(tm))
    call StoreInteger(udg_Shousave, I2S(H2I(tm)), "Eidolon",H2I(Eidolon))
    call StoreInteger(udg_Shousave, I2S(H2I(tm)), "Captain", H2I(captain))
    call StoreInteger(udg_Shousave, I2S(H2I(tm)), "Percent", percent)   
    call StoreReal(udg_Shousave, I2S(H2I(tm)), "GuardRanger", guardRanger)   
    call StoreReal(udg_Shousave, I2S(H2I(tm)), "ReturnRanger", returnRanger)   
    call StoreReal(udg_Shousave, I2S(H2I(tm)), "OutRanger", outRanger)
    call TimerStart(tm, timeout, true, function SetGuard_Func)
    set tm = null
endfunction

function RemoveGuard takes unit Eidolon returns nothing
    local integer tm = GetStoredInteger(udg_Shousave, I2S(H2I(Eidolon)), "Timer")
    call FlushStoredMission(udg_Shousave, I2S(H2I(Eidolon)))
    call FlushStoredMission(udg_Shousave, I2S(tm))
    call DestroyTimer(I2Tm(tm))
endfunction
发表于 2011-8-30 22:47:23 | 显示全部楼层
把RBGC改成HT就好了……
回复

使用道具 举报

 楼主| 发表于 2011-8-30 22:55:45 | 显示全部楼层
表示我对J完全不懂,地图保存时提示有200错误。。。。本想自己试一下的,看到这么多,我无语了
回复

使用道具 举报

发表于 2011-8-30 23:46:25 | 显示全部楼层
那么学习一下好了~~
jass并没有很多人想象的那么难的
回复

使用道具 举报

发表于 2011-8-31 09:09:50 | 显示全部楼层
表示从来不用1.24做图的路过
回复

使用道具 举报

发表于 2011-8-31 09:43:48 | 显示全部楼层
嗯,现在要用就直接用1.26
回复

使用道具 举报

 楼主| 发表于 2011-8-31 10:12:32 | 显示全部楼层
一语惊醒梦中人!LS和LSS的话让我明白了一点事实:绝大部分J都在1。24之前的产品,所以,用1。24做图要面对的将是有一大堆的J等着重写。与其这样,不如直接返回用1。22算了。。。
回复

使用道具 举报

发表于 2011-8-31 10:15:53 | 显示全部楼层
要与时俱进啊楼主,一直停留在过去有什么意思
回复

使用道具 举报

 楼主| 发表于 2011-8-31 11:23:39 | 显示全部楼层
引用第7楼zhuzeitou于2011-08-31 10:15发表的  :
要与时俱进啊楼主,一直停留在过去有什么意思

那么,我就试着接触一下J吧?请问大大,有没有1。24和1。20的函数对照表呢?(不好意思,这次我没搜索)
回复

使用道具 举报

发表于 2011-8-31 12:13:05 | 显示全部楼层
额,不记得了,主要是加了一个GetHandleId函数,就是相当于H2I,然后增加了一系列HashTable的操作,可以直接读写数据和handle,不需要再去I2X了,与GameCache系列函数使用上的区别是它的key的类型是整型而不再是字符串
回复

使用道具 举报

发表于 2011-8-31 17:43:30 | 显示全部楼层
把"gamecache"换成"hashtable"。
把StoredInteger( XXX, XXX, XXX, H2I( XXXX ) )
换成SaveXXXX( XXX, XXX, XXX )
I2X( GetStoredInteger( XXXX, I2S(H2I(XXXX)), XXXX ) )
换成LoadXXXX( XXXX, H2I(XXXX), StringHash( XXXX ) )
回复

使用道具 举报

 楼主| 发表于 2011-8-31 18:34:04 | 显示全部楼层
引用第10楼·于2011-08-31 17:43发表的  :



真的吗?你确定只要换了以上语句就行了?
可行的话就太感谢你了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 01:58 , Processed in 0.181138 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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