getroottable()["IceOrbExCreatePos"] <- {}; getroottable()["IceOrbExCreatePos"] = [[28,28], // 0 [22,-24], // 1 [-21,0], // 2 [-5,-28], // 3 [-17,36], // 4 [8,-19], // 5 [-31,9], // 6 [-2,42], // 7 [-24,-24], // 8 [36,7]]; // 9 PO_ICE_ORB_ETC_ANI_READY <- 0; // 赅暮 1 : 姜虽, 遽绿 PO_ICE_ORB_ETC_ANI_ATTACK <- 1; // 赅暮 2 : 陛卫奢问 PO_ICE_ORB_ETC_ANI_EXPLOSION <- 2; // 赅暮 3 : ?嫦 PO_ICE_ORB_SUB_STATE_FLYING <- 2; // 陈嬴马 PO_ICE_ORB_SUB_STATE_READY <- 3; // 奢问遽绿,姜虽 PO_ICE_ORB_SUB_STATE_ATTACK <- 4; // 奢问,陛卫络挤 PO_ICE_ORB_SUB_STATE_EXPLOSION <- 5; // ?嫦 //PO_ICE_ORB_VAR_TIME <- 0; // 陈嬴陛朝 卫除 PO_ICE_ORB_VAR_SPEED <- 1; // 陈嬴陛朝 楼紫 PO_ICE_ORB_VAR_GAP <- 2; // 陛卫 当撩 卫除除问 PO_ICE_ORB_VAR_POWER <- 3; // 陛卫 奢问溘 PO_ICE_ORB_VAR_MAXCOUNT <- 4; // 陛卫 当撩 譆渠 偎热. PO_ICE_ORB_VAR_TARGET_X <- 5; // 迹瞳虽 X谢? PO_ICE_ORB_VAR_TARGET_Z <- 6; // 迹瞳虽 z谢? PO_ICE_ORB_TIMER_FLYING <- 0; //陈嬴陛朝 卫除 PO_ICE_ORB_TIMER_ATTACK_GAP <- 1; //陛卫 奢问 卫除 除问 PO_ICE_ORB_TIMER_WAITING_END <- 2; //葆虽虞 陛卫 奢问? 拥栖 部陈阳 梱虽 卫除 除问 PO_ICE_ORB_CONST_PRICKLE_ANI_TIME <- 160; // 陛卫 拥栖暧 识 卫除. : 葆虽虞 陛卫陛 当撩胀? 葆虽虞 陛卫陛 饵塭韩阳梱虽 渠晦 卫除 PO_ICE_ORB_CONST_START_FRAME <- 6; //籀挤 卫蒙? ?溯歜 function setCustomData_po_ATIceOrbEx(obj, reciveData) { if(!obj) return; local speed = reciveData.readDword(); local gap = reciveData.readDword(); local pricklePower = reciveData.readFloat(); local lastPower = reciveData.readFloat(); local maxCount = reciveData.readDword(); local direction = reciveData.readWord(); local targetPos = reciveData.readDword(); obj.setDirection(direction); // 寞?击 睡赅偌羹谛 翕橾?啪 local var = obj.getVar(); var.setInt(PO_ICE_ORB_VAR_SPEED ,speed); var.setInt(PO_ICE_ORB_VAR_GAP ,gap); var.setFloat(PO_ICE_ORB_VAR_POWER ,pricklePower); var.setInt(PO_ICE_ORB_VAR_MAXCOUNT ,maxCount); var.setInt(PO_ICE_ORB_VAR_TARGET_X ,targetPos); var.setInt(PO_ICE_ORB_VAR_TARGET_Z ,obj.getZPos()); obj.sendStateOnlyPacket(PO_ICE_ORB_SUB_STATE_FLYING); // 虞颤 奢问溘 荡潍 local currentAttackInfo = sq_GetCurrentAttackInfo(obj); sq_SetCurrentAttackBonusRate(currentAttackInfo, lastPower.tointeger()); } //陛卫 当撩 ?热. function createIcePrickleByIceOrbEx(obj, index, isFirst) { // 当撩 嫔纂陛 蟾娄 肾贼 蟾娄 寰肾朝 彰嫔煎 虽姜 local createPosMax = ::IceOrbExCreatePos.len(); index = index % createPosMax; local pos = ::IceOrbExCreatePos[index]; local x = pos[0]; local z = pos[1]; // 桧嘐虽蒂 1.5寡 ?渠 ?棻. 评塭怃 陛卫暧 当撩嫔纂紫 1.5寡 渗?棻. x = x.tofloat() * 1.0; z = z.tofloat() * 1.0; local var = obj.getVar(); local power = var.getFloat(PO_ICE_ORB_VAR_POWER); sq_BinaryStartWrite(); sq_BinaryWriteWord(index); // 当撩 陛卫 樯策蝶. sq_BinaryWriteFloat(power); sq_BinaryWriteBool(isFirst); sq_SendCreatePassiveObjectPacket(obj, 24236, 0, x.tointeger(), 1, z.tointeger(), obj.getDirection()); } function onTimeEvent_po_ATIceOrbEx(obj, timeEventIndex, timeEventCount) { if(!obj) return false; if(timeEventIndex == PO_ICE_ORB_TIMER_ATTACK_GAP) { if(!obj.isMyControlObject()) return true; // 颤桧该陛 true桧贼 ?轿 酝钦. local var = obj.getVar(); local maxCount = var.getInt(PO_ICE_ORB_VAR_MAXCOUNT); if(timeEventCount < maxCount) //譆渠 偎热 嘐虏桧贼 陛卫 当撩 { // 陛卫 当撩 ?热 属 createIcePrickleByIceOrbEx(obj, timeEventCount + PO_ICE_ORB_CONST_START_FRAME, false); return false; // 颤桧该陛 false桧贼 啗楼 ?轿 ?棻. } else { obj.setTimeEvent(PO_ICE_ORB_TIMER_WAITING_END, PO_ICE_ORB_CONST_PRICKLE_ANI_TIME ,1 , false); return true; // 颤桧该陛 true桧贼 ?轿 酝钦. } } else if(timeEventIndex == PO_ICE_ORB_TIMER_WAITING_END) { obj.sendStateOnlyPacket(PO_ICE_ORB_SUB_STATE_EXPLOSION); return true; // 颤桧该陛 true桧贼 ?轿 酝钦. } return false; } function setState_po_ATIceOrbEx(obj, state, datas) { if(!obj) return; if(state == PO_ICE_ORB_SUB_STATE_FLYING) { local var = obj.getVar(); local speed = var.getInt(PO_ICE_ORB_VAR_SPEED); obj.sq_SetMoveParticle("Particle/ATIceOrbEx.ptl", 0.0, 0.0); sq_SetSpeedToMoveParticle(obj,0,speed); // 窒葬 试虽 : 绪蒂热烟 濠舆 当撩?棻. local dustTimeGap = 50.0 * (1000.0/speed.tofloat()); sq_CreateParticle("PassiveObject/Character/Mage/Particle/ATIceOrbDust.ptl",obj,0,-1,0,true,dustTimeGap.tointeger(),500,100); } else if(state == PO_ICE_ORB_SUB_STATE_READY) { obj.sq_RemoveMoveParticle(); // 桧翕 姜虽. setCurrentAnimationFromCutomIndex(obj, PO_ICE_ORB_ETC_ANI_READY); // 拥栖 掖羹 local xPos = sq_GetVectorData(datas,0); // 紫杂? x谢?. sq_SetCurrentPos(obj, xPos, obj.getYPos(), obj.getZPos()); sq_RemoveParticle("PassiveObject/Character/Mage/Particle/ATIceOrbDust.ptl",obj); } else if(state == PO_ICE_ORB_SUB_STATE_ATTACK) { setCurrentAnimationFromCutomIndex(obj, PO_ICE_ORB_ETC_ANI_ATTACK); // 拥栖 掖羹 } else if(state == PO_ICE_ORB_SUB_STATE_EXPLOSION) { setCurrentAnimationFromCutomIndex(obj, PO_ICE_ORB_ETC_ANI_EXPLOSION); // 拥栖 掖羹 obj.stopSound(3711); } } function procAppend_po_ATIceOrbEx(obj) { if(!obj) return; local state = obj.getState(); if(state == PO_ICE_ORB_SUB_STATE_FLYING) { local var = obj.getVar(); local targetXPos = var.getInt(PO_ICE_ORB_VAR_TARGET_X); local direction = obj.getDirection(); if( (direction == ENUM_DIRECTION_LEFT && targetXPos > obj.getXPos()) || (direction == ENUM_DIRECTION_RIGHT && targetXPos < obj.getXPos()) ) { obj.sq_RemoveMoveParticle(); // 桧翕 姜虽. targetXPos = obj.getXPos(); sq_SetCurrentPos(obj, targetXPos, obj.getYPos(), obj.getZPos()); // 桧翕 部 棻挤 鼻鹧煎 剩梯. obj.sendStatePacket(PO_ICE_ORB_SUB_STATE_READY, obj.getXPos()); } } else if(state == PO_ICE_ORB_SUB_STATE_READY) { if(sq_GetCurrentFrameIndex(obj) < 1) { local var = obj.getVar(); local targetXPos = var.getInt(PO_ICE_ORB_VAR_TARGET_X); local addX = sq_GetShuttleValue(0, 10, sq_GetObjectTime(obj), 30)-5; addX = addX >= 0 ? 2 : -2; sq_SetCurrentPos(obj, targetXPos + addX, obj.getYPos(), obj.getZPos()); } } if(state == PO_ICE_ORB_SUB_STATE_ATTACK || state == PO_ICE_ORB_SUB_STATE_READY) { if(PO_ICE_ORB_SUB_STATE_READY && sq_GetCurrentFrameIndex(obj) < 2) return; local var = obj.getVar(); local x,z; local t = (sq_GetObjectTime(obj)/100)%4; //sq_GetShuttleValue(0, 4,sq_GetObjectTime(obj),80)%4; switch(t) { case 0 : x = 0; z = 2; break; case 1 : x = 0; z = -2; break; case 2 : x = -2; z = 0; break; case 3 : x = 2; z = 0; break; default : x = 0; z = 0; break; } x = x + var.getInt(PO_ICE_ORB_VAR_TARGET_X); z = z + var.getInt(PO_ICE_ORB_VAR_TARGET_Z); sq_SetCurrentPos(obj, x, obj.getYPos(), z); } } function onKeyFrameFlag_po_ATIceOrbEx(obj, flagIndex) { if(!obj) return false; if(obj.getState() == PO_ICE_ORB_SUB_STATE_READY) { if(flagIndex == 1) { // 籀挤缚 棻 廓翻 鼻鹧煎 赅舒 当撩. for(local i = 0; i