Advertisement
Guest User

Untitled

a guest
Apr 8th, 2019
1,354
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.57 KB | None | 0 0
  1. //
  2. // common.j
  3. //
  4.  
  5. constant itemtype ITEM_TYPE_PERMANENT = ConvertItemType(0)
  6. constant itemtype ITEM_TYPE_CHARGED = ConvertItemType(1)
  7. constant itemtype ITEM_TYPE_ARTIFACT = ConvertItemType(3)
  8.  
  9. native ChooseRandomItemEx takes itemtype whichType, integer level returns integer
  10.  
  11. native SetAllItemTypeSlots takes integer slots returns nothing
  12.  
  13. native AddItemToStock takes unit whichUnit, integer itemId, integer currentStock, integer stockMax returns nothing
  14. native RemoveItemFromStock takes unit whichUnit, integer itemId returns nothing
  15.  
  16.  
  17. //
  18. // blizzard.j
  19. //
  20.  
  21. constant integer bj_MAX_STOCK_ITEM_SLOTS = 11
  22. constant integer bj_MAX_ITEM_LEVEL = 10
  23.  
  24. // Timing settings for Marketplace inventories.
  25. constant real bj_STOCK_RESTOCK_INITIAL_DELAY = 120.0
  26. constant real bj_STOCK_RESTOCK_INTERVAL = 30.0
  27. constant integer bj_STOCK_MAX_ITERATIONS = 20
  28.  
  29. // Marketplace vars
  30. trigger bj_stockItemPurchased       = null
  31. timer bj_stockUpdateTimer         = null
  32. boolean array bj_stockAllowedPermanent
  33. boolean array bj_stockAllowedCharged
  34. boolean array bj_stockAllowedArtifact
  35. integer bj_stockPickedItemLevel     = 0
  36. itemtype bj_stockPickedItemType
  37.  
  38. function InitNeutralBuildings takes nothing returns nothing
  39.     local integer iLevel
  40.  
  41.     // Chart of allowed stock items.
  42.     set iLevel = 0
  43.     loop
  44.         set bj_stockAllowedPermanent[iLevel] = false
  45.         set bj_stockAllowedCharged[iLevel] = false
  46.         set bj_stockAllowedArtifact[iLevel] = false
  47.         set iLevel = iLevel + 1
  48.         exitwhen iLevel > bj_MAX_ITEM_LEVEL
  49.     endloop
  50.  
  51.     // Limit stock inventory slots.
  52.     call SetAllItemTypeSlots(bj_MAX_STOCK_ITEM_SLOTS)
  53.     call SetAllUnitTypeSlots(bj_MAX_STOCK_UNIT_SLOTS)
  54.  
  55.     // Arrange the first update.
  56.     set bj_stockUpdateTimer = CreateTimer()
  57.     call TimerStart(bj_stockUpdateTimer, bj_STOCK_RESTOCK_INITIAL_DELAY, false, function StartStockUpdates)
  58.  
  59.     // Set up a trigger to fire whenever an item is sold.
  60.     set bj_stockItemPurchased = CreateTrigger()
  61.     call TriggerRegisterPlayerUnitEvent(bj_stockItemPurchased, Player(PLAYER_NEUTRAL_PASSIVE), EVENT_PLAYER_UNIT_SELL_ITEM, null)
  62.     call TriggerAddAction(bj_stockItemPurchased, function RemovePurchasedItem)
  63. endfunction
  64.  
  65. function RemovePurchasedItem takes nothing returns nothing
  66.     call RemoveItemFromStock(GetSellingUnit(), GetItemTypeId(GetSoldItem()))
  67. endfunction
  68.  
  69. function StartStockUpdates takes nothing returns nothing
  70.     call PerformStockUpdates()
  71.     call TimerStart(bj_stockUpdateTimer, bj_STOCK_RESTOCK_INTERVAL, true, function PerformStockUpdates)
  72. endfunction
  73.  
  74. function PerformStockUpdates takes nothing returns nothing
  75.     local integer  pickedItemId
  76.     local itemtype pickedItemType
  77.     local integer  pickedItemLevel = 0
  78.     local integer  allowedCombinations = 0
  79.     local integer  iLevel
  80.  
  81.     // Give each type/level combination a chance of being picked.
  82.     set iLevel = 1
  83.     loop
  84.         if (bj_stockAllowedPermanent[iLevel]) then
  85.             set allowedCombinations = allowedCombinations + 1
  86.             if (GetRandomInt(1, allowedCombinations) == 1) then
  87.                 set pickedItemType = ITEM_TYPE_PERMANENT
  88.                 set pickedItemLevel = iLevel
  89.             endif
  90.         endif
  91.         if (bj_stockAllowedCharged[iLevel]) then
  92.             set allowedCombinations = allowedCombinations + 1
  93.             if (GetRandomInt(1, allowedCombinations) == 1) then
  94.                 set pickedItemType = ITEM_TYPE_CHARGED
  95.                 set pickedItemLevel = iLevel
  96.             endif
  97.         endif
  98.         if (bj_stockAllowedArtifact[iLevel]) then
  99.             set allowedCombinations = allowedCombinations + 1
  100.             if (GetRandomInt(1, allowedCombinations) == 1) then
  101.                 set pickedItemType = ITEM_TYPE_ARTIFACT
  102.                 set pickedItemLevel = iLevel
  103.             endif
  104.         endif
  105.  
  106.         set iLevel = iLevel + 1
  107.         exitwhen iLevel > bj_MAX_ITEM_LEVEL
  108.     endloop
  109.  
  110.     // Make sure we found a valid item type to add.
  111.     if (allowedCombinations == 0) then
  112.         return
  113.     endif
  114.  
  115.     call UpdateEachStockBuilding(pickedItemType, pickedItemLevel)
  116. endfunction
  117.  
  118. function UpdateEachStockBuilding takes itemtype iType, integer iLevel returns nothing
  119.     local group g
  120.  
  121.     set bj_stockPickedItemType = iType
  122.     set bj_stockPickedItemLevel = iLevel
  123.  
  124.     set g = CreateGroup()
  125.     call GroupEnumUnitsOfType(g, "marketplace", null)
  126.     call ForGroup(g, function UpdateEachStockBuildingEnum)
  127.     call DestroyGroup(g)
  128. endfunction
  129.  
  130. function UpdateEachStockBuildingEnum takes nothing returns nothing
  131.     local integer iteration = 0
  132.     local integer pickedItemId
  133.  
  134.     loop
  135.         set pickedItemId = ChooseRandomItemEx(bj_stockPickedItemType, bj_stockPickedItemLevel)
  136.         exitwhen IsItemIdSellable(pickedItemId)
  137.  
  138.         // If we get hung up on an entire class/level combo of unsellable
  139.         // items, or a very unlucky series of random numbers, give up.
  140.         set iteration = iteration + 1
  141.         if (iteration > bj_STOCK_MAX_ITERATIONS) then
  142.             return
  143.         endif
  144.     endloop
  145.     call AddItemToStock(GetEnumUnit(), pickedItemId, 1, 1)
  146. endfunction
  147.  
  148. function UpdateStockAvailability takes item whichItem returns nothing
  149.     local itemtype iType  = GetItemType(whichItem)
  150.     local integer  iLevel = GetItemLevel(whichItem)
  151.  
  152.     // Update allowed type/level combinations.
  153.     if (iType == ITEM_TYPE_PERMANENT) then
  154.         set bj_stockAllowedPermanent[iLevel] = true
  155.     elseif (iType == ITEM_TYPE_CHARGED) then
  156.         set bj_stockAllowedCharged[iLevel] = true
  157.     elseif (iType == ITEM_TYPE_ARTIFACT) then
  158.         set bj_stockAllowedArtifact[iLevel] = true
  159.     else
  160.         // Not interested in this item type - ignore the item.
  161.     endif
  162. endfunction
  163.  
  164. function UnitDropItem takes unit inUnit, integer inItemID returns item
  165.     ...
  166.     call UpdateStockAvailability(droppedItem)
  167.     ...
  168. endfunction
  169.  
  170. // map specific functions that are generated by the World Editor (WC3 map editor program)
  171. // related to creeps and the items that they can drop
  172. //
  173. function Unit000056_DropItems takes nothing returns nothing
  174.     local widget trigWidget= null
  175.     local unit trigUnit= null
  176.     local integer itemID= 0
  177.     local boolean canDrop= true
  178.  
  179.     set trigWidget=bj_lastDyingWidget
  180.     if ( trigWidget == null ) then
  181.         set trigUnit=GetTriggerUnit()
  182.     endif
  183.  
  184.     if ( trigUnit != null ) then
  185.         set canDrop=not IsUnitHidden(trigUnit)
  186.         if ( canDrop and GetChangingUnit() != null ) then
  187.             set canDrop=( GetChangingUnitPrevOwner() == Player(PLAYER_NEUTRAL_AGGRESSIVE) )
  188.         endif
  189.     endif
  190.  
  191.     if ( canDrop ) then
  192.         // Item set 0
  193.         call RandomDistReset()
  194.         call RandomDistAddItem(ChooseRandomItemEx(ITEM_TYPE_CHARGED, 3), 100)
  195.         set itemID=RandomDistChoose()
  196.         if ( trigUnit != null ) then
  197.             call UnitDropItem(trigUnit, itemID)
  198.         else
  199.             call WidgetDropItem(trigWidget, itemID)
  200.         endif
  201.  
  202.     endif
  203.  
  204.     set bj_lastDyingWidget=null
  205.     call DestroyTrigger(GetTriggeringTrigger())
  206. endfunction
  207.  
  208. function CreateNeutralHostile takes nothing returns nothing
  209.     local player p= Player(PLAYER_NEUTRAL_AGGRESSIVE)
  210.     local unit u
  211.     local integer unitID
  212.     local trigger t
  213.     local real life
  214.  
  215.     ...
  216.     set u=CreateUnit(p, 'nomg', - 249.8, 3121.7, 270.000)
  217.     call SetUnitAcquireRange(u, 200.0)
  218.     set t=CreateTrigger()
  219.     call TriggerRegisterUnitEvent(t, u, EVENT_UNIT_DEATH)
  220.     call TriggerRegisterUnitEvent(t, u, EVENT_UNIT_CHANGE_OWNER)
  221.     call TriggerAddAction(t, function Unit000056_DropItems)
  222.     ...
  223. endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement