茶服加密更新

This commit is contained in:
2025-11-17 19:38:44 +08:00
parent 2439632d3f
commit e5bf2ba59c
11 changed files with 431 additions and 176 deletions

View File

@@ -1,159 +1,4 @@
//荣誉祝福
function checkExecutableSkill_GloriousBlessNew(obj)
{
if (!obj) return false;
if(obj.getVar("canUseSkill").getBool(0)) return false;
local isUse = obj.sq_IsUseSkill(260);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(301, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_GloriousBlessNew(obj)
{
if (!obj) return false;
if(obj.getVar("canUseSkill").getBool(0)) return false;
return true;
}
function onSetState_GloriousBlessNew(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
local Ani = obj.sq_GetThrowChargeAni(3);
obj.setCurrentAnimation(Ani);
break;
case 1:
local Ani = obj.sq_GetThrowShootAni(3);
obj.setCurrentAnimation(Ani);
obj.sq_PlaySound("PR_MOONLIGHT");
obj.setTimeEvent(1, 500, 1, false);
local objectManager = obj.getObjectManager();
local objectNumber = objectManager.getCollisionObjectNumber();
local count = 0;
for (local i = 0; i < objectNumber; i++){
local object = objectManager.getCollisionObject(i);
if(object && !obj.isEnemy(object) && object.isObjectType(OBJECTTYPE_CHARACTER)){
local sqrChr = sq_GetCNRDObjectToSQRCharacter(object);
if(sq_getJob(sqrChr) == 9 && sq_getGrowType(sqrChr) == 1) count = count + 1;
}
}
print("count = "+count);
if(count > 0){
obj.getVar("canUseSkill").setBool(0, true);
return;
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BLESSOFCOURAGE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_BLESSOFCOURAGE);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ZEALOFFAITHBUFF)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ZEALOFFAITHBUFF);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFVICTORIA)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_CRUXOFVICTORIA);
local skillLevel = sq_GetSkillLevel(obj, 260);
local range = sq_GetIntData(obj, 260, 0);
local buffTime = sq_GetLevelData(obj, 260, 0, skillLevel);
local phAttack = sq_GetLevelData(obj, 260, 4, skillLevel);
local mgAttack = sq_GetLevelData(obj, 260, 5, skillLevel);
local adtAttack = sq_GetLevelData(obj, 260, 3, skillLevel);
local phlAttack = sq_GetLevelData(obj, 260, 1, skillLevel);
local mglAttack = sq_GetLevelData(obj, 260, 2, skillLevel);
local stuckRate = sq_GetLevelData(obj, 260, 6, skillLevel);
local skillbonusRate = sq_GetLevelData(obj, 260, 7, skillLevel);
//if(skillLevel < 20) sq_SetSkillAttackBonus(obj, skillbonusRate.tofloat() / 1000.0);
local now_phDefense = sq_GetPhysicalDefense();
now_phDefense = now_phDefense * (100 + sq_GetIntData(obj, 169, 3)) / 100;
local now_mgDefense = sq_GetMagicalDefense();
now_mgDefense = now_mgDefense * (100 + sq_GetIntData(obj, 169, 4)) / 100;
local defenseMax = 0;
if(now_phDefense > now_mgDefense) defenseMax = now_phDefense;
else defenseMax = now_mgDefense;
print("defenseMax = "+defenseMax);
local addRate = defenseMax.tofloat() / sq_GetIntData(obj, 260, 3).tofloat();
if(addRate > 1){
phAttack = phAttack.tofloat() * (1.0 + addRate);
mgAttack = mgAttack.tofloat() * (1.0 + addRate);
adtAttack = adtAttack.tofloat() * (1.0 + addRate);
phlAttack = phlAttack.tofloat() * (1.0 + addRate);
mglAttack = mglAttack.tofloat() * (1.0 + addRate);
}
print("addRate = "+addRate);
sq_BinaryStartWrite();
sq_BinaryWriteDword(skillLevel);
sq_BinaryWriteDword(buffTime);
sq_BinaryWriteDword(phAttack.tointeger());
sq_BinaryWriteDword(mgAttack.tointeger());
sq_BinaryWriteDword(adtAttack.tointeger());
sq_BinaryWriteDword(phlAttack.tointeger());
sq_BinaryWriteDword(mglAttack.tointeger());
sq_BinaryWriteDword(stuckRate);
sq_SendCreatePassiveObjectPacket(obj, 640001, 0, 0, 0, 0, obj.getDirection());
break;
}
}
function onEndCurrentAni_GloriousBlessNew(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(301, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_GloriousBlessNew(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_GloriousBlessNew(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_GloriousBlessNew(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onEndState_GloriousBlessNew(obj, new_state)
{
if(!obj) return;
}
function onStartDungeon_PrCrusader_bykk(obj)
{
return;
}
function setCustomData_po_priest_bykk(obj, receiveData)
{
if(!obj) return;
@@ -242,6 +87,103 @@ function setCustomData_po_priest_bykk(obj, receiveData)
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/boombottom_01.ani", 0, 80, 0);
sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
break;
case 28:
switch(subtype){
case 1:
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj);
local totalDamage = receiveData.readDword();
local totalDamageExp = receiveData.readDword();
local skillLevel = sq_GetSkillLevel(sqrChr, 28);
local lifeTime = sq_GetLevelData(sqrChr, 28, 2, skillLevel);
local hitTime = sq_GetIntData(sqrChr, 28, 1);
local range = sq_GetIntData(sqrChr, 28, 2);
local time = sq_GetLevelData(sqrChr, 28, 4, skillLevel);
local level = sq_GetLevelData(sqrChr, 28, 3, skillLevel);
local speedRate = sq_GetLevelData(sqrChr, 28, 8, skillLevel);
local sizeRate = sq_GetLevelData(sqrChr, 28, 9, skillLevel);
obj.setTimeEvent(10, lifeTime, 1, false);
obj.setTimeEvent(11, hitTime, -1, false);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 55));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.getVar("custom").setInt(0, totalDamage);
obj.getVar("custom").setInt(1, totalDamageExp);
obj.getVar("custom").setInt(2, range);
obj.getVar("custom").setInt(3, time);
obj.getVar("custom").setInt(4, level);
obj.getVar("custom").setInt(5, speedRate);
obj.getVar("custom").setInt(6, sizeRate);
obj.getVar("Tar_boss").clear_obj_vector();
obj.getVar("Tar_named").clear_obj_vector();
obj.getVar("Tar_normal").clear_obj_vector();
obj.getVar("tar").clear_obj_vector();
local objectManager = obj.getObjectManager();//得到對象管理器
for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){
local object = objectManager.getCollisionObject(i);//得到控制類對象
if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){
local activeObj = sq_GetCNRDObjectToActiveObject(object);
if(sq_IsBoss(activeObj)){
obj.getVar("Tar_boss").push_obj_vector(activeObj);
continue;
}
else if(sq_IsNamed(activeObj)){
obj.getVar("Tar_named").push_obj_vector(activeObj);
continue;
}
else{
obj.getVar("Tar_normal").push_obj_vector(activeObj);
continue;
}
}
}
local bossSize = obj.getVar("Tar_boss").get_obj_vector_size();
local namedSize = obj.getVar("Tar_named").get_obj_vector_size();
local normalSize = obj.getVar("Tar_normal").get_obj_vector_size();
if(bossSize > 0){
for(local i = 0; i < bossSize; i++){
local targetObj = obj.getVar("Tar_boss").get_obj_vector(i);
if(targetObj) obj.getVar("tar").push_obj_vector(targetObj);
}
}
if(namedSize > 0){
for(local i = 0; i < namedSize; i++){
local targetObj = obj.getVar("Tar_named").get_obj_vector(i);
if(targetObj) obj.getVar("tar").push_obj_vector(targetObj);
}
}
if(normalSize > 0){
for(local i = 0; i < normalSize; i++){
local targetObj = obj.getVar("Tar_normal").get_obj_vector(i);
if(targetObj) obj.getVar("tar").push_obj_vector(targetObj);
}
}
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
case 2:
local totalDamage = receiveData.readDword();
local range = receiveData.readDword();
local time = receiveData.readDword();
local level = receiveData.readDword();
local sizeRate = receiveData.readDword();
local aniPath = "passiveobject/4_priest_bykk/1crusader_bykk/animation/flashglobe/afterdodge.ani";
local ani = sq_CreateAnimation("", aniPath);
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/4_priest_bykk/1crusader_bykk/animation/flashglobe/afternormal.ani"),true);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 56));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
if(sizeRate > 100){
currentAni = obj.getCurrentAnimation();
sizeRate = sizeRate.tofloat() / 100.0;
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);
}
break;
}
break;
}
break;
case 2:
@@ -1630,6 +1572,32 @@ function setState_po_priest_bykk(obj, state, datas)
case 0:
break;
case 1:
switch(skillIndex){
case 28:
switch(subtype){
case 1:
switch(state){
case 20:
local aniPath = "passiveobject/4_priest_bykk/1crusader_bykk/animation/flashglobe/beforedodge.ani";
local ani = sq_CreateAnimation("", aniPath);
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/4_priest_bykk/1crusader_bykk/animation/flashglobe/beforenormal.ani"),true);
currentAni.addLayerAnimation(-2,sq_CreateAnimation("","passiveobject/4_priest_bykk/1crusader_bykk/animation/flashglobe/floor.ani"),true);
local sizeRate = obj.getVar("custom").getInt(6);
if(sizeRate > 100){
currentAni = obj.getCurrentAnimation();
sizeRate = sizeRate.tofloat() / 100.0;
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);
}
break;
}
break;
}
break;
}
break;
case 2:
break;
@@ -1775,10 +1743,10 @@ function setState_po_priest_bykk(obj, state, datas)
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalismanspark.ani", 0, 0, 60);
obj.getVar("bool").setBool(1, true);
local hitTime = obj.getVar("custom").getInt(3), hitMax = -1;
if(obj.getVar("custom").getInt(6) > 0){
hitTime = 160;
hitMax = 5;
}
// if(obj.getVar("custom").getInt(6) > 0){
// hitTime = 160;
// hitMax = 5;
// }
obj.setTimeEvent(1, hitTime, hitMax, true);
obj.getVar().clear_ct_vector();
obj.getVar().push_ct_vector();
@@ -2229,6 +2197,20 @@ function onEndCurrentAni_po_priest_bykk(obj)
case 0:
break;
case 1:
switch(skillIndex){
case 28:
switch(subtype){
case 1:
switch(state){
case 20:
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
return;
break;
}
break;
}
break;
}
sq_SendDestroyPacketPassiveObject(obj);
break;
case 2:
@@ -2470,6 +2452,22 @@ function onTimeEvent_po_priest_bykk(obj, timeEventIndex, timeEventCount)
case 1:
switch(timeEventIndex){
case 1: sq_SendDestroyPacketPassiveObject(obj); break;
case 10:
local totalDamage = obj.getVar("custom").getInt(1);
local range = obj.getVar("custom").getInt(2);
local time = obj.getVar("custom").getInt(3);
local level = obj.getVar("custom").getInt(4);
local sizeRate = obj.getVar("custom").getInt(6);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/character/priest/animation/flashglobe/delay.ani", 0, 0, 0);
local pAni = pooledObj.getCurrentAnimation();
local pSize = sizeRate.tofloat() / 100.0;
pAni.setImageRateFromOriginal(pSize, pSize);
createSkillPassive_Priest_bykk(obj,obj,PASSIVEOBJECT_PRIESTBYKK,0,0,0,sq_GetDirection(obj),1,28,2,totalDamage,range,time,level,sizeRate,0,0,0);
sq_SendDestroyPacketPassiveObject(obj);
break;
case 11:
obj.resetHitObjectList();
break;
}
break;
case 2:
@@ -2576,10 +2574,10 @@ function onTimeEvent_po_priest_bykk(obj, timeEventIndex, timeEventCount)
switch(timeEventIndex){
case 1:
if(obj.getVar("custom").getInt(6) > 0){
if(timeEventCount == 5){
obj.setTimeEvent(3, 130, 1, false);
}
else{
// if(timeEventCount == 5){
// obj.setTimeEvent(3, 130, 1, false);
// }
// else{
local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/thunderbolt1.ani","passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/thunderbolt2.ani","passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/thunderbolt3.ani"];
for(local i = 0; i < 3; i++){
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[i], 0, 0, 0);
@@ -2590,7 +2588,7 @@ function onTimeEvent_po_priest_bykk(obj, timeEventIndex, timeEventCount)
obj.resetHitObjectList();
sq_SetMyShake(obj, 3, 50);
obj.sq_PlaySound("THUNDER_STRIKE");
}
// }
return;
}
obj.resetHitObjectList();