Metin2 Hungarian Forum

Metin2 => Szerver készítés => Privát szerverek => Segítség => A témát indította: Meli Dátum 2017-10-05, 15:23:44

Cím: Transzmutáció system
Írta: Meli Dátum 2017-10-05, 15:23:44
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?
Cím: Re:Transzmutáció system
Írta: 5310pati Dátum 2017-10-05, 16:35:36
!ch->SameItem(item0, item1)
Ezt nézd át.
Cím: Re:Transzmutáció system
Í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?
Cím: Re:Transzmutáció system
Í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.
Cím: Re:Transzmutáció system
Írta: Meli Dátum 2017-10-05, 17:38:19
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?
Cím: Re:Transzmutáció system
Írta: Red Dátum 2017-10-05, 20:22:17
Én beraktam ezt a rendszert és nincs vele semmi baj.
Cím: Re:Transzmutáció system
Írta: Meli Dátum 2017-10-05, 20:37:59
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?
Cím: Re:Transzmutáció system
Í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)
Cím: Re:Transzmutáció system
Írta: Meli Dátum 2017-10-05, 20:51:18
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.
Cím: Re:Transzmutáció system
Írta: Red Dátum 2017-10-05, 20:56:46
.
Cím: Re:Transzmutáció system
Í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
Cím: Re:Transzmutáció system
Írta: Meli Dátum 2017-10-05, 21:03:01
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;
}
Cím: Re:Transzmutáció system
Írta: Distraught Dátum 2017-10-05, 21:05:45
ezek az ID-k véletlen nem azok az ID-k amiket nem enged? ><
Cím: Re:Transzmutáció system
Írta: Meli Dátum 2017-10-05, 21:06:36
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.
Cím: Re:Transzmutáció system
Í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?
Cím: Re:Transzmutáció system
Írta: Meli Dátum 2017-10-05, 21:16:10
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.
Cím: Re:Transzmutáció system
Í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!)
Cím: Re:Transzmutáció system
Írta: Meli Dátum 2017-10-05, 21:33:29
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!+
EhPortal 1.39 © 2025, WebDev