152 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
rvreasons = {}
 | 
						|
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")
 | 
						|
 | 
						|
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")
 | 
						|
 | 
						|
ruleViolationWindow = nil
 | 
						|
reasonsTextList = nil
 | 
						|
actionsTextList = nil
 | 
						|
 | 
						|
function init()
 | 
						|
  connect(g_game, { onGMActions = loadReasons })
 | 
						|
 | 
						|
  ruleViolationWindow = g_ui.displayUI('ruleviolation')
 | 
						|
  ruleViolationWindow:setVisible(false)
 | 
						|
 | 
						|
  reasonsTextList = ruleViolationWindow:getChildById('reasonList')
 | 
						|
  actionsTextList = ruleViolationWindow:getChildById('actionList')
 | 
						|
 | 
						|
  g_keyboard.bindKeyDown('Ctrl+Y', function() show() end)
 | 
						|
 | 
						|
  if g_game.isOnline() then
 | 
						|
    loadReasons()
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
function terminate()
 | 
						|
  disconnect(g_game, { onGMActions = loadReasons })
 | 
						|
  g_keyboard.unbindKeyDown('Ctrl+Y')
 | 
						|
 | 
						|
  ruleViolationWindow:destroy()
 | 
						|
end
 | 
						|
 | 
						|
function hasWindowAccess()
 | 
						|
  return reasonsTextList:getChildCount() > 0
 | 
						|
end
 | 
						|
 | 
						|
function loadReasons()
 | 
						|
  reasonsTextList:destroyChildren()
 | 
						|
  actionsTextList:destroyChildren()
 | 
						|
 | 
						|
  local actions = g_game.getGMActions()
 | 
						|
  for reason, actionFlags in pairs(actions) do
 | 
						|
    local label = g_ui.createWidget('RVListLabel', reasonsTextList)
 | 
						|
    label.onFocusChange = onSelectReason
 | 
						|
    label:setText(rvreasons[reason])
 | 
						|
    label.reasonId = reason
 | 
						|
    label.actionFlags = actionFlags
 | 
						|
  end
 | 
						|
 | 
						|
  if not hasWindowAccess() and ruleViolationWindow:isVisible() then hide() end
 | 
						|
end
 | 
						|
 | 
						|
function show(target, statement)
 | 
						|
  if g_game.isOnline() and hasWindowAccess() then
 | 
						|
    if target then
 | 
						|
      ruleViolationWindow:getChildById('nameText'):setText(target)
 | 
						|
    end
 | 
						|
 | 
						|
    if statement then
 | 
						|
      ruleViolationWindow:getChildById('statementText'):setText(statement)
 | 
						|
    end
 | 
						|
 | 
						|
    ruleViolationWindow:show()
 | 
						|
    ruleViolationWindow:raise()
 | 
						|
    ruleViolationWindow:focus()
 | 
						|
    ruleViolationWindow:getChildById('commentText'):focus()
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
function hide()
 | 
						|
  ruleViolationWindow:hide()
 | 
						|
  clearForm()
 | 
						|
end
 | 
						|
 | 
						|
function onSelectReason(reasonLabel, focused)
 | 
						|
  if reasonLabel.actionFlags and focused then
 | 
						|
    actionsTextList:destroyChildren()
 | 
						|
    for actionBaseFlag = 0, #rvactions do
 | 
						|
      local actionFlagString = rvactions[actionBaseFlag]
 | 
						|
      if bit32.band(reasonLabel.actionFlags, math.pow(2, actionBaseFlag)) > 0 then
 | 
						|
        local label = g_ui.createWidget('RVListLabel', actionsTextList)
 | 
						|
        label:setText(actionFlagString)
 | 
						|
        label.actionId = actionBaseFlag
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
function report()
 | 
						|
  local reasonLabel = reasonsTextList:getFocusedChild()
 | 
						|
  if not reasonLabel then
 | 
						|
    displayErrorBox(tr("Error"), tr("You must select a reason."))
 | 
						|
    return
 | 
						|
  end
 | 
						|
 | 
						|
  local actionLabel = actionsTextList:getFocusedChild()
 | 
						|
  if not actionLabel then
 | 
						|
    displayErrorBox(tr("Error"), tr("You must select an action."))
 | 
						|
    return
 | 
						|
  end
 | 
						|
 | 
						|
  local target = ruleViolationWindow:getChildById('nameText'):getText()
 | 
						|
  local reason = reasonLabel.reasonId
 | 
						|
  local action = actionLabel.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.reportRuleViolation(target, reason, action, comment, statement, statementId, ipBanishment)
 | 
						|
    hide()
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
function clearForm()
 | 
						|
  ruleViolationWindow:getChildById('nameText'):clearText()
 | 
						|
  ruleViolationWindow:getChildById('commentText'):clearText()
 | 
						|
  ruleViolationWindow:getChildById('statementText'):clearText()
 | 
						|
  ruleViolationWindow:getChildById('ipBanCheckBox'):setChecked(false)
 | 
						|
end
 |