mirror of
				https://github.com/ErikasKontenis/SabrehavenServer.git
				synced 2025-10-30 19:56:22 +01:00 
			
		
		
		
	commit client
This commit is contained in:
		
							
								
								
									
										151
									
								
								SabrehavenOTClient/modules/game_ruleviolation/ruleviolation.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								SabrehavenOTClient/modules/game_ruleviolation/ruleviolation.lua
									
									
									
									
									
										Normal 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 | ||||
| @@ -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() | ||||
							
								
								
									
										120
									
								
								SabrehavenOTClient/modules/game_ruleviolation/ruleviolation.otui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								SabrehavenOTClient/modules/game_ruleviolation/ruleviolation.otui
									
									
									
									
									
										Normal 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() | ||||
		Reference in New Issue
	
	Block a user
	 ErikasKontenis
					ErikasKontenis