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";
|
||
}
|
||
|
||
|
||
|