495 lines
9.9 KiB
Plaintext
495 lines
9.9 KiB
Plaintext
|
|
|
|||
|
|
S_PO_ATCL_0 <- 10
|
|||
|
|
S_PO_ATCL_1 <- 11
|
|||
|
|
S_PO_ATCL_2 <- 12
|
|||
|
|
|
|||
|
|
VI_SKL_0 <- 0 // 0. 籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??)
|
|||
|
|
VI_SKL_1 <- 1 // 1.籀挤 颤啃?卫 X蹴 卫蒙 剪葬
|
|||
|
|
VI_SKL_2 <- 2 // 2.籀挤 颤啃?卫 X蹴 部 剪葬
|
|||
|
|
VI_SKL_3 <- 3 // 3.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬
|
|||
|
|
VI_SKL_4 <- 4 // 4.颤问? 瞳暧 譆渠 堪桧
|
|||
|
|
|
|||
|
|
VI_SKL_5 <- 5 // 5.葭觼 譆渠 偎热
|
|||
|
|
VI_SKL_6 <- 6 // 6.虽楼卫除
|
|||
|
|
VI_SKL_7 <- 7 // 7.奢问溘(%)
|
|||
|
|
VI_SKL_8 <- 8 // 8.棻钦?? ?热
|
|||
|
|
VI_SKL_9 <- 9 // 9.棻钦?? 除问
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
function sendChangeRotateObject(obj)
|
|||
|
|
{
|
|||
|
|
if (!obj)
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
if (!obj.isMyControlObject())
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
local chr = obj.getTopCharacter();
|
|||
|
|
|
|||
|
|
if (!chr)
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
local objectManager = obj.getObjectManager();
|
|||
|
|
|
|||
|
|
if (!objectManager)
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
local stage = sq_GetObjectManagerStage(obj);
|
|||
|
|
local control = stage.getMainControl();
|
|||
|
|
|
|||
|
|
local zPos = obj.getZPos();
|
|||
|
|
local xPos = objectManager.getFieldXPos(IMouse.GetXPos(), ENUM_DRAWLAYER_NORMAL);
|
|||
|
|
local yPos = objectManager.getFieldYPos(IMouse.GetYPos(), zPos, ENUM_DRAWLAYER_NORMAL);
|
|||
|
|
|
|||
|
|
// 夥塭尔朝 嫔纂缣 评塭怃 擅戏煎虏 ??紫烟 ?栖棻.
|
|||
|
|
local offset = xPos - obj.getXPos();
|
|||
|
|
local len = sq_Abs(offset);
|
|||
|
|
local direction = sq_GetDirection(chr);
|
|||
|
|
|
|||
|
|
if (direction == ENUM_DIRECTION_LEFT)
|
|||
|
|
{
|
|||
|
|
xPos = obj.getXPos() - len;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
xPos = obj.getXPos() + len;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sq_BinaryStartWrite();
|
|||
|
|
sq_BinaryWriteDword(xPos);
|
|||
|
|
sq_BinaryWriteDword(yPos);
|
|||
|
|
sq_BinaryWriteDword(zPos);
|
|||
|
|
|
|||
|
|
sq_SendChangeSkillEffectPacket(obj, SKILL_WINDPRESS);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
function setCustomData_po_CreatorWindPress(obj, reciveData)
|
|||
|
|
{
|
|||
|
|
if (!obj) return;
|
|||
|
|
|
|||
|
|
// 棻钦?? 除问
|
|||
|
|
local multiHitTerm = reciveData.readDword();
|
|||
|
|
// 颤问剪葬
|
|||
|
|
local hitLen = reciveData.readDword();
|
|||
|
|
// 模赅榆
|
|||
|
|
local consume = reciveData.readDword();
|
|||
|
|
// 颤问陕紫
|
|||
|
|
local rangeDir = reciveData.readDword();
|
|||
|
|
// 奢问溘
|
|||
|
|
local power = reciveData.readDword();
|
|||
|
|
|
|||
|
|
obj.getVar("rangeDir").clear_vector();
|
|||
|
|
obj.getVar("rangeDir").push_vector(rangeDir);
|
|||
|
|
|
|||
|
|
obj.getVar("targetLen").clear_vector();
|
|||
|
|
obj.getVar("targetLen").push_vector(hitLen);
|
|||
|
|
|
|||
|
|
obj.getVar("consume").clear_vector();
|
|||
|
|
obj.getVar("consume").push_vector(consume);
|
|||
|
|
|
|||
|
|
obj.getVar("state").clear_vector();
|
|||
|
|
obj.getVar("state").push_vector(0);
|
|||
|
|
|
|||
|
|
|
|||
|
|
local atk = sq_GetCurrentAttackInfo(obj);
|
|||
|
|
|
|||
|
|
if (atk)
|
|||
|
|
{
|
|||
|
|
sq_SetCurrentAttackPower(atk, power);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (obj.isMyControlObject())
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
local x = obj.getXPos();
|
|||
|
|
local y = obj.getYPos();
|
|||
|
|
local z = obj.getZPos();
|
|||
|
|
|
|||
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|||
|
|
|
|||
|
|
sq_IntVectorClear(pIntVec);
|
|||
|
|
sq_IntVectorPush(pIntVec, x);
|
|||
|
|
sq_IntVectorPush(pIntVec, y);
|
|||
|
|
sq_IntVectorPush(pIntVec, z);
|
|||
|
|
|
|||
|
|
obj.addSetStatePacket(S_PO_ATCL_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
obj.getVar().clear_ct_vector();
|
|||
|
|
obj.getVar().push_ct_vector();
|
|||
|
|
|
|||
|
|
local t = obj.getVar().get_ct_vector(0);
|
|||
|
|
t.Reset();
|
|||
|
|
t.Start(10000,0);
|
|||
|
|
|
|||
|
|
local term = multiHitTerm;
|
|||
|
|
initGetVarTimer(obj, 2, term, -1);
|
|||
|
|
|
|||
|
|
sendChangeRotateObject(obj);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
function procRotateObjAnimation(obj, posX, posY, posZ)
|
|||
|
|
{
|
|||
|
|
if (!obj) return;
|
|||
|
|
//if (!pTargetChr) return;
|
|||
|
|
|
|||
|
|
local X = obj.getXPos();
|
|||
|
|
local Y = obj.getYPos();
|
|||
|
|
local Z = obj.getZPos();
|
|||
|
|
|
|||
|
|
|
|||
|
|
local pAni = obj.getCurrentAnimation();
|
|||
|
|
|
|||
|
|
if (!pAni)
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
if (posX == -1)
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
local offset = posX - X;
|
|||
|
|
if (offset < 0)
|
|||
|
|
{
|
|||
|
|
obj.setCurrentDirection(ENUM_DIRECTION_LEFT);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
obj.setCurrentDirection(ENUM_DIRECTION_RIGHT);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
local distance = sq_GetDistance( X, Y - Z, posX, posY - posZ, true);
|
|||
|
|
|
|||
|
|
local w = posX - X;
|
|||
|
|
local h = (posY - posZ) - (Y - Z);
|
|||
|
|
|
|||
|
|
// 褒薯陕紫蒂 掘?狱棻.
|
|||
|
|
//local tan = sq_Atan2( h.tofloat(), w.tofloat());
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (w < 0) w = -w;
|
|||
|
|
// ?贼鼻暧 陕紫蒂 掘?怃 桧??蒂 赁紫釭 给溥捡 肾朝虽 掘?棻.
|
|||
|
|
local width = sq_Abs(posX - X);
|
|||
|
|
local angle = sq_Atan2( h.tofloat(), width.tofloat());
|
|||
|
|
|
|||
|
|
local angleDir = sq_ToDegree(angle);
|
|||
|
|
//print( " angleDir:" + angleDir);
|
|||
|
|
|
|||
|
|
// 彰嫔 扑姜
|
|||
|
|
local rangeDir = obj.getVar("rangeDir").get_vector(0);
|
|||
|
|
|
|||
|
|
local r = rangeDir / 2;
|
|||
|
|
local d = sq_Abs(angleDir.tointeger());
|
|||
|
|
|
|||
|
|
if (angleDir < 0)
|
|||
|
|
{
|
|||
|
|
// ?啗陕紫蒂 剩横除棻贼..
|
|||
|
|
if (d > r)
|
|||
|
|
angleDir = -r;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (d > r)
|
|||
|
|
angleDir = r;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//print( " rangeDir:" + angleDir);
|
|||
|
|
|
|||
|
|
angle = sq_ToRadian(angleDir.tofloat());
|
|||
|
|
//
|
|||
|
|
local orgAngle = angle;
|
|||
|
|
angle = -angle;
|
|||
|
|
|
|||
|
|
local nRevision = distance;
|
|||
|
|
|
|||
|
|
// 奢问滓? 蛔烟 襞襞?啪 蛔烟?棻..
|
|||
|
|
sq_ClearAttackBox(pAni);
|
|||
|
|
//
|
|||
|
|
local dis = 580;
|
|||
|
|
//local realSize = 600;
|
|||
|
|
local targetLen = obj.getVar("targetLen").get_vector(0);
|
|||
|
|
local realSize = targetLen; //
|
|||
|
|
local partNum = 10;
|
|||
|
|
|
|||
|
|
local partLen = realSize.tofloat() / partNum.tofloat();
|
|||
|
|
local revision = 30;
|
|||
|
|
|
|||
|
|
for (local i = 0; i < partNum; i++)
|
|||
|
|
{
|
|||
|
|
local attackL = 100;
|
|||
|
|
local zAttackL = 60;
|
|||
|
|
|
|||
|
|
local attackPosX = revision.tofloat() * sq_Cos(orgAngle);
|
|||
|
|
local attackPosY = revision.tofloat() * sq_Sin(orgAngle);
|
|||
|
|
|
|||
|
|
sq_AddAttackBox(pAni,
|
|||
|
|
attackPosX.tointeger() - (attackL / 2),
|
|||
|
|
attackPosY.tointeger(),
|
|||
|
|
-zAttackL,
|
|||
|
|
attackL, attackL, (zAttackL * 2) );
|
|||
|
|
|
|||
|
|
revision = revision + partLen.tointeger();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
sq_SetfRotateAngle(pAni, angle);
|
|||
|
|
|
|||
|
|
|
|||
|
|
local cos_x = dis.tofloat() * sq_Cos(angle);
|
|||
|
|
local sin_y = dis.tofloat() * sq_Sin(angle);
|
|||
|
|
|
|||
|
|
//print("angle:" + angle);
|
|||
|
|
|
|||
|
|
local nW = sq_Abs( cos_x.tointeger() );
|
|||
|
|
local nH = sq_Abs( sin_y.tointeger() );
|
|||
|
|
|
|||
|
|
local wRate = 1.0;
|
|||
|
|
local hRate = 1.0;
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (nW != 0.0 && realSize != 0.0)
|
|||
|
|
{
|
|||
|
|
wRate = realSize.tofloat() / nW.tofloat();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//if (nW != 0.0 && width != 0.0)
|
|||
|
|
//{
|
|||
|
|
// wRate = width.tofloat() / nW.tofloat();
|
|||
|
|
//}
|
|||
|
|
//if (h != 0.0 && nH != 0.0)
|
|||
|
|
//{
|
|||
|
|
//hRate = h.tofloat() / nH.tofloat();
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
//print(" wRate:" + wRate + " hRate:" + hRate + " nH:" + nH + " h:" + h + " angle:" + angle);
|
|||
|
|
|
|||
|
|
pAni.setImageRateFromOriginal(wRate.tofloat(), hRate.tofloat());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
function procAppend_po_CreatorWindPress(obj)
|
|||
|
|
{
|
|||
|
|
if (!obj)
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
|
|||
|
|
local pChr = obj.getTopCharacter();
|
|||
|
|
|
|||
|
|
local state = obj.getVar("state").get_vector(0);
|
|||
|
|
|
|||
|
|
if (!pChr)
|
|||
|
|
{
|
|||
|
|
if (state == S_PO_ATCL_0)
|
|||
|
|
{
|
|||
|
|
if (obj.isMyControlObject())
|
|||
|
|
{
|
|||
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|||
|
|
|
|||
|
|
sq_IntVectorClear(pIntVec);
|
|||
|
|
sq_IntVectorPush(pIntVec, 0);
|
|||
|
|
obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
|
|||
|
|
}
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (obj.isMyControlObject())
|
|||
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (pChr.getState() != STATE_WINDPRESS)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if (state == S_PO_ATCL_0)
|
|||
|
|
{
|
|||
|
|
if (obj.isMyControlObject())
|
|||
|
|
{
|
|||
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|||
|
|
|
|||
|
|
sq_IntVectorClear(pIntVec);
|
|||
|
|
sq_IntVectorPush(pIntVec, 0);
|
|||
|
|
|
|||
|
|
obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
|
|||
|
|
}
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
else if (state == S_PO_ATCL_1)
|
|||
|
|
{
|
|||
|
|
if (obj.isMyControlObject())
|
|||
|
|
{
|
|||
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sendChangeRotateObject(obj);
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (state == S_PO_ATCL_0)
|
|||
|
|
{
|
|||
|
|
// 蝶颤? 拥栖诡桧暮
|
|||
|
|
if (obj.isMyControlObject())
|
|||
|
|
{
|
|||
|
|
local ani = obj.getCurrentAnimation();
|
|||
|
|
|
|||
|
|
local isEnd = sq_IsEnd(ani);
|
|||
|
|
|
|||
|
|
if (isEnd)
|
|||
|
|
{
|
|||
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|||
|
|
|
|||
|
|
sq_IntVectorClear(pIntVec);
|
|||
|
|
sq_IntVectorPush(pIntVec, 0);
|
|||
|
|
|
|||
|
|
obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (state == S_PO_ATCL_1)
|
|||
|
|
{
|
|||
|
|
// 瑞? 拥栖诡桧暮
|
|||
|
|
local t = obj.getVar().get_ct_vector(0);
|
|||
|
|
local currentT = 0;
|
|||
|
|
|
|||
|
|
currentT = t.Get();
|
|||
|
|
|
|||
|
|
local hitT = obj.getVar().get_timer_vector(0);
|
|||
|
|
|
|||
|
|
if(hitT)
|
|||
|
|
{
|
|||
|
|
if(hitT.isOnEvent(currentT) == true)
|
|||
|
|
{
|
|||
|
|
local consumeValue = obj.getVar("consume").get_vector(0);
|
|||
|
|
useCreatorSkill(pChr, SKILL_WINDPRESS, 0, 0, consumeValue);
|
|||
|
|
|
|||
|
|
obj.resetHitObjectList();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 陕紫 濩晦
|
|||
|
|
if (obj.isMyControlObject())
|
|||
|
|
{
|
|||
|
|
local objectManager = obj.getObjectManager();
|
|||
|
|
|
|||
|
|
if (!objectManager)
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
local stage = sq_GetObjectManagerStage(obj);
|
|||
|
|
local control = stage.getMainControl();
|
|||
|
|
|
|||
|
|
local remainRate = getCreatorTypeGaugeRate(pChr);
|
|||
|
|
|
|||
|
|
if (!control.IsLBDown() || remainRate == 0.0)
|
|||
|
|
{
|
|||
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|||
|
|
|
|||
|
|
sq_IntVectorClear(pIntVec);
|
|||
|
|
sq_IntVectorPush(pIntVec, 0);
|
|||
|
|
|
|||
|
|
obj.addSetStatePacket(S_PO_ATCL_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
|
|||
|
|
//sq_SendDestroyPacketPassiveObject(obj);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (state == S_PO_ATCL_2)
|
|||
|
|
{
|
|||
|
|
if (obj.isMyControlObject())
|
|||
|
|
{
|
|||
|
|
local ani = obj.getCurrentAnimation();
|
|||
|
|
|
|||
|
|
local isEnd = sq_IsEnd(ani);
|
|||
|
|
|
|||
|
|
if (isEnd)
|
|||
|
|
{
|
|||
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
function destroy_po_CreatorWindPress(obj)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
function setState_po_CreatorWindPress(obj, state, datas)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if (!obj) return;
|
|||
|
|
|
|||
|
|
local passiveState = state;
|
|||
|
|
|
|||
|
|
obj.getVar("state").set_vector(0, passiveState);
|
|||
|
|
|
|||
|
|
sendChangeRotateObject(obj);
|
|||
|
|
|
|||
|
|
if (passiveState == S_PO_ATCL_0)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
else if (passiveState == S_PO_ATCL_1)
|
|||
|
|
{
|
|||
|
|
local ani = obj.getCustomAnimation(0);
|
|||
|
|
obj.setCurrentAnimation(ani);
|
|||
|
|
}
|
|||
|
|
else if (passiveState == S_PO_ATCL_2)
|
|||
|
|
{
|
|||
|
|
local ani = obj.getCustomAnimation(1);
|
|||
|
|
obj.setCurrentAnimation(ani);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
function onChangeSkillEffect_po_CreatorWindPress(obj, skillIndex, reciveData)
|
|||
|
|
{
|
|||
|
|
if (!obj) return;
|
|||
|
|
|
|||
|
|
if (skillIndex != SKILL_WINDPRESS)
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
local dstX = reciveData.readDword();
|
|||
|
|
local dstY = reciveData.readDword();
|
|||
|
|
local dstZ = reciveData.readDword();
|
|||
|
|
|
|||
|
|
procRotateObjAnimation(obj, dstX, dstY, dstZ);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
function onDestroyObject_po_CreatorWindPress(obj, object)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if (!obj) return;
|
|||
|
|
|
|||
|
|
if (!obj.isValid())
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function onKeyFrameFlag_po_CreatorWindPress(obj, flagIndex)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function onEndCurrentAni_po_CreatorWindPress(obj)
|
|||
|
|
{
|
|||
|
|
if (!obj) return;
|
|||
|
|
}
|
|||
|
|
|