# Item Cost

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

1. ### mr_fjNew Member

Ratings:
+10 / 0 / -0
So, is there any way to check the price of an item? Example:
Event
Condition
Price of item is Greater Than or equal to 100
Action
Whatever

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

2. ### SoCal_420Guest

Ratings:
+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 :
Code:
```Trig 1
Events
Time - Every 0.01 seconds of game time
Conditions
Actions
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

Code:
```Buy From Shop
Events
Unit - A unit Sells an item (from shop)
Conditions
Actions
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. ### MoonSlingerI Love using Cheap Tricks... only Results matters

Ratings:
+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.

4. ### mr_fjNew Member

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

More help is welcome from others

Ratings:
+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. ### SteelSoftware Engineer

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

By PitzerMike
JASS:
``````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))
endif
endfunction

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)
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
endfunction

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)
set Diff = GetPlayerState(Player(15),PLAYER_STATE_RESOURCE_GOLD)
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
endfunction``````

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

7. ### mr_fjNew Member

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

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

or is it a custom script? I don't understand custom scripts

Ratings:
+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_

Ratings:
+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:

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

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

JASS:
``set udg_Gold_Value = GetItemGoldCostById(GetItemTypeId(GetSoldItem()))``

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

JASS:
``set udg_Gold_Value = GetItemGoldCostById(GetItemTypeId(GetManipulatedItem()))``