| 1719 | // private |
| 1720 | |
| 1721 | void afxMagicSpell::process_server() |
| 1722 | { |
| 1723 | if (mSpell_state != INACTIVE_STATE) |
| 1724 | mSpell_elapsed += TickSec; |
| 1725 | |
| 1726 | U8 pending_state = mSpell_state; |
| 1727 | |
| 1728 | // check for state changes |
| 1729 | switch (mSpell_state) |
| 1730 | { |
| 1731 | |
| 1732 | case INACTIVE_STATE: |
| 1733 | if (mMarks_mask & MARK_ACTIVATE) |
| 1734 | pending_state = CASTING_STATE; |
| 1735 | break; |
| 1736 | |
| 1737 | case CASTING_STATE: |
| 1738 | if (mDatablock->mCasting_dur > 0.0f && mDatablock->mDo_move_interrupts && is_caster_moving()) |
| 1739 | { |
| 1740 | displayScreenMessage(mCaster, "SPELL INTERRUPTED."); |
| 1741 | postSpellEvent(INTERRUPT_SPELL_EVENT); |
| 1742 | } |
| 1743 | if (mMarks_mask & MARK_INTERRUPT_CASTING) |
| 1744 | pending_state = CLEANUP_STATE; |
| 1745 | else if (mMarks_mask & MARK_END_CASTING) |
| 1746 | pending_state = DELIVERY_STATE; |
| 1747 | else if (mMarks_mask & MARK_LAUNCH) |
| 1748 | pending_state = DELIVERY_STATE; |
| 1749 | else if (state_expired()) |
| 1750 | pending_state = DELIVERY_STATE; |
| 1751 | break; |
| 1752 | |
| 1753 | case DELIVERY_STATE: |
| 1754 | if (mMarks_mask & MARK_INTERRUPT_DELIVERY) |
| 1755 | pending_state = CLEANUP_STATE; |
| 1756 | else if (mMarks_mask & MARK_END_DELIVERY) |
| 1757 | pending_state = LINGER_STATE; |
| 1758 | else if (mMarks_mask & MARK_IMPACT) |
| 1759 | pending_state = LINGER_STATE; |
| 1760 | else if (state_expired()) |
| 1761 | pending_state = LINGER_STATE; |
| 1762 | break; |
| 1763 | |
| 1764 | case LINGER_STATE: |
| 1765 | if (mMarks_mask & MARK_INTERRUPT_LINGER) |
| 1766 | pending_state = CLEANUP_STATE; |
| 1767 | else if (mMarks_mask & MARK_END_LINGER) |
| 1768 | pending_state = CLEANUP_STATE; |
| 1769 | else if (mMarks_mask & MARK_SHUTDOWN) |
| 1770 | pending_state = CLEANUP_STATE; |
| 1771 | else if (state_expired()) |
| 1772 | pending_state = CLEANUP_STATE; |
| 1773 | break; |
| 1774 | |
| 1775 | case CLEANUP_STATE: |
| 1776 | if ((mMarks_mask & MARK_INTERRUPT_CLEANUP) || cleanup_over()) |
| 1777 | pending_state = DONE_STATE; |
| 1778 | break; |