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?
!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?
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?
É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?
Nem tudom. Nekem még a pántokra is sikerült kiterjeszteni.
(https://board.ddmt2.net/proxy.php?request=http%3A%2F%2Fwww.kepfeltoltes.eu%2Fimages%2Fhdd1%2F2017%2F10%2F05%2F8171001_180143.jpg&hash=cb5bf58d099855c80be111247575fe51116110fe) (http://www.kepfeltoltes.eu/view.php?filename=8171001_180143.jpg)
Idézetet írta: Red Dátum 2017-10-05, 20:41:06
Nem tudom. Nekem még a pántokra is sikerült kiterjeszteni.
(https://board.ddmt2.net/proxy.php?request=http%3A%2F%2Fwww.kepfeltoltes.eu%2Fimages%2Fhdd1%2F2017%2F10%2F05%2F8171001_180143.jpg&hash=cb5bf58d099855c80be111247575fe51116110fe) (http://www.kepfeltoltes.eu/view.php?filename=8171001_180143.jpg)
Hm esetleg tudnál segíteni?
Lehet kihagyok valamit vagy nem tudom.
.
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
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;
}
ezek az ID-k véletlen nem azok az ID-k amiket nem enged? ><
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.
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?
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.
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!)
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!+