找回密码
 点一下
查看: 2169|回复: 8

额,单位组滴条件问题

[复制链接]
发表于 2009-10-15 16:32:22 | 显示全部楼层 |阅读模式
我是新手,不懂J,只是把T做好了,再转J滴, 单位组滴动作怎么写进条件里?
[trigger]
jn
事件
单位 - 任意单位 发动技能效果
条件
(施放技能) 等于 战争践踏
动作
设置 p = ((触发单位) 的位置)
单位组 - 选取 (半径为 150.00 圆心为 p 且满足 ((((匹配单位) 是存活的) 等于 TRUE) and (((匹配单位) 是 ((触发单位) 的所有者) 的敌对单位) 等于 TRUE)) 的所有单位) 内所有单位做动作
Loop - 动作
特殊效果 - 在 ((选取单位) 的位置) 创建特效: Abilities\Spells\Undead\FrostNova\FrostNovaTarget.mdl

[/trigger]
[jass]
function Cond takes nothing returns boolean
local group g=CreateGroup()
local location p=GetUnitLoc()
if ( IsUnitAliveBJ(GetFilterUnit()) == true ) then
elseif ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetTriggerUnit())) == true )then
call AddSpecialEffectLocBJ( GetUnitLoc(GetEnumUnit()), "Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl" )
endif
return false
call GetUnitsInRangeOfLocMatching(150.00,p,AddSpecialEffectLocBJ( GetUnitLoc(GetEnumUnit()), "Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl" ) )
endfunction
[/jass]
不会做了,请教下··
发表于 2009-10-15 18:22:49 | 显示全部楼层
[jass]
//方法一
globals
    player SYS_TempDataP = null
endglobals

function Cond takes nothing returns boolean
    local unit u = GetFilterUnit()
    if GetUnitState(u, UNIT_STATE_LIFE) > 0. and IsUnitEnemy(u, SYS_TempDataP) then
       call DestroyEffect(AddSpecialEffect("Abilities\\\\Spells\\\\Undead\\\\FrostNova\\\\FrostNovaTarget.mdl", GetUnitX(u), GetUnitY(u)))
    endif
    return false
endfunction

function Start takes nothing returns nothing
    local group g = CreateGroup()
    local unit u = GetTriggerUnit()
    local real x = GetUnitX(u)
    local real y = GetUnitY(u)
    set SYS_TempDataP = GetOwningPlayer(u)
    call GroupEnumUnitsInRange(g, x, y, 150., Filter(function Cond))
    call DestroyGroup(g)
    set u = null
    set g = null
endfunction

// 方法二

function Filt takes nothing returns boolean
    local unit u = GetFilterUnit()
    if GetUnitState(u, UNIT_STATE_LIFE) <= 0. then
        set u = null
        return false
    endif
    if IsUnitType(u, UNIT_TYPE_STRUCTURE) then
        set u = null
        return false
    endif
    set u = null
    return true
endfunction

function Start takes nothing returns nothing
    local group g = CreateGroup()
    local unit u = GetTriggerUnit()
    local player p = GetOwningPlayer(u)
    call GroupEnumUnitsInRange(g, GetUnitX(u), GetUnitY(u), 150., Filter(function Filt))
    loop
        set u = FirstOfGroup(g)
        exitwhen u == null
            if IsUnitEnemy(u, p) then
                call DestroyEffect(AddSpecialEffect("Abilities\\\\Spells\\\\Undead\\\\FrostNova\\\\FrostNovaTarget.mdl", GetUnitX(u), GetUnitY(u)))
            endif
            call GroupRemoveUnit(g, u)
    endloop
    call DestroyGroup(g)
    set u = null
    set g = null
endfunction     
[/jass]
回复

使用道具 举报

发表于 2009-10-15 18:42:25 | 显示全部楼层
忽然发现理解错误……
还是编辑掉吧……
回复

使用道具 举报

发表于 2009-10-16 08:01:27 | 显示全部楼层
就是把动作放到条件里去执行
回复

使用道具 举报

发表于 2009-10-16 09:14:26 | 显示全部楼层
单位组
选择单位(对所有在范围内的单位执行一次条件,如果返回true就把这个单位加入单位组)
执行动作(对被加入单位组的单位执行动作)
回复

使用道具 举报

发表于 2009-10-16 09:31:50 | 显示全部楼层
引用第3楼用户名是虾米于2009-10-16 08:01发表的  :
就是把动作放到条件里去执行
你是要把T的选取单位组做动作的函数写到T的条件里
还是把选取单位执行的动作写到选取单位的条件中去?
我以为你说的是第二种,
于是编辑掉了第一种的演示
回复

使用道具 举报

 楼主| 发表于 2009-10-16 23:30:55 | 显示全部楼层
额,谢谢大家了,我把演示慢慢研究研究,好消化,我是J盲,什么都不懂·······
回复

使用道具 举报

发表于 2009-10-17 14:00:32 | 显示全部楼层
我惯用第一个……
回复

使用道具 举报

 楼主| 发表于 2009-10-17 23:45:51 | 显示全部楼层
于是看明白了········
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 18:31 , Processed in 0.112599 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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