魔兽编辑器中单位变身[JAPI]

感谢买梦大佬的点拨!真的让本羊少走了很多弯路!

我的问题是:

1、旧英雄单位通过怪物掉落的技能书学习技能
2、旧英雄单位通过点击使用不同的武器可以切换为新英雄单位
3、但是新英雄单位要继承旧英雄单位之前学习的技能和技能等级

问题的难点在于第3点,按照我原来的思路需要用大量变量记录不同玩家的技能。

最终在买梦大佬的点拨后,尝试用单位-单位变身[JAPI]。结论就是:

Read More »

魔兽地图《浩劫余生_4.0》触发自研

特别说明:地图是基于英文版的《浩劫余生》,即《Afterlife v4.0》。

前言:《浩劫余生》的射击触发、装填触发、换枪触发在目前看来都是比较强大的。 源图《Afterlife v4.0》 可以用YDWE打开,但是其中的触发大多是JASS。为此,本羊一遍剖析学习一遍记录如下。

一、地图物编设定

1、所有枪类物品是没有属性的,只有1个装填的技能。同时要注意它的CD间隔组和使用次数。技能编辑器里“飞刀”的施放间隔是8秒。“使用次数”理解为枪类的弹夹容量。

2、一种枪类对应一个独立的单位。说白了,你装备或更换不同的枪,其实质就是切换模型!枪的属性就是单位的属性!例如下面的AK-47,自动射击和连发射击都是不同的单位:

二、装备(更换)武器触发 <难点>

仍然以AK-47为例:

Read More »

魔兽编辑器中“跳过剩余动作”的自研笔记

情形1:不带if条件语句,直接忽略“跳过剩余动作”后的动作不执行!

只执行+1000黄金的动作

情形2:带if条件语句

准备工作:1块区域,三个“ 演员 ”英雄
图中的三个条件的返回值是真值,所以:
1、触发进入单位是圣骑士,三个条件的动作都会执行。执行结果如下图。
2、 、触发进入单位是大魔法师或者山丘之王,只执行第2个和第3个条件的动作。
Read More »

肥羊镇最后的30分钟_EX8.修复笔记

一览:

修复内容:

1、限制试炼工厂地精数量;

2、限制骷髅大法师召唤的骷髅数量;

新增内容:

1、 魔羊神教

(1)新增魔羊神教英雄:神教教主,模型复仇天神,技能:抢劫、诱捕、撕咬、贿赂、能量冲击、幻影守护神;

(2)新增魔羊神教大本营区域:基础商店、部落格、传送能量圈、水泉;

(3) 新增魔羊神教英雄选择、死亡复活、被杀奖励、杀敌经验、杀敌金币触发;

(4)新增“魔羊神教英雄 和 勇者遭遇,双方不能使用-isp飞走”的触发;

(5)新增魔羊神教英雄宠物,可以通过技能往返于教主和大本营之间;

1、 问题:部分物品导致试炼晶球无限回血。解决办法:在KillPeon触发中增加触发条件。

2、问题:无限手套不能杀死敌人。解决办法:在UseSkill3触发中将Drop等于2改为Drop小于或等于2

Read More »

魔兽编辑器中“科技”的自研笔记

随着时间的流逝,利用科技来增强敌我小兵是个不错的设计。以下是我学习过程中的一些笔记:

一、如果不理解科技的数据效果,可以参照标准科技的效果。例如人族的铁剑术:

(1)数据:核心效果,决定着单位的属性奖励;

(2)等级:科技能够升级多少次。升级次数决定着增量的次数。

(3)状态:研究科技需要花费的黄金、木材和时间。科技越往上升,则花费的
黄金、木材和时间越多。如果是给NPC用,则可以全部设置为0。

(4)可随单位转移所有者:比如我用女妖占据了一个步兵,我能否继承它的科技。如果是False,那么我占据的步兵没有科技加成。

(5)只应用于之后生产的单位:我先生产了A步兵,接着升级了铁剑术,最后生产了B步兵。如果该值是Ture,则只有B步兵有科技加成,A步兵没有。所以它默认是False:只要升级了科技,所有步兵都享受了科技加成。

Read More »

禁止工人单位在矩形区域内进行建造_魔兽编辑器

本羊研究这个触发的目的是为了修复肥羊镇的一些BUG。

难点:4族工人在建造时是不同的形态,人族农民是在建筑边上敲,兽族苦工是钻进去敲,亡灵寺僧是在召唤建筑自动建,暗夜小精灵类似苦工,但有些建筑物建造会消耗小精灵。

一开始,本羊选择的动作是:使正在建造的单位爆炸而死或杀死或删除,那么会出现什么情况?

答:苦工这类单位消失,无敌,不可见,还占人口。

Read More »

如何替换魔兽地图中的模型

DarkSheep:感谢低调菊花的投稿!非常适合萌新的模型替换教程!

序言:本文攻略只限于未进行slk优化过得地图模型替换

一.工具的准备

1.拆图与导入工具,ShadowEditor是一款经过优化后非常强大的工具

2.魔兽地图编辑器,ydwe

3.地图模型路径查看和修改工具 mdxpather

4.改图一条龙V2.5

  1. 模型的准备
  2. 模型是由mdx文件和blp文件组成的
  3. Mdx文件是模型的骨骼,只有一个文件。blp文件则是骨骼模型的贴图,数量不等。
  4. 模型可以到各大魔兽论坛去寻找,寻找的过程中得注意模型作者的说明,避免以后发生模型的版权纠纷。
  5. 当然你也可以用改图一条龙V2.5里面的wme工具去别人的地图里面挖掘
  6. 模型更改篇
Read More »

《神域镇魂曲ORPG3.23E》单人优化笔记

【前言】
本图为命运进行曲ORPG的续篇。只可以加载《命运进行曲ORPG》115级以上角色的存档!

游戏提醒:
已开放单人体验,但建议至少2名玩家否则解不了谜(推荐满人开车)

【背景】
分散在大陆的石板指引我们来到这里..
这座神域到底隐藏着什么秘密..

function Trig_Prevent_Single_Func005A takes nothing returns nothing
call CustomDefeatBJ(GetEnumPlayer(),”游戏结束”)
endfunction
function Trig_Prevent_Single_Actions takes nothing returns nothing
if bj_isSinglePlayer then
call DisplayTimedTextToForce(GetPlayersAll(),60.00,”本地图单人无法游戏,至少需要2人!”)
call TriggerSleepAction(1.00)
call ForForce(GetPlayersAll(),function Trig_Prevent_Single_Func005A)
endif
endfunction
function InitTrig_Prevent_Single takes nothing returns nothing
set gg_trg_Prevent_Single=CreateTrigger()
call TriggerAddAction(gg_trg_Prevent_Single,function Trig_Prevent_Single_Actions)
endfunction

trigger gg_trg_Prevent_Single=null

call ConditionalTriggerExecute(gg_trg_Prevent_Single)

call InitTrig_Prevent_Single()

《黑暗之路 v1.36b2 汉化版》不允许单人模式

以下仅为学习笔记~

function IXo takes nothing returns boolean
return(GetPlayerController(Player(-1+(bj_forLoopAIndex)))==MAP_CONTROL_USER)and(GetPlayerSlotState(Player(-1+(bj_forLoopAIndex)))==PLAYER_SLOT_STATE_PLAYING)
endfunction
function IOo takes nothing returns nothing
call CustomDefeatBJ(GetEnumPlayer(),”不允许单人模式”)
endfunction
function IRo takes nothing returns boolean
return(X<2)
endfunction
function IIo takes nothing returns nothing
set X=0
set bj_forLoopAIndex=1
set bj_forLoopAIndexEnd=8
loop
exitwhen bj_forLoopAIndex>bj_forLoopAIndexEnd
if(IXo())then
set X=(X+1)
endif
set bj_forLoopAIndex=bj_forLoopAIndex+1
endloop
if(IRo())then
call ForForce(bj_FORCE_ALL_PLAYERS,function IOo)
else
set lx=true
endif
endfunction

set hS=CreateTrigger()
call TriggerRegisterTimerEventSingle(hS,.05)
call TriggerAddAction(hS,function IIo)

trigger hS=null

《Gutsy Geoid Game_6.804》的模型替换笔记

今天本羊接到的五毛业务是:替换Gutsy Geoid Game_6.804中的时崎狂三模型和头像。

Gutsy Geoid Game_6.804 是经过SLK优化过的地图,所以在模型替换方面比起未优化的地图要花一番功夫。

首先你需要对地图的模型文件特别清楚。其次你需要掌握以下SLK文件的作用:

1、units\campaignunitfunc.txt  这文件中的数据是单位的名字(Name)、称谓(Propernames)、描述文本(Ubertip),以及头像贴图(Art)等等。

2、units\unitui.slk 这文件中的数据是单位的模型路径(file列)、声音文件(unitSound列)等等。


一、准备工作

1、学习《魔兽地图汉化新教程第1章:工具与拆图》,地址:http://norpg.com/maps/course/285/

解压出units文件夹中的campaignunitfunc.txt 和 unitui.slk两个文件

2、下载MPQ Editor,用MPQ Editor打开地图文件。

注意:打开时弹出的对话框直接点确定即可!

MPQ Editor下载地址:http://www.zezula.net/en/mpq/download.html

MPQ Editor v 3.6.0.844 (中文, 32+64-bit) http://www.zezula.net/download/mpqeditor_cn.zip

3、解压替换模型的压缩包

注意:不要改变模型的文件名字及位置关系,请保持原样!

比如这个模型的组成是:hero_kurumi.mdx、eternityskin文件夹以及eternityskin文件夹中的hero_kurumi_cloth.blp、hero_kurumi_skin.blp贴图文件。你使用War3 Model Editor 双击hero_kurumi.mdx是可以查看模型的。

但是如果你改变它们,就会报错,这样是无法读取到模型的。

4、把解压的模型文件(这里是包含hero_kurumi_cloth.blp、hero_kurumi_skin.blp的eternityskin文件夹和hero_kurumi.mdx)拖入用MPQ Editor打开地图文件的根目录。

注意:不要拖入到其他文件夹中!

准备工作完成!


二、替换要点

1、寻找单位的物编编码

使用EmEditor打开units\campaignunitfunc.txt,Ctrl+F搜索“时崎”,很好,只有一条对应数据,那么它的物编编码是:H01F

2、使用Microsoft Excel打开units\unitui.slk,Ctrl+F搜索“H01F”(第1列),查看第3列的路径。

原路径是:units\kurumi.mdl,这里我们修改为:hero_kurumi.mdl。原因:我们在拖入时将模型放在了根目录。

注意:不要改成hero_kurumi.mdx,而是沿用它.mdl的文件后缀,改成hero_kurumi.mdl

保存时弹出对话框“是否保持工作簿的这种格式?”点:是(Y),关闭时弹出对话框“是否保持对XX的修改?”点:保存(S),弹出对话框“要替换它吗?”点:是(Y)

3、回到MPQ Editor进行新旧units\unitui.slk替换。先找到旧的unitui.slk文件,再把新的unitui.slk文件往里拖,弹出对话框点:是(Y)


三、结果对比

从模型查看而言,替换前的模型更精细,替换后的模型裙子上有个脸状图案。

看!脸状图案!我们的模型替换是成功的。


四、收尾工作

收尾工作本羊没做,理论上我们应该把无用的模型从地图中删除。但是仅删units\kurumi.mdl文件又是不完整的,还需要把它的blp贴图文件找出来一并删除,才是完美的。


五、结语

头像文件本羊没有替换,因为替换模型压缩包中的头像文件像素是339×335,大小是147-283kb,不是标准像素的BLP文件。

标准的头像blp的文件像素应该是:128×128,大小应在10kb-30kb左右。

如果你要替换——

(1)头像文件BLP转JPG格式

(2)修改JPG格式头像文件的像素大小为128×128

(3)修改大小后的头像文件再JPG转BLP

(4)标准的头像文件拖入MPQ Editor,修改units\campaignunitfunc.txt  中的 头像贴图(Art)路径

(5)进行新旧campaignunitfunc.txt  文件替换,完成!

《肥羊毁灭记_v7.01a》的汉化笔记

一、关于Australia

trigger gg_trg_Australia=null

call InitTrig_Australia()

call ConditionalTriggerExecute(gg_trg_Australia)

set gg_trg_Australia=CreateTrigger()
call TriggerAddCondition(gg_trg_Australia,Condition(function Trig_Australia_Conditions))
call TriggerAddAction(gg_trg_Australia,function Trig_Australia_Actions)

call ConditionalTriggerExecute(gg_trg_Australia)

function Trig_Australia_Conditions takes nothing returns boolean
return(StringCase(GetPlayerName(Player(0)),false)!=StringCase(“rnwjdals”,false))
endfunction
function Trig_Australia_Func002C takes nothing returns boolean
return(GetPlayerSlotState(Player(0))==PLAYER_SLOT_STATE_PLAYING)and(GetPlayerSlotState(Player(1))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(2))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(5))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(6))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(7))==PLAYER_SLOT_STATE_EMPTY)
endfunction
function Trig_Australia_Func003C takes nothing returns boolean
return(GetPlayerSlotState(Player(0))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(1))==PLAYER_SLOT_STATE_PLAYING)and(GetPlayerSlotState(Player(2))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(5))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(6))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(7))==PLAYER_SLOT_STATE_EMPTY)
endfunction
function Trig_Australia_Func004C takes nothing returns boolean
return(GetPlayerSlotState(Player(0))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(1))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(2))==PLAYER_SLOT_STATE_PLAYING)and(GetPlayerSlotState(Player(5))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(6))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(7))==PLAYER_SLOT_STATE_EMPTY)
endfunction
function Trig_Australia_Func005C takes nothing returns boolean
return(GetPlayerSlotState(Player(0))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(1))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(2))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(5))==PLAYER_SLOT_STATE_PLAYING)and(GetPlayerSlotState(Player(6))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(7))==PLAYER_SLOT_STATE_EMPTY)
endfunction
function Trig_Australia_Func006C takes nothing returns boolean
return(GetPlayerSlotState(Player(0))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(1))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(2))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(5))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(6))==PLAYER_SLOT_STATE_PLAYING)and(GetPlayerSlotState(Player(7))==PLAYER_SLOT_STATE_EMPTY)
endfunction
function Trig_Australia_Func007C takes nothing returns boolean
return(GetPlayerSlotState(Player(0))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(1))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(2))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(5))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(6))==PLAYER_SLOT_STATE_EMPTY)and(GetPlayerSlotState(Player(7))==PLAYER_SLOT_STATE_PLAYING)
endfunction
function Trig_Australia_Func008Func001C takes nothing returns boolean
return(GetPlayerController(Player(0))==MAP_CONTROL_COMPUTER)or(GetPlayerController(Player(1))==MAP_CONTROL_COMPUTER)or(GetPlayerController(Player(2))==MAP_CONTROL_COMPUTER)or(GetPlayerController(Player(5))==MAP_CONTROL_COMPUTER)or(GetPlayerController(Player(6))==MAP_CONTROL_COMPUTER)or(GetPlayerController(Player(7))==MAP_CONTROL_COMPUTER)
endfunction
function Trig_Australia_Func008C takes nothing returns boolean
return(Trig_Australia_Func008Func001C())
endfunction
function Trig_Australia_Actions takes nothing returns nothing
if(Trig_Australia_Func002C())then
call CustomDefeatBJ(Player(0),”패배!”)
call CustomDefeatBJ(Player(1),”패배!”)
call CustomDefeatBJ(Player(2),”패배!”)
call CustomDefeatBJ(Player(5),”패배!”)
call CustomDefeatBJ(Player(6),”패배!”)
call CustomDefeatBJ(Player(7),”패배!”)
endif
if(Trig_Australia_Func003C())then
call CustomDefeatBJ(Player(0),”패배!”)
call CustomDefeatBJ(Player(1),”패배!”)
call CustomDefeatBJ(Player(2),”패배!”)
call CustomDefeatBJ(Player(5),”패배!”)
call CustomDefeatBJ(Player(6),”패배!”)
call CustomDefeatBJ(Player(7),”패배!”)
endif
if(Trig_Australia_Func004C())then
call CustomDefeatBJ(Player(0),”패배!”)
call CustomDefeatBJ(Player(1),”패배!”)
call CustomDefeatBJ(Player(2),”패배!”)
call CustomDefeatBJ(Player(5),”패배!”)
call CustomDefeatBJ(Player(6),”패배!”)
call CustomDefeatBJ(Player(7),”패배!”)
endif
if(Trig_Australia_Func005C())then
call CustomDefeatBJ(Player(0),”패배!”)
call CustomDefeatBJ(Player(1),”패배!”)
call CustomDefeatBJ(Player(2),”패배!”)
call CustomDefeatBJ(Player(5),”패배!”)
call CustomDefeatBJ(Player(6),”패배!”)
call CustomDefeatBJ(Player(7),”패배!”)
endif
if(Trig_Australia_Func006C())then
call CustomDefeatBJ(Player(0),”패배!”)
call CustomDefeatBJ(Player(1),”패배!”)
call CustomDefeatBJ(Player(2),”패배!”)
call CustomDefeatBJ(Player(5),”패배!”)
call CustomDefeatBJ(Player(6),”패배!”)
call CustomDefeatBJ(Player(7),”패배!”)
endif
if(Trig_Australia_Func007C())then
call CustomDefeatBJ(Player(0),”패배!”)
call CustomDefeatBJ(Player(1),”패배!”)
call CustomDefeatBJ(Player(2),”패배!”)
call CustomDefeatBJ(Player(5),”패배!”)
call CustomDefeatBJ(Player(6),”패배!”)
call CustomDefeatBJ(Player(7),”패배!”)
endif
if(Trig_Australia_Func008C())then
call CustomDefeatBJ(Player(0),”패배!”)
call CustomDefeatBJ(Player(1),”패배!”)
call CustomDefeatBJ(Player(2),”패배!”)
call CustomDefeatBJ(Player(5),”패배!”)
call CustomDefeatBJ(Player(6),”패배!”)
call CustomDefeatBJ(Player(7),”패배!”)
endif
call DestroyTrigger(GetTriggeringTrigger())
endfunction
function InitTrig_Australia takes nothing returns nothing
set gg_trg_Australia=CreateTrigger()
call TriggerAddCondition(gg_trg_Australia,Condition(function Trig_Australia_Conditions))
call TriggerAddAction(gg_trg_Australia,function Trig_Australia_Actions)
endfunction


二、关于称号激活

废人称号有三个功能。输入 -称号 激活。等级大于等级250级有三件物品:杀戮之剑、遗弃之剑、审判之剑。其中杀戮之剑捡起来会删除角色。


三、关于单人存档

call DestroyTrigger(gg_trg_Save)   ——>   call TriggerExecute(gg_trg_Save)


四、学习心得

关键在于对PLAYER_SLOT_STATE_PLAYING的理解。PLAYER_SLOT_STATE_PLAYING是指正在游戏的玩家。


五、地图优化

经查看外国优化版本JASS,发现它是使用actboy168的W3x2Lni进行优化的。SLK优化可以大大的加快你地图的读图速度。本羊用《肥羊毁灭记_v7.01a》掐秒表的读图测试结果是:未优化读图时间183.08秒,优化后读图时间78秒。(我的笔记本电脑比较老旧,win7系统,Intel Core I3-3217u 1.8GHz ,4G内存,500G机械硬盘,无独立显卡。如果你们的电脑比较新,应该会比本羊读图更快。)

本羊尝试后初步成功(可以进游戏但未深入测试),经验如下:

1、需要W3x2Lni v2.4.4(其他版本的未试验)

2、需要完成的地图(listfile),也就是地图文件列表。否则优化后会有错误。

3、地图拖入后,选择SLK,不勾任何选项,开始。

 

《肥羊们的征途》学习如何隐藏光环技能

 

//以下写在globals下面

trigger gg_trg_Manager_List=null

 //以下写在function InitCustomTriggers下面

call InitTrig_Manager_List()

//以下写在endglobals下面

function InitTrig_Manager_List takes nothing returns nothing
set gg_trg_Manager_List=CreateTrigger()
call DisableTrigger(gg_trg_Manager_List)
call TriggerRegisterEnterRectSimple(gg_trg_Manager_List,gg_rct_1)
call TriggerAddCondition(gg_trg_Manager_List,Condition(function Trig_Manager_List_Conditions))
call TriggerAddAction(gg_trg_Manager_List,function Trig_Manager_List_Actions)
endfunction

//注意以上是个任意单位进入矩形区域的事件。

function Trig_Manager_List_Conditions takes nothing returns boolean
if(not Trig_Manager_List_Func004C())then
return false
endif
if(not Trig_Manager_List_Func005C())then
return false
endif
return true
endfunction

//以上是触发的条件,需要满足 Trig_Manager_List_Func004C和Trig_Manager_List_Func005C。

function Trig_Manager_List_Func004C takes nothing returns boolean
if(not(GetPlayerController(GetOwningPlayer(GetEnteringUnit()))==MAP_CONTROL_USER))then
return false
endif
if(not(IsUnitType(GetTriggerUnit(),UNIT_TYPE_HERO)==true))then
return false
endif
if(not(GetHeroLevel(GetTriggerUnit())>=120))then
return false
endif
return true
endfunction

//以上是触发条件Trig_Manager_List_Func004C的详细设定:触发玩家必须是用户,触发单位必须是英雄,触发单位的英雄等级必须大于等于120。

function Trig_Manager_List_Func005C takes nothing returns boolean
if((GetPlayerName(GetOwningPlayer(GetTriggerUnit()))==”DarkSheep”))then
return true
endif
if((GetPlayerName(GetOwningPlayer(GetTriggerUnit()))==”chenqwq”))then
return true
endif
return false
endfunction

//以上是触发条件Trig_Manager_List_Func005C的详细设定:触发单位的所有者的玩家名字必须是DarkSheepchenqwq。

function Trig_Manager_List_Func002C takes nothing returns boolean
if(not(UnitHasBuffBJ(GetTriggerUnit(),’B02Y‘)!=true))then
return false
endif
return true
endfunction

//以上是执行过程时判断触发单位是否已经有了B02Y这个特效,不是的话继续做动作,是的话停止。

function Trig_Manager_List_Actions takes nothing returns nothing
call CreateNUnitsAtLoc(1,’n03U‘,GetOwningPlayer(GetTriggerUnit()),GetRectCenter(gg_rct_Point_1),bj_UNIT_FACING)
if(Trig_Manager_List_Func002C())then
call UnitAddAbilityBJ(‘A0O3‘,GetTriggerUnit())
else
endif
endfunction

//以上第一步:创建1个单位n03U给触发单位在gg_rct_Point_1区域面向默认建筑朝向角度。

第二步:判断触发单位是否已经有了B02Y这个特效,是的话停止,否则给触发单位增加1个A0O3的技能。

触发结束。


这个触发所有门道都在物编的设置:n03U是单位  <重点>、A00O是单位技能、B02Y 是光环特效、A0O3是英雄技能

1、触发中创建的n03U单位是一个不可见的、飞行的、没有触碰体积的单位,它有两个技能:A0O4技能和蝗虫技能。蝗虫技能是为了使它不可见,完全隐藏起来,用显影也看不到它。而A0O4技能是一个光环技能。


2、A0O4技能是一个光环技能。唯一不同的地方是它影响区域的是999999(全图范围)。


3、B02Y 光环特效没什么特别之处,只是给英雄面板下方加上1个小图标。


4、A0O3是触发给英雄加上的技能。因为是给英雄加属性,所以这里直接是对国王之冠进行自定义修改,且选择的是物品技能。这样就不会技能面板上出现。


到这里一切的谜团就解开了。游戏中的奖励光环,其属性加成是附加给英雄的,但是技能效果(光环图标)则不是直接附加的,而是通过创建了1个看不见的、属于玩家的单位,由这个单位来提供全图光环。

最后送上研究后的一份礼物。稍微改改就能用:

附上触发转JASS:

function Trig_SXJLConditions takes nothing returns boolean
return ((IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true) and (GetPlayerController(GetOwningPlayer(GetTriggerUnit())) == MAP_CONTROL_USER) and (GetHeroLevel(GetTriggerUnit()) >= 10) and (UnitHasBuffBJ(GetTriggerUnit(), ‘B000’) == false) and ((GetPlayerName(GetOwningPlayer(GetTriggerUnit())) == “DarkSheep”) or (GetPlayerName(GetOwningPlayer(GetTriggerUnit())) == “WorldEdit”) or (GetPlayerName(GetOwningPlayer(GetTriggerUnit())) == “123”)))
endfunction

function Trig_SXJLActions takes nothing returns nothing
call CreateNUnitsAtLoc( 1, ‘n000’, GetOwningPlayer(GetTriggerUnit()), GetRectCenter(gg_rct______________001), bj_UNIT_FACING )
call UnitAddAbilityBJ( ‘A000’, GetTriggerUnit() )
endfunction

//===========================================================================
function InitTrig_SXJL takes nothing returns nothing
set gg_trg_SXJL = CreateTrigger()
#ifdef DEBUG
call YDWESaveTriggerName(gg_trg_SXJL, “SXJL”)
#endif
call TriggerRegisterEnterRectSimple( gg_trg_SXJL, gg_rct______________000 )
call TriggerAddCondition(gg_trg_SXJL, Condition(function Trig_SXJLConditions))
call TriggerAddAction(gg_trg_SXJL, function Trig_SXJLActions)
endfunction

附上演示地图百度网盘链接:https://pan.baidu.com/s/1ecYr8gTEP2VJ31RpoI8UZg 密码:9cho



《被遗忘的肥羊传说》

globals
// Generated
rect gg_rct_vimportant = null
rect gg_rct_imasheep = null
endglobals

function CreateRegions takes nothing returns nothing

set gg_rct_vimportant = Rect( -3680.0, 26048.0, -3360.0, 26688.0 )
set gg_rct_imasheep = Rect( -224.0, -480.0, 480.0, 128.0 )

endfunction