This commit is contained in:
2024-03-18 21:37:40 +08:00
commit c4aef8f3a3
313 changed files with 74071 additions and 0 deletions

Binary file not shown.

View File

@@ -0,0 +1,112 @@
function sq_AddFunctionName(appendage)
{
appendage.sq_AddFunctionName("proc", "proc_appendage_creator_flame")
appendage.sq_AddFunctionName("prepareDraw", "prepareDraw_appendage_creator_flame")
appendage.sq_AddFunctionName("onStart", "onStart_appendage_creator_flame")
appendage.sq_AddFunctionName("onEnd", "onEnd_appendage_creator_flame")
appendage.sq_AddFunctionName("isEnd", "isEnd_appendage_creator_flame")
}
function sq_AddEffect(appendage)
{
}
function proc_appendage_creator_flame(appendage)
{
if (!appendage)
{
return;
}
local cnt = appendage.sq_var.get_vector(I_REMAIN_COUNT);
local isCharge = appendage.sq_var.get_vector(l_CHARGE_ON); // 醱瞪 酝樯虽 羹觼
// 醱瞪赅萄塭贼..
if (isCharge)
{
// 譆渠醱瞪榆击 椭横谛怃 醱瞪击 卫霾栖棻.
local time = appendage.getTimer().Get();
appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, time);
local maxCnt = appendage.sq_var.get_vector(I_MAX_COUNT);
local initRemainCnt = appendage.sq_var.get_vector(I_CHARGE_INIT_COUNT);
local maxChargeT = appendage.sq_var.get_vector(I_CHARGE_TIME);
local chargeTime = maxChargeT.tofloat() * ((maxCnt.tofloat() - initRemainCnt.tofloat()) / maxCnt.tofloat());
//print(" flame charge t:" + maxChargeT);
local currentCnt = sq_GetUniformVelocity(initRemainCnt, maxCnt, time, chargeTime.tointeger());
appendage.sq_var.set_vector(I_REMAIN_COUNT, currentCnt);
// 棻 瓣锡棻贼 醱瞪赅萄 ?薯
if (currentCnt >= maxCnt)
{
appendage.sq_var.set_vector(l_CHARGE_ON, 0);
appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, 0);
appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, 0);
}
}
}
function onStart_appendage_creator_flame(appendage)
{
if(!appendage) {
return;
}
local obj = appendage.getParent();
local sq_var = appendage.sq_var;
sq_var.clear_timer_vector();
sq_var.push_timer_vector();
local t = sq_var.get_timer_vector(0);
if (t)
{
local eventTerm = 10;
t.setParameter(eventTerm, -1);
t.resetInstant(0);
}
}
function prepareDraw_appendage_creator_flame(appendage)
{
if(!appendage) {
return;
}
local obj = appendage.getParent();
}
function onEnd_appendage_creator_flame(appendage)
{
if(!appendage) {
return;
}
local obj = appendage.getParent();
}
function isEnd_appendage_creator_flame(appendage)
{
if(!appendage) return false;
local T = appendage.getTimer().Get();
return false;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,109 @@
function sq_AddFunctionName(appendage)
{
appendage.sq_AddFunctionName("proc", "proc_appendage_creator_wind")
appendage.sq_AddFunctionName("prepareDraw", "prepareDraw_appendage_creator_wind")
appendage.sq_AddFunctionName("onStart", "onStart_appendage_creator_wind")
appendage.sq_AddFunctionName("onEnd", "onEnd_appendage_creator_wind")
appendage.sq_AddFunctionName("isEnd", "isEnd_appendage_creator_wind")
}
function sq_AddEffect(appendage)
{
}
function proc_appendage_creator_wind(appendage)
{
if(!appendage) {
return;
}
local cnt = appendage.sq_var.get_vector(I_REMAIN_COUNT);
local isCharge = appendage.sq_var.get_vector(l_CHARGE_ON); // 醱瞪 酝樯虽 羹觼
// 醱瞪赅萄塭贼..
if (isCharge)
{
// 譆渠醱瞪榆击 椭横谛怃 醱瞪击 卫霾栖棻.
local time = appendage.getTimer().Get();
appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, time);
local maxCnt = appendage.sq_var.get_vector(I_MAX_COUNT);
local initRemainCnt = appendage.sq_var.get_vector(I_CHARGE_INIT_COUNT);
local maxChargeT = appendage.sq_var.get_vector(I_CHARGE_TIME);
local chargeTime = maxChargeT.tofloat() * ((maxCnt.tofloat() - initRemainCnt.tofloat()) / maxCnt.tofloat());
//print(" wind charge t:" + maxChargeT);
local currentCnt = sq_GetUniformVelocity(initRemainCnt, maxCnt, time, chargeTime.tointeger());
appendage.sq_var.set_vector(I_REMAIN_COUNT, currentCnt);
// 棻 瓣锡棻贼 醱瞪赅萄 ?薯
if (currentCnt >= maxCnt)
{
appendage.sq_var.set_vector(l_CHARGE_ON, 0);
appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, 0);
appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, 0);
}
}
}
function onStart_appendage_creator_wind(appendage)
{
if(!appendage) {
return;
}
local obj = appendage.getParent();
local sq_var = appendage.sq_var;
sq_var.clear_timer_vector();
sq_var.push_timer_vector();
local t = sq_var.get_timer_vector(0);
if (t)
{
local eventTerm = 10;
t.setParameter(eventTerm, -1);
t.resetInstant(0);
}
}
function prepareDraw_appendage_creator_wind(appendage)
{
if(!appendage) {
return;
}
local obj = appendage.getParent();
}
function onEnd_appendage_creator_wind(appendage)
{
if(!appendage) {
return;
}
local obj = appendage.getParent();
}
function isEnd_appendage_creator_wind(appendage)
{
if(!appendage) return false;
local T = appendage.getTimer().Get();
return false;
}

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,317 @@
SUB_STATE_FIREHURRICANE_0 <- 0
SUB_STATE_FIREHURRICANE_1 <- 1
function checkExecutableSkill_FireHurricane(obj)
{
if (!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_FIREHURRICANE);
if (b_useskill)
{
print(" checkExecutableSkill_FireHurricane");
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_FIREHURRICANE_0); // substate撮?
obj.sq_AddSetStatePacket(STATE_FIREHURRICANE, STATE_PRIORITY_USER, true);
return true;
}
return false;
}
function checkCommandEnable_FireHurricane(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
local skill_level = obj.sq_GetSkillLevel(SKILL_FIREHURRICANE);
if(state == STATE_ATTACK)
{
return obj.sq_IsCommandEnable(SKILL_FIREHURRICANE); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW);
}
return true;
}
function onSetState_FireHurricane(obj,state,datas,isResetTimer)
{
if(!obj) return;
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
obj.sq_StopMove();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
obj.getVar().clear_vector();
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
print(" onSetState_FireHurricane:" + substate);
if (substate == SUB_STATE_FIREHURRICANE_0)
{
//setCreatorSkillStateSkillIndex(obj, -1);
local skill_level = obj.sq_GetSkillLevel(SKILL_FIREHURRICANE);
obj.sq_SetCurrentAnimation(CUSTOM_ANI_FIRE_HURRICANE);
obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACKINFO_FIRE_HURRICANE);
//local speedRate = 1.0;
//
//obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,
//SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
//
obj.getVar("state").clear_ct_vector();
obj.getVar("state").push_ct_vector();
local t = obj.getVar("state").get_ct_vector(0);
t.Reset();
t.Start(100000,0);
local multiHitTerm = obj.sq_GetIntData(SKILL_FIREHURRICANE, 0); // 0.棻钦?? 除问
obj.sq_timer_.setParameter(multiHitTerm, -1);
obj.sq_timer_.resetInstant(0);
local skill_level = obj.sq_GetSkillLevel(SKILL_FIREHURRICANE);
// 1.虽楼卫除
local attackTime = obj.sq_GetLevelData(SKILL_FIREHURRICANE, SKL_LV_1, skill_level);
local power = obj.sq_GetPowerWithPassive(SKILL_FIREHURRICANE, STATE_FIREHURRICANE, SKL_LV_0, -1,1.0);
obj.sq_SetCurrentAttackPower(power);
local ani = sq_GetCurrentAnimation(obj);
if (ani)
{
// 2.?葬馨樯 饵桧锷 (%) (100桧 晦狱)
local imageRate = sq_GetLevelData(obj, SKILL_FIREHURRICANE, SKL_LV_2, skill_level);
print(" imageRate:" + imageRate);
ani.setImageRateFromOriginalOnlyChild(imageRate.tofloat() / 100.0, imageRate.tofloat() / 100.0);
sq_SetAttackBoundingBoxSizeRate(ani, imageRate.tofloat() / 100.0, imageRate.tofloat() / 100.0, 1.0);
}
obj.sq_PlaySound("R_CR_HURRICANE");
}
else if (substate == SUB_STATE_FIREHURRICANE_1)
{
local ani = sq_GetCurrentAnimation(obj);
}
}
function prepareDraw_FireHurricane(obj)
{
if(!obj) return;
}
function onEnterFrame_FireHurricane(obj, frameIndex)
{
if (!obj)
return;
local t = obj.getVar("state").get_ct_vector(0);
local time = 0;
if(t)
time = t.Get();
local ani = sq_GetCurrentAnimation(obj);
if(!ani)
return;
if (frameIndex == 2)
{
obj.sq_PlaySound("FIREHURRICANE_BURST");
}
local loopStartFrameIndex = 15;
local loopEndFrameIndex = loopStartFrameIndex + 3;
local endFrameIndex = 24;
local frmIndex = ani.GetCurrentFrameIndex();
if (frmIndex > loopEndFrameIndex && frmIndex < endFrameIndex)
{
local skill_level = obj.sq_GetSkillLevel(SKILL_FIREHURRICANE);
local attackTotalTime = obj.sq_GetLevelData(SKILL_FIREHURRICANE, SKL_LV_1, skill_level); // 1.虽楼卫除
if (time > attackTotalTime)
{
print(" frmIndex:" + frmIndex + " endFrameIndex:" + endFrameIndex + " Time:" + attackTotalTime);
if (obj.isMyControlObject())
{
sq_SendChangeSkillEffectPacket(obj, SKILL_FIREHURRICANE);
//ani.setEnd(false);
//ani.setCurrentFrameWithChildLayer(endFrameIndex + 1);
}
}
else
{
print(" loopStartFrameIndex:" + loopStartFrameIndex);
ani.setEnd(false);
ani.setCurrentFrameWithChildLayer(loopStartFrameIndex);
sq_AnimationProc(ani);
}
}
}
function onProc_FireHurricane(obj)
{
if (!obj) return;
local t = obj.getVar("state").get_ct_vector(0);
local time = 0;
if(t)
time = t.Get();
if (obj.sq_timer_.isOnEvent(time) == true)
{
obj.resetHitObjectList();
}
//obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
function onProcCon_FireHurricane(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if (substate == SUB_STATE_FIREHURRICANE_0)
{
if (sq_IsDownKey(obj, 1, true))
{
print(" Enter jump Command");
sq_SendChangeSkillEffectPacket(obj, SKILL_FIREHURRICANE);
}
}
}
function onEndCurrentAni_FireHurricane(obj)
{
if (!obj.isMyControlObject())
{
return;
}
local substate = obj.getSkillSubState();
print(" endani");
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
function onChangeSkillEffect_FireHurricane(obj, skillIndex, reciveData)
{
if (!obj)
return;
local substate = obj.getSkillSubState();
if (substate == SUB_STATE_FIREHURRICANE_0)
{
local endFrameIndex = 24;
local ani = sq_GetCurrentAnimation(obj);
if(!ani)
return;
obj.setSkillSubState(SUB_STATE_FIREHURRICANE_1);
ani.setEnd(false);
ani.setCurrentFrameWithChildLayer(endFrameIndex + 1);
}
}
function onKeyFrameFlag_FireHurricane(obj,flagIndex)
{
if(!obj) return false;
return true;
}
function onEndState_FireHurricane(obj,new_state)
{
if(!obj) return;
}
function onAfterSetState_FireHurricane(obj,state,datas,isResetTimer)
{
if(!obj) return;
}
function onBeforeAttack_FireHurricane(obj,damager,boundingBox,isStuck)
{
if(!obj) return;
}
function onAttack_FireHurricane(obj,damager,boundingBox,isStuck)
{
if(!obj) return;
}
function onAfterAttack_FireHurricane(obj,damager,boundingBox,isStuck)
{
if(!obj) return 0;
return 1;
}
function onBeforeDamage_FireHurricane(obj,attacker,boundingBox,isStuck)
{
if(!obj) return;
}
function onDamage_FireHurricane(obj,attacker,boundingBox)
{
if(!obj) return;
}
function onAfterDamage_FireHurricane(obj,attacker,boundingBox)
{
if(!obj) return;
}

View File

@@ -0,0 +1,82 @@
SUB_STATE_FIREMETEO_0 <- 0
function onMouseButtonDown_FireMeteo(obj)
{
if (!obj) return;
local objectManager = obj.getObjectManager();
local xPos = objectManager.getFieldXPos(IMouse.GetXPos(), ENUM_DRAWLAYER_NORMAL);
local yPos = objectManager.getFieldYPos(IMouse.GetYPos(), 0, ENUM_DRAWLAYER_NORMAL);
local zPos = 61;
if (yPos < TILE_FLOOR_START_Y)
{ // 夥款桧 卫蒙?朝 y谢?塭贼..
return;
}
local ptl = sq_GetParticleInfo(obj, "Particle/CreatorFireMeteo.ptl");
sq_BinaryParameterStartWrite();
// ?塭嘐搅陛 伞鼠 号嬴 夥桧伞葬 等桧颤蒂 桧辨?栖棻.
// x, y, z == 亿郭?卫粽螃粽薛?陛 轿溘腆 够
// wx, wy == 唳坚?卫陛 轿溘腆 够
// delay ControlRate 唳坚?卫暧 蝶?萄 亵瞰辨 %高
// warningMarkIndex == 唳坚?卫暧 谦盟 : 0 寰尔歜, 1 尔鳝, 2 渠?, 3 尔鳝 (嬴捱Only), 4 渠? (嬴捱Only)
local moveVariable1 = 500;
local naaMoveVariable1 = -400; // -800
local createXDistance = xPos - moveVariable1;
local createYDistance = yPos;
local createZDistance = -naaMoveVariable1;
local dir = sq_GetDirection(obj);
if (dir == ENUM_DIRECTION_LEFT)
{
createXDistance = xPos + moveVariable1;
}
sq_BinaryParameterWriteDword(createXDistance);
sq_BinaryParameterWriteDword(createYDistance);
sq_BinaryParameterWriteDword(createZDistance);
sq_BinaryParameterWriteDword(xPos);
sq_BinaryParameterWriteDword(yPos);
sq_BinaryParameterWriteDword(ENUM_DIRECTION_NEUTRAL);
sq_BinaryParameterWriteDword(200); // int delayControlRate
local markType = obj.sq_GetIntData(SKILL_FIREMETEO, 0); // 颤啪? 葆觼 谦盟(渗唳?虽 蜓匙!)
sq_BinaryParameterWriteDword(markType); //int warningMarkIndex
// 奢问溘 跷陛热纂 蒙机
local level = sq_GetSkillLevel(obj, SKILL_CREATORFLAME);
// 1.奢问溘 跷陛 热纂 (%)
local addValue = sq_GetLevelData(obj, SKILL_CREATORFLAME, SKL_LV_1, level);
local addRate = addValue.tofloat() / 100.0;
print(" addRate:" + addRate);
local skillLevel = sq_GetSkillLevel(obj, SKILL_FIREMETEO);
local power = obj.sq_GetPowerWithPassive(SKILL_FIREMETEO, STATE_FIREMETEO, SKL_LV_0,-1,addRate.tofloat());
local sizeRate = sq_GetLevelData(obj, SKILL_FIREMETEO, SKL_LV_1, skillLevel);
// 诡才螃 奢问溘 ?卫
sq_BinaryStartWrite();
// 奢问溘 撮?
sq_BinaryWriteDword(power);
// size rate
sq_BinaryWriteDword(sizeRate);
local skill_level = obj.sq_GetSkillLevel(SKILL_FIREMETEO);
sq_CreatePassiveObjectAfterWarning(obj, 23501, skill_level, ptl);
obj.sq_PlaySound("R_METEO_CASTING");
}

View File

@@ -0,0 +1,68 @@
SUB_STATE_FIREWALL_0 <- 0
SUB_STATE_FIREWALL_1 <- 1
function onMouseMoveCharacter_Firewall(obj, x, y)
{
if (!obj)
return;
local objectManager = obj.getObjectManager();
local x1 = getCreatorBeforePosX(obj);
local y1 = getCreatorBeforePosY(obj);
local x2 = objectManager.getFieldXPos(x, ENUM_DRAWLAYER_NORMAL);
local y2 = objectManager.getFieldYPos(y, 0, ENUM_DRAWLAYER_NORMAL);
local zPos = 0;
print(" x2:" + x2 + " y2:" + y2 + " TILE_FLOOR_START_Y:" + TILE_FLOOR_START_Y);
if (y2 < TILE_FLOOR_START_Y)
{ // 夥款桧 卫蒙?朝 y谢?塭贼..
return;
}
local appendage = getCreatorMageAppendageByType(obj, CREATOR_TYPE_FLAME);
if (!appendage)
return;
local dist = getDist2(x1, y1, x2, y2);
local term = obj.sq_GetIntData(SKILL_FIREWALL, 0); // 当撩 除问
local time = appendage.getTimer().Get();
print( " term:" + term + " dist:" + dist + " time:" + time);
if (term <= dist || time > 100)
{
local consumeValue = getCreatorSkillConsumeValue(obj, SKILL_FIREWALL);
if (useCreatorSkill(obj, SKILL_FIREWALL, x2, y2, consumeValue))
{
// 奢问溘 跷陛热纂 蒙机
local level = sq_GetSkillLevel(obj, SKILL_CREATORFLAME);
// 1.奢问溘 跷陛 热纂 (%)
local addValue = sq_GetLevelData(obj, SKILL_CREATORFLAME, SKL_LV_1, level);
local addRate = addValue.tofloat() / 100.0;
// 0.奢问溘
local power = obj.sq_GetPowerWithPassive(SKILL_FIREWALL, STATE_FIREWALL, SKL_LV_0,-1, addRate.tofloat());
local skillLevel = sq_GetSkillLevel(obj, SKILL_FIREWALL);
// 1.?桧横错 饵桧锷
local sizeRate = sq_GetLevelData(obj, SKILL_FIREWALL, SKL_LV_1, skillLevel);
sq_BinaryStartWrite();
sq_BinaryWriteDword(power); // ?
sq_BinaryWriteDword(sizeRate); // ?桧横错 饵桧锷
sq_SendCreatePassiveObjectPacketPos(obj, 23500, 0, x2, y2, zPos);
}
}
}

Binary file not shown.

View File

@@ -0,0 +1,41 @@
SUB_STATE_ICEROCK_0 <- 0
function onMouseButtonDown_IceRock(obj)
{
if (!obj) return;
local objectManager = obj.getObjectManager();
local xPos = objectManager.getFieldXPos(IMouse.GetXPos(), ENUM_DRAWLAYER_NORMAL);
local yPos = objectManager.getFieldYPos(IMouse.GetYPos(), 0, ENUM_DRAWLAYER_NORMAL) + 20;
local zPos = 61;
if (yPos < TILE_FLOOR_START_Y)
{ // 夥款桧 卫蒙?朝 y谢?塭贼..
return;
}
// 0.奢问溘
// 奢问溘 跷陛热纂 蒙机
local level = sq_GetSkillLevel(obj, SKILL_CREATORICE);
// 1.奢问溘 跷陛 热纂 (%)
local addValue = sq_GetLevelData(obj, SKILL_CREATORICE, SKL_LV_1, level);
local addRate = addValue.tofloat() / 100.0;
local power = obj.sq_GetPowerWithPassive(SKILL_ICEROCK, STATE_ICEROCK, 0,-1,addRate.tofloat());
// 1. 棻钦?? 除问
local multiHitTerm = sq_GetIntData(obj, SKILL_ICEROCK, 1);
sq_BinaryStartWrite();
sq_BinaryWriteDword(power); // ?
sq_BinaryWriteDword(multiHitTerm); // 棻钦??
sq_SendCreatePassiveObjectPacketPos(obj, 23503, 0, xPos, yPos, zPos);
obj.sq_PlaySound("ICESTONE_READY");
}

View File

@@ -0,0 +1,166 @@
SUB_STATE_ICESHIELD_0 <- 0
SUB_STATE_ICESHIELD_1 <- 1
//STATE_ICESHIELD <- 58
//SKILL_ICESHIELD <- 135
function checkExecutableSkill_IceShield(obj)
{
if (!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_ICESHIELD);
if (b_useskill)
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ICESHIELD_0); // substate撮?
obj.sq_AddSetStatePacket(STATE_ICESHIELD, STATE_PRIORITY_USER, true);
return true;
}
return false;
}
function checkCommandEnable_IceShield(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
local skill_level = obj.sq_GetSkillLevel(SKILL_ICESHIELD);
if(state == STATE_ATTACK)
{
return obj.sq_IsCommandEnable(SKILL_ICESHIELD); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW);
}
return true;
}
function onSetState_IceShield(obj,state,datas,isResetTimer)
{
if(!obj) return;
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
obj.sq_StopMove();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
obj.getVar().clear_vector();
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
if (substate == SUB_STATE_ICESHIELD_0)
{
//setCreatorSkillStateSkillIndex(obj, -1);
local skill_level = obj.sq_GetSkillLevel(SKILL_ICESHIELD);
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICE_SHIELD);
local speedRate = 1.0;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,
SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
obj.getVar("state").clear_ct_vector();
obj.getVar("state").push_ct_vector();
local t = obj.getVar("state").get_ct_vector(0);
t.Reset();
t.Start(100000,0);
local multiHitTerm = obj.sq_GetIntData(SKILL_ICESHIELD, 0); // 0.棻钦?? 除问
obj.sq_timer_.setParameter(multiHitTerm, -1);
obj.sq_timer_.resetInstant(0);
local skill_level = obj.sq_GetSkillLevel(SKILL_ICESHIELD);
// 0.嵘虽卫除
local attackTime = obj.sq_GetLevelData(SKILL_ICESHIELD, SKL_LV_0, skill_level);
obj.sq_PlaySound("R_CR_ICESHIELD");
}
else if (substate == SUB_STATE_ICESHIELD_1)
{
}
}
function onProc_IceShield(obj)
{
if(!obj) return;
}
function onProcCon_IceShield(obj)
{
if(!obj) return;
}
function onEndCurrentAni_IceShield(obj)
{
if(!obj) return;
if (!obj.isMyControlObject())
{
return;
}
local substate = obj.getSkillSubState();
//if (substate == SUB_STATE_FIREHURRICANE_0)
//{
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
//}
}
function onKeyFrameFlag_IceShield(obj,flagIndex)
{
if(!obj) return false;
if (flagIndex == 1)
{
obj.sq_PlaySound("BREAKING_RUSH");
if (obj.sq_IsMyControlObject())
{
local skill_level = obj.sq_GetSkillLevel(SKILL_ICESHIELD);
// 0.嵘虽卫除
local time = obj.sq_GetLevelData(SKILL_ICESHIELD, SKL_LV_0, skill_level);
obj.sq_StartWrite();
obj.sq_WriteWord(time);
obj.sq_SendCreatePassiveObjectPacket(23504, 0, 0, 0, 1);
}
}
return true;
}
function onEndState_IceShield(obj,new_state)
{
if(!obj) return;
}
function onAfterSetState_IceShield(obj,state,datas,isResetTimer)
{
if(!obj) return;
}

View File

@@ -0,0 +1,574 @@
SUB_STATE_MGRAB_0 <- 0
SUB_STATE_MGRAB_1 <- 1
function setStateMouseGrab(obj)
{
if (!obj) return;
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
//local grabNum = obj.sq_GetIntData(SKILL_MGRAB, 1); //1. 葆办蝶煎 濩击 热 毡朝 ?热
//obj.getVar("MouseGrab").clear_vector();
//obj.getVar("MouseGrab").push_vector(grabNum);
// 觼葬缣桧搅暧 蝶鉴樯策蝶蒂 撮??栖棻.
//setCreatorSkillStateSkillIndex(obj, SKILL_MGRAB);
//setCreatorSkillCount(obj, grabNum);
releaseOutLine(obj, "grabobj");
obj.getVar("mgrab").clear_vector();
obj.getVar("mgrab").push_vector(0);
obj.getVar("mgrab").push_vector(0);
obj.getVar("mgrab").clear_timer_vector();
obj.getVar("mgrab").push_timer_vector();
local t = obj.getVar("mgrab").get_timer_vector(0);
t.setParameter(100, -1);
t.resetInstant(0);
obj.getVar("mgrab").clear_ct_vector();
obj.getVar("mgrab").push_ct_vector();
local timer = obj.getVar("mgrab").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
}
function grabThrowObject(obj)
{
local hoverEnemyObject = getOverClickableEnemyObject(obj, IMouse.GetXPos(), IMouse.GetYPos());
if (hoverEnemyObject)
{
local grabable = sq_IsGrabable(obj, hoverEnemyObject);
print(" grab:" + grabable + " holdable:" + sq_IsHoldable(obj, hoverEnemyObject));
if (sq_IsHoldable(obj, hoverEnemyObject) == true && sq_IsGrabable(obj, hoverEnemyObject) == true)
{ // 濩晦陛栋瞳桧塭贼 ?卫?栖棻.
// 濩擎匙桧 毡朝 唳办缣虏 啪桧虽蒂 还罹鄹栖棻.
local consumeValue = getCreatorSkillConsumeValue(obj, SKILL_MGRAB);
if (!useCreatorSkill(obj, SKILL_MGRAB, 0, 0, consumeValue))
return;
//
obj.getVar("grabobj").push_obj_vector(hoverEnemyObject); // grabobj
local activeobj = sq_GetCNRDObjectToActiveObject(hoverEnemyObject);
if (activeobj)
{
// ?葆葬虏 濩朝棻.
local objListSize = obj.getVar("grabobj").get_obj_vector_size();
print(" objListSize:" + objListSize);
for (local i =0;i<objListSize;++i)
{
local vObj = obj.getVar("grabobj").get_obj_vector(i);
local act = sq_GetCNRDObjectToActiveObject(vObj);
if (act == null)
continue;
sq_IntVectorClear(sq_GetGlobalIntVector());
sq_IntVectorPush(sq_GetGlobalIntVector(),0);
sq_AddSetStatePacketActiveObject(act,STATE_HOLD, sq_GetGlobalIntVector(), STATE_PRIORITY_FORCE);
}
}
} //if (sq_IsHoldable(obj, hoverEnemyObject) == false && sq_IsGrabable(obj, hoverEnemyObject) == true)
}
}
function onSetState_Mgrab(obj,state,datas,isResetTimer)
{
}
function onChangeSkillEffect_Mgrab(obj, skillIndex, reciveData)
{
if (!obj)
return;
local size = 8; // ?釭 涡 跷陛?捡?
local data_l =[];
data_l.resize(size);
for (local i = 0; i < 8; i++)
{
data_l[i] = -1;
if (reciveData.getSize() > 0)
{
data_l[i] = reciveData.readDword();
}
}
local targetObj = sq_GetObject(obj, data_l[0], data_l[1]);
if (targetObj)
{
local xPos = data_l[2];
local zPos = data_l[3];
if (zPos < 0)
zPos = 0;
local stateTimer = obj.sq_GetStateTimer();
if (!obj.getVar("mgrab").get_vector(0))
{
obj.getVar("mgrab").set_vector(0, xPos);
obj.getVar("mgrab").set_vector(1, zPos);
}
local state = data_l[4];
print(" on change state:" + state);
//if (obj.isMyControlObject())
{
if (state == 0)
{
if (targetObj.getState() != STATE_HOLD && targetObj.getState() != STATE_DOWN)
{
local act = sq_GetCNRDObjectToActiveObject(targetObj);
if (act)
{
sq_IntVectorClear(sq_GetGlobalIntVector());
sq_IntVectorPush(sq_GetGlobalIntVector(),0);
sq_AddSetStatePacketActiveObject(act, STATE_HOLD, sq_GetGlobalIntVector(), STATE_PRIORITY_FORCE);
print(" onchange setstate hold");
}
}
}
else if (state == 1)
{
local act = sq_GetCNRDObjectToActiveObject(targetObj);
if (act)
{
local direction = data_l[5];
local nX = data_l[6];
local nY = data_l[7];
sq_IntVectorClear(sq_GetGlobalIntVector());
sq_IntVectorPush(sq_GetGlobalIntVector(),direction);
sq_IntVectorPush(sq_GetGlobalIntVector(),0);
sq_IntVectorPush(sq_GetGlobalIntVector(),1);
sq_IntVectorPush(sq_GetGlobalIntVector(),nX);
sq_IntVectorPush(sq_GetGlobalIntVector(),nY);
sq_AddSetStatePacketActiveObject(act,STATE_DOWN, sq_GetGlobalIntVector(), STATE_PRIORITY_FORCE);
print(" onchange setstate down:");
}
}
}
sq_SetCurrentPos(targetObj, xPos, targetObj.getYPos(), zPos);
}
}
function prepareDraw_Mgrab(obj)
{
if (!obj) return;
}
// 剪葬 桧? 颤啃击 琼嬴顶横 葬欐?朝 ?热殓栖棻.
function pushTargetDistanceMinObject(obj, targetObj, distance)
{
if (!obj)
return;
local objectManager = obj.getObjectManager();
if (objectManager == null)
return;
if (!targetObj)
return;
obj.getVar("mgrab").clear_obj_vector();
local grabObj = null;
for (local i = 0; i < objectManager.getCollisionObjectNumber(); i+=1)
{
local object = objectManager.getCollisionObject(i);
if (sq_IsHoldable(obj, object) == true && sq_IsGrabable(obj, object) == true)
{ // 濩晦陛栋瞳桧塭贼 ?卫?栖棻.
if (object && obj.isEnemy(object) && object.isInDamagableState(obj) && object.isObjectType(OBJECTTYPE_ACTIVE))
{
local isSame = isSameObject(targetObj, object);
if (isSame)
continue;
local activeObj = sq_GetCNRDObjectToActiveObject(object);
// 舱羲 顶缣怃 陛潍 陛梱遴 瞳击 坚艇棻
if (activeObj)
{
if (!activeObj.isDead())
{
local dis = sq_GetDistanceObject(targetObj, object, false);
if (dis < distance)
{
distance = dis;
grabObj = activeObj;
//obj.getVar("mgrab").push_obj_vector(object);
}
}
}
}
} //if (sq_IsHoldable(obj, hoverEnemyObject) == false && sq_IsGrabable(obj, hoverEnemyObject) == true)
}
if (grabObj)
{
obj.getVar("mgrab").push_obj_vector(grabObj);
}
}
function onProc_Mgrab(obj)
{
if (!obj) return;
if (!obj.isMyControlObject())
return;
local objListSize = obj.getVar("grabobj").get_obj_vector_size();
if (objListSize <= 0)
return;
local stage = sq_GetObjectManagerStage(obj);
if (!stage)
return;
local control = stage.getMainControl();
if (control.IsRBDown())
{
onMouseMoveButtonDown_Mgrab(obj);
}
else
{
onMouseButtonUp_Mgrab(obj);
}
}
// 葆办蝶 帼?击 机卫俪击 阳 籀葬?捡肾朝 睡碟殓栖棻.
function onMouseButtonUp_Mgrab(obj)
{
local objListSize = obj.getVar("grabobj").get_obj_vector_size();
print(" onMouseButtonUp_Mgrab:" + objListSize);
for (local i = 0; i < objListSize;++i)
{
local hoverEnemy = obj.getVar("grabobj").get_obj_vector(i);
if (hoverEnemy)
{
local activeobj = sq_GetCNRDObjectToActiveObject(hoverEnemy);
if (activeobj)
{
local srcX = obj.getVar("mgrab").get_vector(0);
local srcY = sq_GetYPos(activeobj);
local srcZ = obj.getVar("mgrab").get_vector(1);
if (srcZ < 0)
srcZ = 0;
local dstX = sq_GetXPos(activeobj);
local dstY = sq_GetYPos(activeobj);
local dstZ = sq_GetZPos(activeobj);
if (dstZ < 0)
dstZ = 0;
print(" sx:" + srcX + " sy:" + srcY + " sz:" + srcZ);
print(" dx:" + dstX + " dy:" + dstY + " dz:" + dstZ);
local distance = sq_GetDistance( srcX, srcZ, dstX, dstZ, true);
local width = sq_Abs(dstX - srcX);
local h = sq_Abs((dstZ) - (srcZ));
print(" h:" + h);
if (h <= 0)
h = 10;
local angle = sq_Atan2( h.tofloat(), width.tofloat());
local nRevision = distance;
local cos = nRevision.tofloat() * sq_Cos(angle);
local sin = nRevision.tofloat() * sq_Sin(angle);
local nX = sq_Abs( cos.tointeger() ) * 2;
local nY = sq_Abs( sin.tointeger() ) * 2;
local direction = sq_GetDirection(activeobj);
if ((dstX - srcX) < 0)
{
nX = -nX;
}
direction = 0;
print(" nX:" + nX + " nY:" + nY + " offset:" + (dstX - srcX) + " direction:" + direction + " activeobj:" + activeobj);
sq_IntVectorClear(sq_GetGlobalIntVector());
sq_IntVectorPush(sq_GetGlobalIntVector(),direction);
sq_IntVectorPush(sq_GetGlobalIntVector(),0);
sq_IntVectorPush(sq_GetGlobalIntVector(),1);
sq_IntVectorPush(sq_GetGlobalIntVector(),nX);
sq_IntVectorPush(sq_GetGlobalIntVector(),nY);
sq_AddSetStatePacketActiveObject(activeobj,STATE_DOWN, sq_GetGlobalIntVector(), STATE_PRIORITY_FORCE);
print(" activeobj:" + activeobj + " setstate down:");
local group = sq_GetGroup(activeobj);
local uniqueId = sq_GetUniqueId(activeobj);
sq_BinaryStartWrite();
sq_BinaryWriteDword(group); // 0
sq_BinaryWriteDword(uniqueId); // 1
sq_BinaryWriteDword(dstX); // 2
sq_BinaryWriteDword(dstZ); // 3
// 1廓擎 state_down鼻鹧殓栖棻.
sq_BinaryWriteDword(1); // 4
sq_BinaryWriteDword(direction); // 5
sq_BinaryWriteDword(nX); // 6
sq_BinaryWriteDword(nY); // 7
sq_SendChangeSkillEffectPacket(obj, SKILL_MGRAB);
print(" sq_SendChangeSkillEffectPacket down");
}
}
}
obj.getVar("mgrab").clear_vector();
obj.getVar("mgrab").push_vector(0);
obj.getVar("mgrab").push_vector(0);
releaseOutLine(obj, "grabobj");
if (objListSize)
{
obj.sq_PlaySound("R_THROW_MONSTER");
}
}
// 葆办蝶 帼?击 棻遴卫俪击 阳 籀葬?捡肾朝 睡碟殓栖棻.
function onMouseMoveCharacter_Mgrab(obj)
{
onMouseMoveButtonDown_Mgrab(obj);
}
function onMouseMoveButtonDown_Mgrab(obj)
{
local hoverEnemy = obj.getVar("grabobj").get_obj_vector(0);
if (!hoverEnemy)
{
return;
}
else
{
local objectManager = obj.getObjectManager();
local objListSize = obj.getVar("grabobj").get_obj_vector_size();
local t = obj.getVar("mgrab").get_ct_vector(0);
local time = 0;
if(t)
time = t.Get();
local skill_level = obj.sq_GetSkillLevel(SKILL_MGRAB);
local activeObj = sq_GetCNRDObjectToActiveObject(hoverEnemy);
if (!activeObj)
{
onMouseButtonUp_Mgrab(obj);
return;
}
// 跪 颤殓涤煎 濩坚毡朝 譆渠卫除桧 殖塭喂栖棻.
// 0. 橾奁跪 濩坚 毡击阳 譆渠卫除
// 1. 啻歜萄 濩坚 毡击阳 譆渠卫除
// 2. 尔蝶跪 濩坚 毡击阳 譆渠卫除
// 3. ?跨蝶搅 濩坚 毡击阳 譆渠卫除
// 4. apc 濩坚 毡击阳 譆渠卫除
// 橾奁橾隆 蚝岁0
local columnIndex = SKL_LV_0;
if (sq_IsNamed(activeObj))
{
// 啻歜萄 橾隆 蚝岁1
columnIndex = SKL_LV_1;
}
else if (sq_IsBoss(activeObj))
{
// 尔蝶 橾隆 蚝岁2
columnIndex = SKL_LV_2;
}
else if (sq_IsHellMonster(activeObj))
{
// ?跨蝶搅 橾隆 蚝岁3
columnIndex = SKL_LV_3;
}
else if (sq_IsAiCharacter(activeObj))
{
// apc橾隆
columnIndex = SKL_LV_4;
}
// 濩坚毡击 热 毡朝 譆渠卫除
local maxTime = obj.sq_GetLevelData(SKILL_MGRAB, columnIndex, skill_level);
print(" maxTime:" + maxTime + " time:" + time);
if (time > maxTime)
{
onMouseButtonUp_Mgrab(obj);
}
else
{
for (local i =0;i<objListSize;++i)
{
local vObj = obj.getVar("grabobj").get_obj_vector(i);
if (!vObj)
continue;
local xPos = objectManager.getFieldXPos(IMouse.GetXPos(), ENUM_DRAWLAYER_NORMAL);
local zPos = objectManager.getFieldZPos(IMouse.GetYPos(), vObj.getYPos(), ENUM_DRAWLAYER_NORMAL) - (sq_GetObjectHeight(hoverEnemy) / 2);
local group = sq_GetGroup(vObj);
local uniqueId = sq_GetUniqueId(vObj);
sq_BinaryStartWrite();
sq_BinaryWriteDword(group); //
sq_BinaryWriteDword(uniqueId); //
sq_BinaryWriteDword(xPos);
sq_BinaryWriteDword(zPos);
// 0廓擎 state_hold鼻鹧殓栖棻.
sq_BinaryWriteDword(0);
sq_BinaryWriteDword(0);
sq_BinaryWriteDword(0);
sq_BinaryWriteDword(0);
sq_SendChangeSkillEffectPacket(obj, SKILL_MGRAB);
}
}
}
}
function onProcCon_Mgrab(obj)
{
if (!obj) return;
}
function onEndCurrentAni_Mgrab(obj)
{
if (!obj) return;
}
function onKeyFrameFlag_Mgrab(obj,flagIndex)
{
if (!obj) return false;
return true;
}
function onEndState_Mgrab(obj,new_state)
{
if (!obj) return;
}
function onAfterSetState_Mgrab(obj,state,datas,isResetTimer)
{
if (!obj) return;
}
function onBeforeAttack_Mgrab(obj,damager,boundingBox,isStuck)
{
if (!obj) return;
}
function onAttack_Mgrab(obj,damager,boundingBox,isStuck)
{
if (!obj) return;
}
function onAfterAttack_Mgrab(obj,damager,boundingBox,isStuck)
{
if (!obj) return 0;
return 1;
}
function onBeforeDamage_Mgrab(obj,attacker,boundingBox,isStuck)
{
if (!obj) return;
}
function onDamage_Mgrab(obj,attacker,boundingBox)
{
if (!obj) return;
}
function onAfterDamage_Mgrab(obj,attacker,boundingBox)
{
if (!obj) return;
}

View File

@@ -0,0 +1,60 @@
function setCustomData_po_CreatorMicroAttack(obj,recive)
{
print(" setcustom data");
if(!obj) return;
local mage = obj.getTopCharacter();
if (!mage)
return;
// 晦狱晦 熨湿 瞳辨
mage.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),STATE_ATTACK);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
function setState_po_CreatorMicroAttack(obj,state,datas)
{
if(!obj) return;
}
function procAppend_po_CreatorMicroAttack(obj)
{
if(!obj) return;
}
function onChangeSkillEffect_po_CreatorMicroAttack(obj,skillIndex,reciveData)
{
if(!obj) return;
}
function onDestroyObject_po_CreatorMicroAttack(obj,object)
{
if(!obj) return;
}
function onKeyFrameFlag_po_CreatorMicroAttack(obj,flagIndex)
{
if(!obj) return;
}
function onEndCurrentAni_po_CreatorMicroAttack(obj)
{
if(!obj) return;
if(obj.isMyControlObject()) {
sq_SendDestroyPacketPassiveObject(obj);
}
}

View File

@@ -0,0 +1,635 @@
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);
}
}

View File

@@ -0,0 +1,349 @@
/////////////////////////////////////////////////////////
//
// ?卫粽 蝶鉴籀葬
// ?渡 蝶鉴暧 ?卫粽 蝶鉴暧 Appendage蛔烟/?薯 蛔蛔
//
/////////////////////////////////////////////////////////
function ProcPassiveSkill_CreatorMage(obj, skill_index, skill_level)
{
if (skill_index == SKILL_FIREWALL || skill_index == SKILL_FIREMETEO)
{ // firewall
if (skill_level > 0)
{
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false,
"Character/CreatorMage/ap_creatormage_flame.nut", true);
if (appendage)
{
local attributeSkill = SKILL_CREATORFLAME;
local level = sq_GetSkillLevel(obj, attributeSkill);
// 0.裟蝶 啪桧虽 热纂
local maxCnt = sq_GetLevelData(obj, attributeSkill, 0, level);
if (appendage.sq_var.size_vector() == 0)
{
for (local i = 0; i < I_SIZE; i++)
appendage.sq_var.push_vector(0);
appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt);
}
local beforeMaxCnt = appendage.sq_var.get_vector(I_MAX_COUNT);
appendage.sq_var.set_vector(I_MAX_COUNT, maxCnt);
if (appendage.sq_var.get_vector(I_REMAIN_COUNT) > appendage.sq_var.get_vector(I_MAX_COUNT) || sq_GetCurrentModuleType() == MODULE_TYPE_ROOM_LIST)
{
// 陴擎 醱瞪高桧 裟蝶纂尔棻 觼棻贼 裟蝶纂 虏踯虏 醱瞪卫霾栖棻.
appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt);
}
else if (beforeMaxCnt > 0 && beforeMaxCnt != maxCnt)
{
setCreatorSkillStateSkillIndex(obj, -1);
onAllChargeCreatorMageGauge(obj);
}
// 0. 棻 瓣表韩阳梱虽 勘葬朝 卫除 (ms)
local chargeTime = sq_GetIntData(obj, attributeSkill, 0);
appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime);
local chargeMode = appendage.sq_var.get_vector(l_CHARGE_ON);
if (chargeMode)
{
local remainCnt = appendage.sq_var.get_vector(I_REMAIN_COUNT);
appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, remainCnt);
local time = appendage.sq_var.get_vector(I_CURRENT_CHARGE_TIME);
if ((chargeTime - time) > 0)
appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime - time);
}
else
{
appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, 0);
appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, 0);
//appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt);
}
}
}
}
else if (skill_index == SKILL_ICEROCK || skill_index == SKILL_ICEPLATE)
{
if (skill_level > 0)
{
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false,
"Character/CreatorMage/ap_creatormage_ice.nut", true);
if (appendage)
{
local attributeSkill = SKILL_CREATORICE;
local level = sq_GetSkillLevel(obj, attributeSkill);
// 0.裟蝶 啪桧虽 热纂
local maxCnt = sq_GetLevelData(obj, attributeSkill, 0, level);
if (appendage.sq_var.size_vector() == 0)
{
for (local i = 0; i < I_SIZE; i++)
appendage.sq_var.push_vector(0);
appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt);
}
local beforeMaxCnt = appendage.sq_var.get_vector(I_MAX_COUNT);
appendage.sq_var.set_vector(I_MAX_COUNT, maxCnt);
if (appendage.sq_var.get_vector(I_REMAIN_COUNT) > appendage.sq_var.get_vector(I_MAX_COUNT) || sq_GetCurrentModuleType() == MODULE_TYPE_ROOM_LIST)
{
// 陴擎 醱瞪高桧 裟蝶纂尔棻 觼棻贼 裟蝶纂 虏踯虏 醱瞪卫霾栖棻.
appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt);
}
else if (beforeMaxCnt > 0 && beforeMaxCnt != maxCnt)
{
setCreatorSkillStateSkillIndex(obj, -1);
onAllChargeCreatorMageGauge(obj);
}
// 0. 棻 瓣表韩阳梱虽 勘葬朝 卫除 (ms)
local chargeTime = sq_GetIntData(obj, attributeSkill, 0);
appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime);
local chargeMode = appendage.sq_var.get_vector(l_CHARGE_ON);
if (chargeMode)
{
local remainCnt = appendage.sq_var.get_vector(I_REMAIN_COUNT);
appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, remainCnt);
local time = appendage.sq_var.get_vector(I_CURRENT_CHARGE_TIME);
print(" chargeMode:" + chargeMode);
print(" delayTime:" + time);
if ((chargeTime - time) > 0)
appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime - time);
}
else
{
appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, 0);
appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, 0);
//appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt);
}
}
}
}
else if (skill_index == SKILL_WOODFENCE || skill_index == SKILL_MGRAB)
{
if (skill_level > 0)
{
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false,
"Character/CreatorMage/ap_creatormage_disturb.nut", true);
if (appendage)
{
local attributeSkill = SKILL_CREATORDISTURB;
local level = sq_GetSkillLevel(obj, attributeSkill);
// 0.裟蝶 啪桧虽 热纂
local maxCnt = sq_GetLevelData(obj, attributeSkill, 0, level);
if (appendage.sq_var.size_vector() == 0)
{
for (local i = 0; i < I_SIZE; i++)
appendage.sq_var.push_vector(0);
appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt);
}
local beforeMaxCnt = appendage.sq_var.get_vector(I_MAX_COUNT);
appendage.sq_var.set_vector(I_MAX_COUNT, maxCnt);
if (appendage.sq_var.get_vector(I_REMAIN_COUNT) > appendage.sq_var.get_vector(I_MAX_COUNT) || sq_GetCurrentModuleType() == MODULE_TYPE_ROOM_LIST)
{
// 陴擎 醱瞪高桧 裟蝶纂尔棻 觼棻贼 裟蝶纂 虏踯虏 醱瞪卫霾栖棻.
appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt);
}
else if (beforeMaxCnt > 0 && beforeMaxCnt != maxCnt)
{
setCreatorSkillStateSkillIndex(obj, -1);
onAllChargeCreatorMageGauge(obj);
}
//appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt);
//appendage.sq_var.set_vector(l_CHARGE_ON, 0);
// 0. 棻 瓣表韩阳梱虽 勘葬朝 卫除 (ms)
local chargeTime = sq_GetIntData(obj, attributeSkill, 0);
appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime);
local chargeMode = appendage.sq_var.get_vector(l_CHARGE_ON);
if (chargeMode)
{
local remainCnt = appendage.sq_var.get_vector(I_REMAIN_COUNT);
appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, remainCnt);
local time = appendage.sq_var.get_vector(I_CURRENT_CHARGE_TIME);
print(" chargeMode:" + chargeMode);
print(" delayTime:" + time);
if ((chargeTime - time) > 0)
appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime - time);
}
else
{
appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, 0);
appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, 0);
//appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt);
}
}
}
}
else if (skill_index == SKILL_FIREHURRICANE || skill_index == SKILL_ICESHIELD)
{
if (skill_level > 0)
{
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false,
"Character/CreatorMage/ap_creatormage_guardian.nut", true);
if (appendage)
{
local attributeSkill = SKILL_CREATORGUARDIAN;
local level = sq_GetSkillLevel(obj, attributeSkill);
// 0.裟蝶 啪桧虽 热纂
local maxCnt = sq_GetLevelData(obj, attributeSkill, 0, level);
if (appendage.sq_var.size_vector() == 0)
{
for (local i = 0; i < I_SIZE; i++)
appendage.sq_var.push_vector(0);
appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt);
}
local beforeMaxCnt = appendage.sq_var.get_vector(I_MAX_COUNT);
appendage.sq_var.set_vector(I_MAX_COUNT, maxCnt);
if (appendage.sq_var.get_vector(I_REMAIN_COUNT) > appendage.sq_var.get_vector(I_MAX_COUNT) || sq_GetCurrentModuleType() == MODULE_TYPE_ROOM_LIST)
{
// 陴擎 醱瞪高桧 裟蝶纂尔棻 觼棻贼 裟蝶纂 虏踯虏 醱瞪卫霾栖棻.
appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt);
}
else if (beforeMaxCnt > 0 && beforeMaxCnt != maxCnt)
{
setCreatorSkillStateSkillIndex(obj, -1);
onAllChargeCreatorMageGauge(obj);
}
// 0. 棻 瓣表韩阳梱虽 勘葬朝 卫除 (ms)
local chargeTime = sq_GetIntData(obj, attributeSkill, 0);
appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime);
local chargeMode = appendage.sq_var.get_vector(l_CHARGE_ON);
if (chargeMode)
{
local remainCnt = appendage.sq_var.get_vector(I_REMAIN_COUNT);
appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, remainCnt);
local time = appendage.sq_var.get_vector(I_CURRENT_CHARGE_TIME);
print(" chargeMode:" + chargeMode);
print(" delayTime:" + time);
if ((chargeTime - time) > 0)
appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime - time);
}
else
{
appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, 0);
appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, 0);
//appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt);
}
}
}
}
else if (skill_index == SKILL_WINDPRESS || skill_index == SKILL_WINDSTORM)
{
// 孺萄 楼撩
if (skill_level > 0)
{
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false,
"Character/CreatorMage/ap_creatormage_wind.nut", true);
if (appendage)
{
local attributeSkill = SKILL_CREATORWIND;
local level = sq_GetSkillLevel(obj, attributeSkill);
// 0.裟蝶 啪桧虽 热纂
local maxCnt = sq_GetLevelData(obj, attributeSkill, 0, level);
if (appendage.sq_var.size_vector() == 0)
{
for (local i = 0; i < I_SIZE; i++)
appendage.sq_var.push_vector(0);
appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt);
}
local beforeMaxCnt = appendage.sq_var.get_vector(I_MAX_COUNT);
appendage.sq_var.set_vector(I_MAX_COUNT, maxCnt);
if (appendage.sq_var.get_vector(I_REMAIN_COUNT) > appendage.sq_var.get_vector(I_MAX_COUNT) || sq_GetCurrentModuleType() == MODULE_TYPE_ROOM_LIST)
{
// 陴擎 醱瞪高桧 裟蝶纂尔棻 觼棻贼 裟蝶纂 虏踯虏 醱瞪卫霾栖棻.
appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt);
}
else if (beforeMaxCnt > 0 && beforeMaxCnt != maxCnt)
{
setCreatorSkillStateSkillIndex(obj, -1);
onAllChargeCreatorMageGauge(obj);
}
// 0. 棻 瓣表韩阳梱虽 勘葬朝 卫除 (ms)
local chargeTime = sq_GetIntData(obj, attributeSkill, 0);
appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime);
local chargeMode = appendage.sq_var.get_vector(l_CHARGE_ON);
if (chargeMode)
{
local remainCnt = appendage.sq_var.get_vector(I_REMAIN_COUNT);
appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, remainCnt);
local time = appendage.sq_var.get_vector(I_CURRENT_CHARGE_TIME);
print(" chargeMode:" + chargeMode);
print(" delayTime:" + time);
if ((chargeTime - time) > 0)
appendage.sq_var.set_vector(I_CHARGE_TIME, chargeTime - time);
}
else
{
appendage.sq_var.set_vector(I_CHARGE_INIT_COUNT, 0);
appendage.sq_var.set_vector(I_CURRENT_CHARGE_TIME, 0);
//appendage.sq_var.set_vector(I_REMAIN_COUNT, maxCnt);
}
}
}
}
return true;
}
function onUseSkillPassiveSkill_CreatorMage(obj,skillIndex, skillLevel)
{
if(!obj)
return;
}

View File

@@ -0,0 +1,495 @@
S_PO_ATCL_0 <- 10
S_PO_ATCL_1 <- 11
S_PO_ATCL_2 <- 12
VI_SKL_0 <- 0 // 0. 籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??)
VI_SKL_1 <- 1 // 1.籀挤 颤啃?卫 X蹴 卫蒙 剪葬
VI_SKL_2 <- 2 // 2.籀挤 颤啃?卫 X蹴 部 剪葬
VI_SKL_3 <- 3 // 3.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬
VI_SKL_4 <- 4 // 4.颤问? 瞳暧 譆渠 堪桧
VI_SKL_5 <- 5 // 5.葭觼 譆渠 偎热
VI_SKL_6 <- 6 // 6.虽楼卫除
VI_SKL_7 <- 7 // 7.奢问溘(%)
VI_SKL_8 <- 8 // 8.棻钦?? ?热
VI_SKL_9 <- 9 // 9.棻钦?? 除问
function sendChangeRotateObject(obj)
{
if (!obj)
return;
if (!obj.isMyControlObject())
return;
local chr = obj.getTopCharacter();
if (!chr)
return;
local objectManager = obj.getObjectManager();
if (!objectManager)
return;
local stage = sq_GetObjectManagerStage(obj);
local control = stage.getMainControl();
local zPos = obj.getZPos();
local xPos = objectManager.getFieldXPos(IMouse.GetXPos(), ENUM_DRAWLAYER_NORMAL);
local yPos = objectManager.getFieldYPos(IMouse.GetYPos(), zPos, ENUM_DRAWLAYER_NORMAL);
// 夥塭尔朝 嫔纂缣 评塭怃 擅戏煎虏 ??紫烟 ?栖棻.
local offset = xPos - obj.getXPos();
local len = sq_Abs(offset);
local direction = sq_GetDirection(chr);
if (direction == ENUM_DIRECTION_LEFT)
{
xPos = obj.getXPos() - len;
}
else
{
xPos = obj.getXPos() + len;
}
sq_BinaryStartWrite();
sq_BinaryWriteDword(xPos);
sq_BinaryWriteDword(yPos);
sq_BinaryWriteDword(zPos);
sq_SendChangeSkillEffectPacket(obj, SKILL_WINDPRESS);
}
function setCustomData_po_CreatorWindPress(obj, reciveData)
{
if (!obj) return;
// 棻钦?? 除问
local multiHitTerm = reciveData.readDword();
// 颤问剪葬
local hitLen = reciveData.readDword();
// 模赅榆
local consume = reciveData.readDword();
// 颤问陕紫
local rangeDir = reciveData.readDword();
// 奢问溘
local power = reciveData.readDword();
obj.getVar("rangeDir").clear_vector();
obj.getVar("rangeDir").push_vector(rangeDir);
obj.getVar("targetLen").clear_vector();
obj.getVar("targetLen").push_vector(hitLen);
obj.getVar("consume").clear_vector();
obj.getVar("consume").push_vector(consume);
obj.getVar("state").clear_vector();
obj.getVar("state").push_vector(0);
local atk = sq_GetCurrentAttackInfo(obj);
if (atk)
{
sq_SetCurrentAttackPower(atk, power);
}
if (obj.isMyControlObject())
{
local x = obj.getXPos();
local y = obj.getYPos();
local z = obj.getZPos();
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, x);
sq_IntVectorPush(pIntVec, y);
sq_IntVectorPush(pIntVec, z);
obj.addSetStatePacket(S_PO_ATCL_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
obj.getVar().clear_ct_vector();
obj.getVar().push_ct_vector();
local t = obj.getVar().get_ct_vector(0);
t.Reset();
t.Start(10000,0);
local term = multiHitTerm;
initGetVarTimer(obj, 2, term, -1);
sendChangeRotateObject(obj);
}
function procRotateObjAnimation(obj, posX, posY, posZ)
{
if (!obj) return;
//if (!pTargetChr) return;
local X = obj.getXPos();
local Y = obj.getYPos();
local Z = obj.getZPos();
local pAni = obj.getCurrentAnimation();
if (!pAni)
return;
if (posX == -1)
return;
local offset = posX - X;
if (offset < 0)
{
obj.setCurrentDirection(ENUM_DIRECTION_LEFT);
}
else
{
obj.setCurrentDirection(ENUM_DIRECTION_RIGHT);
}
local distance = sq_GetDistance( X, Y - Z, posX, posY - posZ, true);
local w = posX - X;
local h = (posY - posZ) - (Y - Z);
// 褒薯陕紫蒂 掘?狱棻.
//local tan = sq_Atan2( h.tofloat(), w.tofloat());
if (w < 0) w = -w;
// ?贼鼻暧 陕紫蒂 掘?怃 桧??蒂 赁紫釭 给溥捡 肾朝虽 掘?棻.
local width = sq_Abs(posX - X);
local angle = sq_Atan2( h.tofloat(), width.tofloat());
local angleDir = sq_ToDegree(angle);
//print( " angleDir:" + angleDir);
// 彰嫔 扑姜
local rangeDir = obj.getVar("rangeDir").get_vector(0);
local r = rangeDir / 2;
local d = sq_Abs(angleDir.tointeger());
if (angleDir < 0)
{
// ?啗陕紫蒂 剩横除棻贼..
if (d > r)
angleDir = -r;
}
else
{
if (d > r)
angleDir = r;
}
//print( " rangeDir:" + angleDir);
angle = sq_ToRadian(angleDir.tofloat());
//
local orgAngle = angle;
angle = -angle;
local nRevision = distance;
// 奢问滓? 蛔烟 襞襞?啪 蛔烟?棻..
sq_ClearAttackBox(pAni);
//
local dis = 580;
//local realSize = 600;
local targetLen = obj.getVar("targetLen").get_vector(0);
local realSize = targetLen; //
local partNum = 10;
local partLen = realSize.tofloat() / partNum.tofloat();
local revision = 30;
for (local i = 0; i < partNum; i++)
{
local attackL = 100;
local zAttackL = 60;
local attackPosX = revision.tofloat() * sq_Cos(orgAngle);
local attackPosY = revision.tofloat() * sq_Sin(orgAngle);
sq_AddAttackBox(pAni,
attackPosX.tointeger() - (attackL / 2),
attackPosY.tointeger(),
-zAttackL,
attackL, attackL, (zAttackL * 2) );
revision = revision + partLen.tointeger();
}
//
sq_SetfRotateAngle(pAni, angle);
local cos_x = dis.tofloat() * sq_Cos(angle);
local sin_y = dis.tofloat() * sq_Sin(angle);
//print("angle:" + angle);
local nW = sq_Abs( cos_x.tointeger() );
local nH = sq_Abs( sin_y.tointeger() );
local wRate = 1.0;
local hRate = 1.0;
if (nW != 0.0 && realSize != 0.0)
{
wRate = realSize.tofloat() / nW.tofloat();
}
//if (nW != 0.0 && width != 0.0)
//{
// wRate = width.tofloat() / nW.tofloat();
//}
//if (h != 0.0 && nH != 0.0)
//{
//hRate = h.tofloat() / nH.tofloat();
//}
//print(" wRate:" + wRate + " hRate:" + hRate + " nH:" + nH + " h:" + h + " angle:" + angle);
pAni.setImageRateFromOriginal(wRate.tofloat(), hRate.tofloat());
}
function procAppend_po_CreatorWindPress(obj)
{
if (!obj)
return;
local pChr = obj.getTopCharacter();
local state = obj.getVar("state").get_vector(0);
if (!pChr)
{
if (state == S_PO_ATCL_0)
{
if (obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
return;
}
else
{
if (obj.isMyControlObject())
sq_SendDestroyPacketPassiveObject(obj);
return;
}
}
if (pChr.getState() != STATE_WINDPRESS)
{
if (state == S_PO_ATCL_0)
{
if (obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
return;
}
else if (state == S_PO_ATCL_1)
{
if (obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
return;
}
}
}
sendChangeRotateObject(obj);
if (state == S_PO_ATCL_0)
{
// 蝶颤? 拥栖诡桧暮
if (obj.isMyControlObject())
{
local ani = obj.getCurrentAnimation();
local isEnd = sq_IsEnd(ani);
if (isEnd)
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
}
else if (state == S_PO_ATCL_1)
{
// 瑞? 拥栖诡桧暮
local t = obj.getVar().get_ct_vector(0);
local currentT = 0;
currentT = t.Get();
local hitT = obj.getVar().get_timer_vector(0);
if(hitT)
{
if(hitT.isOnEvent(currentT) == true)
{
local consumeValue = obj.getVar("consume").get_vector(0);
useCreatorSkill(pChr, SKILL_WINDPRESS, 0, 0, consumeValue);
obj.resetHitObjectList();
}
}
// 陕紫 濩晦
if (obj.isMyControlObject())
{
local objectManager = obj.getObjectManager();
if (!objectManager)
return;
local stage = sq_GetObjectManagerStage(obj);
local control = stage.getMainControl();
local remainRate = getCreatorTypeGaugeRate(pChr);
if (!control.IsLBDown() || remainRate == 0.0)
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(S_PO_ATCL_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
//sq_SendDestroyPacketPassiveObject(obj);
}
}
}
else if (state == S_PO_ATCL_2)
{
if (obj.isMyControlObject())
{
local ani = obj.getCurrentAnimation();
local isEnd = sq_IsEnd(ani);
if (isEnd)
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
}
}
function destroy_po_CreatorWindPress(obj)
{
}
function setState_po_CreatorWindPress(obj, state, datas)
{
if (!obj) return;
local passiveState = state;
obj.getVar("state").set_vector(0, passiveState);
sendChangeRotateObject(obj);
if (passiveState == S_PO_ATCL_0)
{
}
else if (passiveState == S_PO_ATCL_1)
{
local ani = obj.getCustomAnimation(0);
obj.setCurrentAnimation(ani);
}
else if (passiveState == S_PO_ATCL_2)
{
local ani = obj.getCustomAnimation(1);
obj.setCurrentAnimation(ani);
}
}
function onChangeSkillEffect_po_CreatorWindPress(obj, skillIndex, reciveData)
{
if (!obj) return;
if (skillIndex != SKILL_WINDPRESS)
return;
local dstX = reciveData.readDword();
local dstY = reciveData.readDword();
local dstZ = reciveData.readDword();
procRotateObjAnimation(obj, dstX, dstY, dstZ);
}
function onDestroyObject_po_CreatorWindPress(obj, object)
{
if (!obj) return;
if (!obj.isValid())
return;
}
function onKeyFrameFlag_po_CreatorWindPress(obj, flagIndex)
{
}
function onEndCurrentAni_po_CreatorWindPress(obj)
{
if (!obj) return;
}

View File

@@ -0,0 +1,352 @@
SUB_STATE_WINDPRESS_0 <- 0
SUB_STATE_WINDPRESS_1 <- 1
SUB_STATE_WINDPRESS_2 <- 2
SUB_STATE_WINDPRESS_3 <- 3
SUB_STATE_WINDPRESS_4 <- 4
function checkExecutableSkill_WindPress(obj)
{
if (!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_WINDPRESS);
print("b_useskill : %d" + b_useskill);
if (b_useskill) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_WINDPRESS_0); // substate撮?
obj.sq_AddSetStatePacket(STATE_WINDPRESS, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_WindPress(obj)
{
if (!obj) return false;
local state = obj.sq_GetState();
if (state == STATE_ATTACK)
{
return obj.sq_IsCommandEnable(SKILL_WINDPRESS); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW);
}
return true;
}
function onSetState_WindPress(obj,state,datas,isResetTimer)
{
if (!obj) return;
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
obj.sq_StopMove();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
obj.getVar().clear_vector();
obj.getVar().push_vector(0);
obj.getVar().clear_ct_vector();
obj.getVar().push_ct_vector();
local t = obj.getVar().get_ct_vector(0);
if (t)
{
t.Reset();
t.Start(10000,0);
}
print(" onSetState_WindPress");
if (substate == SUB_STATE_WINDPRESS_0)
{
obj.sq_SetCurrentAnimation(CUSTOM_ANI_WINDPRESS_CAST);
local pAni = obj.sq_GetCurrentAni();
// 议蝶? 楼紫蒂 评塭陛紫烟 扑姜
// 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻.
// 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻.
local skillLevel = sq_GetSkillLevel(obj, SKILL_WINDPRESS);
//local castTime = sq_GetCastTime(obj, SKILL_WINDPRESS, skillLevel);
//local animation = sq_GetCurrentAnimation(obj);
//local startTime = sq_GetFrameStartTime(animation, 16);
//local speedRate = startTime.tofloat() / castTime.tofloat();
//obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,
//SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
//
//sq_StartDrawCastGauge(obj, startTime, true);
obj.sq_PlaySound("R_CR_WINDPRESS");
}
else if (substate == SUB_STATE_WINDPRESS_1)
{
obj.sq_SetCurrentAnimation(CUSTOM_ANI_WINDPRESS_START);
obj.sq_PlaySound("WINDPRESS_READY");
}
else if (substate == SUB_STATE_WINDPRESS_2)
{
if (obj.isMyControlObject())
{
sq_flashScreen(obj,0,300,0,100, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.sq_SetShake(obj,1,300);
}
obj.sq_SetCurrentAnimation(CUSTOM_ANI_WINDPRESS);
obj.sq_PlaySound("WINDPRESS_BURST", 7571);
}
else if (substate == SUB_STATE_WINDPRESS_3)
{
obj.sq_SetCurrentAnimation(CUSTOM_ANI_WINDPRESS_END);
}
}
function prepareDraw_WindPress(obj)
{
if (!obj) return;
}
function onProc_WindPress(obj)
{
if (!obj) return;
local substate = obj.getSkillSubState();
local pAni = obj.sq_GetCurrentAni();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
if (substate == SUB_STATE_WINDPRESS_2)
{
if (obj.isMyControlObject())
{
local skill_level = obj.sq_GetSkillLevel(SKILL_WINDPRESS);
//24355 `Character/Mage/CreatorWindPress.obj` // 觼葬缣桧搅 : 孺萄?溯蝶
local passiveobj_cl = obj.sq_GetPassiveObject(24355);
local objectManager = obj.getObjectManager();
if (!objectManager)
return;
local stage = sq_GetObjectManagerStage(obj);
local control = stage.getMainControl();
if (!control.IsLBDown() || !passiveobj_cl)
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_WINDPRESS_3);
obj.sq_AddSetStatePacket(STATE_WINDPRESS, STATE_PRIORITY_USER, true);
}
else
{
local t = obj.getVar().get_ct_vector(0);
if (t)
{
local currentT = 0;
currentT = t.Get();
print(" currentT:" + currentT);
if (currentT >= 300)
{
if (obj.isMyControlObject())
{
print(" reset:" + currentT);
sq_flashScreen(obj,0,300,0,100, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.sq_SetShake(obj,1,300);
}
t.Reset();
t.Start(10000,0);
}
}
}
}
}
}
function onProcCon_WindPress(obj)
{
if (!obj) return;
local substate = obj.getSkillSubState();
local pAni = obj.sq_GetCurrentAni();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
if (substate == SUB_STATE_WINDPRESS_1)
{
if (frmIndex >= 2)
{
if (!obj.getVar().get_vector(0))
{
obj.getVar().set_vector(0, 1);
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
//100 // 0.棻钦?? 除问
//100 // 1.颤问剪葬
//10 // 2. 模赅榆
//30 // 3. 颤问陕紫 彰嫔
// 0.棻钦?? 除问
local multiHitTerm = sq_GetIntData(obj, SKILL_WINDPRESS, 0);
// 1.颤问剪葬
local targetLen = sq_GetIntData(obj, SKILL_WINDPRESS, 1);
// 2.模赅榆
local consume = sq_GetIntData(obj, SKILL_WINDPRESS, 2);
// 3.颤问陕紫
local dir = sq_GetIntData(obj, SKILL_WINDPRESS, 3);
// 奢问溘 跷陛热纂 蒙机
local level = sq_GetSkillLevel(obj, SKILL_CREATORWIND);
// 1.奢问溘 跷陛 热纂 (%)
local addValue = sq_GetLevelData(obj, SKILL_CREATORWIND, SKL_LV_1, level);
local addRate = addValue.tofloat() / 100.0;
local power = obj.sq_GetPowerWithPassive(SKILL_WINDPRESS, STATE_STAND, SKL_LV_0, -1,addRate.tofloat());
obj.sq_StartWrite();
sq_BinaryWriteDword(multiHitTerm);
sq_BinaryWriteDword(targetLen);
sq_BinaryWriteDword(consume);
sq_BinaryWriteDword(dir);
sq_BinaryWriteDword(power);
local size = 50;
local offsetZ = 62;
local offset = sq_GetDistancePos(0, obj.getDirection(), size);
sq_SendCreatePassiveObjectPacketPos(obj, 24355, 0, posX + offset, posY - 1, posZ + offsetZ);
}
}
}
}
function onEndCurrentAni_WindPress(obj)
{
if (!obj) return;
//local pSickleObj = obj.sq_GetPassiveObject(24101); // sickle
local substate = obj.getSkillSubState();
if (substate == SUB_STATE_WINDPRESS_0)
{
if (obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_WINDPRESS_1);
obj.sq_AddSetStatePacket(STATE_WINDPRESS, STATE_PRIORITY_USER, true);
}
}
else if (substate == SUB_STATE_WINDPRESS_1)
{
if (obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_WINDPRESS_2);
obj.sq_AddSetStatePacket(STATE_WINDPRESS, STATE_PRIORITY_USER, true);
}
}
else if (substate == SUB_STATE_WINDPRESS_2)
{
}
else if (substate == SUB_STATE_WINDPRESS_3)
{
if (obj.isMyControlObject())
{
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
else if (substate == SUB_STATE_WINDPRESS_4)
{
}
}
function onKeyFrameFlag_WindPress(obj,flagIndex)
{
if (!obj) return false;
return true;
}
function onEndState_WindPress(obj,new_state)
{
if (!obj) return;
obj.stopSound(7571);
sq_EndDrawCastGauge(obj);
}
function onAfterSetState_WindPress(obj,state,datas,isResetTimer)
{
if (!obj) return;
}
function onBeforeAttack_WindPress(obj,damager,boundingBox,isStuck)
{
if (!obj) return;
}
function onAttack_WindPress(obj,damager,boundingBox,isStuck)
{
if (!obj) return;
}
function onAfterAttack_WindPress(obj,damager,boundingBox,isStuck)
{
if (!obj) return 0;
return 1;
}
function onBeforeDamage_WindPress(obj,attacker,boundingBox,isStuck)
{
if (!obj) return;
}
function onDamage_WindPress(obj,attacker,boundingBox)
{
if (!obj) return;
}
function onAfterDamage_WindPress(obj,attacker,boundingBox)
{
if (!obj) return;
}

View File

@@ -0,0 +1,335 @@
VI_SKL_0 <- 0 // 0. 籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??)
VI_SKL_1 <- 1 // 1.籀挤 颤啃?卫 X蹴 卫蒙 剪葬
VI_SKL_2 <- 2 // 2.籀挤 颤啃?卫 X蹴 部 剪葬
VI_SKL_3 <- 3 // 3.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬
VI_SKL_4 <- 4 // 4.颤问? 瞳暧 譆渠 堪桧
VI_SKL_5 <- 5 // 5.葭觼 譆渠 偎热
VI_SKL_6 <- 6 // 6.虽楼卫除
VI_SKL_7 <- 7 // 7.奢问溘(%)
VI_SKL_8 <- 8 // 8.棻钦?? ?热
VI_SKL_9 <- 9 // 9.棻钦?? 除问
function procAppend_po_CreatorWindStorm(obj)
{
if (!obj)
return;
local pChr = obj.getTopCharacter();
local state = obj.getVar("state").get_vector(0);
if (!pChr)
{
if (state == PASSIVEOBJ_SUB_STATE_1 || state == PASSIVEOBJ_SUB_STATE_2)
{
if (obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
return;
}
}
local ani = obj.getCurrentAnimation();
local isEnd = sq_IsEnd(ani);
local objectManager = obj.getObjectManager();
if (!objectManager)
return;
local stage = sq_GetObjectManagerStage(obj);
local control = stage.getMainControl();
if (state == PASSIVEOBJ_SUB_STATE_0)
{
// 蝶颤? 拥栖诡桧暮
if (obj.isMyControlObject())
{
local skillState = getCreatorSkillStateSkillIndex(pChr);
//print(" skillState:" + skillState);
if (!control.IsRBDown() || skillState != CREATOR_TYPE_WIND)
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
print(" wind PASSIVEOBJ_SUB_STATE_2");
print(" wind PASSIVEOBJ_SUB_STATE_2");
print(" wind PASSIVEOBJ_SUB_STATE_2");
print(" wind PASSIVEOBJ_SUB_STATE_2");
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
else
{
if (isEnd)
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
}
}
else if (state == PASSIVEOBJ_SUB_STATE_1)
{
// 瑞? 拥栖诡桧暮
local t = obj.getVar().get_ct_vector(0);
local currentT = 0;
currentT = t.Get();
local hitT = obj.getVar().get_timer_vector(0);
if(hitT)
{
if (hitT.isOnEvent(currentT) == true)
{
// 模赅榆 瞳辨
local consumeValue = obj.getVar("consume").get_vector(0);
useCreatorSkill(pChr, SKILL_WINDSTORM, 0, 0, consumeValue);
obj.resetHitObjectList();
}
}
// 陕紫 濩晦
if (obj.isMyControlObject())
{
local remainRate = getCreatorTypeGaugeRate(pChr);
local skillState = getCreatorSkillStateSkillIndex(pChr);
//print(" skillState:" + skillState);
if (!control.IsRBDown() || remainRate <= 0.0 || skillState != CREATOR_TYPE_WIND)
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
}
else if (state == PASSIVEOBJ_SUB_STATE_2)
{
if (obj.isMyControlObject())
{
if (isEnd)
sq_SendDestroyPacketPassiveObject(obj);
}
}
}
function setCustomData_po_CreatorWindStorm(obj, reciveData)
{
if (!obj) return;
// 棻钦?? 除问
local multiHitTerm = reciveData.readDword();
// 模赅榆
local consume = reciveData.readDword();
// 奢问溘
local power = reciveData.readDword();
// ?渠徽
local imageRate = reciveData.readDword();
// 2.庄横渡晦朝 X蹴 ?
local xVel = reciveData.readDword();
// 3.庄横渡晦朝 Y蹴 ?
local yVel = reciveData.readDword();
obj.getVar("vel").clear_vector();
obj.getVar("vel").push_vector(xVel);
obj.getVar("vel").push_vector(yVel);
local atk = sq_GetCurrentAttackInfo(obj);
if (atk)
{
sq_SetCurrentAttackPower(atk, power);
}
obj.getVar("imagerate").clear_vector();
obj.getVar("imagerate").push_vector(imageRate);
// ?渠徽 瞳辨
local ani = obj.getCurrentAnimation();
if (ani)
{
ani.setImageRateFromOriginal(imageRate.tofloat() / 100.0, imageRate.tofloat() / 100.0);
sq_SetAttackBoundingBoxSizeRate(ani, imageRate.tofloat() / 100.0, imageRate.tofloat() / 100.0, 1.0);
}
//
obj.getVar("consume").clear_vector();
obj.getVar("consume").push_vector(consume);
obj.getVar("state").clear_vector();
obj.getVar("state").push_vector(0);
obj.getVar().clear_ct_vector();
obj.getVar().push_ct_vector();
local t = obj.getVar().get_ct_vector(0);
t.Reset();
t.Start(10000,0);
local term = multiHitTerm;
initGetVarTimer(obj, 2, term, -1);
if (obj.isMyControlObject())
{
local x = obj.getXPos();
local y = obj.getYPos();
local z = obj.getZPos();
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, x);
sq_IntVectorPush(pIntVec, y);
sq_IntVectorPush(pIntVec, z);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
function destroy_po_CreatorWindStorm(obj)
{
if (!obj)
return;
local parentObj = obj.getParent();
//appendage.sq_DeleteAppendages();
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "Appendage/Character/ap_common_suck.nut");
}
function setState_po_CreatorWindStorm(obj, state, datas)
{
if (!obj) return;
local passiveState = state;
obj.getVar("state").set_vector(0, passiveState);
if (passiveState == PASSIVEOBJ_SUB_STATE_0)
{
// start
obj.sq_PlaySound("WINDSTORM_INHALE", 7570);
}
else if (passiveState == PASSIVEOBJ_SUB_STATE_1)
{
// loop
local ani = obj.getCustomAnimation(0);
obj.setCurrentAnimation(ani);
local imageRate = obj.getVar("imagerate").get_vector(0);
if (ani)
{
print(" imageRate:" + imageRate);
ani.setImageRateFromOriginal(imageRate.tofloat() / 100.0, imageRate.tofloat() / 100.0);
sq_SetAttackBoundingBoxSizeRate(ani, imageRate.tofloat() / 100.0, imageRate.tofloat() / 100.0, 1.0);
}
// 庄横菟桧朝 横?蛤虽 陛翕
local parentObj = obj.getParent();
local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, SKILL_WINDSTORM, false, "Appendage/Character/ap_common_suck.nut", false);
local suckVel = 200;
local ani = obj.getCurrentAnimation();
local radiusSize = sq_GetAniRealImageSize(ani, 0);
radiusSize = sq_Abs(radiusSize);
local boundBox = sq_GetAttackBoundRect(ani);
local bosXSize = sq_GetBoundingBoxXSize(boundBox);
local range = bosXSize;
if(appendage)
{
//print( "range:" + range.tointeger());
//appendage.sq_SetValidTime(20000);
// 罹晦怃 append 蒙机
CNSquirrelAppendage.sq_Append(appendage, obj, obj);
local auraAppendage = appendage.sq_getAuraMaster("winstorm");
if(!auraAppendage)
auraAppendage = appendage.sq_AddAuraMaster("winstorm",parentObj, obj, 1200, 18, 5, 0);
local suckXVel = obj.getVar("vel").get_vector(0);
local suckYVel = obj.getVar("vel").get_vector(1);
print(" suckXVel:" + suckXVel + " suckYVel:" + suckYVel + " range:" + range);
auraAppendage.setAttractionInfo(suckXVel, suckYVel, range.tointeger(), 100);
}
//////////////////////////////////////////////////////////
}
else if (passiveState == PASSIVEOBJ_SUB_STATE_2)
{
// end
local ani = obj.getCustomAnimation(1);
obj.setCurrentAnimation(ani);
local imageRate = obj.getVar("imagerate").get_vector(0);
if (ani)
{
ani.setImageRateFromOriginal(imageRate.tofloat() / 100.0, imageRate.tofloat() / 100.0);
sq_SetAttackBoundingBoxSizeRate(ani, imageRate.tofloat() / 100.0, imageRate.tofloat() / 100.0, 1.0);
}
}
}
function onDestroyObject_po_CreatorWindStorm(obj, object)
{
if (!obj) return;
obj.stopSound(7570);
if (!obj.isValid())
return;
}
function onKeyFrameFlag_po_CreatorWindStorm(obj, flagIndex)
{
}
function onEndCurrentAni_po_CreatorWindStorm(obj)
{
if (!obj) return;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.