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

📄 eventregeneration.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : EventRegeneration.cpp// Written by  : elca// Description : //////////////////////////////////////////////////////////////////////////////#include "EventRegeneration.h"#include "GamePlayer.h"#include "Creature.h"#include "Slayer.h"#include "Vampire.h"#include "Ousters.h"#include "Item.h"#include "Gpackets/GCModifyInformation.h"#include "Gpackets/GCStatusCurrentHP.h"//////////////////////////////////////////////////////////////////////////////// constructor//////////////////////////////////////////////////////////////////////////////EventRegeneration::EventRegeneration (GamePlayer* pGamePlayer) 	throw (Error): Event(pGamePlayer){}//////////////////////////////////////////////////////////////////////////////// destructor//////////////////////////////////////////////////////////////////////////////EventRegeneration::~EventRegeneration () 	throw (){}			//////////////////////////////////////////////////////////////////////////////// activate//////////////////////////////////////////////////////////////////////////////void EventRegeneration::activate () 	throw (Error){	__BEGIN_TRY	if (m_pGamePlayer->getPlayerStatus() == GPS_NORMAL) 	{		Assert(m_pGamePlayer != NULL);		Creature* pCreature = m_pGamePlayer->getCreature();		Assert(pCreature != NULL);		Assert(pCreature->isPC());		Zone* pZone = pCreature->getZone();		if (pCreature->isAlive())		{			if (pCreature->isSlayer())			{				Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);				HP_t oldHP   = pSlayer->getHP(ATTR_CURRENT); // 泅犁 HP				MP_t oldMP   = pSlayer->getMP(ATTR_CURRENT); // 泅犁 MP				HP_t maxHP   = pSlayer->getHP(ATTR_MAX); // 泅犁 钙胶 HP				MP_t maxMP   = pSlayer->getMP(ATTR_MAX); // 泅犁 钙胶 MP				// 府哩啦俊 蝶扼 雀汗矫懦 HP客 MP狼 剧阑 拌魂茄促.				//HP_t regenHP = getPercentValue(maxHP, pSlayer->getHPRegen()); 				//MP_t regenMP = getPercentValue(maxMP, pSlayer->getMPRegen());				HP_t regenHP = pSlayer->getHPRegen() * 2;				MP_t regenMP = pSlayer->getMPRegen() * 2;				// MAX甫 逞绢啊搁 帮鄂窍促.				HP_t newHP   = min((int)(oldHP + regenHP), (int)maxHP); 				MP_t newMP   = min((int)(oldMP + regenMP), (int)maxMP);				pSlayer->setHP(newHP, ATTR_CURRENT);				pSlayer->setMP(newMP, ATTR_CURRENT);				GCModifyInformation GCMI;				// HP啊 函版登菌栏聪 宏肺靛某胶泼秦霖促.				if (oldHP != newHP)				{					GCMI.addShortData(MODIFY_CURRENT_HP, newHP); 					GCStatusCurrentHP gcStatusCurrentHP;					gcStatusCurrentHP.setObjectID(pSlayer->getObjectID());					gcStatusCurrentHP.setCurrentHP(newHP);					pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &gcStatusCurrentHP, pSlayer);				}				if (oldMP != newMP)				{					GCMI.addShortData(MODIFY_CURRENT_MP, newMP); 				}				// HP唱 MP啊 函版登菌促搁, 函版登菌促绰 荤角阑 夯牢俊霸 舅妨霖促.				if (GCMI.getShortCount() != 0 || GCMI.getLongCount() != 0)					m_pGamePlayer->sendPacket(&GCMI);			}			else if (pCreature->isVampire())			{				Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);				HP_t     oldHP    = pVampire->getHP(ATTR_CURRENT);				HP_t     maxHP    = pVampire->getHP(ATTR_MAX) - pVampire->getSilverDamage();				HP_t     regenHP  = 0;				HP_t     newHP    = 0; 				/*				if (pVampire->isFlag(Effect::EFFECT_CLASS_HIDE))				{					// 窍捞靛窍绊 乐阑 锭绰 乞惑矫焊促 HP啊 弧府 瞒霸 等促.					regenHP = getPercentValue(maxHP, 15 + pVampire->getHPRegen() + pVampire->getINT(ATTR_CURRENT)/60);					newHP   = min((int)(oldHP + regenHP), (int)maxHP);				}				else				{					// 乞惑矫俊绰...					regenHP = getPercentValue(maxHP, 10 + pVampire->getHPRegen() + pVampire->getINT(ATTR_CURRENT)/60);					newHP   = min((int)(oldHP + regenHP), (int)maxHP);				}				*/				// 冠零 惑怕牢啊 酒囱啊父阑 八荤茄促.				// 窍捞靛唱 包俊 甸绢啊 乐绰 惑怕 八荤啊 绝绰 捞蜡绰,				// 捞甸 惑怕俊 狼茄 HP 雀汗 风凭篮 Vampire::heartbeat()俊 甸绢啊 乐扁 锭巩捞促.				if (pVampire->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_BAT))				{					// 冠零 惑怕俊辑绰 HP啊 雀汗登瘤 臼绰促.					regenHP = 0;				}				else				{					// 乞惑矫俊绰...					regenHP = pVampire->getHPRegen() * 2;				}				newHP = min((int)(oldHP + regenHP), (int)maxHP);				pVampire->setHP(newHP, ATTR_CURRENT);				GCModifyInformation GCMI;				// HP啊 函版登菌栏聪 宏肺靛某胶泼秦霖促.				if (oldHP != newHP)				{					GCMI.addShortData(MODIFY_CURRENT_HP, newHP); 					GCStatusCurrentHP gcStatusCurrentHP;					gcStatusCurrentHP.setObjectID(pVampire->getObjectID());					gcStatusCurrentHP.setCurrentHP(newHP);					pZone->broadcastPacket(pVampire->getX(), pVampire->getY(), &gcStatusCurrentHP, pVampire);				}				// HP啊 函版登菌促绰 荤角阑 夯牢俊霸 舅妨霖促.				if (GCMI.getShortCount() != 0 || GCMI.getLongCount() != 0) m_pGamePlayer->sendPacket(&GCMI);			}			else if (pCreature->isOusters())			{				Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);						HP_t oldHP   = pOusters->getHP(ATTR_CURRENT); // 泅犁 HP				MP_t oldMP   = pOusters->getMP(ATTR_CURRENT); // 泅犁 MP				HP_t maxHP   = pOusters->getHP(ATTR_MAX); // 泅犁 钙胶 HP				MP_t maxMP   = pOusters->getMP(ATTR_MAX); // 泅犁 钙胶 MP				// 府哩啦俊 蝶扼 雀汗矫懦 HP客 MP狼 剧阑 拌魂茄促.				//HP_t regenHP = getPercentValue(maxHP, pOusters->getHPRegen()); 				//MP_t regenMP = getPercentValue(maxMP, pOusters->getMPRegen());				HP_t regenHP = pOusters->getHPRegen() * 2;				MP_t regenMP = pOusters->getMPRegen() * 2;				// MAX甫 逞绢啊搁 帮鄂窍促.				HP_t newHP   = min((int)(oldHP + regenHP), (int)maxHP); 				MP_t newMP   = min((int)(oldMP + regenMP), (int)maxMP);				pOusters->setHP(newHP, ATTR_CURRENT);				pOusters->setMP(newMP, ATTR_CURRENT);				GCModifyInformation GCMI;				// HP啊 函版登菌栏聪 宏肺靛某胶泼秦霖促.				if (oldHP != newHP)				{					GCMI.addShortData(MODIFY_CURRENT_HP, newHP); 					GCStatusCurrentHP gcStatusCurrentHP;					gcStatusCurrentHP.setObjectID(pOusters->getObjectID());					gcStatusCurrentHP.setCurrentHP(newHP);					pZone->broadcastPacket(pOusters->getX(), pOusters->getY(), &gcStatusCurrentHP, pOusters);				}				if (oldMP != newMP)				{					GCMI.addShortData(MODIFY_CURRENT_MP, newMP); 				}				// HP唱 MP啊 函版登菌促搁, 函版登菌促绰 荤角阑 夯牢俊霸 舅妨霖促.				if (GCMI.getShortCount() != 0 || GCMI.getLongCount() != 0)					m_pGamePlayer->sendPacket(&GCMI);			}		}		// 10 檬付促 雀汗矫难 林扁 困秦辑绰 deadline 阑 刘啊矫难 拎具 茄促.		Timeval delay;		delay.tv_sec = 10;		delay.tv_usec = 0;			m_Deadline = m_Deadline + delay;	}	else	{		Timeval delay;		delay.tv_sec = 10;		delay.tv_usec = 0;			m_Deadline = m_Deadline + delay;	}		__END_CATCH}

⌨️ 快捷键说明

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