Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // common.j
- //
- constant itemtype ITEM_TYPE_PERMANENT = ConvertItemType(0)
- constant itemtype ITEM_TYPE_CHARGED = ConvertItemType(1)
- constant itemtype ITEM_TYPE_ARTIFACT = ConvertItemType(3)
- native ChooseRandomItemEx takes itemtype whichType, integer level returns integer
- native SetAllItemTypeSlots takes integer slots returns nothing
- native AddItemToStock takes unit whichUnit, integer itemId, integer currentStock, integer stockMax returns nothing
- native RemoveItemFromStock takes unit whichUnit, integer itemId returns nothing
- //
- // blizzard.j
- //
- constant integer bj_MAX_STOCK_ITEM_SLOTS = 11
- constant integer bj_MAX_ITEM_LEVEL = 10
- // Timing settings for Marketplace inventories.
- constant real bj_STOCK_RESTOCK_INITIAL_DELAY = 120.0
- constant real bj_STOCK_RESTOCK_INTERVAL = 30.0
- constant integer bj_STOCK_MAX_ITERATIONS = 20
- // Marketplace vars
- trigger bj_stockItemPurchased = null
- timer bj_stockUpdateTimer = null
- boolean array bj_stockAllowedPermanent
- boolean array bj_stockAllowedCharged
- boolean array bj_stockAllowedArtifact
- integer bj_stockPickedItemLevel = 0
- itemtype bj_stockPickedItemType
- function InitNeutralBuildings takes nothing returns nothing
- local integer iLevel
- // Chart of allowed stock items.
- set iLevel = 0
- loop
- set bj_stockAllowedPermanent[iLevel] = false
- set bj_stockAllowedCharged[iLevel] = false
- set bj_stockAllowedArtifact[iLevel] = false
- set iLevel = iLevel + 1
- exitwhen iLevel > bj_MAX_ITEM_LEVEL
- endloop
- // Limit stock inventory slots.
- call SetAllItemTypeSlots(bj_MAX_STOCK_ITEM_SLOTS)
- call SetAllUnitTypeSlots(bj_MAX_STOCK_UNIT_SLOTS)
- // Arrange the first update.
- set bj_stockUpdateTimer = CreateTimer()
- call TimerStart(bj_stockUpdateTimer, bj_STOCK_RESTOCK_INITIAL_DELAY, false, function StartStockUpdates)
- // Set up a trigger to fire whenever an item is sold.
- set bj_stockItemPurchased = CreateTrigger()
- call TriggerRegisterPlayerUnitEvent(bj_stockItemPurchased, Player(PLAYER_NEUTRAL_PASSIVE), EVENT_PLAYER_UNIT_SELL_ITEM, null)
- call TriggerAddAction(bj_stockItemPurchased, function RemovePurchasedItem)
- endfunction
- function RemovePurchasedItem takes nothing returns nothing
- call RemoveItemFromStock(GetSellingUnit(), GetItemTypeId(GetSoldItem()))
- endfunction
- function StartStockUpdates takes nothing returns nothing
- call PerformStockUpdates()
- call TimerStart(bj_stockUpdateTimer, bj_STOCK_RESTOCK_INTERVAL, true, function PerformStockUpdates)
- endfunction
- function PerformStockUpdates takes nothing returns nothing
- local integer pickedItemId
- local itemtype pickedItemType
- local integer pickedItemLevel = 0
- local integer allowedCombinations = 0
- local integer iLevel
- // Give each type/level combination a chance of being picked.
- set iLevel = 1
- loop
- if (bj_stockAllowedPermanent[iLevel]) then
- set allowedCombinations = allowedCombinations + 1
- if (GetRandomInt(1, allowedCombinations) == 1) then
- set pickedItemType = ITEM_TYPE_PERMANENT
- set pickedItemLevel = iLevel
- endif
- endif
- if (bj_stockAllowedCharged[iLevel]) then
- set allowedCombinations = allowedCombinations + 1
- if (GetRandomInt(1, allowedCombinations) == 1) then
- set pickedItemType = ITEM_TYPE_CHARGED
- set pickedItemLevel = iLevel
- endif
- endif
- if (bj_stockAllowedArtifact[iLevel]) then
- set allowedCombinations = allowedCombinations + 1
- if (GetRandomInt(1, allowedCombinations) == 1) then
- set pickedItemType = ITEM_TYPE_ARTIFACT
- set pickedItemLevel = iLevel
- endif
- endif
- set iLevel = iLevel + 1
- exitwhen iLevel > bj_MAX_ITEM_LEVEL
- endloop
- // Make sure we found a valid item type to add.
- if (allowedCombinations == 0) then
- return
- endif
- call UpdateEachStockBuilding(pickedItemType, pickedItemLevel)
- endfunction
- function UpdateEachStockBuilding takes itemtype iType, integer iLevel returns nothing
- local group g
- set bj_stockPickedItemType = iType
- set bj_stockPickedItemLevel = iLevel
- set g = CreateGroup()
- call GroupEnumUnitsOfType(g, "marketplace", null)
- call ForGroup(g, function UpdateEachStockBuildingEnum)
- call DestroyGroup(g)
- endfunction
- function UpdateEachStockBuildingEnum takes nothing returns nothing
- local integer iteration = 0
- local integer pickedItemId
- loop
- set pickedItemId = ChooseRandomItemEx(bj_stockPickedItemType, bj_stockPickedItemLevel)
- exitwhen IsItemIdSellable(pickedItemId)
- // If we get hung up on an entire class/level combo of unsellable
- // items, or a very unlucky series of random numbers, give up.
- set iteration = iteration + 1
- if (iteration > bj_STOCK_MAX_ITERATIONS) then
- return
- endif
- endloop
- call AddItemToStock(GetEnumUnit(), pickedItemId, 1, 1)
- endfunction
- function UpdateStockAvailability takes item whichItem returns nothing
- local itemtype iType = GetItemType(whichItem)
- local integer iLevel = GetItemLevel(whichItem)
- // Update allowed type/level combinations.
- if (iType == ITEM_TYPE_PERMANENT) then
- set bj_stockAllowedPermanent[iLevel] = true
- elseif (iType == ITEM_TYPE_CHARGED) then
- set bj_stockAllowedCharged[iLevel] = true
- elseif (iType == ITEM_TYPE_ARTIFACT) then
- set bj_stockAllowedArtifact[iLevel] = true
- else
- // Not interested in this item type - ignore the item.
- endif
- endfunction
- function UnitDropItem takes unit inUnit, integer inItemID returns item
- ...
- call UpdateStockAvailability(droppedItem)
- ...
- endfunction
- // map specific functions that are generated by the World Editor (WC3 map editor program)
- // related to creeps and the items that they can drop
- //
- function Unit000056_DropItems takes nothing returns nothing
- local widget trigWidget= null
- local unit trigUnit= null
- local integer itemID= 0
- local boolean canDrop= true
- set trigWidget=bj_lastDyingWidget
- if ( trigWidget == null ) then
- set trigUnit=GetTriggerUnit()
- endif
- if ( trigUnit != null ) then
- set canDrop=not IsUnitHidden(trigUnit)
- if ( canDrop and GetChangingUnit() != null ) then
- set canDrop=( GetChangingUnitPrevOwner() == Player(PLAYER_NEUTRAL_AGGRESSIVE) )
- endif
- endif
- if ( canDrop ) then
- // Item set 0
- call RandomDistReset()
- call RandomDistAddItem(ChooseRandomItemEx(ITEM_TYPE_CHARGED, 3), 100)
- set itemID=RandomDistChoose()
- if ( trigUnit != null ) then
- call UnitDropItem(trigUnit, itemID)
- else
- call WidgetDropItem(trigWidget, itemID)
- endif
- endif
- set bj_lastDyingWidget=null
- call DestroyTrigger(GetTriggeringTrigger())
- endfunction
- function CreateNeutralHostile takes nothing returns nothing
- local player p= Player(PLAYER_NEUTRAL_AGGRESSIVE)
- local unit u
- local integer unitID
- local trigger t
- local real life
- ...
- set u=CreateUnit(p, 'nomg', - 249.8, 3121.7, 270.000)
- call SetUnitAcquireRange(u, 200.0)
- set t=CreateTrigger()
- call TriggerRegisterUnitEvent(t, u, EVENT_UNIT_DEATH)
- call TriggerRegisterUnitEvent(t, u, EVENT_UNIT_CHANGE_OWNER)
- call TriggerAddAction(t, function Unit000056_DropItems)
- ...
- endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement