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