Sqr/character/atmage/holonglight/po_atholonglight.nut

237 lines
7.2 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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