KO Developers

Go Back   KO Developers > Mini KO Forum (Yardım & İstek) > Genel Yardım


Genel Yardım KO PvP Server geliştirme hakkında sorunlarınız, yaşadığınız problemler ve daha önceden çözülmüş sorunların detaylı anlatımının bulunduğu alt forum.

Cevapla
LinkBack Seçenekler Stil
Okunmamış 14 Kasım 2017, 01:47   #1 (permalink)
Bağımlı Üye

CerfiN - ait Kullanıcı Resmi (Avatar)


Üyelik tarihi: 12 Temmuz 2017
Bulunduğu yer: Antalya
Mesajlar: 283[+]
Kredi Bakiyeniz: 5.750
Ettiği teşekkür sayısı: 36
42 Mesaja 46 Kez Teşekkür Aldı

Standart NPC_SLEEPING sistemini aktifleştirme (priest uyutma skilli)

Uzun zamandır source a bakmaya fırsatım olmadı ufaktan ufaktan bakıyorum göz ucuyla. Şu çalışmayan uyutma skilleri var priestin yavaş yavaş onunla uğraşıyorum. Aklımda ufak bi mantık geliştirdim GameServer'dan AI'ye paket atarak npc lerin ve mobların durumlarını değiştirip skilli çalıştırabilirim diye. Bi kaç fonksiyon yazmayı denedim kendimce yeni bir paket oluşturup da pek bi çözüme ulaşamadım. Yapan arkadaşlar nasıl bir yol izlediklerini yazabilirler mi bende eksikleri görüp ona göre hareket edeyim.

Konu PENTAGRAM tarafından (14 Kasım 2017 Saat 02:29 ) değiştirilmiştir.
CerfiN isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Okunmamış 14 Kasım 2017, 02:26   #2 (permalink)

PENTAGRAM - ait Kullanıcı Resmi (Avatar)


Üyelik tarihi: 04 Temmuz 2017
Mesajlar: 333[+]
Ettiği teşekkür sayısı: 70
157 Mesaja 388 Kez Teşekkür Aldı
Kullanıcı Envanteri Renkli konu başlığı (aylık)Kişisel Rütbe Şekillendirme (kalıcı)İsim Şekillendirme (kalıcı)Sabit Konu (Haftalık)Server Tanıtımı Alt Forum (Aylık)

Standart Cevap: Priest Uyutma Skilli

Alıntı:
CerfiN Nickli Üyeden Alıntı Mesajı göster
Uzun zamandır source a bakmaya fırsatım olmadı ufaktan ufaktan bakıyorum göz ucuyla. Şu çalışmayan uyutma skilleri var priestin yavaş yavaş onunla uğraşıyorum. Aklımda ufak bi mantık geliştirdim GameServer'dan AI'ye paket atarak npc lerin ve mobların durumlarını değiştirip skilli çalıştırabilirim diye. Bi kaç fonksiyon yazmayı denedim kendimce yeni bir paket oluşturup da pek bi çözüme ulaşamadım. Yapan arkadaşlar nasıl bir yol izlediklerini yazabilirler mi bende eksikleri görüp ona göre hareket edeyim.
Önce yeni bir opcode tanımla. Örneğin;

#define AG_MONSTER_SET_SLEEP 0xCC

Daha sonra paket yapısını oluştur.
cpp Kod:
  1. Packet result(AG_MONSTER_SET_SLEEP);
  2. result <<uint16(pNpc->GetID()) ; // Uyutulacak/uyandırılacak npc idsi
  3. result << uint8(1); // 1 = uyuyor / 0 = uyanık
  4. g_pMain->Send2AI(result); // ai server'a gönder
AIServer paket handler fonksiyonuna yeni opcode için case ekle
cpp Kod:
  1. case AG_MONSTER_SET_SLEEP:
  2. {
  3. uint16 sTargetNpcID = pkt.read<uint16>();
  4. uint8 status = pkt.read<uint8>();
  5. CNpc * pNpc = g_AIServer->GetNpcPtr(sTargetNpcID);
  6. if(!pNpc) return;
  7. pNpc->m_NpcState = status == 1 ? NPC_SLEEPING:NPC_STANDING;
  8.  
  9. }
  10. break;

Fonksiyon adları farklılık gösterebilir, tamamen kafamda kurguladım.

Tabi, ufak bir detay daha var. NPC'nin bulunduğu regiona 'zzz' efektini göstermek amacıyla WIZ_STATE_CHANGE paketini de göndermen lazım.

Şimdiden kolay gelsin.

__________________

İmzalardaki resim ve linkleri görebilmeniz için mesaj sayınız 10 veya daha fazla olmalı. Şu anda 0 mesajınız var.

'You' are only your limit.
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] |
İmzalardaki resim ve linkleri görebilmeniz için mesaj sayınız 10 veya daha fazla olmalı. Şu anda 0 mesajınız var.
| skype | [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
PENTAGRAM isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Okunmamış 14 Kasım 2017, 02:33   #3 (permalink)
Bağımlı Üye

CerfiN - ait Kullanıcı Resmi (Avatar)


Üyelik tarihi: 12 Temmuz 2017
Bulunduğu yer: Antalya
Mesajlar: 283[+]
Kredi Bakiyeniz: 5.750
Ettiği teşekkür sayısı: 36
42 Mesaja 46 Kez Teşekkür Aldı

Standart Cevap: Priest Uyutma Skilli

Alıntı:
PENTAGRAM Nickli Üyeden Alıntı Mesajı göster
Önce yeni bir opcode tanımla. Örneğin;

#define AG_MONSTER_SET_SLEEP 0xCC

Daha sonra paket yapısını oluştur.
cpp Kod:
  1. Packet result(AG_MONSTER_SET_SLEEP);
  2. result <<uint16(pNpc->GetID()) ; // Uyutulacak/uyandırılacak npc idsi
  3. result << uint8(1); // 1 = uyuyor / 0 = uyanık
  4. g_pMain->Send2AI(result); // ai server'a gönder
AIServer paket handler fonksiyonuna yeni opcode için case ekle
cpp Kod:
  1. case AG_MONSTER_SET_SLEEP:
  2. {
  3. uint16 sTargetNpcID = pkt.read<uint16>();
  4. uint8 status = pkt.read<uint8>();
  5. CNpc * pNpc = g_AIServer->GetNpcPtr(sTargetNpcID);
  6. pNpc->m_NpcState = status == 1 ? NPC_SLEEPING:NPC_STANDING;
  7.  
  8. }
  9. break;

Fonksiyon adları farklılık gösterebilir, tamamen kafamda kurguladım.

Tabi, ufak bir detay daha var. NPC'nin bulunduğu regiona 'zzz' efektini göstermek amacıyla WIZ_STATE_CHANGE paketini de göndermen lazım.

Şimdiden kolay gelsin.
Teşekkür ederim bu bilgiler doğrultusunda çalışmaya devam ediyorum.
CerfiN isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Okunmamış 14 Kasım 2017, 16:07   #4 (permalink)
Bağımlı Üye

CerfiN - ait Kullanıcı Resmi (Avatar)


Üyelik tarihi: 12 Temmuz 2017
Bulunduğu yer: Antalya
Mesajlar: 283[+]
Kredi Bakiyeniz: 5.750
Ettiği teşekkür sayısı: 36
42 Mesaja 46 Kez Teşekkür Aldı

Standart Cevap: NPC_SLEEPING sistemini aktifleştirme (priest uyutma skilli)

ExecuteType7 fonksiyonuna şu şekilde ekledim;

Kod:
			else if (pType->bTargetChange == 2 && pSkillTarget->isNPC())
			{
				Packet result(AG_MONSTER_SET_SLEEP);
				result << uint16(pSkillTarget->GetID());
				result << uint8(1);
				g_pMain->Send_AIServer(&result);
				return true;
Ardından AI>GameSocket.cpp ye HandlePacket kısmına şu şekilde bir fonksiyon oluşturarak ekledim;

Kod:
	case AG_MONSTER_SET_SLEEP:
		StateChangeNpc(pkt);
                break;
En alta da fonksiyonu ekledim;

Kod:
void CGameSocket::StateChangeNpc(Packet & pkt)
{

	uint16 sTargetNpcID = pkt.read<uint16>();
	uint8 status = pkt.read<uint8>();
	CNpc * pNpc = g_pMain->GetNpcPtr(sTargetNpcID);
	if (pNpc)
		pNpc->m_NpcState = status == 1 ? NPC_SLEEPING:NPC_STANDING;

}
Ancak çalışmadı. Biraz kurcaladığımda ise skilli bastığım mobun bir anda yeri değişiyor. Gözden kaçırdığım kısım neresi acaba?

Konu CerfiN tarafından (14 Kasım 2017 Saat 16:17 ) değiştirilmiştir.
CerfiN isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Okunmamış 14 Kasım 2017, 16:37   #5 (permalink)

PENTAGRAM - ait Kullanıcı Resmi (Avatar)


Üyelik tarihi: 04 Temmuz 2017
Mesajlar: 333[+]
Ettiği teşekkür sayısı: 70
157 Mesaja 388 Kez Teşekkür Aldı
Kullanıcı Envanteri Renkli konu başlığı (aylık)Kişisel Rütbe Şekillendirme (kalıcı)İsim Şekillendirme (kalıcı)Sabit Konu (Haftalık)Server Tanıtımı Alt Forum (Aylık)

Standart Cevap: NPC_SLEEPING sistemini aktifleştirme (priest uyutma skilli)

Alıntı:
CerfiN Nickli Üyeden Alıntı Mesajı göster
ExecuteType7 fonksiyonuna şu şekilde ekledim;

Kod:
			else if (pType->bTargetChange == 2 && pSkillTarget->isNPC())
			{
				Packet result(AG_MONSTER_SET_SLEEP);
				result << uint16(pSkillTarget->GetID());
				result << uint8(1);
				g_pMain->Send_AIServer(&result);
				return true;
Ardından AI>GameSocket.cpp ye HandlePacket kısmına şu şekilde bir fonksiyon oluşturarak ekledim;

Kod:
	case AG_MONSTER_SET_SLEEP:
		StateChangeNpc(pkt);
                break;
En alta da fonksiyonu ekledim;

Kod:
void CGameSocket::StateChangeNpc(Packet & pkt)
{

	uint16 sTargetNpcID = pkt.read<uint16>();
	uint8 status = pkt.read<uint8>();
	CNpc * pNpc = g_pMain->GetNpcPtr(sTargetNpcID);
	if (pNpc)
		pNpc->m_NpcState = status == 1 ? NPC_SLEEPING:NPC_STANDING;

}
Ancak çalışmadı. Biraz kurcaladığımda ise skilli bastığım mobun bir anda yeri değişiyor. Gözden kaçırdığım kısım neresi acaba?
NPC_SLEEPING durumu için tanımlanmış bir fonksiyon var mı?

__________________

İmzalardaki resim ve linkleri görebilmeniz için mesaj sayınız 10 veya daha fazla olmalı. Şu anda 0 mesajınız var.

'You' are only your limit.
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] |
İmzalardaki resim ve linkleri görebilmeniz için mesaj sayınız 10 veya daha fazla olmalı. Şu anda 0 mesajınız var.
| skype | [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
PENTAGRAM isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Okunmamış 14 Kasım 2017, 17:07   #6 (permalink)
Bağımlı Üye

CerfiN - ait Kullanıcı Resmi (Avatar)


Üyelik tarihi: 12 Temmuz 2017
Bulunduğu yer: Antalya
Mesajlar: 283[+]
Kredi Bakiyeniz: 5.750
Ettiği teşekkür sayısı: 36
42 Mesaja 46 Kez Teşekkür Aldı

Standart Cevap: NPC_SLEEPING sistemini aktifleştirme (priest uyutma skilli)

Kod:
time_t CNpc::NpcSleeping()
{
	if (UNIXTIME < m_tFaintingTime) 
		return m_sStandTime;

	m_NpcState = NPC_SLEEPING;
	m_tFaintingTime = 0;

	Packet result(AG_MONSTER_SET_SLEEP);
	result << uint16(GetID()) << uint8(1);
	return false;
}
Bu fonksiyon var dı paket eklenmemişti şimdi ekledim. Tekli skilli kullandığımda mob duruyor ama geri çözülmüyor o şekilde kalıyor.
CerfiN isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Okunmamış 14 Kasım 2017, 19:15   #7 (permalink)
Normal Üye

Terry - ait Kullanıcı Resmi (Avatar)


Üyelik tarihi: 04 Temmuz 2017
Bulunduğu yer: Antalya
Mesajlar: 148[+]
Kredi Bakiyeniz: 13.491
Ettiği teşekkür sayısı: 2
4 Mesaja 6 Kez Teşekkür Aldı

Standart Cevap: NPC_SLEEPING sistemini aktifleştirme (priest uyutma skilli)

Alıntı:
CerfiN Nickli Üyeden Alıntı Mesajı göster
Kod:
time_t CNpc::NpcSleeping()
{
	if (UNIXTIME < m_tFaintingTime) 
		return m_sStandTime;

	m_NpcState = NPC_SLEEPING;
	m_tFaintingTime = 0;

	Packet result(AG_MONSTER_SET_SLEEP);
	result << uint16(GetID()) << uint8(1);
	return false;
}
Bu fonksiyon var dı paket eklenmemişti şimdi ekledim. Tekli skilli kullandığımda mob duruyor ama geri çözülmüyor o şekilde kalıyor.
Timer'e bağla type7check filan diye. süresi bitince eski standing yapsın.

__________________
.Terry.
Valentine Team.

Return of the Kings..
Terry isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Okunmamış 14 Kasım 2017, 20:52   #8 (permalink)
Bağımlı Üye

CerfiN - ait Kullanıcı Resmi (Avatar)


Üyelik tarihi: 12 Temmuz 2017
Bulunduğu yer: Antalya
Mesajlar: 283[+]
Kredi Bakiyeniz: 5.750
Ettiği teşekkür sayısı: 36
42 Mesaja 46 Kez Teşekkür Aldı

Standart Cevap: NPC_SLEEPING sistemini aktifleştirme (priest uyutma skilli)

Alıntı:
Terry Nickli Üyeden Alıntı Mesajı göster
Timer'e bağla type7check filan diye. süresi bitince eski standing yapsın.
Olabilir skill sonunda eski state'e dönmeside olabilir kurcalıyorum henüz.
CerfiN isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Okunmamış 14 Kasım 2017, 23:59   #9 (permalink)
Bağımlı Üye

CerfiN - ait Kullanıcı Resmi (Avatar)


Üyelik tarihi: 12 Temmuz 2017
Bulunduğu yer: Antalya
Mesajlar: 283[+]
Kredi Bakiyeniz: 5.750
Ettiği teşekkür sayısı: 36
42 Mesaja 46 Kez Teşekkür Aldı

Standart Cevap: NPC_SLEEPING sistemini aktifleştirme (priest uyutma skilli)

WIZ_STATE_CHANGE paketini göndericem ama içinde bir çok case var StateChangeServerDirect fonksiyonu altında. Yeni bir case oluşturacağım da efekt vermesi açısından ne yazacağım bilmiyorum kastettiğiniz bu kısım mı acaba?
@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
CerfiN isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Okunmamış 15 Kasım 2017, 00:22   #10 (permalink)

PENTAGRAM - ait Kullanıcı Resmi (Avatar)


Üyelik tarihi: 04 Temmuz 2017
Mesajlar: 333[+]
Ettiği teşekkür sayısı: 70
157 Mesaja 388 Kez Teşekkür Aldı
Kullanıcı Envanteri Renkli konu başlığı (aylık)Kişisel Rütbe Şekillendirme (kalıcı)İsim Şekillendirme (kalıcı)Sabit Konu (Haftalık)Server Tanıtımı Alt Forum (Aylık)

Standart Cevap: NPC_SLEEPING sistemini aktifleştirme (priest uyutma skilli)

Alıntı:
CerfiN Nickli Üyeden Alıntı Mesajı göster
Kod:
time_t CNpc::NpcSleeping()
{
	if (UNIXTIME < m_tFaintingTime) 
		return m_sStandTime;

	m_NpcState = NPC_SLEEPING;
	m_tFaintingTime = 0;

	Packet result(AG_MONSTER_SET_SLEEP);
	result << uint16(GetID()) << uint8(1);
	return false;
}
Bu fonksiyon var dı paket eklenmemişti şimdi ekledim. Tekli skilli kullandığımda mob duruyor ama geri çözülmüyor o şekilde kalıyor.
Paket oraya eklenmeyecek, ki gördüğün üzere AIServer içerisindesin, ve yarattığın paketi göndermemişsin dahi. Aşağıdaki blogu fonksiyondan kaldır.
cpp Kod:
  1. Packet result(AG_MONSTER_SET_SLEEP);
  2.     result << uint16(GetID()) << uint8(1);
  3.     return false;

NPC'yi tekrardan uyandırmak için yine gameserver'dan paket göndermen gerekecek. NPC saldırı aldığında, AIServer'a paket gidiyor olması lazım zaten. O paketin handler fonksiyonu içerisinde, eğer NPC durumu sleeping ise, durumu NPC_STANDING olarak ayarlamalısın.

__________________

İmzalardaki resim ve linkleri görebilmeniz için mesaj sayınız 10 veya daha fazla olmalı. Şu anda 0 mesajınız var.

'You' are only your limit.
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] |
İmzalardaki resim ve linkleri görebilmeniz için mesaj sayınız 10 veya daha fazla olmalı. Şu anda 0 mesajınız var.
| skype | [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
PENTAGRAM isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
PENTAGRAM Üyemize Teşekkür Edenler:
mjw62335 (20 Kasım 2017)
Cevapla


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 
Seçenekler
Stil

Geçerli forum için yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Warrior scream skilli her vuruşta kilitliyor byxox Çözülen Konular 11 11 Ekim 2017 21:29


Forum Site Hakkında
vBulletin® tarafından desteklenmektedir Versiyon 3.8.4
Telif hakkı ©2000 - 2018, Jelsoft Enterprises Ltd.

Sitemizdeki içerikler kopyalanmaya karşı DMCA ile korunmaktadır. DMCA.com Protection Status
İçerik sağlayıcı paylaşım sitelerinden biri olan kodevelopers.com Forum Adresimizde T.C.K 20.ci Madde ve 5651 Sayılı Kanun'un 4.cü maddesinin (2).ci fıkrasına göre TÜM ÜYELERİMİZ yaptıkları paylaşımlardan sorumludur. kodevelopers.com hakkında yapılacak tüm hukuksal Şikayetler için webmaster@kodevelopers.com Mail adresimiz üzerinden iletişime geçilmesi halinde ilgili kanunlar ve yönetmelikler çerçevesinde en geç 1 (Bir) Hafta içerisinde kodevelopers.com yönetimi olarak tarafımızdan gereken işlemler yapılacak ve Avukatımız size dönüş yapacaktır.
© 2017 KO Developers ( by NERONLINEWORLD 2011/2013 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166

Search Engine Friendly URLs by vBSEO 3.6.0