Example #1
0
ExBuffData::ExBuffData(WORD SkillNo, WORD StateNo, WORD forcedLvl, bool bTimed, BuffType aType, exId cId)
{

	UnitAny* pPlayer = D2Funcs.D2CLIENT_GetPlayer();
	D2EXASSERT(pPlayer, "%s: UnitAny* not found!", __FUNCTION__)

	SkillId = SkillNo;
	StateId = StateNo;
	SkillLvl = forcedLvl;
	bTimed = bTimed;
	SkillLen = 0;
	SkillExpire = 0;
	this->aType = aType;
	controlId = cId;

	if (SkillId)
	{
		if (!forcedLvl) {
			Skill* pSkill = D2Funcs.D2COMMON_GetSkillById(pPlayer, SkillId, -1);
			if (pSkill)
				SkillLvl = D2Funcs.D2COMMON_GetSkillLevel(pPlayer, pSkill, 1);
		}
		SkillsTxt *pTxt = &(*D2Vars.D2COMMON_sgptDataTables)->pSkillsTxt[SkillId];
		if (pTxt) {
			SkillLen = isTimed ? (D2Funcs.D2COMMON_EvaluateSkill(pPlayer, pTxt->dwAuraLenCalc, SkillId, SkillLvl) / 25) * 1000 : 0;
			SkillExpire = GetTickCount() + SkillLen;
		}
	}
}
Example #2
0
ExBuffData::ExBuffData(WORD SkillNo, WORD StateNo, WORD forcedLvl, bool bTimed, BuffType aType)
{

	UnitAny* pPlayer = D2Funcs.D2CLIENT_GetPlayer();
	D2EXASSERT(pPlayer, "%s: UnitAny* not found!", __FUNCTION__)

	SkillId = SkillNo;
	StateId = StateNo;
	SkillLvl = forcedLvl;
	bTimed = bTimed;
	SkillLen = 0;
	SkillExpire = 0;
	this->aType = aType;

	if (SkillId)
	{
		if (!forcedLvl) {
			Skill* pSkill = D2Funcs.D2COMMON_GetSkillById(pPlayer, SkillId, -1);
			if (pSkill)
				SkillLvl = D2Funcs.D2COMMON_GetSkillLevel(pPlayer, pSkill, 1);
		}
		SkillsTxt *pTxt = &(*D2Vars.D2COMMON_sgptDataTables)->pSkillsTxt[SkillId];
		if (!pTxt)	{
			isTimed = false;
			D2EXINFO("Unknown Skill Id %d. Check your Skills.Txt", SkillId)
		} else {
Example #3
0
void ExBuffData::update(WORD forcedLvl)
{
	if (SkillId)
	{
		UnitAny* pPlayer = D2Funcs.D2CLIENT_GetPlayer();
		D2EXASSERT(pPlayer, "%s: UnitAny* not found!", __FUNCTION__)

		SkillLvl = forcedLvl;

		if (!forcedLvl) {
			Skill* pSkill = D2Funcs.D2COMMON_GetSkillById(pPlayer, SkillId, -1);
			if (pSkill)
				SkillLvl = D2Funcs.D2COMMON_GetSkillLevel(pPlayer, pSkill, 1);
		}
		if (!SkillLvl)
			return;

		SkillsTxt *pTxt = &(*D2Vars.D2COMMON_sgptDataTables)->pSkillsTxt[SkillId];
		if (pTxt)	{
			SkillLen = isTimed ? (D2Funcs.D2COMMON_EvaluateSkill(pPlayer, pTxt->dwAuraLenCalc, SkillId, SkillLvl) / 25) * 1000 : 0;
			SkillExpire = GetTickCount() + SkillLen;
		}
	}
}
Example #4
0
BOOL __fastcall ExBuffs::OnSetState(BYTE* aPacket)
{
	if (BuffsEnabled)
	{
		p0xa8 *pSetState = (p0xa8*)aPacket;
		UnitAny* pPlayer = D2Funcs.D2CLIENT_GetPlayer();
		D2EXASSERT(pPlayer, "Failed to get Player Unit");
		int UnitType = pSetState->UnitType;
		int UnitID = pSetState->UnitId;


		if (UnitType != UNIT_PLAYER || UnitID != pPlayer->dwUnitId)
		{
			return D2Funcs.D2CLIENT_SetState_I(aPacket);
		}

		BYTE StateNo = pSetState->StateNo;
		exId newid = exnull_t;

		buff_it buff = FindByStateId(StateNo);
		if (buff != gBuffs.end())
			newid = buff->controlId;

		switch (StateNo)
		{
		case 51: //BC,155
		{
			Skill* pSkill = D2Funcs.D2COMMON_GetSkillById(pPlayer, 155, -1);
			int lvl = pSkill ? D2Funcs.D2COMMON_GetSkillLevel(pPlayer, pSkill, 1) : BCLvl ? BCLvl : 12;

			buff_it bo = FindByStateId(32);
			if (!pSkill && bo != gBuffs.end()) // Try to guess BC lvl by BO lvl
			{
				if (ExParty::IsInPartyWithClass(pPlayer, PLAYER_BARBARIAN))
				{
					lvl = bo->SkillLvl - 19; //cause any sane barb put only 1 point in BC
				}
				else
				{
					lvl = bo->SkillLvl;
				}
			}

			if (buff != gBuffs.end())
			{
				buff->update(lvl);
				break;
			}
			else {
				newid = gExGUI->add(new ExBuff(gBuffs.size(), ExBuffStateToDC6(StateNo), BUFF_GOOD));
				gBuffs.emplace_back(ExBuffData(155, StateNo, lvl, true, BUFF_GOOD, newid));
			}
		}
		break;
		case 32: //BO,149
		{
			
			int val = GetStateStatValue(77, pSetState->Data, pSetState->PacketLen);
			if (buff != gBuffs.end())
			{
				buff->update(GetSkillLvlByStat(149, 77, val));
				break;
			}
			else {
				newid = gExGUI->add(new ExBuff(gBuffs.size(), ExBuffStateToDC6(StateNo), BUFF_GOOD));
				gBuffs.emplace_back(ExBuffData(149, StateNo, GetSkillLvlByStat(149, 77, val), true, BUFF_GOOD, newid));
			}
		}
		break;
		case 26: //SHOUT,138
		{
			
			int val = GetStateStatValue(171, pSetState->Data, pSetState->PacketLen);
			if (buff != gBuffs.end())
			{
				buff->update(GetSkillLvlByStat(138, 171, val));
				break;
			}
			else {
				newid = gExGUI->add(new ExBuff(gBuffs.size(), ExBuffStateToDC6(StateNo), BUFF_GOOD));
				gBuffs.emplace_back(ExBuffData(138, StateNo, GetSkillLvlByStat(138, 171, val), true, BUFF_GOOD, newid));
			}
		}
		break;
		case 9: //AMP, 66
		{
			
			if (buff != gBuffs.end())
			{
				buff->update(AmpLvl ? AmpLvl : 40);
				break;
			}
			else {
				newid = gExGUI->add(new ExBuff(gBuffs.size(), ExBuffStateToDC6(StateNo), BUFF_BAD));
				gBuffs.emplace_back(ExBuffData(66, StateNo, AmpLvl ? AmpLvl : 40, true, BUFF_BAD, newid));
			}
		}
		break;
		case 61: //LR, 91
		{
			
			int val = GetStateStatValue(39, pSetState->Data, pSetState->PacketLen);
			if (buff != gBuffs.end())
			{
				buff->update(GetSkillLvlByStat(91, 39, val));
				break;
			}
			else {
				newid = gExGUI->add(new ExBuff(gBuffs.size(), ExBuffStateToDC6(StateNo), BUFF_BAD));
				gBuffs.emplace_back(ExBuffData(91, StateNo, GetSkillLvlByStat(91, 39, val), true, BUFF_BAD, newid));
			}
		}
		break;
		case 16: //ENCH, 52
		{
			
			int val = GetStateStatValue(119, pSetState->Data, pSetState->PacketLen);
			if (buff != gBuffs.end())
				buff->update(GetSkillLvlByStat(52, 119, val));
			else {
				newid = gExGUI->add(new ExBuff(gBuffs.size(), ExBuffStateToDC6(StateNo), BUFF_GOOD));
				gBuffs.emplace_back(ExBuffData(52, StateNo, GetSkillLvlByStat(52, 119, val), true, BUFF_GOOD, newid));
			}
		}
		break;
		case 87: //SM, 17
		{
			
			if (buff != gBuffs.end())
				buff->update(SMLvl ? SMLvl : 12);
			else {
				newid = gExGUI->add(new ExBuff(gBuffs.size(), ExBuffStateToDC6(StateNo), BUFF_BAD));
				gBuffs.emplace_back(ExBuffData(17, StateNo, SMLvl ? SMLvl : 12, true, BUFF_BAD, newid));
			}
		}
		break;
		case 101: //HOLYSHIELD, 117
		{
			
			if (buff != gBuffs.end())
				buff->update(0);
			else {
				newid = gExGUI->add(new ExBuff(gBuffs.size(), ExBuffStateToDC6(StateNo), BUFF_GOOD));
				gBuffs.emplace_back(ExBuffData(117, StateNo, 0, true, BUFF_GOOD, newid));
			}
		}
		break;
		case 157: //BOS, 258
		{
			
			if (buff != gBuffs.end())
			{
				buff->update(0);
			}
			else {
				newid = gExGUI->add(new ExBuff(gBuffs.size(), ExBuffStateToDC6(StateNo), BUFF_GOOD));
				gBuffs.emplace_back(ExBuffData(258, StateNo, 0, true, BUFF_GOOD, newid));
			}
		}
		break;
		case 159: //FADE, 267
		{
			
			if (buff != gBuffs.end())
			{
				buff->update(0);
			}
			else {
				newid = gExGUI->add(new ExBuff(gBuffs.size(), ExBuffStateToDC6(StateNo), BUFF_GOOD));
				gBuffs.emplace_back(ExBuffData(267, StateNo, 0, true, BUFF_GOOD, newid));
			}
		}
		break;
		case 30: //ES, 58
		{
			
			if (buff == gBuffs.end()) {
				newid = gExGUI->add(new ExBuff(gBuffs.size(), ExBuffStateToDC6(StateNo), BUFF_GOOD));
				gBuffs.emplace_back(ExBuffData(58, StateNo, 0, true, BUFF_GOOD, newid));
			}
			else
				buff->update(0);
		}
		break;
		case 38: //TS, 57
		{
			
			if (buff != gBuffs.end())
			{
				buff->update(0);

			}
			else {
				newid = gExGUI->add(new ExBuff(gBuffs.size(), ExBuffStateToDC6(StateNo), BUFF_GOOD)),
				gBuffs.emplace_back(ExBuffData(57, StateNo, 0, true, BUFF_GOOD, newid));
			}
		}
		break;
		case 144: //HURRI, 250
		{
			
			if (buff != gBuffs.end())
			{
				buff->update(0);
				break;
			}
			else {
				newid = gExGUI->add(new ExBuff(gBuffs.size(), ExBuffStateToDC6(StateNo), BUFF_GOOD));
				gBuffs.emplace_back(ExBuffData(250, StateNo, 0, false, BUFF_GOOD, newid));
			}
		}
		break;
		case STATE_CONVICTION: //CONV
		case STATE_HOLYWINDCOLD: //HF
		{
			if (buff == gBuffs.end()) {
				newid = gExGUI->add(new ExBuff(gBuffs.size(), ExBuffStateToDC6(StateNo), BUFF_BAD));
				gBuffs.emplace_back(ExBuffData(0, StateNo, 0, false, BUFF_BAD, newid));
			}
		}
		break;
		case STATE_RESISTALL: //SALV
		case STATE_CLEANSING: //CLEANSING
		case STATE_STAMINA: //VIGOR
		case STATE_CONCENTRATION: //CONC
		case STATE_FANATICISM: //FANA
		case STATE_MEDITATION: //MEDI
		case STATE_MIGHT: //MIGHT
		case STATE_OAKSAGE: //OAK
		{	
			if (buff == gBuffs.end()) {
				newid = gExGUI->add(new ExBuff(gBuffs.size(), ExBuffStateToDC6(StateNo), BUFF_AURA));
				gBuffs.emplace_back(ExBuffData(0, StateNo, 0, false, BUFF_AURA, newid));
			}
		}
		break;	
		}
		buff = FindByStateId(StateNo);

		if (newid != exnull_t && buff != gBuffs.end() && buff->SkillLvl) {
			gExGUI->setText(newid, boost::lexical_cast<wstring>(buff->SkillLvl));
		}
	}
	return D2Funcs.D2CLIENT_SetState_I(aPacket);
}