Fix inventory swapping equipment bug

This commit is contained in:
2022-05-22 15:50:25 +01:00
parent fd40da2d4a
commit b83392d441
8 changed files with 45 additions and 18 deletions
+5 -5
View File
@@ -210,12 +210,13 @@ dropExcept cr invid w = foldr (dropItem cr) w . IM.keys
$ invid `IM.delete` _crInv cr
dropItem :: Creature -> Int -> World -> World
dropItem cr invid = rmInvItem cid invid . copyInvItemToFloor cr invid . mayberemoveequip
dropItem cr invid = rmInvItem cid invid . copyInvItemToFloor cr invid -- . mayberemoveequip
where
cid = _crID cr
mayberemoveequip = case _crLeftInvSel cr of
Just i | i == invid -> creatures . ix cid . crLeftInvSel .~ Nothing
_ -> id
-- the following should be done in rmInvItem
-- mayberemoveequip = case _crLeftInvSel cr of
-- Just i | i == invid -> creatures . ix cid . crLeftInvSel .~ Nothing
-- _ -> id
youDropItem :: World -> World
youDropItem w
@@ -239,7 +240,6 @@ copyInvItemToFloor cr i = copyItemToFloor (_crPos cr)
& itIsHeld .~ False
)
sizeSelf :: Float -> Creature -> World -> Maybe World
sizeSelf x cr w
-- | _crPos cr1 == _crPos cr2 = Just $ w
+1 -1
View File
@@ -28,7 +28,7 @@ crMvAbsolute p' cr = advanceStepCounter (magV p) cr
strengthFactor :: Int -> Float
strengthFactor i
| i > 9 = 1
| i < 1 = 0.1
| i < 1 = 0
| otherwise = 0.1 * fromIntegral i
crMvForward
+4 -2
View File
@@ -71,11 +71,13 @@ eqSiteToPos cr es = case es of
useLeftItem :: Int -> World -> World
useLeftItem cid w
| _crInvLock cr = w
| itConsumable = useItem cr w
| itmShouldBeUsed = useItem cr w
| otherwise = fromMaybe w $ do
invid <- _crLeftInvSel cr
f <- cr ^? crInv . ix invid . itUse . lUse
return $ f cr invid w
where
cr = _creatures w IM.! cid
itConsumable = isJust $ cr ^? crInv . ix (_crInvSel cr) . itUse . cUse
itmShouldBeUsed = isJust (cr ^? crInv . ix (_crInvSel cr) . itUse . cUse)
|| isJust (cr ^? crInv . ix (_crInvSel cr) . itUse . eqUse)
-- TODO determine itmShouldBeUsed with reference to config options
+1 -1
View File
@@ -16,7 +16,7 @@ strFromEquipment = sum . fmap equipmentStrValue . crCurrentEquipment
equipmentStrValue :: Item -> Int
equipmentStrValue itm = case _itType itm of
FRONTARMOUR -> negate 1
FRONTARMOUR -> negate 3
POWERLEGS -> 3
_ -> 0