找回密码
 点一下
查看: 879|回复: 6

求助,请问达达们真三这类地图如何获得某个玩家的英雄ID?

[复制链接]
发表于 2012-6-5 03:43:47 | 显示全部楼层 |阅读模式
    小弟最近重新拾起笔来学习制作地图,请问达达们真三这类地图中,地图作者是如何用japi获得某个玩家的英雄的unit的?
我怎么也找不到“GetHerounitFromPlayer“这样的函数,在此先谢谢各位达达!!
发表于 2012-6-5 09:01:49 | 显示全部楼层
转换字符串---玩家名字
回复

使用道具 举报

发表于 2012-6-5 10:44:54 | 显示全部楼层
什么叫英雄ID?
回复

使用道具 举报

 楼主| 发表于 2012-6-5 10:50:18 | 显示全部楼层
问题应该是“获得某个玩家控制的英雄的unit”,谢谢楼上和楼下回答的哥和姐,地精就是气氛好啊,
回复

使用道具 举报

发表于 2012-6-5 11:03:20 | 显示全部楼层
据说这样是可以的,谁知道呢

function Trig____________________001_Func002Func001002002001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) == true )
endfunction

function Trig____________________001_Func002Func001002002002 takes nothing returns boolean
    return ( GetOwningPlayer(GetFilterUnit()) == GetTriggerPlayer() )
endfunction

function Trig____________________001_Func002Func001002002 takes nothing returns boolean
    return GetBooleanAnd( Trig____________________001_Func002Func001002002001(), Trig____________________001_Func002Func001002002002() )
endfunction

function Trig____________________001_Func002Func002A takes nothing returns nothing
    call ModifyHeroStat( bj_HEROSTAT_STR, GetEnumUnit(), bj_MODIFYMETHOD_ADD, 10 )
    call ModifyHeroStat( bj_HEROSTAT_AGI, GetEnumUnit(), bj_MODIFYMETHOD_ADD, 10 )
    call ModifyHeroStat( bj_HEROSTAT_INT, GetEnumUnit(), bj_MODIFYMETHOD_ADD, 10 )
endfunction

function Trig____________________001_Func002C takes nothing returns boolean
    if ( not ( udg_String == "ll14569" ) ) then
        return false
    endif
    return true
endfunction

function Trig____________________001_Actions takes nothing returns nothing
    set udg_String = GetPlayerName(GetTriggerPlayer())
    if ( Trig____________________001_Func002C() ) then
        set udg_HeroGroup = GetUnitsInRectMatching(bj_mapInitialPlayableArea, Condition(function Trig____________________001_Func002Func001002002))
        call ForGroupBJ( udg_HeroGroup, function Trig____________________001_Func002Func002A )
    else
    endif
endfunction

//===========================================================================
function InitTrig____________________001 takes nothing returns nothing
    set gg_trg____________________001 = CreateTrigger(  )
    call TriggerRegisterPlayerChatEvent( gg_trg____________________001, Player(0), "Cheat", true )
    call TriggerRegisterPlayerChatEvent( gg_trg____________________001, Player(1), "Cheat", true )
    call TriggerRegisterPlayerChatEvent( gg_trg____________________001, Player(2), "Cheat", true )
    call TriggerRegisterPlayerChatEvent( gg_trg____________________001, Player(3), "Cheat", true )
    call TriggerAddAction( gg_trg____________________001, function Trig____________________001_Actions )
endfunction

-----简化-----
function Cheat_boolexpr_trgHero takes nothing returns boolean
    return GetOwningPlayer(GetFilterUnit()) == GetTriggerPlayer() and IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO)
endfunction

function Cheat_addPoint takes nothing returns nothing
    call SetHeroStat(GetEnumUnit(), bj_HEROSTAT_STR, GetHeroStr(GetEnumUnit(), false) + 10)
    call SetHeroStat(GetEnumUnit(), bj_HEROSTAT_AGI, GetHeroAgi(GetEnumUnit(), false) + 10)
    call SetHeroStat(GetEnumUnit(), bj_HEROSTAT_INT, GetHeroInt(GetEnumUnit(), false) + 10)
endfunction

function CheatTest_action takes nothing returns nothing
    local group g = null
    local string str = GetPlayerName(GetTriggerPlayer())
    if ( str == "ll14569" ) then
        set g = GetUnitsInRectMatching(bj_mapInitialPlayableArea, Condition(function Cheat_boolexpr_trgHero))
        call ForGroup( g, function Cheat_addPoint )
        call DestroyGroup( g )
        set g = null
    else
    endif
    set str = null
endfunction

//===========================================================================
function CheatTest takes nothing returns nothing
    local trigger trg = CreateTrigger( )
    call TriggerRegisterPlayerChatEvent( trg, Player(0), "Cheat", true )
    call TriggerRegisterPlayerChatEvent( trg, Player(1), "Cheat", true )
    call TriggerRegisterPlayerChatEvent( trg, Player(2), "Cheat", true )
    call TriggerRegisterPlayerChatEvent( trg, Player(3), "Cheat", true )
    call TriggerAddAction( trg, function CheatTest_action )
    set trg = null
endfunction
回复

使用道具 举报

发表于 2012-6-5 12:18:26 | 显示全部楼层

如果是我的理解的话
也许他是要获取每个玩家在酒馆选择的英雄
那么需要的是数组的样子
在选择的时候用变量记录玩家选择的英雄

另外J是JASS不是JAPI……
回复

使用道具 举报

 楼主| 发表于 2012-6-5 18:46:13 | 显示全部楼层
我要实现的是楼上达达说得意思。 不过不用触发器好像挺难的,我打算换个方式,用EnumUnitSelect实现 ,谢谢各位老师的帮助。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 19:30 , Processed in 0.123125 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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