/* 文件名:TeamDps.nut 路径:UI/TeamDps/TeamDps.nut 创建日期:2023-01-26 05:15 文件用途:团队DPS */ function onSetHp_appendage_dps(appendage, hp, attacker) { if (!appendage) { return hp; } local parentObj = appendage.getParent(); local sourceObj = appendage.getSource(); local RootTab = getroottable(); if (RootTab.rawin("TEAMDPSCONTROLOBJECT")) RootTab["TEAMDPSCONTROLOBJECT"].onSetHp(appendage, hp, attacker); return hp; } class TeamDps extends BasicsDrawTool { MyDamage = 0; TeamDpsTimer = null; GetTeamDpsTimer = null; PackSize = 0; DPSSTL = {}; function TeamDpsPack(chunk) { local RootTab = getroottable(); if (RootTab.rawin("TEAMDPSCONTROLOBJECT") == false)return; local TObj = RootTab["TEAMDPSCONTROLOBJECT"]; local TeamDpsPack = Json_STL("TeamDpsPack"); TeamDpsPack.Parse(chunk, 0, false); TObj.PackSize = TeamDpsPack.Get("PACKSIZE"); for (local i = 0; i < TObj.PackSize; ++i) { local tab = ["Player", "0", "0%", "0.0"]; tab[0] = TeamDpsPack.Get("PACK->" + i + "->NAME"); tab[1] = TeamDpsPack.Get("PACK->" + i + "->DAMAGE"); tab[2] = TeamDpsPack.Get("PACK->" + i + "->RATE"); tab[3] = TeamDpsPack.Get("PACK->" + i + "->RATENUM"); if (tab[0] != false && tab[1] != false && tab[2] != false && tab[3] != false) TObj.DPSSTL.rawset(i, tab); } TeamDpsPack.Delete(); } constructor() { //构造同步Timer TeamDpsTimer = TimeSTL("TeamDpsTimer", 5000); TeamDpsTimer.Start(); GetTeamDpsTimer = TimeSTL("GetTeamDpsTimer", 5000); GetTeamDpsTimer.Start(); Pack_Control.rawset(614, TeamDpsPack); } //AP成员函数 function onSetHp(Append, Hp, Attacker) { if (!Append) return Hp; local MonsterObj = sq_GetCNRDObjectToActiveObject(Append.getParent()); //获取怪物 local Chr = sq_GetCNRDObjectToSQRCharacter(sq_getMyCharacter()); //获取我自己 if (!MonsterObj || !Chr) //如果怪物或者我自己不存在设置AP销毁 { Append.setValid(false); return Hp; } //if(!MonsterObj.isMyControlObject()) return Hp; //如果怪物对象是我的角色直接返回 local MonsterHp = MonsterObj.getHp(); //获取怪物当前生命值 if (Attacker == null && MonsterHp > Hp) //如果攻击者为空 并且 当前生命值大于要设置的生命值 { if (!Chr.isEnemy(MonsterObj)) return Hp; //如果怪物和我不是敌对直接返回 local DamageHp = MonsterHp - Hp; //得到这次掉的血 if (DamageHp < 2147483647) { //MyDamage += DamageHp; return Hp; } } if (Attacker != null && sq_IsMyControlObject(Attacker) && MonsterHp > Hp) //如果攻击者是我自己 并且 当前生命值大于要设置的生命值 { if (!Chr.isEnemy(MonsterObj)) return Hp; //如果怪物和我不是敌对直接返回 local DamageHp = MonsterHp - Hp; //得到这次掉的血 if (DamageHp < 2147483647) { MyDamage += DamageHp; return Hp; } } return Hp; } //绘制函数 function DrawDpsFunc(obj) { //print(TEAMDPSCONTROL.DPSSTL[0][0]); //print(TEAMDPSCONTROL.DPSSTL[0][1]); local Psize = 4; local Base_X = 20; local Base_Y = 120; T_DrawDynamicAni(obj, "common/dps/maintop.ani", Base_X, Base_Y, "maintop"); //绘制Dps上边栏 for (local i = 0; i < PackSize; i++) { T_DrawDynamicAni(obj, "common/dps/main.ani", Base_X, Base_Y + 41 + (i * 22), "main"); //绘制Dps中间栏 if (DPSSTL.rawin(i)) { T_DrawDynamicAni(obj, "common/dps/dps.ani", Base_X + 8, Base_Y + 22 + (i * 28), "mainslot" + i); //绘制Dps中间槽底 local Rate = DPSSTL[i][3].tofloat(); setClip(Base_X + 8, Base_Y + 22 + (i * 28), Base_X + 8 + (160.0 * Rate).tointeger(), Base_Y + 22 + (i * 28) + 18); //开始裁切 T_DrawDynamicAni(obj, "common/dps/dps" + (i + 1) + ".ani", Base_X + 8, Base_Y + 22 + (i * 28), "mainslotc" + i); //绘制Dps中间槽 releaseClip(); //裁切结束 L_Code_STL(DPSSTL[i][0], Base_X + 10, Base_Y + 24 + (i * 28), 0xFFFFFFFF, 0); L_Code_STL(DPSSTL[i][1].tostring(), Base_X + 94, Base_Y + 24 + (i * 28), 0xFFFFFFFF, 0); local RateStr = DPSSTL[i][2].tostring(); local RateStrLen = RateStr.len(); L_Code_STL(RateStr, Base_X + 164 - (RateStrLen * 5), Base_Y + 24 + (i * 28), 0xFFFFFFFF, 0); } } T_DrawDynamicAni(obj, "common/dps/mainbotton.ani", Base_X, Base_Y + 41 + (PackSize * 22), "mainbotton"); //绘制Dps下边栏 //T_DrawDynamicAni(obj, "common/dps/maintop.ani", Base_X, Base_Y, "maintop"); /* for(local i = 0; i < 4; ++i) { if(DPSSTL.rawin(i)) { L_Code_STL(DPSSTL[i][0], 28, 110 + (i * 24), 0xFFFFFFFF, 1); L_Code_STL(DPSSTL[i][1].tostring() + " " + DPSSTL[i][2].tostring(), 148, 110 + (i * 24), 0xFFFFFFFF, 1); } } */ } //常规成员函数 function exit() { TeamDpsTimer.Reset(); TeamDpsTimer.Delete(); GetTeamDpsTimer.Reset(); GetTeamDpsTimer.Delete(); DPSSTL.rawdelete(0); DPSSTL.rawdelete(1); DPSSTL.rawdelete(2); DPSSTL.rawdelete(3); } function Run(obj) { if (TeamDpsTimer.Get() >= 1700) { local TeamDpsBuffer = Json_STL("TeamDpsBuffer"); TeamDpsBuffer.Put("op", 611); TeamDpsBuffer.Put("DAMAGE", MyDamage); local str = TeamDpsBuffer.GetString(); L_sq_SendPackType(130); L_sq_SendPackWChar(str); L_sq_SendPack(); TeamDpsBuffer.Delete(); MyDamage = 0; TeamDpsTimer.Reset(); TeamDpsTimer.Start(); } if (GetTeamDpsTimer.Get() >= 3000) { local TeamDpsBuffer = Json_STL("GetTeamDpsBuffer"); TeamDpsBuffer.Put("op", 613); local str = TeamDpsBuffer.GetString(); L_sq_SendPackType(130); L_sq_SendPackWChar(str); L_sq_SendPack(); TeamDpsBuffer.Delete(); GetTeamDpsTimer.Reset(); GetTeamDpsTimer.Start(); } DrawDpsFunc(obj); } } function TeamDPS(obj) { if (!obj) return false; //如果人物不存在则返回 local RootTab = getroottable(); //建立时间容器 if (RootTab.rawin("TeamDpsMonTimer") == false) { local Buf = TimeSTL("TeamDpsMonTimer", 500); Buf.Start(); RootTab.rawset("TeamDpsMonTimer", Buf); } if (sq_GetCurrentModuleType() != 3 && sq_GetCurrentModuleType() != 10 && sq_GetCurrentModuleType() != 12 && sq_GetCurrentModuleType() != 13) { if (RootTab.rawin("TEAMDPSCONTROLOBJECT")) { RootTab["TEAMDPSCONTROLOBJECT"].exit(); RootTab.rawdelete("TEAMDPSCONTROLOBJECT"); } return false; //如果不是处于副本中则返回 } if (RootTab["TeamDpsMonTimer"].Get() >= 500) { RootTab["TeamDpsMonTimer"].Reset(); RootTab["TeamDpsMonTimer"].Start(); local objectManager = obj.getObjectManager(); if (objectManager) { local CollisionObjectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < CollisionObjectNumber; ++i) { local Monobject = objectManager.getCollisionObject(i); Monobject = sq_GetCNRDObjectToActiveObject(Monobject); if (Monobject && Monobject.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(Monobject)) { if (!CNSquirrelAppendage.sq_IsAppendAppendage(Monobject, "appendage/teamdps/dps.nut")) { CNSquirrelAppendage.sq_AppendAppendage(Monobject, obj, -1, false, "appendage/teamdps/dps.nut", true); } } } } } if (!RootTab.rawin("TEAMDPSCONTROLOBJECT")) { local Buffer = TeamDps(); RootTab.rawset("TEAMDPSCONTROLOBJECT", Buffer); } RootTab["TEAMDPSCONTROLOBJECT"].Run(obj); }