Sqr/character/creatormage/mousecontrol_lib.nut

635 lines
22 KiB
Plaintext
Raw 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.

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<objListSize;++i)
{
local vObj = obj.getVar(varStr).get_obj_vector(i);
if(vObj == null)
continue;
vObj.setCustomOutline(false, 0, true, 2);
}
obj.getVar(varStr).clear_obj_vector();
}
// 夔?煤?朝 赅苌 螃粽薛?暧 醴裔萄 羹醴蒂 ai赅萄煎 瞪??栖棻.
function setAIControlObjCommandChecker(obj)
{
local objListSize = sq_GetMyControlObjectSize(obj);
for(local i =0;i < objListSize;++i)
{
local vObj = sq_GetMyControlObject(obj, i);
if(vObj == null)
continue;
local grabChr = sq_GetCNRDObjectToSQRCharacter(vObj);
if(grabChr)
{
local cmdChecker = grabChr.getCommandChecker();
grabChr.initCommandChecker(cmdChecker, true); // 濠褐桧 夔?煤?晦 嫔? 醴裔萄羹醴 ai?楚斜 睡碟击 true煎 夥习栖棻.
grabChr.setCommandChecker(cmdChecker);
// 醴裔? 羹觼缣怃 ai赅萄陛 on樯虽 off樯虽 羹觼?朝 ?楚斜蒂 撮??朝 ?热 殓栖棻.
cmdChecker.setAIMode(true);
// 棻挤寞戏煎 桧辨?晦 嫔? 噙樯 ?楚斜 殓栖棻. 顶陛 ai陛 夔?煤?朝 螃粽薛?樯虽 羹觼?朝 ?楚斜 殓栖棻 (irdsqrcharacter)
grabChr.setAIModeByControlObject(true);
local onlyAiChr = sq_GetCNRDObjectToAICharacter(grabChr);
sq_SetTargetObjectAICharacter(onlyAiChr, null, false);
local skillMgr = grabChr.getSkillManager();
if(skillMgr)
{
skillMgr.setParent(grabChr);
skillMgr.setCommandChecker(cmdChecker); // 蝶鉴衙栖荡谛 醴裔萄羹醴蒂 翱念
local skillTree = grabChr.getCurrentSkillTree();
skillMgr.addAllKeyCommand(skillTree);
grabChr.flushCommandEnable();
}
}
}
}
// 摹鸥胀 obj漱搅缣怃 obj 谖婉摹击 斜董栖棻.
function setOutLine(obj, varStr, rgb)
{
local objListSize = obj.getVar(varStr).get_obj_vector_size();
for(local i =0;i<objListSize;++i)
{
local vObj = obj.getVar(varStr).get_obj_vector(i);
if(vObj == null)
continue;
vObj.setCustomOutline(true, rgb, false, 1);
}
}
// 詹帼 orgStr 掘瑜暧 螃粽薛? 漱搅蒂 詹帼 dstStr 掘瑜暧 螃粽薛? 漱搅缣 仅伪桧 苹??栖棻.
function objCopy(obj, dstStr, orgStr)
{
obj.getVar(dstStr).clear_obj_vector();
local objListSize = obj.getVar(orgStr).get_obj_vector_size();
for(local i =0;i<objListSize;++i)
{
local vObj = obj.getVar(orgStr).get_obj_vector(i);
if(vObj == null)
continue;
obj.getVar(dstStr).push_obj_vector(vObj);
}
}
// 彰嫔顶缣 蜃朝 螃粽薛?陛 毡朝 羹觼?怃 毡戏贼.. 詹帼 hoverd 掘瑜 漱搅缣 ?卫?栖棻.
function pushOverClickableObject(obj, x, y, w, h)
{
if(!obj)
return null;
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) == false && isMasterControlObject(object) && object.isInDamagableState(obj) && object.isObjectType(OBJECTTYPE_CHARACTER)) || sq_IsMyCharacter(object))
if( (obj.isEnemy(object) == false && isMasterControlObject(object) && object.isInDamagableState(obj) && object.isObjectType(OBJECTTYPE_CHARACTER)))
{
//sq_GetScreenXPos
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);
if(isUnion)
{
object.setCustomOutline(true, sq_RGBA(255, 255, 0, 255), false, 1);
obj.getVar("hoverd").push_obj_vector(object);
}
}
}
}
}
// 锰?朝 寞?戏煎 螃粽薛?蒂 桧翕卫霾栖棻.
// 桧翕卫面捡 ?朝 螃粽薛?陛 衙 瑞? 褒?肾横捡 ?朝 瑞??热 殓栖棻.
function procDestinationMove(obj)
{
//obj.getVar("dstpos").clear_vector();
local state = obj.getState();
if (state != STATE_DASH && state != STATE_STAND)
return;
// dstpos朝 桧翕?坚濠 ?朝 迹瞳虽 pos殓栖棻.
// 0(DIR_X_I) 擎 x寞? 1(DIR_Y_I) 擎 y寞?殓栖棻.
if (obj.getVar("dstpos").size_vector() == 0)
return;
// movedir朝 桧翕寞?击 ?卫? vector等桧颤 殓栖棻.
// 0(DIR_X_I) 擎 x寞? 1(DIR_Y_I) 擎 y寞?殓栖棻.
if (obj.getVar("movedir").size_vector() == 0)
{
obj.getVar("movedir").push_vector(4);
obj.getVar("movedir").push_vector(4);
}
local destinationXPos_ = obj.getVar("dstpos").get_vector(DIR_X_I);
local destinationYPos_ = obj.getVar("dstpos").get_vector(DIR_Y_I);
local xMoveDirection_ = obj.getVar("movedir").get_vector(DIR_X_I);
local yMoveDirection_ = obj.getVar("movedir").get_vector(DIR_Y_I);
if(obj.getDirection() != xMoveDirection_)
{
obj.setCurrentDirection(xMoveDirection_);
}
// 横蛤煎 陛捡?虽缣 渠? 寞?击 扑姜?舆朝 睡碟殓栖棻.
// 办摹 x谢?缣 渠? 寞?击 扑姜?栖棻.
//if(obj.getXPos() > 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);
}
}