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

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;
}