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ış 27 Ekim 2018, 10:07   #1 (permalink)
Uzaklaştırılmış

KOGamer - ait Kullanıcı Resmi (Avatar)


Üyelik tarihi: 14 Ekim 2018
Bulunduğu yer: İstanbul
Mesajlar: 33[+]
Kredi Bakiyeniz: 1.107
Ettiği teşekkür sayısı: 4
Tek Mesajına 3 Kere Teşekkür Edildi

Standart Pet Skillbar & P menü Sorunu Hakkında

Merhaba sevgili KoDevelopers Ailesi;

Sayenize Source Files mantığını kavrayabildim. Güncel Sorunuma gelicek olursak.

1 - Pet Görevini yapınca üzerine 2 adet kaul geliyor, Invertoryim full ise gameserver patlıyor.
2 - Pet çıkardığımda Skillbar ekrana gelmiyor ve P menüsü açılmıyor. (Ektra not : klavyeden alt + 1 kombinasyonu yaptığımda sağ altta logda çalışıyor gözüküyor bu çalışıyor)
3 - Pet npc sinde magic bag , oto looting kırdırabiliyorum sorunsuz bir şekilde, fakat Aynı npc üzerinden familiar , yaprak vs satın alamıyorum ve herhangi birşey satamıyorum.

Kullandığım ve düzenlediğim sourcede Kod bu şekildedir.

Kod:
#include "stdafx.h"
#include "Map.h"
#include "KnightsManager.h"
#include "KingSystem.h"
#include "MagicInstance.h"
#include "DBAgent.h"
#include <algorithm>
#include "../shared/DateTime.h"

CPet::CPet(uint16 sSid ,uint64 SerialNum): Unit(UnitPet)
{
	Initialize();

	pUser = g_pMain->GetUserPtr(sSid);
	m_Serial = SerialNum;
}

void CPet::Initialize()
{	
	Unit::Initialize();

	m_sSid = 0;
	m_sPid = 0;				// MONSTER(NPC) Picture ID
	m_sSize = 100;				// MONSTER(NPC) Size
	m_strName.clear();			// MONSTER(NPC) Name
	m_iMaxHP = 0;				// �ִ� HP
	m_iHP = 0;					// ���� HP
	m_byState = 0;			// ������ (NPC) �����̻�
	m_tNpcType = 0;				// NPC Type
	// 0 : Normal Monster
	// 1 : NPC
	// 2 : �� �Ա�,�ⱸ NPC
	// 3 : ������
	m_iSellingGroup = 0;
	//m_dwStepDelay = 0;

	m_byDirection = 0;			// npc�� ����,,
	m_iWeapon_1 = 0;
	m_iWeapon_2 = 0;
	m_NpcState = PET_ATTACK;
	m_byGateOpen = true;
	m_byObjectType = NORMAL_OBJECT;
	m_byTrapNumber = 0;
}

void CPet::HandlePacket(Packet & pkt, CUser* pUser)
{
	uint8 type, opcode;

	pkt >> type >> opcode;

	printf("WIZ_PET PACKET Type :%u OpCode :%u \n", type, opcode);

	if(type == 1)
	{
		switch (opcode)
		{
		case PET_STATE_CHANGE:
			{
				uint8 state = pkt.read<uint8>();
				printf("state %u\n",state);
				PetStateChange(state, pUser);
			}
			break;
		}
	}
	else
	{
		switch (opcode)
		{
		case 4:
			{
				uint16 test1,test2;
				uint16 ssıd , echo , echo1 ,echo2, echo3;
				pkt >> test1 >> test2 >> echo >> ssıd >> echo1 >> echo2 >> echo3;

				printf("Move %u %u %u %u %u %u %u\n",test1, test2, echo, echo1, echo2, echo3, ssıd);//, speed, echo);
				
				if (pUser == nullptr) return;

				CPet * pPet = g_pMain->GetPetPtr(pUser->GetSocketID() + INVALID_BAND);
				
				if (pPet == nullptr 
					|| pPet->isDead())
					return;

				CNpc * pNpc = g_pMain->GetNpcPtr(ssıd);

				pPet->MoveResult(echo1, echo2, echo3, 28.0f);
			}
		case PET_MAGIC_PROCESS:
			MagicProcess(pkt, pUser);
			break;
		}
	}
}

void CPet::PetStateChange(uint8 state, CUser *pUser)
{
	Packet result(WIZ_PET, uint8(1));
	CPet* pPet = g_pMain->GetPetPtr(pUser->GetSocketID() +  INVALID_BAND);

	if (pPet == nullptr)
		return;

	pPet->m_NpcState = state;
	pPet->m_byState = state;

	result << uint8(PET_STATE_CHANGE) << pPet->m_NpcState << uint16(1);
	pUser->Send(&result);
}

void CPet::MagicProcess(Packet & pkt, CUser *pUser)
{
	if (g_pMain->m_IsMagicTableInUpdateProcess)
		return;

	MagicInstance instance;
	instance.bOpcode = MAGIC_EFFECTING;
	pkt >> instance.nSkillID;

	printf("Pet Attığı Skill ID %u\n", instance.nSkillID);

	instance.pSkill = g_pMain->m_MagictableArray.GetData(instance.nSkillID);
	if (instance.pSkill == nullptr)
	{
		if (pUser != nullptr)
			printf("[%s] Used skill %d but it does not exist.\n", pUser->GetName().c_str(), instance.nSkillID);

		if (pUser != nullptr && pUser->isPlayer() && instance.nSkillID < 0)
		{
			DateTime time;
			g_pMain->SendFormattedNotice("%s is currently disconnect for skill hack.",Nation::ALL, pUser->GetName().c_str());
			g_pMain->WriteCheatLogFile(string_format("[ SkillHack - %d:%d:%d ] %s Disconnected for SkillHack.\n", time.GetHour(),time.GetMinute(),time.GetSecond(), pUser->GetName().c_str()));
			TO_USER(pUser)->Disconnect();
		}

		return;
	}

	pkt >> instance.sCasterID >> instance.sTargetID
		>> instance.sData[0] >> instance.sData[1] >> instance.sData[2] >> instance.sData[3]
	>> instance.sData[4] >> instance.sData[5] >> instance.sData[6];

	// Prevent users from faking other players or NPCs.
	if (pUser != nullptr // if it's nullptr, it's from AI.
		&& (instance.sCasterID >= NPC_BAND && instance.sCasterID < INVALID_BAND))
		return;

	if(instance.sCasterID == instance.sTargetID)
		instance.sCasterID = instance.sTargetID += INVALID_BAND;
	else if (instance.sCasterID >= USER_BAND && instance.sCasterID < NPC_BAND)
		instance.sCasterID += INVALID_BAND;

	instance.bIsRecastingSavedMagic = false;
	instance.Run();
}

bool CPet::LoadPetData()
{
	if(pUser == nullptr )
		return false;

	return g_DBAgent.LoadPetData(m_Serial, this);
}

void CPet::SendPetMyInfo()
{
	if(!LoadPetData())
		return;

	Packet result(WIZ_PET, uint8(1));

	m_NpcState = m_NpcState;
	m_sNid = pUser->GetSocketID() + INVALID_BAND;
	m_sSize = 80;
	m_iWeapon_1 = m_iWeapon_2 = 0;
	m_bZone = pUser->GetZoneID();
	m_bNation = pUser->GetNation();
	m_strUserName = pUser->GetName();
	m_bLevel = m_bLevel;
	m_curx = pUser->m_curx;
	m_curz = pUser->m_curz;
	m_cury = pUser->m_cury;
	m_tNpcType = 15;
	m_iSellingGroup = 0 ;
	m_byGateOpen = 0;
	m_fTotalHitrate = 0;
	m_fTotalEvasionrate  = 0;
	m_sTotalAc = 0;
	m_sTotalHit = 0;
	m_byObjectType = 0;
	m_byTrapNumber = 0;
	m_bMonster = true;
	m_byDirection = 45;
	m_oSocketID = pUser->GetSocketID() + INVALID_BAND;
	m_bEventRoom = pUser->m_bEventRoom;
	m_sFireR = m_sColdR = m_sLightningR = 0;
	m_sMagicR = m_sDiseaseR = m_sPoisonR = 0;

	m_iHP = m_iMaxHP = int(25 * m_bLevel * 1.5);
	m_iMP = m_iMaxMP = int(25 * m_bLevel * 1.5);

	m_pMap = g_pMain->GetZoneByID(pUser->GetZoneID());

	if (GetMap() == nullptr)
		return;
	
	if(!g_pMain->m_UserPetArray.PutData(GetID(),this))
	{
		printf("Put Failed");
		return;
	}

	SendInOut(INOUT_IN, GetX(), GetZ(), GetY());

	result.DByte();
	result << uint8(5) << uint8(1) << uint16(1)
		<< uint32(GetID()) << GetName()
		<< uint8(m_sClass) << uint8(m_bLevel) << uint16(m_sExp)
		<< uint16(m_iMaxHP) << uint16(m_iHP) 
		<< uint16(m_iMaxMP) << uint16(m_iMP) 
		<< m_sSatisfaction
		<< m_sTotalHit << m_sTotalAc // Attaack + Def 
		<< uint8(m_sFireR) << uint8(m_sColdR) << uint8(m_sLightningR)
		<< uint8(m_sMagicR) << uint8(m_sDiseaseR) << uint8(m_sPoisonR); /* Flame- Glacier-Lightning-Spell-Curse-Poison*/
			
	for (int i = 0; i < PET_INVENTORY_TOTAL; i++)
	{
		_ITEM_DATA *pItem =	GetItem(i);

		if (pItem == nullptr)
			continue;

		result << pItem->nNum << pItem->sDuration << pItem->sCount << pItem->nSerialNum << pItem->nExpirationTime;
	}

	pUser->Send(&result);

	result.clear();
	result.Initialize(WIZ_OBJECT_EVENT);
	result << uint8(0x0B) << uint8(0x01) << GetID() << uint32(30403);
	    
	SendToRegion(&result);
	printf("%u\n",GetID());
}

/**
* @brief	Constructs and sends an in/out packet for the NPC.
*
* @param	bType	The type (in or out).
* @param	fX   	The x coordinate.
* @param	fZ   	The z coordinate.
* @param	fY   	The y coordinate.
*/
void CPet::SendInOut(uint8 bType, float fX, float fZ, float fY)
{
	if (GetRegion() == nullptr)
	{
		SetRegion(GetNewRegionX(), GetNewRegionZ());
		if (GetRegion() == nullptr)
			return;
	}

	if (bType == INOUT_OUT)
	{
		GetRegion()->Remove(this);
	}
	else	
	{
		GetRegion()->Add(this);
		SetPosition(fX, fY, fZ);
	}

	Packet result;
	GetInOut(result, bType);
	SendToRegion(&result);
}

void CPet::GetNpcInfo(Packet & pkt)
{
	pkt.SByte();
	pkt << m_oSocketID << uint8(isMonster() ? 1 : 2) // Monster = 1, NPC = 2 (need to use a better flag)
		<< m_sPid <<  uint32(0)
		<< m_tNpcType << m_iSellingGroup << m_sSize
		<< m_iWeapon_1 << m_iWeapon_2
		<< m_strUserName << GetName()
		<< GetNation() << m_bLevel
		<< GetSPosX() <<  GetSPosZ() <<  GetSPosY()
		<< uint32(0)
		<< m_byObjectType
		<< uint16(0) << uint16(0) // unknown
		<< int16(m_byDirection);
}

void CPet::GetInOut(Packet & result, uint8 bType)
{
	result.Initialize(WIZ_NPC_INOUT);
	result << bType << GetID();
	if (bType != INOUT_OUT)
		GetNpcInfo(result);

}

void CPet::OnDeath(Unit *pKiller)
{
	if (m_NpcState == NPC_DEAD)
		return;

	ASSERT(GetMap() != nullptr);
	ASSERT(GetRegion() != nullptr);
	
	m_NpcState = NPC_DEAD;
	m_sACPercent = 100;

	Unit::OnDeath(pKiller);

	InitType3();
	InitType4();

	if (GetRegion() != nullptr)
		GetRegion()->Remove(TO_PET(this));

	SetRegion();

	if(g_pMain->GetPetPtr(pUser->GetSocketID() + INVALID_BAND))
		g_pMain->m_UserPetArray.DeleteData(pUser->GetSocketID() + INVALID_BAND);
}

/**
* @brief	Adds the Pet to the region.
*
* @param	new_region_x	The new region x coordinate.
* @param	new_region_z	The new region z coordinate.
*/
void CPet::AddToRegion(int16 new_region_x, int16 new_region_z)
{
	GetRegion()->Remove(this);
	SetRegion(new_region_x, new_region_z);
	GetRegion()->Add(this);
}

void CPet::MoveResult(float fPosX, float fPosY, float fPosZ, float fSpeed)
{
	Packet result(WIZ_NPC_MOVE, uint8(1));

	SetPosition(fPosX, fPosY, fPosZ);
	RegisterRegion();

	result << GetID() << GetSPosX() << GetSPosZ() << GetSPosY() << uint16(fSpeed * 5);
	SendToRegion(&result);
}

/**
* @brief	Changes an NPC's hitpoints.
*
* @param	amount   	The amount to adjust the HP by.
* @param	pAttacker	The attacker.
* @param	bSendToAI	true to update the AI server.
*/
void CPet::HpChange(int amount, Unit *pAttacker /*= nullptr*/, bool bSendToAI /*= true*/) 
{
	uint16 tid = (pAttacker != nullptr ? pAttacker->GetID() : -1);

	// Implement damage/HP cap.
	if (amount < -MAX_DAMAGE)
		amount = -MAX_DAMAGE;
	else if (amount > MAX_DAMAGE)
		amount = MAX_DAMAGE;

	// Glorious copypasta.
	if (amount < 0 && -amount > m_iHP)
		m_iHP = 0;
	else if (amount >= 0 && m_iHP + amount > m_iMaxHP)
		m_iHP = m_iMaxHP;
	else
		m_iHP += amount;

	// NOTE: This will handle the death notification/looting.
	if (bSendToAI)
		//SendHpChangeToAI(tid, amount);

	if (pAttacker != nullptr
		&& pAttacker->isPlayer())
		TO_USER(pAttacker)->SendTargetHP(0, GetID(), amount);

	if (m_iHP == 0)
		OnDeath(pAttacker);
}

void CPet::MSpChange(int amount)
{

}

void CPet::SendTargetHP( uint8 echo, int tid, int damage )
{
	int hp = 0, maxhp = 0;

	Unit *pTarget = nullptr;
	
	if (tid >= USER_BAND && tid < NPC_BAND) 
	{
		CUser *pUser = g_pMain->GetUserPtr(tid);
		if (pUser == nullptr) 
			return;

		hp = pUser->m_sHp;	
		maxhp = pUser->m_iMaxHp;
		pTarget = pUser;
	}
	else if (tid >= NPC_BAND && tid < INVALID_BAND)
	{
		if (g_pMain->m_bPointCheckFlag == false) 
			return;

		CNpc *pNpc = g_pMain->GetNpcPtr(tid);
		if (pNpc == nullptr)
			return;

		hp = pNpc->m_iHP;	
		maxhp = pNpc->m_iMaxHP;
		pTarget = pNpc;
	}
	else
	{
		CPet * nPet = g_pMain->GetPetPtr(tid);

		if (nPet == nullptr)
			return;

		hp = nPet->m_iHP;	
		maxhp = nPet->m_iMaxHP;
		pTarget = nPet;
	}

	printf("Target ID %u %u %u %s\n", pTarget->GetID(), TO_USER(pTarget)->GetID(), TO_NPC(pTarget)->GetProtoID(), pTarget->GetName().c_str());
	CUser * pUser = g_pMain->GetUserPtr(GetID() - INVALID_BAND);
	Packet result(WIZ_TARGET_HP);
	result << uint16(tid) << echo << maxhp << hp << uint16(damage);
	pUser->Send(&result);
}
Bu kodda bir hatamı var? var ise düzeltilmiş halini bana verirmisiniz? Umarım anlatmak istediğimi detaylıca anlatabilmişimdir. Eğer tam olarak kendimi ifade edemediğimi düşünüyorsanız lütfen skype: @Saitalierisek üzerinden iletişime geçebiliriz. (konuya çözümü yazmam şartıyla

@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
KOGamer isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Okunmamış 28 Ekim 2018, 02:31   #2 (permalink)
Çalışkan Üye

Mountain - ait Kullanıcı Resmi (Avatar)


Üyelik tarihi: 04 Temmuz 2017
Mesajlar: 225[+]
Kredi Bakiyeniz: 7.703
Ettiği teşekkür sayısı: 24
24 Mesaja 42 Kez Teşekkür Aldı

Standart Cevap: Pet Skillbar & P menü Sorunu Hakkında

Npc'den item satın alamıyorsan eğer ItemTrade voidini incelemelisin orada bazı kısıtlamalar vardır o npc den item çekilmesine izin vermelisin.
Mountain isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Okunmamış 28 Ekim 2018, 16:06   #3 (permalink)
Uzaklaştırılmış

KOGamer - ait Kullanıcı Resmi (Avatar)


Üyelik tarihi: 14 Ekim 2018
Bulunduğu yer: İstanbul
Mesajlar: 33[+]
Kredi Bakiyeniz: 1.107
Ettiği teşekkür sayısı: 4
Tek Mesajına 3 Kere Teşekkür Edildi

Standart Cevap: Pet Skillbar & P menü Sorunu Hakkında

Alıntı:
Mountain Nickli Üyeden Alıntı Mesajı göster
Npc'den item satın alamıyorsan eğer ItemTrade voidini incelemelisin orada bazı kısıtlamalar vardır o npc den item çekilmesine izin vermelisin.
Bunu inceleyeceğim. Düzeltebildiğim takdirde buradan bilgi vereceğim. Teşekkür ederim.
KOGamer isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
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
1298+ Npc menü skin Fugal Skin Paylaşımları 22 23 Şubat 2019 23:39
Exit Menü [1298] MOMENTUM Skin Paylaşımları 12 09 Ocak 2019 01:47
Diğer -1 Hakkında bugraozcan Genel Yardım 0 21 Mayıs 2018 16:14
Diğer PUS Hakkında infiltrate Genel Yardım 2 17 Ocak 2018 21:58
Database Evt ler hakkında bugraozcan Genel Yardım 1 10 Ocak 2018 15:28


Forum Site Hakkında
vBulletin® tarafından desteklenmektedir Versiyon 3.8.4
Telif hakkı ©2000 - 2019, 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 admin@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 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181

Search Engine Friendly URLs by vBSEO 3.6.0