DIR_X_I <- 0 DIR_Y_I <- 1 X_NORMALDASH_VELOCITY <- 286 /// 渠莲 ?桧翕缣怃 陛煎 1蟾翕寰 桧翕 ?捻 热 X_SLANTDASH_VELOCITY <- 238 /// 渠莲 渠陕摹 桧翕缣怃 陛煎 1蟾翕寰 桧翕 ?捻 热 Y_NORMALDASH_VELOCITY <- 136 /// 渠莲 谦桧翕缣怃 撮煎 1蟾翕寰 桧翕 ?捻 热 Y_SLANTDASH_VELOCITY <- 114 /// 渠莲 渠陕摹 桧翕缣怃 撮煎 1蟾翕寰 桧翕 ?捻 热 // 摹鸥胀 议葛搅暧 蝶鉴衙栖螳虏 撮??栖棻. 桧廓 ?煎餍颤殓缣怃朝 摹鸥击 ?紫 AI陛 夸跷贼 寰肾晦 阳侥缣 AI ?撩? 鼻鹧缣怃 蝶鉴 蜗煜虏 亿煎 撮??朝 掘亵煎 骨栖棻. // 斜葬坚 帼?击 扬毓击阳虏 桧薯 醴裔萄羹醴蒂 撮??鄹栖棻. // aiMode陛 true塭贼.. ai赅萄樯 醴裔萄羹醴蒂 撮??貊 aiMode陛 false塭贼 ai赅萄蒂 ?薯?坚 狱樯桧 霜蕾 夔?煤? 热 毡朝 醴裔萄羹醴蒂 撮??栖棻. function setCommandCheckerMyControlChracter(obj, aiMode) { local aiChr = sq_GetCNRDObjectToSQRCharacter(obj); if(!aiChr) return; // aiChr暧 醴裔萄 羹醴蒂 椭蝗栖棻. local cmdChecker = aiChr.getCommandChecker(); if(cmdChecker) { // ai 议葛搅蒂 棻桧釭哔议蝶?击 ?栖棻. local onlyAiChr = sq_GetCNRDObjectToAICharacter(aiChr); // 晦襄 ai议葛搅缣怃 targetobject陛 割桧 嬴栖塭贼 null煎 撮??栖棻. // 醴裔萄羹醴 掖羹 卫 targetobject桧 湮旋葭桧 肾横 ?帼斜陛 嫦当?罹 targetobject?樯搅蒂 割籀葬 ?栖棻. sq_SetTargetObjectAICharacter(onlyAiChr, null, false); // 棻挤寞戏煎 桧辨?晦 嫔? 噙樯 ?楚斜 殓栖棻. 顶陛 ai陛 夔?煤?朝 螃粽薛?樯虽 羹觼?朝 ?楚斜 殓栖棻 (irdsqrcharacter) aiChr.setAIModeByControlObject(aiMode); // 醴裔? 羹觼缣怃 ai赅萄陛 on樯虽 off樯虽 羹觼?朝 ?楚斜蒂 撮??朝 ?热 殓栖棻. cmdChecker.setAIMode(aiMode); cmdChecker.commandListReset(); // 郦尔萄 濡旎 ?晦睡碟殓栖棻. sq_SetEnableKeyInputType(cmdChecker, 0, true, 1); //cmdChecker.setEnableKeyInputType(0, true); aiChr.initCommandChecker(cmdChecker, aiMode); aiChr.setCommandChecker(cmdChecker); local skillMgr = aiChr.getSkillManager(); if(skillMgr) { skillMgr.setParent(aiChr); skillMgr.setCommandChecker(cmdChecker); // 蝶鉴衙栖荡谛 醴裔萄羹醴蒂 翱念 local skillTree = aiChr.getCurrentSkillTree(); skillMgr.addAllKeyCommand(skillTree); aiChr.flushCommandEnable(); } } } // 濠冲桧 毡朝 狱羹樯虽 羹觼?朝 ?热殓栖棻. function isObjectWithChild(obj) { local ismychr = sq_IsMyCharacter(obj); local chr = sq_GetCNRDObjectToCharacter(obj); //print(" ismychr:" + ismychr + " job:" + sq_getJob(chr)); if(ismychr) { local childSize = sq_GetMyControlObjectSize(obj); if(childSize > 0) return true; } return false; } // 釭暧 葆蝶搅暧 夔?煤螃粽薛?樯虽 羹觼?朝 ?热殓栖棻. // 阔 ?塭嘐搅煎 瞪殖胀 obj陛 夔?煤 肾朝 ai chr樯虽 羹觼?朝 ?热 殓栖棻. function isMasterControlObject(obj) { if(!obj) return false; // 葆蝶搅 议葛搅(狱羹) CNUser::myCharacter_蒂 椭横鹿栖棻. if(sq_GetMyMasterCharacter()) { // CNUser::myCharacter_ 缣怃 myControlObject_ 漱搅缣怃 find_if蒂 桧辨?罹 蜃朝虽 嬴棋虽 掘?鹿栖棻. local bRet = sq_GetMyMasterCharacter().isMyControlObject(obj); return bRet; } return false; } // 蹂羶? varStr暧 obj_vector 缣 毡朝 obj菟暧 // 谖婉摹击 棻 虽邺栖棻. function releaseOutLine(obj, varStr) { local objListSize = obj.getVar(varStr).get_obj_vector_size(); for(local i =0;i destinationXPos_ && xMoveDirection_ == ENUM_DIRECTION_RIGHT) //{ //// x谢? 尔姜睡碟殓栖棻. 迹? 谢?尔棻 螃帼腑击 唳办 尔姜?朝 睡碟殓栖棻. //// 螃艇薹戏煎 虽釭蚁击 阳 : 谢? 尔姜 ? 姜虽 ////sq_MoveToNearMovablePos(obj, destinationXPos_, obj.getYPos(), obj.getZPos(), destinationXPos_, obj.getYPos(), obj.getZPos(), 100, -1, 5); //obj.getVar("movedir").set_vector(DIR_X_I, ENUM_DIRECTION_NEUTRAL); //} //else if (obj.getXPos() < destinationXPos_ && xMoveDirection_ == ENUM_DIRECTION_LEFT) //{ //// x谢? 尔姜睡碟殓栖棻. 迹? 谢?尔棻 螃帼腑击 唳办 尔姜?朝 睡碟殓栖棻. //// 豭薹戏煎 虽釭蚁击 阳 : 谢? 尔姜 ? 姜虽 ////sq_MoveToNearMovablePos(obj, destinationXPos_, obj.getYPos(), obj.getZPos(), destinationXPos_, obj.getYPos(), obj.getZPos(), 100, -1, 5); //obj.getVar("movedir").set_vector(DIR_X_I, ENUM_DIRECTION_NEUTRAL); //} //else if (obj.getXPos() < destinationXPos_) local offset = sq_Abs(obj.getXPos() - destinationXPos_); if(offset <= 1) { sq_MoveToNearMovablePos(obj, destinationXPos_, obj.getYPos(), obj.getZPos(), destinationXPos_, obj.getYPos(), obj.getZPos(), 100, -1, 5); obj.getVar("movedir").set_vector(DIR_X_I, ENUM_DIRECTION_NEUTRAL); } else { //print(" offset:" + offset); if (obj.getXPos() < destinationXPos_) { obj.getVar("movedir").set_vector(DIR_X_I, ENUM_DIRECTION_RIGHT); } else if (obj.getXPos() > destinationXPos_) { obj.getVar("movedir").set_vector(DIR_X_I, ENUM_DIRECTION_LEFT); } else obj.getVar("movedir").set_vector(DIR_X_I, ENUM_DIRECTION_NEUTRAL); } ////////////////////////////////////////////////// // 办摹 y谢?缣 渠? 寞?击 扑姜?栖棻. if (obj.getYPos() > destinationYPos_ && yMoveDirection_ == ENUM_DIRECTION_DOWN) { // y谢? 尔姜睡碟殓栖棻. 迹? 谢?尔棻 螃帼腑击 唳办 尔姜?朝 睡碟殓栖棻. // 嬴楚薹戏煎 虽釭蚁击 阳 : 谢? 尔姜 ? 姜虽 //sq_MoveToNearMovablePos(obj, obj.getXPos(), destinationYPos_, obj.getZPos(), obj.getXPos(), destinationYPos_, obj.getZPos(), 100, -1, 5); obj.getVar("movedir").set_vector(DIR_Y_I, ENUM_DIRECTION_NEUTRAL); } else if (obj.getYPos() < destinationYPos_ && yMoveDirection_ == ENUM_DIRECTION_UP) { // y谢? 尔姜睡碟殓栖棻. 迹? 谢?尔棻 螃帼腑击 唳办 尔姜?朝 睡碟殓栖棻. // 嫔薹戏煎 虽釭蚁击 阳 : 谢? 尔姜 ? 姜虽 //sq_MoveToNearMovablePos(obj, obj.getXPos(), destinationYPos_, obj.getZPos(), obj.getXPos(), destinationYPos_, obj.getZPos(), 100, -1, 5); obj.getVar("movedir").set_vector(DIR_Y_I, ENUM_DIRECTION_NEUTRAL); } else if (obj.getYPos() < destinationYPos_) obj.getVar("movedir").set_vector(DIR_Y_I, ENUM_DIRECTION_DOWN); else if (obj.getYPos() > destinationYPos_) { obj.getVar("movedir").set_vector(DIR_Y_I, ENUM_DIRECTION_UP); local direction = obj.getVar("movedir").get_vector(DIR_Y_I); } else obj.getVar("movedir").set_vector(DIR_Y_I, ENUM_DIRECTION_NEUTRAL); ////////////////////////////////////////////////////////////////////////////// // 夸醮捡?朝 牖除击 羹觼?罹 夸跷啪 ?栖棻. // 迹瞳虽缣 紫杂?剪釭 螃粽薛?暧 state陛 stand釭 dash鼻鹧陛 嬴栖塭贼 桧翕卫郦贼 寰腌栖棻. // 伪擎 潍模蒂 啗楼 薯濠葬 务晦釭 嗨晦蒂 ?贼 寰肾晦 阳侥缣 ?营 谢?蒂 荡潍?棻陛 // 棻挤?溯歜缣怃 绿掖?瑭怃 伪擎 谢?塭贼 翕蒙击 夸跷啪 ?栖棻. local state = obj.getState(); local beforeXPos = obj.getVar("dstpos").get_vector(2); // 瞪?溯歜缣 桧翕?湍 谢? 荡潍奢除 殓栖棻. (x) local beforeYPos = obj.getVar("dstpos").get_vector(3); // 瞪?溯歜缣 桧翕?湍 谢? 荡潍奢除 殓栖棻. (y) // 瞪?溯歜娄 翕橾? 阳 苹遴?蒂 棺溥丑怃 苹遴?陛 横替姜紫 獭击阳 桧翕碳陛塭 ?钦?罹 夸跷啪 ?栖棻. // 夥煎 籀挤 桧翕?击隆 瞪?溯歜娄 横离? 谢?陛 伪晦阳侥缣 桧 伪擎 寞彻击 质蝗栖棻. local samdCnt = obj.getVar("dstpos").get_vector(4); if(beforeXPos == obj.getXPos() && beforeYPos == obj.getYPos()) { obj.getVar("dstpos").set_vector(4, samdCnt + 1); samdCnt = obj.getVar("dstpos").get_vector(4); } if(obj.isMyControlObject()) { local stage = sq_GetObjectManagerStage(obj); local control = stage.getMainControl(); if(!control.IsRBDown()) { if(destinationXPos_ == obj.getXPos() && destinationYPos_ == obj.getYPos() || (state != STATE_STAND && state != STATE_DASH)) { //print(" arrived dstX:" + destinationXPos_ + " getX:" + obj.getXPos() + " samdCnt:" + samdCnt); obj.getVar("dstpos").clear_vector(); sq_SetVelocity(obj, 0, 0.0); sq_SetVelocity(obj, 1, 0.0); obj.getVar("movedir").set_vector(DIR_X_I, ENUM_DIRECTION_NEUTRAL); obj.getVar("movedir").set_vector(DIR_Y_I, ENUM_DIRECTION_NEUTRAL); local actobj = sq_GetCNRDObjectToActiveObject(obj); if(actobj) { print(" state_stand"); sq_AddSetStatePacketCollisionObject(actobj, STATE_STAND, null, STATE_PRIORITY_USER, true); } return; } } } // 楼溘 宪嬴顶晦 local isDash = obj.getVar("dash").get_vector(0); // 晦狱瞳樯 表缰缣怃朝 晦狱楼紫陛 撮?腌栖棻. local xNormalVel = X_NORMALMOVE_VELOCITY; local yNormalVel = Y_NORMALMOVE_VELOCITY; local xSlantVel = X_SLANTMOVE_VELOCITY; local ySlantVel = Y_SLANTMOVE_VELOCITY; // 渠莲塭贼 楼紫蒂 殖葬撮??栖棻. if(isDash) { xNormalVel = X_NORMALDASH_VELOCITY; yNormalVel = Y_NORMALDASH_VELOCITY; xSlantVel = X_SLANTDASH_VELOCITY; ySlantVel = Y_SLANTDASH_VELOCITY; } local xVelocity = xNormalVel; local yVelocity = yNormalVel; xMoveDirection_ = obj.getVar("movedir").get_vector(DIR_X_I); yMoveDirection_ = obj.getVar("movedir").get_vector(DIR_Y_I); if(yMoveDirection_ == ENUM_DIRECTION_NEUTRAL) xVelocity = xNormalVel; else xVelocity = xSlantVel; if(xMoveDirection_ == ENUM_DIRECTION_NEUTRAL) yVelocity = yNormalVel; else yVelocity = ySlantVel; if (xMoveDirection_ == ENUM_DIRECTION_NEUTRAL) xVelocity = xVelocity.tofloat() * 0.0; else if (xMoveDirection_ == ENUM_DIRECTION_LEFT) xVelocity = xVelocity.tofloat() * -1.0; if (yMoveDirection_ == ENUM_DIRECTION_NEUTRAL) yVelocity = yVelocity.tofloat() * 0.0; else if (yMoveDirection_ == ENUM_DIRECTION_UP) yVelocity = yVelocity.tofloat() * -1.0; sq_SetVelocity(obj, DIR_X_I, xVelocity.tofloat()); sq_SetVelocity(obj, DIR_Y_I, yVelocity.tofloat()); // 伪擎 潍模蒂 啗楼 薯濠葬 务晦釭 嗨晦蒂 ?贼 寰肾晦 阳侥缣 ?营 谢?蒂 荡潍?棻陛 // 棻挤?溯歜缣怃 绿掖?瑭怃 伪擎 谢?塭贼 翕蒙击 夸跷啪 ?栖棻. obj.getVar("dstpos").set_vector(2, obj.getXPos()); // 瞪?溯歜缣 桧翕?湍 谢? 荡潍奢除 殓栖棻. (x) obj.getVar("dstpos").set_vector(3, obj.getYPos()); // 瞪?溯歜缣 桧翕?湍 谢? 荡潍奢除 殓栖棻. (y) } // ?塭嘐搅煎 瞪殖胀 obj缣 渠鼻谢? 桧翕?朝 姜尔蒂 撮??栖棻. function setMovGrabObj(obj, dstX, dstY, isDash) { // 桧翕 陛栋? 谢?贼 // 迹瞳虽 桧翕 掸? local actobj = sq_GetCNRDObjectToActiveObject(obj); if(actobj) { actobj.getVar("dstpos").clear_vector(); actobj.getVar("dstpos").push_vector(dstX); actobj.getVar("dstpos").push_vector(dstY); actobj.getVar("dstpos").push_vector(0); // 瞪?溯歜缣 桧翕?湍 谢? 荡潍奢除 殓栖棻. (x) actobj.getVar("dstpos").push_vector(0); // 瞪?溯歜缣 桧翕?湍 谢? 荡潍奢除 殓栖棻. (y) actobj.getVar("dstpos").push_vector(0); // 瞪?溯歜缣 桧翕?湍 谢?谛 翕橾? 阳 苹遴? 渗热 殓栖棻. actobj.getVar("movedir").set_vector(DIR_X_I, ENUM_DIRECTION_NEUTRAL); actobj.getVar("movedir").set_vector(DIR_Y_I, ENUM_DIRECTION_NEUTRAL); actobj.getVar("dash").clear_vector(); actobj.getVar("dash").push_vector(isDash); local grabChr = sq_GetCNRDObjectToSQRCharacter(actobj); // chr煎 棻桧釭哔议蝶?击 ?栖棻. //if(grabChr) //setCommandCheckerMyControlChracter(grabChr, false); //print(" move obj:" + obj + " dash:" + isDash); if(isDash) { sq_AddSetStatePacketCollisionObject(actobj, STATE_DASH, null, STATE_PRIORITY_USER, true); //sq_AddSetStatePacketActiveObject(actobj, STATE_DASH, null, STATE_PRIORITY_USER); } else { sq_AddSetStatePacketCollisionObject(actobj, STATE_STAND, null, STATE_PRIORITY_USER, true); //sq_AddSetStatePacketActiveObject(actobj, STATE_STAND, null, STATE_PRIORITY_USER); } } } // 摹鸥胀 议葛搅暧 蝶鉴衙栖螳虏 撮??栖棻. 桧廓 ?煎餍颤殓缣怃朝 摹鸥击 ?紫 AI陛 夸跷贼 寰肾晦 阳侥缣 AI ?撩? 鼻鹧缣怃 蝶鉴 蜗煜虏 亿煎 撮??朝 掘亵煎 骨栖棻. // 斜葬坚 帼?击 扬毓击阳虏 桧薯 醴裔萄羹醴蒂 撮??鄹栖棻. function setSkillManagerMyControlChracter(aiChr) { if(!aiChr) return; local cmdChecker = aiChr.getCommandChecker(); if(cmdChecker) { local onlyAiChr = sq_GetCNRDObjectToAICharacter(aiChr); sq_SetTargetObjectAICharacter(onlyAiChr, null, false); // 棻挤寞戏煎 桧辨?晦 嫔? 噙樯 ?楚斜 殓栖棻. 顶陛 ai陛 夔?煤?朝 螃粽薛?樯虽 羹觼?朝 ?楚斜 殓栖棻 (irdsqrcharacter) // 议葛桧 摹鸥肾涡塭紫 ai赅萄陛 面螳毡横捡?晦 阳侥缣 true煎 嵘虽卫面鄹栖棻. aiChr.setAIModeByControlObject(true); local skillMgr = aiChr.getSkillManager(); if(skillMgr) { skillMgr.setParent(aiChr); skillMgr.setCommandChecker(cmdChecker); // 蝶鉴衙栖荡谛 醴裔萄羹醴蒂 翱念 local skillTree = aiChr.getCurrentSkillTree(); skillMgr.addAllKeyCommand(skillTree); aiChr.flushCommandEnable(); } } } // 蹂羶? ?塭嘐搅暧 aiChr蒂 夔?煤? 热 毡紫烟 醴裔萄羹醴谛 蝶鉴衙栖螳蒂 撮??栖棻. function setMyControlChracter(aiChr) { if(!aiChr) return; local cmdChecker = aiChr.getCommandChecker(); if(cmdChecker) { local onlyAiChr = sq_GetCNRDObjectToAICharacter(aiChr); sq_SetTargetObjectAICharacter(onlyAiChr, null, false); aiChr.setAIModeByControlObject(false); // 棻挤寞戏煎 桧辨?晦 嫔? 噙樯 ?楚斜 殓栖棻. 顶陛 ai陛 夔?煤?朝 螃粽薛?樯虽 羹觼?朝 ?楚斜 殓栖棻 (irdsqrcharacter) cmdChecker.setAIMode(false); // 醴裔? 羹觼缣怃 ai赅萄陛 on樯虽 off樯虽 羹觼?朝 ?楚斜蒂 撮??朝 ?热 殓栖棻. cmdChecker.commandListReset(); aiChr.initCommandChecker(cmdChecker, false); aiChr.setCommandChecker(cmdChecker); local skillMgr = aiChr.getSkillManager(); if(skillMgr) { skillMgr.setParent(aiChr); skillMgr.setCommandChecker(cmdChecker); // 蝶鉴衙栖荡谛 醴裔萄羹醴蒂 翱念 local skillTree = aiChr.getCurrentSkillTree(); skillMgr.addAllKeyCommand(skillTree); aiChr.flushCommandEnable(); } } } // 彰嫔顶缣 蜃朝 螃粽薛?陛 毡朝 羹觼?怃 毡戏贼.. 螃粽薛? 偌羹蒂 葬欐?栖棻. function getOverClickableEnemyObject(obj, x, y) { if(!obj) return null; local group = -1; local uniqueId = -1; local objectManager = obj.getObjectManager(); if (objectManager == null) return null; local target = null; //releaseOutLine(obj, "hoverd"); for (local i = 0; i < objectManager.getCollisionObjectNumber(); i+=1) { local object = objectManager.getCollisionObject(i); if (object) { // 瞳桧 嬴栖坚 狱羹暧 濠冲桧坚 议葛搅桧坚 if( (obj.isEnemy(object) == true && object.isInDamagableState(obj)) ) { //local width = sq_GetWidthObject(object); //local height = sq_GetHeightObject(object); //local screenX = sq_GetScreenXPos(object) - (width / 2); //local screenY = sq_GetScreenYPos(object) - height; // //local isUnion = sq_IsIntersectRect(screenX, screenY, width, height, x, y, w, h); local isUnion = object.isOverPos(x, y); if(isUnion) { group = sq_GetGroup(object); uniqueId = sq_GetUniqueId(object); //print(" group:" + group + " uniqueId:" + uniqueId); //object.setCustomOutline(true, sq_RGBA(255, 255, 0, 255), false, 2); //return group, uniqueId; return object; } } } } return null; } // 涡绾憎紫办缣怃 濠褐暧 夔?煤螃粽薛?蒂 撮??朝 睡碟殓栖棻. 阔 // #define getMyCharacter() (getMyControlCharacter()) 蒂 夥脯舆朝 睡碟殓栖棻. function setConrolCharacter(obj, index) { local controlSize = sq_GetMyControlObjectSize(obj); if(index < 0 || controlSize <= index) return; releaseOutLine(obj, "grabobj"); releaseOutLine(obj, "hoverd"); // local vObj = sq_GetMyControlObject(obj, index); // 摹鸥腆 议葛搅蒂 椭横蚂棻.. // local grabChr = sq_GetCNRDObjectToSQRCharacter(vObj); // chr煎 棻桧釭哔议蝶?击 ?栖棻. // if(grabChr) { // 夔?煤?朝 赅苌 螃粽薛?暧 醴裔萄 羹醴蒂 ai赅萄煎 瞪??栖棻. setAIControlObjCommandChecker(obj); // 摹鸥胀 议葛搅暧 醴裔萄羹醴蒂 瞪睡 ai煎 夥羞棻. //// 议葛搅 摹鸥 obj.getVar("grabobj").push_obj_vector(vObj); // grabobj // 摹鸥胀 议葛搅暧 蝶鉴衙栖螳虏 撮??栖棻. 桧廓 ?煎餍颤殓缣怃朝 摹鸥击 ?紫 AI陛 夸跷贼 寰肾晦 阳侥缣 AI ?撩? 鼻鹧缣怃 蝶鉴 蜗煜虏 亿煎 撮??朝 掘亵煎 骨栖棻. // 斜葬坚 帼?击 扬毓击阳虏 桧薯 醴裔萄羹醴蒂 撮??鄹栖棻. setSkillManagerMyControlChracter(grabChr); // 夥樯注 ?热 殓栖棻. CNUser::setMyControlCharacter(character); grabChr陛 夔?煤?朝 议葛搅塭坚 宪溥鄹栖棻. // CNUser::myControlCharacter_ = grabChr陛 腌栖棻. sq_SetMyControlCharacter(grabChr); } }