KO Source Skillerin Bazıları

Kayıtlı Üye
Katılım
8 Mart 2012
Mesajlar
345
Kod:
	switch (pType->bBuffType) 

	{	

		case 1 :

		if( pType->sMaxHp =! 0 )

		{

			if ( magicid == 111654 || magicid == 112654 || magicid == 211654 || magicid == 212654 || magicid == 500054) // Undying                                                                                             

			{ // Undying buff

				int undHP = (pTUser->m_sMaxHPAmount * 60) / 100;

				pTUser->m_sMaxHPAmount = undHP;

				pTUser->m_sDuration1 = pType->sDuration;

				pTUser->m_fStartTime1 = TimeGet(); 

			}

			else

			{  // Normal buff

				pTUser->m_sMaxHPAmount = pType->sMaxHP;

				pTUser->m_sDuration1 = pType->sDuration;

				pTUser->m_fStartTime1 = TimeGet();

			}

		}

		else

		if( magicid == 111727 || magicid == 211727 || magicid == 112727 || magicid == 211727 ) // Reserve Life

		{

				pTUser->m_sMaxHPAmount = pTUser->m_sMaxHPAmount

				pTUser->m_sDuration1 = pType->sDuration;

				pTUser->m_fStartTime1 = TimeGet();

		}

		else

		if( magicid == 111745 || magicid == 211745|| magicid == 212745 || magicid == 112745) // Parasite

		{

				int Parasite = pTUser->m_sMaxHPAmount - (pTUser->m_sMaxHPAmount * 20) / 100;

				pTUser->m_sMaxHPAmount = Parasite;

				pTUser->m_sDuration1 = pType->sDuration;

				pTUser->m_fStartTime1 = TimeGet();	

		}

		else

		if( magicid == 212771 || magicid == 112771 ) // Superior Parasite

		{

				int sParasite = pTUser->m_sMaxHPAmount - (pTUser->m_sMaxHPAmount * 30) / 100;

				pTUser->m_sMaxHPAmount = sParasite;

				pTUser->m_sDuration1 = pType->sDuration;

				pTUser->m_fStartTime1 = TimeGet();

		}	

		break;

		

		case 2: // -> Increase/Decrease Defans 

		// 1 - Malice

		if( magicid == 111703 || magicid == 112703 ||magicid == 211703 || magicid == 212703 )

		{

			int Malice = (pTUser->m_sACAmount * 20) /100;

			pTUser->m_sACAmount = Malice;

			pTUser->m_sDuration2 = pType->sDuration;

			pTUser->m_fStartTime2 = TimeGet();}

		}

			// 2 - Torment

			else if( magicid == 111757 || magicid == 112757 || magicid == 211757 || magicid == 212757 )

		{

			int Torment = (pTUser->m_sACAmount * 20) /100;

			pTUser->m_sACAmount = Torment;

			pTUser->m_sDuration2 = pType->sDuration;

			pTUser->m_fStartTime2 = TimeGet();}

		}

			// 3 - Normal

			else

		{

			pTUser->m_sACAmount = pType->sAC;

			pTUser->m_sDuration2 = pType->sDuration;

			pTUser->m_fStartTime2 = TimeGet();

		}

		break;

		case 3: // -> Resizing char size 

		if ( magicid == 490034 )

		{

			memset( send_buff, NULL, 128); 

			send_index = 0;

			SetByte(send_buff, 3, send_index); 

			SetByte(send_buff, ABNORMAL_GIANT, send_index); // 1 - Big

			pTUser->StateChange(send_buff);					

			memset( send_buff, NULL, 128); 

			send_index = 0;

		}

			else if( magicid == 490035 )

		{

			memset( send_buff, NULL, 128); 

			send_index = 0 ;

			SetByte(send_buff, 3, send_index);

			SetByte(send_buff, ABNORMAL_DWARF, send_index);  // 2 - Small

			pTUser->StateChange(send_buff);						

			memset( send_buff, NULL, 128); 

			send_index = 0;

		}

		pTUser->m_sDuration3 = pTable->bReCastTime;

		pTUser->m_fStartTime3 = TimeGet();

		break;

		case 4: // -> Increase/Decrease Attack Damage

		if( magicid == 111760 || magicid == 112760 || magicid == 211760 || magicid == 212760 || magicid == 112770 || magicid == 212770)

		{

			pTUser->m_bAttackAmount = pTUser->m_bAttackAmount;	

			pTUser->m_sDuration4 = pTable->bReCastTime;

			pTUser->m_fStartTime4 = TimeGet();

		} 

			else

		{

			pTUser->m_bAttackAmount = pType->bAttack;

			pTUser->m_sDuration4 = pTable->bReCastTime;

			pTUser->m_fStartTime4 = TimeGet();

		}

		break;

Skill çalışma mantığı MagicType4'deki skillerin 33 ayrı tipi var bu sadece 4 tanesi 29 tane daha yazmanız lazım mantığı inceleyin



İlk case'i anlatayım :



If pType->sMaxHP != 0 Eğer kullanıcı HP'si 0 değilse yani Ölmemiş ise skill kullanabiliyor.

if(Magicid == 111654 .....) ve devamı db'deki tüm Undying skillerinin id'leri, yani eğer kullanıcı undying kullandıysa, Normalde Case 1 buffları ve debuffları belirtir ancak undy'nin db'de HP verdiği değer 0 olduğu için hesaplamak zorundayız.



int undHP = (pTUser->m_sMaxHPAmount * 60) / 100; // Kullanıcı HP'sinin %60'i

pTUser->m_sMaxHPAmount = m_sMaxHPAmount + undHP; // Kullanıcıya Kullanıcı HP'sinin %60'i kadar can ver

pTUser->m_sDuration1 = pType->sDuration; // Buff'in süresi

pTUser->m_fStartTime1 = TimeGet(); // Ne zaman başladığı

Son hali

Pastebin :
Burada bulunan gizli verileri görebilmeniz için önce yanıt vermelisiniz.
 
Administrator
Yönetici
Yönetici
Katılım
7 Mart 2012
Mesajlar
12,586
ptable diye gecenler pmagic olarak geciyor sourcede bu arada bilginize bide cogu yerde süslü parantez var yanlıslıklamı koymussun yada hazıra konmasınlar diyemi bilemicem :)
 
Kayıtlı Üye
Katılım
8 Mart 2012
Mesajlar
187
ptable diye gecenler pmagic olarak geciyor sourcede bu arada bilginize bide cogu yerde süslü parantez var yanlıslıklamı koymussun yada hazıra konmasınlar diyemi bilemicem :)



ebeyin kaşıqqq
 
Kayıtlı Üye
Katılım
8 Mart 2012
Mesajlar
345
Güzel anlatım teşekkürler, yalnız skill kodlarına göre ayırmaktansa tabloya yeni bi sütun ekleyip ona göre ayırmak daha iyi olurdu sanki



Ayırman gereken çok fazla skill yok zaten, özel durumlar var sadece. Hem veritabanı bağlantısını yormamış olursun böyle daha sağlıklı bana göre
 
Administrator
Yönetici
Yönetici
Katılım
7 Mart 2012
Mesajlar
12,586
Cevap: KO Source Skillerin Bazıları



saolasın :)
 
Üst Alt
Reklam
Reklam