Transzmutáció system

Indította Meli, 2017-10-05, 15:23:44

2017-10-05, 15:23:44 Utolsó szerkesztés: 2017-10-05, 15:31:16 Szerző: Meli
Sziasztok! Betettem ezt a rendszert és azt a hibát tapasztalom, hogy a fegyvereket lehet alakítani viszont a vérteket nem. Van pánt rendszerem is.

cmd_general.cpp

#ifdef __CHANGE_LOOK_SYSTEM__
ACMD(do_transmutate)
{
char arg1[256];
char arg2[256];
two_arguments (argument, arg1, sizeof(arg1), arg2, sizeof(arg2));

BYTE slot0 = atoi(arg1);
BYTE slot1 = atoi(arg2);

LPITEM item0 = ch->GetInventoryItem(slot0);
LPITEM item1 = ch->GetInventoryItem(slot1);

if (!item0 || !item1 || !ch->SameItem(item0, item1))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("CHANGE_LOOK_NEED_ITEM."));
return;
}
else
{
if ((item0->IsArmor() && item1->IsArmor()) || (item0->IsWeapon() && item1->IsWeapon()))
{
if (ch->GetGold() >= 50000000)
{
item0->SetItemLook(item1->GetVnum());
ITEM_MANAGER::instance().RemoveItem(item1, "CHANGE_LOOK_SECOND_ITEM_DESTROY");
ch->PointChange(POINT_GOLD, -50000000);
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("CHANGE_LOOK_ITEM_REMOVE"));
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("CHANGE_LOOK_GOLD_REMOVE"));
}
else
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("CHANGE_LOOK_NOT_ENOUGH_MONEY"));
}
}
else
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("CHANGE_LOOK_WRONG_TYPES"));
}
}
}
#endif

Ingameban ezt kapom chat ablakban:
CHANGE_LOOK_NEED_ITEM

Leltárban van az item.

Syserr nincs sehol (Server/klines)


Innen ered a hiba.
Esetleg valaki valami ötlet?

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”

!ch->SameItem(item0, item1)
Ezt nézd át.

Idézetet írta: 5310pati Dátum 2017-10-05, 16:35:36
!ch->SameItem(item0, item1)
Ezt nézd át.

Mégis mit keressek?
char_item.cpp


bool CHARACTER::SameItem(LPITEM item1, LPITEM item2)
{
TItemTable const* table1 = item1->GetProto();
TItemTable const* table2 = item2->GetProto();

bool a[2] = {IsAntiFlag(ITEM_ANTIFLAG_WARRIOR, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_WARRIOR, table2->dwAntiFlags)};
bool b[2] = {IsAntiFlag(ITEM_ANTIFLAG_ASSASSIN, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_ASSASSIN, table2->dwAntiFlags)};
bool c[2] = {IsAntiFlag(ITEM_ANTIFLAG_SURA, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_SURA, table2->dwAntiFlags)};
bool d[2] = {IsAntiFlag(ITEM_ANTIFLAG_SHAMAN, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_SHAMAN, table2->dwAntiFlags)};

if (ExcludeItems(item1->GetVnum()) || ExcludeItems(item2->GetVnum()))
return false;

if (item1->GetType() == ITEM_WEAPON && item2->GetType() == ITEM_WEAPON && item1->GetSubType() == item2->GetSubType()
#ifdef __QUIVER_SYSTEM__
&& item1->GetSubType() != WEAPON_ARROW && item2->GetSubType() != WEAPON_ARROW && item1->GetSubType() != WEAPON_QUIVER && item2->GetSubType() != WEAPON_QUIVER
#else
&& item1->GetSubType() != WEAPON_ARROW && item2->GetSubType() != WEAPON_ARROW
#endif
&& table1->bSize == table2->bSize
&& ((!a[1] && !a[2])
|| (!b[1] && !b[2])
|| (!c[1] && !c[2])
|| (!d[1] && !d[2])
))
return true;
else if (item1->GetType() == ITEM_ARMOR && item2->GetType() == ITEM_ARMOR && item1->GetSubType() == ARMOR_BODY && ARMOR_BODY == item2->GetSubType()
&& table1->bSize == table2->bSize
&& ((!a[1] && !a[2])
|| (!b[1] && !b[2])
|| (!c[1] && !c[2])
|| (!d[1] && !d[2])
))
return true;
else
return false;
}
#endif

Ezt találtam, ebben lehetne esetleg a hiba?

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”

H-h mit? Ami a hibád. Miért ad vissza hamis értéket 2 vért esetén.

Idézetet írta: 5310pati Dátum 2017-10-05, 17:20:39
H-h mit? Ami a hibád. Miért ad vissza hamis értéket 2 vért esetén.

Hm nem értem, miért kap vissza hamis értéket vért esetén.

else if (item1->GetType() == ITEM_ARMOR && item2->GetType() == ITEM_ARMOR && item1->GetSubType() == ARMOR_BODY && ARMOR_BODY == item2->GetSubType()
&& table1->bSize == table2->bSize
&& ((!a[1] && !a[2])
|| (!b[1] && !b[2])
|| (!c[1] && !c[2])
|| (!d[1] && !d[2])
))
return true;
else
return false;


Itt tér vissza hamis értékkel, de miért?

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”

Én beraktam ezt a rendszert és nincs vele semmi baj.

Idézetet írta: Red Dátum 2017-10-05, 20:22:17
Én beraktam ezt a rendszert és nincs vele semmi baj.

hm. Nálam akkor mégis mi a gond?

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”

Nem tudom.  Nekem még a pántokra is sikerült kiterjeszteni.


Idézetet írta: Red Dátum 2017-10-05, 20:41:06
Nem tudom.  Nekem még a pántokra is sikerült kiterjeszteni.



Hm esetleg tudnál segíteni?
Lehet kihagyok valamit vagy nem tudom.

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”

2017-10-05, 20:56:46 #9 Utolsó szerkesztés: 2017-10-05, 21:04:53 Szerző: Red
.

2017-10-05, 20:57:16 #10 Utolsó szerkesztés: 2017-10-05, 20:59:12 Szerző: Distraught
Idézetet írta: Meli Dátum 2017-10-05, 17:17:30
Idézetet írta: 5310pati Dátum 2017-10-05, 16:35:36
!ch->SameItem(item0, item1)
Ezt nézd át.

Mégis mit keressek?
char_item.cpp


bool CHARACTER::SameItem(LPITEM item1, LPITEM item2)
{
TItemTable const* table1 = item1->GetProto();
TItemTable const* table2 = item2->GetProto();

bool a[2] = {IsAntiFlag(ITEM_ANTIFLAG_WARRIOR, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_WARRIOR, table2->dwAntiFlags)};
bool b[2] = {IsAntiFlag(ITEM_ANTIFLAG_ASSASSIN, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_ASSASSIN, table2->dwAntiFlags)};
bool c[2] = {IsAntiFlag(ITEM_ANTIFLAG_SURA, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_SURA, table2->dwAntiFlags)};
bool d[2] = {IsAntiFlag(ITEM_ANTIFLAG_SHAMAN, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_SHAMAN, table2->dwAntiFlags)};

if (ExcludeItems(item1->GetVnum()) || ExcludeItems(item2->GetVnum()))
return false;

if (item1->GetType() == ITEM_WEAPON && item2->GetType() == ITEM_WEAPON && item1->GetSubType() == item2->GetSubType()
#ifdef __QUIVER_SYSTEM__
&& item1->GetSubType() != WEAPON_ARROW && item2->GetSubType() != WEAPON_ARROW && item1->GetSubType() != WEAPON_QUIVER && item2->GetSubType() != WEAPON_QUIVER
#else
&& item1->GetSubType() != WEAPON_ARROW && item2->GetSubType() != WEAPON_ARROW
#endif
&& table1->bSize == table2->bSize
&& ((!a[1] && !a[2])
|| (!b[1] && !b[2])
|| (!c[1] && !c[2])
|| (!d[1] && !d[2])
))
return true;
else if (item1->GetType() == ITEM_ARMOR && item2->GetType() == ITEM_ARMOR && item1->GetSubType() == ARMOR_BODY && ARMOR_BODY == item2->GetSubType()
&& table1->bSize == table2->bSize
&& ((!a[1] && !a[2])
|| (!b[1] && !b[2])
|| (!c[1] && !c[2])
|| (!d[1] && !d[2])
))
return true;
else
return false;
}
#endif

Ezt találtam, ebben lehetne esetleg a hiba?

ExcludeItems függvényt másold be, szerintem abban lesznek kizárva a vértek

C++ programmer at Gameloft

Idézetet írta: Distraught Dátum 2017-10-05, 20:57:16
Idézetet írta: Meli Dátum 2017-10-05, 17:17:30
Idézetet írta: 5310pati Dátum 2017-10-05, 16:35:36
!ch->SameItem(item0, item1)
Ezt nézd át.

Mégis mit keressek?
char_item.cpp


bool CHARACTER::SameItem(LPITEM item1, LPITEM item2)
{
TItemTable const* table1 = item1->GetProto();
TItemTable const* table2 = item2->GetProto();

bool a[2] = {IsAntiFlag(ITEM_ANTIFLAG_WARRIOR, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_WARRIOR, table2->dwAntiFlags)};
bool b[2] = {IsAntiFlag(ITEM_ANTIFLAG_ASSASSIN, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_ASSASSIN, table2->dwAntiFlags)};
bool c[2] = {IsAntiFlag(ITEM_ANTIFLAG_SURA, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_SURA, table2->dwAntiFlags)};
bool d[2] = {IsAntiFlag(ITEM_ANTIFLAG_SHAMAN, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_SHAMAN, table2->dwAntiFlags)};

if (ExcludeItems(item1->GetVnum()) || ExcludeItems(item2->GetVnum()))
return false;

if (item1->GetType() == ITEM_WEAPON && item2->GetType() == ITEM_WEAPON && item1->GetSubType() == item2->GetSubType()
#ifdef __QUIVER_SYSTEM__
&& item1->GetSubType() != WEAPON_ARROW && item2->GetSubType() != WEAPON_ARROW && item1->GetSubType() != WEAPON_QUIVER && item2->GetSubType() != WEAPON_QUIVER
#else
&& item1->GetSubType() != WEAPON_ARROW && item2->GetSubType() != WEAPON_ARROW
#endif
&& table1->bSize == table2->bSize
&& ((!a[1] && !a[2])
|| (!b[1] && !b[2])
|| (!c[1] && !c[2])
|| (!d[1] && !d[2])
))
return true;
else if (item1->GetType() == ITEM_ARMOR && item2->GetType() == ITEM_ARMOR && item1->GetSubType() == ARMOR_BODY && ARMOR_BODY == item2->GetSubType()
&& table1->bSize == table2->bSize
&& ((!a[1] && !a[2])
|| (!b[1] && !b[2])
|| (!c[1] && !c[2])
|| (!d[1] && !d[2])
))
return true;
else
return false;
}
#endif

Ezt találtam, ebben lehetne esetleg a hiba?

ExcludeItems függvényt másold be, szerintem abban lesznek kizárva a vértek

Tessék itt a függvény:

static bool ExcludeItems(DWORD dwVnum)
{
if (dwVnum == 11901 || dwVnum == 11902 ||
dwVnum == 11903 || dwVnum == 11904 ||
dwVnum == 11905 || dwVnum == 11906 ||
dwVnum == 11907 || dwVnum == 11908 ||
dwVnum == 11909 || dwVnum == 11910 ||
dwVnum == 11911 || dwVnum == 11912 ||
dwVnum == 11913 || dwVnum == 11914 ||
dwVnum == 50201 || dwVnum == 50202
)
return true;
else
return false;
}

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”

ezek az ID-k véletlen nem azok az ID-k amiket nem enged? ><

C++ programmer at Gameloft

Idézetet írta: Distraught Dátum 2017-10-05, 21:05:45
ezek az ID-k véletlen nem azok az ID-k amiket nem enged? ><

Nem, próbáltam.

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”


bool CHARACTER::SameItem(LPITEM item1, LPITEM item2)
{
TItemTable const* table1 = item1->GetProto();
TItemTable const* table2 = item2->GetProto();

bool a[2] = {IsAntiFlag(ITEM_ANTIFLAG_WARRIOR, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_WARRIOR, table2->dwAntiFlags)};
bool b[2] = {IsAntiFlag(ITEM_ANTIFLAG_ASSASSIN, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_ASSASSIN, table2->dwAntiFlags)};
bool c[2] = {IsAntiFlag(ITEM_ANTIFLAG_SURA, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_SURA, table2->dwAntiFlags)};
bool d[2] = {IsAntiFlag(ITEM_ANTIFLAG_SHAMAN, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_SHAMAN, table2->dwAntiFlags)};

if (ExcludeItems(item1->GetVnum()) || ExcludeItems(item2->GetVnum()))
return false;

if (item1->GetType() == ITEM_WEAPON && item2->GetType() == ITEM_WEAPON && item1->GetSubType() == item2->GetSubType()
#ifdef __QUIVER_SYSTEM__
&& item1->GetSubType() != WEAPON_ARROW && item2->GetSubType() != WEAPON_ARROW && item1->GetSubType() != WEAPON_QUIVER && item2->GetSubType() != WEAPON_QUIVER
#else
&& item1->GetSubType() != WEAPON_ARROW && item2->GetSubType() != WEAPON_ARROW
#endif
&& table1->bSize == table2->bSize
&& ((!a[1] && !a[2])
|| (!b[1] && !b[2])
|| (!c[1] && !c[2])
|| (!d[1] && !d[2])
))
return true;
else if (item1->GetType() == ITEM_ARMOR && item2->GetType() == ITEM_ARMOR && item1->GetSubType() == ARMOR_BODY && ARMOR_BODY == item2->GetSubType()
&& table1->bSize == table2->bSize)
return true;
else
return false;
}
#endif

ha lecseréled a SameItem függvényed erre, akkor engedi?

C++ programmer at Gameloft

2017-10-05, 21:16:10 #15 Utolsó szerkesztés: 2017-10-05, 21:22:01 Szerző: Meli
Idézetet írta: Distraught Dátum 2017-10-05, 21:12:16

bool CHARACTER::SameItem(LPITEM item1, LPITEM item2)
{
TItemTable const* table1 = item1->GetProto();
TItemTable const* table2 = item2->GetProto();

bool a[2] = {IsAntiFlag(ITEM_ANTIFLAG_WARRIOR, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_WARRIOR, table2->dwAntiFlags)};
bool b[2] = {IsAntiFlag(ITEM_ANTIFLAG_ASSASSIN, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_ASSASSIN, table2->dwAntiFlags)};
bool c[2] = {IsAntiFlag(ITEM_ANTIFLAG_SURA, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_SURA, table2->dwAntiFlags)};
bool d[2] = {IsAntiFlag(ITEM_ANTIFLAG_SHAMAN, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_SHAMAN, table2->dwAntiFlags)};

if (ExcludeItems(item1->GetVnum()) || ExcludeItems(item2->GetVnum()))
return false;

if (item1->GetType() == ITEM_WEAPON && item2->GetType() == ITEM_WEAPON && item1->GetSubType() == item2->GetSubType()
#ifdef __QUIVER_SYSTEM__
&& item1->GetSubType() != WEAPON_ARROW && item2->GetSubType() != WEAPON_ARROW && item1->GetSubType() != WEAPON_QUIVER && item2->GetSubType() != WEAPON_QUIVER
#else
&& item1->GetSubType() != WEAPON_ARROW && item2->GetSubType() != WEAPON_ARROW
#endif
&& table1->bSize == table2->bSize
&& ((!a[1] && !a[2])
|| (!b[1] && !b[2])
|| (!c[1] && !c[2])
|| (!d[1] && !d[2])
))
return true;
else if (item1->GetType() == ITEM_ARMOR && item2->GetType() == ITEM_ARMOR && item1->GetSubType() == ARMOR_BODY && ARMOR_BODY == item2->GetSubType()
&& table1->bSize == table2->bSize)
return true;
else
return false;
}
#endif

ha lecseréled a SameItem függvényed erre, akkor engedi?

Fordításnál ezt kapom:
Semmi, elnéztem
Fordítom és nézem.

Működik így.

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”

ez a rész fura nekem:
   && ((!a[1] && !a[2])
   || (!b[1] && !b[2])
   || (!c[1] && !c[2])
   || (!d[1] && !d[2])

itt nem 0 és 1-nek kellene lennie, mivel c++-ban 0-tól indexelünk?
szóval ez a sor: bool a[2] = {IsAntiFlag(ITEM_ANTIFLAG_WARRIOR, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_WARRIOR, table2->dwAntiFlags)};

az a[0] és a[1]-nek kellene, hogy értéket adjon szerintem

azért töröltem ki belőle ezt a részt, mert szerintem biztos, hogy ez a hiba, ha igen, akkor tedd vissza az eredeti SameItem függvényt és ezen a részeken az 1-et 0-ra a 2-t pedig 1-re írd át (a deklarálásnál ne!)

C++ programmer at Gameloft

Idézetet írta: Distraught Dátum 2017-10-05, 21:22:09
ez a rész fura nekem:
   && ((!a[1] && !a[2])
   || (!b[1] && !b[2])
   || (!c[1] && !c[2])
   || (!d[1] && !d[2])

itt nem 0 és 1-nek kellene lennie, mivel c++-ban 0-tól indexelünk?
szóval ez a sor: bool a[2] = {IsAntiFlag(ITEM_ANTIFLAG_WARRIOR, table1->dwAntiFlags), IsAntiFlag(ITEM_ANTIFLAG_WARRIOR, table2->dwAntiFlags)};

az a[0] és a[1]-nek kellene, hogy értéket adjon szerintem

azért töröltem ki belőle ezt a részt, mert szerintem biztos, hogy ez a hiba, ha igen, akkor tedd vissza az eredeti SameItem függvényt és ezen a részeken az 1-et 0-ra a 2-t pedig 1-re írd át (a deklarálásnál ne!)

Thanks! ment!+

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”