Metin2 Hungarian Forum

Metin2 => Szerver készítés => Privát szerverek => Segítség => A témát indította: TheSLESH Dátum 2018-04-26, 12:48:11

Cím: ip kivétel
Írta: TheSLESH Dátum 2018-04-26, 12:48:11
Sziasztok, hogy lehetne megoldani, hogy a /ip parancs kivétel listás legyen? Tehát hogy töröljön minden tárgyat, KIVÉVE x y z tárgyakat.
Akárhogy próbáltam nem fut le, ez a függvény (ez az eredeti)

ACMD(do_item_purge)
{
int         i;
LPITEM      item;

for (i = 0; i < INVENTORY_AND_EQUIP_SLOT_MAX; ++i)
{
if ((item = ch->GetInventoryItem(i)))
{
ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, i, 255);
}
}   
for (i = 0; i < DRAGON_SOUL_INVENTORY_MAX_NUM; ++i)
{
if ((item = ch->GetItem(TItemPos(DRAGON_SOUL_INVENTORY, i ))))
{
ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
}
}   
#ifdef __WEAPON_COSTUME_SYSTEM__
if (ch)
{
ch->SetPart(PART_WEAPON, 0);
ch->UpdatePacket();
}
#endif
}
Cím: Re:ip kivétel
Írta: 5310pati Dátum 2018-04-26, 13:47:19
Mert olyan nehéz lekérni 1 LPITEM ID-jét :-X :-\ :'(

if (item->GetVnum() == XXX)
continue;
Cím: Re:ip kivétel
Írta: [VIP]Rin the Exorcist Dátum 2018-04-26, 16:03:14
Ezek után reméljük csak pár tárgyról van szó, mert ha sok van és tömb kéne nekik akkor kitudja mi lesz itt... :-\ :-X
Cím: Re:ip kivétel
Írta: 5310pati Dátum 2018-04-26, 16:11:44
Vagy megnyitja a raktárat és bepakolja a cuccokat. :o :o
Am nemtom mi értelme van, hisz pont ez a lényege a dolognak h letisztítsa a karid... :-\
Cím: Re:ip kivétel
Írta: Distraught Dátum 2018-04-26, 17:40:38
Próbáld ezt:

void split_argument(const char *argument, std::vector<std::string> & vecArgs)
{
std::string arg = argument;
boost::split(vecArgs, arg, boost::is_any_of(" "), boost::token_compress_on);
}

ACMD(do_item_purge)
{
std::vector<std::string> vecArgs;
split_argument(argument,vecArgs);
int         i;
LPITEM      item;

for (i = 0; i < INVENTORY_AND_EQUIP_SLOT_MAX; ++i)
{
if ((item = ch->GetInventoryItem(i)))
{
for(int j=0;j<vecArgs.size();++j)
if(atoi(idk[j].c_str()) == item->GetVnum())
continue;
ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, i, 255);
}
}   
for (i = 0; i < DRAGON_SOUL_INVENTORY_MAX_NUM; ++i)
{
if ((item = ch->GetItem(TItemPos(DRAGON_SOUL_INVENTORY, i ))))
{
for(int j=0;j<vecArgs.size();++j)
if(atoi(idk[j].c_str()) == item->GetVnum())
continue;
ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
}
}   
#ifdef __WEAPON_COSTUME_SYSTEM__
if (ch)
{
ch->SetPart(PART_WEAPON, 0);
ch->UpdatePacket();
}
#endif
}

akkor az ip parancs után szóközökkel elválasztva sorold fel, hogy melyik ID-ket ne törölje.
source (https://www.elitepvpers.com/forum/metin2-pserver-guides-strategies/4251322-c-unlimited-arguments.html)
Cím: Re:ip kivétel
Írta: 5310pati Dátum 2018-04-26, 17:44:00
Egy lista sztem praktikusabb lenne + nem ártana a DS-hez is beírni me hát mi van ha DS-ből is meg akart tartani vmit ::)
Ja és azt az if-en belülre kéne rakni, mivel a te ellenőrző for ciklusod után kap értéket az item változó és te előtte akarod lekérni a vnumját :-X
Cím: Re:ip kivétel
Írta: Distraught Dátum 2018-04-26, 17:53:43
ja rlly nem néztem - épp rohanásban vagyok -, átírtam
Cím: Re:ip kivétel
Írta: 5310pati Dátum 2018-04-26, 17:57:01
Már csak az a fránya { }  :'( ;D ;D
Ez így crashelős lesz ugyanis NULL LPITEM-re is lefut a remove :P
Cím: Re:ip kivétel
Írta: Csedwik Dátum 2018-05-04, 16:33:32
Srácok-srácok. Egyszer már csináltam ilyet. Valami el van szúrva az egészbe, mivel ha le akarsz hívni 1 adott idjű tárgyat ki crashel az egész ch.
EhPortal 1.39 © 2025, WebDev