Jump to content
Araştır
  • Diğer seçenekler ...
Sonuçları bul ...
Sonuçları bul ...
donz05

monster stonede bir sorun...

Önerilen Mesajlar

arkadaşlar monster stone ye filesleri ilk açtığım zaman taş ile sorunsuz girip çıkaliyorum sorun çıktıktan sonra tekrar giremiyorum şuan zaten başka dungeondasın diye bir hata veriyor nereyi kontrol etmem gerekiyor?

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı

arkadaşlar monster stone ye filesleri ilk açtığım zaman taş ile sorunsuz girip çıkaliyorum sorun çıktıktan sonra tekrar giremiyorum şuan zaten başka dungeondasın diye bir hata veriyor nereyi kontrol etmem gerekiyor?

 

 


Paketleri Kontrol Ettirmen Lazım..Paketlerden Yapma Olasılıgı Var

 

 

İletiyi paylaş


Link to post
Sitelerde Paylaş

paketlere baktım 2 source var biri çalışıyor fakat bi türlü birleştiremedim çok yere müdahale gerekiyor aslında tek satırlık bişey bile olabilir ama bu karakterin dungeondan çıktığını belirten bi satır var heralde tam olarak neresi onu bilmiyorum çalışan ile değiştirecem ama neresi bu işlemi yapıyor?

İletiyi paylaş


Link to post
Sitelerde Paylaş
Admin

Breakpoint mantığını öğrendikten sonra herşey zaten takır takır gelecek ama siz onu anlayamıyorsunuz. Mesela yapacağın sadece şundan ibaret;

1) Şuan zaten dungeondasın mesajını cliente gösteren paketi server tam nerede atıyorsa onu bulacaksın.
2) Bulduktan sonra oraya breakpoint koyacaksın.
3) Oyuna gireceksin o bahsettiğin dungeondasınız hatasını almaya çalış.
4) Hatayı aldıktan sonra zaten Visual Studio tetiklenecek ve öncesinde koydukları IF koşulunda ne sağlanmıyor onu kontrol edeceksin.

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı

daha önce yapmadığım için tam olarak bilmiyorum ama araştırıp denicem...

 


Şuan başka bir dungeondasın diyorsa, CUser sınıfında dungeon ile alakalı olan bir değişken(oda no vs.), karakter monster stone'dan çıktıktan sonra sıfırlanmamış demektir. Monster stone ile alakalı olan değişkenleri kontrol et, ve çıkış fonksiyonunda sıfırlandıklarından emin ol.

 

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı

Şuan başka bir dungeondasın diyorsa, CUser sınıfında dungeon ile alakalı olan bir değişken(oda no vs.), karakter monster stone'dan çıktıktan sonra sıfırlanmamış demektir. Monster stone ile alakalı olan değişkenleri kontrol et, ve çıkış fonksiyonunda sıfırlandıklarından emin ol.

 


void CUser::MonsterStoneProcess(uint8 bType)
{
uint16 nActiveEvent = (uint16)bType;
uint8 bResult = 0;

if (nActiveEvent == MONSTER_STONE && !isQuestEventUser())
{
g_pMain->pQuestEvent.ActiveEvent = TEMPLE_EVENT_MONSTER_STONE;

if (nActiveEvent == MONSTER_STONE)
{
if (!CheckExistItem(ITEM_MONSTER_STONE,1))
bResult = 0;
else if (GetLevel() < 35)
bResult = WarpListMinLevel;
else if (isMining())
bResult = 3;
else
bResult = 1;
}

if (bResult == 1)
{
if (!isMonsterStoneActive())
m_bMonsterStatus = true;
if (!isMonsterSummonActive())
m_aMonsterStatus = true;
if (!isMonsterStoneMonsterKill() || isMonsterStoneMonsterKill())
m_tMonsterStatus = false;

m_bMonsterStoneTime = UNIXTIME;
m_MonsterSummonTime = UNIXTIME;
RobItem(ITEM_MONSTER_STONE);
GetNation() == KARUS ? g_pMain->pQuestEvent.KarusUserCount++ : g_pMain->pQuestEvent.ElMoradUserCount++;
g_pMain->pQuestEvent.AllUserCount = (g_pMain->pQuestEvent.KarusUserCount + g_pMain->pQuestEvent.ElMoradUserCount);
g_pMain->AddQuestEventUser(this);
g_pMain->TempleQuestEventTeleportUsers(this);
}
}
else if (nActiveEvent == TEMPLE_EVENT_DISBAND && nActiveEvent == TEMPLE_EVENT_FINISH && isQuestEventUser())
{
GetNation() == KARUS ? g_pMain->pQuestEvent.KarusUserCount-- : g_pMain->pQuestEvent.ElMoradUserCount--;
g_pMain->pQuestEvent.AllUserCount = g_pMain->pQuestEvent.KarusUserCount + g_pMain->pQuestEvent.ElMoradUserCount;

if (g_pMain->pQuestEvent.LastEventRoom <= 1)
{
g_pMain->pQuestEvent.ActiveEvent = -1;
g_pMain->pQuestEvent.StartTime = (uint32)UNIXTIME;
g_pMain->pQuestEvent.m_eEventTime = 0;
g_pMain->pQuestEvent.LastEventRoom = 1;
g_pMain->pQuestEvent.AllUserCount = 0;
g_pMain->pQuestEvent.ElMoradUserCount = 0;
g_pMain->pQuestEvent.KarusUserCount = 0;
g_pMain->pQuestEvent.isActive = false;
g_pMain->pQuestEvent.isAttackable = false;
}
if (g_pMain->pQuestEvent.LastEventRoom > 1)
g_pMain->pQuestEvent.LastEventRoom--;

if (isMonsterStoneActive())
m_bMonsterStatus = false;
if (isMonsterSummonActive())
m_aMonsterStatus = false;
if (!isMonsterStoneMonsterKill() || isMonsterStoneMonsterKill())
m_tMonsterStatus = false;

g_pMain->KillNpc(GetSocketID());
m_bMonsterStoneTime = UNIXTIME;
m_MonsterSummonTime = UNIXTIME;
g_pMain->UpdateQuestEventUser(this, 0);
g_pMain->RemoveQuestEventUser(this);
}
}


abi sanırım sorun burda sana zahmet bi incelermisin sanki sonu yarım kalmış gibi geldi bana yardım edermisin...

 

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı

void CUser::MonsterStoneProcess(uint8 bType)
{
uint16 nActiveEvent = (uint16)bType;
uint8 bResult = 0;

if (nActiveEvent == MONSTER_STONE && !isQuestEventUser())
{
g_pMain->pQuestEvent.ActiveEvent = TEMPLE_EVENT_MONSTER_STONE;

if (nActiveEvent == MONSTER_STONE)
{
if (!CheckExistItem(ITEM_MONSTER_STONE,1))
bResult = 0;
else if (GetLevel() < 35)
bResult = WarpListMinLevel;
else if (isMining())
bResult = 3;
else
bResult = 1;
}

if (bResult == 1)
{
if (!isMonsterStoneActive())
m_bMonsterStatus = true;
if (!isMonsterSummonActive())
m_aMonsterStatus = true;
if (!isMonsterStoneMonsterKill() || isMonsterStoneMonsterKill())
m_tMonsterStatus = false;

m_bMonsterStoneTime = UNIXTIME;
m_MonsterSummonTime = UNIXTIME;
RobItem(ITEM_MONSTER_STONE);
GetNation() == KARUS ? g_pMain->pQuestEvent.KarusUserCount++ : g_pMain->pQuestEvent.ElMoradUserCount++;
g_pMain->pQuestEvent.AllUserCount = (g_pMain->pQuestEvent.KarusUserCount + g_pMain->pQuestEvent.ElMoradUserCount);
g_pMain->AddQuestEventUser(this);
g_pMain->TempleQuestEventTeleportUsers(this);
}
}
else if (nActiveEvent == TEMPLE_EVENT_DISBAND && nActiveEvent == TEMPLE_EVENT_FINISH && isQuestEventUser())
{
GetNation() == KARUS ? g_pMain->pQuestEvent.KarusUserCount-- : g_pMain->pQuestEvent.ElMoradUserCount--;
g_pMain->pQuestEvent.AllUserCount = g_pMain->pQuestEvent.KarusUserCount + g_pMain->pQuestEvent.ElMoradUserCount;

if (g_pMain->pQuestEvent.LastEventRoom <= 1)
{
g_pMain->pQuestEvent.ActiveEvent = -1;
g_pMain->pQuestEvent.StartTime = (uint32)UNIXTIME;
g_pMain->pQuestEvent.m_eEventTime = 0;
g_pMain->pQuestEvent.LastEventRoom = 1;
g_pMain->pQuestEvent.AllUserCount = 0;
g_pMain->pQuestEvent.ElMoradUserCount = 0;
g_pMain->pQuestEvent.KarusUserCount = 0;
g_pMain->pQuestEvent.isActive = false;
g_pMain->pQuestEvent.isAttackable = false;
}
if (g_pMain->pQuestEvent.LastEventRoom > 1)
g_pMain->pQuestEvent.LastEventRoom--;

if (isMonsterStoneActive())
m_bMonsterStatus = false;
if (isMonsterSummonActive())
m_aMonsterStatus = false;
if (!isMonsterStoneMonsterKill() || isMonsterStoneMonsterKill())
m_tMonsterStatus = false;

g_pMain->KillNpc(GetSocketID());
m_bMonsterStoneTime = UNIXTIME;
m_MonsterSummonTime = UNIXTIME;
g_pMain->UpdateQuestEventUser(this, 0);
g_pMain->RemoveQuestEventUser(this);
}
}


abi sanırım sorun burda sana zahmet bi incelermisin sanki sonu yarım kalmış gibi geldi bana yardım edermisin...

 


1 Sorun Burada Deil 2 MonsterStone Kaynak kodları Benim kimden aldını Örenebilirmiyim..

Örjinal Hali

 

 

 

 

void CUser::MonsterStoneProcess(uint8 bType)
{
	uint16 nActiveEvent = (uint16)bType;
	uint8 bResult = 0;

	if(nActiveEvent == MONSTER_STONE && !isQuestEventUser())
	{
		g_pMain->pQuestEvent.ActiveEvent = TEMPLE_EVENT_MONSTER_STONE;

		if (nActiveEvent == MONSTER_STONE)
		{
			if (!CheckExistItem(ITEM_MONSTER_STONE))
				bResult = 0;
			else if (isTrading() 
				|| isMerchanting() 
				|| isStoreOpen())
				bResult = 2;
			else if (isMining())
				bResult = 3; 	
			else
				bResult = 1;
		}

		if (bResult == 1) 
		{
			if (!isMonsterStoneActive())
				m_bMonsterStatus = true;
			if (!isMonsterSummonActive())
				m_aMonsterStatus = true;
			if (!isMonsterStoneMonsterKill() || isMonsterStoneMonsterKill())
				m_tMonsterStatus = false;

			m_bMonsterStoneTime = UNIXTIME;
			m_MonsterSummonTime = UNIXTIME;
			RobItem(ITEM_MONSTER_STONE);
			GetNation() == KARUS ? g_pMain->pQuestEvent.KarusUserCount++ :g_pMain->pQuestEvent.ElMoradUserCount++;
			g_pMain->pQuestEvent.AllUserCount = (g_pMain->pQuestEvent.KarusUserCount + g_pMain->pQuestEvent.ElMoradUserCount);
			g_pMain->AddQuestEventUser(this);
			g_pMain->TempleQuestEventTeleportUsers(this);
		}
	}
	else if (nActiveEvent == TEMPLE_EVENT_DISBAND && isQuestEventUser())
	{
		GetNation() == KARUS ? g_pMain->pQuestEvent.KarusUserCount-- : g_pMain->pQuestEvent.ElMoradUserCount--;
		g_pMain->pQuestEvent.AllUserCount = g_pMain->pQuestEvent.KarusUserCount + g_pMain->pQuestEvent.ElMoradUserCount;

		if (g_pMain->pQuestEvent.LastEventRoom <= 1)
		{
			g_pMain->pQuestEvent.ActiveEvent = -1;
			g_pMain->pQuestEvent.StartTime = (uint32)UNIXTIME;
			g_pMain->pQuestEvent.m_eEventTime = 0;
			g_pMain->pQuestEvent.LastEventRoom = 1;
			g_pMain->pQuestEvent.AllUserCount = 0;
			g_pMain->pQuestEvent.ElMoradUserCount = 0;
			g_pMain->pQuestEvent.KarusUserCount = 0;
			g_pMain->pQuestEvent.isActive = false;
			g_pMain->pQuestEvent.isAttackable = false;	
		}
		if (g_pMain->pQuestEvent.LastEventRoom > 1)
			g_pMain->pQuestEvent.LastEventRoom--;

		if (isMonsterStoneActive())
			m_bMonsterStatus = false;
		if (isMonsterSummonActive())
			m_aMonsterStatus = false;
		if (!isMonsterStoneMonsterKill() || isMonsterStoneMonsterKill())
			m_tMonsterStatus = false;

		g_pMain->KillNpc(GetSocketID());
		m_bMonsterStoneTime = UNIXTIME;
		m_MonsterSummonTime = UNIXTIME;
		m_MonsterStoneFamily = 0;
		g_pMain->UpdateQuestEventUser(this,0);
		g_pMain->RemoveQuestEventUser(this);
	}
} 

 



Hatalı Kod

 

 

else if (nActiveEvent == TEMPLE_EVENT_DISBAND && nActiveEvent == TEMPLE_EVENT_FINISH && isQuestEventUser())

İletiyi paylaş


Link to post
Sitelerde Paylaş

konuyu acmadan once forumdan bir arkadas tw istemisti yardim icin o zamanlar hic girmiyordu sagolsun ayarladi ama moblari ayarlarken girmedigini gordum bu hatali kod konusunda yardimci olurmusun?

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı

konuyu acmadan once forumdan bir arkadas tw istemisti yardim icin o zamanlar hic girmiyordu sagolsun ayarladi ama moblari ayarlarken girmedigini gordum bu hatali kod konusunda yardimci olurmusun?

 


Oldumya Orjinal Halini Değiştir dene Bakalım Ne diyecek..

 

İletiyi paylaş


Link to post
Sitelerde Paylaş

ya müdür kusura bakma bende aynısı attın sandım göz ucuyla inceledim aynısı geldi yorumu görünce değiştirdim sorun yok çok teşekkür ederim eline sağlık...

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı

Oldumya Orjinal Halini Değiştir dene Bakalım Ne diyecek..

 


selam YNG
40 lvl de 81. harita 50 lvl de 82. harita bu harita lvl kontrolu nereden yapılıyor 20 den 30 lvl kadar giriş yapmıyor 40 tan sonra normale dönüyor. sourceyi didik didik yaptım dünden beri bulamadım
-- mesaja ek olarak --
if (pUser->GetLevel() >= 35 && pUser->GetLevel() <= 50)
ZoneID = ZONE_STONE1;
else if (pUser->GetLevel() >= 51 && pUser->GetLevel() <= 70)
ZoneID = ZONE_STONE2;
else if (pUser->GetLevel() >= 71 && pUser->GetLevel() <= m_byMaxLevel)
ZoneID = ZONE_STONE3;

if (ZoneID != 0)
pUser->ZoneChange(ZoneID, 0.0f, 0.0f);

tmm buldum 35 lvl olarak ayarlanmış fakat 34 lvl ve altı ile girdiğin zaman lvl kontrolu yada hata verme gibi bir fonksiyon olmadığı için heralde yine girmiş gibi yapıyor karakter bugta kalıyor burdaki satırlara "if (pUser->GetLevel() <= 35" küçük ise ekrana düşük lvl gibi bi hata fonksiyonu yazabilirmiyiz acaba?

 

İletiyi paylaş


Link to post
Sitelerde Paylaş

×
×
  • Yeni Oluştur...