SUB_STATE_BROKENARROW_0 <- 0 SUB_STATE_BROKENARROW_1 <- 1 SUB_STATE_BROKENARROW_2 <- 2 SUB_STATE_BROKENARROW_3 <- 3 SUB_STATE_BROKENARROW_4 <- 4 BrokenArrow_state_0 <- 10 BrokenArrow_state_1 <- 11 BrokenArrow_state_2 <- 12 function checkExecutableSkill_BrokenArrow(obj) { if(!obj) return false; //local targetObj = sq_GetObjectByObjectId(obj, BROKENARROW_UNIQUE_ID); local flag = obj.getVar("brokenarrow").get_vector(VECTOR_FLAG_0); local targetObj = sq_GetPassiveObjectByState(obj, 24250, BrokenArrow_state_1); // 24250 `Character/Mage/ATBrokenArrow.obj` // 陴彻饵 - 粽煎赎拥煎办 (?髦) local expTime = obj.sq_GetIntData(SKILL_BROKENARROW, 1); // 1. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除) // 觼煎栖赝 嬴桧蛊 蒙机.. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除) // 0塭贼 渠莲蒂 ?虽 强朝棻.. if(!targetObj || flag == 0 || expTime == 0) { local b_useskill = obj.sq_IsUseSkill(SKILL_BROKENARROW); if(b_useskill) { obj.getVar("arrow").clear_vector(); obj.getVar("arrow").push_vector(0); obj.sq_IntVectClear(); obj.sq_IntVectPush(SUB_STATE_BROKENARROW_0); // substate撮? obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true); return true; } } else { print( " checkExecutableSkill_BrokenArrow targetObj:" + targetObj); obj.sq_IntVectClear(); obj.sq_IntVectPush(SUB_STATE_BROKENARROW_2); // substate撮? local group = sq_GetGroup(targetObj); local uniqueId = sq_GetUniqueId(targetObj); obj.sq_IntVectPush(group); // substate撮? obj.sq_IntVectPush(uniqueId); // substate撮? obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } //local arr=["one","two","three"] // //::print("FOREACH\n"); // //foreach(i,val in arr) //{ //::print("index ["+i+"]="+val+"\n"); //} // //::print("FOR\n"); // //for(local i=0;i posX) { obj.setDirection(ENUM_DIRECTION_RIGHT); } else { obj.setDirection(ENUM_DIRECTION_LEFT); } disX = disX - 60; if(disX <= 0) disX = 0; obj.getVar().push_vector(disX); // x蹴 桧翕剪葬 : i: 5 obj.getVar().push_vector(disY); // y蹴 桧翕剪葬 : i: 6 } else { // 蛤?? 桧翕剪葬 local defaultDistance = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 1); // 除蕾 奢问 (虽霞 ?渠徽) (100~) obj.getVar().push_vector(defaultDistance); // x蹴 桧翕剪葬 obj.getVar().push_vector(0); // y蹴 桧翕剪葬 } obj.sq_SetCurrentAnimation(CUSTOM_ANI_BROKENARROW_DASH1); } else if(substate == SUB_STATE_BROKENARROW_3) { obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_AT_MAGE_BROKENARROW); obj.sq_SetCurrentAnimation(CUSTOM_ANI_BROKENARROW_DASH2); obj.sq_PlaySound("MW_BARROW_FIN"); local atk = sq_GetCurrentAttackInfo(obj); local attackRate = obj.sq_GetBonusRateWithPassive(SKILL_BROKENARROW, STATE_BROKENARROW, 1, 1.0); //1.?萃楝纂晦 奢问溘(%) sq_SetCurrentAttackBonusRate(atk, attackRate); } else if(substate == SUB_STATE_BROKENARROW_4) { // SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 } } function prepareDraw_BrokenArrow(obj) { if(!obj) return; local substate = obj.getSkillSubState(); if(substate == SUB_STATE_BROKENARROW_0) { } else if(substate == SUB_STATE_BROKENARROW_1) { } else if(substate == SUB_STATE_BROKENARROW_2) { } else if(substate == SUB_STATE_BROKENARROW_3) { } else if(substate == SUB_STATE_BROKENARROW_4) { } } function getAngleArrow(obj, pTargetChr) { if(!obj) return; if(!pTargetChr) return; local offsetX = 58; // ?践朝 嫔纂 local offsetZ = 75; // ?践朝 嫔纂 local X = obj.getXPos() + sq_GetDistancePos(0, obj.getDirection(), offsetX); local Y = obj.getYPos(); local Z = obj.getZPos() + offsetZ; local posX = pTargetChr.getXPos(); local posY = pTargetChr.getYPos(); local posZ = pTargetChr.getZPos() + (sq_GetObjectHeight(pTargetChr) / 2); local offset = posX - X; local distance = sq_GetDistance( X, Y - Z, posX, posY - posZ, true); local w = posX - X; if(w < 0) w = -w; // ?贼鼻暧 陕紫蒂 掘?怃 桧??蒂 赁紫釭 给溥捡 肾朝虽 掘?棻. local h = (posY - posZ) - (Y - Z); local width = sq_Abs(posX - X); local angle = sq_Atan2( h.tofloat(), width.tofloat()); //if((posY - posZ) < (Y - Z)) { angle = -angle; } local nRevision = distance; local cos = nRevision.tofloat() * sq_Cos(angle); local sin = nRevision.tofloat() * sq_Sin(angle); local nX = sq_Abs( cos.tointeger() ); local nY = sq_Abs( sin.tointeger() ); return angle; //sq_SetfRotateAngle(pAni, angle); } function onProc_BrokenArrow(obj) { if(!obj) return; local substate = obj.getSkillSubState(); local pAni = obj.sq_GetCurrentAni(); local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); local sq_var = obj.getVar(); local currentT = sq_GetCurrentTime(pAni); local posX = sq_GetXPos(obj); local posY = sq_GetYPos(obj); local posZ = sq_GetZPos(obj); if(substate == SUB_STATE_BROKENARROW_0) { // SUB_STATE_BROKENARROW_0 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_1) { // SUB_STATE_BROKENARROW_1 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_2) { local dash_t = pAni.getDelaySum(false); // //obj.getVar().push_vector(posX); // ?营 x : i: 3 //obj.getVar().push_vector(posY); // ?营 y : i: 4 local srcX = obj.getVar().get_vector(3); // 卫蒙x local srcY = obj.getVar().get_vector(4); // 卫蒙y local dis_x_len = sq_var.get_vector(5); // 识 桧翕剪葬 local dis_y_len = obj.getVar().get_vector(6) + 1; // y蹴 桧翕剪葬 local v = sq_GetAccel(0, dis_x_len, currentT, dash_t, true); local my = sq_GetUniformVelocity(0, dis_y_len, currentT, dash_t); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); local dstY = srcY + my; if(sq_var.get_vector(1)) { // 瞪?溯歜缣怃 桧翕? 热 桡朝 虽羲击 虏陬棻贼.. if(sq_var.get_vector(2) != posY) { // 瞪 posY谛 绿掖?瑭怃 殖塭螺棻贼.. sq_var.set_vector(1, 0); // 桧翕?楚斜蒂 off?鄹栖棻.. sq_var.set_vector(2, posY); } } if(obj.isMovablePos(dstX, dstY) && !sq_var.get_vector(1)) { // 桧翕?楚斜谛 桧翕陛栋虽羲桧 赅舒 陛栋?捡 桧翕 sq_setCurrentAxisPos(obj, 0, dstX); sq_setCurrentAxisPos(obj, 1, dstY); } else { // 桧翕? 热 桡朝 虽羲击 虏陬棻.. sq_var.set_vector(1,1); // 桧翕 ?楚斜 樯策蝶 3 桧翕? 热 桡朝 虽羲击 虏陬击 阳 斜牖除 涡桧鼻 桧翕跤?棻.. local offset = dstX - posX; if(offset != 0) { if(offset < 0) offset = -offset; local totalLen = sq_var.get_vector(5); // 识桧翕剪葬 sq_var.set_vector(5, totalLen - offset); } } } else if(substate == SUB_STATE_BROKENARROW_3) { // SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_4) { // SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 } } function onProcCon_BrokenArrow(obj) { if(!obj) return; local substate = obj.getSkillSubState(); if(substate == SUB_STATE_BROKENARROW_0 || substate == SUB_STATE_BROKENARROW_1) { local pAni = obj.getCurrentAnimation(); local frmIndex = obj.sq_GetCurrentFrameIndex(pAni); //local x_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 3); // 晦遴 醱瞪卫除 //local y_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 4); // 晦遴 醱瞪卫除 //local z_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 5); // 晦遴 醱瞪卫除 if(frmIndex >= 3) { if(obj.getVar("flag").get_vector(0) == 0) { local x_range = 400; // 匐仪彰嫔 x local y_range = 200; // 匐仪彰嫔 y local z_range = 50; // 匐仪彰嫔 z x_range = obj.sq_GetIntData(SKILL_BROKENARROW, 3); // 3. x彰嫔 y_range = obj.sq_GetIntData(SKILL_BROKENARROW, 4); // 4. y彰嫔 z_range = obj.sq_GetIntData(SKILL_BROKENARROW, 5); // 5. z彰嫔 local x = sq_GetXPos(obj); local y = sq_GetYPos(obj); local z = sq_GetZPos(obj); local attackRate = obj.sq_GetBonusRateWithPassive(SKILL_BROKENARROW, STATE_BROKENARROW, 0, 1.0); //2.奢问溘(%) local expTime = obj.sq_GetIntData(SKILL_BROKENARROW, 1); // 1. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除) local stunTime = obj.sq_GetIntData(SKILL_BROKENARROW, 2); // 2. 瞳 唳霜卫除 local targetObj = sq_FindTarget(obj, 80, x_range, y_range, z_range); //local my = sq_GetUniformVelocity(0, dis_y_len, currentT, dash_t); local xLen = 400; local yLen = 0; local zLen = 75; local angle = -1.0; if(targetObj) { xLen = obj.getXDistance(targetObj); yLen = sq_GetYPos(targetObj) - sq_GetYPos(obj); zLen = sq_GetZPos(targetObj) + (sq_GetObjectHeight(targetObj) / 2); angle = getAngleArrow(obj, targetObj); print(" angle:" + angle); } //local fireOffsetX = 56; if(obj.isMyControlObject()) { local fireOffsetX = 65; local fireOffsetY = 0; local fireOffsetZ = 73; sq_BinaryStartWrite(); sq_BinaryWriteDword(xLen); // sq_BinaryWriteDword(yLen); // sq_BinaryWriteDword(zLen); // sq_BinaryWriteDword(attackRate); // sq_BinaryWriteDword(expTime); // sq_BinaryWriteDword(stunTime); // sq_BinaryWriteFloat(angle); // obj.sq_SendCreatePassiveObjectPacket(24250, 0, fireOffsetX, fireOffsetY + 1, fireOffsetZ); // ?髦 } obj.getVar("flag").set_vector(0, 1); } } if(obj.getVar("dash").get_vector(0) == 0) { obj.setSkillCommandEnable(SKILL_BROKENARROW, true); local iEnterSkill = obj.sq_IsEnterSkill(SKILL_BROKENARROW); if(iEnterSkill != -1) { obj.getVar("dash").set_vector(0, 1); } } //local particleCreater = null; //particleCreater = obj.getVar().GetparticleCreaterMap("BrokenArrowDownAttack", "Character/Mage/Particle/BrokenArrowDownAttack.ptl", obj); // //particleCreater = obj.getVar().GetparticleCreaterMap("BrokenArrowUpAttack", "Character/Mage/Particle/BrokenArrowUpAttack.ptl", obj); // //particleCreater.Restart(0); //particleCreater.SetPos(x + dx, y + dy, z + dz); // //sq_AddParticleObject(obj, particleCreater); } else if(substate == SUB_STATE_BROKENARROW_2) { // SUB_STATE_BROKENARROW_2 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_3) { // SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_4) { // SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 } } function onEndCurrentAni_BrokenArrow(obj) { if(!obj) return; local substate = obj.getSkillSubState(); if(!obj.isMyControlObject()) { return; } local arrowNum = obj.getVar().get_vector(0); if(substate == SUB_STATE_BROKENARROW_0 || substate == SUB_STATE_BROKENARROW_1) { local arrowIndex = obj.getVar("arrow").get_vector(0); arrowIndex = arrowIndex + 1; obj.getVar("arrow").set_vector(0, arrowIndex); if(arrowIndex < arrowNum) { obj.sq_IntVectClear(); obj.sq_IntVectPush(SUB_STATE_BROKENARROW_1); // substate撮? obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true); } else { local expTime = obj.sq_GetIntData(SKILL_BROKENARROW, 1); // 1. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除) // 觼煎栖赝 嬴桧蛊 蒙机.. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除) // 0塭贼 渠莲蒂 ?虽 强朝棻.. if(obj.getVar("dash").get_vector(0) == 1 && expTime > 0) { local targetObj = sq_GetPassiveObjectByState(obj, 24250, BrokenArrow_state_1); // 24250 `Character/Mage/ATBrokenArrow.obj` // 陴彻饵 - 粽煎赎拥煎办 (?髦) if(!targetObj) { obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); } else { local group = sq_GetGroup(targetObj); local uniqueId = sq_GetUniqueId(targetObj); obj.sq_IntVectClear(); obj.sq_IntVectPush(SUB_STATE_BROKENARROW_2); // substate撮? obj.sq_IntVectPush(group); // substate撮? obj.sq_IntVectPush(uniqueId); // substate撮? obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true); } } else { obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); } //obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); } } else if(substate == SUB_STATE_BROKENARROW_2) { obj.sq_IntVectClear(); obj.sq_IntVectPush(SUB_STATE_BROKENARROW_3); // substate撮? obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true); } else if(substate == SUB_STATE_BROKENARROW_3) { obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); } else if(substate == SUB_STATE_BROKENARROW_4) { // SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 } } function onKeyFrameFlag_BrokenArrow(obj, flagIndex) { if(!obj) return false; local substate = obj.getSkillSubState(); if(substate == SUB_STATE_BROKENARROW_0) { // SUB_STATE_BROKENARROW_0 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_1) { // SUB_STATE_BROKENARROW_1 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_2) { // SUB_STATE_BROKENARROW_2 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_3) { // SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_4) { // SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 } return false; } function onEndState_BrokenArrow(obj, new_state) { if(!obj) return; local substate = obj.getSkillSubState(); if(substate == SUB_STATE_BROKENARROW_0) { // SUB_STATE_BROKENARROW_0 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_1) { // SUB_STATE_BROKENARROW_1 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_2) { // SUB_STATE_BROKENARROW_2 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_3) { // SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_4) { // SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 } } function onAfterSetState_BrokenArrow(obj, state, datas, isResetTimer) { if(!obj) return; local substate = obj.getSkillSubState(); if(substate == SUB_STATE_BROKENARROW_0) { // SUB_STATE_BROKENARROW_0 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_1) { // SUB_STATE_BROKENARROW_1 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_2) { // SUB_STATE_BROKENARROW_2 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_3) { // SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机 } else if(substate == SUB_STATE_BROKENARROW_4) { // SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机 } } function onAttack_BrokenArrow(obj, damager, boundingBox, isStuck) { if(!obj) return; local substate = obj.getSkillSubState(); if(substate == SUB_STATE_BROKENARROW_3) { } }