View difference between Paste ID: LfkQ1eUL and AhfZKuED
SHOW: | | - or go back to the newest paste.
1
-- How to use the function in an alias. ----------------------------------------------------
2
3
1. Create a new alias.
4
5
2. Name it "Says (Stutter Hook)"
6
   ( or whatever you want)
7
8
3. Pattern:
9
   ^(?:\"|\'|say) (.+)$
10
11
4. Script:
12
   local str = matches[2]
13
   send("say " .. StutterText(str), false)
14
15
5. If you made sure to save the script below, you're ready to rock.
16
17
-- PASTE THE BELOW CODE INTO A NEW SCRIPT IN YOUR SCRIPT EDITOR. ---------------------------
18
19-
local stutter = function (word)--[[
19+
--[[
20
	Generic Stutter Function.
21
22
	A simple function that accepts text and creates a stuttering effect
23
	for use in roleplaying.
24
25
	by Lin, November 25, 2013
26
]]--
27
28
local stutter = function (word)
29
	-- This function, available only in this script (s'why it's local),
30
	-- draws out any word given to it.
31
	-- Ex: gods --> g- gods
32
	--     leyline --> l- leyline
33
34
	word = tostring(word) -- Make sure the word is a string, just in case
35
								-- you pass any weirdness to it.
36
37
	return word:sub(1, 1) .. "- " .. word
38
end
39
40
local plosives = {						-- Hard plosive sounds. Not perfect.
41
											-- See notes below.
42-
	"b", "d", "g", "k", "p", "t", "x"
42+
	"b", "d", "g", "k", "p", "t", "x",
43
	"B", "D", "G", "K", "P", "T", "X"
44
}
45
46
local stutterWords = {				-- Your guaranteed stutter words. These
47
											-- are words you always want to check for
48
											-- stuttering.
49
	"gods", "focus", "boobies"
50
}
51
52
local stutterChance = 75				-- Chance (in percentage) of how likely
53
											-- stuttering will occur.
54
55
local stuttersPerLine = 2			-- Hard limit for how many words to use
56
											-- for generating stutter.
57
58
local stutterPlosives = true			-- true: Will try to stutter words beginning
59
											-- in plosive sounds (hard d, g, t, etc.).
60
											-- false: only uses the stutterWords.
61
62
StutterText = function (str)
63
	if type(str) ~= "string" then
64
		error("Passed a non-string value to StutterText()!")
65
		return
66
	end
67
68
	local splCount = 0 -- Number to check against stuttersPerLine.
69
70
	str = str:gsub("(%w+)", function (word)
71
		-- Using gsub, we'll run over every word in the string and check to see if we
72
		-- should stutter it. Each word is run through this instanced function, with
73
		-- the word object itself named (appropriately) "word".
74
75-
			if table.contains(stutterWords, word) then -- Check our stutterWords first.
75+
76
			if table.contains(stutterWords, string.lower(word)) then -- Check our stutterWords first.
77
				if math.random(100) <= stutterChance then
78
					word = stutter(word)
79
				end
80
81
				-- Stuttered a word, so make sure to increment how many stutters we've used.
82
				splCount = splCount + 1
83
84
			elseif stutterPlosives == true then -- If allowed, try to stutter plosive sounds.
85
				if table.contains(plosives, word:sub(1, 1)) then
86
					if math.random(100) <= stutterChance then
87
						word = stutter(word)
88
					end
89
				end
90
91
				splCount = splCount + 1
92
93
			end
94
		end
95
96
		return word
97
	end)
98
99
	return str -- Return the modified text.
100
end