Sqr/character/atmage/darknessmantle/po_atdarknessmantle.nut

892 lines
24 KiB
Plaintext

function createBlackCrackPaticle(obj, x, y, z)
{
if(!obj)
return;
local particleCreater = obj.getVar().GetparticleCreaterMap("CrackBlackPtl", "PassiveObject/Character/Mage/Particle/ATDarknessMantleCrack.ptl", obj);
particleCreater.Restart(0);
particleCreater.SetPos(x, y, z);
sq_AddParticleObject(obj, particleCreater);
}
function createCrackPiece(obj, index, x, y, z)
{
if(!obj)
return null;
local pooledObj = null;
local cx = 0;
local cy = 0;
local cz = 0;
//obj.getVar("crackpos").push_vector(0);
//obj.getVar("crackpos").push_vector(0);
//obj.getVar("crackpos").push_vector(0);
//obj.getVar("crackpos").push_vector(0);
//obj.getVar("crackpos").push_vector(0);
//obj.getVar("crackpos").push_vector(0);
if(index == 0)
{
//pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge.ani", false, x, y, z);
cx = x - 30;
cy = y + 2;
cz = z + 174;
pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/08_crack_back_normal_50.ani", false, cx, cy, cz);
}
else if(index == 1)
{
//pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge_1.ani", false, x, y, z);
cx = x + 45;
cy = y + 1;
cz = z + 118;
pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/08_crack_back_normal_50.ani", false, cx, cy, cz);
}
else if(index == 2)
{
//pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge_2.ani", false, x, y, z);
cx = x + 8;
cy = y + 1;
cz = z + 50;
pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/08_crack_back_normal_50.ani", false, cx, cy, cz);
}
local vectorIndex = index * 2;
obj.getVar("crackpos").set_vector(vectorIndex + 0, cx);
obj.getVar("crackpos").set_vector(vectorIndex + 1, cz);
return pooledObj;
}
function createDarkBall(obj, x, y, z)
{
local pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/darkball/09_darkball_0.ani", false, x, y, z);
return pooledObj;
}
function createFrontFirstDarknessArea(obj, x, y, z, widthRate, heightRate)
{
local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/01/05_aura_front_normal_1.ani", false, widthRate, heightRate, x, y, z);
return pooledObj;
}
function createBackFirstDarknessArea(obj, x, y, z, widthRate, heightRate)
{
local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/01/01_aura_back_normal_1.ani", false, widthRate, heightRate, x, y, z);
return pooledObj;
}
function createFrontFirstSDarknessArea(obj, x, y, z, widthRate, heightRate)
{
local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/01/05_aura_front_normal_2.ani", false, widthRate, heightRate, x, y, z);
return pooledObj;
}
function createBackFirstSDarknessArea(obj, x, y, z, widthRate, heightRate)
{
local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/01/01_aura_back_normal_2.ani", false, widthRate, heightRate, x, y, z);
return pooledObj;
}
function createFrontLoopDarknessArea(obj, x, y, z, widthRate, heightRate)
{
local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Loop/05_aura_front_normal_1.ani", false, widthRate, heightRate, x, y, z);
return pooledObj;
}
function createBackLoopDarknessArea(obj, x, y, z, widthRate, heightRate)
{
local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Loop/01_aura_back_normal_1.ani", false, widthRate, heightRate, x, y, z);
return pooledObj;
}
function createFrontLoopSDarknessArea(obj, x, y, z, widthRate, heightRate)
{
local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Loop/05_aura_front_normal_2.ani", false, widthRate, heightRate, x, y, z);
return pooledObj;
}
function createBackLoopSDarknessArea(obj, x, y, z, widthRate, heightRate)
{
local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Loop/01_aura_back_normal_2.ani", false, widthRate, heightRate, x, y, z);
return pooledObj;
}
function destroyCrackObject(obj)
{
if(!obj)
return;
local objListSize = obj.getVar("crack").get_obj_vector_size();
print(" crack objListSize:" + objListSize);
for(local i =0;i<objListSize;++i)
{
local crackObj = obj.getVar("crack").get_obj_vector(i);
if(crackObj == null)
continue;
crackObj.setValid(false);
}
obj.getVar("crack").clear_obj_vector();
}
function setPosXCrackObject(obj, cx)
{
local objListSize = obj.getVar("crack").get_obj_vector_size();
for(local i =0;i<objListSize;++i)
{
local vObj = obj.getVar("crack").get_obj_vector(i);
if(vObj == null)
continue;
sq_setCurrentAxisPos(vObj, 0, cx);
}
}
function procCrackDarknessCircle(obj) // 敕翮桧 陬击 阳 掘羹陛 ?菟葬朝 籀葬
{
if(!obj)
return;
local circle_obj = obj.getVar().get_obj_vector(0); // 掘
if(!circle_obj)
return;
local x = sq_GetXPos(circle_obj);
local y = sq_GetYPos(circle_obj);
local z = sq_GetZPos(circle_obj);
local vib = false;
local objListSize = obj.getVar().get_obj_vector_size();
for(local i =1;i<objListSize;++i)
{
local crackObj = obj.getVar().get_obj_vector(i);
if(crackObj == null)
continue;
local ani = sq_GetCurrentAnimation(crackObj);
local frmIndex = sq_GetAnimationFrameIndex(ani);
print( " exp i:" + i + " frmIndex:" + frmIndex);
if(frmIndex >= 1)
{
local expVectorIndex = i - 1;
if(!obj.getVar("crackexp").get_vector(expVectorIndex))
{
sq_SetMyShake(obj, 2, 100);
local ox = sq_GetXPos(obj);
local oy = y + 1;
local oz = sq_GetZPos(obj);
local crackPooledObj = null;
if(expVectorIndex == 0)
crackPooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge.ani", false, ox, oy, oz);
else if(expVectorIndex == 1)
crackPooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge_1.ani", false, ox, oy, oz);
else if(expVectorIndex == 2)
crackPooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge_2.ani", false, ox, oy, oz);
obj.getVar("crack").push_obj_vector(crackPooledObj);
local vectorIndex = (expVectorIndex) * 2;
//
local cx = obj.getVar("crackpos").get_vector(vectorIndex + 0);
local cz = obj.getVar("crackpos").get_vector(vectorIndex + 1);
//
local particleCreater = obj.getVar().GetparticleCreaterMap("ATDarknessMantlePtl", "PassiveObject/Character/Mage/Particle/Appear.ptl", obj);
//
particleCreater.Restart(0);
particleCreater.SetPos(cx, y + 5, cz);
sq_AddParticleObject(obj, particleCreater);
//
createBlackCrackPaticle(obj, cx, y + 4, cz);
//
obj.getVar("crackexp").set_vector(expVectorIndex, 1);
}
}
if(frmIndex >= 1 && frmIndex < 4)
{
vib = true;
}
}
local cx = obj.getVar("darkcircle").get_vector(0);
if(vib)
{
if(x <= cx)
{
sq_setCurrentAxisPos(circle_obj, 0, cx + 2);
setPosXCrackObject(obj, cx + 2);
}
else
{
sq_setCurrentAxisPos(circle_obj, 0, cx - 2);
setPosXCrackObject(obj, cx - 2);
}
}
else
{
if(x != cx)
{
sq_setCurrentAxisPos(circle_obj, 0, cx);
setPosXCrackObject(obj, cx);
}
}
}
function setCustomData_po_ATDarknessMantle(obj, reciveData)
{
if(!obj) return;
local suckVel = reciveData.readDword(); // 0. 庄横渡晦朝 ?
// 0.匐擎晦遴 彰嫔 (<-100%->) 1.裔?奢问溘(%) 2.菩?溯涟 3.菩?虽楼溯涟
local darkCircleRate = reciveData.readDword(); // 横菸怃赝 彰嫔 (100%)
local expAtkRate = reciveData.readDword(); // 1.裔?奢问溘(%)
local slowLevel = reciveData.readDword(); // 菩? 溯涟
local slowTime = reciveData.readDword(); // 菩? 虽楼卫除
local sizeRate = reciveData.readDword(); // 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%)
// 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%)
obj.getVar("sizerate").clear_vector();
obj.getVar("sizerate").push_vector(sizeRate);
obj.getVar("attack").clear_vector();
obj.getVar("attack").push_vector(suckVel);
obj.getVar("attack").push_vector(darkCircleRate);
obj.getVar("attack").push_vector(expAtkRate);
obj.getVar("attack").push_vector(slowLevel);
obj.getVar("attack").push_vector(slowTime);
obj.getVar("flag").clear_vector();
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("state").clear_vector(); // state vector
obj.getVar("state").push_vector(PASSIVEOBJ_SUB_STATE_0);
obj.getVar("state").clear_ct_vector();
obj.getVar("state").push_ct_vector();
obj.getVar("crackexp").clear_vector();
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackpos").clear_vector();
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crack").clear_obj_vector();
obj.getVar("create").clear_vector();
obj.getVar("create").push_vector(1);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
function setState_po_ATDarknessMantle(obj, state, datas)
{
if(!obj) return;
local passiveState = state;
obj.getVar("flag").clear_vector();
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("crackexp").clear_vector();
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackpos").clear_vector();
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("state").set_vector(0, passiveState);
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
local t = obj.getVar("state").get_ct_vector(0);
t.Reset();
t.Start(10000,0);
//obj.getVar("attack").push_vector(suckVel);
//obj.getVar("attack").push_vector(darkCircleRate);
//obj.getVar("attack").push_vector(expAtkRate);
//obj.getVar("attack").push_vector(slowLevel);
//obj.getVar("attack").push_vector(slowTime);
//.tointeger()
//.tofloat()
local area100Rate = obj.getVar("attack").get_vector(VECTOR_FLAG_1);
local areaRate = area100Rate.tofloat() / 100.0;
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
local po1 = createBackFirstDarknessArea(obj, x, y - 25, 0, areaRate, areaRate);
local po2 = createFrontFirstDarknessArea(obj, x, y + 50, 0, areaRate, areaRate);
local po3 = createBackFirstSDarknessArea(obj, x, y - 22, 0, areaRate, areaRate);
local po4 = createFrontFirstSDarknessArea(obj, x, y + 20, 0, areaRate, areaRate);
destroyObject(obj);
obj.getVar().push_obj_vector(po1);
obj.getVar().push_obj_vector(po2);
obj.getVar().push_obj_vector(po3);
obj.getVar().push_obj_vector(po4);
local currentAni = sq_GetCurrentAnimation(obj);
if(currentAni)
{
//currentAni.setImageRateFromOriginal(areaRate, areaRate);
currentAni.applyBoundingBoxRate(areaRate,0,0); //
}
initGetVarTimer(obj, 1, 30, -1);
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
//local po1 = createBackLoopDarknessArea(obj, x, y - 25, 0, areaRate, areaRate);
//local po2 = createFrontLoopDarknessArea(obj, x, y + 50, 0, areaRate, areaRate);
//local po3 = createBackLoopSDarknessArea(obj, x, y - 22, 0, areaRate, areaRate);
//local po4 = createFrontLoopSDarknessArea(obj, x, y + 20, 0, areaRate, areaRate);
local ani = obj.getCustomAnimation(0);
if(ani)
obj.setCurrentAnimation(ani);
//destroyObject(obj);
//
//local loopAni = po2.getCurrentAnimation();
//local size = sq_GetAniRealImageSize(loopAni, ENUM_DIRECTION_RIGHT);
//
//obj.getVar("attack").push_vector(size);
//
//obj.getVar().push_obj_vector(po1);
//obj.getVar().push_obj_vector(po2);
//obj.getVar().push_obj_vector(po3);
//obj.getVar().push_obj_vector(po4);
local currentAni = sq_GetCurrentAnimation(obj);
if(currentAni)
{
currentAni.applyBoundingBoxRate(areaRate,0,0); //
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{
local po1 = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Release/01_aura_back_normal_1.ani", true, areaRate, areaRate, x, y - 25, 0);
local po2 = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Release/05_aura_front_normal_1.ani", true, areaRate, areaRate, x, y + 50, 0);
local po3 = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Release/01_aura_back_normal_2.ani", true, areaRate, areaRate, x, y - 22, 0);
local po4 = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Release/05_aura_front_normal_2.ani", true, areaRate, areaRate, x, y + 20, 0);
destroyObject(obj);
local ani = obj.getCustomAnimation(1);
if(ani)
obj.setCurrentAnimation(ani);
local p5 = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Suck/07_absorb_normal_50r.ani", false, x + 3, y + 10, 110);
obj.getVar().push_obj_vector(p5);
local parentObj = obj.getParent();
// 庄横菟桧朝 横?蛤虽 陛翕
local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, SKILL_DARKNESSMANTLE, false, "Character/ATMage/DarknessMantle/ap_ATDarknessMantle_suck.nut", false);
local suckVel = obj.getVar("attack").get_vector(VECTOR_FLAG_0);
local range = obj.getVar("attack").get_vector(VECTOR_FLAG_5);
if(appendage)
{
//appendage.sq_SetValidTime(3000);
// 罹晦怃 append 蒙机
CNSquirrelAppendage.sq_Append(appendage, parentObj, obj);
local auraAppendage = appendage.sq_getAuraMaster("auraMaster");
//
if(!auraAppendage)
auraAppendage = appendage.sq_AddAuraMaster("auraMaster", parentObj, obj, 1200, 18, 5, 0);
if(auraAppendage)
{
auraAppendage.setAttractionInfo(suckVel, suckVel, range, 100);
}
//
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_3)
{
local cx = x + 3;
local cy = y + 10;
local cz = 110;
local poBall = createDarkBall(obj, cx, cy, cz);
destroyObject(obj);
//4183
//6515
obj.getVar().push_obj_vector(poBall); // 0
obj.getVar("darkcircle").clear_vector();
obj.getVar("darkcircle").push_vector(cx);
obj.getVar("darkcircle").push_vector(cy);
obj.getVar("darkcircle").push_vector(cz);
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_4)
{
local cx = x;
local cy = y + 12;
local cz = 0;
local expStartObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/16_exp_start.ani", false, cx, cy, cz);
obj.getVar().push_obj_vector(expStartObj); // 4
}
local atk = sq_GetCurrentAttackInfo(obj);
if(atk)
{
local slowLevel = obj.getVar("attack").get_vector(VECTOR_FLAG_3);
local slowTime = obj.getVar("attack").get_vector(VECTOR_FLAG_4);
sq_SetChangeStatusIntoAttackInfo(atk, 0, ACTIVESTATUS_SLOW, 100, slowLevel, slowTime);
}
}
function allDestroy(obj)
{
if(!obj)
return;
destroyObject(obj);
destroyCrackObject(obj);
local parentObj = obj.getParent();
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "Character/ATMage/DarknessMantle/ap_ATDarknessMantle_suck.nut");
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
function destroy_po_ATDarknessMantle(obj)
{
destroyObject(obj);
destroyCrackObject(obj);
local parentObj = obj.getParent();
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "Character/ATMage/DarknessMantle/ap_ATDarknessMantle_suck.nut");
}
function reset_po_ATDarknessMantle(obj)
{
}
function procAppend_po_ATDarknessMantle(obj)
{
if(!obj) return;
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
local passiveState = obj.getVar("state").get_vector(0);
local objListSize = obj.getVar().get_obj_vector_size();
local pAni = sq_GetCurrentAnimation(obj);
local frmIndex = sq_GetAnimationFrameIndex(pAni);
//local currentT = sq_GetCurrentTime(pAni);
//local currentT = obj.getStateTimer().Get();
local t = obj.getVar("state").get_ct_vector(0);
local currentT = 0;
if(t)
{
currentT = t.Get();
}
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
if(frmIndex > 1)
procParticleCreaterMap(obj, currentT, "PassiveObject/Character/Mage/Particle/mmagic_dark.ptl", x, y, z);
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
if(objListSize > 0)
{
local p1 = obj.getVar().get_obj_vector(0);
local p2 = obj.getVar().get_obj_vector(1);
local p3 = obj.getVar().get_obj_vector(2);
local p4 = obj.getVar().get_obj_vector(3);
}
if(currentT > 1000)
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
else
{
procParticleCreaterMap(obj, currentT, "PassiveObject/Character/Mage/Particle/mmagic_dark.ptl", x, y, z);
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{
local darkCircleObj = obj.getVar().get_obj_vector(0); // 2
local ani = sq_GetCurrentAnimation(darkCircleObj);
if(sq_IsEnd(ani))
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_3, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_3)
{
if(currentT > 20)
{
local crack0 = obj.getVar().get_obj_vector(1);
local crack1 = obj.getVar().get_obj_vector(2);
local crack2 = obj.getVar().get_obj_vector(3);
local cy = y + 11;
if(!obj.getVar("flag").get_vector(0))
{
local p6 = createCrackPiece(obj, 0, x, cy, 0);
obj.getVar().push_obj_vector(p6); // 1
obj.getVar("flag").set_vector(0, 1);
}
if(obj.getVar("flag").get_vector(0) == 1)
{
if(!obj.getVar("flag").get_vector(1))
{
local ani = sq_GetCurrentAnimation(crack0);
local frmIndex = sq_GetAnimationFrameIndex(ani);
if(frmIndex >= 3)
{
local p6 = createCrackPiece(obj, 1, x, cy, 0);
obj.getVar().push_obj_vector(p6); // 2
obj.getVar("flag").set_vector(1, 1);
}
}
}
if(obj.getVar("flag").get_vector(1) == 1)
{
if(!obj.getVar("flag").get_vector(2))
{
local ani = sq_GetCurrentAnimation(crack1);
local frmIndex = sq_GetAnimationFrameIndex(ani);
if(frmIndex >= 3)
{
local p6 = createCrackPiece(obj, 2, x, cy, 0);
obj.getVar().push_obj_vector(p6); //3
obj.getVar("flag").set_vector(2, 1);
}
}
}
if(!obj.getVar("flag").get_vector(3))
{
local ani = sq_GetCurrentAnimation(crack2);
local frmIndex = sq_GetAnimationFrameIndex(ani);
if(frmIndex >= 3)
{
obj.getVar("flag").set_vector(3, 1);
}
}
procCrackDarknessCircle(obj);
local objListSize = obj.getVar().get_obj_vector_size();
if(objListSize >= 4)
{
local isEndAnimation = true; // 敕翮 拥栖诡桧暮桧 部陬朝虽 羹觼
for(local i =1;i<objListSize;++i)
{
local obj = obj.getVar().get_obj_vector(i);
if(obj == null)
continue;
local ani = sq_GetCurrentAnimation(obj);
local isEnd = sq_IsEnd(ani);
if(!isEnd)
isEndAnimation = false;
}
if(isEndAnimation)
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_4, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
}
}
// PASSIVEOBJ_SUB_STATE_3
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_4)
{
local expStartObj = obj.getVar().get_obj_vector(4); // exp
if(expStartObj)
{
local ani = sq_GetCurrentAnimation(expStartObj);
local isEnd = sq_IsEnd(ani);
if(!obj.getVar("flag").get_vector(1))
{
local expFrmIndex = sq_GetAnimationFrameIndex(ani);
if(expFrmIndex >= 2)
{
local fScreen = sq_flashScreen(obj,0,100,0,200, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.getVar("flag").set_vector(1, 1);
}
}
if(isEnd)
{
print(" exp:" + obj.getVar("flag").get_vector(0));
if(!obj.getVar("flag").get_vector(0))
{
destroyCrackObject(obj);
if(obj.isMyControlObject())
{
local expAtkRate = obj.getVar("attack").get_vector(VECTOR_FLAG_2);
sq_BinaryStartWrite();
sq_BinaryWriteDword(expAtkRate); //
// 觼煎栖赝 嬴桧蛊 跷陛蒙机
// 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%)
local size100Rate = 100;
if(obj.getVar("sizerate").get_vector(0) > 0)
{
size100Rate = obj.getVar("sizerate").get_vector(0);
}
sq_BinaryWriteDword(size100Rate); //
///////////////////////////////////
sq_SendCreatePassiveObjectPacket(obj, 24253, 0, 0, 1, 0, obj.getDirection());
}
obj.getVar("flag").set_vector(0, 1);
allDestroy(obj);
}
}
}
else
{
allDestroy(obj);
}
}
}
function onChangeSkillEffect_po_ATDarknessMantle(obj, skillIndex, reciveData)
{
if(!obj) return;
}
function onDestroyObject_po_ATDarknessMantle(obj, object)
{
if(!obj) return;
}
function onKeyFrameFlag_po_ATDarknessMantle(obj, flagIndex)
{
}
function onEndCurrentAni_po_ATDarknessMantle(obj)
{
if(!obj) return;
local passiveState = obj.getVar("state").get_vector(0);
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
local area100Rate = obj.getVar("attack").get_vector(VECTOR_FLAG_1);
local areaRate = area100Rate.tofloat() / 100.0;
local po1 = createBackLoopDarknessArea(obj, x, y - 25, 0, areaRate, areaRate);
local po2 = createFrontLoopDarknessArea(obj, x, y + 50, 0, areaRate, areaRate);
local po3 = createBackLoopSDarknessArea(obj, x, y - 22, 0, areaRate, areaRate);
local po4 = createFrontLoopSDarknessArea(obj, x, y + 20, 0, areaRate, areaRate);
destroyObject(obj);
local loopAni = po2.getCurrentAnimation();
local size = sq_GetAniRealImageSize(loopAni, ENUM_DIRECTION_RIGHT);
obj.getVar("attack").push_vector(size);
obj.getVar().push_obj_vector(po1);
obj.getVar().push_obj_vector(po2);
obj.getVar().push_obj_vector(po3);
obj.getVar().push_obj_vector(po4);
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{
}
}
function onAttack_po_ATDarknessMantle(obj, damager, boundingBox, isStuck)
{
if(!obj) return 0;
local pChr = obj.getTopCharacter();
if(!pChr) return 0;
local active_damager = sq_GetCNRDObjectToActiveObject(damager);
if(!active_damager)
return 0;
CNSquirrelAppendage.sq_AppendAppendage(damager, damager, SKILL_DARKNESSMANTLE,
false, "Character/ATMage/DarknessMantle/ap_ATDarknessMantle_effect.nut", true);
return 0;
}