⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 attackmelee.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : AttackMelee.cpp// Written by  : elca@ewestsoft.com// Description : 扁夯 傍拜//////////////////////////////////////////////////////////////////////////////#include "AttackMelee.h"#include "CrossCounter.h"#include "EffectPoison.h"#include "EffectProtectionFromPoison.h"#include "Gpackets/GCAttackMeleeOK1.h"#include "Gpackets/GCAttackMeleeOK2.h"#include "Gpackets/GCAttackMeleeOK3.h"#include "Gpackets/GCRemoveEffect.h"#include "Gpackets/GCAddEffect.h"//////////////////////////////////////////////////////////////////////////////// 浇饭捞绢 坷宏璃飘//////////////////////////////////////////////////////////////////////////////void AttackMelee::execute(Slayer* pSlayer, ObjectID_t TargetObjectID)	throw(Error){	__BEGIN_TRY	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << "Begin (slayer)" << endl;	Assert(pSlayer != NULL);	try 	{		Player* pPlayer = pSlayer->getPlayer();		Assert(pPlayer != NULL);		Zone* pZone = pSlayer->getZone();		Assert(pZone != NULL);		Creature* pTargetCreature = pZone->getCreature(TargetObjectID);		//Assert(pTargetCreature != NULL);		// NPC甫 傍拜且 荐绰 绝促.		if (pTargetCreature==NULL	// NoSuch力芭 锭巩俊.. by sigi. 2002.5.2			|| pTargetCreature->isNPC())		{			executeSkillFailException(pSlayer, getSkillType());			//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(slayer)" << endl;			return;		}		// 浇饭捞绢绰 盖颊捞搁 傍拜且 荐 绝促. by sigi. 2002.6.29		/*		Item* pWeapon = pSlayer->getWearItem(Slayer::WEAR_RIGHTHAND);				if (pWeapon==NULL)		{			executeSkillFailException(pSlayer, getSkillType());			return;		}		*/		bool bIncreaseDomainExp = pSlayer->isRealWearingEx(Slayer::WEAR_RIGHTHAND);		// 扁夯 傍拜 胶懦 浇儿阑 罐酒柯促.		SkillSlot* pSkillSlot = pSlayer->hasSkill(SKILL_ATTACK_MELEE);		Assert(pSkillSlot != NULL);		GCAttackMeleeOK1 _GCAttackMeleeOK1;		GCAttackMeleeOK2 _GCAttackMeleeOK2;		GCAttackMeleeOK3 _GCAttackMeleeOK3;		bool     bCriticalHit = false;		Damage_t Damage       = computeDamage(pSlayer, pTargetCreature, 0, bCriticalHit);		bool     bTimeCheck   = verifyRunTime(pSkillSlot);		bool     bRangeCheck  = verifyDistance(pSlayer, pTargetCreature, 1);		bool     bHitRoll     = HitRoll::isSuccess(pSlayer, pTargetCreature);		bool     bCanHit      = canHit(pSlayer, pTargetCreature, SKILL_ATTACK_MELEE);		bool     bPK          = verifyPK(pSlayer, pTargetCreature);				if (bTimeCheck && bRangeCheck && bHitRoll && bCanHit && bPK)		{			CheckCrossCounter(pSlayer, pTargetCreature, Damage);			Exp_t Point = 1;			// 单固瘤甫 林绊, 酒捞袍 郴备档甫 冻绢哆赴促.			setDamage(pTargetCreature, Damage, pSlayer, SKILL_ATTACK_MELEE, &_GCAttackMeleeOK2, &_GCAttackMeleeOK1);			computeAlignmentChange(pTargetCreature, Damage, pSlayer, &_GCAttackMeleeOK2, &_GCAttackMeleeOK1);			decreaseDurability(pSlayer, pTargetCreature, Point, &_GCAttackMeleeOK1, &_GCAttackMeleeOK2);			// 农府萍拿 洒飘扼搁 惑措规阑 第肺 拱矾唱霸 茄促.			if (bCriticalHit)			{				knockbackCreature(pZone, pTargetCreature, pSlayer->getX(), pSlayer->getY());			}			// 鸥百捞 浇饭捞绢啊 酒聪扼搁 版氰摹甫 棵妨霖促.			if (!pTargetCreature->isSlayer())			{				Item* pWeapon = pSlayer->getWearItem(Slayer::WEAR_RIGHTHAND);				if (pWeapon != NULL)				{					if ( bIncreaseDomainExp )					{						if (pWeapon->getItemClass() == Item::ITEM_CLASS_BLADE) 						{							shareAttrExp(pSlayer, Damage , 8, 1, 1, _GCAttackMeleeOK1);							increaseDomainExp(pSlayer, SKILL_DOMAIN_BLADE, Point, _GCAttackMeleeOK1);						}						else if (pWeapon->getItemClass() == Item::ITEM_CLASS_SWORD) 						{							shareAttrExp(pSlayer, Damage, 8, 1, 1, _GCAttackMeleeOK1);							increaseDomainExp(pSlayer, SKILL_DOMAIN_SWORD, Point, _GCAttackMeleeOK1);						}						else if (pWeapon->getItemClass() == Item::ITEM_CLASS_CROSS) 						{							// 绞磊啊甫 甸绊 乐阑 版快 Heal 拌凯狼 版氰摹甫 棵妨霖促.							shareAttrExp(pSlayer, Damage, 1, 1, 8, _GCAttackMeleeOK1);							increaseDomainExp(pSlayer, SKILL_DOMAIN_HEAL, Point, _GCAttackMeleeOK1);						} 						else if (pWeapon->getItemClass() == Item::ITEM_CLASS_MACE) 						{							// 皋捞胶甫 甸绊 乐阑 版快 Enchant 拌凯狼 版氰摹甫 棵妨霖促.							shareAttrExp(pSlayer, Damage, 1, 1, 8, _GCAttackMeleeOK1);							increaseDomainExp(pSlayer, SKILL_DOMAIN_ENCHANT, Point, _GCAttackMeleeOK1);						}						else 						{							// 促弗 拌凯狼 公扁甫 甸绊, AttackMelee甫 窍绰 巴篮 阂过(?)捞促.							Assert(false);						}					}				}				else				{					// 酒公 公扁档 甸瘤 臼绊, 傍拜阑 且 版快, 瓷仿摹 版氰摹父 距埃 棵妨霖促.					shareAttrExp(pSlayer, Damage , 1, 1, 1, _GCAttackMeleeOK1);				}				increaseAlignment(pSlayer, pTargetCreature, _GCAttackMeleeOK1);			}			_GCAttackMeleeOK3.setObjectID(pSlayer->getObjectID());			_GCAttackMeleeOK3.setTargetObjectID (TargetObjectID);			_GCAttackMeleeOK1.setObjectID(TargetObjectID);			pPlayer->sendPacket(&_GCAttackMeleeOK1);			if (pTargetCreature->isPC()) 			{				Player* pTargetPlayer = pTargetCreature->getPlayer();				if (pTargetPlayer != NULL) 				{					_GCAttackMeleeOK2.setObjectID(pSlayer->getObjectID());					pTargetPlayer->sendPacket(&_GCAttackMeleeOK2);				}			} 			else if (pTargetCreature->isMonster())			{				Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature);				pMonster->addEnemy(pSlayer);				// 捞 何盒篮 货肺 父甸绢柳 何盒阑 积阿秦辑 绊媚廉具 窍绰单...				// 付胶磐绰 掉饭捞绝促.				if (!pMonster->isMaster()#ifdef __UNDERWORLD__						&& !pMonster->isUnderworld() && pMonster->getMonsterType() != 599#endif				)				{					Timeval NextTurn = pMonster->getNextTurn();					Timeval DelayTurn;					DelayTurn.tv_sec  = 0;					DelayTurn.tv_usec = 200000;					Timeval NewTurn   = NextTurn + DelayTurn;					pMonster->setNextTurn(NewTurn);				}			}			list<Creature *> cList;			cList.push_back(pTargetCreature);			cList.push_back(pSlayer);			pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(),  &_GCAttackMeleeOK3 , cList);			pSkillSlot->setRunTime();		} 		else 		{			executeSkillFailNormal(pSlayer, getSkillType(), pTargetCreature);		}    } 	catch (Throwable & t) 	{		executeSkillFailException(pSlayer, getSkillType());        //cout << t.toString();    }	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(slayer)" << endl;	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 轨颇捞绢 坷宏璃飘//////////////////////////////////////////////////////////////////////////////void AttackMelee::execute(Vampire* pVampire, ObjectID_t TargetObjectID)	throw(Error){	__BEGIN_TRY	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << "Begin (vampire)" << endl;	Assert(pVampire != NULL);	try 	{		Player* pPlayer = pVampire->getPlayer();		Zone* pZone = pVampire->getZone();		Assert(pPlayer != NULL);		Assert(pZone != NULL);		Creature* pTargetCreature = pZone->getCreature(TargetObjectID);		//Assert(pTargetCreature != NULL);			// NoSuch力芭 锭巩俊. by sigi. 2002.5.2		if (pTargetCreature==NULL)		{			executeSkillFailException(pVampire, getSkillType());			return;		}		GCAttackMeleeOK1 _GCAttackMeleeOK1;		GCAttackMeleeOK2 _GCAttackMeleeOK2;		GCAttackMeleeOK3 _GCAttackMeleeOK3;		// 胶懦 浇儿阑 罐酒柯促.		VampireSkillSlot* pSkillSlot = pVampire->hasSkill(SKILL_ATTACK_MELEE);		Assert(pSkillSlot != NULL);		bool bCriticalHit = false;		Damage_t Damage = computeDamage(pVampire, pTargetCreature, 0, bCriticalHit);		bool bTimeCheck         = verifyRunTime(pSkillSlot);		bool bRangeCheck        = verifyDistance(pVampire, pTargetCreature, 1);		bool bHitRoll           = HitRoll::isSuccess(pVampire, pTargetCreature);		bool bCanHit            = canHit(pVampire, pTargetCreature, SKILL_ATTACK_MELEE);		bool bPK                = verifyPK(pVampire, pTargetCreature);		if (bTimeCheck && bRangeCheck && bHitRoll && bCanHit && bPK)		{			CheckCrossCounter(pVampire, pTargetCreature, Damage);			// 单固瘤甫 林绊, 郴备档甫 冻绢哆赴促.			setDamage(pTargetCreature, Damage, pVampire, SKILL_ATTACK_MELEE, &_GCAttackMeleeOK2, &_GCAttackMeleeOK1);			computeAlignmentChange(pTargetCreature, Damage, pVampire, &_GCAttackMeleeOK2, &_GCAttackMeleeOK1);			decreaseDurability(pVampire, pTargetCreature, 1, &_GCAttackMeleeOK1, &_GCAttackMeleeOK2);			// 农府萍拿 洒飘扼搁 惑措规阑 第肺 拱矾唱霸 茄促.			if (bCriticalHit)			{				knockbackCreature(pZone, pTargetCreature, pVampire->getX(), pVampire->getY());			}			increaseAlignment(pVampire, pTargetCreature, _GCAttackMeleeOK1);			// 惑措啊 磷菌促搁 版氰摹甫 粱 棵妨霖促.			if (pTargetCreature->isDead())			{				int exp = computeCreatureExp(pTargetCreature, KILL_EXP);				shareVampExp(pVampire, exp, _GCAttackMeleeOK1);			}			_GCAttackMeleeOK1.setObjectID(TargetObjectID);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -