- Konu Yazar
- #1
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.
Buradan indirebilirsiniz.
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.
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.