void operator () (LPENTITY ent)
{
if (!Valid())
return;
if (!ent->IsType(ENTITY_CHARACTER))
return;
LPCHARACTER pkChr = (LPCHARACTER) ent;
if (!pkChr->IsPC())
return;
int iDist = DISTANCE_APPROX(pkChr->GetX() - m_lX, pkChr->GetY() - m_lY);
if (iDist > 300)
return;
if (m_bEmpire && pkChr->GetEmpire() && m_bEmpire != pkChr->GetEmpire())
return;
if (pkChr->IsHack())
return;
if (!pkChr->CanHandleItem(false, true))
return...
yok malesef protoda marty sama ile karşılartırdım aynıherhangi bir syserr var mı?
evet bir sürü sistem eklendi bazıalrını ben bazılarını benden önce eklenmiş ama filesi ilk indirdidiğmiden beri hiç çalışmadı porttallar.Filese sistem eklemesi filan yaptınız mı? Belki protoları düzgün okuyamıyordur
Teşşekkürler hangi dosyaya bakmam gerekir source kısmında peki ?Portal için tanımlı olan type değeri files tarafında doğru eşleşiyor mu kontrol etmek lazım
Portalların olduğu kodlara syslog girecek kodlar ekleyin. Bu şekilde hata ayıklama yapabilirsiniz. Aşama aşama kodun belirli bölümlerine bunu yaparak kontrol edin. Bu tarz sorunları bulmanın yolu bu maalesef.Teşşekkürler hangi dosyaya bakmam gerekir source kısmında peki ?
tamam peki nerden başlamıyorum portallar hani c++ kodlarında oluyor onu bulamdım bulursam dediniz gibi yapayımPortalların olduğu kodlara syslog girecek kodlar ekleyin. Bu şekilde hata ayıklama yapabilirsiniz. Aşama aşama kodun belirli bölümlerine bunu yaparak kontrol edin. Bu tarz sorunları bulmanın yolu bu maalesef.
Channel1 syslog'da bu varPortalların olduğu kodlara syslog girecek kodlar ekleyin. Bu şekilde hata ayıklama yapabilirsiniz. Aşama aşama kodun belirli bölümlerine bunu yaparak kontrol edin. Bu tarz sorunları bulmanın yolu bu maalesef.
game/src/char.cpp dosyasında şu kodu aratın;tamam peki nerden başlamıyorum portallar hani c++ kodlarında oluyor onu bulamdım bulursam dediniz gibi yapayım
FuncCheckWarp(LPCHARACTER pkWarp)
{
m_lTargetY = 0;
m_lTargetX = 0;
m_lX = pkWarp->GetX();
m_lY = pkWarp->GetY();
m_bInvalid = false;
m_bEmpire = pkWarp->GetEmpire();
char szTmp[64];
if (3 != sscanf(pkWarp->GetName(), " %s %ld %ld ", szTmp, &m_lTargetX, &m_lTargetY))
{
if (number(1, 100) < 5)
sys_err("Warp NPC name wrong : vnum(%d) name(%s)", pkWarp->GetRaceNum(), pkWarp->GetName());
m_bInvalid = true;
return;
}
m_lTargetX *= 100;
m_lTargetY *= 100;
m_bUseWarp = true;
if (pkWarp->IsGoto())
{
LPSECTREE_MAP pkSectreeMap = SECTREE_MANAGER::instance().GetMap(pkWarp->GetMapIndex());
m_lTargetX += pkSectreeMap->m_setting.iBaseX;
m_lTargetY += pkSectreeMap->m_setting.iBaseY;
m_bUseWarp = false;
}
}
Hata ile alakalı değil buChannel1 syslog'da bu var
Jan 14 09:08:24 :: SECTREE DIFFER: nnn 146x33 was 146x34
Ninja karakterinde böyle savaşcı karakterinde sayılar farklı oluyor
dediini yeri kontrol ettim. ve aynı kod mevcut sys erroru dışarı aldım.game/src/char.cpp dosyasında şu kodu aratın;
C++:FuncCheckWarp(LPCHARACTER pkWarp) { m_lTargetY = 0; m_lTargetX = 0; m_lX = pkWarp->GetX(); m_lY = pkWarp->GetY(); m_bInvalid = false; m_bEmpire = pkWarp->GetEmpire(); char szTmp[64]; if (3 != sscanf(pkWarp->GetName(), " %s %ld %ld ", szTmp, &m_lTargetX, &m_lTargetY)) { if (number(1, 100) < 5) sys_err("Warp NPC name wrong : vnum(%d) name(%s)", pkWarp->GetRaceNum(), pkWarp->GetName()); m_bInvalid = true; return; } m_lTargetX *= 100; m_lTargetY *= 100; m_bUseWarp = true; if (pkWarp->IsGoto()) { LPSECTREE_MAP pkSectreeMap = SECTREE_MANAGER::instance().GetMap(pkWarp->GetMapIndex()); m_lTargetX += pkSectreeMap->m_setting.iBaseX; m_lTargetY += pkSectreeMap->m_setting.iBaseY; m_bUseWarp = false; } }
Oyunda herhangi portalda dururken bu kodun çalışıp çalışmadığını ya da çalıştıysa nereye kadar çalıştığını ancak kodun algoritma akış sırasına göre syslog kayıt girdirerek nerede tıkandığını bulmanız lazım. Ancak bundan önce bence protoların düzgün okunup okunmadığını kontrol edin. Işınlanma kapıları için type değeri WARP'dır ve bu 3. sıradadır. Server source tarafında CHAR_TYPE_WARP ile isimlendirilmiştir.
Direkt syserr hatası filan olsa tespiti kolay olurdu ancak bu tarz durumlarda sorunun kaynağını bulmak için aklıma söylediğim yöntemlerden başka bir şey gelmiyor. Eklenen bir sistem vs bunların çalışmasını bozmuş olabilir. Ayrıca hangi filesi kullanıyorsunuz? @SakinAdam üyemizde aynı sorunu yaşadığını belirtmiş.
Hata ile alakalı değil bu
FuncCheckWarp(LPCHARACTER pkWarp)
{
m_lTargetY = 0;
m_lTargetX = 0;
m_lX = pkWarp->GetX();
m_lY = pkWarp->GetY();
m_bInvalid = false;
m_bEmpire = pkWarp->GetEmpire();
char szTmp[64];
sys_err("Warp NPC name wrong : vnum(%d) name(%s)", pkWarp->GetRaceNum(), pkWarp->GetName());
if (3 != sscanf(pkWarp->GetName(), " %s %ld %ld ", szTmp, &m_lTargetX, &m_lTargetY))
{
if (number(1, 100) < 5)
sys_err("Warp NPC name wrong : vnum(%d) name(%s)", pkWarp->GetRaceNum(), pkWarp->GetName());
m_bInvalid = true;
return;
}
m_lTargetX *= 100;
m_lTargetY *= 100;
m_bUseWarp = true;
if (pkWarp->IsGoto())
{
LPSECTREE_MAP pkSectreeMap = SECTREE_MANAGER::instance().GetMap(pkWarp->GetMapIndex());
m_lTargetX += pkSectreeMap->m_setting.iBaseX;
m_lTargetY += pkSectreeMap->m_setting.iBaseY;
m_bUseWarp = false;
}
}
char.cpp dosyasında şu kod bloğunu verebilirmisiniz ?
void operator () (LPENTITY ent)
{
void operator () (LPENTITY ent)
{
if (!Valid())
return;
if (!ent->IsType(ENTITY_CHARACTER))
return;
LPCHARACTER pkChr = (LPCHARACTER) ent;
if (!pkChr->IsPC())
return;
int iDist = DISTANCE_APPROX(pkChr->GetX() - m_lX, pkChr->GetY() - m_lY);
if (iDist > 300)
return;
if (m_bEmpire && pkChr->GetEmpire() && m_bEmpire != pkChr->GetEmpire())
return;
if (pkChr->IsHack())
return;
if (!pkChr->CanHandleItem(false, true))
return;
#ifdef ESYA_KOPYALAMA_FIX
if ((thecore_pulse() - pkChr->itemPushTime) < PASSES_PER_SEC(10))
return;
#endif
if (m_bUseWarp)
pkChr->WarpSet(m_lTargetX, m_lTargetY);
else
{
pkChr->Show(pkChr->GetMapIndex(), m_lTargetX, m_lTargetY);
pkChr->Stop();
}
}
Sorunun Sebebi bu kod.void operator () (LPENTITY ent)
{
if (!Valid())
return;
if (!ent->IsType(ENTITY_CHARACTER))
return;
LPCHARACTER pkChr = (LPCHARACTER) ent;
if (!pkChr->IsPC())
return;
int iDist = DISTANCE_APPROX(pkChr->GetX() - m_lX, pkChr->GetY() - m_lY);
if (iDist > 300)
return;
if (m_bEmpire && pkChr->GetEmpire() && m_bEmpire != pkChr->GetEmpire())
return;
if (pkChr->IsHack())
return;
if (!pkChr->CanHandleItem(false, true))
return;
#ifdef ESYA_KOPYALAMA_FIX
if ((thecore_pulse() - pkChr->itemPushTime) < PASSES_PER_SEC(10))
return;
#endif
if (m_bUseWarp)
pkChr->WarpSet(m_lTargetX, m_lTargetY);
else
{
pkChr->Show(pkChr->GetMapIndex(), m_lTargetX, m_lTargetY);
pkChr->Stop();
}
}
#ifdef ESYA_KOPYALAMA_FIX
if ((thecore_pulse() - pkChr->itemPushTime) < PASSES_PER_SEC(10))
return;
#endif
çözümü ?Sorunun Sebebi bu kod.
C++:#ifdef ESYA_KOPYALAMA_FIX if ((thecore_pulse() - pkChr->itemPushTime) < PASSES_PER_SEC(10)) return; #endif
itemPushTime değişkenine değeri doğru atamıyorsunuz veya yanlış yerde atıyor olabilirsiniz. Ne yaptığınızdan emin değilseniz çözümü silmekçözümü ?
Işınlanmaması normalmiş çünkü kod oraya gelemiyor. @weto üyemizin söylediği çözümü uygulayabilirsiniz.Eray hocam kontol sagladım sys düşmüyor hiç
çok teşekkür ederim çözüm olarak işaretlenep konu kapatılabilir.itemPushTime değişkenine değeri doğru atamıyorsunuz veya yanlış yerde atıyor olabilirsiniz. Ne yaptığınızdan emin değilseniz çözümü silmek