EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Quests::Q&A (https://www.eqemulator.org/forums/forumdisplay.php?f=599)
-   -   No duplicate loot (https://www.eqemulator.org/forums/showthread.php?t=42921)

Ueguvil 05-13-2020 10:16 AM

No duplicate loot
 
Lets say I want a raid mob to drop 3 unique pieces of loot from a single lootdrop, the current lootdrop functionality doesn't seem to have a way for me to do that. So instead I'm looking at adding loot through a Perl script instead. Here's what I've got so far:

Code:

sub EVENT_SPAWN{
  my @item_PHARA = (1628, 1845, 1848, 2377, 10845, 10851, 10912, 10913, 24648); #loot list
  my $itemlist = @item_PHARA;
  my $item1 = $item_PHARA[plugin::RandomRange(0,$itemlist)];
  quest::addloot($item1, 0, 0);
 
  @item_PHARA2 = grep {$_ != $item1 } @item_PHARA; #remove first loot from loot array, then draw another item
  my $itemlist2 = @item_PHARA2;
  my $item2 = $item_PHARA2[plugin::RandomRange(0,$itemlist2)];
  quest::addloot($item2, 0, 0);

  @item_PHARA3 = grep {$_ != $item2 } @item_PHARA2; #remove second loot from loot array, then draw another item
  my $itemlist3 = @item_PHARA3;
  my $item3 = $item_PHARA3[plugin::RandomRange(0,$itemlist3)];
  quest::addloot($item3, 0, 0);
        }

It seems to mostly work, only problem is about 40% of the time only 2 loots are added instead of 3. No clue if I'm using the grep function correctly, I tried googling how to remove a value from an array and that seemed to be a potential solution.

Thanks for looking :)

Ueguvil 05-13-2020 12:42 PM

Fixed it and cut some code out that I'm sure was unnecessary (just finding snippets from around the forums)

Code:

sub EVENT_SPAWN{
  my @item_PHARA = (1628, 1845, 1848, 2377, 10845, 10851, 10912, 10913, 24648);
  my $item1 =  quest::ChooseRandom( @item_PHARA ) ;
  quest::addloot($item1, 0, 0);
 
  @item_PHARA2 = grep {$_ != $item1 } @item_PHARA;
  my $item2 =  quest::ChooseRandom( @item_PHARA2 );
  quest::addloot($item2, 0, 0);

  @item_PHARA3 = grep {$_ != $item2 } @item_PHARA2;
  my $item3 =  quest::ChooseRandom( @item_PHARA3 ) ;
  quest::addloot($item3, 0, 0);
        }


demonstar55 05-13-2020 01:27 PM

I wouldn't be against adding this to our loot tables code. Could be useful for custom servers, don't think live has this behavior :P

Ueguvil 05-13-2020 02:22 PM

Quote:

Originally Posted by demonstar55 (Post 264937)
I wouldn't be against adding this to our loot tables code. Could be useful for custom servers, don't think live has this behavior :P

Honestly I thought that's what mindrop would do. Makes sense to me that having a lootdrop with:

Minimum Drop: 3 Drop Limit: 3 Probability: 100% Multiplier: 1

would give you 3 different items from within that particular loot drop, dependent on their individual drop chance. Whereas:

Minimum Drop: 1 Drop Limit: 1 Probability: 100% Multiplier: 3

would be three separate rolls for the entire lootdrop, which could result in duplicate items being picked. Right now I don't believe there's any difference between the two. Probably because as you say, Live likely doesn't have this behavior anyway.

demonstar55 05-13-2020 04:31 PM

Nope. Not what it is :P

chrsschb 05-14-2020 01:30 PM

I'd be cool with having this functionality, although I get around it by just splitting the loot tables into multiple lootdrops. Only real issue I have with loottables is how streaky they are (preferring the first and last drop in the table).


All times are GMT -4. The time now is 05:15 AM.

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