Item Cost

Discussion in 'World Editor Help' started by mr_fj, Sep 23, 2007.

  1. mr_fj

    mr_fj New Member

    +10 / 0 / -0
    So, is there any way to check the price of an item? Example:
    Player 1 buys an item
    Price of item is Greater Than or equal to 100
    Whatever :)

    So? Is that possible? If yes, where/how do i find the condition?
  2. SoCal_420

    SoCal_420 Guest

    +0 / 0 / -0
    idk if you can do that but i think you could do it like this
    Create a Variable "itemprice" of type integer
    The First Trigger :
    Trig 1
            Time - Every 0.01 seconds of game time
            Player Group - Pick every player in (All players) and do (Actions)
                Loop - Actions
                    Set itemprice[(Player number of (Picked player))] = ((Picked player) Current gold)
    The Second One

    Buy From Shop
            Unit - A unit Sells an item (from shop)
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    itemprice[(Player number of (Owner of (Buying unit)))] Greater than or equal to 200
                Then - Actions
                    -------- You Action Here.. --------
                Else - Actions
  3. MoonSlinger

    MoonSlinger I Love using Cheap Tricks... only Results matters

    +74 / 0 / -0
    There is no direct way to check the price of an item via trigger.

    If you want, you can always set a reference. Assuming Items only cost gold
    In object editor:
    set the "life" of an item = gold-cost of the item

    That way, you can make reference.
    However, "Life" is Real, while Gold Cost is "Integer" so you will need some conversion.

    Note: there might be side-effects, e.g. A 100,000 worth amulet may becomes almost indestructible. :D
  4. mr_fj

    mr_fj New Member

    +10 / 0 / -0
    Thanks alot, both of you, i hope it works :)

    More help is welcome from others :)
  5. ShadowTek

    ShadowTek New Member

    +23 / 0 / -0
    You could use a modified version of Socal's trigger, but I think the easiest way to do it would be to just make a list of all the items that cost that much, and then use "or" conditions to take the desired action if one of those items are purchased.

    How big a list you will have to make will of course depend on how many items are available for purchase on your map.
  6. Steel

    Steel Software Engineer

    +109 / 0 / -0
    You could use this:

    By PitzerMike
    function GetNextItemEnum takes nothing returns nothing
    if DistanceBetweenPoints(GetItemLoc(GetEnumItem()),GetRectCenter(bj_isUnitGroupInRectRect)) < bj_randomSubGroupChance then
      set bj_itemRandomCurrentPick = GetEnumItem()
      set bj_randomSubGroupChance = DistanceBetweenPoints(GetItemLoc(GetEnumItem()),GetRectCenter(bj_isUnitGroupInRectRect))
    function FindNextItem takes location L returns item
    local real TempR = bj_randomSubGroupChance
    local item TempI = bj_itemRandomCurrentPick
    local item TempItm
    local rect R = bj_isUnitGroupInRectRect
    set bj_randomSubGroupChance = 1000000
    set bj_isUnitGroupInRectRect = RectFromLoc(Location(0,0),Location(2,2))
    call MoveRectToLoc(bj_isUnitGroupInRectRect,L)
    call EnumItemsInRect(GetEntireMapRect(),null,function GetNextItemEnum)
    set bj_randomSubGroupChance = TempR
    call RemoveRect(bj_isUnitGroupInRectRect)
    set bj_isUnitGroupInRectRect = R
    set R = null
    set TempItm = bj_itemRandomCurrentPick
    set bj_itemRandomCurrentPick = TempI
    set TempI = null
    return TempItm
    function GetItemGoldCostById takes integer Uid returns integer
    local integer Val = GetPlayerState(Player(15),PLAYER_STATE_RESOURCE_GOLD)
    local integer ValB = GetPlayerState(Player(15),PLAYER_STATE_RESOURCE_LUMBER)
    local integer Diff
    local unit U = CreateUnitAtLoc(Player(15),'nshe',GetRectCenter(GetPlayableMapRect()),bj_UNIT_FACING)
    call AdjustPlayerStateBJ(50000,Player(15),PLAYER_STATE_RESOURCE_GOLD)
    call AdjustPlayerStateBJ(50000,Player(15),PLAYER_STATE_RESOURCE_LUMBER)
    call UnitAddAbilityBJ('Asid',U)
    set Diff = GetPlayerState(Player(15),PLAYER_STATE_RESOURCE_GOLD)
    call AddItemToStockBJ(Uid,U,1,1)
    call IssueTrainOrderByIdBJ(U,Uid)
    set Diff = Diff - GetPlayerState(Player(15),PLAYER_STATE_RESOURCE_GOLD)
    call SetPlayerState(Player(15),PLAYER_STATE_RESOURCE_GOLD,Val)
    call SetPlayerState(Player(15),PLAYER_STATE_RESOURCE_LUMBER,ValB)
    call RemoveItem(FindNextItem(GetUnitLoc(U)))
    call RemoveUnit(U)
    return Diff

    To use this just do a custom call "set udg_Gold_Value = GetItemGoldCostById('I001')"
  7. mr_fj

    mr_fj New Member

    +10 / 0 / -0
    I don't understand anything :p

    Is it jass? I don't use jass (And i don't want to) :p

    or is it a custom script? I don't understand custom scripts :p
  8. AceHart

    AceHart Your Friendly Neighborhood Admin

    +1,487 / 0 / -0
    It's JASS.
    And, it creates a shop, has some player buy the item, and checks the difference in gold before and after buying.
    It cleans up everything and returns the cost.
  9. TheDamien

    TheDamien _

    +332 / 0 / -0
    Custom Script is Jass.

    Anyway, all you have to do is paste Steel's code into your map header. Have a variable called "Gold_Value", and then, like Steel said, just use a line of custom script to set the gold cost. You will then be able to use the Gold_Value variable as the gold cost of the item.

    For the price of a specific item:

    set udg_Gold_Value = GetItemGoldCostById('<put the 4 character item ID here>')

    For the price of a Sold/Bought/Pawned item:

    set udg_Gold_Value = GetItemGoldCostById(GetItemTypeId(GetSoldItem()))

    For the price of an item being Lost/Acquired/Used:

    set udg_Gold_Value = GetItemGoldCostById(GetItemTypeId(GetManipulatedItem()))

Share This Page