Sqr/character/atmage/frozenland/po_atfrozenlandmagiccircle.nut

517 lines
16 KiB
Plaintext
Raw Normal View History

2024-03-18 21:37:40 +08:00
S_PO_FROZENLAND_MC_0 <- 10
S_PO_FROZENLAND_MC_1 <- 11
S_PO_FROZENLAND_MC_2 <- 12
S_PO_FROZENLAND_MC_3 <- 13
S_PO_FROZENLAND_MC_4 <- 14
S_PO_FROZENLAND_MC_5 <- 15
function insertIceFog(obj, dx, dy, dz)
{
if(!obj)
return;
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
local particleCreater = obj.getVar().GetparticleCreaterMap("fronzenLand", "PassiveObject/Character/Mage/Particle/ATFrozenLand.ptl", obj);
particleCreater.Restart(0);
particleCreater.SetPos(x + dx, y + dy, z + dz);
//print(" insertIceFog:" + particleCreater);
sq_AddParticleObject(obj, particleCreater);
}
function setCustomData_po_ATFrozenLandMagicCircle(obj, reciveData)
{
if(!obj) return;
local radiusRate = reciveData.readDword(); // 卫瞪彰嫔 (葆彻霞 虽荤 绿徽 : 100%~)
local spinNum = reciveData.readDword(); // 晦菅桧 釭颤釭怃 薯濠葬缣怃 蝶?击 紫朝 热
local spinTime = reciveData.readDword(); // 模辨给桧 药怃 陛遴等煎 菟横螃朝 卫除
local multiHitTerm = reciveData.readDword(); // 晦菅 棻钦?? 除问
local multiHitAttackRate = reciveData.readDword(); // 晦菅 棻钦?? 奢问溘 (%)
local expAttackRate = reciveData.readDword(); // 晦菅 ?嫦 奢问溘 (%)
local frozenRate = reciveData.readDword(); // 彩念 ?徽
local frozenLevel = reciveData.readDword(); // 彩念 溯涟
local frozenTime = reciveData.readDword(); // 彩念 卫除
// 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻.
local spinAddTime = reciveData.readDword(); // 模辨给桧陛 议葛搅 舆渗击 ?瞪?朝 卫除 (0.001蟾钦嫔)
obj.getVar("state").clear_vector(); // state vector
obj.getVar("state").push_vector(0);
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("flag").push_vector(0);
obj.getVar("basePos").clear_vector();
obj.getVar("basePos").push_vector(0);
obj.getVar("basePos").push_vector(0);
obj.getVar("basePos").push_vector(0);
obj.getVar("flag").clear_timer_vector();
obj.getVar("flag").push_timer_vector();
obj.getVar("icefog").clear_vector();
obj.getVar("icefog").push_vector(0);
local t = obj.getVar("flag").get_timer_vector(0);
t.setParameter(50, 1);
t.resetInstant(0);
//radiusRate = 100;
obj.getVar("radius").clear_vector();
obj.getVar("radius").push_vector(radiusRate); //
obj.getVar("radius").push_vector(0); // setstate煎 setcurrentanimation 胀 拥栖诡桧暮 亿煎遴 绿徽
obj.getVar("radius").push_vector(spinNum); // 2 蝶?偎热
obj.getVar("radius").push_vector(spinTime); // 3 模辨给桧 药怃 陛遴等煎 菟横螃朝 卫除
obj.getVar("attack").clear_vector();
obj.getVar("attack").push_vector(multiHitTerm); //
obj.getVar("attack").push_vector(multiHitAttackRate); //
obj.getVar("attack").push_vector(expAttackRate); //
obj.getVar("attack").push_vector(frozenRate); //
obj.getVar("attack").push_vector(frozenLevel); //
obj.getVar("attack").push_vector(frozenTime); //
// 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻.
obj.getVar("spin").clear_vector();
obj.getVar("spin").push_vector(spinAddTime); //
if(obj.isMyControlObject()) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, radiusRate);
obj.addSetStatePacket(S_PO_FROZENLAND_MC_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
function setState_po_ATFrozenLandMagicCircle(obj, state, datas)
{
if(!obj) return;
local passiveState = state;
obj.getVar("state").set_vector(0, passiveState);
obj.getVar("flag").set_vector(VECTOR_FLAG_0, 0);
initGetVarTimer(obj, 1, 400, 10);
if(passiveState == S_PO_FROZENLAND_MC_0) {
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
obj.getVar("basePos").set_vector(0, x);
obj.getVar("basePos").set_vector(1, y);
obj.getVar("basePos").set_vector(2, z);
local atk = sq_GetCurrentAttackInfo(obj);
if(atk)
{
local frozenRate = obj.getVar("attack").get_vector(3);
local frozenLevel = obj.getVar("attack").get_vector(4);
local frozenTime = obj.getVar("attack").get_vector(5);
print(" frozenRate:" + frozenRate);
sq_SetChangeStatusIntoAttackInfo(atk, 0, ACTIVESTATUS_FREEZE, frozenRate, frozenLevel, frozenTime);
}
}
else if(passiveState == S_PO_FROZENLAND_MC_1) {
}
else if(passiveState == S_PO_FROZENLAND_MC_2) {
local ani = obj.getCustomAnimation(0);
obj.setCurrentAnimation(ani);
}
else if(passiveState == S_PO_FROZENLAND_MC_3) {
}
else if(passiveState == S_PO_FROZENLAND_MC_4) {
local ani = obj.getCustomAnimation(1);
obj.setCurrentAnimation(ani);
}
if(passiveState != S_PO_FROZENLAND_MC_3)
{
local radius100Rate = obj.getVar("radius").get_vector(0);
local radiusRate = (radius100Rate.tofloat() / 100.0);
local currentAni = sq_GetCurrentAnimation(obj);
currentAni.setImageRateFromOriginal(radiusRate, radiusRate);
local size = (sq_GetAniRealImageSize(currentAni, ENUM_DIRECTION_RIGHT) / 2) + 60;
obj.getVar("radius").set_vector(1, size);
}
//radius100Rate
}
function procAppend_po_ATFrozenLandMagicCircle(obj)
{
if(!obj) return;
local pChr = obj.getTopCharacter();
if(!pChr) {
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
return;
}
local objX = sq_GetXPos(obj);
local objY = sq_GetYPos(obj);
local objZ = sq_GetZPos(obj);
local state = obj.getVar("state").get_vector(0);
local passiveState = state;
local pAni = sq_GetCurrentAnimation(obj);
local frmIndex = sq_GetAnimationFrameIndex(pAni);
if(passiveState == S_PO_FROZENLAND_MC_0) {
// 罹晦 passivestate缣怃朝 晦菅 ?卫粽螃粽薛?菟击 虏蛙栖棻..
if(frmIndex >= 2) {
if(obj.getVar("flag").get_vector(VECTOR_FLAG_0) == 0) {
if(obj.isMyControlObject()) {
//obj.getVar("attack").push_vector(multiHitTerm); //
//obj.getVar("attack").push_vector(multiHitAttackRate); //
//obj.getVar("attack").push_vector(expAttackRate); //
//obj.getVar("attack").push_vector(frozenRate); //
//obj.getVar("attack").push_vector(frozenLevel); //
//obj.getVar("attack").push_vector(frozenTime); //
local radius100Rate = obj.getVar("radius").get_vector(0);
local radiusRate = (radius100Rate.tofloat() / 100.0);
local size = (sq_GetAniRealImageSize(pAni, ENUM_DIRECTION_RIGHT) / 2) + 60;
obj.getVar("radius").set_vector(1, size);
local radiusSize = obj.getVar("radius").get_vector(1);
local spinNum = obj.getVar("radius").get_vector(2);
local spinTime = obj.getVar("radius").get_vector(3);
local multiHitTerm = obj.getVar("attack").get_vector(0);
local multiHitAttackRate = obj.getVar("attack").get_vector(1);
// 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻.
local spinAddTime = obj.getVar("spin").get_vector(0);
sq_BinaryStartWrite();
sq_BinaryWriteDword(0); //
sq_BinaryWriteDword(0); //
sq_BinaryWriteDword(radiusSize); //
sq_BinaryWriteDword(spinNum); //
sq_BinaryWriteDword(spinTime); //
sq_BinaryWriteDword(multiHitTerm); //
sq_BinaryWriteDword(multiHitAttackRate); //
sq_BinaryWriteDword(spinAddTime); //
sq_SendCreatePassiveObjectPacketFromPassivePos( obj, 24248, 0, 0, 0, 0);
sq_BinaryStartWrite();
sq_BinaryWriteDword(180); //
sq_BinaryWriteDword(1); //
sq_BinaryWriteDword(radiusSize); //
sq_BinaryWriteDword(spinNum); //
sq_BinaryWriteDword(spinTime); //
sq_BinaryWriteDword(multiHitTerm); //
sq_BinaryWriteDword(multiHitAttackRate); //
sq_BinaryWriteDword(spinAddTime); //
sq_SendCreatePassiveObjectPacketFromPassivePos( obj, 24248, 0, 0, 0, 0);
//obj.getVar().set_vector(1, 1);
}
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(S_PO_FROZENLAND_MC_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
obj.getVar("flag").set_vector(VECTOR_FLAG_0, 1);
}
local currentT = sq_GetCurrentTime(pAni);
//procParticleCreaterMap(obj, currentT, "PassiveObject/Character/Mage/Particle/ATFrozenLand.ptl", objX, objY + 5, objZ);
//insertIceFog(obj, 0, 5, 0);
}
}
else if(passiveState == S_PO_FROZENLAND_MC_1) {
}
else if(passiveState == S_PO_FROZENLAND_MC_2) {
// 罹晦 ?卫粽蝶才桧?缣怃朝 晦菅桧 桡横螺朝虽 ?樯?坚 棻 桡横螺棻贼 ?嫦?卫粽螃粽薛?蒂 当撩?怃 棻挤蝶才桧?煎 setstate?栖棻.
if(obj.getVar("flag").get_vector(VECTOR_FLAG_0) == 0)
{
local pole_passive_obj = sq_GetPassiveObject(obj, 24248);
if(!pole_passive_obj)
{
local parentObj = obj.getParent();
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "Appendage/Character/ap_common_suck.nut");
if(obj.isMyControlObject()) {
local radius100Rate = obj.getVar("radius").get_vector(0);
local radiusRate = (radius100Rate.tofloat() / 100.0);
local currentAni = sq_GetCurrentAnimation(obj);
local size = (sq_GetAniRealImageSize(currentAni, ENUM_DIRECTION_RIGHT) / 2) + 60;
obj.getVar("radius").set_vector(1, size);
local radiusSize = obj.getVar("radius").get_vector(1);
local expAttackRate = obj.getVar("attack").get_vector(2); //
sq_BinaryStartWrite();
sq_BinaryWriteDword(radiusSize); //
sq_BinaryWriteDword(expAttackRate); // ?嫦奢问溘
sq_BinaryWriteDword(radius100Rate); // 怃赝 ?渠 绿徽
local cx = obj.getVar("basePos").get_vector(0);
local cy = obj.getVar("basePos").get_vector(1);
local cz = obj.getVar("basePos").get_vector(2);
sq_SendCreatePassiveObjectPacket(obj, 24249, 0, 0, 1, 0, obj.getDirection());
//sq_SendCreatePassiveObjectPacketFromPassivePos( obj, 24249, 0, cx, cy, cz); // ?嫦 ?卫粽螃粽薛?
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(S_PO_FROZENLAND_MC_3, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
obj.getVar("flag").set_vector(VECTOR_FLAG_0, 1);
}
else
{
if(obj.getVar("flag").get_vector(VECTOR_FLAG_2) == 0)
{
local poleState = pole_passive_obj.getState();
if(poleState == S_PO_FROZENLAND_POLE_1 || poleState == S_PO_FROZENLAND_POLE_2)
{
local poleAni = pole_passive_obj.getCurrentAnimation();
local frmIndex = sq_GetAnimationFrameIndex(poleAni);
if(frmIndex >= 1)
{
// CNFlashScreen* sq_flashScreen(CNRDObject* obj, int inTime, int stayTime, int outTime,
// int maxAlpha, DWORD rbga, int effectType, int layerType)
sq_SetMyShake(obj,4,200);
local poleAniFrameNumber = sq_GetAniFrameNumber(poleAni, 0);
local poleAniDelayTime = poleAni.getDelaySum(0, poleAniFrameNumber - 1);
local poleAniLoopTime = poleAni.getDelaySum(3, poleAniFrameNumber - 1);
local spinNum = obj.getVar("radius").get_vector(2);
local spinTime = obj.getVar("radius").get_vector(3);
local totalSpinPoleDelaySum = ((spinNum - 1) * poleAniLoopTime) + poleAniDelayTime - 80;
totalSpinPoleDelaySum = totalSpinPoleDelaySum + spinTime;
// 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻.
totalSpinPoleDelaySum = totalSpinPoleDelaySum + obj.getVar("spin").get_vector(0);
//print( " spinNum:" + spinNum + " poleAniDelayTime:" + poleAniDelayTime + " poleAniLoopTime:" + poleAniLoopTime + " spinTime:" + spinTime + " totalSpinPoleDelaySum:" + totalSpinPoleDelaySum);
if(obj.isMyControlObject())
{
local fScreen = sq_flashScreen(obj,0,totalSpinPoleDelaySum,0,140, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
}
obj.getVar("flag").set_vector(VECTOR_FLAG_2, 1);
}
}
}
if(!obj.getVar("flag").get_vector(VECTOR_FLAG_3))
{
local poleState = pole_passive_obj.getState();
if(poleState == S_PO_FROZENLAND_POLE_2)
{
print(" appendage suck");
local parentObj = obj.getParent();
// 庄横菟桧朝 横?蛤虽 陛翕
local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, SKILL_FROZENLAND, false, "Appendage/Character/ap_common_suck.nut", false);
local suckVel = 200;
local radiusSize = obj.getVar("radius").get_vector(1);
local range = radiusSize * 2;
if(appendage)
{
appendage.sq_SetValidTime(2000);
// 罹晦怃 append 蒙机
CNSquirrelAppendage.sq_Append(appendage, parentObj, obj);
local auraAppendage = appendage.sq_getAuraMaster("frozenAura");
//
if(!auraAppendage)
auraAppendage = appendage.sq_AddAuraMaster("frozenAura",parentObj, obj, 1200, 18, 5, 0);
auraAppendage.setAttractionInfo(suckVel, suckVel, range, 100);
}
//
obj.getVar("flag").set_vector(VECTOR_FLAG_3, 1);
obj.sq_PlaySound("ICEEARTH_SPIN");
}
}
}
}
}
else if(passiveState == S_PO_FROZENLAND_MC_3) {
// 罹晦 ?卫粽蝶才桧?缣怃朝 ?嫦 ?卫粽暧 拥栖诡桧暮 ?溯歜击 ?樯?怃 饵塭虽啪 ?栖棻.
if(obj.getVar("flag").get_vector(VECTOR_FLAG_0) == 0)
{
local exp_passive_obj = sq_GetPassiveObject(obj, 24249);
if(exp_passive_obj)
{
if(exp_passive_obj.getState() == S_PO_FROZENLAND_1)
{
local exp_ani = sq_GetCurrentAnimation(exp_passive_obj);
local exp_frm_index = sq_GetAnimationFrameIndex(exp_ani);
if(exp_frm_index >= 4)
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(S_PO_FROZENLAND_MC_4, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
obj.getVar("flag").set_vector(VECTOR_FLAG_0, 1);
}
}
}
}
}
local t = obj.getVar("flag").get_timer_vector(0);
if(passiveState == S_PO_FROZENLAND_MC_2)
{
if(obj.getVar("flag").get_vector(VECTOR_FLAG_2) == 1)
{
local currentT = sq_GetCurrentTime(pAni);
if(t.isOnEvent(currentT) == true)
{
local radius = obj.getVar("radius").get_vector(1);
//
//local offset = 20;
local index = obj.getVar("icefog").get_vector(0);
local size = 3;
local iKeyList =[];
iKeyList.resize(size);
iKeyList[0] = ((radius * 2) / 3);
iKeyList[1] = -(radius * 2) / 3;
iKeyList[2] = 0;
print(" iKeyList[0]:" + iKeyList[0]);
print(" iKeyList[1]:" + iKeyList[1]);
insertIceFog(obj, iKeyList[0], 2, 40);
insertIceFog(obj, iKeyList[1], 2, 40);
insertIceFog(obj, iKeyList[2], 2, 40);
print(" insertIceFog:" + iKeyList[index]);
index = index + 1;
if(index > 2)
{
index = 0;
}
index = obj.getVar("icefog").set_vector(0, index);
}
}
}
}
function onDestroyObject_po_ATFrozenLandMagicCircle(obj, object)
{
if(!obj) return;
}
function onKeyFrameFlag_po_ATFrozenLandMagicCircle(obj, flagIndex)
{
}
function onEndCurrentAni_po_ATFrozenLandMagicCircle(obj)
{
if(!obj) return;
if(!obj.isMyControlObject()) return;
local state = obj.getVar("state").get_vector(0);
local passiveState = state;
if(passiveState == S_PO_FROZENLAND_MC_0) {
//local pIntVec = sq_GetGlobalIntVector();
//
//sq_IntVectorClear(pIntVec);
//sq_IntVectorPush(pIntVec, 0);
//
//obj.addSetStatePacket(S_PO_FROZENLAND_MC_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
else if(passiveState == S_PO_FROZENLAND_MC_1) {
}
else if(passiveState == S_PO_FROZENLAND_MC_2) {
}
else if(passiveState == S_PO_FROZENLAND_MC_4) {
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
}