Sqr/passiveobject/character/priest/po_spincutter.nut

190 lines
4.9 KiB
Plaintext
Raw Normal View History

2024-03-18 21:37:40 +08:00
//S_SPINCUTTER_THROW <- 0
//S_SPINCUTTER_RECALL <- 1
//S_SPINCUTTER_ARRIVAL <- 2
S_PO_SPINCUTTER_THROW <- 10
S_PO_SPINCUTTER_RECALL <- 11
VECTOR_I_RECALL_FLAG <- 0
VECTOR_I_RECALL_STD_X <- 1
VECTOR_I_MULTI_HIT_COUNT <- 2
VECTOR_I_ATTACK_RATE <- 3 // 奢问溘
//function setCustomData_po_Spincutter(obj, data, size)
function setCustomData_po_Spincutter(obj,reciveData)
{
//sq_BinaryStartRead(data);
//local multi_count = sq_BinaryGetDWord();
//local rate = sq_BinaryGetDWord();
local multi_count = reciveData.readDword();
local rate = reciveData.readDword();
obj.sq_var.push_vector(0);
obj.sq_var.push_vector(0);
obj.sq_var.push_vector(0);
obj.sq_var.push_vector(0);
obj.sq_var.push_vector(0);
obj.sq_var.set_vector(VECTOR_I_MULTI_HIT_COUNT, multi_count);
obj.sq_var.set_vector(VECTOR_I_ATTACK_RATE, rate);
local attackInfo = sq_GetCustomAttackInfo(obj, 0);
sq_SetCurrentAttackInfo(obj, attackInfo);
local pAttack = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(pAttack, rate);
local pAni = obj.getCurrentAnimation();
local initDelay = 0;
local attackTime = pAni.getDelaySum(false);
local hitCnt = obj.sq_var.get_vector(VECTOR_I_MULTI_HIT_COUNT);
local term = 500 / hitCnt;
//print("term = attackTime / hitCnt :" + attackTime);
obj.timer_.setParameter(term, hitCnt);
obj.timer_.resetInstant(initDelay);
//print("\n eType:" + eType);
}
function setState_po_Spincutter(obj, state, datas)
{
local passiveState = state;
if(passiveState == S_PO_SPINCUTTER_THROW) {
}
else if(passiveState == S_PO_SPINCUTTER_RECALL) {
local pA = obj.getCustomAnimation(0);
local objectX = sq_GetVectorData(datas, 0); // xpos
obj.setCurrentAnimation(pA);
obj.sq_var.set_vector(VECTOR_I_RECALL_STD_X, objectX);
//print("objectx:" + objectX + "getxpos" + obj.getXPos());
local attackInfo = sq_GetDefaultAttackInfo(obj);
sq_SetCurrentAttackInfo(obj, attackInfo);
local rate = obj.sq_var.get_vector(VECTOR_I_ATTACK_RATE);
local current_attack_info = sq_GetCurrentAttackInfo(obj);
//print(" spincutter attack rate:" + rate);
sq_SetCurrentAttackBonusRate(current_attack_info, rate);
local pAni = obj.getCurrentAnimation();
local initDelay = 0;
local attackTime = pAni.getDelaySum(false);
local hitCnt = obj.sq_var.get_vector(VECTOR_I_MULTI_HIT_COUNT);
//local hitCnt = 6;
local term = attackTime / hitCnt;
obj.timer_.setParameter(term, hitCnt);
obj.timer_.resetInstant(initDelay);
//print("setCustomData_po_Spincutter x:" + obj.getXPos());
}
}
function procAppend_po_Spincutter(obj)
{
local pChr = obj.getTopCharacter();
if(!pChr)
{
sq_SendDestroyPacketPassiveObject(obj);
return;
}
local state = pChr.getState();
local substate = pChr.getSkillSubState();
local pAni = pChr.getCurrentAnimation();
local frmIndex = pAni.GetCurrentFrameIndex();
local bEnd = sq_IsEnd(pAni);
local isMyControl = obj.isMyControlObject();
if(state != STATE_SPINCUTTER)
{
sq_SendDestroyPacketPassiveObject(obj);
return;
}
if(substate == S_SPINCUTTER_THROW) {
}
else if(substate == S_SPINCUTTER_RECALL) {
local flag = obj.sq_var.get_vector(VECTOR_I_RECALL_FLAG);
if(flag == 0) {
obj.sq_var.set_vector(VECTOR_I_RECALL_FLAG, 1);
if(isMyControl == true) {
// vector
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, obj.getXPos());
//print("sq_IntVectorPush:" + obj.getXPos());
obj.addSetStatePacket(S_PO_SPINCUTTER_RECALL, pIntVec, STATE_PRIORITY_AUTO, false, "");
//sq_addSetStatePacketColObj(obj, S_PO_SPINCUTTER_RECALL);
}
}
else {
if(obj.getState() == S_PO_SPINCUTTER_RECALL) {
local dstX = sq_GetDistancePos(pChr.getXPos(), obj.getDirection(), 80);
//local dstX = pChr.getXPos();
local currentT = sq_GetCurrentTime(pAni);
local totalT = pAni.getDelaySum(false);
local srcX = obj.sq_var.get_vector(VECTOR_I_RECALL_STD_X);
local posX = sq_GetAccel(srcX, dstX, currentT, totalT, false);
//local posX = sq_GetAccel(srcX, dstX, currentT, totalT - 100, false);
local posY = obj.getYPos();
local posZ = obj.getZPos();
obj.setCurrentPos(posX, posY, posZ);
//print("src x:" + srcX + "dst x:" + dstX);
}
}
//local pObjAni = obj.getCurrentAnimation();
//local time = sq_GetCurrentTime(pObjAni);
//
//if (obj.timer_.isOnEvent(time) == true)
//obj.resetHitObjectList();
}
else if(substate == S_SPINCUTTER_ARRIVAL) {
sq_SendDestroyPacketPassiveObject(obj);
return;
}
local pObjAni = obj.getCurrentAnimation();
local time = sq_GetCurrentTime(pObjAni);
if (obj.timer_.isOnEvent(time) == true) {
//print("resetHitObjectList");
obj.resetHitObjectList();
}
}
function onDestroyObject_po_Spincutter(obj, object)
{
}