Ebenezerin Oyun İçindeki Bütün C++ Kodları ve Açıklamaları !

  • Konbuyu başlatan Konbuyu başlatan TrayhopeR
  • Başlangıç tarihi Başlangıç tarihi
Konu Yazar

TrayhopeR

www.trayhoper.net
May
2,830
62
Arkadaşlar ebenezerin sourcelarını açarak kodları baştan aşağı inceledim.Çevirebildiğim kadarı ile sizlere ebenezerin oyun içinde nasıl bir sistem uguladığını anlatmaya çalışacağım ^^

Aşağıdaki kod yeni karakter açarken stat toplamlarının 300 den büyük olmasıyla işleyecek kodları içeriyor :
Kod:
	sum = str + sta + dex + intel + cha;
	if( sum > 300 ) {
		result = 0x02;
		goto fail_return;
Bu şekilde datadaki new_char_value.tbl den düzenlenerek yeni bir karakter açılmıyor ^^
-------------------------------------------
Aşağıdaki kod birine trade attığınızda işleyecek kodları içeriyor :
Kod:
void CUser::ExchangeProcess(char *pBuf)
{
	int index = 0;
	BYTE subcommand = GetByte( pBuf, index );

	switch( subcommand ) {
	case EXCHANGE_REQ:
		ExchangeReq( pBuf+index );
		break;
	case EXCHANGE_AGREE:
		ExchangeAgree( pBuf+index );
		break;
	case EXCHANGE_ADD:
		ExchangeAdd( pBuf+index );
		break;
	case EXCHANGE_DECIDE:
		ExchangeDecide();
		break;
	case EXCHANGE_CANCEL:
		ExchangeCancel();
		break;
	}
}
REQ = Istek
AGREE = Kabul Ettiğinizde
ADD = Item Koyduğunuzda
DECIDE = Onaylamadığınızda
CANCEL = X e basıp kapattığınızda
-------------------------------------------
Aşağıdaki kod kullanıcının kullandığı komutun işlemesi için gm olup olmadığını kontrol ediyor :
Kod:
	if( m_pUserData->m_bAuthority != 0 )	// is this user administrator?
		return;
return;
altındada eğer 0 ise işleyecek komutlar yer alıyor.Yani oyunun zamanını ve havasını değiştirme kodları :)
------------------------------------------
Aşağıdaki kod ya skill veya stat sıfırlarken istediği para veya para event olduğunda artacak miktarı gösteriyor :
Kod:
		money = pow(( m_pUserData->m_bLevel * 2 ), 3.4);
		money = ( money / 100 )*100;
		if( m_pUserData->m_bLevel < 30)		money = money * 0.4;
		else if( m_pUserData->m_bLevel >= 30 && m_pUserData->m_bLevel < 60 ) money = money * 1;
		else if( m_pUserData->m_bLevel >= 60 && m_pUserData->m_bLevel <= 90 ) money = money * 1.5;
ilk satır karakterin lwl ini 2 ile çarpıp pow komutu ile üssünü alıyor.3.4 nedir bilmiyorum ..
aşağıdaki satırsa salak birşey yapıyor 100 e bölüp 100 ile çarpıyor bunun mantığını anlamadım :S
3. satırda karakter lwl i 30 dan düşükse parasını 0.4 ile çarpıyor
30 - 60 arasında ise parasının 2 katını veriyor
60 - 90 arasında ise parasının 3 katını veriyor
:)
-----------------------------------------


Aşağıdaki kod master olduktan sonra title ın string olarak nasıl değişeceğini belirliyor :
Kod:
classcode = GetByte( pBuf, index );

	switch( m_pUserData->m_sClass ) {
	case KARUWARRRIOR:
		if( classcode == BERSERKER || classcode == GUARDIAN )
			bSuccess = TRUE;
		break;
	case KARUROGUE:
		if( classcode == HUNTER || classcode == PENETRATOR )
			bSuccess = TRUE;
		break;
	case KARUWIZARD:
		if( classcode == SORSERER || classcode == NECROMANCER )
			bSuccess = TRUE;
		break;
	case KARUPRIEST:
		if( classcode == SHAMAN || classcode == DARKPRIEST )
			bSuccess = TRUE;
		break;
	case ELMORWARRRIOR:
		if( classcode == BLADE || classcode == PROTECTOR )
			bSuccess = TRUE;
		break;
	case ELMOROGUE:
		if( classcode == RANGER || classcode == ASSASSIN )
			bSuccess = TRUE;
		break;
	case ELMOWIZARD:
		if( classcode == MAGE || classcode == ENCHANTER )
			bSuccess = TRUE;
		break;
	case ELMOPRIEST:
		if( classcode == CLERIC || classcode == DRUID )
			bSuccess = TRUE;
		break;
	}
CLECRIC master olunca DRUID oluyormuş demekki gerçekten bilmiyordum :p
----------------------------------------
Aşağıdaki kod str nizin yetmediği bir silahı giyememeniz için yazılmş.Yani yeterli statınız ve lwliniz yoksa giyemiyorsunuz :)
Kod:
BOOL CUser::ItemEquipAvailable(_ITEM_TABLE *pTable)
{
	if( !pTable )
		return FALSE;
//	if( pTable->m_bReqLevel > m_pUserData->m_bLevel )
//		return FALSE;
	if( pTable->m_bReqRank > m_pUserData->m_bRank )
		return FALSE;
	if( pTable->m_bReqTitle > m_pUserData->m_bTitle )
		return FALSE;
	if( pTable->m_bReqStr > m_pUserData->m_bStr )
		return FALSE;
	if( pTable->m_bReqSta > m_pUserData->m_bSta )
		return FALSE;
	if( pTable->m_bReqDex > m_pUserData->m_bDex )
		return FALSE;
	if( pTable->m_bReqIntel > m_pUserData->m_bIntel )
		return FALSE;
	if( pTable->m_bReqCha > m_pUserData->m_bCha )
		return FALSE;

	return TRUE;
}
ReqIntel yani itemin gerekli int seviyesi ">" bizim userdatadaki Intel sekmesindeki değerimizden yüksekse return FALSE oluyor ve işlem kesiliyor :)
----------------------------------------
Aşağıdaki kodda inn hostess e max 2.100.000.000 ve 0 ın üstünde bir para koyulabileceğini açıklıyor :
Kod:
		if( itemid == ITEM_GOLD ) {
			if( m_pUserData->m_iGold+count > 2100000000 ) goto fail_return;
			if( m_pUserData->m_iBank-count < 0 ) goto fail_return;
aslında burda fazla konulursa hata vereceği açıklanıyor ama dediğimide bu kodlardan cıkartabiliriz ..
----------------------------------------
Aşağıdaki kod sayılabilir nesnelerin (pot,sc vb.) ağırlıklarının karakterimizin ağırlığından daha fazla olduğunda hata vereceğini açıklıyor ..
Kod:
		if (pTable->m_bCountable) {	// Check weight of countable item.
			if (((pTable->m_sWeight * count)   + m_sItemWeight) > m_sMaxWeight) {			
				goto fail_return;
Tablodaki ağırlık alınıyor ve count yani miktarı kadar çarpılıyor.Buna itemin gerçek ağırlığıda eklenip karakter ağırlığı ile karşılaştırılıyor :)
----------------------------------------
Aşağıdaki kodda yukarıdakinin sayılamayanları için yapılmış olanı :)
Kod:
		else {	// Check weight of non-countable item.
			if ((pTable->m_sWeight + m_sItemWeight) > m_sMaxWeight) {
				goto fail_return;
			}
		}
Tablodan ağırlık alınıyor.Sayılamadığı için zaten 1 tane olacak ve miktarı kadar çarpılmadan gerçek ağırlığı ile toplanıyor ..
----------------------------------------
Aşağıdaki kodda party ile ilgili bir işlem yapıldığında party sayısı 8 den aşağı olana kadar işlem yapılıyor ..
Kod:
	while(count<8) {
		select_user = pParty->uid[pParty->bItemRouting];
		if( select_user >= 0 && select_user < MAX_USER ) {
:) Ne işlem yapıldığı belli değil bende anlayamadım ..
----------------------------------------
Aşağıdaki kodda skill açtırmak için lwl kontrolü yapılıp skill açılıyor :)
Kod:
void CUser::ClassChangeReq()
{
	char send_buff[128]; memset( send_buff, NULL, 128 );
	int send_index = 0;

	SetByte( send_buff, WIZ_CLASS_CHANGE, send_index );
	SetByte( send_buff, CLASS_CHANGE_RESULT, send_index );
	if( m_pUserData->m_bLevel < 10 )
		SetByte( send_buff, 0x02, send_index );
	else if ( (m_pUserData->m_sClass % 100) > 4 )
		SetByte( send_buff, 0x03, send_index );
	else
		SetByte( send_buff, 0x01, send_index );
	Send( send_buff, send_index );
}
10 lwl değilse yapılacak işlemde bu kodda verilmiş ..
----------------------------------------
Aşağıdaki kodda karakter 80 den büyük bir lwl e ulaştığında hata verilmesini istiyor.Bu kod AllPointChange altında yazıyor.
Acaba onlarda 80 lwl birinin stat sıfırladığında hata oluşturduğunu biliyormuydu ?
Kod:
if( m_pUserData->m_bLevel > 80 ) goto fail_return;
İlginç birşey belki bu sayı 90 olarak değiştirilebilirse stat buguda kalkabilir ..
----------------------------------------
Aşağıdaki kodda ise yeni karakter oluşturulurken verilen stat lar gösteriliyor ..
Kod:
case KARUS_BIG:	
		if( m_pUserData->m_bStr == 65 && m_pUserData->m_bSta == 65 && m_pUserData->m_bDex == 60 && m_pUserData->m_bIntel == 50 && m_pUserData->m_bCha == 50 )	{
			type = 0x02;	
			goto fail_return;
		}
		m_pUserData->m_bStr = 65;
		m_pUserData->m_bSta = 65;
		m_pUserData->m_bDex = 60;
		m_pUserData->m_bIntel = 50;
		m_pUserData->m_bCha = 50;
		break;
case BABARIAN:
		if( m_pUserData->m_bStr == 65 && m_pUserData->m_bSta == 65 && m_pUserData->m_bDex == 60 && m_pUserData->m_bIntel == 50 && m_pUserData->m_bCha == 50 )	{
			type = 0x02;	
			goto fail_return;
		}
		m_pUserData->m_bStr = 65;
		m_pUserData->m_bSta = 65;
		m_pUserData->m_bDex = 60;
		m_pUserData->m_bIntel = 50;
		m_pUserData->m_bCha = 50;
		break;
Ben sadece barbar ve orc warrior un bölümünü gösterdim.Diğer tüm classların var ...
----------------------------------------
Aşağıdaki kodda karakterin userdatadaki points i veriliyor ama points in ne işe yaradığını bilmiyorum .. Yani bu kod ne için uygulanıyor
meçhul birşey :)
Kod:
m_pUserData->m_bPoints = (m_pUserData->m_bLevel-1) * 3 + 10;
Karakterin lwlinden 1 azaltılıyor,3 ile çarpılıp 10 ile toplanıyor.Seeking party için olabilirmi diye düşündüm ama sonra mantıksız geldi :)
----------------------------------------
Aşağıdaki kodda cz de adam kestiğinizde karşıdakinin parasının yarısının size gelmesi için belirtilen konum şartı var.Yani sadece battle zonelarda
keserseniz karşınızdakinin parasının yarısı size gelir ..
Kod:
if (m_pUserData->m_bZone < 3) return;
Buda zone değeri 3 den az olduğu alanları içeriyor sanırım ..
----------------------------------------
Aşağıdaki kodda ebenezer kullanıcının kesildiğinimi yoksa adam kestiğinimi anlıyor.Client 1 gönderirse kesti,2 gönderirse kesildi olarak algılıyor.
1 Gönderdiğinde para ve np alıyorsunuz,2 gönderdiğinde para ve np kaybediyorsunuz :)
Kod:
BYTE s_type = 0; BYTE t_type = 0;
0 gönderirse ne bilmiyorum :)
----------------------------------------
Aşağıdaki kod ise cz de adam kestiğinizde para size geliyor ya , party ile kestiğinzde para ya yapılan matematiksel işlemleri içeriyor ..
Kod:
_PARTY_GROUP* pParty = NULL;
			pParty = m_pMain->m_PartyArray.GetData( m_sPartyIndex );
			if( !pParty ) return;			

			s_type = 1 ; t_type = 2 ;

			s_temp_gold = (pTUser->m_pUserData->m_iGold * 4) / 10;
			t_temp_gold = pTUser->m_pUserData->m_iGold / 2;
			
			pTUser->m_pUserData->m_iGold -= t_temp_gold;
PartyIndex partydeki kişi sayısı olarak pParty değişkenine alınıyor.pPart de değer varsa (!pParty) karakterin userdatadaki gold
değeri 4 ile çarpılıyor,10 ile bölünüyor.Yukarıda anlatmıştım 1 kazanmak,2 kaybetmeti.Eğer değer 1 ise 4 ile çarpılıp 10 a bölünüyor
kaybedilincede direkt 2 ye bölünüyor.Yani paranızın yarısı karşıya gitmiş oluyor :)
----------------------------------------
Aşağıdaki kodda savaş esnasında kesilen orc ve human sayısına göre savaşın kimin kazandığını anlayan kod
Kod:
	if (m_pUserData->m_bNation == KARUS) {		
				m_pMain->m_bKarusFlag++;
			}
			else if (m_pUserData->m_bNation == ELMORAD) {
				m_pMain->m_bElmoradFlag++;
			}
Bu kodun hemen altında :

m_pMain->BattleZoneVictoryCheck();
Yani kazanan takım kontrol ediliyor ..
----------------------------------------
Aşağıdaki kodda biri sizi arkadaş olarak eklediğinde neler yapılacağı yazıyor.
Kod:
	switch( subcommand ) {
		case FRIEND_REQUEST:
			FriendRequest(pBuf+index);
			break;
		case FRIEND_ACCEPT:
			FriendAccept(pBuf+index);
			break;
----------------------------------------
Aşağıdaki kod ise seeking party açtığınızda neler olduğunu anlatıyor ..
Kod:
void CUser::PartyBBSRegister(char *pBuf)
{
	CUser* pUser = NULL;
	int index = 0, send_index = 0;			
	BYTE result = 0; short bbs_len = 0;
	char send_buff[256]; memset(send_buff, NULL, 256);
	int i = 0, counter = 0;

	if (m_sPartyIndex != -1) goto fail_return; '' Party ye girildiğinde değişen sPartyIndex değeri
	if (m_bNeedParty == 2) goto fail_return; '' Party ye gereksinim olduğunda değişen needparty değeri

sPartyIndex -1 olduğunda partydeki kişi sayısı 1 artıyor.Yani sPartyIndex PartyBBSRegister sub u altında
8 - partydeki kişi sayısı değerini alıyor :)
Karakter NeedParty değişkeni 2 olduğunda partysiz , 1 olduğunda party li bir muhamele görür :)
----------------------------------------
Aşağıdaki kod ise inn hostess de eski versionlarda bulunan Trade Board sistemi için.Biz onu şimdi Item Rental
olarak kullanıyoruz.Elbet biraz gelişmişini :)
Kod:
case MARKET_BBS_REGISTER :			
			MarketBBSRegister(pBuf+index);
			break;
		case MARKET_BBS_DELETE :			
			MarketBBSDelete(pBuf+index);
			break;
Item koyarken register,silerken ise delete subu kullanılıyor ..

-----------------------------------

Aşağıdaki kodda ise yukarıda bahsettiğim trade board dan item alırken aldığınız itemin fiyatı sizin paranızdan
büyük olduğunda neler yapılacağını anlatıyor :)
Kod:
	if (buysell_index == MARKET_BBS_BUY) {
		if (m_pUserData->m_iGold < BUY_POST_PRICE) {
			sub_result = 2;
			goto fail_return;
		}
	}
Userdatadaki gold sekmesindeki değer BUY_POST_PRICE değişkeninden küçükse - ki bu değişkenin değeri
oyundan geliyor - hata verdiriyor ..
-----------------------------------

Evet arkadaşlar inşallah beğenmişsinizir.Ebenezer dediğiniz velet bundan ibaret.En azından benim anladığım kadarı ile :) Alıntı olmadığını anlamışsınızdır umarım :)
 
Cevap: Ebenezerin Oyun İçindeki Bütün C++ Kodları ve Açıklamaları !

way güzelmiş paylaşım için teşekkürler işine yarayanlar olur :D
 
Cevap: Ebenezerin Oyun İçindeki Bütün C++ Kodları ve Açıklamaları !

Bu Ebenzerde Amma İş Yapıomuş :)
 
Cevap: Ebenezerin Oyun İçindeki Bütün C++ Kodları ve Açıklamaları !

süper paylaşım :) başka forumlara kaçırmamak lazım bunu ;)
 
Cevap: Ebenezerin Oyun İçindeki Bütün C++ Kodları ve Açıklamaları !

güselmiş gerçekten ellerine sağlık!!
 
Cevap: Ebenezerin Oyun İçindeki Bütün C++ Kodları ve Açıklamaları !

C++'da ' ile yorum yapamazsın // kullanmalısın :D
 
Cevap: Ebenezerin Oyun İçindeki Bütün C++ Kodları ve Açıklamaları !

Bu Ebenzerde Amma İş Yapıomuş :)

sen çocuğa markete git dersin gider.
sen bu ebenezere markete git dersen :

sağ dön
5 adım ilerle
sola dön


şeklinde algılar yani dışarıdan aslında birine party atmak çok kolay bir işlem gibi gözüküyor aslında.gelde ebemize sor :D
 
Cevap: Ebenezerin Oyun İçindeki Bütün C++ Kodları ve Açıklamaları !

sen çocuğa markete git dersin gider.
sen bu ebenezere markete git dersen :

sağ dön
5 adım ilerle
sola dön


şeklinde algılar yani dışarıdan aslında birine party atmak çok kolay bir işlem gibi gözüküyor aslında.gelde ebemize sor :D

:D:D Koptum aYak üstü :D


(Sen Yazdıysan bunların hepsını helal olsun işime yaramaz suanlık ama baya ugrasmıssın valla )
 
Cevap: Ebenezerin Oyun İçindeki Bütün C++ Kodları ve Açıklamaları !

Saol Ellerine Sağlk
 
Cevap: Ebenezerin Oyun İçindeki Bütün C++ Kodları ve Açıklamaları !

:D:D Koptum aYak üstü :D


(Sen Yazdıysan bunların hepsını helal olsun işime yaramaz suanlık ama baya ugrasmıssın valla )

:) yok hacı açıklamalarını ben yazdım sadece kodlar 2002 de bir mahlukat tarafından yazlmış ^^
 
Cevap: Ebenezerin Oyun İçindeki Bütün C++ Kodları ve Açıklamaları !

Teşekkürler işine yarayanlar olabilir :D (:
 
Cevap: Ebenezerin Oyun İçindeki Bütün C++ Kodları ve Açıklamaları !

lan bunlar kimin işine yarıcak bilgi olsun diye yazdım :D
 
Cevap: Ebenezerin Oyun İçindeki Bütün C++ Kodları ve Açıklamaları !

bende bu ebenezer sadece savaş açar savaş kapatır event yapar falan sanıyordum sandığım gibi deyilmiş yaww :)
 
Cevap: Ebenezerin Oyun İçindeki Bütün C++ Kodları ve Açıklamaları !

Ebenezer olmaza işimiz iş miş :D
 
Cevap: Ebenezerin Oyun İçindeki Bütün C++ Kodları ve Açıklamaları !

Bu ebenezeri Yazan Kişi/kişilere Allah AKıl Fikir Versin Demicem Vermiş Zaten :)

Saol Tray Ebenezerin Sadece Bir exe Olmadığını Anlamış Olduk. ;)
 
Geri
Üst Alt