Wowpedia

We have moved to Warcraft Wiki. Click here for information and the new URL.

READ MORE

Wowpedia
 
m (→‎Rank table: cleanup)
 
Line 1: Line 1:
  +
{{removedfromgame||patch=4.0.1}}
'''ChatThrottleLib''' is a small, embeddable library by [[User:Mikk|Mikk]] that keeps outbound chat and addon communication from exceeding the output rate limit in WoW that otherwise causes players to disconnect from the server. It also has a number of features that will help you make your addon communication run smoother!
 
  +
<onlyinclude>{{Infobox ability
  +
|name=Deathchill
  +
|image=Spell_Shadow_SoulLeech_2
  +
|description=When activated increases your critical strike chance with Frost spells and abilities by 100% for the next 6 sec.
  +
|class=[[Death knight]]
  +
|type=Offensive
  +
|school=Frost
  +
|cost=
  +
|costunit=
  +
|range=
  +
|rangeunit=
  +
|cast_time=Instant
  +
|cooldown=2 mins
  +
|talented=Yes
  +
|talent_tree=Frost, Tier 5
  +
|talent_req=Deathchill
  +
|improvement=
  +
|ranks=??
  +
|requirements=
  +
|buff_name=Deathchill
  +
|buff_image=Spell_Shadow_SoulLeech_2
  +
|buff_type=
  +
|buff_desc=Increases critical strike chance with Frost spells and abilties by 100%.
  +
|buff_dur=6 secs
  +
}}</onlyinclude>
   
  +
'''Deathchill''' was a [[Death knight]] ability that allows the death knight to increase their chance to critically strike a target with frost spell and abilities by 100%.
   
  +
<!--This is the rank table. Replace numbers in table when possible
Benefits of using ChatThrottleLib:
 
  +
== Rank table ==
* You keep players from getting disconnected when your addon sends too much data
 
  +
{| class="darktable" style="text-align: center;"
* You can easily ''prioritize'' your traffic in three priorities
 
  +
|-
* Communication to different peers is handled as individual flows. A long stream of data to "Alice" doesn't interrupt short bursts of traffic to "Bob".
 
  +
! Rank !! Level !! [[Energy]]/[[Mana]]/[[Rage]] Cost !! Damage !! Cost
* All AddOns using ChatThrottleLib use the same queues, so multiple addons can't cause an overload. Priorities ensure that real-time traffic is still real-time.
 
  +
|-
  +
| 1 || 30 || 15 || + 32 || {{cost|1|8}}
  +
|-class="alt"
  +
| 2 || 38 || 15 || + 43 || {{cost|1|80}}
  +
|-
  +
| 3 || 46 || 15 || + 68 || {{cost|3|24}}
  +
|-class="alt"
  +
| 4 || 54 || 15 || + 87 || {{cost|5|4}}
  +
|-
  +
| 5 || 61 || 15 || + 105 || {{cost|5|85}}
  +
|-class="alt"
  +
| 6 {{bc-inline}} || 69 || 15 || + 140 || {{cost|5|85}}
  +
|}
  +
-->
   
  +
==External links==
  +
<!-- Read http://www.wowpedia.org/Wowpedia:External_links before posting your links here.
  +
Links that do not conform to the rules will be DELETED.
  +
Repeat violations may result in a BAN.
  +
Have a nice day. :) -->
  +
{{elinks-spell|49796}}
   
[[image:ChatThrottleLib.gif|thumb|ChatThrottleLib throughput sample]]
 
   
  +
{{classfooter|Death knight}}
ChatThrottleLib does:
 
* '''Round-robin traffic shaping''' of different communication paths
 
* '''Prioritization''' of messages according to three predefined priorities: "BULK", "NORMAL" and "ALERT"
 
* '''NO''' queueing of traffic needlessly. No lag is introduced until it needs to be.
 
* '''Adaptive throttling''' based on chat traffic bypassing the library
 
* '''Adaptive throttling''' based on framerate
 
   
   
  +
[[es:Escalofrío de muerte]]
== Communications libraries already using ChatThrottleLib ==
 
  +
[[Category:Death knight abilities]]
<div style="margin-left: 3%;">
 
 
[[Category:Spells]]
 
* [http://wiki.wowace.com/index.php/AceComm-2.0 AceComm] ([[Ace]]'s communications library)
 
* [[Telepathy]] ([[Sky]]'s replacement as of 1.12)
 
 
If you are communicating through these libraries, you do not need to worry about throttling at all. And if you are depending on them / including them, ChatThrottleLib is already there and does not need to be included again; you can use it directly for regular chat.
 
 
 
</div>
 
 
== ChatThrottleLib APIs ==
 
<div style="margin-left: 3%;">
 
 
=== ChatThrottleLib:SendChatMessage ===
 
<div style="margin-left: 3%;">
 
 
ChatThrottleLib:SendChatMessage("prio", "prefix", "text", "chattype", "language", "destination");
 
 
;prio:String - "BULK", "NORMAL" or "ALERT".
 
;prefix:String - a unique identifier for your addon (or class of traffic). This is only for traffic shaping purposes; prefixes are used in creating unique flows that are processed round-robin inside each priority.
 
:May be '''nil''', in which case tostring(this) will be used instead.
 
The following parameters are the same as the [[API SendChatMessage|SendChatMessage]]() API:
 
;text:String - the text to be sent
 
;chattype:String - "SAY", "WHISPER", "CHANNEL", etc...
 
;language:String or nil
 
;destination:String or nil - Used for WHISPER, CHANNEL..
 
 
 
</div>
 
 
=== ChatThrottleLib:SendAddonMessage ===
 
<div style="margin-left: 3%;">
 
 
ChatThrottleLib:SendAddonMessage("prio", "prefix", "text", "chattype");
 
 
;prio:String - "BULK", "NORMAL", or "ALERT".
 
The following parameters are the same as the [[API SendAddonMessage|SendAddonMessage]]() API:
 
;prefix:String - a unique identifier for your addon (or class of traffic)
 
;text:String - the text to be sent
 
;chattype:String - "PARTY", "RAID", "GUILD", "BATTLEGROUND"
 
 
 
</div>
 
 
</div>
 
 
== Notes on outbound rate ==
 
<div style="margin-left: 3%">
 
 
The World of Warcraft servers will disconnect you if you generate too much output. This is not limited to chat output; any type of output can cause it. Some of you may have noticed that holding down your right mouse button and wiggling it wildly for an extended time can kick you off.
 
 
 
In my own testing, I've found that a data rate of 3000 CPS will cause a disconnect if sustained for more than a few seconds. There seems to be an input buffer of something along the lines of 32KBytes serverside. Filling it would be what causes the kick.
 
 
A total output of 2000 CPS seems safe.
 
 
ChatThrottleLib will allow '''bursts of up to 4000 bytes''' and after that '''throttle its output to 800 CPS''', to allow room for actual game events. This used to be 8000/1000 but some servers seem more sensitive than others. See this [http://www.cosmosui.org/forums/viewtopic.php?t=15916 cosmosui.org forum thread].
 
 
 
ChatThrottleLib will also assume that there's a 40-byte overhead associated with sending messages, so if you're sending "hi", it will count as 42 bytes for traffic shaping purposes. It's fairly unscientific, I'm assuming it's fair estimate of source + destination + chattype + some envisioned protocol overhead.
 
 
40 bytes seems a bit on the high side for sending data, possibly because the sender does not need to be included (obviously), but it seems about right on the receiving end from measuring actual network traffic (excluding ethernet+IP+TCP headers).
 
 
 
As of v11, ChatThrottleLib also assumes that the server-side rate limiter is somewhat cranky shortly after logon and zoning, and only allows a tenth of the normal rate for the first 5 seconds. This is based on observations from [[PartyQuests]], which used to send the entire quest log (plus texts) to party members - immediately after login if you are logging in to a player still in a party. It has been seen to cause disconnects on at least one server.
 
 
 
</div>
 
 
== Throttling algorithms ==
 
<div style="margin-left: 3%">
 
 
There are two types of traffic shaping going on in ChatThrottleLib.
 
 
=== Per-stream shaping ===
 
<div style="margin-left: 3%;">
 
 
Each prefix + chattype (+ destination) tuple is treated as a separate stream. Streams output is simply round-robined, i.e. they get the same amount of messages per second. Not necessarily the same CPS though. Doing full-out data rate shaping seemed like unnecessary overhead for very little gain.
 
 
</div>
 
 
=== Prioritization ===
 
<div style="margin-left: 3%;">
 
 
Traffic in the three priorities will be fully data rate shaped so that the net output stays at 1000 CPS. Higher priorities do not force lower priority traffic out of the way utterly. In a fully loaded system (with full output in all priorities), each priority gets 1/3rd of the available bandwidth.
 
 
It is fully balanced. Examples of attempted transmit rates and actual output results:
 
 
* <small>'''BULK'''</small> 500 CPS. <small>'''NORMAL'''</small> 500 CPS. <small>'''ALERT'''</small> 200 CPS
 
** Bulk gets 400
 
** Normal gets 400
 
** Alert gets 200
 
 
* <small>'''BULK'''</small> 1500 CPS. <small>'''NORMAL'''</small> 200 CPS. <small>'''ALERT'''</small> 500 CPS
 
** Bulk gets 400
 
** Normal gets 200
 
** Alert gets 400
 
 
* <small>'''BULK'''</small> 1200 CPS. <small>'''NORMAL'''</small> 0 CPS. <small>'''ALERT'''</small> 100 CPS
 
** Bulk gets 900
 
** Normal gets 0
 
** Alert gets 100
 
 
* <small>'''BULK'''</small> 0 CPS. <small>'''NORMAL'''</small> 500 CPS. <small>'''ALERT'''</small> 400 CPS
 
** Bulk gets 0
 
** Normal gets 500
 
** Alert gets 400
 
 
 
See [[:Image:ChatThrottleLib.gif|this example graph]] for an illustration of how output in different priorities will be shaped over time.
 
 
</div>
 
 
If you would like to see rate changes in action during development, load ChatThrottleStats.lua in your addon. It displays a small string in the top left corner of your screen showing current rate through the library, burst availability, and rate of traffic bypassing the library. FPS based throttling being in effect causes the string to go red.
 
 
</div>
 
 
== Change Log ==
 
<div style="margin-left: 3%">
 
 
=== v7 ===
 
 
* Adaptive throttling according to FPS
 
* Adaptive throttling according to traffic bypassing the lib
 
* Allow prefix to be nil in :SendChatMessage()
 
 
=== v9 ===
 
 
* Fix SendAddonMessage() hook ending up feeding messages to SendChatMessage(). OOPS! Thank god for test realms.
 
 
=== v10 ===
 
 
* Will no longer "hook" SendAddonMessage if it doesn't exist. Might fool some addon into thinking that an 1.11 client is 1.12.
 
 
=== v11 ===
 
 
''Aug 25 2006''
 
 
* ''Some'' servers (sometimes?) seem to be cranky about lots of data being sent right after logon, such as e.g. [[PartyQuests]] will do if you log in while a member of a party. ChatThrottleLib v11 clamps the maximum output rate to a tenth for the 5 first seconds after logon (and zoning, just to be safe) in an attempt to work around it. I have not been able to reproduce this bug myself though, so it's somewhat of a stab in the dark.
 
 
=== v12 ===
 
 
''Sep 14 2006''
 
 
* Decrease max CPS to 800. Decrease max burst to 4000 bytes. See this [http://www.cosmosui.org/forums/viewtopic.php?t=15916 cosmosui.org forum thread].
 
 
</div>
 
 
== How to use ChatThrottleLib ==
 
<div style="margin-left: 3%">
 
 
* Download ChatThrottleLib from [http://www.wowinterface.com/downloads/info5207-ChatThrottleLib.html wowinterface.com].
 
 
{{spc}}
 
'''Method 1:'''
 
 
* Copy ChatThrottleLib.lua into your addon directory
 
* Add "ChatThrottleLib.lua" to your .toc file
 
 
{{spc}}
 
'''Method 2:'''
 
 
* Copy the entire ChatThrottleLib folder into your addon directory, as a sub folder
 
* Add "ChatThrottleLib/ChatThrottleLib.xml" to your .toc file
 
 
 
You're done, and can now use ChatThrottleLib:SendChatMessage and ChatThrottleLib:SendAddonMessage to send your messages!
 
 
 
The library has built-in checks for if it has already been loaded, and avoids loading again if so.
 
 
If your addon has a newer version of the library than one that has already been loaded, it will replace the old version.
 
 
 
</div>
 
[[Category:Function Libraries]]
 

Revision as of 13:41, 14 March 2011

Deathchill
Spell shadow soulleech 2
  • Deathchill (?? rankExpression error: Unrecognized punctuation character "?".)
  • Death knight ability
  • 2 mins cooldown
  • Instant
  • When activated increases your critical strike chance with Frost spells and abilities by 100% for the next 6 sec.
Properties
Class Death knight
School Frost
Cooldown 2 mins
Talents
Talent tree Frost, Tier 5
Talent required Deathchill
Related buff
Spell shadow soulleech 2
  • Deathchill
  • Increases critical strike chance with Frost spells and abilties by 100%.
  • Duration: 6 secs

[[Category:Removed death knight abilities]][[Category:Removed death knight abilities]]

Deathchill was a Death knight ability that allows the death knight to increase their chance to critically strike a target with frost spell and abilities by 100%.


External links