コード例 #1
0
ファイル: Crywolf.cpp プロジェクト: Hagaib/p4f-free-emu
void CCrywolf::NotifyCrywolfStageEffectOnOff(BYTE btOnOff)
{
	PMSG_ANS_CRYWOLF_STAGE_EFFECT_ONOFF pMsg = {0};

	PHeadSubSetB((LPBYTE)&pMsg, 0xBD, 0x06, sizeof(pMsg));
	pMsg.btStageEffectOnOff = btOnOff;

	UTIL.SendCrywolfUserAnyData((LPBYTE)&pMsg,sizeof(pMsg));
}
コード例 #2
0
ファイル: Crywolf.cpp プロジェクト: Hagaib/p4f-free-emu
void CCrywolf::NotifyCrywolfCurrentState()
{
	PMSG_ANS_CRYWOLF_INFO pMsg = {0};

	PHeadSubSetB((LPBYTE)&pMsg, 0xBD, 0x00, sizeof(pMsg));
	pMsg.btOccupationState = this->GetOccupationState();
	pMsg.btCrywolfState = this->GetCrywolfState();

	UTIL.SendCrywolfUserAnyData((LPBYTE)&pMsg,sizeof(pMsg));

	LogAdd( "[ Crywolf ] SetState - StateInfo : Occupation/%d, State/%d",
		pMsg.btOccupationState, pMsg.btCrywolfState);
}
コード例 #3
0
ファイル: Crywolf.cpp プロジェクト: Hagaib/p4f-free-emu
void CCrywolf::NotifyCrywolfHeroList()
{

	char cBUFFER[6000];
	int iHeroCount = 0;
	memset(cBUFFER, 0, sizeof(cBUFFER));
	PMSG_ANS_CRYWOLF_HERO_LIST_INFO_COUNT * lpMsg = (PMSG_ANS_CRYWOLF_HERO_LIST_INFO_COUNT *)cBUFFER;
	PMSG_ANS_CRYWOLF_HERO_LIST_INFO * lpMsgBody = (PMSG_ANS_CRYWOLF_HERO_LIST_INFO *)(cBUFFER + 5);
	std::set<LPOBJ,CCrywolfScoreSort> HeroSet;
	
	for (int i=OBJ_STARTUSERINDEX;i<OBJMAX;i++)
	{
		if ( gObj[i].Connected == PLAYER_PLAYING &&
			 gObj[i].Type == OBJ_USER &&
			 gObj[i].MapNumber == MAP_INDEX_CRYWOLF_FIRSTZONE)
		{
			HeroSet.insert(&gObj[i]);
		}
	}

	std::set<LPOBJ, CCrywolfScoreSort>::iterator _Itor = HeroSet.begin();
	
	for(int j=0;j<5&& _Itor != HeroSet.end();j++, _Itor++)
	{
		LPOBJ lpHeroObj = (*(_Itor));

		lpMsgBody[j].iRank = iHeroCount;
		lpMsgBody[j].btHeroClass = (BYTE)lpHeroObj->Class;
		lpMsgBody[j].iHeroScore = lpHeroObj->m_iCrywolfMVPScore;
		memcpy(lpMsgBody[j].szHeroName, lpHeroObj->Name, MAX_ACCOUNT_LEN);
		iHeroCount++;

		LogAdd("[ Crywolf ][Hero List] [%s][%s] Score(%d) Ranking(%d)",
			lpHeroObj->AccountID, lpHeroObj->Name, lpHeroObj->m_iCrywolfMVPScore, iHeroCount);

		if ( this->GetOccupationState() != 1 )
		{
			if ( lpMsgBody[j].iRank <= 5 )
			{
				this->MakeRewardForHeroListTop5(lpHeroObj->m_Index);
			}
		}
	}

	lpMsg->btCount = iHeroCount;

	PHeadSubSetB((LPBYTE)lpMsg, 0xBD, 0x08, iHeroCount*sizeof(PMSG_ANS_CRYWOLF_HERO_LIST_INFO) + sizeof(PMSG_ANS_CRYWOLF_HERO_LIST_INFO_COUNT));

	UTIL.SendCrywolfUserAnyData((LPBYTE)lpMsg, lpMsg->h.size);
}
コード例 #4
0
ファイル: Crywolf.cpp プロジェクト: Hagaib/p4f-free-emu
void CCrywolf::NotifyCrywolfBossMonsterInfo()
{
	static DWORD dwTickCount = 0;

	if ( (GetTickCount() - dwTickCount) < 5000 )
		return;

	dwTickCount = GetTickCount();

	PMSG_ANS_CRYWOLF_BOSSMONSTER_INFO pMsg;

	PHeadSubSetB((LPBYTE)&pMsg, 0xBD, 0x05, sizeof(pMsg));
	pMsg.iMonster1HP = -1;
	pMsg.btMonster2 = 0;

	int tmp=0;
#if (MP==1)
#pragma omp parallel for reduction(+:tmp)
#endif
	for ( int i=0;i<OBJ_MAXMONSTER;i++)
	{
		if (!gObjIsConnected(i))
			continue;

		if ( gObj[i].MapNumber != MAP_INDEX_CRYWOLF_FIRSTZONE )
			continue;

		if ( !gObj[i].Live )
			continue;

		switch ( gObj[i].Class )
		{
			case 340:
				tmp++;
				break;
			case 349:
				pMsg.iMonster1HP = int((gObj[i].Life * 100.0) / (gObj[i].MaxLife + 1.0));
				break;
		}
	}

	pMsg.btMonster2=tmp;

	UTIL.SendCrywolfUserAnyData((LPBYTE)&pMsg,sizeof(pMsg));

	LogAdd("[ Crywolf ][Boss Monster Info] Balgas HP:%d, DarkElf:%d",
		pMsg.iMonster1HP, pMsg.btMonster2);
}
コード例 #5
0
ファイル: Crywolf.cpp プロジェクト: Hagaib/p4f-free-emu
void CCrywolf::NotifyCrywolfStateLeftTime()
{
	static DWORD dwTickCount = 0;

	if ( (GetTickCount() - dwTickCount) < 20000 )
		return;

	dwTickCount = GetTickCount();

	PMSG_ANS_CRYWOLF_LEFTTIME pMsg = {0};

	PHeadSubSetB((LPBYTE)&pMsg, 0xBD, 0x04, sizeof(pMsg));
	pMsg.btHour = ( ( this->m_StateTimeInfo[this->GetCrywolfState()].GetLeftTime() / 1000 ) / 60 ) / 24;
	pMsg.btMinute = ( ( this->m_StateTimeInfo[this->GetCrywolfState()].GetLeftTime() / 1000 ) / 60 );

	UTIL.SendCrywolfUserAnyData((LPBYTE)&pMsg,sizeof(pMsg));

	LogAdd( "[ Crywolf ] War LeftTime - (%02d:%02d)",
		pMsg.btHour, pMsg.btMinute);
}
コード例 #6
0
ファイル: Crywolf.cpp プロジェクト: Hagaib/p4f-free-emu
void CCrywolf::NotifyCrywolfStatueAndAltarInfo()
{
	static DWORD dwTickCount = 0;

	if ( (GetTickCount() - dwTickCount) < 2000 )
		return;

	dwTickCount = GetTickCount();

	PMSG_ANS_CRYWOLF_STATUE_ALTAR_INFO pMsg;
	
	PHeadSubSetB((LPBYTE)&pMsg, 0xBD, 0x02, sizeof(pMsg));

	pMsg.iCrywolfStatueHP = g_CrywolfNPC_Statue.m_Shield.GetHPPercentage();
	pMsg.btAltarState1 = g_CrywolfNPC_Altar.GetAltarRemainContractCount(205);
	pMsg.btAltarState2 = g_CrywolfNPC_Altar.GetAltarRemainContractCount(206);
	pMsg.btAltarState3 = g_CrywolfNPC_Altar.GetAltarRemainContractCount(207);
	pMsg.btAltarState4 = g_CrywolfNPC_Altar.GetAltarRemainContractCount(208);
	pMsg.btAltarState5 = g_CrywolfNPC_Altar.GetAltarRemainContractCount(209);
	pMsg.btAltarState1 |= g_CrywolfNPC_Altar.GetAltarState(205) << 4;
	pMsg.btAltarState2 |= g_CrywolfNPC_Altar.GetAltarState(206) << 4;
	pMsg.btAltarState3 |= g_CrywolfNPC_Altar.GetAltarState(207) << 4;
	pMsg.btAltarState4 |= g_CrywolfNPC_Altar.GetAltarState(208) << 4;
	pMsg.btAltarState5 |= g_CrywolfNPC_Altar.GetAltarState(209) << 4;

	UTIL.SendCrywolfUserAnyData((LPBYTE)&pMsg,sizeof(pMsg));

	LogAdd("[ Crywolf ][Statue Info] Statue HP : %d",
		pMsg.iCrywolfStatueHP);

	for ( int iAltar = 205 ; iAltar <= 209 ; iAltar ++ )
	{
		int iUserIndex = g_CrywolfNPC_Altar.GetAltarUserIndex(iAltar);

		if ( iUserIndex != -1 )
		{
			LogAdd("[ Crywolf ][Altar Info] Altar(%d) Contractor: [%s][%s] ",
				iAltar, gObj[iUserIndex].AccountID, gObj[iUserIndex].Name);
		}
	}
}