Herkeze kolay gelsin, bu kod için epey zaman harcamıştım. Sizde alın uygulayın kullanın öğrenin 🙂
Kod yazmak, roma rakamları gibidir. Hangi kodu nereye koyacağınız çıkacak olan sonucu belirler.
Bknz. İşler güçler / 28 Bölüm / 1 Kısım / 14.dk 😉
Aşşağıdaki kod satırlarını anlamayan, anlamakta güçlük çeken veya işleyiş hakkında bilgi edinmek isteyen arkadaşlar için, bu kodun
daha minimal halini C# üzerinde yazmıştım.
LİNK2 :
Ufak bir yapı oluşturdum, böylece kullanıcıları bu yapı içinde array olarak barındırıp, buradaki değerlere göre sıralayıp filitrelendirebilecez.
Bu kod, bir sıralama algoritmasıdır. BubbleSort dediğimiz bu algoritma bir dizi içerisindeki rakamları büyükten küçüğe veya
küçükten büyüğe sıralar. Bunu kullanıcıları NP'lerine göre sıralarken kullanıyoruz.
Bu kod RankProcess, Rank'ın çalışmasını işlemesini koşullara bağlı olarak np ekleme silme vb. işlemleri yapan kod kısmı. Bİraz uzunca ama incelerseniz anlarsanınız.
Bu Alt'a basıtığınızda kullanıcıdan gelen paket doğrultusunda çalışan void, rank tablosundaki paketlerin hepsi burada, aynı zamanda içinde chaos rank listesinin paketleri de var oda süpriz hediye olsun 😉
İlerleyen günlerde, paylaşımlarım devam edicek benden - bizden - forumdan geliştirmekten, merak etmekten, araştırmaktan ayrılmayın.
Kod yazmak, roma rakamları gibidir. Hangi kodu nereye koyacağınız çıkacak olan sonucu belirler.
Bknz. İşler güçler / 28 Bölüm / 1 Kısım / 14.dk 😉
Aşşağıdaki kod satırlarını anlamayan, anlamakta güçlük çeken veya işleyiş hakkında bilgi edinmek isteyen arkadaşlar için, bu kodun
daha minimal halini C# üzerinde yazmıştım.
View hidden content is available for registered users!
LİNK2 :
View hidden content is available for registered users!
Ufak bir yapı oluşturdum, böylece kullanıcıları bu yapı içinde array olarak barındırıp, buradaki değerlere göre sıralayıp filitrelendirebilecez.
Kod:
struct _RANK_INFO {
short m_Sid;
short m_sNation;
int m_iLoyalty;
};
Bu kod, bir sıralama algoritmasıdır. BubbleSort dediğimiz bu algoritma bir dizi içerisindeki rakamları büyükten küçüğe veya
küçükten büyüğe sıralar. Bunu kullanıcıları NP'lerine göre sıralarken kullanıyoruz.
Kod:
/* Efe - 19:13 19.02.2013 */
_RANK_INFO* CEbenezerDlg::Sort(_RANK_INFO* pRankInfo)
{
_RANK_INFO Temp;
for (int i = m_sRankInfoIndex - 1; i > 0; i--)
{
for (int j = 1; j <= i; j++)
{
if( pRankInfo[j - 1].m_iLoyalty < pRankInfo[j].m_iLoyalty ) {
Temp = pRankInfo[j - 1];
pRankInfo[j - 1] = pRankInfo[j];
pRankInfo[j] = Temp;
}
}
}
return pRankInfo;
}
Bu kod RankProcess, Rank'ın çalışmasını işlemesini koşullara bağlı olarak np ekleme silme vb. işlemleri yapan kod kısmı. Bİraz uzunca ama incelerseniz anlarsanınız.
Kod:
/* Efe - 19:13 20.02.2013 */
void CEbenezerDlg::RankProcess( CUser* pUser, short Type ) {
// Add
if( Type == 1 ) {
if( pUser->m_pUserData->m_bNation == 1 ) {
for(int i = 0; i < 3000; i++)
{
if( pKarusRank[i].m_Sid == 0 ) {
pKarusRank[i].m_Sid = pUser->GetSocketID();
pKarusRank[i].m_sNation = pUser->m_pUserData->m_bNation;
pKarusRank[i].m_iLoyalty = pUser->m_iLoyaltyDaily;
pUser->m_iLoyaltyDaily = 0;
m_sKarusIndex++;
m_sRankInfoIndex++;
// TRACE("### pKarusRank - Add Sid : %d ###\r\n", pKarusRank[i].m_Sid );
break;
}
}
}
if( pUser->m_pUserData->m_bNation == 2 ) {
for(int i = 0; i < 3000; i++)
{
if( pHumanRank[i].m_Sid == 0 ) {
pHumanRank[i].m_Sid = pUser->GetSocketID();
pHumanRank[i].m_sNation = pUser->m_pUserData->m_bNation;
pHumanRank[i].m_iLoyalty = pUser->m_iLoyaltyDaily;
pUser->m_iLoyaltyDaily = 0;
m_sHumanIndex++;
m_sRankInfoIndex++;
// TRACE("### pHumanRank - Add Sid : %d ###\r\n", pHumanRank[i].m_Sid );
break;
}
}
}
}
// Remove
if( Type == 2 ) {
if( pUser->m_pUserData->m_bNation == 1 ) {
for(int i = 0; i < 3000; i++)
{
if( pKarusRank[i].m_Sid == pUser->GetSocketID() ) {
pKarusRank[i].m_Sid = 0;
pKarusRank[i].m_sNation = 0;
pKarusRank[i].m_iLoyalty = 0;
pUser->m_iLoyaltyDaily = 0;
m_sKarusIndex--;
m_sRankInfoIndex--;
// TRACE("### pKarusRank - Remove Sid : %d ###\r\n", pUser->GetSocketID() );
break;
}
}
}
if( pUser->m_pUserData->m_bNation == 2 ) {
for(int i = 0; i < 3000; i++)
{
if( pHumanRank[i].m_Sid == pUser->GetSocketID() ) {
pHumanRank[i].m_Sid = 0;
pHumanRank[i].m_sNation = 0;
pHumanRank[i].m_iLoyalty = 0;
pUser->m_iLoyaltyDaily = 0;
m_sHumanIndex--;
m_sRankInfoIndex--;
// TRACE("### pHumanRank - Remove Sid : %d ###\r\n", pUser->GetSocketID() );
break;
}
}
}
}
// Update
if( Type == 3 ) {
if( pUser->m_pUserData->m_bNation == 1 ) {
for(int i = 0; i < 3000; i++)
{
if( pKarusRank[i].m_Sid == pUser->GetSocketID() ) {
pKarusRank[i].m_iLoyalty = pUser->m_iLoyaltyDaily;
// TRACE("### pKarusRank - Update Sid : %d ###\r\n", pKarusRank[i].m_Sid );
break;
}
}
}
if( pUser->m_pUserData->m_bNation == 2 ) {
for(int i = 0; i < 3000; i++)
{
if( pHumanRank[i].m_Sid == pUser->GetSocketID()) {
pHumanRank[i].m_iLoyalty = pUser->m_iLoyaltyDaily;
// TRACE("### pHumanRank - Update Sid : %d ###\r\n", pHumanRank[i].m_Sid );
break;
}
}
}
}
}
Bu Alt'a basıtığınızda kullanıcıdan gelen paket doğrultusunda çalışan void, rank tablosundaki paketlerin hepsi burada, aynı zamanda içinde chaos rank listesinin paketleri de var oda süpriz hediye olsun 😉
Kod:
/* Efe - 12:19 20.02.2013 */
void CUser::RankInfo( char* pBuf, CUser* pTUser )
{
int send_index = 0, index = 0;
char send_buff[1024]; memset( send_buff, 0x00, 1024 );
short myindex = 0, sMark = 0;
int k;
m_pMain->m_sKarus = 0;
m_pMain->m_sHuman = 0;
_RANK_INFO* pKarusRank = new _RANK_INFO();
pKarusRank = m_pMain->Sort( m_pMain->pKarusRank );
_RANK_INFO* pHumanRank = new _RANK_INFO();
pHumanRank = m_pMain->Sort( m_pMain->pHumanRank );
if( m_pUserData->m_bNation == 1 ) {
for(int i = 0; i < m_pMain->m_sKarusIndex; i++)
{
if( pKarusRank[i].m_Sid == m_Sid ) {
myindex = i+1;
break;
}
}
}
if( m_pUserData->m_bNation == 2 ) {
for(int i = 0; i < m_pMain->m_sHumanIndex; i++)
{
if( pHumanRank[i].m_Sid == m_Sid ) {
myindex = i;
break;
}
}
}
if( m_pUserData->m_bNation == 1 ) {
for(int i = 0; i < m_pMain->m_sKarusIndex; i++)
{
if( pKarusRank[i].m_Sid > 0 ) {
if( m_pMain->m_sKarus < 10 ) {
m_pMain->m_sKarus++;
}
}
}
}
if( m_pUserData->m_bNation == 2 ) {
for(int i = 0; i < m_pMain->m_sHumanIndex; i++)
{
if( pHumanRank[i].m_Sid > 0 ) {
if( m_pMain->m_sHuman < 10 ) {
m_pMain->m_sHuman++;
}
}
}
}
BYTE Type = GetByte(pBuf, index);
SetByte( send_buff, WIZ_RANKINFO, send_index );
SetByte( send_buff, Type, send_index );
switch( Type )
{
// 0x01 - Colony Zone Rank
case 1:
SetShort( send_buff, m_pMain->m_sKarus, send_index );
for( k = 0; k < m_pMain->m_sKarus; k++)
{
CUser* pUser = NULL;
pUser = (CUser*)m_pMain->m_Iocport.m_SockArray[pKarusRank[k].m_Sid];
if( !pUser ) {
continue;
}
CKnights* pKnights = NULL;
pKnights = m_pMain->m_KnightsArray.GetData( pUser->m_pUserData->m_bKnights );
SetShort( send_buff, strlen(pUser->m_pUserData->m_id), send_index );
SetString( send_buff, pUser->m_pUserData->m_id, strlen(pUser->m_pUserData->m_id), send_index );
if( pKnights ) {
if( pKnights->m_byGrade <= 3 ) {
sMark = 0x01;
}
else {
sMark = 0x00;
}
SetByte( send_buff, sMark, send_index );
SetShort( send_buff, pUser->m_pUserData->m_bKnights, send_index );
SetShort( send_buff, pKnights->m_sMarkVersion, send_index );
SetShort( send_buff, strlen(pKnights->m_strName), send_index );
SetString( send_buff, pKnights->m_strName, strlen(pKnights->m_strName), send_index );
}
else {
SetByte( send_buff, sMark, send_index );
SetShort( send_buff, 0x00, send_index );
SetShort( send_buff, 0x00, send_index );
SetShort( send_buff, 0x00, send_index );
//SetString( send_buff, "", 0, send_index );
}
SetDWORD( send_buff, pUser->m_iLoyaltyDaily, send_index );
SetShort( send_buff, pUser->m_iLoyaltyCont, send_index );
}
// Human
if( m_pMain->pHumanRank[0].m_Sid == 0 ) {
m_pMain->m_sHuman = 0;
}
SetShort( send_buff, m_pMain->m_sHuman, send_index );
for(k = 0; k < m_pMain->m_sHuman; k++)
{
CUser* pUser = NULL;
pUser = (CUser*)m_pMain->m_Iocport.m_SockArray[pHumanRank[k].m_Sid];
if( !pUser ) {
continue;
}
CKnights* pKnights = NULL;
pKnights = m_pMain->m_KnightsArray.GetData( pUser->m_pUserData->m_bKnights );
SetShort( send_buff, strlen(pUser->m_pUserData->m_id), send_index );
SetString( send_buff, pUser->m_pUserData->m_id, strlen(pUser->m_pUserData->m_id), send_index );
if( pKnights ) {
if( pKnights->m_byGrade <= 3 ) {
sMark = 0x01;
}
else {
sMark = 0x00;
}
SetByte( send_buff, sMark, send_index );
SetShort( send_buff, pUser->m_pUserData->m_bKnights, send_index );
SetShort( send_buff, pKnights->m_sMarkVersion, send_index );
SetShort( send_buff, strlen(pKnights->m_strName), send_index );
SetString( send_buff, pKnights->m_strName, strlen(pKnights->m_strName), send_index );
}
else {
SetByte( send_buff, sMark, send_index );
SetShort( send_buff, 0x00, send_index );
SetShort( send_buff, 0x00, send_index );
SetShort( send_buff, 0x00, send_index );
//SetString( send_buff, "", 0, send_index );
}
SetDWORD( send_buff, pUser->m_iLoyaltyDaily, send_index );
SetShort( send_buff, pUser->m_iLoyaltyCont, send_index );
}
// Source
SetShort( send_buff, myindex, send_index );
SetDWORD( send_buff, m_iLoyaltyDaily, send_index );
SetShort( send_buff, m_iLoyaltyCont, send_index );
Send( send_buff, send_index );
break;
// 0x02 - Unkown
case 2:
break;
// 0x03 - Chaos War List
case 3:
SetByte( send_buff, 5, send_index ); // List count,
for(int i = 0; i < 4; i++) {
SetShort( send_buff, strlen("test"), send_index); // id len
SetString( send_buff, "test", strlen("test"), send_index ); // id
SetShort( send_buff, 11+i, send_index ); // kill
SetShort( send_buff, 5, send_index ); // dead
}
SetShort( send_buff, strlen(m_pUserData->m_id), send_index);
SetString( send_buff, m_pUserData->m_id, strlen(m_pUserData->m_id), send_index );
SetShort( send_buff, 3, send_index );
SetShort( send_buff, 0, send_index );
SetDWORD( send_buff, 1500000, send_index ); // event exp bonus
SetDWORD( send_buff, 1500000, send_index ); // premium exp bonus
Send(send_buff, send_index );
break;
}
}
İlerleyen günlerde, paylaşımlarım devam edicek benden - bizden - forumdan geliştirmekten, merak etmekten, araştırmaktan ayrılmayın.