358 lines
8.6 KiB
Plaintext
358 lines
8.6 KiB
Plaintext
|
|
|
|||
|
|
BrokenArrow_START_X <- 0
|
|||
|
|
BrokenArrow_START_Y <- 1
|
|||
|
|
BrokenArrow_START_Z <- 2
|
|||
|
|
|
|||
|
|
BrokenArrow_MOV_X <- 3
|
|||
|
|
BrokenArrow_MOV_Y <- 4
|
|||
|
|
BrokenArrow_MOV_Z <- 5
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
function setCustomData_po_ATBrokenArrow(obj, reciveData)
|
|||
|
|
{
|
|||
|
|
if(!obj) return;
|
|||
|
|
|
|||
|
|
|
|||
|
|
local xLen = reciveData.readDword();
|
|||
|
|
local yLen = reciveData.readDword();
|
|||
|
|
local zLen = reciveData.readDword();
|
|||
|
|
local attackRate = reciveData.readDword();
|
|||
|
|
local expTime = reciveData.readDword();
|
|||
|
|
local stunTime = reciveData.readDword();
|
|||
|
|
local angle = reciveData.readFloat() * 100;
|
|||
|
|
|
|||
|
|
local x = sq_GetXPos(obj);
|
|||
|
|
local y = sq_GetYPos(obj);
|
|||
|
|
local z = sq_GetZPos(obj);
|
|||
|
|
|
|||
|
|
obj.getVar("dis").clear_vector();
|
|||
|
|
|
|||
|
|
obj.getVar("dis").push_vector(x);
|
|||
|
|
obj.getVar("dis").push_vector(y);
|
|||
|
|
obj.getVar("dis").push_vector(z);
|
|||
|
|
|
|||
|
|
obj.getVar("dis").push_vector(xLen);
|
|||
|
|
obj.getVar("dis").push_vector(yLen);
|
|||
|
|
obj.getVar("dis").push_vector(zLen);
|
|||
|
|
|
|||
|
|
obj.getVar("state").clear_vector(); // state vector
|
|||
|
|
obj.getVar("state").push_vector(BrokenArrow_state_0);
|
|||
|
|
|
|||
|
|
local expT = expTime; // 唳霜卫除
|
|||
|
|
|
|||
|
|
obj.getVar("fire").clear_vector(); // state vector
|
|||
|
|
obj.getVar("fire").push_vector(expT);
|
|||
|
|
|
|||
|
|
local current100Angle = angle.tointeger();
|
|||
|
|
obj.getVar("angle").clear_vector();
|
|||
|
|
obj.getVar("angle").push_vector(current100Angle);
|
|||
|
|
|
|||
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|||
|
|
sq_IntVectorClear(pIntVec);
|
|||
|
|
sq_IntVectorPush(pIntVec, 0);
|
|||
|
|
|
|||
|
|
//sq_SetAttackInfoForceHitStunTime(
|
|||
|
|
|
|||
|
|
local atk = sq_GetCurrentAttackInfo(obj);
|
|||
|
|
|
|||
|
|
if(atk)
|
|||
|
|
{
|
|||
|
|
sq_SetCurrentAttackBonusRate(atk, attackRate);
|
|||
|
|
sq_SetAttackInfoForceHitStunTime(atk, stunTime);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
if(obj.isMyControlObject())
|
|||
|
|
{
|
|||
|
|
obj.addSetStatePacket(BrokenArrow_state_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function setState_po_ATBrokenArrow(obj, state, datas)
|
|||
|
|
{
|
|||
|
|
if(!obj) return;
|
|||
|
|
|
|||
|
|
local passiveState = state;
|
|||
|
|
|
|||
|
|
obj.getVar("state").set_vector(0, passiveState);
|
|||
|
|
|
|||
|
|
if(passiveState == BrokenArrow_state_0)
|
|||
|
|
{
|
|||
|
|
obj.sq_PlaySound("BARROW_SHOT");
|
|||
|
|
}
|
|||
|
|
else if(passiveState == BrokenArrow_state_1)
|
|||
|
|
{
|
|||
|
|
local ani = obj.getCustomAnimation(0);
|
|||
|
|
obj.setCurrentAnimation(ani);
|
|||
|
|
}
|
|||
|
|
else if(passiveState == BrokenArrow_state_2)
|
|||
|
|
{
|
|||
|
|
local ani = obj.getCustomAnimation(1);
|
|||
|
|
obj.setCurrentAnimation(ani);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
local current100Angle = obj.getVar("angle").get_vector(0);
|
|||
|
|
|
|||
|
|
if(current100Angle != -100)
|
|||
|
|
{
|
|||
|
|
local pAni = obj.getCurrentAnimation();
|
|||
|
|
local angle = current100Angle.tofloat() / 100.0;
|
|||
|
|
print(" set angle:" + angle);
|
|||
|
|
//sq_SetfRotateAngle(pAni, angle);
|
|||
|
|
//sq_SetfRotateAngle(pAni, 5.0);
|
|||
|
|
//obj.void CNRDObject::setCustomRotate(bool isApply, float rotateAnlge)
|
|||
|
|
obj.setCustomRotate(true, angle);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function procAppend_po_ATBrokenArrow(obj)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if(!obj) return;
|
|||
|
|
|
|||
|
|
//BrokenArrow_START_X <- 0
|
|||
|
|
//BrokenArrow_START_Y <- 1
|
|||
|
|
//BrokenArrow_START_Z <- 2
|
|||
|
|
//
|
|||
|
|
//BrokenArrow_MOV_X <- 3
|
|||
|
|
//BrokenArrow_MOV_Y <- 4
|
|||
|
|
//BrokenArrow_MOV_Z <- 5
|
|||
|
|
local passiveState = obj.getVar("state").get_vector(0);
|
|||
|
|
|
|||
|
|
//BrokenArrow_state_0 <- 10
|
|||
|
|
//BrokenArrow_state_1 <- 11
|
|||
|
|
local pAni = obj.getCurrentAnimation();
|
|||
|
|
local currentT = sq_GetCurrentTime(pAni);
|
|||
|
|
|
|||
|
|
if(passiveState == 0)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(passiveState == BrokenArrow_state_0)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
local fireT = 200;
|
|||
|
|
local srcX = obj.getVar("dis").get_vector(BrokenArrow_START_X); // 卫蒙x
|
|||
|
|
local srcY = obj.getVar("dis").get_vector(BrokenArrow_START_Y); // 卫蒙y
|
|||
|
|
local srcZ = obj.getVar("dis").get_vector(BrokenArrow_START_Z); // 卫蒙z
|
|||
|
|
|
|||
|
|
local dis_x_len = obj.getVar("dis").get_vector(BrokenArrow_MOV_X); // 识 桧翕剪葬
|
|||
|
|
local dis_y_len = obj.getVar("dis").get_vector(BrokenArrow_MOV_Y); // y蹴 桧翕剪葬
|
|||
|
|
local endZ = obj.getVar("dis").get_vector(BrokenArrow_MOV_Z); // z蹴 桧翕剪葬
|
|||
|
|
|
|||
|
|
local v = sq_GetUniformVelocity(0, dis_x_len, currentT, fireT);
|
|||
|
|
local my = sq_GetUniformVelocity(0, dis_y_len, currentT, fireT);
|
|||
|
|
local mz = sq_GetUniformVelocity(srcZ, endZ, currentT, fireT);
|
|||
|
|
|
|||
|
|
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
|
|||
|
|
local dstY = srcY + my;
|
|||
|
|
|
|||
|
|
sq_setCurrentAxisPos(obj, 0, dstX);
|
|||
|
|
sq_setCurrentAxisPos(obj, 1, dstY);
|
|||
|
|
sq_setCurrentAxisPos(obj, 2, mz);
|
|||
|
|
|
|||
|
|
if(currentT >= fireT)
|
|||
|
|
{
|
|||
|
|
if(obj.isMyControlObject())
|
|||
|
|
{
|
|||
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if(passiveState == BrokenArrow_state_1)
|
|||
|
|
{
|
|||
|
|
local fireT = obj.getVar("fire").get_vector(0);
|
|||
|
|
|
|||
|
|
|
|||
|
|
if(obj.isMyControlObject())
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
local moveParent = sq_GetMoveParent(obj);
|
|||
|
|
|
|||
|
|
local changeState = false;
|
|||
|
|
|
|||
|
|
if(!moveParent)
|
|||
|
|
changeState = true;
|
|||
|
|
|
|||
|
|
if(moveParent)
|
|||
|
|
{
|
|||
|
|
local isSmashing = false; // ?溥纂朝 挡暮樯虽
|
|||
|
|
local parentState = obj.sq_GetParentState();
|
|||
|
|
local subState = obj.sq_GetParentSkillSubState();
|
|||
|
|
|
|||
|
|
if(parentState == STATE_BROKENARROW && subState >= SUB_STATE_BROKENARROW_3)
|
|||
|
|
isSmashing = true;
|
|||
|
|
|
|||
|
|
if(moveParent.getState() == STATE_DOWN && isSmashing == true)
|
|||
|
|
{
|
|||
|
|
changeState = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(currentT >= fireT)
|
|||
|
|
changeState = true;
|
|||
|
|
|
|||
|
|
if(changeState == true)
|
|||
|
|
{
|
|||
|
|
if(obj.isMyControlObject())
|
|||
|
|
{
|
|||
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|||
|
|
|
|||
|
|
sq_IntVectorClear(pIntVec);
|
|||
|
|
sq_IntVectorPush(pIntVec, 0);
|
|||
|
|
|
|||
|
|
obj.addSetStatePacket(BrokenArrow_state_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if(passiveState == BrokenArrow_state_2)
|
|||
|
|
{
|
|||
|
|
local isEnd = sq_IsEnd(pAni);
|
|||
|
|
|
|||
|
|
if(isEnd == true)
|
|||
|
|
{
|
|||
|
|
if(obj.isMyControlObject())
|
|||
|
|
{
|
|||
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function onChangeSkillEffect_po_ATBrokenArrow(obj, skillIndex, reciveData)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if(!obj) return;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function onDestroyObject_po_ATBrokenArrow(obj, object)
|
|||
|
|
{
|
|||
|
|
if(!obj) return;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function onKeyFrameFlag_po_ATBrokenArrow(obj, flagIndex)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function onEndCurrentAni_po_ATBrokenArrow(obj)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if(!obj) return;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function onAttack_po_ATBrokenArrow(obj, damager, boundingBox, isStuck)
|
|||
|
|
{
|
|||
|
|
if(!obj)
|
|||
|
|
return 0;
|
|||
|
|
|
|||
|
|
local pChr = obj.getTopCharacter();
|
|||
|
|
|
|||
|
|
if(!pChr)
|
|||
|
|
return 0;
|
|||
|
|
|
|||
|
|
// ?髦缣 蜃懊击 阳 ?髦 ?瞳
|
|||
|
|
|
|||
|
|
local x = sq_GetXPos(pChr);
|
|||
|
|
local y = sq_GetYPos(pChr);
|
|||
|
|
local z = sq_GetZPos(pChr);
|
|||
|
|
|
|||
|
|
local damagerX = sq_GetXPos(damager);
|
|||
|
|
local damagerY = sq_GetYPos(damager);
|
|||
|
|
local damagerZ = sq_GetZPos(damager);
|
|||
|
|
|
|||
|
|
local direction = ENUM_DIRECTION_LEFT;
|
|||
|
|
|
|||
|
|
if(x < damagerX)
|
|||
|
|
{
|
|||
|
|
direction = ENUM_DIRECTION_RIGHT;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj,
|
|||
|
|
//SKILL_BROKENARROW, true, "Character/ATMage/BrokenArrow/ap_ATBrokenArrow.nut", true);
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
//local ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATBrokenArrow/hiteffect/00_arrow_normal.ani");
|
|||
|
|
//local arrowObj = sq_CreatePooledObject(ani,true);
|
|||
|
|
//sq_AddObjectTarget(obj, arrowObj, damager, OBJECTTYPE_DRAWONLY, BROKENARROW_UNIQUE_ID);
|
|||
|
|
|
|||
|
|
//arrowObj.setCurrentDirection(direction);
|
|||
|
|
|
|||
|
|
//local hitX = (sq_GetCenterXPos(boundingBox) - 5);// + sq_getRandom(0, 2);
|
|||
|
|
local hitX = sq_GetXPos(damager) + sq_getRandom(0, 2);
|
|||
|
|
local hitY = sq_GetYPos(damager) + 1;
|
|||
|
|
local hitZ = (sq_GetCenterZPos(boundingBox) - 5) + sq_getRandom(0, 5);
|
|||
|
|
|
|||
|
|
//arrowObj.setCurrentPos(hitX,hitY,hitZ);
|
|||
|
|
//sq_moveWithParent(damager, arrowObj);
|
|||
|
|
|
|||
|
|
obj.setCurrentPos(hitX,hitY,hitZ);
|
|||
|
|
sq_moveWithParent(damager, obj);
|
|||
|
|
|
|||
|
|
|
|||
|
|
local appendage = CNSquirrelAppendage.sq_AppendAppendage(damager, damager, SKILL_BROKENARROW,
|
|||
|
|
true, "Appendage/Character/ap_atmage_effect.nut", true);
|
|||
|
|
|
|||
|
|
print(" onattack");
|
|||
|
|
|
|||
|
|
|
|||
|
|
if(obj.isMyControlObject())
|
|||
|
|
{
|
|||
|
|
local passiveState = obj.getVar("state").get_vector(0);
|
|||
|
|
|
|||
|
|
print(" onattack:" + passiveState);
|
|||
|
|
if(passiveState == BrokenArrow_state_0)
|
|||
|
|
{
|
|||
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|||
|
|
|
|||
|
|
sq_IntVectorClear(pIntVec);
|
|||
|
|
sq_IntVectorPush(pIntVec, 0);
|
|||
|
|
|
|||
|
|
obj.addSetStatePacket(BrokenArrow_state_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
|
|||
|
|
}
|
|||
|
|
else if(passiveState == BrokenArrow_state_1)
|
|||
|
|
{
|
|||
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|||
|
|
|
|||
|
|
sq_IntVectorClear(pIntVec);
|
|||
|
|
sq_IntVectorPush(pIntVec, 0);
|
|||
|
|
|
|||
|
|
obj.addSetStatePacket(BrokenArrow_state_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
|
|||
|
|
//sq_SendDestroyPacketPassiveObject(obj);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//local group = sq_GetGroup(damager);
|
|||
|
|
//local uniqueId = sq_GetUniqueId(damager);
|
|||
|
|
//
|
|||
|
|
//sq_BinaryStartWrite();
|
|||
|
|
//sq_BinaryWriteWord(group);
|
|||
|
|
//sq_BinaryWriteWord(uniqueId);
|
|||
|
|
//
|
|||
|
|
//sq_SendChangeSkillEffectPacket(pChr, SKILL_BROKENARROW);
|
|||
|
|
|
|||
|
|
|
|||
|
|
//sq_SendDestroyPacketPassiveObject(obj);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
function getCustomHitEffectFileName_po_ATBrokenArrow(obj, isAttachOnDamager)
|
|||
|
|
{
|
|||
|
|
return "PassiveObject/Character/Mage/Animation/ATBrokenArrow/02_arrowboom_dodge.ani";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|