DOF/sqr/User/Asset/Item/Attribute.nut

190 lines
5.2 KiB
Plaintext

/*
文件名:Attribute.nut
路径:User/Asset/Item/Attribute.nut
创建日期:2025-02-10 07:00
文件用途:属性类
*/
class Attribute {
//最大生命值
HPMax = 0;
//最大魔法值
MPMax = 0;
//生命值回复速度
HPRegenSpeed = 0;
//魔法值回复速度
MPRegenSpeed = 0;
//跳跃力
JumpPower = 0;
//硬直
HitRecovery = 0;
//命中率
Stuck = 0;
//闪避率
StuckResistance = 0;
//力量
PhysicalAttack = 0;
//智力
MagicalAttack = 0;
//体力
PhysicalDefense = 0;
//精神
MagicalDefense = 0;
//所有属强
AllElementalAttack = 0;
//暗属强
DarkAttack = 0;
//光属强
LightAttack = 0;
//水属强
WaterAttack = 0;
//火属强
FireAttack = 0;
//物理攻击力
EquipmentPhysicalAttack = 0;
//魔法攻击力
EquipmentMagicalAttack = 0;
//独立攻击力
SeparateAttack = 0;
//物理防御力
EquipmentPhysicalDefense = 0;
//魔法防御力
EquipmentMagicalDefense = 0;
//攻击速度
AttackSpeed = 0;
//释放速度
CastSpeed = 0;
//移动速度
MoveSpeed = 0;
//跳跃速度
JumpSpeed = 0;
//物理暴击率
PhysicalCriticalHit = 0;
//魔法暴击率
MagicalCriticalHit = 0;
//暗属抗
DarkResistance = 0;
//光属抗
LightResistance = 0;
//水属抗
WaterResistance = 0;
//火属抗
FireResistance = 0;
//属性攻击
ElementalProperty = null;
constructor(Args) {
ElementalProperty = [];
//使用装备构造
if (typeof Args == "table") {
foreach(member, val in getconsttable().ATTRIBUTE) {
if (member != "ElementalProperty") {
//普通属性
if (Args.rawin(member)) {
this[member] = Args[member];
}
} else {
//属性攻击
if (Args.rawin(member)) {
switch (Args[member]) {
case "[dark element]":
this[member].push(0);
break;
case "[light element]":
this[member].push(1);
break;
case "[water element]":
this[member].push(2);
break;
case "[fire element]":
this[member].push(3);
}
}
}
}
}
//使用角色构造
else if (typeof Args == "Game_Character") {
local Info = sq_DeepCopy(Args.Info.Attribute[Args.GrowJob]);
Info.rawdelete("filepath");
foreach(Key, Value in Info) {
// print(Value);
if (Key == "HPMax" || Key == "MPMax" || Key == "PhysicalAttack" || Key == "MagicalAttack" || Key == "PhysicalDefense" || Key == "MagicalDefense")
this[Key] = Value * Args.Level;
else {
if (this.rawin(Key)) this[Key] = Value;
}
}
}
}
function _typeof() {
return "Attribute";
}
function _add(other) {
if (typeof other != "Attribute") throw "属性运算参数错误";
foreach(member, val in getconsttable().ATTRIBUTE) {
if (member != "ElementalProperty") {
this[member] += other[member];
} else {
foreach(EleType in other[member]) {
local index = this["ElementalProperty"].find(EleType);
if (!index) this["ElementalProperty"].push(EleType);
}
}
}
return this;
}
function _sub(other) {
if (typeof other != "Attribute") throw "属性运算参数错误";
foreach(member, val in getconsttable().ATTRIBUTE) {
if (member != "ElementalProperty") {
this[member] -= other[member];
} else {
foreach(EleType in other[member]) {
local index = this["ElementalProperty"].find(EleType);
if (index) this["ElementalProperty"].remove(index);
}
}
}
return this;
}
function _mul(other) {
foreach(member, val in getconsttable().ATTRIBUTE) {
if (member != "ElementalProperty") {
this[member] *= other;
}
}
return this;
}
function _div(other) {
foreach(member, val in getconsttable().ATTRIBUTE) {
if (member != "ElementalProperty") {
this[member] /= other;
}
}
return this;
}
function Show() {
foreach(member, val in getconsttable().ATTRIBUTE) {
if (member != "ElementalProperty") {
print(getconsttable().ATTRIBUTE[member] + " : " + this[member]);
} else {
print(getconsttable().ATTRIBUTE[member] + " : ");
print(this[member]);
}
}
}
}