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

Nationel Transfer there is no character available for transfer hatası

Önerilen Mesajlar

Merhaba arkadaşlar resimdede görüldüğü gibi ırk değişimi ekranında hata alıyorum sadece bir yol göstermenizi temenni ederim teşekkürler....

G965v7.jpg

İletiyi paylaş


Link to post
Sitelerde Paylaş

Transfer edilebilecek karakter yok diyor.Eğer ortalıkdaki sourceleri kullanıyorsan büyük ihtimal fonksiyonun imzası şu şekildedir.

void CUser::NationChange(Packet & pkt)

Birde büyük ihtimal SQL SP'si çağırıyordur arkaplanda.
onunda imzası şu şekildedir.
int8 CDBAgent::NationTransfer(std::string strAccountID, uint16 Race1, uint16 Race2, uint16 Race3, uint16 Race4)


if (!dbCommand->Execute(string_format(_T("{? = CALL ACCOUNT_NATION_TRANSFER(?,%d,%d,%d,%d)}"),Race1,Race2,Race3,Race4)))
ReportSQLError(m_GameDB->GetError());


Bu kısımdaki ACCOUNT_NATION_TRANSFER Stored Procedure'u ile
void CUser::NationChange(Packet & pkt)

Bu fonksiyonu görmeden bir şey demek zor

İletiyi paylaş


Link to post
Sitelerde Paylaş

paketler aynen bahsettiğin gibi kontrolü için tam olarak nereye bakmam lazım pekii?
-- mesaja ek olarak --
bu bağlamda Presedür ile source arasındaki kodlamadamı bir sıkıntı vardır ?
-- mesaja ek olarak --
void CUser::NationChange(Packet & pkt) aşağıdaki gibi...

Gizli İçerik

    Gizli içeriği görmek için bu konuya bir mesaj yazın.

İletiyi paylaş


Link to post
Sitelerde Paylaş
uint8 nRet = g_DBAgent.NationTransfer(GetAccountName(),nRace[0],nRace[1],nRace[2],nRace[3]);


büyük ihtimal bu functionun içinde çağırılan sp ACCOUNT_NATION_TRANSFER nRet olarak 1'den farklı bir değer döndürüp

if (nRet != 1)
{
result Send(&result);
return;
}

Buraya sokuyor işlemi.Database içerisindeki ACCOUNT_NATION_TRANSFER'e bakman gerek.Eğer programlama bilgin varsa
uint8 nRet = g_DBAgent.NationTransfer(GetAccountName(),nRace[0],nRace[1],nRace[2],nRace[3]);

bu kısıma breakpoint koyarak,step into ile program akışını takip ederek sorunu çözebilirsin.

İletiyi paylaş


Link to post
Sitelerde Paylaş

brek point koyduktan sonra bu kodları geldi soru işaretlerinden anladığım kadarı ile kullanıcı adınımı çekmiyor....

Gizli İçerik

    Gizli içeriği görmek için bu konuya bir mesaj yazın.

-- mesaja ek olarak --
yok yanlış anlamışım o bölüme geldikten sonra gemserver durdu ''there is no character available for transfer'' hatası gelmedi...

İletiyi paylaş


Link to post
Sitelerde Paylaş

Gizli İçerik

    Gizli içeriği görmek için bu konuya bir mesaj yazın.



Her döndüğünde rakamlarda değişekte acaba sorun bundan mı kaynaklanmakta?

İletiyi paylaş


Link to post
Sitelerde Paylaş

Database error: [ ODBC Error - 11.5.2018 22:22:36 ] ] Source: {? = CALL ACCOUNT_NATION_TRANSFER(?,11,0,0,0)} Error: [Microsoft][ODBC SQL Server Driver]

Procedure or function ACCOUNT_NATION_TRANSFER has too many arguments specified. Description: Failed to execute statement.
SELECT Race FROM USERDATA WHERE strUserID = ?


gelen bu hata ile ilgili ACCOUNT_NATION_TRANSFER prosedüründen tam olarak nereye bakmam gerekiyor... Yardım lütfen....

İletiyi paylaş


Link to post
Sitelerde Paylaş
Admin

Fonksiyon içerisini komple yorum satırı olarak değiştir ve ardından içerisine sadece denemek için paket gönderme işlemini bırak bunu da şu şekilde yapıyorsun.


void CUser::NationChange(Packet & pkt)
{
Packet result(WIZ_NATION_CHANGE);
result Send(&result);
}


Yukarıdaki bahsettiğim yere breakpoint koyuyorsun daha sonrasında oyuna giriyorsun.
Nation Change penceresini açıyorsun işlemi yapmaya başlıyorsun.
Client paketi Servera attığında senin bu breakpointin tetiklenecek ardından 0x01 diye belirttiğim yeri değiştirerek böyle denemeye devam ediyorsun.
Oyundan çıkmadan breakpoint tetiklediği anda yapabilirsin değiştirme işlemini ve senin bahsettiğin hata hangi değer de çıkıyor buna bakıyorsun.

Örnek verelim ki 0x05 değerinde çıktı.
Yorum satırı yaptığın fonksiyon içerisinden aynı paket nereye denk geliyor bakıyorsun eğer ki yoksa prosedürden dönen bir 0x05 değeri vardır ona bakıyorsun ve orada ne yanlışlık var anlıyorsun. Bu kadar basit.

İletiyi paylaş


Link to post
Sitelerde Paylaş
@ OzkanOzdemir Hocam dediğin gibi;

Gizli İçerik

    Gizli içeriği görmek için bu konuya bir mesaj yazın.


0x06) olduğunu anladım

kullanmış olduğum National pkt. buna tekabül eden yerler var... ancak nereyer nasıl bakacağımı tam olarak bilmiyorum..

Gizli İçerik

    Gizli içeriği görmek için bu konuya bir mesaj yazın.



şimdi burada nasıl bir yol izlemem gerekiyor. sen yol göster ben giderim...

İletiyi paylaş


Link to post
Sitelerde Paylaş
Admin
Alıntı
@ OzkanOzdemir Hocam dediğin gibi;
*** hidden content ***

0x06) olduğunu anladım

kullanmış olduğum National pkt. buna tekabül eden yerler var... ancak nereyer nasıl bakacağımı tam olarak bilmiyorum..

*** hidden content ***


şimdi burada nasıl bir yol izlemem gerekiyor. sen yol göster ben giderim...


Breakpoint biliyor musun bilmiyorsan araştır.

İletiyi paylaş


Link to post
Sitelerde Paylaş
@ OzkanOzdemir Hocam paket içerisinde kod sütunlarında eşdeğer gelen alanlara breakpoint koyarak hatanın nereden kaynaklandığını buldum... Lakin hata sonrası hangi yolu izlemeliyim.

Gizli İçerik

    Gizli içeriği görmek için bu konuya bir mesaj yazın.



Kusura bakma seninde zamanını alıyorum, bende öğrenmeye çalışıyorum...

İletiyi paylaş


Link to post
Sitelerde Paylaş
Admin
Alıntı
@ OzkanOzdemir Hocam paket içerisinde kod sütunlarında eşdeğer gelen alanlara breakpoint koyarak hatanın nereden kaynaklandığını buldum... Lakin hata sonrası hangi yolu izlemeliyim.

*** hidden content ***


Kusura bakma seninde zamanını alıyorum, bende öğrenmeye çalışıyorum...


nRet değişkenine nerede değer veriliyor o fonksiyonda onu söyle.

İletiyi paylaş


Link to post
Sitelerde Paylaş
Admin
Alıntı
@ OzkanOzdemir özkan hocam değeri bu fonksiyondan alıyor...

*** hidden content ***


NationTransfer fonksiyonu içerisinde eğer ki prosedür çalışmıyorsa veya veritabanı bağlantısı yoksa gibi olaylarda default döndürdüğü bir değer vardır.
Bu değer senin aldığın değer ile aynı mı diye bakacaksın.

Eğer ki aynı değilse NationTransfer fonksiyonu içerisinde çağırdığı prosedürü SQL üzerinde açacaksın kontrol edeceksin.
Neresinde RETURN 6 yada neresinde bRet 6 değeri alıyorsa orada sorun var demektir.

İletiyi paylaş


Link to post
Sitelerde Paylaş
Misafir
Bu konu kapalıdır ama konuya cevap yazmaya yetkiniz var görünüyor.

×
×
  • Yeni Oluştur...