ip kivétel

Indította TheSLESH, 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
}
Az ember csak fiatalon találhat ki igazán új dolgokat. Utána már túl tapasztalt, túl híres (...) és túl ostoba.

2018-04-26, 13:47:19 #1 Utolsó szerkesztés: 2018-04-26, 14:47:04 Szerző: [MOD]Ken
Mert olyan nehéz lekérni 1 LPITEM ID-jét :-X :-\ :'(

if (item->GetVnum() == XXX)
continue;

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
"Tisztelet a kivételnek! Mindig tisztelet a kivételnek!"
"KezdÅ' vagyok, ne nézz le... (:"

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... :-\

2018-04-26, 17:40:38 #4 Utolsó szerkesztés: 2018-04-26, 18:04:28 Szerző: Distraught
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

C++ programmer at Gameloft

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

ja rlly nem néztem - épp rohanásban vagyok -, átírtam

C++ programmer at Gameloft

Már csak az a fránya { }  :'( ;D ;D
Ez így crashelős lesz ugyanis NULL LPITEM-re is lefut a remove :P

2018-05-04, 16:33:32 #8 Utolsó szerkesztés: 2018-05-04, 17:46:22 Szerző: [MOD]Ken
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.
Skype:Csedwik