• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

[Trigger] Restrict multiples of the same item?

Status
Not open for further replies.
Level 3
Joined
Oct 7, 2010
Messages
30
Hello, i want to ban duplicate items in my map so that a player cannot acquire 2 of the same item on one hero. So far i have something like this

  • Actions
    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      • If - Conditions
        • (Item-type of (Item being manipulated)) Not equal to (Item-type of (Item carried by (Hero manipulating item) in slot 1))
        • (Item-type of (Item being manipulated)) Not equal to (Item-type of (Item carried by (Hero manipulating item) in slot 2))
        • (Item-type of (Item being manipulated)) Not equal to (Item-type of (Item carried by (Hero manipulating item) in slot 3))
        • (Item-type of (Item being manipulated)) Not equal to (Item-type of (Item carried by (Hero manipulating item) in slot 4))
        • (Item-type of (Item being manipulated)) Not equal to (Item-type of (Item carried by (Hero manipulating item) in slot 5))
        • (Item-type of (Item being manipulated)) Not equal to (Item-type of (Item carried by (Hero manipulating item) in slot 6))
      • Then - Actions
        • Do nothing
      • Else - Actions
        • Item - Remove (Item being manipulated)
My problem with this trigger is that it removes any item even if you don't have it already, i think i know where the problem is (that my trigger detects the item you buy as one from the 6 inventory slots), but i'm not sure how to fix this
 
Level 5
Joined
Jun 16, 2004
Messages
108
Try changing all the checks to "equal to" rather than "not equal to", then put them all inside an "or" check.
Actually that will fail as well, one moment.

  • Untitled Trigger 001
    • Events
      • Unit - A unit Acquires an item
    • Conditions
      • Or - Any (Conditions) are true
        • Conditions
          • ((Item-type of (Item being manipulated)) Equal to (Item-type of (Item carried by (Triggering unit) in slot 1))) and ((Item being manipulated) Not equal to (Item carried by (Triggering unit) in slot 1))
          • ((Item-type of (Item being manipulated)) Equal to (Item-type of (Item carried by (Triggering unit) in slot 2))) and ((Item being manipulated) Not equal to (Item carried by (Triggering unit) in slot 2))
          • ((Item-type of (Item being manipulated)) Equal to (Item-type of (Item carried by (Triggering unit) in slot 3))) and ((Item being manipulated) Not equal to (Item carried by (Triggering unit) in slot 3))
          • ((Item-type of (Item being manipulated)) Equal to (Item-type of (Item carried by (Triggering unit) in slot 4))) and ((Item being manipulated) Not equal to (Item carried by (Triggering unit) in slot 4))
          • ((Item-type of (Item being manipulated)) Equal to (Item-type of (Item carried by (Triggering unit) in slot 5))) and ((Item being manipulated) Not equal to (Item carried by (Triggering unit) in slot 5))
          • ((Item-type of (Item being manipulated)) Equal to (Item-type of (Item carried by (Triggering unit) in slot 6))) and ((Item being manipulated) Not equal to (Item carried by (Triggering unit) in slot 6))
    • Actions
      • Item - Remove (Item being manipulated)
That should do it. Making that trigger took unnecessarily long since loading the item list is very slow for me on this computer. You can also put it in a loop if you would prefer that.

  • Untitled Trigger 001
    • Events
      • Unit - A unit Acquires an item
    • Conditions
    • Actions
      • For each (Integer A) from 1 to 6, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Item-type of (Item being manipulated)) Equal to (Item-type of (Item carried by (Triggering unit) in slot (Integer A)))) and ((Item being manipulated) Not equal to (Item carried by (Triggering unit) in slot (Integer A)))
            • Then - Actions
              • Item - Remove (Item being manipulated)
              • Skip remaining actions
            • Else - Actions
On another note, removing the item might be a bit excessive. Maybe just drop the item?
  • Hero - Drop (Item being manipulated) from (Triggering unit)
 
Last edited:
Level 3
Joined
Oct 7, 2010
Messages
30
Thankyou, this worked perfectly.

I used "remove" because i also have another trigger just before it that returns the cost of the item back to the player, i just thought it wasn't really a necessary thing to include since i didn't need any help with that part :)
 
Status
Not open for further replies.
Top