以下研究目前仅停留在理论,未实践。

1、首先在endglobals下面加上一句:

native DzAPI_Map_HasMallItem takes player whichPlayer, string key returns boolean

2、其次需要剥丝抽茧般一层一层找到VIP或者特权的对应触发。例如:

function InitTrig_dialog takes nothing returns nothing
set gg_trg_dialog=CreateTrigger()  //激活触发
call TriggerRegisterEnterRectSimple(gg_trg_dialog,gg_rct________226)  //触发事件
call TriggerAddCondition(gg_trg_dialog,Condition(function Trig_dialog_Conditions))  //触发条件
call TriggerAddAction(gg_trg_dialog,function Trig_dialog_Actions)  //触发动作
endfunction



在上面最关键的是触发条件:function Trig_dialog_Conditions,因此我们根据它再次定位。

function Trig_dialog_Conditions takes nothing returns boolean
if(not Trig_dialog_Func001C())then //触发条件1
return false
endif
if(not Trig_dialog_Func002C())then  //触发条件2
return false
endif
return true
endfunction

这里的条件又分成了2个条件,并且要同时满足。我们一个个来,先定位Trig_dialog_Func001C:

function Trig_dialog_Func001C 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())>=1))then  //判断英雄等级是否大于等于1
return false
endif
return true
endfunction

虽然对上面这种not的写法很迷糊,但是根据常理应该是以上三个判断条件都需要满足。且还需要满足Trig_dialog_Func002C中的条件才能触发,所以我们继续往下看。

function Trig_dialog_Func002C takes nothing returns boolean
if((GetPlayerName(GetOwningPlayer(GetTriggerUnit()))=="Dark"))then  //判断玩家的触发单位的名字
return true
endif
if((GetPlayerName(GetOwningPlayer(GetTriggerUnit()))=="Sheep"))then  //同上
return true
endif
return false
endfunction

我们通常在游戏一个玩家通常对应一个名字,所以上面的条件是二选一。由此可见,我们可以在以上触发中“做文章”。

function Trig_dialog_Func002C takes nothing returns boolean

if (DzAPI_Map_HasMallItem(GetOwningPlayer(GetTriggerUnit()), "DSEXRRPG01") == true) then
return true
endif

if((GetPlayerName(GetOwningPlayer(GetTriggerUnit()))=="Dark"))then
return true
endif
if((GetPlayerName(GetOwningPlayer(GetTriggerUnit()))=="Sheep"))then
return true
endif
return false
endfunction




测试结果:

1、前7次尝试

if (DzAPI_Map_HasMallItem(GetTriggerPlayer(), "DSEXRRPG01") == true) then //失败

if (DzAPI_Map_HasMallItem(Player(0), "DSEXRRPG01") == true) then //失败

if (DzAPI_Map_HasMallItem(GetOwningPlayer(GetTriggerUnit()), "DSEXRRPG01") == true) then //失败

2、第8次尝试,增加

globals
constant boolean LIBRARY_DzAPI=ture //失败

3、第9次尝试,删除其他条件。//失败

if((GetPlayerName(GetOwningPlayer(GetTriggerUnit()))=="FlySheep"))then
return true
endif
if((GetPlayerName(GetOwningPlayer(GetTriggerUnit()))=="陈丨丨丨"))then
return true
endif
if((GetPlayerName(GetOwningPlayer(GetTriggerUnit()))=="倚鹤望君归"))then
return true
endif
if((GetPlayerName(GetOwningPlayer(GetTriggerUnit()))=="poca3"))then
return true
endif




2018/05/13 晚。开始着手研究触发的动作。但结果:并没什么用……

function Trig_dialog_Actions takes nothing returns nothing
call IssueImmediateOrderBJ(GetAttacker(),"stop")
set udg_unit=GetEnteringUnit()
call DialogDisplayBJ(true,udg_dialog,GetOwningPlayer(GetEnteringUnit()))
endfunction




2018/05/14 我也是拼了。自己在WE上试着写触发。

事件
单位 - 任意单位进入 矩形区域 000 <预设>
条件
((触发单位) 是 英雄) 等于 TRUE
((触发单位) 的等级) 大于或等于 6
Or - 任意条件成立
条件
(((触发单位) 的所有者) 的名字) 等于 WorldEdit
(获取 ((触发单位) 的所有者) 是否拥有:DSEXRRPG01 对应的商城道具.) 等于 TRUE
动作
单位 - 杀死 (触发单位)

我似乎抓住了希望……

  1. 更新地图同时发布道具(道具的KEY只支持大写,和地图写的KEY要对应)
  2. 登录地图测试服--->自定义房间创建地图--->同步完成后点发布地图
  3. 用作者之家的帐号登录地图测试服--->查看平台背包确认是否获得道具-->进入游戏大厅的地图--->进游戏看看有效果么