diff --git a/common/src/buffrecord.inc b/common/src/buffrecord.inc index ba52391e3..9d0636e19 100644 --- a/common/src/buffrecord.inc +++ b/common/src/buffrecord.inc @@ -5,3 +5,9 @@ .time = 6000, .gfxID = 0X18000083, }, + +{ .name = u8"施毒术", + .tps = 2, + .time = 6000, + .gfxID = 0X18000074, +}, diff --git a/server/src/battleobject.cpp b/server/src/battleobject.cpp index 6cb48fd12..2eb065f7b 100644 --- a/server/src/battleobject.cpp +++ b/server/src/battleobject.cpp @@ -1188,6 +1188,19 @@ void BattleObject::addBuff(uint32_t buffID) })); break; } + case DBCOM_BUFFID(u8"施毒术"): + { + m_buffList.addBuff(std::unique_ptr(new PeriodicBuff + { + buffID, + this, + [this](PeriodicBuff *) + { + updateHealth(-5, {}, {}, {}); + }, + })); + break; + } default: { break; diff --git a/server/src/monsterop.cpp b/server/src/monsterop.cpp index b4876141b..b1ea52654 100644 --- a/server/src/monsterop.cpp +++ b/server/src/monsterop.cpp @@ -83,6 +83,26 @@ void Monster::on_AM_ADDBUFF(const ActorMsgPack &mpk) } } }); + break; + } + case DBCOM_BUFFID(u8"施毒术"): + { + checkFriend(amAB.from, [amAB, this](int friendType) + { + switch(friendType){ + case FT_ENEMY: + case FT_NEUTRAL: + { + addBuff(DBCOM_BUFFID(u8"施毒术")); + return; + } + default: + { + return; + } + } + }); + break; } default: { diff --git a/server/src/player.cpp b/server/src/player.cpp index e73a9a98a..a7557189e 100644 --- a/server/src/player.cpp +++ b/server/src/player.cpp @@ -819,6 +819,43 @@ void Player::onCMActionSpell(CMAction cmA) } break; } + case DBCOM_MAGICID(u8"施毒术"): + { + if(cmA.action.aimUID){ + switch(uidf::getUIDType(cmA.action.aimUID)){ + case UID_MON: + case UID_PLY: + { + checkFriend(cmA.action.aimUID, [cmA, this](int friendType) + { + switch(friendType){ + case FT_ENEMY: + case FT_NEUTRAL: + { + AMAddBuff amAB; + std::memset(&amAB, 0, sizeof(amAB)); + + amAB.id = DBCOM_BUFFID(u8"施毒术"); + amAB.from = UID(); + m_actorPod->forward(cmA.action.aimUID, {AM_ADDBUFF, amAB}); + return; + } + default: + { + return; + } + } + }); + break; + } + default: + { + break; + } + } + } + break; + } case DBCOM_MAGICID(u8"火球术"): case DBCOM_MAGICID(u8"大火球"): case DBCOM_MAGICID(u8"灵魂火符"): diff --git a/server/src/playerop.cpp b/server/src/playerop.cpp index ea5fac8ff..4f2694b47 100644 --- a/server/src/playerop.cpp +++ b/server/src/playerop.cpp @@ -406,6 +406,26 @@ void Player::on_AM_ADDBUFF(const ActorMsgPack &mpk) } } }); + break; + } + case DBCOM_BUFFID(u8"施毒术"): + { + checkFriend(amAB.from, [amAB, this](int friendType) + { + switch(friendType){ + case FT_ENEMY: + case FT_NEUTRAL: + { + addBuff(DBCOM_BUFFID(u8"施毒术")); + return; + } + default: + { + return; + } + } + }); + break; } default: {