Resolve "Merge the best from 7.40 branch"

This commit is contained in:
Erikas Kontenis
2022-04-06 14:58:52 +00:00
parent 3bd1a6f07e
commit 155da3573c
928 changed files with 43723 additions and 1221 deletions

View File

@@ -0,0 +1,151 @@
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

View File

@@ -0,0 +1,9 @@
Module
name: game_ruleviolation
description: Rule violation interface (Ctrl+Y)
author: andrefaramir
website: https://github.com/edubart/otclient
sandboxed: true
scripts: [ ruleviolation ]
@onLoad: init()
@onUnload: terminate()

View File

@@ -0,0 +1,120 @@
RVListLabel < Label
background-color: alpha
text-offset: 2 0
focusable: true
$focus:
background-color: #ffffff22
color: #ffffff
RVLabel < Label
anchors.left: parent.left
anchors.right: parent.right
$first:
anchors.top: parent.top
$!first:
margin-top: 10
anchors.top: prev.bottom
RVTextEdit < TextEdit
margin-top: 2
anchors.left: parent.left
anchors.right: parent.right
$first:
anchors.top: parent.top
$!first:
anchors.top: prev.bottom
MainWindow
id: ruleViolationWindow
size: 400 445
text: Rule Violation
@onEscape: hide()
RVLabel
!text: tr('Name') .. ':'
RVTextEdit
id: nameText
RVLabel
!text: tr('Statement') .. ':'
RVTextEdit
id: statementText
enabled: false
RVLabel
!text: tr('Reason') .. ':'
TextList
id: reasonList
height: 100
anchors.top: prev.bottom
anchors.left: parent.left
anchors.right: parent.right
margin-top: 2
focusable: false
vertical-scrollbar: reasonListScrollBar
VerticalScrollBar
id: reasonListScrollBar
anchors.top: reasonList.top
anchors.bottom: reasonList.bottom
anchors.right: reasonList.right
step: 14
pixels-scroll: true
RVLabel
!text: tr('Action') .. ':'
TextList
id: actionList
height: 60
anchors.top: prev.bottom
anchors.left: parent.left
anchors.right: parent.right
margin-top: 2
focusable: false
vertical-scrollbar: actionListScrollBar
VerticalScrollBar
id: actionListScrollBar
anchors.top: actionList.top
anchors.bottom: actionList.bottom
anchors.right: actionList.right
step: 14
pixels-scroll: true
CheckBox
id: ipBanCheckBox
!text: tr('IP Address Banishment')
margin-top: 10
anchors.top: prev.bottom
anchors.left: parent.left
anchors.right: parent.right
RVLabel
!text: tr('Comment') .. ':'
RVTextEdit
id: commentText
Button
!text: tr('Cancel')
width: 64
anchors.right: parent.right
anchors.bottom: parent.bottom
@onClick: hide()
Button
!text: tr('Ok')
width: 64
margin-right: 5
anchors.right: prev.left
anchors.bottom: parent.bottom
@onClick: report()