HTML Code:
#if __VER >= 11 // __GUILDCOMBATCHIP
void CGuildCombat::GuildCombatResultRanking()
{
vector<__REQUESTGUILD> vecGCRanking;
vecGCRanking = vecRequestRanking;
for( int i=0; i<(int)( vecGCRanking.size()-1 ); i++ )
{
if( i >= m_nMaxGuild )
break;
// 순위별로 정렬
for( int j=0; j<(int)( vecGCRanking.size()-1-i ); j++ )
{
__REQUESTGUILD RequestGuild1 = vecGCRanking[j];
__GuildCombatMember* pGCMember1 = FindGuildCombatMember( RequestGuild1.uidGuild );
__REQUESTGUILD RequestGuild2 = vecGCRanking[j+1];
__GuildCombatMember* pGCMember2 = FindGuildCombatMember( RequestGuild2.uidGuild );
if( !pGCMember1 || !pGCMember2 )
{
Error( "GuildCombatResultRanking() - pGCMember1 or pGCMember2 is NULL" );
return;
}
// 점수가 많은 길드가 높은 순위
if( pGCMember1->nGuildPoint < pGCMember2->nGuildPoint )
{
__REQUESTGUILD temp = vecGCRanking[j];
vecGCRanking[j] = vecGCRanking[j+1];
vecGCRanking[j+1] = temp;
}
// 점수가 같을 때 생명이 많은쪽이 높은 순위
else if( pGCMember1->nGuildPoint == pGCMember2->nGuildPoint )
{
int nLife1=0, nLife2=0;
for( int k=0 ; k<(int)( pGCMember1->vecGCSelectMember.size() ); k++ )
{
__JOINPLAYER* pJoinPlayer = pGCMember1->vecGCSelectMember[k];
if( pJoinPlayer )
nLife1 += pJoinPlayer->nlife;
}
for( int k=0 ; k<(int)( pGCMember2->vecGCSelectMember.size() ); k++ )
{
__JOINPLAYER* pJoinPlayer = pGCMember2->vecGCSelectMember[k];
if( pJoinPlayer )
nLife2 += pJoinPlayer->nlife;
}
if( nLife1 < nLife2 )
{
__REQUESTGUILD temp = vecGCRanking[j];
vecGCRanking[j] = vecGCRanking[j+1];
vecGCRanking[j+1] = temp;
}
// 생명도 같을 때 생명이 남은 길드원들의 평균레벨이 높은 길드
else if( nLife1 == nLife2 )
{
int nLevel=0, nCount = 0;
float fAvg1=0, fAvg2=0;
for( int k=0 ; k<(int)( pGCMember1->vecGCSelectMember.size() ); k++ )
{
__JOINPLAYER* pJoinPlayer = pGCMember1->vecGCSelectMember[k];
if( pJoinPlayer && 0 < pJoinPlayer->nlife )
{
CUser* pUsertmp = (CUser*)prj.GetUserByID( pJoinPlayer->uidPlayer );
if( IsValidObj( pUsertmp ) )
{
nLevel += pUsertmp->GetLevel();
nCount++;
}
}
}
if( nCount )
fAvg1 = (float)( nLevel/nCount );
else
fAvg1 = 1.0f;
nLevel = nCount = 0;
for( int k=0 ; k<(int)( pGCMember2->vecGCSelectMember.size() ); k++ )
{
__JOINPLAYER* pJoinPlayer = pGCMember2->vecGCSelectMember[k];
if( pJoinPlayer && 0 < pJoinPlayer->nlife )
{
CUser* pUsertmp = (CUser*)prj.GetUserByID( pJoinPlayer->uidPlayer );
if( IsValidObj( pUsertmp ) )
{
nLevel += pUsertmp->GetLevel();
nCount++;
}
}
}
if( nCount )
fAvg2 = (float)( nLevel/nCount );
else
fAvg2 = 1.0f;
if( fAvg1 < fAvg2 )
{
__REQUESTGUILD temp = vecGCRanking[j];
vecGCRanking[j] = vecGCRanking[j+1];
vecGCRanking[j+1] = temp;
}
} //if 생명
} //if 점수
} //for j
} //for i
// 아이템(레드칩) 지급
for( int i=0; i<(int)( vecGCRanking.size() ); i++ )
{
if( i >= 3 ) break;
__REQUESTGUILD RequestGuild = vecGCRanking[i];
__GuildCombatMember* pGCMember = FindGuildCombatMember( RequestGuild.uidGuild );
if( !pGCMember )
{
Error( "GuildCombatResultRanking() - pGCMember is NULL" );
continue;
}
CItemElem itemElem;
itemElem.m_dwItemId = II_CHP_RED;
//float fChipNum = m_nJoinPanya * vecGCRanking.size() * 0.9f * 0.00001f * 0.1f;
switch( i )
{
case 0 : // 1위
itemElem.m_nItemNum = 20;
break;
case 1 : // 2위
itemElem.m_nItemNum = 10;
break;
case 2 : // 3위
itemElem.m_nItemNum = 5;
break;
}
//CItemElem itemElem;
//itemElem.m_nItemNum = (int)fChipNum;
if( itemElem.m_nItemNum < 1 )
itemElem.m_nItemNum = 1;
itemElem.m_bCharged = itemElem.GetProp()->bCharged;
LogItemInfo aLogItem;
aLogItem.Action = "W";
aLogItem.Gold_1 = i;
for( int j=0 ; j<(int)( pGCMember->vecGCSelectMember.size() ); j++ )
{
__JOINPLAYER* pJoinPlayer = pGCMember->vecGCSelectMember[j];
if( !pJoinPlayer )
{
Error( "GuildCombatResultRanking() - pJoinPlayer is NULL" );
continue;
}
CUser* pUsertmp = (CUser*)prj.GetUserByID( pJoinPlayer->uidPlayer );
if( IsValidObj( pUsertmp ) )
{
aLogItem.SendName = pUsertmp->GetName();
// 아이템 지급
itemElem.SetSerialNumber();
if( pUsertmp->CreateItem( &itemElem ) )
{
aLogItem.RecvName = "GUILDCOMBAT_CHIP";
pUsertmp->AddDefinedText( TID_GAME_GUILDCOMBAT1TO1_WARGUILDWINCHIP, "%d", itemElem.m_nItemNum );
}
else
{
g_dpDBClient.SendQueryPostMail( pUsertmp->m_idPlayer, 0, itemElem, 0, itemElem.GetProp()->szName, itemElem.GetProp()->szName );
//pUsertmp->AddDefinedText( TID_GAME_MINIGAME_ITEM_POST, "" );
aLogItem.RecvName = "GUILDCOMBAT_CHIP_POST";
}
int cbChip = pUsertmp->GetItemNum( II_CHP_RED );
aLogItem.Gold = cbChip;
aLogItem.Gold2 = cbChip + itemElem.m_nItemNum;
aLogItem.Gold_1 = itemElem.m_nItemNum;
g_DPSrvr.OnLogItem( aLogItem, &itemElem, itemElem.m_nItemNum );
TRACE( "GC REDCHIP - %s, %d위, %s : %d개\n", pUsertmp->GetName(), i+1, itemElem.GetProp()->szName, itemElem.m_nItemNum );
}
}
}
}
#endif // __GUILDCOMBATCHIP