找回密码
 点一下
楼主: zealotwang

求助 技能可以运行不过没有结果==希望高手帮帮我====

[复制链接]
发表于 2008-1-19 22:42:12 | 显示全部楼层
ForGroup()是对单位组里的所有单位执行代码
回复

使用道具 举报

发表于 2008-1-20 00:43:19 | 显示全部楼层
这个是我瞎写的函数来的。。。。。
回复

使用道具 举报

发表于 2008-1-20 00:46:35 | 显示全部楼层
引用第21楼eff于2008-01-20 00:43发表的  :
这个是我瞎写的函数来的。。。。。

不会吧………………………………
那么lz的问题应该怎么解决呢??
回复

使用道具 举报

发表于 2008-1-20 02:14:49 | 显示全部楼层
他那个。。。确实我那个函数没什么用。。。就是对一条直线上的单位显示一个感叹号。。。
回复

使用道具 举报

 楼主| 发表于 2008-1-20 08:32:38 | 显示全部楼层
我看了那个函数了,不过那个判断条件好像有点问题。
[codes=jass]function VoidFunc takes nothing returns boolean
   if(IsUnitInRangeXY(GetFilterUnit(),SYS_TempReal[3323],SYS_TempReal[3324],SYS_TempReal[3325]) and not(IsUnitInGroup(GetFilterUnit(),SYS_TempGroup)))then
      call GroupAddUnit(SYS_TempGroup,GetFilterUnit())
      call AddEffectTargetUnitTimed(GetFilterUnit(),"Abilities\\\\Spells\\\\Other\\\\TalkToMe\\\\TalkToMe.mdl","overhead",2.00)
      return true
   endif
   return false
endfunction[/codes]

这个函数的判断条件是
if(IsUnitInRangeXY(GetFilterUnit(),SYS_TempReal[3323],SYS_TempReal[3324],SYS_TempReal[3325]) and not(IsUnitInGroup(GetFilterUnit(),SYS_TempGroup)))then

用这个条件并不能去除施法单位,放魔法的话,自己身上也会有一个叹号的。我主要想知道GetFilterUnit()这个到底怎么用,这个应该是匹配单位吧,我看T上面写的匹配单位就是被判断的单位,可是我这个是一个判断函数,我判断的条件里面又有需要判断的单位,怎么解释都解释不通,所以想知道一下 这个匹配单位到底是什么东西。
回复

使用道具 举报

发表于 2008-1-20 12:08:51 | 显示全部楼层
引用第23楼eff于2008-01-20 02:14发表的  :
他那个。。。确实我那个函数没什么用。。。就是对一条直线上的单位显示一个感叹号。。。

这个知道,lz是要对一直线上单位造成伤害,就是如何选取这一直线单位的问题额~~
回复

使用道具 举报

发表于 2008-1-20 19:36:49 | 显示全部楼层
在ForGroup中

会对每个单位进行操作:
GetFilterUnit()------> u

do functions to u

关于Unit的类型限制,可以用if GetFilterUnit()!= GetSpellCaster()<--------------这是我YY的函数,实际上没有,要自己写一个方案来返回SpellCaster,比如在ForGroup之前设置TempUnit=Caster之类的。
回复

使用道具 举报

 楼主| 发表于 2008-1-20 20:49:08 | 显示全部楼层
可是ForGroup带的fuction是没法带参数的啊,比如我想杀死Group里面的所有单位。
我的做法是单建一个没有参数的fuction,然后在那里在写KillUnit(xxx)不过这个xxx我就不知道写什么了。是匹配的单位么?还是触发单位。两个我试了好像都没有成功。
我现在是在GroupEnumUnitsInRange的condtion函数里面对每个Unit进行操作。 这样做成功了。我这样做好么?
回复

使用道具 举报

发表于 2008-1-20 20:50:20 | 显示全部楼层
引用第27楼zealotwang于2008-01-20 20:49发表的  :
可是ForGroup带的fuction是没法带参数的啊,比如我想杀死Group里面的所有单位。
我的做法是单建一个没有参数的fuction,然后在那里在写KillUnit(xxx)不过这个xxx我就不知道写什么了。是匹配的单位么?还是触发单位。两个我试了好像都没有成功。
我现在是在GroupEnumUnitsInRange的condtion函数里面对每个Unit进行操作。 这样做成功了。我这样做好么?

GetEnumUnit()应该可以吧~~
回复

使用道具 举报

 楼主| 发表于 2008-1-20 21:28:58 | 显示全部楼层
constant native GetEnumUnit takes nothing returns unit

这个是那个函数的定义,还没试。一会儿试试。不过现在我用那个Condtion取得了需要判断的单位

用的是GetFilterUnit(),不过到现在不知带为什么用这个函数。

现在是取得了需要承受伤害的单位了,不过

我调用
call UnitDamageTarget( null, GetFilterUnit(), 100, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
对那个单位进行伤害没有效果。

我UnitDamageTarget函数调用的对么

那个函数是这样定义的。

native UnitDamageTarget takes unit whichUnit,widget target,real amount,boolean attack,boolean ranged,attacktype attackType,damagetype damageType,weapontype weaponType returns boolean
回复

使用道具 举报

发表于 2008-1-20 21:31:15 | 显示全部楼层
如果ls对触发熟悉的话,这么说应该比较清楚
GetEnumUnit()是选取单位(picked unit),GetFilterUnit()是匹配单位(matching unit)
回复

使用道具 举报

 楼主| 发表于 2008-1-20 21:37:48 | 显示全部楼层
UnitDamageTarget 问题解决了呵呵

前面两个都填GetFilterUnit()就可以了。

ps:我就是不明白什么是匹配的单位。。。。。。。 选取单位也不是很理解。。。。刚开始接触We呵呵。
回复

使用道具 举报

发表于 2008-1-20 21:40:03 | 显示全部楼层
引用第31楼zealotwang于2008-01-20 21:37发表的  :
UnitDamageTarget 问题解决了呵呵

前面两个都填GetFilterUnit()就可以了。

ps:我就是不明白什么是匹配的单位。。。。。。。 选取单位也不是很理解。。。。刚开始接触We呵呵。

呵呵,解决问题就好~~
回复

使用道具 举报

发表于 2008-1-20 21:44:35 | 显示全部楼层
null来源是不会有伤害的。
回复

使用道具 举报

 楼主| 发表于 2008-1-20 22:06:53 | 显示全部楼层
问题是解决了,不过又产生了新的问题。 这个问题在eff的那张Teleport里面好像也存在。问题是这样。

现在对技能施放点上产生伤害是没有问题的,因为我制作的技能是一条斜线,所以需要伤害的圆心点是一直在变的

所以我就这样写判定的。
if(IsUnitEnemy(GetFilterUnit(),Player(0))and not(IsUnitInGroup(GetFilterUnit(),udg_Group))) then
and not 前面是判定区域内的单位是Player的敌人,and not后面判定这个单位不在我创建的Group里面。也就是说别两次把同一个单位装入组,从而造成两倍的伤害。
这句话大体是从Teleport里面抄来的。不过好像and not后面的话没有工作,还是照常对后面的英雄进行了伤害。也就是说有的单位受到的伤害多,有的单位受到的伤害少。

我想知道问题出在什么地方了。

ps:我用eff的那个Teleport也试了一下 就是把addeffect那行换成我的那个

call UnitDamageTarget( null, GetFilterUnit(), 100, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )

好像造成的伤害也有同样的问题,因为我在那张地图上添加单位的话,所有的Jass都被报错禁止了。所以没有具体的尝试。
map.w3x (22 KB, 下载次数: 6)
回复

使用道具 举报

发表于 2008-1-20 23:16:27 | 显示全部楼层
大致改了一下………………还修正了一个问题,就是原来这么做的话,杀死单位的是本身………………

不过,图中貌似有些泄漏问题,没有修改哦~~

略作了一点点小修改,不过在多人时由于使用同一缓存存储信息,可能会出现bug哦~~
map改.w3x (22 KB, 下载次数: 7)
回复

使用道具 举报

 楼主| 发表于 2008-1-21 00:18:12 | 显示全部楼层
呵呵 太感谢了
我也自己改了点东西
主要集中在对目标的判定上面,现在唯一的问题就伤害是在所有特效都显示完毕以后才计算出来的,看上去会有些延迟。如果效果时间很长的话,延迟会更厉害的。 我想把效果做成一边放效果一边就计算出伤害来的那种,不过总是在Group的使用上出现一些问题。

[codes=jass]function PickupUnit takes nothing returns boolean
       if(IsUnitEnemy(GetFilterUnit(),Player(0))and not(IsUnitInGroup(GetFilterUnit(),udg_Group))) then
          call GroupAddUnit(udg_Group,GetFilterUnit())
          return TRUE
       endif
       return FALSE
endfunction
//==========================================================
//选取符合需要进行伤害的单位(在所选单位组内)

function DamageAttcak takes real x,real y returns nothing
local real r=100.00
local group gp = CreateGroup()
local boolexpr cond = Condition(function PickupUnit)
call DisplayTextToPlayer(Player(0),0,0,"X= "+R2S(x)+" Y= "+R2S(y))
call GroupEnumUnitsInRange(gp,x,y,r,cond)
call GroupAddGroup(gp,udg_Group)
call DestroyGroup(gp)
endfunction[/codes]
问题主要出现在这两个函数上面。正在研究之中。

太感谢你了 呵呵~~

map改.w3x (22 KB, 下载次数: 5)
回复

使用道具 举报

 楼主| 发表于 2008-1-21 00:22:18 | 显示全部楼层
晕~~~
咱俩的文件名使用的是一个,好像我又把你的传上去了,然后我自己的被覆盖丢了 T T
回复

使用道具 举报

 楼主| 发表于 2008-1-21 00:33:36 | 显示全部楼层
呵呵 效果很好 谢谢了。。。。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 03:21 , Processed in 0.090261 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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