187 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
			
		
		
	
	
			187 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
CombatControls = {}
 | 
						|
 | 
						|
-- private variables
 | 
						|
local combatControlsButton
 | 
						|
local combatControlsWindow
 | 
						|
local fightOffensiveBox
 | 
						|
local fightBalancedBox
 | 
						|
local fightDefensiveBox
 | 
						|
local chaseModeButton
 | 
						|
local safeFightButton
 | 
						|
local fightModeRadioGroup
 | 
						|
 | 
						|
-- private functions
 | 
						|
local function onSetFightMode(self, selectedFightButton)
 | 
						|
  if selectedFightButton == nil then return end
 | 
						|
  local buttonId = selectedFightButton:getId()
 | 
						|
  local fightMode
 | 
						|
  if buttonId == 'fightOffensiveBox' then
 | 
						|
    fightMode = FightOffensive
 | 
						|
  elseif buttonId == 'fightBalancedBox' then
 | 
						|
    fightMode = FightBalanced
 | 
						|
  else
 | 
						|
    fightMode = FightDefensive
 | 
						|
  end
 | 
						|
  g_game.setFightMode(fightMode)
 | 
						|
end
 | 
						|
 | 
						|
local function onSetChaseMode(self, checked)
 | 
						|
  local chaseMode
 | 
						|
  if checked then
 | 
						|
    chaseMode = ChaseOpponent
 | 
						|
  else
 | 
						|
    chaseMode = DontChase
 | 
						|
  end
 | 
						|
  g_game.setChaseMode(chaseMode)
 | 
						|
end
 | 
						|
 | 
						|
local function onSetSafeFight(self, checked)
 | 
						|
  g_game.setSafeFight(not checked)
 | 
						|
end
 | 
						|
 | 
						|
-- public functions
 | 
						|
function CombatControls.init()
 | 
						|
  combatControlsButton = TopMenu.addRightGameToggleButton('combatControlsButton', tr('Combat Controls'), 'combatcontrols.png', CombatControls.toggle)
 | 
						|
  combatControlsButton:setOn(true)
 | 
						|
  combatControlsWindow = g_ui.loadUI('combatcontrols.otui', GameInterface.getRightPanel())
 | 
						|
  combatControlsWindow:disableResize()
 | 
						|
 | 
						|
  fightOffensiveBox = combatControlsWindow:recursiveGetChildById('fightOffensiveBox')
 | 
						|
  fightBalancedBox = combatControlsWindow:recursiveGetChildById('fightBalancedBox')
 | 
						|
  fightDefensiveBox = combatControlsWindow:recursiveGetChildById('fightDefensiveBox')
 | 
						|
  chaseModeButton = combatControlsWindow:recursiveGetChildById('chaseModeBox')
 | 
						|
  safeFightButton = combatControlsWindow:recursiveGetChildById('safeFightBox')
 | 
						|
 | 
						|
  fightModeRadioGroup = UIRadioGroup.create()
 | 
						|
  fightModeRadioGroup:addWidget(fightOffensiveBox)
 | 
						|
  fightModeRadioGroup:addWidget(fightBalancedBox)
 | 
						|
  fightModeRadioGroup:addWidget(fightDefensiveBox)
 | 
						|
 | 
						|
  connect(fightModeRadioGroup, { onSelectionChange = onSetFightMode })
 | 
						|
  connect(chaseModeButton, { onCheckChange = onSetChaseMode })
 | 
						|
  connect(safeFightButton, { onCheckChange = onSetSafeFight })
 | 
						|
  connect(g_game, {
 | 
						|
    onGameStart = CombatControls.online,
 | 
						|
    onGameEnd = CombatControls.offline,
 | 
						|
    onFightModeChange = CombatControls.update,
 | 
						|
    onChaseModeChange = CombatControls.update,
 | 
						|
    onSafeFightChange = CombatControls.update,
 | 
						|
    onWalk = CombatControls.check
 | 
						|
  })
 | 
						|
 | 
						|
  if g_game.isOnline() then
 | 
						|
    CombatControls.online()
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
function CombatControls.terminate()
 | 
						|
  if g_game.isOnline() then
 | 
						|
    CombatControls.offline()
 | 
						|
  end
 | 
						|
 | 
						|
  fightModeRadioGroup:destroy()
 | 
						|
  fightModeRadioGroup = nil
 | 
						|
 | 
						|
  fightOffensiveBox = nil
 | 
						|
  fightBalancedBox = nil
 | 
						|
  fightDefensiveBox = nil
 | 
						|
  chaseModeButton = nil
 | 
						|
  safeFightButton = nil
 | 
						|
 | 
						|
  combatControlsButton:destroy()
 | 
						|
  combatControlsButton = nil
 | 
						|
 | 
						|
  combatControlsWindow:destroy()
 | 
						|
  combatControlsWindow = nil
 | 
						|
 | 
						|
  disconnect(g_game, {
 | 
						|
    onGameStart = CombatControls.online,
 | 
						|
    onGameEnd = CombatControls.offline,
 | 
						|
    onFightModeChange = CombatControls.update,
 | 
						|
    onChaseModeChange = CombatControls.update,
 | 
						|
    onSafeFightChange = CombatControls.update,
 | 
						|
    onWalk = CombatControls.check
 | 
						|
  })
 | 
						|
 | 
						|
  CombatControls = nil
 | 
						|
end
 | 
						|
 | 
						|
function CombatControls.update()
 | 
						|
  local fightMode = g_game.getFightMode()
 | 
						|
  if fightMode == FightOffensive then
 | 
						|
    fightModeRadioGroup:selectWidget(fightOffensiveBox)
 | 
						|
  elseif fightMode == FightBalanced then
 | 
						|
    fightModeRadioGroup:selectWidget(fightBalancedBox)
 | 
						|
  else
 | 
						|
    fightModeRadioGroup:selectWidget(fightDefensiveBox)
 | 
						|
  end
 | 
						|
 | 
						|
  local chaseMode = g_game.getChaseMode()
 | 
						|
  chaseModeButton:setChecked(chaseMode == ChaseOpponent)
 | 
						|
 | 
						|
  local safeFight = g_game.isSafeFight()
 | 
						|
  safeFightButton:setChecked(not safeFight)
 | 
						|
end
 | 
						|
 | 
						|
function CombatControls.check()
 | 
						|
  if(Options.getOption('autoChaseOverride')) then
 | 
						|
    if(g_game.isAttacking() and g_game.getChaseMode() == ChaseOpponent) then
 | 
						|
      g_game.setChaseMode(DontChase)
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
function CombatControls.online()
 | 
						|
  local player = g_game.getLocalPlayer()
 | 
						|
  if(player) then
 | 
						|
    local char = player:getName()
 | 
						|
 | 
						|
    local lastCombatControls = g_settings.getNode('LastCombatControls')
 | 
						|
 | 
						|
    if(not table.empty(lastCombatControls)) then
 | 
						|
      if(lastCombatControls[char]) then
 | 
						|
        g_game.setFightMode(lastCombatControls[char].fightMode)
 | 
						|
        g_game.setChaseMode(lastCombatControls[char].chaseMode)
 | 
						|
        g_game.setSafeFight(lastCombatControls[char].safeFight)
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  combatControlsWindow:setVisible(combatControlsButton:isOn())
 | 
						|
  CombatControls.update()
 | 
						|
end
 | 
						|
 | 
						|
function CombatControls.offline()
 | 
						|
  local lastCombatControls = g_settings.getNode('LastCombatControls')
 | 
						|
  if(not lastCombatControls) then
 | 
						|
    lastCombatControls = {}
 | 
						|
  end
 | 
						|
 | 
						|
  local player = g_game.getLocalPlayer()
 | 
						|
  if(player) then
 | 
						|
    local char = player:getName()
 | 
						|
    lastCombatControls[char] = {
 | 
						|
      fightMode = g_game.getFightMode(),
 | 
						|
      chaseMode = g_game.getChaseMode(),
 | 
						|
      safeFight = g_game.isSafeFight()
 | 
						|
    }
 | 
						|
 | 
						|
    -- save last combat control settings
 | 
						|
    g_settings.setNode('LastCombatControls', lastCombatControls)
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
function CombatControls.toggle()
 | 
						|
  if combatControlsButton:isOn() then
 | 
						|
    combatControlsWindow:close()
 | 
						|
    combatControlsButton:setOn(false)
 | 
						|
  else
 | 
						|
    combatControlsWindow:open()
 | 
						|
    combatControlsButton:setOn(true)
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
function CombatControls.onMiniWindowClose()
 | 
						|
  combatControlsButton:setOn(false)
 | 
						|
end
 |