For any modder wondering how this is possible I discovered an unused, and therefore hidden, "Boosts" function for use in item Status definitions: Weight(float x) = adds x kg to the weight of the boosted item
But, be warned, weight is an unsigned integer, so if you go negative it wraps around.
I can buy them, although they are labeled "Not Found", but they weigh 2250 pounds for the small ones and they cost about 1,000 gold! Once you realize they're worthless, the vendor will buy them back for 190 gold. That's a helluva mark up!
I tried to figure out what the Problem is but i cant seem to find it. I know it has two Problems 1 it doesnt reset the weight on character yes we can go around it with setting the weight of the bags to an - weight. But the Second Problem is not that simple the code for Reducing the weight doesnt seem to work either.
Either Larian has changed something about the calculation or the function itself doesnt work anymore. i know this two code parts are the Problem but i cant figure out a fix sadly.
another small Problem is the missing .Loca file for the Localisation for that i need to find out how to make one. The localisation itself is in the mod just without .Loca file
If someone see an Obvious typo or Fix let me pls know and i try it.
First Code Part Reset weight:
Spoiler:
Show
INIT ITEM:__Me FLOAT:%TotalWeight EVENTS EVENT ItemGainedStatus VARS CHARACTER:_Player INT:_PlayerIterator ON OnItemStatus(__Me,_) ACTIONS IF "c1" GetPlayerCount(_PlayerIterator) THEN WHILE "c1" IsGreaterThen(_PlayerIterator, 0) DO Subtract(_PlayerIterator, INT:1) IF "c1&c2" GetPlayerByIndex(_Player, _PlayerIterator) ItemIsInCharacterInventory(__Me, _Player) THEN //DisplayText(_Player, FIXEDSTRING:"Owner Found", 100) Set(_PlayerIterator,0) CharacterAddToInventory(_Player,"OBJ_ThrowingRock",1)//Hack to force refresh of character carry weight correctly CharacterRemoveFromInventory(_Player,"OBJ_ThrowingRock",1) ENDIF ENDWHILE ENDIF
EVENT ItemCheckWeight VARS ITEM:_Item FLOAT:_Weight ON OnIterateItem(_Item,"GatherTotalWeight") ACTIONS IF "!c1&!c2&!c3&!c4&c5" IsEqual(_Item,null) ItemIsMoving(_Item) ItemIsFalling(_Item) ItemIsDestroyed(_Item) ItemGetStat(_Weight,_Item,Weight) THEN Add(%TotalWeight,_Weight) ENDIF
EVENT UpdateContents VARS STRING:_str FIXEDSTRING:_fixed CHARACTER:_Player INT:_PlayerIterator ON OnItemClosed(__Me) OnItemOpened(__Me) OnPickupItem(_,__Me)
IF "c1" IsGreaterThen(%TotalWeight,200000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_200000",-1) Subtract(%TotalWeight,200000) ELSE IF "c1" IsGreaterThen(%TotalWeight,100000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_100000",-1) Subtract(%TotalWeight,100000) ENDIF ENDIF IF "c1" IsGreaterThen(%TotalWeight,90000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_90000",-1) Subtract(%TotalWeight,90000) ELSE IF "c1" IsGreaterThen(%TotalWeight,80000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_80000",-1) Subtract(%TotalWeight,80000) ELSE IF "c1" IsGreaterThen(%TotalWeight,70000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_70000",-1) Subtract(%TotalWeight,70000) ELSE IF "c1" IsGreaterThen(%TotalWeight,60000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_60000",-1) Subtract(%TotalWeight,60000) ELSE IF "c1" IsGreaterThen(%TotalWeight,50000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_50000",-1) Subtract(%TotalWeight,50000) ELSE IF "c1" IsGreaterThen(%TotalWeight,40000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_40000",-1) Subtract(%TotalWeight,40000) ELSE IF "c1" IsGreaterThen(%TotalWeight,30000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_30000",-1) Subtract(%TotalWeight,30000) ELSE IF "c1" IsGreaterThen(%TotalWeight,20000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_20000",-1) Subtract(%TotalWeight,20000) ELSE IF "c1" IsGreaterThen(%TotalWeight,10000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_10000",-1) Subtract(%TotalWeight,10000) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF "c1" IsGreaterThen(%TotalWeight,9000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_9000",-1) Subtract(%TotalWeight,9000) ELSE IF "c1" IsGreaterThen(%TotalWeight,8000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_8000",-1) Subtract(%TotalWeight,8000) ELSE IF "c1" IsGreaterThen(%TotalWeight,7000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_7000",-1) Subtract(%TotalWeight,7000) ELSE IF "c1" IsGreaterThen(%TotalWeight,6000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_6000",-1) Subtract(%TotalWeight,6000) ELSE IF "c1" IsGreaterThen(%TotalWeight,5000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_5000",-1) Subtract(%TotalWeight,5000) ELSE IF "c1" IsGreaterThen(%TotalWeight,4000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_4000",-1) Subtract(%TotalWeight,4000) ELSE IF "c1" IsGreaterThen(%TotalWeight,3000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_3000",-1) Subtract(%TotalWeight,3000) ELSE IF "c1" IsGreaterThen(%TotalWeight,2000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_2000",-1) Subtract(%TotalWeight,2000) ELSE IF "c1" IsGreaterThen(%TotalWeight,1000) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_1000",-1) Subtract(%TotalWeight,1000) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF "c1" IsGreaterThen(%TotalWeight,900) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_900",-1) ELSE IF "c1" IsGreaterThen(%TotalWeight,800) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_800",-1) ELSE IF "c1" IsGreaterThen(%TotalWeight,700) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_700",-1) ELSE IF "c1" IsGreaterThen(%TotalWeight,600) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_600",-1) ELSE IF "c1" IsGreaterThen(%TotalWeight,500) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_500",-1) ELSE IF "c1" IsGreaterThen(%TotalWeight,400) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_400",-1) ELSE IF "c1" IsGreaterThen(%TotalWeight,300) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_300",-1) ELSE IF "c1" IsGreaterThen(%TotalWeight,200) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_200",-1) ELSE IF "c1" IsGreaterThen(%TotalWeight,100) THEN ItemApplyStatus(__Me,"REDUCE_WEIGHT_100",-1) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF
50 comments
I discovered an unused, and therefore hidden, "Boosts" function for use in item Status definitions:
Weight(float x) = adds x kg to the weight of the boosted item
But, be warned, weight is an unsigned integer, so if you go negative it wraps around.
At the vendor the bag does show up, but its labeled Not Found - and I cant buy them.
Either Larian has changed something about the calculation or the function itself doesnt work anymore. i know this two code parts are the Problem but i cant figure out a fix sadly.
another small Problem is the missing .Loca file for the Localisation for that i need to find out how to make one. The localisation itself is in the mod just without .Loca file
If someone see an Obvious typo or Fix let me pls know and i try it.
First Code Part Reset weight:
INIT
ITEM:__Me
FLOAT:%TotalWeight
EVENTS
EVENT ItemGainedStatus
VARS
CHARACTER:_Player
INT:_PlayerIterator
ON
OnItemStatus(__Me,_)
ACTIONS
IF "c1"
GetPlayerCount(_PlayerIterator)
THEN
WHILE "c1"
IsGreaterThen(_PlayerIterator, 0)
DO
Subtract(_PlayerIterator, INT:1)
IF "c1&c2"
GetPlayerByIndex(_Player, _PlayerIterator)
ItemIsInCharacterInventory(__Me, _Player)
THEN
//DisplayText(_Player, FIXEDSTRING:"Owner Found", 100)
Set(_PlayerIterator,0)
CharacterAddToInventory(_Player,"OBJ_ThrowingRock",1)//Hack to force refresh of character carry weight correctly
CharacterRemoveFromInventory(_Player,"OBJ_ThrowingRock",1)
ENDIF
ENDWHILE
ENDIF
EVENT ItemCheckWeight
VARS
ITEM:_Item
FLOAT:_Weight
ON
OnIterateItem(_Item,"GatherTotalWeight")
ACTIONS
IF "!c1&!c2&!c3&!c4&c5"
IsEqual(_Item,null)
ItemIsMoving(_Item)
ItemIsFalling(_Item)
ItemIsDestroyed(_Item)
ItemGetStat(_Weight,_Item,Weight)
THEN
Add(%TotalWeight,_Weight)
ENDIF
EVENT UpdateContents
VARS
STRING:_str
FIXEDSTRING:_fixed
CHARACTER:_Player
INT:_PlayerIterator
ON
OnItemClosed(__Me)
OnItemOpened(__Me)
OnPickupItem(_,__Me)
Second Code Part is the Reducing element:
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_200000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_100000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_90000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_80000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_70000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_60000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_50000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_40000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_30000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_20000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_10000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_9000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_8000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_7000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_6000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_5000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_4000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_3000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_2000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_1000")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_900")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_800")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_700")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_600")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_500")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_400")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_300")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_200")
ItemRemoveStatus(__Me, "REDUCE_WEIGHT_100")
Set(%TotalWeight,0.0)
IterateItemsInInventory(__Me,"GatherTotalWeight")
IF "c1"
IsGreaterThen(%TotalWeight,200000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_200000",-1)
Subtract(%TotalWeight,200000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,100000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_100000",-1)
Subtract(%TotalWeight,100000)
ENDIF
ENDIF
IF "c1"
IsGreaterThen(%TotalWeight,90000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_90000",-1)
Subtract(%TotalWeight,90000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,80000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_80000",-1)
Subtract(%TotalWeight,80000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,70000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_70000",-1)
Subtract(%TotalWeight,70000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,60000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_60000",-1)
Subtract(%TotalWeight,60000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,50000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_50000",-1)
Subtract(%TotalWeight,50000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,40000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_40000",-1)
Subtract(%TotalWeight,40000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,30000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_30000",-1)
Subtract(%TotalWeight,30000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,20000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_20000",-1)
Subtract(%TotalWeight,20000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,10000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_10000",-1)
Subtract(%TotalWeight,10000)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF "c1"
IsGreaterThen(%TotalWeight,9000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_9000",-1)
Subtract(%TotalWeight,9000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,8000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_8000",-1)
Subtract(%TotalWeight,8000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,7000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_7000",-1)
Subtract(%TotalWeight,7000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,6000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_6000",-1)
Subtract(%TotalWeight,6000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,5000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_5000",-1)
Subtract(%TotalWeight,5000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,4000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_4000",-1)
Subtract(%TotalWeight,4000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,3000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_3000",-1)
Subtract(%TotalWeight,3000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,2000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_2000",-1)
Subtract(%TotalWeight,2000)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,1000)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_1000",-1)
Subtract(%TotalWeight,1000)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF "c1"
IsGreaterThen(%TotalWeight,900)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_900",-1)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,800)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_800",-1)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,700)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_700",-1)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,600)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_600",-1)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,500)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_500",-1)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,400)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_400",-1)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,300)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_300",-1)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,200)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_200",-1)
ELSE
IF "c1"
IsGreaterThen(%TotalWeight,100)
THEN
ItemApplyStatus(__Me,"REDUCE_WEIGHT_100",-1)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF