EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Development: Custom Code (https://www.eqemulator.org/forums/forumdisplay.php?f=665)
-   -   Pickpocketing weapons (https://www.eqemulator.org/forums/showthread.php?t=39859)

N0ctrnl 07-17-2015 10:47 PM

Pickpocketing weapons
 
So I'm not much of a programmer. Let me just add that up front...

I've had reports of rogues being able to pickpocket weapons right off an NPC. In an effort to try to fix it, I've come up with the following in zone/npc.cpp:

Code:

bool is_arrow = (item->ItemType == ItemTypeArrow) ? true : false;
                                int slot_id = thief->GetInv().FindFreeSlot(false, true, inst->GetItem()->Size, is_arrow);
                                bool is_weapon = ((item->ItemType == ItemType1HSlash) == true) || ((item->ItemType == ItemType2HSlash) == true) || ((item->ItemType == ItemType1HPiercing) == true) || ((item->ItemType == ItemType1HBlunt) == true) || ((item->ItemType == ItemType2HBlunt) == true) || ((item->ItemType == ItemType2HPiercing) == true);
                                if (/*!Equipped(item->ID) &&*/
                                        !item->Magic && item->NoDrop != 0 && !inst->IsType(ItemClassContainer) && slot_id != INVALID_INDEX && is_weapon == false

Now, I realize it's entirely likely I haven't done anything but add useless lines of code here. Can somebody with more than zero skills let me know if what I put here will work?

Also, I'm sure there's a better way than checking against all the weapon types, so if there's something more efficient please do tell.

Thanks! :)

Kingly_Krab 07-17-2015 11:30 PM

The best way to see if this will work is compile it in your own source and test it.

NatedogEZ 07-17-2015 11:33 PM

Should change is_weapon into a ternary like how is_arrow is written above would look like this... (hopefully no typos here... I just woke up :p)

Code:

bool is_arrow = (item->ItemType == ItemTypeArrow) ? true : false;
                                int slot_id = thief->GetInv().FindFreeSlot(false, true, inst->GetItem()->Size, is_arrow);
                                bool is_weapon = (item->ItemType == ItemType1HSlash || item->ItemType == ItemType2HSlash || item->ItemType == ItemType1HPiercing || item->ItemType == ItemType1HBlunt || item->ItemType == ItemType2HBlunt || item->ItemType == ItemType2HPiercing) ? true : false;
                                if (/*!Equipped(item->ID) &&*/
                                        !item->Magic && item->NoDrop != 0 && !inst->IsType(ItemClassContainer) && slot_id != INVALID_INDEX && !is_weapon


N0ctrnl 07-18-2015 12:30 AM

Thanks! I knew there had to be a better way. I just basically monkeyed through the syntax until it compiled.


All times are GMT -4. The time now is 03:37 PM.

Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.