chirpnest/rules.go
2019-10-02 16:47:16 +08:00

276 lines
38 KiB
Go
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"strconv"
)
func resetMsgParsingRules() {
_, err := db.Exec(`TRUNCATE TABLE msg_rules;`)
failOnError(err, "resetMsgParsingRules : truncate table msg_rules")
_, err = db.Exec(`INSERT INTO msg_rules (prio, msg_type_id, descn, rule)
VALUES (5000, ` + strconv.Itoa(objSubTypeMessageReportAck) + `, "Player war report", "^(?P<Castle>[🐉🦅🐺🦈🦌🥔🌑])(\\[(?P<Guild>[A-Z0-9]{1,3})\\]){0,1}(?P<User>([A-Za-z0-9 ]*)) ⚔:(?P<Attack>[0-9]+)(?P<AttackMod>\\((-|\\+)[0-9]+\\)){0,1} 🛡:(?P<Defense>[0-9]+) Lvl: (?P<Level>[0-9]+)\\n` +
`Your result on the battlefield:\\n` +
`(🔥Exp: (?P<Exp>[0-9]+)){0,1}(\\n)*` +
`(💰Gold: (?P<Gold>\\-{0,1}[0-9]+)){0,1}(\\n)*` +
`(📦Stock: (?P<Stock>\\-{0,1}[0-9]+)){0,1}(\\n)*` +
`(❤Hp: (?P<HP>\\-[0-9]+)){0,1}(\\n)*` +
`((?P<Stamina>(🔋Stamina restored))){0,1}(\\n(?P<Crit>(⚡Critical strike))){0,1}$")
,(5000, ` + strconv.Itoa(objSubTypeMessageAuctionAnnounce) + `, "Auction annouce", "^Lot #(?P<Lot>[0-9]+) : (?P<Item>.*)\\n` +
`(Quality: (?P<Quality>.*)\\n){0,1}` +
`(Condition: (?P<Cond>.*)\\n){0,1}` +
`Seller: (?P<SellerCastle>[🐉🦅🐺🦈🦌🥔🌑])( ){0,1}(\\[(?P<SellerGuild>[A-Z0-9]{1,3})\\]){0,1}(?P<SellerUser>.*){0,1}\\n` +
`Current price: (?P<Price>[0-9]+) pouch\\(es\\)\\n` +
`Buyer: (None|(?P<BuyerCastle>[🐉🦅🐺🦈🦌🥔🌑])( ){0,1}(\\[(?P<BuyerGuild>[A-Z0-9]{1,3})\\]){0,1}(?P<BuyerUser>.*){0,1})\\n` +
`End At: (?P<End>.*)\\n` +
`Status: (?P<Status>.*)(\\n)` +
`*(?s:.*)")
,(5000, ` + strconv.Itoa(objSubTypeMessageTimeAck) + `, "Time", "^In Chat Wars world now\\n(?P<Time>.*)\\n(?P<Hour>[0-9]{2}):(?P<Minute>[0-9]{2})\\n(?P<Day>[0-9]{2}) (?P<Month>.+) (?P<Year>[0-9]{4})\\n(?s:.*)$")` +
`,(5000, ` + strconv.Itoa(objSubTypeMessageMiniWar) + `, "Mini War", "^⛳Battle results:\\n` +
`(?P<Gardian1>🔱){0,1}.*(?P<Loot1>(Moonlight|Wolfpack|Deerhorn|Dragonscale|Sharkteeth|Potato|Highnest)):(?P<Result1>[^\\x{1F4B0}\\x{1F4E6}]*)((?P<Gold1>(\\-|\\+)[0-9]+)\\x{1F4B0}){0,1}[ ]*((?P<Stock1>(\\-|\\+)[0-9]+)\\x{1F4E6}){0,1}\\n` +
`(?P<Gardian2>🔱){0,1}.*(?P<Loot2>(Moonlight|Wolfpack|Deerhorn|Dragonscale|Sharkteeth|Potato|Highnest)):(?P<Result2>[^\\x{1F4B0}\\x{1F4E6}]*)((?P<Gold2>(\\-|\\+)[0-9]+)\\x{1F4B0}){0,1}[ ]*((?P<Stock2>(\\-|\\+)[0-9]+)\\x{1F4E6}){0,1}\\n` +
`(?P<Gardian3>🔱){0,1}.*(?P<Loot3>(Moonlight|Wolfpack|Deerhorn|Dragonscale|Sharkteeth|Potato|Highnest)):(?P<Result3>[^\\x{1F4B0}\\x{1F4E6}]*)((?P<Gold3>(\\-|\\+)[0-9]+)\\x{1F4B0}){0,1}[ ]*((?P<Stock3>(\\-|\\+)[0-9]+)\\x{1F4E6}){0,1}\\n` +
`(?P<Gardian4>🔱){0,1}.*(?P<Loot4>(Moonlight|Wolfpack|Deerhorn|Dragonscale|Sharkteeth|Potato|Highnest)):(?P<Result4>[^\\x{1F4B0}\\x{1F4E6}]*)((?P<Gold4>(\\-|\\+)[0-9]+)\\x{1F4B0}){0,1}[ ]*((?P<Stock4>(\\-|\\+)[0-9]+)\\x{1F4E6}){0,1}\\n` +
`(?P<Gardian5>🔱){0,1}.*(?P<Loot5>(Moonlight|Wolfpack|Deerhorn|Dragonscale|Sharkteeth|Potato|Highnest)):(?P<Result5>[^\\x{1F4B0}\\x{1F4E6}]*)((?P<Gold5>(\\-|\\+)[0-9]+)\\x{1F4B0}){0,1}[ ]*((?P<Stock5>(\\-|\\+)[0-9]+)\\x{1F4E6}){0,1}\\n` +
`(?P<Gardian6>🔱){0,1}.*(?P<Loot6>(Moonlight|Wolfpack|Deerhorn|Dragonscale|Sharkteeth|Potato|Highnest)):(?P<Result6>[^\\x{1F4B0}\\x{1F4E6}]*)((?P<Gold6>(\\-|\\+)[0-9]+)\\x{1F4B0}){0,1}[ ]*((?P<Stock6>(\\-|\\+)[0-9]+)\\x{1F4E6}){0,1}\\n` +
`(?P<Gardian7>🔱){0,1}.*(?P<Loot7>(Moonlight|Wolfpack|Deerhorn|Dragonscale|Sharkteeth|Potato|Highnest)):(?P<Result7>[^\\x{1F4B0}\\x{1F4E6}]*)((?P<Gold7>(\\-|\\+)[0-9]+)\\x{1F4B0}){0,1}[ ]*((?P<Stock7>(\\-|\\+)[0-9]+)\\x{1F4E6}){0,1}\\n` +
`\\n🏆Scores:\\n` +
`.*(?P<Score1>(Moonlight|Wolfpack|Deerhorn|Dragonscale|Sharkteeth|Potato|Highnest)): (?P<Points1>\\+([0-9]+|NaN))\\n` +
`.*(?P<Score2>(Moonlight|Wolfpack|Deerhorn|Dragonscale|Sharkteeth|Potato|Highnest)): (?P<Points2>\\+([0-9]+|NaN))\\n` +
`.*(?P<Score3>(Moonlight|Wolfpack|Deerhorn|Dragonscale|Sharkteeth|Potato|Highnest)): (?P<Points3>\\+([0-9]+|NaN))\\n` +
`.*(?P<Score4>(Moonlight|Wolfpack|Deerhorn|Dragonscale|Sharkteeth|Potato|Highnest)): (?P<Points4>\\+([0-9]+|NaN))\\n` +
`.*(?P<Score5>(Moonlight|Wolfpack|Deerhorn|Dragonscale|Sharkteeth|Potato|Highnest)): (?P<Points5>\\+([0-9]+|NaN))\\n` +
`.*(?P<Score6>(Moonlight|Wolfpack|Deerhorn|Dragonscale|Sharkteeth|Potato|Highnest)): (?P<Points6>\\+([0-9]+|NaN))\\n` +
`.*(?P<Score7>(Moonlight|Wolfpack|Deerhorn|Dragonscale|Sharkteeth|Potato|Highnest)): (?P<Points7>\\+([0-9]+|NaN))\\n` +
`(?s:.*)` +
`Battle (?P<Time>[0-9]{2}/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2})$")
,(5000, ` + strconv.Itoa(objSubTypeMessagePillageInc) + `, "Pillage Inc", "^You were strolling around on your horse when you noticed (\\[(?P<Guild>[A-Z0-9]{1,3})\\]){0,1}(?P<Attacker>.*) of .{1}(?P<Castle>(Moonlight|Wolfpack|Deerhorn|Dragonscale|Sharkteeth|Potato|Highnest)) Castle trying to pillage a local village. To stop him click /go$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGo) + `, "Go", "^/go$")
,(5000, ` + strconv.Itoa(objSubTypeMessagePillageGo) + `,"Pillage Go", "^You lift up your sword and charge at the violator.$")
,(5000, ` + strconv.Itoa(objSubTypeMessagePillageWin) + `,"Pillage Win", "^You successfully defeated (\\[(?P<Guild>[A-Z0-9]{1,3})\\]){0,1}(?P<Attacker>.*). As he was crawling away, you picked up some of the gold he left behind. Received (?P<Gold>[0-9]+) gold and (?P<Exp>[0-9]+) exp.$")
,(5000, ` + strconv.Itoa(objSubTypeMessagePillageTimeout) + `,"Pillage Timeout", "^You\\'ve failed to protect the villagers. No more rewards for you.$")
,(5000, ` + strconv.Itoa(objSubTypeMessagePillageLoss) + `,"Pillage Loss", "^You let (\\[(?P<Guild>[A-Z0-9]{1,3})\\]){0,1}(?P<Attacker>.*) go and he pillaged the village. We hope you feel terrible.$")
,(5000, ` + strconv.Itoa(objSubTypeMessageDuelFight) + `, "Duel Fight result #2", "(?P<Life1>(\\-){0,1}[0-9]+).*(?P<Castle1>[🐉🦅🐺🦈🦌🥔🌑])(\\[(?P<Guild1>[A-Z0-9]{1,3})\\]){0,1}(?P<Duelist1>.*)\\n` +
`VS\\n` +
`(?P<Life2>(\\-){0,1}[0-9]+).*(?P<Castle2>[🐉🦅🐺🦈🦌🥔🌑])(\\[(?P<Guild2>[A-Z0-9]{1,3})\\]){0,1}(?P<Duelist2>.*)\\n` +
`(?s:.*)\\n` +
`(\\[(?P<WinGuild>[A-Z0-9]{1,3})\\]){0,1}(?P<WinDuelist>.*) from .*(?P<WinCastle>[🐉🦅🐺🦈🦌🥔🌑]).* Castle stands victorious over (\\[(?P<LossGuild>[A-Z0-9]{1,3})\\]){0,1}(?P<LossDuelist>.*) from .*(?P<LossCastle>[🐉🦅🐺🦈🦌🥔🌑]).* Castle, with blood slowly dripping from his (?P<Weapon>.*).\\n` +
`You received: (?P<Exp>[0-9]+) exp.\\n` +
`(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageDuelFight) + `, "Duel Fight result #1", "(?P<Life1>(\\-){0,1}[0-9]+).*(?P<Castle1>[🐉🦅🐺🦈🦌🥔🌑])(\\[(?P<Guild1>[A-Z0-9]{1,3})\\]){0,1}(?P<Duelist1>.*)\\n` +
`VS\\n` +
`(?P<Life2>(\\-){0,1}[0-9]+).*(?P<Castle2>[🐉🦅🐺🦈🦌🥔🌑])(\\[(?P<Guild2>[A-Z0-9]{1,3})\\]){0,1}(?P<Duelist2>.*)\\n` +
`(?s:.*)\\n` +
`(\\[(?P<WinGuild>[A-Z0-9]{1,3})\\]){0,1}(?P<WinDuelist>.*) from .*(?P<WinCastle>[🐉🦅🐺🦈🦌🥔🌑]).* Castle was stronger than (\\[(?P<LossGuild>[A-Z0-9]{1,3})\\]){0,1}(?P<LossDuelist>.*) from .*(?P<LossCastle>[🐉🦅🐺🦈🦌🥔🌑]).* Castle.\\n` +
`You received: (?P<Exp>[0-9]+) exp.\\n` +
`(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageReportReq) + `, "Report request", "^/report$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGReportReq) + `, "Guild report request", "^/g_report$")
,(5000, ` + strconv.Itoa(objSubTypeMessageHeroReq) + `, "Hero request", "^/hero$")
,(5000, ` + strconv.Itoa(objSubTypeMessageMeReq) + `, "Me request", "^🏅Me$")
,(5000, ` + strconv.Itoa(objSubTypeMessageInventoryReq) + `, "Inventory request", "^/inv$")
,(5000, ` + strconv.Itoa(objSubTypeMessageTimeReq) + `, "Time request", "^/time$")
,(5000, ` + strconv.Itoa(objSubTypeMessagePledge) + `, "Pledge", "^/pledge$")
,(5000, ` + strconv.Itoa(objSubTypeMessageBuyReq) + `, "Buy request", "^/wtb_(?P<Item>[0-9]+)(_(?P<Quantity>[0-9]+)){0,1}$")
,(5000, ` + strconv.Itoa(objSubTypeMessageSellReq) + `, "Sell request", "^/wts_(?P<Item>[0-9]+)(_(?P<Quantity>[0-9]+)(_(?P<Price>[0-9]+)){0,1}){0,1}$")
,(5000, ` + strconv.Itoa(objSubTypeMessageOrderbookReq) + `, "Orderbook request", "^/t_(?P<Code>[0-9]+)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageOrderbookAck) + `, "Orderbook request", "^(?P<Name>[a-zA-Z ]+) offers now:\\n` +
`(?P<Qty1>[0-9]+) pcs for (?P<Price1>[0-9]+)💰\\n` +
`(?P<Qty2>[0-9]+) pcs for (?P<Price2>[0-9]+)💰\\n` +
`(?P<Qty3>[0-9]+) pcs for (?P<Price3>[0-9]+)💰\\n` +
`.*Buy:\\n` +
`Buy 1: /wtb_(?P<Code>[0-9]+)\\n` +
`Buy 5: /wtb_[0-9]+_5\\n\n` +
`You have (?P<Gold>[0-9]+)💰 and (?P<Qty>[0-9]+) [a-zA-Z ]*\\n` +
`.*Sell:\\n` +
`Sell 1 quickly: /wts_[0-9]+\\n` +
`Sell 5 quickly: /wts_[0-9]+_5\\n` +
`Sell 10 for [0-9]+💰 each: /wts_[0-9]+_10_[0-9]+$")
,(5000, ` + strconv.Itoa(objSubTypeMessageWithdrawReq) + `, "Withdraw Req", "^/g_withdraw( )+(?P<Item1>[a-z0-9]+)( )+(?P<Quantity1>[0-9]+)` +
`(( )+(?P<Item2>[a-z0-9]+)( )+(?P<Quantity2>[0-9]+)){0,1}` +
`(( )+(?P<Item3>[a-z0-9]+)( )+(?P<Quantity3>[0-9]+)){0,1}` +
`(( )+(?P<Item4>[a-z0-9]+)( )+(?P<Quantity4>[0-9]+)){0,1}` +
`(( )+(?P<Item5>[a-z0-9]+)( )+(?P<Quantity5>[0-9]+)){0,1}` +
`(( )+(?P<Item6>[a-z0-9]+)( )+(?P<Quantity6>[0-9]+)){0,1}` +
`(( )+(?P<Item7>[a-z0-9]+)( )+(?P<Quantity7>[0-9]+)){0,1}` +
`(( )+(?P<Item8>[a-z0-9]+)( )+(?P<Quantity8>[0-9]+)){0,1}$")
,(5000, ` + strconv.Itoa(objSubTypeMessageWithdrawCode) + `, "Withdraw Code #1", "^Withdrawing (?P<Item1>.*) x (?P<Quantity1>.*). Recipient shall send to bot:\\n` +
`/g_receive [a-z0-9]+$")
,(5000, ` + strconv.Itoa(objSubTypeMessageWithdrawCode) + `, "Withdraw Code #2", "^Withdrawing:\\n` +
`(?P<Item1>.*) x (?P<Quantity1>.*)\\n` +
`((?P<Item2>.*) x (?P<Quantity2>.*)\\n){0,1}` +
`((?P<Item3>.*) x (?P<Quantity3>.*)\\n){0,1}` +
`((?P<Item4>.*) x (?P<Quantity4>.*)\\n){0,1}` +
`((?P<Item5>.*) x (?P<Quantity5>.*)\\n){0,1}` +
`((?P<Item6>.*) x (?P<Quantity6>.*)\\n){0,1}` +
`((?P<Item7>.*) x (?P<Quantity7>.*)\\n){0,1}` +
`((?P<Item8>.*) x (?P<Quantity8>.*)\\n){0,1}` +
`Recipient shall send to bot:\\n` +
`/g_receive [a-z0-9]+$")
,(5000, ` + strconv.Itoa(objSubTypeMessageWithdrawRcv) + `, "Withdraw Received #1", "^Received (?P<Item1>.*) x (?P<Quantity1>.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageWithdrawRcv) + `, "Withdraw Received #2", "^Received:` +
`(\\n(?P<Item1>.*) x (?P<Quantity1>.*))` +
`(\\n(?P<Item2>.*) x (?P<Quantity2>.*)){0,1}` +
`(\\n(?P<Item3>.*) x (?P<Quantity3>.*)){0,1}` +
`(\\n(?P<Item4>.*) x (?P<Quantity4>.*)){0,1}` +
`(\\n(?P<Item5>.*) x (?P<Quantity5>.*)){0,1}` +
`(\\n(?P<Item6>.*) x (?P<Quantity6>.*)){0,1}` +
`(\\n(?P<Item7>.*) x (?P<Quantity7>.*)){0,1}` +
`(\\n(?P<Item8>.*) x (?P<Quantity8>.*)){0,1}$")
,(5000, ` + strconv.Itoa(objSubTypeMessageStockReq) + `, "Stock Req", "^/stock$")
,(5000, ` + strconv.Itoa(objSubTypeMessageStockAck) + `, "Stock Ack", "^📦Storage \\((?P<Used>[0-9]+)\\/(?P<Available>[0-9]+)\\):` +
`(?P<Items>(\\n[a-zA-Z ]+ \\([0-9]+\\))*)$")
,(4000, ` + strconv.Itoa(objSubTypeMessageStockAck) + `, "Stock Ack", "^📦Storage \\((?P<Used>[0-9]+)\\/(?P<Available>[0-9]+)\\):\\n` +
`Use \\/sg_\\{code\\} to trade some amount of resource for .*💰\\/pcs\\n` +
`(?P<Items>(\\n\\/sg_[0-9]+ [a-zA-Z ]+ \\([0-9]+\\))*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageMiscReq) + `, "Misc Req", "^/misc$")` + /*
,(5000, ` + strconv.Itoa(objSubTypeMessageUnionWar) + `, "Union war report", "^(🏠Trade union news:\\n){0,1}` +
`(((?P<Union>[A-Z][a-z]+ [A-Z][a-z]+) was (?P<StatusUnion>(easily defended|defended successfully|breached.|easily breached.|closely breached.))( Attackers have pillaged union for (?P<Loot>[0-9]+) stock){0,1}:\\n` +
`(🎖Attack leaders: (?P<AtkUnionCastle1>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkUnionUser1>[^,]+)(,(?P<AtkUnionCastle2>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkUnionUser2>[^,]+)){0,1}(,(?P<AtkUnionCastle3>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkUnionUser3>[^,]+)){0,1}(,(?P<AtkUnionCastle4>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkUnionUser4>[^,]+)){0,1}){0,1}(\\n){0,1}` +
`(🎖Defense leaders: (?P<DefUnionCastle1>[🐉🦅🐺🦈🦌🥔🌑])(?P<DefUnionUser1>[^,]+)(,(?P<DefUnionCastle2>[🐉🦅🐺🦈🦌🥔🌑])(?P<DefUnionUser2>[^,]+)){0,1}(,(?P<DefUnionCastle3>[🐉🦅🐺🦈🦌🥔🌑])(?P<DefUnionUser3>[^,]+)){0,1}(,(?P<DefUnionCastle4>[🐉🦅🐺🦈🦌🥔🌑])(?P<DefUnionUser4>[^,]+)){0,1}){0,1}(\\n){0,1})(\\n)*)*` +
`(🎪State of exclusive rights:\\n){0,1}` +
`((?P<Fair>[A-Z][a-z]+ [A-Z][a-z]+) (?P<StatusFair>(was protected|belongs to)( (?P<Attacker>[A-Z][a-z]+ [A-Z][a-z]+):)\\n` +
`(🎖Attack leaders: (?P<AtkFairCastle1>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkFairUser1>[^,]+)(,(?P<AtkFairCastle2>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkFairUser2>[^,]+)){0,1}(,(?P<AtkFairCastle3>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkFairUser3>[^,]+)){0,1}(,(?P<AtkFairCastle4>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkFairUser4>[^,]+)){0,1}){0,1}(\\n){0,1}` +
`(🎖Defense leaders: (?P<DefFairCastle1>[🐉🦅🐺🦈🦌🥔🌑])(?P<DefFairUser1>[^,]+)(,(?P<DefFairCastle2>[🐉🦅🐺🦈🦌🥔🌑])(?P<DefFairUser2>[^,]+)){0,1}(,(?P<DefFairCastle3>[🐉🦅🐺🦈🦌🥔🌑])(?P<DefFairUser3>[^,]+)){0,1}(,(?P<DefFairCastle4>[🐉🦅🐺🦈🦌🥔🌑])(?P<DefFairUser4>[^,]+)){0,1}){0,1}(\\n){0,1})(\\n)*)*` +
`$")*/`
,(5000, ` + strconv.Itoa(objSubTypeMessageUnionWar) + `, "Union war report", "^(🏠Trade union news:\\n){0,1}` +
`((([A-Z][a-z]+ [A-Z][a-z]+) was ((easily defended|defended successfully|breached.|easily breached.|closely breached.))( Attackers have pillaged union for ([0-9]+) stock){0,1}:\\n` +
`(🎖Attack leaders: ([🐉🦅🐺🦈🦌🥔🌑])([^,]+)(,([🐉🦅🐺🦈🦌🥔🌑])([^,]+)){0,1}(,([🐉🦅🐺🦈🦌🥔🌑])([^,]+)){0,1}(,([🐉🦅🐺🦈🦌🥔🌑])([^,]+)){0,1}){0,1}(\\n){0,1}` +
`(🎖Defense leaders: ([🐉🦅🐺🦈🦌🥔🌑])([^,]+)(,([🐉🦅🐺🦈🦌🥔🌑])([^,]+)){0,1}(,([🐉🦅🐺🦈🦌🥔🌑])([^,]+)){0,1}(,([🐉🦅🐺🦈🦌🥔🌑])([^,]+)){0,1}){0,1}(\\n){0,1})(\\n)*)*` +
`(🎪State of exclusive rights:\\n){0,1}` +
`(([A-Z][a-z]+ [A-Z][a-z]+) ((was protected|belongs to)( ([A-Z][a-z]+ [A-Z][a-z]+):)\\n` +
`(🎖Attack leaders: ([🐉🦅🐺🦈🦌🥔🌑])([^,]+)(,([🐉🦅🐺🦈🦌🥔🌑])([^,]+)){0,1}(,([🐉🦅🐺🦈🦌🥔🌑])([^,]+)){0,1}(,([🐉🦅🐺🦈🦌🥔🌑])([^,]+)){0,1}){0,1}(\\n){0,1}` +
`(🎖Defense leaders: ([🐉🦅🐺🦈🦌🥔🌑])([^,]+)(,([🐉🦅🐺🦈🦌🥔🌑])([^,]+)){0,1}(,([🐉🦅🐺🦈🦌🥔🌑])([^,]+)){0,1}(,([🐉🦅🐺🦈🦌🥔🌑])([^,]+)){0,1}){0,1}(\\n){0,1})(\\n)*)*` +
`$")
,(5000, ` + strconv.Itoa(objSubTypeMessageUnionWar) + `, "Union war rep with both", "^(🏠Trade union news:\n)(?P<Union>(?s:.*))(🎪State of exclusive rights:\n)(?P<Fair>(?s:.*))$")
,(4900, ` + strconv.Itoa(objSubTypeMessageUnionWar) + `, "Union war rep only union", "^(🏠Trade union news:\n)(?P<Union>(?s:.*))(🎪State of exclusive rights:\n){0}(?P<Fair>(?s:.*))$")
,(4900, ` + strconv.Itoa(objSubTypeMessageUnionWar) + `, "Union war rep only fair", "^(🏠Trade union news:\n){0}(?P<Union>(?s:.*))(🎪State of exclusive rights:\n)(?P<Fair>(?s:.*))$")
,(5000, ` + strconv.Itoa(objSubTypeMessageTimeout) + `, "Generic timeout", "^Too late. Action is not available.$")
,(5000, ` + strconv.Itoa(objSubTypeMessageMeAck) + `, "Me ack", "^(?s:.*)Battle(.*)of the seven castles in .*!\\n` +
`(?s:.*)\\n` +
`(?P<CastleIcon>.)(\\[(?P<Guild>[A-Z0-9]+)\\]){0,1}(?P<Player>.*?) ((?P<Class>(Knight|Ranger|Sentinel|Collector|Blacksmith|Alchemist|Esquire|Master)) ){0,1}of (?P<Castle>[a-zA-Z]*) Castle\\n` +
`.+?Level: (?P<Level>[0-9]+)\\n` +
`.+?Atk: (?P<Atk>[0-9]+) .+?Def: (?P<Def>[0-9]+)\\n` +
`.+?Exp: (?P<ExpNow>[0-9]+)\\/(?P<ExpLvl>[0-9]+)\\n` +
`(.+?Hp: (?P<HPNow>[0-9]+)\\/(?P<HPMax>[0-9]+).*\\n){0,1}` +
`.+?Stamina: (?P<StaminaNow>[0-9]+)\\/(?P<StaminaMax>[0-9]+).*?\\n` +
`(.+?Mana: (?P<ManaNow>[0-9]+)\\/(?P<ManaMax>[0-9]+).*\\n){0,1}` +
`(.+?(?P<Gold>(-){0,1}[0-9]+)){0,1}( .+?(?P<Pogs>[0-9]+)){0,1}( .+?(?P<Gems>[0-9]+)){0,1}\\n\\n` +
`(.*?)(🎽Equipment \\+(?P<AtkGear>[0-9]+).\\+(?P<DefGear>[0-9]+).){0,1}\\n` +
`🎒Bag: (?P<BagUsed>[0-9]+)\\/(?P<BagDispo>[0-9]+) \\/inv\\n\\n` +
`State:\\n(?P<State>.*)\\n\\n` +
`More: \\/hero(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGoQuestAck) + `, "Go Quest Ack Forest", "^In a dire need for an adventure, you went to a (?P<Place>[a-zA-Z ]+). You'll be back in (?P<Time>[0-9]+) minutes.$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGoQuestAck) + `, "Go Quest Ack Mirkwood", "^You went to the (?P<Place>[a-zA-Z ]+). Beware of spooders. Back in (?P<Time>[0-9]+) minutes$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGoQuestAck) + `, "Go Quest Ack Village", "^Feeling an unsatisfiable lust for violence you set off to the nearest (?P<Place>[a-zA-Z ]+). You will reach the nearest one in (?P<Time>[0-9]+) minutes$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGoQuestAck) + `, "Go Quest Ack Swamp", "^An adventure is calling. But you went to a (?P<Place>[a-zA-Z ]+). You'll be back in (?P<Time>[0-9]+) minutes.$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGoQuestAck) + `, "Go Quest Ack Dead Marshes", "^You went to the (?P<Place>[a-zA-Z ]+). The dead are near. Back in (?P<Time>[0-9]+) minutes$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGoQuestAck) + `, "Go Quest Ack Mountain", "^(?P<Place>[a-zA-Z ']+) can be a dangerous place. You decided to investigate, what's going on. You'll be back in (?P<Time>[0-9]+) minutes.$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGoQuestAck) + `, "Go Quest Ack Devil's Valley", "^You went to the (?P<Place>[a-zA-Z ']+). Don't lose your soul. Back in (?P<Time>[0-9]+) minutes$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGRolesReq) + `, "Guild roles Req", "^/g_roles$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGRolesAck) + `, "Guild roles Req", "^Roles:\\nBartender:\\n` +
`((⚗️|⚔️|⚒|🛡|📦)(?P<Bartender>.*)|.*\[unassigned\].*)\\n\\n\\n` +
`Commander:\\n` +
`((⚗️|⚔️|⚒|🛡|📦)(?P<Commander>.*)|.*\[unassigned\].*)\\n\\n\\n` +
`Squire:\\n` +
`((⚗️|⚔️|⚒|🛡|📦)(?P<Squire>.*)|.*\[unassigned\].*)\\n\\n\\n` +
`Treasurer:\\n` +
`((⚗️|⚔️|⚒|🛡|📦)(?P<Treasurer>.*)|.*\[unassigned\].*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGStockReq) + `, "Guild stock Req", "^/g_stock$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGStockAck) + `, "Guild stock Ack", "^Grouped by:\\n` +
`/g_stock_res - resources\\n` +
`/g_stock_alch - alchemist herbs\\n` +
`/g_stock_misc - miscellaneous stuff\\n` +
`/g_stock_rec - items recipes\\n` +
`/g_stock_parts - items parts\\n` +
`/g_stock_other - everything else$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGStockResReq) + `, "Guild stock resources Req", "^/g_stock_res$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGStockAlchReq) + `, "Guild stock alchemy Req", "^/g_stock_alch$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGStockMiscReq) + `, "Guild stock misc Req", "^/g_stock_misc$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGStockRecReq) + `, "Guild stock recipes Req", "^/g_stock_rec$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGStockPartReq) + `, "Guild stock parts Req", "^/g_stock_parts$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGStockOthReq) + `, "Guild stock other Req", "^/g_stock_other$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGStockAnyAck) + `, "Guild stock any Ack", "^Guild Warehouse:(?P<Stock>(\\n[0-9a-z]+ (.*) x ([0-9]+))+)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageBusy) + `, "Too busy now", "^You are too busy with a different adventure. Try a bit later.$")
,(5000, ` + strconv.Itoa(objSubTypeMessageResStockReq) + `, "Resources Stock Req #1", "^📦Resources$")
,(5000, ` + strconv.Itoa(objSubTypeMessageResStockReq) + `, "Resources Stock Req #2", "^/stock$")
,(5000, ` + strconv.Itoa(objSubTypeMessageAlchStockReq) + `, "Alchemy Stock Req", "^⚗Alchemy$")
,(5000, ` + strconv.Itoa(objSubTypeMessageMiscStockReq) + `, "Misc Stock Req #1", "^🗃Misc$")
,(5000, ` + strconv.Itoa(objSubTypeMessageMiscStockReq) + `, "Misc Stock Req #2", "^/misc$")
,(5000, ` + strconv.Itoa(objSubTypeMessageEquipStockReq) + `, "Equipment Stock Req", "^🏷Equipment$")
,(5000, ` + strconv.Itoa(objSubTypeMessageCraftStockReq) + `, "Crafting Stock Req", "^⚒Crafting$")
,(5000, ` + strconv.Itoa(objSubTypeMessageStockEmpty) + `, "Stock Empty", "^\\[empty\\]$")
,(5000, ` + strconv.Itoa(objSubTypeMessageStockAnyAck) + `, "Any Stock Ack", "^(?P<Items>(([a-zA-Z 📃]+ \\([0-9]+\\)( /view_[a-z0-9]+){0,1}\\n{0,1})+))$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGDepositReq) + `, "GDeposit Req", "^/g_deposit (?P<Item>[a-z0-9]+) (?P<Quantity>[0-9]+)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGDepositAck) + `, "GDeposit Ack #2", "^Deposited successfully: (?P<Item>.*) \\((?P<Quantity>[0-9]+)\\)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGDepositAck) + `, "GDeposit Ack #1", "^Deposited (?P<Item>.*) \\((?P<Quantity>[0-9]+)\\) successfully$")
,(5000, ` + strconv.Itoa(objSubTypeMessageAttackReq) + `, "Castle Attack Req", "^⚔Attack$")
,(5000, ` + strconv.Itoa(objSubTypeMessageAttackAck) + `, "Castle Attack Ack", "^Ha, bold enough\\? Choose an enemy\\!$")
,(5000, ` + strconv.Itoa(objSubTypeMessageAttackTargetReq) + `, "Castle Attack Target Req", "^(?P<Target>[🐉🦅🐺🦈🦌🥔🌑])$")
,(5000, ` + strconv.Itoa(objSubTypeMessageAttackTargetAck) + `, "Castle Attack Target Ack", "^You are ready to strike. The next battle is in .*.\\n\\n` +
`💬 Pass the waiting for the battle outcome chatting with players from other castles at @chatwarscommunity 💬$")
,(5000, ` + strconv.Itoa(objSubTypeMessageDefendReq) + `, "Defend Req", "^🛡Defend$")
,(5000, ` + strconv.Itoa(objSubTypeMessageDefendAck) + `, "Defend Ack", "^You joined the defensive formations. The next battle is in .*.\\n\\n` +
`💬 Pass the waiting for the battle outcome chatting with players from other castles at @chatwarscommunity 💬$")
,(5000, ` + strconv.Itoa(objSubTypeMessageBack) + `, "Back", "^⬅Back$")
,(5000, ` + strconv.Itoa(objSubTypeMessageGoFastFight) + `, "Fast Fight", "^▶Fast fight$")
,(5000, ` + strconv.Itoa(objSubTypeMessageCastleReq) + `, "Castle Req", "^🏰Castle$")
,(5000, ` + strconv.Itoa(objSubTypeMessageCastleAck) + `, "Castle Ack", "^$")
,(5000, ` + strconv.Itoa(objSubTypeMessageExchangeReq) + `, "Exchange Req", "^⚖Exchange$")
,(5000, ` + strconv.Itoa(objSubTypeMessageExchangeAck) + `, "Exchange Ack", "^Here you can buy and sell some items.\\n` +
`To find a tradable item just type:\\n` +
`/t \\[item name\\]\\n` +
`Example:\\n` +
`/t coal\\n\\n` +
`Your deals \\((?P<ActiveDeals>[0-9]+)/(?P<MaxDeals>[0-9]+)\\):\\n` +
`(?P<Deals>(?s:.*))\\n` +
`Your last 10 comitted trades: /trades$")
,(5000, ` + strconv.Itoa(objSubTypeMessageEquipGearReq) + `, "Equip Req", "^/on_(?P<Item>[a-z0-9]+)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageEquipGearAck) + `, "Equip Ack", "^Item equipped: (?P<Item>.+)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageUnequipGearReq) + `, "Unequip Req", "^/off_(?P<Item>[a-z0-9]+)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageUnequipGearAck) + `, "Unequip Ack", "^Item unequipped: (?P<Item>.+)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageNoStamina) + `, "Unequip Ack", "^Not enough stamina. Come back after you take a rest.\\n\\n` +
`To get more stamina, invite friends to the game via invite link. Press /promo to get it.$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #01", "On your way to the swamp, you saw a group of people shouting angrily at their supposed leader\\. The leader was in tears and explained that loyalty can be won again, even if the medals are lost. You left confused. But a few meters away you found a badge with almost unrecognizable letters: tl\\.\\. You sold it to a merchant\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #02", "You were taking a walk when you found two burning marks on the ground that disappeared after a few meters\\. Near them there was some kind of almanac with a lot of numbers written in it\\. It was a cold day so you used it to make a campfire to warm yourself and then went back to the castle\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #03", "Mrrrrgl mrrrgl mrrrrrrgl mrrrgl. Mrrrrrrrrrrrgl mrrrrgl mrrrrrrrgl mrrrrrrgl mrrrrrrrrl\\. Mrrrrrgl\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #04", "Suddenly you were surrounded by a huge band of orcs, led by an orc shaman\\. They demanded you give them everything you have\\. You killed every single one of them and collected a lot of loot\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #05", "In the middle of a swamp you met a huge ogre who was finishing eating a donkey\\. “Get out of my swamp!” He shouted angrily with a Scottish accent\\. Somebody once told you that you should not mess with ogres, so you let it be\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #06", "You entered the swamp in search of knowledge\\. Eventually you found some mushrooms and decided to eat them\\. Apparently they were hallucinogenic, so after a good trip you decided to pick some more to sell them back in town\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #07", "You stumbled upon a man wielding a sword near a campfire\\.\\n-Why are you armed\\?\\n-Mimics\\nYou laughed, he laughed, the campfire laughed\\. You killed the campfire\\. Fun times\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #08", "You met a guy who asked you to shoot him in the face\\. You shot him in the face\\. On his cold corpse you found some gold\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #09", "You found a crypt in an old cemetery where some humans and dwarves were drinking booze\\. They invited you in and offered a sip\\. That was the tastiest mandrake liquor you ever tasted, and the host was kind enough to provide a recipe\\. You sold it to the local pub, but they couldn't replicate it\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #10", "In your journey you have reached a dark cave, where you met the Devil himself\\. You seized the opportunity and sold your soul for a handful of money\\. When you returned home you realized you didn't have a soul to start with\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #11", "You came across an eccentric man who lead you through a magical land of candy and sweets\\. Upon reaching the exit, the man loudly informs that you get nothing\\. You bid him good day and decapitate him for wasting your time\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #12", "While marching through the swamp you hear someone shouting for a hunter\\. Being quite proficient in hunting yourself you walk towards the voice\\. You find a man running up to you who shakes you wildly while screaming something about a Dark One\\. Seconds later he runs away\\.\\nYou pick up some things he lost in his hysteria\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #13", "In the swamp you found a beautiful mermaid selling some flasks with a magic potion for 30 golden coins\\. However, after you returned home, you realized it's just swamp water\\. What a rip off! You poured it out and sold the flask to your alchemist friend\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #14", "You went too far and saw the forbidden castle\\. Its gates were painted with blood and the road was scratched with claws\\. You hid in the bushes and saw the two angels dragging the warrior into the castle\\. The gate closed and a terrible scream came from behind them\\. You picked up a few coins that fell from the pockets of the warrior and ran back home\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #15", "“There was a guy\\nWho was in love\\nWith a girl as beautiful as snow\\nBut she chose the one\\nWho was her ex\\nSo you stole her blue dress\\.”(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #16", "Walking through the swamp you find a bunch of crazy librarians who are trying to catalogue all adventures happening all around the seven kingdoms\\. Naturally they are doomed to fail, so you leave them behind - not without helping yourself to a few gold coins scattered around them(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #17", "On your quest, you found the Deer Legend\\. He didn't talk much\\. But when he was leaving for his own quest, he said something in a foreign language before the urn smashed him\\. So you took a bit of his loot left behind\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #18", "Far away in the distance you saw three tiny figures walking through the mire\\. Suddenly, one of them fell into the water\\. You rushed to them, but by the time you got there, figures disappeared\\. Luckily, you found a shiny ring laying on the ground\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #19", "Walking through the swamp, you found yourself surrounded by the mist\\. Suddenly you heard a dog howling in the distance\\. You decided to investigate further and found a beast with glowing mouth\\. It was your neighbor's long-lost puppy, so you took it back home for a reward\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #20", "In the forest you saw a rabbit wearing clothes and holding a pocketwatch muttering “I'm late! Im late“ It hopped into a bunny hole and disappeared\\. Curiousity got the best of you so you jumped into the hole following it\\. There you got high and had a tea party with a cat, some weird looking twins and a guy with crazy hats\\. As a farewell gift they gave you some gold\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #21", "On the outskirts of the forest, you saw a tree standing alone\\. It was a sad tree, you wanted to make it happy and decided he needs a little friend\\. So you planted another tree\\. While planting the tree, you found a chest full with golden coins\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #22", "While wandering through the valley, you found a big metal object with wings\\. Some ghastly looking people with remarkably formed foreheads were discussing loudly next to it\\. One of them saw you and asked: nuqneH\\? You got scared and ran away\\. At least you found some metal parts that you could sell to a local blacksmith\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #23", "You passed a hidden fortress in the mountains, where a bunch of people were shouting at some guy in the shining coat\\. Apparently they were unhappy with too much salt in their food\\. You couldn't sneak past the guards, but you managed to find some loot in a nearby cave\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #24", "As you were hiking through the icy mountains, you found a shirtless man shouting at a dragon\\. After defeating them both, you took some loot of their cold bodies and went home\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #25", "At the edge of the known lands, there is an old cursed field, full of relics of ancient civilisations that destroyed each other\\. You love coming back there, to collect antique items\\. This time you found a huge battle-axe, with the rarest Whitewood handle\\. A runic inscription is hard to read, you only understood its about some Valhalla\\. You took it home to cut the handle and sell the wood to merchants\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #26", "In the forest you found two completely identical man-spiders staring at each other, pointing with their second right leg\\. They were hissing and sputtering about something\\. That is until you sliced their throats and extracted precious web glands\\. Good job!(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #27", "In the forest you encountered a father and son\\. Father was shouting at his child screaming something about corals\\. We don't even have sea around here, what a strange man\\. You hit him and his son with a baseball bat to clear their heads\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #28", "You discovered a trail of trunks in the woods\\. You followed it with caution\\. In the center of a clearing you found a black dragon caught in a net\\. It doesn't seem dangerous, so you approached it carefully and freed it\\.\\.\\. from its miserable existence\\. You sold its black scales for a good price to a local blacksmith\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #29", "Snares and traps, placed far away from the road, indicated that hunters earned their living in those places\\. Having spotted a quail in a snare, you reasoned that it wouldn't cost the hunters anything if you set it free, as the bird was so small, you couldnt eat it anyway\\. Besides, there were all sorts of small items near the traps, so it was a win-win situation\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #30", "At the edge of the known lands, there is an old cursed field, full of relics of ancient civilisations that destroyed each other\\. You love coming back there, to collect antique items\\. Under a small stone hill you found a blue cloak\\. The fabric was aged but still strong, embroidered with stars and some obscene symbols\\. Perhaps it belonged to some warlord of the past to set fear in his enemies\\. You took the cloak to sell the quality fabric to merchants\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #30", "As you were strolling through the forest, you found a drunk scientist and a little kid swearing at each other\\. But before you could approach them, they disappeared into thin air\\. As you came closer to investigate you found a pickle that you sold to Jerry, the local merchant\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #30", "In the forest you came across five librarians\\. Two of them were writing something down while the other three were just copying\\. You decided that it's unacceptable, so you pulled out your sword and killed them\\. Piracy's a crime, and crime doesn't pay\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #30", "Walking through the forest you reached a cemetery, where you found a boy facing a man without a nose in a magic duel\\. You decided to help the man and stabbed the boy\\. The man gave you some magic artifacts that you sold to a local magician\\. Hope you did nothing wrong(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #30", "In the lush thicket the path became barely distinguishable\\. Luckily, the trees ended before you got lost completely\\. You even managed to find some gold in an old tree hollow\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #30", "You saw a river running through the middle of the forest\\. It was a rather hot day, so you decided to go for a swim\\. On the other shore, you saw beautiful nimphas bathing in the waters\\. They looked so naive, so you stole their clothes and sold them\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #30", "On your way through the forest, you found an old woman, who offered you a beautifull red apple\\. You heard this story before, so you slayed the woman and you sold it to your neighbor\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #30", "In the forest you met a strange creature who was mumbling about his "precious" and was scared of sunlight\\. It was poor mad Andy Serkis\\. You stole his wedding ring and sold it to a merchant\\. Strangely the merchant was never seen again\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #30", "In the middle of the forest you came upon a short man wearing all green\\. He was drunkingly mumbling about pot of gold at the end of the rainbow\\. Feeling excited, you followed it, only to find a big couldron, full of potatoes\\.(?s:.*)$")
,(5000, ` + strconv.Itoa(objSubTypeMessageQuestResult) + `, "Quest result #30", "At the edge of the known lands, there is an old cursed field, full of relics of ancient civilisations that destroyed each other\\. You love coming back there, to collect antique items that historians can pay a good price for\\. Today you found there a massive red shield with a mystical engraving of a crowned black square\\. A shame that you cant decipher a symbolical meaning of perished empires\\. Still, worth a fortune\\.(?s:.*)$")
;`)
failOnError(err, "resetMsgParsingRules : populate table msg_rules")
}