Sqr/character/atmage/holonglight/po_atholonglight.nut

237 lines
7.2 KiB
Plaintext
Raw Normal View History

2024-03-18 21:37:40 +08:00
HOLONG_LIGHT_VAR_IS_LEFT <- 0;
HOLONG_LIGHT_VAR_APPENDAGE <- 1;
HOLONG_LIGHT_VAR_HORIZON_ANGLE <- 2;
HOLONG_LIGHT_VAR_VERTICAL_ANGLE <- 3;
HOLONG_LIGHT_VAR_LIFE_TIME <- 4;
HOLONG_LIGHT_VAR_DEFENCE_UP <- 5;
HOLONG_LIGHT_VAR_ATTACK_POWER <- 6;
HOLONG_LIGHT_VAR_SHOOT_TIME <- 7;
HOLONG_LIGHT_VAR_COOL_TIME <- 8;
HOLONG_LIGHT_STATE_BUFF <- 2; // 渠晦 鼻鹧 : 议葛搅缣 帼?蒂 勘横遽棻. : ?卫粽 蝶才桧?朝 2睡搅 卫蒙?棻.
HOLONG_LIGHT_STATE_ATTACK <- 3; // 奢问 : 饵轿肾横 颤啃击 奢问?虽虏 帼?朝 饵塭霞棻.
HOLONG_LIGHT_STATE_DESTROY <- 4; // 薯濠葬怃 饵塭霞棻.
HOLONG_LIGHT_STATE_EXPLOSION <- 5; // ?嫦
HOLONG_LIGHT_CUSTOM_ANI_MOVE <- 0; // 桧翕卫 拥栖
HOLONG_LIGHT_CUSTOM_ANI_DESTROY <- 1; // ?惚卫 拥栖
HOLONG_LIGHT_CUSTOM_ANI_SHOOT <- 2; // 嫦饵卫 陈嬴陛朝 拥栖
HOLONG_LIGHT_CUSTOM_ANI_EXPLOSION <- 3; //?嫦 拥栖
function setCustomData_po_ATHolongLight(obj, receiveData)
{
if(!obj) return;
local isLeft = receiveData.readBool();
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
local lifeTime = receiveData.readDword();
local defenceUp = receiveData.readDword();
local attackPower = receiveData.readDword();
local shootTime = receiveData.readDword();
local coolTime = receiveData.readDword();
local var = obj.getVar();
var.setBool(HOLONG_LIGHT_VAR_IS_LEFT,isLeft);
obj.sendStateOnlyPacket(HOLONG_LIGHT_STATE_BUFF);
var.setFloat(HOLONG_LIGHT_VAR_HORIZON_ANGLE, horizonAngle);
var.setFloat(HOLONG_LIGHT_VAR_VERTICAL_ANGLE, verticalAngle);
var.setInt(HOLONG_LIGHT_VAR_LIFE_TIME, lifeTime);
var.setInt(HOLONG_LIGHT_VAR_DEFENCE_UP, defenceUp);
var.setInt(HOLONG_LIGHT_VAR_SHOOT_TIME, shootTime);
var.setInt(HOLONG_LIGHT_VAR_COOL_TIME, coolTime);
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), attackPower);
}
function onTimeEvent_po_ATHolongLight(obj, timeEventIndex, timeEventCount)
{
if(!obj)
return false;
if(obj.isMyControlObject() && timeEventIndex == 0)
{
if(obj.getState() == HOLONG_LIGHT_STATE_BUFF) {
obj.sendStateOnlyPacket(HOLONG_LIGHT_STATE_DESTROY);
local mage = sq_ObjectToSQRCharacter(obj.getTopCharacter());
if (mage)
mage.sq_RemoveSkillLoad(SKILL_HOLONG_LIGHT);
}
return true; // true贼 属寥 酝钦
}
else if( timeEventIndex == 1 )
{
obj.sendStateOnlyPacket(HOLONG_LIGHT_STATE_EXPLOSION);
}
return false;
}
function onDestroyObject_po_ATHolongLight(obj, destroyObj)
{
local parentObj = obj.getParent();
parentObj = sq_ObjectToSQRCharacter(parentObj);
if(!parentObj || isSameObject(parentObj,destroyObj)) { //睡赅 偌羹陛 ?惚肾贼 饵塭飓
obj.sendStateOnlyPacket(HOLONG_LIGHT_STATE_DESTROY);
}
}
function onAttack_po_ATHolongLight(obj, damager, boundingBox, isStuck)
{
if(!obj)
return 0;
obj.sendStateOnlyPacket(HOLONG_LIGHT_STATE_EXPLOSION);
return 0;
}
function setState_po_ATHolongLight(obj, state, datas)
{
if(!obj) return;
local var = obj.getVar();
// 帼? 赅萄
if (state == HOLONG_LIGHT_STATE_BUFF) {
local lifeTime = var.getInt(HOLONG_LIGHT_VAR_LIFE_TIME);
local defenceUp = var.getInt(HOLONG_LIGHT_VAR_DEFENCE_UP);
var.push_ct_vector(); // 颤桧该 跷陛
local timer = var.get_ct_vector(0);
timer.Reset();
timer.Start(500,0);
obj.setTimeEvent(0,lifeTime,1,false); // 0廓 樯策蝶暧 颤桧该, 5蟾钦嫔 桧渐? 嫦当, 1廓虏, 籀挤缚 褒?寰?.
local parentObj = obj.getParent();
printc("lifeTime " +lifeTime);
printc("defenceUp " +defenceUp);
local appendage = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, defenceUp.tofloat() , lifeTime);
if(appendage && parentObj) {
appendage.sq_AddChangeStatus(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, defenceUp.tofloat());
appendage.sq_Append(parentObj,parentObj);
local var2 = obj.getVar("holong");
printc("var2 " +var2);
var2.setAppendage(HOLONG_LIGHT_VAR_APPENDAGE, appendage);
}
}
else if (state == HOLONG_LIGHT_STATE_ATTACK) {
local var2 = obj.getVar("holong");
local append = var2.getAppendage(HOLONG_LIGHT_VAR_APPENDAGE);
if(append)
append.setValid(false);
local horizonAngle = var.getFloat(HOLONG_LIGHT_VAR_HORIZON_ANGLE);
local verticalAngle = var.getFloat(HOLONG_LIGHT_VAR_VERTICAL_ANGLE);
local shootAni = obj.getCustomAnimation(HOLONG_LIGHT_CUSTOM_ANI_SHOOT);
obj.setCurrentAnimation(shootAni);
sq_SetfRotateAngle(shootAni, sq_ToRadian(-horizonAngle));
local shootTime = var.getInt(HOLONG_LIGHT_VAR_SHOOT_TIME);
obj.setTimeEvent(1,shootTime,1,false);
obj.sq_SetMoveParticle("Particle/ATHolongLight.ptl", horizonAngle, verticalAngle);
sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATHolongLight/shot_effect_dodge.ani", 0, 0, 0);
obj.sq_PlaySound("LAMPLIGHT_ATK");
}
else if (state == HOLONG_LIGHT_STATE_DESTROY) {
local destroyAni = obj.getCustomAnimation(HOLONG_LIGHT_CUSTOM_ANI_DESTROY);
obj.setCurrentAnimation(destroyAni);
}
else if (state == HOLONG_LIGHT_STATE_EXPLOSION) {
local shootAni = obj.getCustomAnimation(HOLONG_LIGHT_CUSTOM_ANI_EXPLOSION);
obj.setCurrentAnimation(shootAni);
obj.sq_RemoveMoveParticle();
}
}
function procAppend_po_ATHolongLight(obj)
{
if(!obj)
return;
local var = obj.getVar();
local xDistance = -26;
local timer = var.get_ct_vector(0);
if(!timer)
return;
local currentTime = timer.Get();
local zDistance = sq_GetAccel(0, 35, currentTime, 300, true);;
local isLeft = var.getBool(HOLONG_LIGHT_VAR_IS_LEFT);
if(isLeft)
xDistance = -26 + sq_GetAccel(0, 52, currentTime, 300, true);
local parentObj = obj.getParent();
if(obj.sq_GetParentState() == STATE_DIE) // 避戏贼 饵塭飓
obj.sendStateOnlyPacket(HOLONG_LIGHT_STATE_DESTROY);
if(obj.getState() == HOLONG_LIGHT_STATE_BUFF) { // 桧翕?阳 拥栖 渗唳
local isDash = false;
if(obj.sq_GetParentState() == STATE_DASH){
if(!obj.isCurrentAnimationIndex(HOLONG_LIGHT_CUSTOM_ANI_MOVE))
obj.setCurrentAnimation(obj.getCustomAnimation(HOLONG_LIGHT_CUSTOM_ANI_MOVE));
isDash = true;
}
else {
local defaultAni = obj.getDefaultAnimation();
local currentAni = obj.getCurrentAnimation();
if(!sq_IsSameAni(defaultAni,currentAni))
obj.setCurrentAnimation(defaultAni);
}
if(parentObj) {
local x = sq_GetDistancePos(parentObj.getXPos(),parentObj.getDirection(),xDistance);
local y = parentObj.getYPos() - 1;
local z = parentObj.getZPos() + sq_GetShuttleValue(90, 113,sq_GetObjectTime(obj),500) - zDistance;
obj.setDirection(parentObj.getDirection());
sq_SetCurrentPos(obj, x, y, z);
}
}
}
function onEndCurrentAni_po_ATHolongLight(obj)
{
if(!obj) return;
if(obj.getState() == HOLONG_LIGHT_STATE_DESTROY) {
if(obj.isMyControlObject())
sq_SendDestroyPacketPassiveObject(obj);
}
else if(obj.getState() == HOLONG_LIGHT_STATE_EXPLOSION) {
if(obj.isMyControlObject())
sq_SendDestroyPacketPassiveObject(obj);
}
}