íjász tegez, avagy végtelen nyíl.

Indította T0gy3R, 2017-07-05, 21:28:47

2017-07-05, 21:28:47 Utolsó szerkesztés: 2017-07-06, 17:53:04 Szerző: T0gy3R
Sziasztok.!
megpróbáltam beépíteni a szerverembe A fórumon megtalálható íjász tegez (végtelen nyílvessző)-t.
Lefordult a game, db, indító is, sysser-ek üresek.
Mégis több hibám is van amivel nem nagyon tudok mit kezdeni.!
1.) Hiába felveszem, próbálok támadni de azt írja a karakter feje felett, hogy "szükség van egy nyílra". (Pedig a tegez, az fel van szerelve.)
2.) van az összes tegezben egy epe.
3.) Nincs lejárati ideje, holott az item_proto-ban van neki adva.
79501 tegez1 ITEM_WEAPON WEAPON_UNLIMITED_ARROW 1 ANTI_MUSA | ANTI_SURA | ANTI_MUDANG | ANTI_WOLF | ANTI_DROP | ANTI_GIVE | ANTI_MYSHOP | ANTI_SAFEBOX ITEM_STACKABLE | ITEM_SLOW_QUERY WEAR_ARROW NONE 100000 0 0 0 0 REAL_TIME 86400 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 17 4 0 25 0 0 0 0 0

4) Amint felszerelem ezzel dobálja tele a kliens sysser-t:
0705 22:53:23944 :: Cannot find item by 1499372795

Esetleg tudna valaki segíteni, hogy mi, miért történik?
Válaszod előre is köszönöm.!
További kellemes napot.!
Üdv.:T0gy3R

Másik ID-re már próbáltad rakni?

Idézetet írta: gife974 Dátum 2017-07-06, 14:40:44
Másik ID-re már próbáltad rakni?
Igen, de ez nem oldotta meg egyik problémát sem.

Esetleg próbáld meg Makrók nélkül betenni. Magyarul az #ifdef ..., és az #endif...-ot nem rakod bele, csak ami közte van.

Példa:

E helyett:
#ifdef ENABLE_NEW_ARROW_SYSTEM
WEAPON_UNLIMITED_ARROW,
#endif


Így:

WEAPON_UNLIMITED_ARROW,

Ez nem lottózó, hogy talán majd így, vagy úgy, próbáld meg ezt, majd azt.
1. PythonPlayerSkill.cpp [spoiler][/spoiler]
2. és 3. uiToolTip.py [spoiler][/spoiler]

ui.: A fegyvertípus illetve a rendszer neve eltér, arra figyelj.

Idézetet írta: gife974 Dátum 2017-07-06, 19:01:43
Esetleg próbáld meg Makrók nélkül betenni. Magyarul az #ifdef ..., és az #endif...-ot nem rakod bele, csak ami közte van.

Példa:

E helyett:
#ifdef ENABLE_NEW_ARROW_SYSTEM
WEAPON_UNLIMITED_ARROW,
#endif


Így:

WEAPON_UNLIMITED_ARROW,
Ez nem igazán megoldás, még akkor sem ha ettől esetleg működik.De köszönöm, hogy időt szántál a probléma megoldására.



Idézetet írta: [VIP]P3NG3R Dátum 2017-07-07, 10:10:10
Ez nem lottózó, hogy talán majd így, vagy úgy, próbáld meg ezt, majd azt.
1. PythonPlayerSkill.cpp [spoiler][/spoiler]
2. és 3. uiToolTip.py [spoiler][/spoiler]

ui.: A fegyvertípus illetve a rendszer neve eltér, arra figyelj.

PythonPlayerSkill.cpp teljesen uigyan az persze a szükséges dolgokat leszámítva.(Nekem más a definició megnevezése, illetve más a fegyvertípus neve. Sajnos nem ez lesz a hiba megoldása :\

Ellenben a(z) uiToolTip.py fájl már teljesen eltér. Esetleg be tudnád másolni a sajátod?
(Tudom, hogy ki lehetne írni a képről is, de az további hibákat okozhat. Tudom magamról.. just trust me)

Ui.:Köszönöm neked is, hogy időt szántál, a hibám megoldására.

Ránézésre sem ugyan az a PythonPlayerSkill.cpp fájlod, sőt még hibás is. Mivel a te felszerelt nyílvessző ellenőrzésed akkor is lefut a tegezre, ha nincs felszerelve semmi, ergó instant crash lesz belőle, mivel NULL->GetSubType() az CRASH. Talán ezen a képen jobban látszik, itt értelmezhetőbb a kód:
[spoiler][/spoiler]
Bár mondjuk ha tegez van felszerelve és akkor sem ad vissza true értéket akkor valami nem oké.
Maybe írasd ki a tárgy adatait:
[spoiler]bool CPythonPlayer::__HasEnoughArrow()
{
CItemData * pItemData;
if (CItemManager::Instance().GetItemDataPointer(GetItemIndex(TItemPos(INVENTORY, c_Equipment_Arrow)), &pItemData))
{
TraceError("CPythonPlayer::__HasEnoughArrow Arrow Vnum: %lu Arrow Type %u Arrow SubType %u\n", pItemData->GetIndex(), pItemData->GetType(), pItemData->GetSubType());
if (CItemData::ITEM_TYPE_WEAPON == pItemData->GetType())
{
if (CItemData::WEAPON_ARROW == pItemData->GetSubType())
{
return true;
}
#ifdef ENABLE_QUIVER_SYSTEM
if (CItemData::WEAPON_QUIVER == pItemData->GetSubType())
{
return true;
}
#endif
}
}


PyCallClassMemberFunc(m_ppyGameWindow, "OnCannotShotError", Py_BuildValue("(is)", GetMainCharacterIndex(), "EMPTY_ARROW"));
return false;
}
[/spoiler]

A lényeg ebből az egészből mindössze csak annyi, hogy ha ilyen HA elágazás halmazok vannak, ahol nincs blokk, nagyon oda kell figyelni, mert azon elágazás után csak az első operandus fog lefutni, kivéve ha ismét feltétel követi, mert akkor tolódik, mint ahogy most is.

uiToolTip.py fájlban nekem ez van:
if app.ENABLE_QUIVER_SYSTEM:
if itemSubType != item.WEAPON_QUIVER:
self.__AppendMetinSlotInfo(metinSlot)
else:
bHasRealtimeFlag = 0
for i in xrange(item.LIMIT_MAX_NUM):
(limitType, limitValue) = item.GetLimit(i)
if item.LIMIT_REAL_TIME == limitType:
bHasRealtimeFlag = 1

if bHasRealtimeFlag == 1:
self.AppendMallItemLastTime(metinSlot[0])
else:
self.__AppendMetinSlotInfo(metinSlot)

2017-07-14, 20:44:13 #7 Utolsó szerkesztés: 2017-07-14, 20:48:00 Szerző: T0gy3R
Idézetet írta: [VIP]P3NG3R Dátum 2017-07-08, 01:10:22
Ránézésre sem ugyan az a PythonPlayerSkill.cpp fájlod, sőt még hibás is. Mivel a te felszerelt nyílvessző ellenőrzésed akkor is lefut a tegezre, ha nincs felszerelve semmi, ergó instant crash lesz belőle, mivel NULL->GetSubType() az CRASH. Talán ezen a képen jobban látszik, itt értelmezhetőbb a kód:
[spoiler][/spoiler]
Bár mondjuk ha tegez van felszerelve és akkor sem ad vissza true értéket akkor valami nem oké.
Maybe írasd ki a tárgy adatait:
[spoiler]bool CPythonPlayer::__HasEnoughArrow()
{
CItemData * pItemData;
if (CItemManager::Instance().GetItemDataPointer(GetItemIndex(TItemPos(INVENTORY, c_Equipment_Arrow)), &pItemData))
{
TraceError("CPythonPlayer::__HasEnoughArrow Arrow Vnum: %lu Arrow Type %u Arrow SubType %u\n", pItemData->GetIndex(), pItemData->GetType(), pItemData->GetSubType());
if (CItemData::ITEM_TYPE_WEAPON == pItemData->GetType())
{
if (CItemData::WEAPON_ARROW == pItemData->GetSubType())
{
return true;
}
#ifdef ENABLE_QUIVER_SYSTEM
if (CItemData::WEAPON_QUIVER == pItemData->GetSubType())
{
return true;
}
#endif
}
}


PyCallClassMemberFunc(m_ppyGameWindow, "OnCannotShotError", Py_BuildValue("(is)", GetMainCharacterIndex(), "EMPTY_ARROW"));
return false;
}
[/spoiler]

A lényeg ebből az egészből mindössze csak annyi, hogy ha ilyen HA elágazás halmazok vannak, ahol nincs blokk, nagyon oda kell figyelni, mert azon elágazás után csak az első operandus fog lefutni, kivéve ha ismét feltétel követi, mert akkor tolódik, mint ahogy most is.

uiToolTip.py fájlban nekem ez van:
if app.ENABLE_QUIVER_SYSTEM:
if itemSubType != item.WEAPON_QUIVER:
self.__AppendMetinSlotInfo(metinSlot)
else:
bHasRealtimeFlag = 0
for i in xrange(item.LIMIT_MAX_NUM):
(limitType, limitValue) = item.GetLimit(i)
if item.LIMIT_REAL_TIME == limitType:
bHasRealtimeFlag = 1

if bHasRealtimeFlag == 1:
self.AppendMallItemLastTime(metinSlot[0])
else:
self.__AppendMetinSlotInfo(metinSlot)


Sajnos 1 hetet muszáj voltam khagyni, szóval most még azt se tudom amit eddig tudtam.. de
Lecseréltem a te általad bemásolt uitooltip.py-t, és sajnos a medve epe még mindig ott van,
illetve továbbra sincs lejárati ideje.
.


A c++-ban pedig igazad van, figyelmetlen voltam, és nem figyeltem arra, hogy az 'if'-ek-nek nincs "{", és "}", ezt javítottam, köszönöm.!

Viszont továbbra sem lehet használni nindzsa karakterrel, továbbra is ugyan az a hiba.
Amit adtál tippet, hogy irassam ki az item dolgait. Megtettem.
Ezt kapom vissza sysser.txt-ben:
0714 20:32:34318 :: CPythonPlayer::__HasEnoughArrow Arrow Vnum: 1000 Arrow Type 1 Arrow SubType 255

Szerintem nekem a Type van elcsúszva, közel lehetetlennek tartom azt, hogy 1 legyen a típusa.
Esetleg ezzel kapcsolatban valami irány, merre induljak?
[spoiler=őszinte részleg.]Hatalmas hiba tudom.. de nincs biztonsági mentésem, és nem tudom már vissza állítani. Pedig hagynám a fr...ba. Ezért erőltetem mindenképp, és mivel nem vagyok profi programozó, illetve az én tudásomat BŐVEN meghaladja ez a c++ már, így muszájból rá vagyok szorulva a forumra :\ Ne haragudjatok tényleg, de nem akarom kidodbni ezt a forrásom.. több mint fél éve dolgozok kínlódok vele[/spoiler]

Az arrow type rendben van mivel 1 = ITEM_WEAPON, de a 255 az nem kóser szerintem, mivel az a subtype és annak 9-nek kéne lenni, vagy ha nincs kutya akkor 8, vagy egyéni, végülis mind1, nekem speciel így van:


A lényeg; ez valamiért lefut neked, holott nem kéne:
self.__AppendMetinSlotInfo(metinSlot)

Lehet neked eltér valahol a quiver konstans subtype értéke szerver, kliens vagy dump_proto valamelyikében és téves értéked ad rá. Pld a kliensben a te subtype-od, mint ahogy az kiderült 255, de lehet a proto-ban 8 vagy 9 ezért a 255 != 8 vagy 9 így epét rak bele. Miért epét? Mert a socket0 értéke tartalmazza a hátralévő időt a tárgyban és azt az értéket akarja lekérdezni a kliens, hogy milyen tárgy, de mivel nem találja, úgy veszi h nem létező tárgy és berakja alap esetre az epét.

2017-07-16, 12:54:22 #9 Utolsó szerkesztés: 2017-07-16, 14:04:44 Szerző: T0gy3R
Idézetet írta: [VIP]P3NG3R Dátum 2017-07-15, 00:59:05
Az arrow type rendben van mivel 1 = ITEM_WEAPON, de a 255 az nem kóser szerintem, mivel az a subtype és annak 9-nek kéne lenni, vagy ha nincs kutya akkor 8, vagy egyéni, végülis mind1, nekem speciel így van:


A lényeg; ez valamiért lefut neked, holott nem kéne:
self.__AppendMetinSlotInfo(metinSlot)

Lehet neked eltér valahol a quiver konstans subtype értéke szerver, kliens vagy dump_proto valamelyikében és téves értéked ad rá. Pld a kliensben a te subtype-od, mint ahogy az kiderült 255, de lehet a proto-ban 8 vagy 9 ezért a 255 != 8 vagy 9 így epét rak bele. Miért epét? Mert a socket0 értéke tartalmazza a hátralévő időt a tárgyban és azt az értéket akarja lekérdezni a kliens, hogy milyen tárgy, de mivel nem találja, úgy veszi h nem létező tárgy és berakja alap esetre az epét.

Nekem ez így néz ki:

Szóval ezek szerint 7-nek kéne lennie a SubType-nak. Item_proto-ban elvileg annyi. (Mivel Dump_proto-t használok. így mind a két oldalon meg kell, hogy egyezzenek(bár már ebben sem vagyok teljesen biztos) Habár .txt-s item_proto-t használok, a navicat-ben is tárolja a tárgyakat. Ott is 7-et ír SubType-nak.
De akkor a kliens miért érzékel 255-t? :o



Saját figyelmetlenségem miatt nem volt jó, 3 dolgot rontottam el.
Az, hogy miért 255-t adott vissza végül, arra továbbra sem tudom a választ, DE..
1.)Az egyik az amit kijaívtottam a forrásban, neked köszönhetően.
2.)A dump_proto-t debug módban fordítottam legelsőnek, hogy megy-e 2013-as VS-el (megy :D ) Aztán átváltottam release mód-ra, de továbbra is a debug mappából másoltam a(z) .exe fájlt  (Valszeg azért mert a két esemény között 1 hét telt el, és nem figyeltem oda eléggé :D )
3.) Átraktam 1000-re az ID-t de az foglalt volt (tőr+). Látszik mennyit foglalkoztam eddig nindzsa karakterrel.
Így már tökéletes. Egyetlen apró hiba, hogy nem stimmel valami a .wav fájl-al. De ez már ha így marad se érdekel :D
Tényleg köszönöm a segítséget, és azt, hogy sikerült megoldani.!
Hatalmas Pacsi neked P3ng3R, majd meghívlak egyszer egy sörre :D