2012-05-01 08:49:48 +02:00
|
|
|
RuleViolation = {}
|
|
|
|
|
|
|
|
-- private variables
|
|
|
|
local rvreasons = {}
|
2012-06-05 18:03:35 +02:00
|
|
|
rvreasons[1] = tr("1a) Offensive Name")
|
|
|
|
rvreasons[2] = tr("1b) Invalid Name Format")
|
|
|
|
rvreasons[3] = tr("1c) Unsuitable Name")
|
|
|
|
rvreasons[4] = tr("1d) Name Inciting Rule Violation")
|
|
|
|
rvreasons[5] = tr("2a) Offensive Statement")
|
|
|
|
rvreasons[6] = tr("2b) Spamming")
|
|
|
|
rvreasons[7] = tr("2c) Illegal Advertising")
|
|
|
|
rvreasons[8] = tr("2d) Off-Topic Public Statement")
|
|
|
|
rvreasons[9] = tr("2e) Non-English Public Statement")
|
|
|
|
rvreasons[10] = tr("2f) Inciting Rule Violation")
|
|
|
|
rvreasons[11] = tr("3a) Bug Abuse")
|
|
|
|
rvreasons[12] = tr("3b) Game Weakness Abuse")
|
|
|
|
rvreasons[13] = tr("3c) Using Unofficial Software to Play")
|
|
|
|
rvreasons[14] = tr("3d) Hacking")
|
|
|
|
rvreasons[15] = tr("3e) Multi-Clienting")
|
|
|
|
rvreasons[16] = tr("3f) Account Trading or Sharing")
|
|
|
|
rvreasons[17] = tr("4a) Threatening Gamemaster")
|
|
|
|
rvreasons[18] = tr("4b) Pretending to Have Influence on Rule Enforcement")
|
|
|
|
rvreasons[19] = tr("4c) False Report to Gamemaster")
|
|
|
|
rvreasons[20] = tr("Destructive Behaviour")
|
|
|
|
rvreasons[21] = tr("Excessive Unjustified Player Killing")
|
2012-05-01 08:49:48 +02:00
|
|
|
|
|
|
|
local rvactions = {}
|
|
|
|
rvactions[0] = tr("Notation")
|
|
|
|
rvactions[1] = tr("Name Report")
|
|
|
|
rvactions[2] = tr("Banishment")
|
|
|
|
rvactions[3] = tr("Name Report + Banishment")
|
|
|
|
rvactions[4] = tr("Banishment + Final Warning")
|
|
|
|
rvactions[5] = tr("Name Report + Banishment + Final Warning")
|
|
|
|
rvactions[6] = tr("Statement Report")
|
|
|
|
|
|
|
|
local ruleViolationWindow
|
|
|
|
local reasonsTextList
|
|
|
|
local actionsTextList
|
|
|
|
|
|
|
|
-- public functions
|
|
|
|
function RuleViolation.hasWindowAccess()
|
|
|
|
return reasonsTextList:getChildCount() > 0
|
|
|
|
end
|
|
|
|
|
|
|
|
function RuleViolation.loadReasons()
|
|
|
|
reasonsTextList:destroyChildren()
|
|
|
|
|
|
|
|
local actions = g_game.getGMActions()
|
|
|
|
for reason, actionFlags in pairs(actions) do
|
|
|
|
local label = createWidget('RVListLabel', reasonsTextList)
|
|
|
|
label:setText(rvreasons[reason])
|
|
|
|
label.reasonId = reason
|
|
|
|
label.actionFlags = actionFlags
|
|
|
|
end
|
|
|
|
|
|
|
|
if not RuleViolation.hasWindowAccess() and ruleViolationWindow:isVisible() then RuleViolation.hide() end
|
|
|
|
end
|
|
|
|
|
|
|
|
function RuleViolation.init()
|
2012-05-10 15:06:06 +02:00
|
|
|
connect(g_game, { onGMActions = RuleViolation.loadReasons })
|
2012-05-01 08:49:48 +02:00
|
|
|
|
|
|
|
ruleViolationWindow = displayUI('ruleviolation.otui')
|
|
|
|
ruleViolationWindow:setVisible(false)
|
|
|
|
|
|
|
|
reasonsTextList = ruleViolationWindow:getChildById('reasonList')
|
|
|
|
actionsTextList = ruleViolationWindow:getChildById('actionList')
|
|
|
|
|
|
|
|
Keyboard.bindKeyDown('Ctrl+Y', RuleViolation.show)
|
|
|
|
|
|
|
|
if g_game.isOnline() then
|
|
|
|
RuleViolation.loadReasons()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function RuleViolation.terminate()
|
2012-05-10 15:06:06 +02:00
|
|
|
disconnect(g_game, { onGMActions = RuleViolation.loadReasons })
|
2012-05-01 08:49:48 +02:00
|
|
|
|
|
|
|
ruleViolationWindow:destroy()
|
|
|
|
ruleViolationWindow = nil
|
|
|
|
|
|
|
|
reasonsTextList = nil
|
|
|
|
actionsTextList = nil
|
|
|
|
end
|
|
|
|
|
|
|
|
function RuleViolation.show(target, statement)
|
|
|
|
if g_game.isOnline() and RuleViolation.hasWindowAccess() then
|
|
|
|
if target then
|
|
|
|
ruleViolationWindow:getChildById('nameText'):setText(target)
|
|
|
|
end
|
|
|
|
|
|
|
|
if statement then
|
|
|
|
ruleViolationWindow:getChildById('statementText'):setText(statement)
|
|
|
|
end
|
|
|
|
|
|
|
|
ruleViolationWindow:show()
|
|
|
|
ruleViolationWindow:raise()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function RuleViolation.hide()
|
|
|
|
ruleViolationWindow:hide()
|
|
|
|
RuleViolation.clearForm()
|
|
|
|
end
|
|
|
|
|
|
|
|
function RuleViolation.onSelectReason(reasonLabel, focused)
|
|
|
|
if reasonLabel.actionFlags and focused then
|
|
|
|
actionsTextList:destroyChildren()
|
|
|
|
for actionBaseFlag = 0, #rvactions do
|
|
|
|
actionFlagString = rvactions[actionBaseFlag]
|
|
|
|
if bit32.band(reasonLabel.actionFlags, math.pow(2, actionBaseFlag)) > 0 then
|
|
|
|
local label = createWidget('RVListLabel', actionsTextList)
|
|
|
|
label:setText(actionFlagString)
|
|
|
|
label.actionId = actionBaseFlag
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function RuleViolation.report()
|
|
|
|
local target = ruleViolationWindow:getChildById('nameText'):getText()
|
|
|
|
local reason = reasonsTextList:getFocusedChild().reasonId
|
|
|
|
local action = actionsTextList:getFocusedChild().actionId
|
|
|
|
local comment = ruleViolationWindow:getChildById('commentText'):getText()
|
|
|
|
local statement = ruleViolationWindow:getChildById('statementText'):getText()
|
|
|
|
local statementId = 0 -- TODO: message unique id ?
|
|
|
|
local ipBanishment = ruleViolationWindow:getChildById('ipBanCheckBox'):isChecked()
|
|
|
|
if action == 6 and statement == "" then
|
|
|
|
displayErrorBox(tr("Error"), tr("No statement has been selected."))
|
|
|
|
elseif comment == "" then
|
|
|
|
displayErrorBox(tr("Error"), tr("You must enter a comment."))
|
|
|
|
else
|
|
|
|
g_game.reportRuleVilation(target, reason, action, comment, statement, statementId, ipBanishment)
|
|
|
|
RuleViolation.hide()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function RuleViolation.clearForm()
|
|
|
|
ruleViolationWindow:getChildById('nameText'):clearText()
|
|
|
|
ruleViolationWindow:getChildById('commentText'):clearText()
|
|
|
|
ruleViolationWindow:getChildById('statementText'):clearText()
|
|
|
|
ruleViolationWindow:getChildById('ipBanCheckBox'):setChecked(false)
|
|
|
|
end
|