111
This commit is contained in:
235
UI/TeamDps/TeamDps.nut
Normal file
235
UI/TeamDps/TeamDps.nut
Normal file
@@ -0,0 +1,235 @@
|
||||
/*
|
||||
文件名: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);
|
||||
}
|
||||
Reference in New Issue
Block a user