Difference between revisions of "Message Spam"
Updated information on OBSE spamless functions
imported>Haama (→Temp Container: No reason to mess with ownership...) |
imported>QQuix (Updated information on OBSE spamless functions) |
||
(5 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
__NOTOC__[[Category: Useful Code]] | __NOTOC__[[Category: Useful Code]] | ||
Tes4 displays messages to the player whenever: 1) spells are added to, 2) items are added to or removed from the player. For some scripts such messages are very undesirable (e.g. for an alchemical sorters which adds/removes many items). Hence, message "spam". There are several techniques for avoiding this spam. | Tes4 displays messages to the player whenever: 1) spells are added to, 2) items are added to or removed from the player. For some scripts such messages are very undesirable (e.g. for an alchemical sorters which adds/removes many items). Hence, message "spam". There are several techniques for avoiding this spam. | ||
===AddItem - aTemp Container=== | |||
When adding items to the player, spam can be avoided by first adding the item to a container, and then removing the contents from the container to the player. This works because unlike addItem, [[RemoveAllItems]] is silent. | |||
<pre> | |||
tempContainerRef.addItem deathDagger 1 | |||
tempContainerRef.removeAllItems player</pre> | |||
If you're using [[Glossary#C|Cobl]], you can use '''cobGenXFerRef''' for the temporary container -- it's defined for just this sort of use. | |||
'''Note:''' Do ''not'' wait a frame to remove the item to the player. If you do, you run the chance of running the item's script, which in rare circumstances can cause problems. | |||
===Message Queue Overloading=== | ===Message Queue Overloading=== | ||
Simplest technique is to overload the message queue by sending the exact same message twice in a row | Simplest technique is to overload the message queue by sending the exact same message twice in a row <i>before</i> the offending add or remove line, <i>i.e.</i> | ||
<pre>;--No messages. | <pre>;--No messages. | ||
message " " | message " " | ||
message " " | message " " | ||
addItem myItem, 1 | |||
;--OR... Covering message... | ;--OR... Covering message... | ||
message "[You've been pickpocketed!]" | message "[You've been pickpocketed!]" | ||
message "[You've been pickpocketed!]"</pre> | message "[You've been pickpocketed!]" | ||
addItem myItem, 1</pre> | |||
There's no obvious reason why this does or should work, but it does. :shrug: The message that is sent (including a blank message) will still display for the usual time, but messages that would ordinarily appear after it seem to be discarded -- i.e. they never enter the queue. | There's no obvious reason why this does or should work, but it does. :shrug: The message that is sent (including a blank message) will still display for the usual time, but messages that would ordinarily appear after it seem to be discarded -- i.e. they never enter the queue. | ||
'''Con:''' The downside of this approach is that it may block more messages than you want to block. It basically nukes the queue for | '''Con:''' The downside of this approach is that it may block more messages than you want to block. It basically nukes the queue for a second or two -- any message sent by any script or action during that period will be lost. | ||
'''Con:''' Some UI mods add an Oblivion icon for all messages. This icon will still appear for the duration of the message - defeating the purpose of the blank message. | |||
===OBSE Commands=== | ===OBSE Commands=== | ||
OBSE | OBSE provides the following spam free versions as alternatives for vanilla functions that generate spam messages and sound: | ||
*[[ | |||
*[[ | |||
These two functions do not span messages when adding and removing spells: | |||
*[[AddSpellNS]] | |||
*[[RemoveSpellNS]] | |||
These two functions do not span messages when equipping and unequipping: | |||
*[[EquipItemNS]] | *[[EquipItemNS]] | ||
*[[UnequipItemNS]] | *[[UnequipItemNS]] | ||
These functions do not span messages and do not generate the corresponding sound: | |||
*[[AddItemNS]] | |||
*[[RemoveItemNS]] | |||
*[[EquipItemSilent]] | |||
*[[UnequipItemSilent]] | |||
===Item Activate=== | ===Item Activate=== |