Safe Haskell | None |
---|---|
Language | Haskell2010 |
Handle effects. They are most often caused by requests sent by clients but sometimes also caused by projectiles or periodically activated items.
- applyItem :: MonadServerAtomic m => ActorId -> ItemId -> CStore -> m ()
- meleeEffectAndDestroy :: MonadServerAtomic m => ActorId -> ActorId -> ItemId -> Container -> m ()
- effectAndDestroy :: MonadServerAtomic m => Bool -> ActorId -> ActorId -> ItemId -> Container -> Bool -> [Effect] -> ItemFull -> m ()
- itemEffectEmbedded :: MonadServerAtomic m => ActorId -> Point -> ItemBag -> m ()
- dropCStoreItem :: MonadServerAtomic m => Bool -> CStore -> ActorId -> Actor -> Int -> ItemId -> ItemQuant -> m ()
- dominateFidSfx :: MonadServerAtomic m => FactionId -> ActorId -> m Bool
- pickDroppable :: MonadStateRead m => ActorId -> Actor -> m Container
- refillHP :: MonadServerAtomic m => Bool -> ActorId -> Actor -> Int64 -> m ()
- cutCalm :: MonadServerAtomic m => ActorId -> m ()
- applyMeleeDamage :: MonadServerAtomic m => ActorId -> ActorId -> ItemId -> m Bool
- imperishableKit :: [Effect] -> Bool -> ItemTimer -> ItemFull -> (Bool, ItemQuant)
- itemEffectDisco :: MonadServerAtomic m => ActorId -> ActorId -> ItemId -> Container -> Bool -> Bool -> [Effect] -> m Bool
- effectSem :: MonadServerAtomic m => ActorId -> ActorId -> ItemId -> Container -> Bool -> Bool -> Effect -> m Bool
- effectBurn :: MonadServerAtomic m => Dice -> ActorId -> ActorId -> m Bool
- effectExplode :: MonadServerAtomic m => m () -> GroupName ItemKind -> ActorId -> m Bool
- effectRefillHP :: MonadServerAtomic m => Int -> ActorId -> ActorId -> m Bool
- effectRefillCalm :: MonadServerAtomic m => m () -> Int -> ActorId -> ActorId -> m Bool
- effectDominate :: MonadServerAtomic m => (Effect -> m Bool) -> ActorId -> ActorId -> m Bool
- dominateFid :: MonadServerAtomic m => FactionId -> ActorId -> m Bool
- effectImpress :: MonadServerAtomic m => (Effect -> m Bool) -> m () -> ActorId -> ActorId -> m Bool
- effectSummon :: MonadServerAtomic m => m () -> GroupName ItemKind -> Dice -> ItemId -> ActorId -> ActorId -> Bool -> m Bool
- effectAscend :: MonadServerAtomic m => (Effect -> m Bool) -> m () -> Bool -> ActorId -> ActorId -> Point -> m Bool
- findStairExit :: MonadStateRead m => FactionId -> Bool -> LevelId -> Point -> m Point
- switchLevels1 :: MonadServerAtomic m => (ActorId, Actor) -> m (Maybe ActorId)
- switchLevels2 :: MonadServerAtomic m => LevelId -> Point -> (ActorId, Actor) -> Time -> Maybe ActorId -> m ()
- effectEscape :: MonadServerAtomic m => ActorId -> ActorId -> m Bool
- effectParalyze :: MonadServerAtomic m => m () -> Dice -> ActorId -> m Bool
- effectInsertMove :: MonadServerAtomic m => m () -> Dice -> ActorId -> m Bool
- effectTeleport :: MonadServerAtomic m => m () -> Dice -> ActorId -> ActorId -> m Bool
- effectCreateItem :: MonadServerAtomic m => Maybe FactionId -> Maybe Int -> ActorId -> CStore -> GroupName ItemKind -> TimerDice -> m Bool
- effectDropItem :: MonadServerAtomic m => m () -> Int -> Int -> CStore -> GroupName ItemKind -> ActorId -> m Bool
- allGroupItems :: MonadServerAtomic m => CStore -> GroupName ItemKind -> ActorId -> m [(ItemId, ItemQuant)]
- effectPolyItem :: MonadServerAtomic m => m () -> ActorId -> ActorId -> m Bool
- effectIdentify :: MonadServerAtomic m => m () -> ItemId -> ActorId -> ActorId -> m Bool
- identifyIid :: MonadServerAtomic m => ItemId -> Container -> Id ItemKind -> m ()
- effectDetect :: MonadServerAtomic m => m () -> Int -> ActorId -> m Bool
- effectDetectX :: MonadServerAtomic m => (Point -> Bool) -> ([Point] -> m Bool) -> m () -> Int -> ActorId -> m Bool
- effectDetectActor :: MonadServerAtomic m => m () -> Int -> ActorId -> m Bool
- effectDetectItem :: MonadServerAtomic m => m () -> Int -> ActorId -> m Bool
- effectDetectExit :: MonadServerAtomic m => m () -> Int -> ActorId -> m Bool
- effectDetectHidden :: MonadServerAtomic m => m () -> Int -> ActorId -> Point -> m Bool
- effectSendFlying :: MonadServerAtomic m => m () -> ThrowMod -> ActorId -> ActorId -> Maybe Bool -> m Bool
- sendFlyingVector :: MonadServerAtomic m => ActorId -> ActorId -> Maybe Bool -> m Vector
- effectDropBestWeapon :: MonadServerAtomic m => m () -> ActorId -> m Bool
- effectActivateInv :: MonadServerAtomic m => m () -> ActorId -> Char -> m Bool
- effectTransformEqp :: forall m. MonadServerAtomic m => m () -> ActorId -> Char -> CStore -> (ItemId -> ItemQuant -> m ()) -> m Bool
- effectApplyPerfume :: MonadServerAtomic m => m () -> ActorId -> m Bool
- effectOneOf :: MonadServerAtomic m => (Effect -> m Bool) -> [Effect] -> m Bool
- effectRecharging :: MonadServerAtomic m => (Effect -> m Bool) -> Effect -> Bool -> m Bool
- effectTemporary :: MonadServerAtomic m => m () -> ActorId -> ItemId -> Container -> m Bool
- effectComposite :: MonadServerAtomic m => (Effect -> m Bool) -> [Effect] -> m Bool
Documentation
meleeEffectAndDestroy :: MonadServerAtomic m => ActorId -> ActorId -> ItemId -> Container -> m () Source #
effectAndDestroy :: MonadServerAtomic m => Bool -> ActorId -> ActorId -> ItemId -> Container -> Bool -> [Effect] -> ItemFull -> m () Source #
itemEffectEmbedded :: MonadServerAtomic m => ActorId -> Point -> ItemBag -> m () Source #
dropCStoreItem :: MonadServerAtomic m => Bool -> CStore -> ActorId -> Actor -> Int -> ItemId -> ItemQuant -> m () Source #
Drop a single actor's item. Note that if there are multiple copies, at most one explodes to avoid excessive carnage and UI clutter (let's say, the multiple explosions interfere with each other or perhaps larger quantities of explosives tend to be packaged more safely).
dominateFidSfx :: MonadServerAtomic m => FactionId -> ActorId -> m Bool Source #
pickDroppable :: MonadStateRead m => ActorId -> Actor -> m Container Source #
cutCalm :: MonadServerAtomic m => ActorId -> m () Source #
Internal operations
applyMeleeDamage :: MonadServerAtomic m => ActorId -> ActorId -> ItemId -> m Bool Source #
itemEffectDisco :: MonadServerAtomic m => ActorId -> ActorId -> ItemId -> Container -> Bool -> Bool -> [Effect] -> m Bool Source #
The source actor affects the target actor, with a given item.
If any of the effects fires up, the item gets identified. This function
is mutually recursive with effect
and so it's a part of Effect
semantics.
Note that if we activate a durable item, e.g., armor, from the ground, it will get identified, which is perfectly fine, until we want to add sticky armor that can't be easily taken off (and, e.g., has some maluses).
effectSem :: MonadServerAtomic m => ActorId -> ActorId -> ItemId -> Container -> Bool -> Bool -> Effect -> m Bool Source #
The source actor affects the target actor, with a given effect and power. Both actors are on the current level and can be the same actor. The item may or may not still be in the container. The boolean result indicates if the effect actually fired up, as opposed to fizzled.
effectBurn :: MonadServerAtomic m => Dice -> ActorId -> ActorId -> m Bool Source #
effectExplode :: MonadServerAtomic m => m () -> GroupName ItemKind -> ActorId -> m Bool Source #
effectRefillHP :: MonadServerAtomic m => Int -> ActorId -> ActorId -> m Bool Source #
effectRefillCalm :: MonadServerAtomic m => m () -> Int -> ActorId -> ActorId -> m Bool Source #
effectDominate :: MonadServerAtomic m => (Effect -> m Bool) -> ActorId -> ActorId -> m Bool Source #
dominateFid :: MonadServerAtomic m => FactionId -> ActorId -> m Bool Source #
effectImpress :: MonadServerAtomic m => (Effect -> m Bool) -> m () -> ActorId -> ActorId -> m Bool Source #
effectSummon :: MonadServerAtomic m => m () -> GroupName ItemKind -> Dice -> ItemId -> ActorId -> ActorId -> Bool -> m Bool Source #
effectAscend :: MonadServerAtomic m => (Effect -> m Bool) -> m () -> Bool -> ActorId -> ActorId -> Point -> m Bool Source #
findStairExit :: MonadStateRead m => FactionId -> Bool -> LevelId -> Point -> m Point Source #
switchLevels1 :: MonadServerAtomic m => (ActorId, Actor) -> m (Maybe ActorId) Source #
switchLevels2 :: MonadServerAtomic m => LevelId -> Point -> (ActorId, Actor) -> Time -> Maybe ActorId -> m () Source #
effectEscape :: MonadServerAtomic m => ActorId -> ActorId -> m Bool Source #
The faction leaves the dungeon.
effectParalyze :: MonadServerAtomic m => m () -> Dice -> ActorId -> m Bool Source #
Advance target actor time by this many time clips. Not by actor moves, to hurt fast actors more.
effectInsertMove :: MonadServerAtomic m => m () -> Dice -> ActorId -> m Bool Source #
Give target actor the given number of extra moves. Don't give an absolute amount of time units, to benefit slow actors more.
effectTeleport :: MonadServerAtomic m => m () -> Dice -> ActorId -> ActorId -> m Bool Source #
Teleport the target actor. Note that projectiles can be teleported, too, for extra fun.
effectCreateItem :: MonadServerAtomic m => Maybe FactionId -> Maybe Int -> ActorId -> CStore -> GroupName ItemKind -> TimerDice -> m Bool Source #
effectDropItem :: MonadServerAtomic m => m () -> Int -> Int -> CStore -> GroupName ItemKind -> ActorId -> m Bool Source #
Make the target actor drop all items in a store from the given group (not just a random single item, or cluttering equipment with rubbish would be beneficial).
allGroupItems :: MonadServerAtomic m => CStore -> GroupName ItemKind -> ActorId -> m [(ItemId, ItemQuant)] Source #
effectPolyItem :: MonadServerAtomic m => m () -> ActorId -> ActorId -> m Bool Source #
effectIdentify :: MonadServerAtomic m => m () -> ItemId -> ActorId -> ActorId -> m Bool Source #
identifyIid :: MonadServerAtomic m => ItemId -> Container -> Id ItemKind -> m () Source #
effectDetect :: MonadServerAtomic m => m () -> Int -> ActorId -> m Bool Source #
effectDetectX :: MonadServerAtomic m => (Point -> Bool) -> ([Point] -> m Bool) -> m () -> Int -> ActorId -> m Bool Source #
effectDetectActor :: MonadServerAtomic m => m () -> Int -> ActorId -> m Bool Source #
effectDetectItem :: MonadServerAtomic m => m () -> Int -> ActorId -> m Bool Source #
effectDetectExit :: MonadServerAtomic m => m () -> Int -> ActorId -> m Bool Source #
effectDetectHidden :: MonadServerAtomic m => m () -> Int -> ActorId -> Point -> m Bool Source #
effectSendFlying :: MonadServerAtomic m => m () -> ThrowMod -> ActorId -> ActorId -> Maybe Bool -> m Bool Source #
Send the target actor flying like a projectile. The arguments correspond
to ToThrow
and Linger
properties of items. If the actors are adjacent,
the vector is directed outwards, if no, inwards, if it's the same actor,
boldpos is used, if it can't, a random outward vector of length 10
is picked.
sendFlyingVector :: MonadServerAtomic m => ActorId -> ActorId -> Maybe Bool -> m Vector Source #
effectDropBestWeapon :: MonadServerAtomic m => m () -> ActorId -> m Bool Source #
Make the target actor drop his best weapon (stack).
effectActivateInv :: MonadServerAtomic m => m () -> ActorId -> Char -> m Bool Source #
Activate all items with the given symbol in the target actor's equipment (there's no variant that activates a random one, to avoid the incentive for carrying garbage). Only one item of each stack is activated (and possibly consumed).
effectTransformEqp :: forall m. MonadServerAtomic m => m () -> ActorId -> Char -> CStore -> (ItemId -> ItemQuant -> m ()) -> m Bool Source #
effectApplyPerfume :: MonadServerAtomic m => m () -> ActorId -> m Bool Source #
effectOneOf :: MonadServerAtomic m => (Effect -> m Bool) -> [Effect] -> m Bool Source #
effectRecharging :: MonadServerAtomic m => (Effect -> m Bool) -> Effect -> Bool -> m Bool Source #
effectTemporary :: MonadServerAtomic m => m () -> ActorId -> ItemId -> Container -> m Bool Source #
effectComposite :: MonadServerAtomic m => (Effect -> m Bool) -> [Effect] -> m Bool Source #