|
发表于 2009-6-23 17:22:04
|
显示全部楼层
那个就够了啊...最近我在做ai..
写了个伤害获取函数.
可以准确获取 任意2个单位间 任意次攻击 能实际造成多少伤害...
(事先要储存好 初始属性..)
之后都靠那些公式计算的
比如这个是最上级的函数..
[jass]function GetDamage takes integer u1,integer u2,boolean max returns real
local real dg=GetOtherHarm(udg_Data_Unit[u1],udg_Data_Unit[u2],max)
local real am=udg_UnitArmour[u2]
local integer type1=GetHandleInt(GetUnitTypeId(udg_Data_Unit[u1]),"Data")
local integer type2=GetHandleInt(GetUnitTypeId(udg_Data_Unit[u2]),"Data")
local real mdl=udg_DamageModulus[udg_BaseHarmType[type1]*8+udg_BaseArmourType[type2]]
if am>0 then
return GetArmour(udg_Data_Unit[u2],dg*mdl/(1+0.05*am))
elseif am<0 then
return GetArmour(udg_Data_Unit[u2],dg*mdl*(2+0.95*am))
else
return GetArmour(udg_Data_Unit[u2],dg*mdl)
endif
endfunction
// 0 , 0 ,1.66, 0 ,1.66, 0 , 0
//攻击类型 攻城(0),普通(1),法术(2),混乱(3),穿刺(4),英雄(5),魔法(6)
//护甲类型 小型(0),中型(1),大型(2),城墙(3),普通(4),英雄(5),神圣(6),无装甲(7)
//1.00,0.50,1.00,1.50,1.00,0.50,0.40,1.50
//1.00,1.50,0.80,0.70,1.00,1.00,0.40,1.20
//1.00,1.00,1.00,1.00,1.00,0.75,0.40,1.00
//1.00,1.00,1.00,1.00,1.00,1.00,1.00,1.00
//1.50,0.75,1.00,0.35,1.20,1.00,0.40,1.50
//1.00,1.00,1.00,0.50,1.00,1.00,0.80,1.00
//1.25,0.75,2.00,0.35,1.00,0.50,0.40,1.00
//1>. 当防御Def>0时,单位所受伤害%为1/(1+0.05*Def)
//2>. 当防御Def<0时,单位所受伤害%为 2-0.95^(-Def)[/jass] |
|