Sqr/character/atmage/brokenarrow/po_atbrokenarrow.nut

358 lines
8.6 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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