Here's what I came up with... feedback is appreciated.
assert(loadstring(var.DamageVerbTbl or [[DamageVerbTbl = {
tickled = " in the stomach%.",
grazed = "%.",
hit = {" very hard%.", " hard%.", "%."},
struck = " a mighty blow%.",
smashed = " with a bone crushing sound%.",
pulverized = " with a powerful attack%.",
trounced = " up and down%.",
pummeled = " into small fragments%.",
["utterly annihilated"] = "%.",
massacred = " into tiny fragments.",
["completely devastated"] = " with awesome force%.",
destroyed = ".",
["absolutely massacred"] = "%.",
} ]] ))()
function GetCritterName (t,l,w)
-- ^You (?P<DamageVerb>@!DamageVerb) (?P<EmoteRemainder>.+)$
local workString = w.EmoteRemainder
if type(DamageVerbTbl[w.DamageVerb]) == "table" then
for k,_ in ipairs(DamageVerbTbl[w.DamageVerb]) do
workString = workString:gsub(DamageVerbTbl[w.DamageVerb][k], "")
end
else
workString = workString:gsub(DamageVerbTbl[w.DamageVerb], "")
end
if workString == w.EmoteRemainder then
ParseNewDamageEmote(nil,nil, {NewVerb = w.DamageVerb, NewPredicate = w.EmoteRemainder:gsub(var.Enemy, "")})
end
if not t then
return workString
else
var.Enemy = workString:gsub("(%p)","%%%1")
end
end
function ParseNewDamageEmote (t,l,w)
-- ^You (?P<NewVerb>.+) @!Enemy(?P<NewPredicate>.+)$
local verb, pred = w.NewVerb, w.NewPredicate:gsub("(%p)","%%%1")
if not DamageVerbTbl[verb] then
DamageVerbTbl[verb] = pred
else
if type(DamageVerbTbl) == "string" then --need to convert to a table
local tmp = DamageVerbTbl[verb]
DamageVerbTbl[verb] = {DamageVerbTbl[verb]}
end
local isSubString = false
for k,v in ipairs(DamageVerbTbl[verb]) do
if v:match(pred) then -- see if new predicate is a substring. i.e. old = " very hard." new = " hard."
isSubString = k
break
end
end
if isSubString then
table.insert (DamageVerbTbl[verb], k+1, pred)
else
DamageVerbTbl[verb][#DamageVerbTbl[verb]] = pred
end
end
local varDamageVerb = ""
for k,_ in pairs(DamageVerbTbl) do
varDamageVerb = varDamageVerb .. k .. "|"
end
var.DamageVerb = varDamageVerb:sub(1,-2)
var.DamageVerbTbl = serialize.save("DamageVerbTbl")
end
|