jass看少了常常会忘记一些概念,新建此笔记用于记录。

一、GetConvertedPlayerId和GetPlayerId的区别

GetConvertedPlayerId,即(...)的玩家ID,输出的值是从1到16。

而GetPlayerId,即(...)的玩家ID-1,输出的值是从0-15。

所以,当看到local integer ID=GetPlayerId(GetOwningPlayer(u))+1时,定义的整数ID取值是从1开始。

二、给单位创建物品

if ((GetPlayerName(GetOwningPlayer(GetTriggerUnit())) == "会飞的羊")) then
call UnitAddItemByIdSwapped('I00X',GetEnteringUnit())
else
endif

三、Player(整数)

local integer id=0

call SetPlayerTechResearched(Player(id),'R02B',0)

Player(0)对应的是玩家1(红色),依次类推。


四、Jass触发器和Jass计时器

其实未经优化的war3map.j和经优化的war3map.j的对比。
先说未经优化的war3map.j。

//首先是会在全局变量这里声明一个触发器的变量
globals
trigger gg_trg_zhiling=null
endglobals
//触发器条件
function Trig_zhilingConditions takes nothing returns boolean
return((0==0))
endfunction
//触发器动作
function Trig_zhilingActions takes nothing returns nothing
call BJDebugMsg("耶耶耶耶耶耶耶耶耶耶耶耶")
endfunction
//触发器事件,这里给变量gg_trg_zhiling赋值为新建触发
function InitTrig_zhiling takes nothing returns nothing
set gg_trg_zhiling=CreateTrigger()
call TriggerRegisterPlayerChatEvent(gg_trg_zhiling,Player(0),"111",true)
call TriggerAddCondition(gg_trg_zhiling,Condition(function Trig_zhilingConditions))
call TriggerAddAction(gg_trg_zhiling,function Trig_zhilingActions)
endfunction
//未经优化的war3map.j里有个InitCustomTriggers函数,里面调用了InitTrig_zhiling函数
function InitCustomTriggers takes nothing returns nothing
call InitTrig_zhiling()
endfunction
//而在main主函数里,又调用了InitCustomTriggers函数
function main takes nothing returns nothing
call InitCustomTriggers()
endfunction

下面来说下经优化的war3map.j的情况

//主要是main主函数里没有调用了InitCustomTriggers函数,但是又把变量gg_trg_zhiling赋值为新建触发
function main takes nothing returns nothing
set gg_trg_zhiling=CreateTrigger()
call TriggerRegisterPlayerChatEvent(gg_trg_zhiling,Player(0),"111",true)
call TriggerAddCondition(gg_trg_zhiling,Condition(function Trig_zhilingConditions))
call TriggerAddAction(gg_trg_zhiling,function Trig_zhilingActions)
endfunction
//我尝试着把这三行注释掉,改成call InitCustomTriggers()。但是创建地图时会直接闪退。百思不得其解。

解决办法:直接用jass触发的写法,而不是T转J的写法。这样不用去globals里声明全局变量,也不用往InitCustomTriggers里调用。

//非计时器触发
function a takes nothing returns nothing
local trigger 触发名字 = CreateTrigger()
call 事件
call 动作
endfunction

//计时器触发

function bc takes nothing returns nothing
call BJDebugMsg("帅哥")
endfunction

function b takes nothing returns nothing
local timer 计时器名字 = CreateTimer()
call TimerStart(计时器名字,时间,是否循环,function bc)
endfunction

//直接在main函数调用
function main takes nothing returns nothing
call a()
call b()
endfunction

四、图标显示位置

显示-按钮位置(x,y)
即为该类型单位按钮位置,如果有位置相同的,则按排序排(挤)在后面。
(0,0) (1,0) (2,0) (3,0)
(0,1) (1,1) (2,1) (3,1)
(0,2) (1,2) (2,2) (3,2)