SoUI 0.5版本占坑
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

281 lines
10 KiB

globals
string bj_AllString=".................................!.#$%&'()*+,-./0123456789:;<=>.@ABCDEFGHIJKLMNOPQRSTUVWXYZ[.]^_`abcdefghijklmnopqrstuvwxyz{|}~................................................................................................................................"
//全局系统变量
unit bj_lastAbilityCastingUnit=null
unit bj_lastAbilityTargetUnit=null
unit bj_lastPoolAbstractedUnit=null
unitpool bj_lastCreatedUnitPool=null
item bj_lastPoolAbstractedItem=null
itempool bj_lastCreatedItemPool=null
attacktype bj_lastSetAttackType = ATTACK_TYPE_NORMAL
damagetype bj_lastSetDamageType = DAMAGE_TYPE_NORMAL
weapontype bj_lastSetWeaponType = WEAPON_TYPE_WHOKNOWS
real yd_MapMaxX = 0
real yd_MapMinX = 0
real yd_MapMaxY = 0
real yd_MapMinY = 0
private string array yd_PlayerColor
endglobals
//===========================================================================
//返回参数
//===========================================================================
//地图边界判断
function YDWECoordinateX takes real x returns real
return RMinBJ(RMaxBJ(x, yd_MapMinX), yd_MapMaxX)
endfunction
function YDWECoordinateY takes real y returns real
return RMinBJ(RMaxBJ(y, yd_MapMinY), yd_MapMaxY)
endfunction
//两个单位之间的距离
function YDWEDistanceBetweenUnits takes unit a,unit b returns real
return SquareRoot((GetUnitX(a)-GetUnitX(b))*(GetUnitX(a)-GetUnitX(b))+(GetUnitY(a)-GetUnitY(b))*(GetUnitY(a)-GetUnitY(b)))
endfunction
//两个单位之间的角度
function YDWEAngleBetweenUnits takes unit fromUnit, unit toUnit returns real
return bj_RADTODEG * Atan2(GetUnitY(toUnit) - GetUnitY(fromUnit), GetUnitX(toUnit) - GetUnitX(fromUnit))
endfunction
//生成区域
function YDWEGetRect takes real x,real y,real width, real height returns rect
return Rect( x - width*0.5, y - height*0.5, x + width*0.5, y + height*0.5 )
endfunction
//===========================================================================
//设置单位可以飞行
//===========================================================================
function YDWEFlyEnable takes unit u returns nothing
call UnitAddAbility(u,'Amrf')
call UnitRemoveAbility(u,'Amrf')
endfunction
//===========================================================================
//字符窜与ID转换
//===========================================================================
function YDWEId2S takes integer value returns string
local string charMap=bj_AllString
local string result = ""
local integer remainingValue = value
local integer charValue
local integer byteno
set byteno = 0
loop
set charValue = ModuloInteger(remainingValue, 256)
set remainingValue = remainingValue / 256
set result = SubString(charMap, charValue, charValue + 1) + result
set byteno = byteno + 1
exitwhen byteno == 4
endloop
return result
endfunction
function YDWES2Id takes string targetstr returns integer
local string originstr=bj_AllString
local integer strlength=StringLength(targetstr)
local integer a=0 //分部当前数字
local integer b=0 //当前处理字
local integer numx=1 //位权
local integer result=0
loop
exitwhen b>strlength-1
set numx=R2I(Pow(256,strlength-1-b))
set a=1
loop
exitwhen a>255
if SubString(targetstr,b,b+1)==SubString(originstr,a,a+1) then
set result=result+a*numx
set a=256
endif
set a=a+1
endloop
set b=b+1
endloop
return result
endfunction
function YDWES2UnitId takes string targetstr returns integer
return YDWES2Id(targetstr)
endfunction
function YDWES2ItemId takes string targetstr returns integer
return YDWES2Id(targetstr)
endfunction
function GetLastAbilityCastingUnit takes nothing returns unit
return bj_lastAbilityCastingUnit
endfunction
function GetLastAbilityTargetUnit takes nothing returns unit
return bj_lastAbilityTargetUnit
endfunction
function YDWESetMapLimitCoordinate takes real MinX,real MaxX,real MinY,real MaxY returns nothing
set yd_MapMaxX=MaxX
set yd_MapMinX=MinX
set yd_MapMaxY=MaxY
set yd_MapMinY=MinY
endfunction
//===========================================================================
//===========================================================================
//地图初始化
//===========================================================================
//YDWE特殊技能结束事件
globals
private trigger array AbilityCastingOverEventQueue
private integer array AbilityCastingOverEventType
private integer AbilityCastingOverEventNumber = 0
endglobals
function YDWESyStemAbilityCastingOverTriggerAction takes unit hero, integer index returns nothing
local integer i = 0
loop
exitwhen i >= AbilityCastingOverEventNumber
if AbilityCastingOverEventType[i] == index then
set bj_lastAbilityCastingUnit = hero
if AbilityCastingOverEventQueue[i] != null and TriggerEvaluate(AbilityCastingOverEventQueue[i]) and IsTriggerEnabled(AbilityCastingOverEventQueue[i]) then
call TriggerExecute(AbilityCastingOverEventQueue[i])
endif
endif
set i = i + 1
endloop
endfunction
//===========================================================================
//YDWE技能捕捉事件
//===========================================================================
function YDWESyStemAbilityCastingOverRegistTrigger takes trigger trg,integer index returns nothing
set AbilityCastingOverEventQueue[AbilityCastingOverEventNumber] = trg
set AbilityCastingOverEventType[AbilityCastingOverEventNumber] = index
set AbilityCastingOverEventNumber = AbilityCastingOverEventNumber + 1
endfunction
//===========================================================================
//系统函数完善
//===========================================================================
function YDWECreateUnitPool takes nothing returns nothing
set bj_lastCreatedUnitPool=CreateUnitPool()
endfunction
function YDWEPlaceRandomUnit takes unitpool up,player p,real x,real y,real face returns nothing //unitpool,player,real,real,real
set bj_lastPoolAbstractedUnit=PlaceRandomUnit(up,p,x,y,face)
endfunction
function YDWEGetLastUnitPool takes nothing returns unitpool
return bj_lastCreatedUnitPool
endfunction
function YDWEGetLastPoolAbstractedUnit takes nothing returns unit
return bj_lastPoolAbstractedUnit
endfunction
function YDWECreateItemPool takes nothing returns nothing
set bj_lastCreatedItemPool=CreateItemPool()
endfunction
function YDWEPlaceRandomItem takes itempool ip,real x,real y returns nothing //unitpool,player,real,real,real
set bj_lastPoolAbstractedItem=PlaceRandomItem(ip,x,y)
endfunction
function YDWEGetLastItemPool takes nothing returns itempool
return bj_lastCreatedItemPool
endfunction
function YDWEGetLastPoolAbstractedItem takes nothing returns item
return bj_lastPoolAbstractedItem
endfunction
function YDWESetAttackDamageWeaponType takes attacktype at,damagetype dt,weapontype wt returns nothing
set bj_lastSetAttackType=at
set bj_lastSetDamageType=dt
set bj_lastSetWeaponType=wt
endfunction
//unitpool bj_lastCreatedPool=null
//unit bj_lastPoolAbstractedUnit=null
function YDWEGetPlayerColorString takes player p, string s returns string
return yd_PlayerColor[GetHandleId(GetPlayerColor(p))] + s + "|r"
endfunction
//===========================================================================
//===========================================================================
//系统函数补充
//===========================================================================
//===========================================================================
function YDWEGetUnitItemSoftId takes unit hero,item it returns integer
local integer i = 0
loop
exitwhen i > 5
if UnitItemInSlot(hero, i) == it then
return i + 1
endif
set i = i + 1
endloop
return 0
endfunction
//===========================================================================
//===========================================================================
//地图初始化
//===========================================================================
//===========================================================================
//显示版本
function YDWEVersion_Display takes nothing returns boolean
call DisplayTimedTextToPlayer(GetTriggerPlayer(), 0, 0, 30,"|cFF1E90FF当前编辑器版本为: |r|cFF00FF00YDWE " + YDWE_VERSION_STRING)
return false
endfunction
function YDWEVersion_Init takes nothing returns nothing
local trigger t = CreateTrigger()
local integer i = 0
loop
exitwhen i == 12
call TriggerRegisterPlayerChatEvent(t, Player(i), "YDWE Version", true)
set i = i + 1
endloop
call TriggerAddCondition(t, Condition(function YDWEVersion_Display))
set t = null
endfunction
function InitializeYD takes nothing returns nothing
#if WARCRAFT_VERSION >= 124
# ifndef YDWE_HASH_INITVAR
# define YDWE_HASH_INITVAR
set YDHT=InitHashtable()
# endif
#else
# ifndef YDWE_HASH_INITVAR
# define YDWE_HASH_INITVAR
call FlushGameCache(InitGameCache("YDWE.wav"))
set YDGC=InitGameCache("YDWE.wav")
# endif
#endif
//=================设置变量=====================
set yd_MapMinX = GetCameraBoundMinX() - GetCameraMargin(CAMERA_MARGIN_LEFT)
set yd_MapMinY = GetCameraBoundMinY() - GetCameraMargin(CAMERA_MARGIN_BOTTOM)
set yd_MapMaxX = GetCameraBoundMaxX() + GetCameraMargin(CAMERA_MARGIN_RIGHT)
set yd_MapMaxY = GetCameraBoundMaxY() + GetCameraMargin(CAMERA_MARGIN_TOP)
set yd_PlayerColor [0] = "|cFFFF0303"
set yd_PlayerColor [1] = "|cFF0042FF"
set yd_PlayerColor [2] = "|cFF1CE6B9"
set yd_PlayerColor [3] = "|cFF540081"
set yd_PlayerColor [4] = "|cFFFFFC01"
set yd_PlayerColor [5] = "|cFFFE8A0E"
set yd_PlayerColor [6] = "|cFF20C000"
set yd_PlayerColor [7] = "|cFFE55BB0"
set yd_PlayerColor [8] = "|cFF959697"
set yd_PlayerColor [9] = "|cFF7EBFF1"
set yd_PlayerColor[10] = "|cFF106246"
set yd_PlayerColor[11] = "|cFF4E2A04"
set yd_PlayerColor[12] = "|cFF282828"
set yd_PlayerColor[13] = "|cFF282828"
set yd_PlayerColor[14] = "|cFF282828"
set yd_PlayerColor[15] = "|cFF282828"
//=================显示版本=====================
call YDWEVersion_Init()
endfunction