Nocktal 2 Postado Maio 18, 2013 Share Postado Maio 18, 2013 Eae eu preciso de uma ajuda eu to com server do Robin Wood (sei la o nome) Ae eu tive a ideia de usa otclient e achei uma coisa interessante nele uma spell list sendo que ela n aparece fiquei editando mas começo a da erro quando modifiquei pra tais vocações e queria uma ajuda nela quem pude XD a versao do ot e 0.6.1 e queria que ela aparece-se la encima como os otros ~~Spelllist~~ vai ser em code oks spelllist.lua local SpelllistProfile = 'Default' spelllistWindow = nil spelllistButton = nil spellList = nil nameValueLabel = nil formulaValueLabel = nil vocationValueLabel = nil groupValueLabel = nil typeValueLabel = nil cooldownValueLabel = nil levelValueLabel = nil manaValueLabel = nil premiumValueLabel = nil descriptionValueLabel = nil vocationBoxAny = nil vocationBoxNaruto = nil vocationBoxSasuke = nil vocationBoxLee = nil vocationBoxSakura = nil vocationBoxGaara = nil vocationBoxNeji = nil vocationBoxKiba = nil vocationBoxShikamaru = nil vocationBoxHinata = nil vocationBoxTenten = nil vocationBoxItachi = nil vocationBoxBee = nil vocationBoxKakashi = nil groupBoxAny = nil groupBoxAttack = nil groupBoxHealing = nil groupBoxSupport = nil premiumBoxAny = nil premiumBoxNo = nil premiumBoxYes = nil vocationRadioGroup = nil groupRadioGroup = nil premiumRadioGroup = nil -- consts FILTER_PREMIUM_ANY = 0 FILTER_PREMIUM_NO = 1 FILTER_PREMIUM_YES = 2 FILTER_VOCATION_ANY = 0 FILTER_VOCATION_NARUTO = 1 FILTER_VOCATION_SASUKE = 2 FILTER_VOCATION_LEE = 3 FILTER_VOCATION_SAKURA = 4 FILTER_VOCATION_GAARA = 5 FILTER_VOCATION_NEJI = 6 FILTER_VOCATION_KIBA = 7 FILTER_VOCATION_SHIKAMARU = 8 FILTER_VOCATION_HINATA = 9 FILTER_VOCATION_TENTEN = 10 FILTER_VOCATION_ITACHI = 11 FILTER_VOCATION_BEE = 12 FILTER_VOCATION_KAKASHI = 13 FILTER_GROUP_ANY = 0 FILTER_GROUP_ATTACK = 1 FILTER_GROUP_HEALING = 2 FILTER_GROUP_SUPPORT = 3 -- Filter Settings local filters = { level = false, vocation = false, vocationId = FILTER_VOCATION_ANY, premium = FILTER_PREMIUM_ANY, groupId = FILTER_GROUP_ANY } function getSpelllistProfile() return SpelllistProfile end function setSpelllistProfile(name) if SpelllistProfile == name then return end if SpelllistSettings[name] and SpellInfo[name] then local oldProfile = SpelllistProfile SpelllistProfile = name changeSpelllistProfile(oldProfile) else perror('Spelllist profile \'' .. name .. '\' could not be set.') end end function online() if g_game.getFeature(GameSpellList) then spelllistButton:show() else spelllistButton:hide() end if g_game.getProtocolVersion() >= 950 then -- Vocation is only send in newer clients spelllistWindow:getChildById('buttonFilterVocation'):setVisible(true) else spelllistWindow:getChildById('buttonFilterVocation'):setVisible(false) end end function offline() resetWindow() end function init() connect(g_game, { onGameStart = online, onGameEnd = offline }) spelllistWindow = g_ui.displayUI('spelllist', modules.game_interface.getRightPanel()) spelllistWindow:hide() spelllistButton = modules.client_topmenu.addRightGameToggleButton('spelllistButton', tr('Spell List'), '/images/topbuttons/spelllist', toggle) spelllistButton:setOn(true) nameValueLabel = spelllistWindow:getChildById('labelNameValue') formulaValueLabel = spelllistWindow:getChildById('labelFormulaValue') vocationValueLabel = spelllistWindow:getChildById('labelVocationValue') groupValueLabel = spelllistWindow:getChildById('labelGroupValue') typeValueLabel = spelllistWindow:getChildById('labelTypeValue') cooldownValueLabel = spelllistWindow:getChildById('labelCooldownValue') levelValueLabel = spelllistWindow:getChildById('labelLevelValue') manaValueLabel = spelllistWindow:getChildById('labelManaValue') premiumValueLabel = spelllistWindow:getChildById('labelPremiumValue') descriptionValueLabel = spelllistWindow:getChildById('labelDescriptionValue') vocationBoxAny = spelllistWindow:getChildById('vocationBoxAny') vocationBoxNaruto = spelllistWindow:getChildById('vocationBoxNaruto') vocationBoxSasuke = spelllistWindow:getChildById('vocationBoxSasuke') vocationBoxLee = spelllistWindow:getChildById('vocationBoxLee') vocationBoxSakura = spelllistWindow:getChildById('vocationBoxSakura') vocationBoxGaara = spelllistWindow:getChildById('vocationBoxGaara') vocationBoxNeji = spelllistWindow:getChildById('vocationBoxNeji') vocationBoxKiba = spelllistWindow:getChildById('vocationBoxKiba') vocationBoxShikamaru = spelllistWindow:getChildById('vocationBoxShikamaru') vocationBoxHinata = spelllistWindow:getChildById('vocationBoxHinata') vocationBoxTenten = spelllistWindow:getChildById('vocationBoxTenten') vocationBoxItachi = spelllistWindow:getChildById('vocationBoxItachi') vocationBoxBee = spelllistWindow:getChildById('vocationBoxBee') vocationBoxKakashi = spelllistWindow:getChildById('vocationBoxKakashi') groupBoxAny = spelllistWindow:getChildById('groupBoxAny') groupBoxAttack = spelllistWindow:getChildById('groupBoxAttack') groupBoxHealing = spelllistWindow:getChildById('groupBoxHealing') groupBoxSupport = spelllistWindow:getChildById('groupBoxSupport') premiumBoxAny = spelllistWindow:getChildById('premiumBoxAny') premiumBoxYes = spelllistWindow:getChildById('premiumBoxYes') premiumBoxNo = spelllistWindow:getChildById('premiumBoxNo') vocationRadioGroup = UIRadioGroup.create() vocationRadioGroup:addWidget(vocationBoxAny) vocationRadioGroup:addWidget(vocationBoxNaruto) vocationRadioGroup:addWidget(vocationBoxSasuke) vocationRadioGroup:addWidget(vocationBoxLee) vocationRadioGroup:addWidget(vocationBoxSakura) vocationRadioGroup:addWidget(vocationBoxGaara) vocationRadioGroup:addWidget(vocationBoxNeji) vocationRadioGroup:addWidget(vocationBoxKiba) vocationRadioGroup:addWidget(vocationBoxShikamaru) vocationRadioGroup:addWidget(vocationBoxHinata) vocationRadioGroup:addWidget(vocationBoxTenten) vocationRadioGroup:addWidget(vocationBoxItachi) vocationRadioGroup:addWidget(vocationBoxBee) vocationRadioGroup:addWidget(vocationBoxKakashi) groupRadioGroup = UIRadioGroup.create() groupRadioGroup:addWidget(groupBoxAny) groupRadioGroup:addWidget(groupBoxAttack) groupRadioGroup:addWidget(groupBoxHealing) groupRadioGroup:addWidget(groupBoxSupport) premiumRadioGroup = UIRadioGroup.create() premiumRadioGroup:addWidget(premiumBoxAny) premiumRadioGroup:addWidget(premiumBoxYes) premiumRadioGroup:addWidget(premiumBoxNo) premiumRadioGroup:selectWidget(premiumBoxAny) vocationRadioGroup:selectWidget(vocationBoxAny) groupRadioGroup:selectWidget(groupBoxAny) vocationRadioGroup.onSelectionChange = toggleFilter groupRadioGroup.onSelectionChange = toggleFilter premiumRadioGroup.onSelectionChange = toggleFilter spellList = spelllistWindow:getChildById('spellList') g_keyboard.bindKeyPress('Down', function() spellList:focusNextChild(KeyboardFocusReason) end, spelllistWindow) g_keyboard.bindKeyPress('Up', function() spellList:focusPreviousChild(KeyboardFocusReason) end, spelllistWindow) initialiseSpelllist() resizeWindow() end function terminate() disconnect(g_game, { onGameStart = online, onGameEnd = offline }) disconnect(spellList, { onChildFocusChange = function(self, focusedChild) if focusedChild == nil then return end updateSpellInformation(focusedChild) end }) spelllistWindow:destroy() spelllistButton:destroy() vocationRadioGroup:destroy() groupRadioGroup:destroy() premiumRadioGroup:destroy() end function initialiseSpelllist() for i = 1, #SpelllistSettings[spelllistProfile].spellOrder do local spell = SpelllistSettings[spelllistProfile].spellOrder[i] local info = SpellInfo[spelllistProfile][spell] local tmpLabel = g_ui.createWidget('SpellListLabel', spellList) tmpLabel:setId(spell) tmpLabel:setText(spell .. '\n\'' .. info.words .. '\'') tmpLabel:setPhantom(false) local iconId = tonumber(info.icon) if not iconId and SpellIcons[info.icon] then iconId = SpellIcons[info.icon][1] end if not(iconId) then perror('Spell icon \'' .. info.icon .. '\' not found.') end tmpLabel:setHeight(SpelllistSettings[spelllistProfile].iconSize.height + 4) tmpLabel:setTextOffset(topoint((SpelllistSettings[spelllistProfile].iconSize.width + 10) .. ' ' .. (SpelllistSettings[spelllistProfile].iconSize.height - 32)/2 + 3)) tmpLabel:setImageSource('/images/game/spells/' .. SpelllistSettings[spelllistProfile].iconFile) tmpLabel:setImageClip(Spells.getImageClip(iconId, SpelllistProfile)) tmpLabel:setImageSize(tosize(SpelllistSettings[spelllistProfile].iconSize.width .. ' ' .. SpelllistSettings[spelllistProfile].iconSize.height)) tmpLabel.onClick = updateSpellInformation end connect(spellList, { onChildFocusChange = function(self, focusedChild) if focusedChild == nil then return end updateSpellInformation(focusedChild) end }) end function changeSpelllistProfile(oldProfile) -- Delete old labels for i = 1, #SpelllistSettings[oldProfile].spellOrder do local spell = SpelllistSettings[oldProfile].spellOrder[i] local tmpLabel = spellList:getChildById(spell) tmpLabel:destroy() end -- Create new spelllist and ajust window initialiseSpelllist() setOptions() resizeWindow() resetWindow() end function updateSpelllist() for i = 1, #SpelllistSettings[spelllistProfile].spellOrder do local spell = SpelllistSettings[spelllistProfile].spellOrder[i] local info = SpellInfo[spelllistProfile][spell] local tmpLabel = spellList:getChildById(spell) local localPlayer = g_game.getLocalPlayer() if (not(filters.level) or info.level <= localPlayer:getLevel()) and (not(filters.vocation) or table.find(info.vocations, localPlayer:getVocation())) and (filters.vocationId == FILTER_VOCATION_ANY or table.find(info.vocations, filters.vocationId) or table.find(info.vocations, filters.vocationId+4)) and (filters.groupId == FILTER_GROUP_ANY or info.group[filters.groupId]) and (filters.premium == FILTER_PREMIUM_ANY or (info.premium and filters.premium == FILTER_PREMIUM_YES) or (not(info.premium) and filters.premium == FILTER_PREMIUM_NO)) then tmpLabel:setVisible(true) else tmpLabel:setVisible(false) end end end function updateSpellInformation(widget) local spell = widget:getId() local name = '' local formula = '' local vocation = '' local group = '' local type = '' local cooldown = '' local level = '' local mana = '' local premium = '' local description = '' if SpellInfo[spelllistProfile][spell] then local info = SpellInfo[spelllistProfile][spell] name = spell formula = info.words for i = 1, #info.vocations do local vocationId = info.vocations[i] if vocationId <= 13 or not(table.find(info.vocations, (vocationId-13))) then vocation = vocation .. (vocation:len() == 0 and '' or ', ') .. VocationNames[vocationId] end end cooldown = (info.exhaustion / 1000) .. 's' for groupId, groupName in ipairs(SpellGroups) do if info.group[groupId] then group = group .. (group:len() == 0 and '' or ' / ') .. groupName cooldown = cooldown .. ' / ' .. (info.group[groupId] / 1000) .. 's' end end type = info.type level = info.level mana = info.mana .. ' / ' .. info.soul premium = (info.premium and 'yes' or 'no') description = info.description or '-' end nameValueLabel:setText(name) formulaValueLabel:setText(formula) vocationValueLabel:setText(vocation) groupValueLabel:setText(group) typeValueLabel:setText(type) cooldownValueLabel:setText(cooldown) levelValueLabel:setText(level) manaValueLabel:setText(Mana) premiumValueLabel:setText(premium) descriptionValueLabel:setText(description) end function toggle() if spelllistButton:isOn() then spelllistWindow:hide() spelllistButton:setOn(false) else spelllistWindow:show() spelllistButton:setOn(true) end end function toggleFilter(widget, selectedWidget) if widget == vocationRadioGroup then local boxId = selectedWidget:getId() if boxId == 'vocationBoxAny' then filters.vocationId = FILTER_VOCATION_ANY elseif boxId == 'vocationBoxNaruto' then filters.vocationId = FILTER_VOCATION_NARUTO elseif boxId == 'vocationBoxSasuke' then filters.vocationId = FILTER_VOCATION_SASUKE elseif boxId == 'vocationBoxLee' then filters.vocationId = FILTER_VOCATION_LEE elseif boxId == 'vocationBoxSakura' then filters.vocationId = FILTER_VOCATION_SAKURA elseif boxId == 'vocationBoxGaara' then filters.vocationId = FILTER_VOCATION_Gaara elseif boxId == 'vocationBoxNeji' then filters.vocationId = FILTER_VOCATION_SAKURA elseif boxId == 'vocationBoxKiba' then filters.vocationId = FILTER_VOCATION_KIBA elseif boxId == 'vocationBoxShikamaru' then filters.vocationId = FILTER_VOCATION_SHIKAMARU elseif boxId == 'vocationBoxHinata' then filters.vocationId = FILTER_VOCATION_HINATA elseif boxId == 'vocationBoxTenten' then filters.vocationId = FILTER_VOCATION_TENTEN elseif boxId == 'vocationBoxItachi' then filters.vocationId = FILTER_VOCATION_ITACHI elseif boxId == 'vocationBoxBee' then filters.vocationId = FILTER_VOCATION_BEE elseif boxId == 'vocationBoxKakashi' then filters.vocationId = FILTER_VOCATION_KAKASHI end elseif widget == groupRadioGroup then local boxId = selectedWidget:getId() if boxId == 'groupBoxAny' then filters.groupId = FILTER_GROUP_ANY elseif boxId == 'groupBoxAttack' then filters.groupId = FILTER_GROUP_ATTACK elseif boxId == 'groupBoxHealing' then filters.groupId = FILTER_GROUP_HEALING elseif boxId == 'groupBoxSupport' then filters.groupId = FILTER_GROUP_SUPPORT end elseif widget == premiumRadioGroup then local boxId = selectedWidget:getId() if boxId == 'premiumBoxAny' then filters.premium = FILTER_PREMIUM_ANY elseif boxId == 'premiumBoxNo' then filters.premium = FILTER_PREMIUM_NO elseif boxId == 'premiumBoxYes' then filters.premium = FILTER_PREMIUM_YES end else local id = widget:getId() if id == 'buttonFilterLevel' then filters.level = not(filters.level) widget:setOn(filters.level) elseif id == 'buttonFilterVocation' then filters.vocation = not(filters.vocation) widget:setOn(filters.vocation) end end updateSpelllist() end function resizeWindow() spelllistWindow:setWidth(SpelllistSettings['Default'].spellWindowWidth + SpelllistSettings[spelllistProfile].iconSize.width - 32) spellList:setWidth(SpelllistSettings['Default'].spellListWidth + SpelllistSettings[spelllistProfile].iconSize.width - 32) end function resetWindow() spelllistWindow:hide() spelllistButton:setOn(true) -- Resetting filters filters.level = false filters.vocation = false local buttonFilterLevel = spelllistWindow:getChildById('buttonFilterLevel') buttonFilterLevel:setOn(filters.level) local buttonFilterVocation = spelllistWindow:getChildById('buttonFilterVocation') buttonFilterVocation:setOn(filters.vocation) vocationRadioGroup:selectWidget(vocationBoxAny) groupRadioGroup:selectWidget(groupBoxAny) premiumRadioGroup:selectWidget(premiumBoxAny) updateSpelllist() end spelllist.otui SpellListLabel < Label font: verdana-11px-monochrome background-color: alpha text-offset: 42 3 focusable: true height: 36 image-clip: 0 0 32 32 image-size: 32 32 image-offset: 2 2 image-source: /images/game/spells/defaultspells $focus: background-color: #ffffff22 color: #ffffff SpellInfoLabel < Label width: 70 font: verdana-11px-monochrome text-align: right margin-left: 10 margin-top: 5 SpellInfoValueLabel < Label text-align: left width: 190 margin-left: 10 margin-top: 5 MainWindow id: spelllistWindow !text: tr('Spell List') size: 550 400 @onEscape: toggle() TextList id: spellList vertical-scrollbar: spellsScrollBar anchors.top: parent.top anchors.left: parent.left anchors.bottom: next.top margin-bottom: 10 padding: 1 width: 210 focusable: false Button id: buttonCancel !text: tr('Close') width: 64 anchors.right: parent.right anchors.bottom: parent.bottom @onClick: toggle() VerticalScrollBar id: spellsScrollBar anchors.top: spellList.top anchors.bottom: spellList.bottom anchors.right: spellList.right step: 50 pixels-scroll: true SpellInfoLabel id: labelName anchors.left: spellList.right anchors.top: spellList.top !text: tr('Name') .. ':' Button id: buttonFilterLevel !text: tr('Level') !tooltip: tr('Hide spells for higher exp. levels') width: 64 anchors.left: spellList.left anchors.top: spellList.bottom @onClick: toggleFilter(self) margin-left: 10 margin-top: 5 color: #FF0000D0 $on: color: green Button id: buttonFilterVocation !text: tr('Vocation') !tooltip: tr('Hide spells for other vocations') width: 64 anchors.left: prev.right anchors.top: spellList.bottom @onClick: toggleFilter(self) margin-left: 10 margin-top: 5 color: #FF0000D0 $on: color: green SpellInfoLabel id: labelFormula anchors.left: spellList.right anchors.top: labelName.bottom !text: tr('Formula') .. ':' SpellInfoLabel id: labelVocation anchors.left: spellList.right anchors.top: labelFormula.bottom !text: tr('Vocation') .. ':' SpellInfoLabel id: labelGroup anchors.left: spellList.right anchors.top: labelVocation.bottom !text: tr('Group') .. ':' SpellInfoLabel id: labelType anchors.left: spellList.right anchors.top: labelGroup.bottom !text: tr('Type') .. ':' SpellInfoLabel id: labelCooldown anchors.left: spellList.right anchors.top: labelType.bottom !text: tr('Cooldown') .. ':' SpellInfoLabel id: labelLevel anchors.left: spellList.right anchors.top: labelCooldown.bottom !text: tr('Level') .. ':' SpellInfoLabel id: labelMana anchors.left: spellList.right anchors.top: labelLevel.bottom !text: tr('Mana') .. ' / ' .. tr('Soul') .. ':' SpellInfoLabel id: labelPremium anchors.left: spellList.right anchors.top: labelMana.bottom !text: tr('Premium') .. ':' SpellInfoLabel id: labelDescription anchors.left: spellList.right anchors.top: labelPremium.bottom !text: tr('Description') .. ':' SpellInfoValueLabel id: labelNameValue anchors.left: labelName.right anchors.top: spellList.top SpellInfoValueLabel id: labelFormulaValue anchors.left: labelFormula.right anchors.top: labelNameValue.bottom SpellInfoValueLabel id: labelVocationValue anchors.left: labelVocation.right anchors.top: labelFormulaValue.bottom SpellInfoValueLabel id: labelGroupValue anchors.left: labelGroup.right anchors.top: labelVocationValue.bottom SpellInfoValueLabel id: labelTypeValue anchors.left: labelType.right anchors.top: labelGroupValue.bottom SpellInfoValueLabel id: labelCooldownValue anchors.left: labelCooldown.right anchors.top: labelTypeValue.bottom SpellInfoValueLabel id: labelLevelValue anchors.left: labelLevel.right anchors.top: labelCooldownValue.bottom SpellInfoValueLabel id: labelManaValue anchors.left: labelMana.right anchors.top: labelLevelValue.bottom SpellInfoValueLabel id: labelPremiumValue anchors.left: labelPremium.right anchors.top: labelManaValue.bottom SpellInfoValueLabel id: labelDescriptionValue anchors.left: labelDescription.right anchors.top: labelPremiumValue.bottom Label id: labelVocationFilter anchors.top: labelPremium.bottom anchors.left: spellList.right width: 70 font: verdana-11px-monochrome !text: tr('Vocation') margin-top: 30 margin-left: 20 CheckBox id: vocationBoxAny anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 margin-left: 3 !text: tr('Any') width: 75 CheckBox id: vocationBoxNaruto anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Naruto') width: 75 CheckBox id: vocationBoxSasuke anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Sasuke') width: 75 CheckBox id: vocationBoxLee anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Lee') width: 75 CheckBox id: vocationBoxSakura anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Sakura') width: 75 CheckBox id: vocationBoxGaara anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Gaara') width: 75 CheckBox id: vocationBoxNeji anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Neji') width: 75 CheckBox id: vocationBoxKiba anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Kiba') width: 75 CheckBox id: vocationBoxShikamaru anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Shikamaru') width: 75 CheckBox id: vocationBoxHinata anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Hinata') width: 75 CheckBox id: vocationBoxTenten anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Tenten') width: 75 CheckBox id: vocationBoxItachi anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Itachi') width: 75 CheckBox id: vocationBoxBee anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Bee') width: 75 CheckBox id: vocationBoxKakashi anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Kakashi') width: 75 Label id: labelGroupFilter anchors.top: labelPremium.bottom anchors.left: labelVocationFilter.right width: 70 font: verdana-11px-monochrome !text: tr('Group') margin-top: 30 margin-left: 20 CheckBox id: groupBoxAny anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 margin-left: 3 !text: tr('Any') width: 75 CheckBox id: groupBoxAttack anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Attack') width: 75 CheckBox id: groupBoxHealing anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Healing') width: 75 CheckBox id: groupBoxSupport anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Support') width: 75 Label id: labelPremiumFilter anchors.top: labelPremium.bottom anchors.left: labelGroupFilter.right width: 70 font: verdana-11px-monochrome !text: tr('Premium') margin-top: 30 margin-left: 20 CheckBox id: premiumBoxAny anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 margin-left: 3 !text: tr('Any') width: 75 CheckBox id: premiumBoxNo anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('No') width: 75 CheckBox id: premiumBoxYes anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Yes') width: 75 Uma duvida o Server do robin ele tem opcode ? se tive como ativo? e eu queria um sistema de skills parecido com o do Shinobi. Link para o comentário https://xtibia.com/forum/topic/214583-ajuda-spelllist/ Compartilhar em outros sites More sharing options...
Pergunta
Nocktal 2
Eae eu preciso de uma ajuda eu to com server do Robin Wood (sei la o nome)
Ae eu tive a ideia de usa otclient e achei uma coisa interessante nele uma spell list
sendo que ela n aparece fiquei editando mas começo a da erro quando
modifiquei pra tais vocações e queria uma ajuda nela quem pude XD
a versao do ot e 0.6.1
e queria que ela aparece-se
la encima como os otros
~~Spelllist~~
vai ser em code oks
spelllist.lua
local SpelllistProfile = 'Default' spelllistWindow = nil spelllistButton = nil spellList = nil nameValueLabel = nil formulaValueLabel = nil vocationValueLabel = nil groupValueLabel = nil typeValueLabel = nil cooldownValueLabel = nil levelValueLabel = nil manaValueLabel = nil premiumValueLabel = nil descriptionValueLabel = nil vocationBoxAny = nil vocationBoxNaruto = nil vocationBoxSasuke = nil vocationBoxLee = nil vocationBoxSakura = nil vocationBoxGaara = nil vocationBoxNeji = nil vocationBoxKiba = nil vocationBoxShikamaru = nil vocationBoxHinata = nil vocationBoxTenten = nil vocationBoxItachi = nil vocationBoxBee = nil vocationBoxKakashi = nil groupBoxAny = nil groupBoxAttack = nil groupBoxHealing = nil groupBoxSupport = nil premiumBoxAny = nil premiumBoxNo = nil premiumBoxYes = nil vocationRadioGroup = nil groupRadioGroup = nil premiumRadioGroup = nil -- consts FILTER_PREMIUM_ANY = 0 FILTER_PREMIUM_NO = 1 FILTER_PREMIUM_YES = 2 FILTER_VOCATION_ANY = 0 FILTER_VOCATION_NARUTO = 1 FILTER_VOCATION_SASUKE = 2 FILTER_VOCATION_LEE = 3 FILTER_VOCATION_SAKURA = 4 FILTER_VOCATION_GAARA = 5 FILTER_VOCATION_NEJI = 6 FILTER_VOCATION_KIBA = 7 FILTER_VOCATION_SHIKAMARU = 8 FILTER_VOCATION_HINATA = 9 FILTER_VOCATION_TENTEN = 10 FILTER_VOCATION_ITACHI = 11 FILTER_VOCATION_BEE = 12 FILTER_VOCATION_KAKASHI = 13 FILTER_GROUP_ANY = 0 FILTER_GROUP_ATTACK = 1 FILTER_GROUP_HEALING = 2 FILTER_GROUP_SUPPORT = 3 -- Filter Settings local filters = { level = false, vocation = false, vocationId = FILTER_VOCATION_ANY, premium = FILTER_PREMIUM_ANY, groupId = FILTER_GROUP_ANY } function getSpelllistProfile() return SpelllistProfile end function setSpelllistProfile(name) if SpelllistProfile == name then return end if SpelllistSettings[name] and SpellInfo[name] then local oldProfile = SpelllistProfile SpelllistProfile = name changeSpelllistProfile(oldProfile) else perror('Spelllist profile \'' .. name .. '\' could not be set.') end end function online() if g_game.getFeature(GameSpellList) then spelllistButton:show() else spelllistButton:hide() end if g_game.getProtocolVersion() >= 950 then -- Vocation is only send in newer clients spelllistWindow:getChildById('buttonFilterVocation'):setVisible(true) else spelllistWindow:getChildById('buttonFilterVocation'):setVisible(false) end end function offline() resetWindow() end function init() connect(g_game, { onGameStart = online, onGameEnd = offline }) spelllistWindow = g_ui.displayUI('spelllist', modules.game_interface.getRightPanel()) spelllistWindow:hide() spelllistButton = modules.client_topmenu.addRightGameToggleButton('spelllistButton', tr('Spell List'), '/images/topbuttons/spelllist', toggle) spelllistButton:setOn(true) nameValueLabel = spelllistWindow:getChildById('labelNameValue') formulaValueLabel = spelllistWindow:getChildById('labelFormulaValue') vocationValueLabel = spelllistWindow:getChildById('labelVocationValue') groupValueLabel = spelllistWindow:getChildById('labelGroupValue') typeValueLabel = spelllistWindow:getChildById('labelTypeValue') cooldownValueLabel = spelllistWindow:getChildById('labelCooldownValue') levelValueLabel = spelllistWindow:getChildById('labelLevelValue') manaValueLabel = spelllistWindow:getChildById('labelManaValue') premiumValueLabel = spelllistWindow:getChildById('labelPremiumValue') descriptionValueLabel = spelllistWindow:getChildById('labelDescriptionValue') vocationBoxAny = spelllistWindow:getChildById('vocationBoxAny') vocationBoxNaruto = spelllistWindow:getChildById('vocationBoxNaruto') vocationBoxSasuke = spelllistWindow:getChildById('vocationBoxSasuke') vocationBoxLee = spelllistWindow:getChildById('vocationBoxLee') vocationBoxSakura = spelllistWindow:getChildById('vocationBoxSakura') vocationBoxGaara = spelllistWindow:getChildById('vocationBoxGaara') vocationBoxNeji = spelllistWindow:getChildById('vocationBoxNeji') vocationBoxKiba = spelllistWindow:getChildById('vocationBoxKiba') vocationBoxShikamaru = spelllistWindow:getChildById('vocationBoxShikamaru') vocationBoxHinata = spelllistWindow:getChildById('vocationBoxHinata') vocationBoxTenten = spelllistWindow:getChildById('vocationBoxTenten') vocationBoxItachi = spelllistWindow:getChildById('vocationBoxItachi') vocationBoxBee = spelllistWindow:getChildById('vocationBoxBee') vocationBoxKakashi = spelllistWindow:getChildById('vocationBoxKakashi') groupBoxAny = spelllistWindow:getChildById('groupBoxAny') groupBoxAttack = spelllistWindow:getChildById('groupBoxAttack') groupBoxHealing = spelllistWindow:getChildById('groupBoxHealing') groupBoxSupport = spelllistWindow:getChildById('groupBoxSupport') premiumBoxAny = spelllistWindow:getChildById('premiumBoxAny') premiumBoxYes = spelllistWindow:getChildById('premiumBoxYes') premiumBoxNo = spelllistWindow:getChildById('premiumBoxNo') vocationRadioGroup = UIRadioGroup.create() vocationRadioGroup:addWidget(vocationBoxAny) vocationRadioGroup:addWidget(vocationBoxNaruto) vocationRadioGroup:addWidget(vocationBoxSasuke) vocationRadioGroup:addWidget(vocationBoxLee) vocationRadioGroup:addWidget(vocationBoxSakura) vocationRadioGroup:addWidget(vocationBoxGaara) vocationRadioGroup:addWidget(vocationBoxNeji) vocationRadioGroup:addWidget(vocationBoxKiba) vocationRadioGroup:addWidget(vocationBoxShikamaru) vocationRadioGroup:addWidget(vocationBoxHinata) vocationRadioGroup:addWidget(vocationBoxTenten) vocationRadioGroup:addWidget(vocationBoxItachi) vocationRadioGroup:addWidget(vocationBoxBee) vocationRadioGroup:addWidget(vocationBoxKakashi) groupRadioGroup = UIRadioGroup.create() groupRadioGroup:addWidget(groupBoxAny) groupRadioGroup:addWidget(groupBoxAttack) groupRadioGroup:addWidget(groupBoxHealing) groupRadioGroup:addWidget(groupBoxSupport) premiumRadioGroup = UIRadioGroup.create() premiumRadioGroup:addWidget(premiumBoxAny) premiumRadioGroup:addWidget(premiumBoxYes) premiumRadioGroup:addWidget(premiumBoxNo) premiumRadioGroup:selectWidget(premiumBoxAny) vocationRadioGroup:selectWidget(vocationBoxAny) groupRadioGroup:selectWidget(groupBoxAny) vocationRadioGroup.onSelectionChange = toggleFilter groupRadioGroup.onSelectionChange = toggleFilter premiumRadioGroup.onSelectionChange = toggleFilter spellList = spelllistWindow:getChildById('spellList') g_keyboard.bindKeyPress('Down', function() spellList:focusNextChild(KeyboardFocusReason) end, spelllistWindow) g_keyboard.bindKeyPress('Up', function() spellList:focusPreviousChild(KeyboardFocusReason) end, spelllistWindow) initialiseSpelllist() resizeWindow() end function terminate() disconnect(g_game, { onGameStart = online, onGameEnd = offline }) disconnect(spellList, { onChildFocusChange = function(self, focusedChild) if focusedChild == nil then return end updateSpellInformation(focusedChild) end }) spelllistWindow:destroy() spelllistButton:destroy() vocationRadioGroup:destroy() groupRadioGroup:destroy() premiumRadioGroup:destroy() end function initialiseSpelllist() for i = 1, #SpelllistSettings[spelllistProfile].spellOrder do local spell = SpelllistSettings[spelllistProfile].spellOrder[i] local info = SpellInfo[spelllistProfile][spell] local tmpLabel = g_ui.createWidget('SpellListLabel', spellList) tmpLabel:setId(spell) tmpLabel:setText(spell .. '\n\'' .. info.words .. '\'') tmpLabel:setPhantom(false) local iconId = tonumber(info.icon) if not iconId and SpellIcons[info.icon] then iconId = SpellIcons[info.icon][1] end if not(iconId) then perror('Spell icon \'' .. info.icon .. '\' not found.') end tmpLabel:setHeight(SpelllistSettings[spelllistProfile].iconSize.height + 4) tmpLabel:setTextOffset(topoint((SpelllistSettings[spelllistProfile].iconSize.width + 10) .. ' ' .. (SpelllistSettings[spelllistProfile].iconSize.height - 32)/2 + 3)) tmpLabel:setImageSource('/images/game/spells/' .. SpelllistSettings[spelllistProfile].iconFile) tmpLabel:setImageClip(Spells.getImageClip(iconId, SpelllistProfile)) tmpLabel:setImageSize(tosize(SpelllistSettings[spelllistProfile].iconSize.width .. ' ' .. SpelllistSettings[spelllistProfile].iconSize.height)) tmpLabel.onClick = updateSpellInformation end connect(spellList, { onChildFocusChange = function(self, focusedChild) if focusedChild == nil then return end updateSpellInformation(focusedChild) end }) end function changeSpelllistProfile(oldProfile) -- Delete old labels for i = 1, #SpelllistSettings[oldProfile].spellOrder do local spell = SpelllistSettings[oldProfile].spellOrder[i] local tmpLabel = spellList:getChildById(spell) tmpLabel:destroy() end -- Create new spelllist and ajust window initialiseSpelllist() setOptions() resizeWindow() resetWindow() end function updateSpelllist() for i = 1, #SpelllistSettings[spelllistProfile].spellOrder do local spell = SpelllistSettings[spelllistProfile].spellOrder[i] local info = SpellInfo[spelllistProfile][spell] local tmpLabel = spellList:getChildById(spell) local localPlayer = g_game.getLocalPlayer() if (not(filters.level) or info.level <= localPlayer:getLevel()) and (not(filters.vocation) or table.find(info.vocations, localPlayer:getVocation())) and (filters.vocationId == FILTER_VOCATION_ANY or table.find(info.vocations, filters.vocationId) or table.find(info.vocations, filters.vocationId+4)) and (filters.groupId == FILTER_GROUP_ANY or info.group[filters.groupId]) and (filters.premium == FILTER_PREMIUM_ANY or (info.premium and filters.premium == FILTER_PREMIUM_YES) or (not(info.premium) and filters.premium == FILTER_PREMIUM_NO)) then tmpLabel:setVisible(true) else tmpLabel:setVisible(false) end end end function updateSpellInformation(widget) local spell = widget:getId() local name = '' local formula = '' local vocation = '' local group = '' local type = '' local cooldown = '' local level = '' local mana = '' local premium = '' local description = '' if SpellInfo[spelllistProfile][spell] then local info = SpellInfo[spelllistProfile][spell] name = spell formula = info.words for i = 1, #info.vocations do local vocationId = info.vocations[i] if vocationId <= 13 or not(table.find(info.vocations, (vocationId-13))) then vocation = vocation .. (vocation:len() == 0 and '' or ', ') .. VocationNames[vocationId] end end cooldown = (info.exhaustion / 1000) .. 's' for groupId, groupName in ipairs(SpellGroups) do if info.group[groupId] then group = group .. (group:len() == 0 and '' or ' / ') .. groupName cooldown = cooldown .. ' / ' .. (info.group[groupId] / 1000) .. 's' end end type = info.type level = info.level mana = info.mana .. ' / ' .. info.soul premium = (info.premium and 'yes' or 'no') description = info.description or '-' end nameValueLabel:setText(name) formulaValueLabel:setText(formula) vocationValueLabel:setText(vocation) groupValueLabel:setText(group) typeValueLabel:setText(type) cooldownValueLabel:setText(cooldown) levelValueLabel:setText(level) manaValueLabel:setText(Mana) premiumValueLabel:setText(premium) descriptionValueLabel:setText(description) end function toggle() if spelllistButton:isOn() then spelllistWindow:hide() spelllistButton:setOn(false) else spelllistWindow:show() spelllistButton:setOn(true) end end function toggleFilter(widget, selectedWidget) if widget == vocationRadioGroup then local boxId = selectedWidget:getId() if boxId == 'vocationBoxAny' then filters.vocationId = FILTER_VOCATION_ANY elseif boxId == 'vocationBoxNaruto' then filters.vocationId = FILTER_VOCATION_NARUTO elseif boxId == 'vocationBoxSasuke' then filters.vocationId = FILTER_VOCATION_SASUKE elseif boxId == 'vocationBoxLee' then filters.vocationId = FILTER_VOCATION_LEE elseif boxId == 'vocationBoxSakura' then filters.vocationId = FILTER_VOCATION_SAKURA elseif boxId == 'vocationBoxGaara' then filters.vocationId = FILTER_VOCATION_Gaara elseif boxId == 'vocationBoxNeji' then filters.vocationId = FILTER_VOCATION_SAKURA elseif boxId == 'vocationBoxKiba' then filters.vocationId = FILTER_VOCATION_KIBA elseif boxId == 'vocationBoxShikamaru' then filters.vocationId = FILTER_VOCATION_SHIKAMARU elseif boxId == 'vocationBoxHinata' then filters.vocationId = FILTER_VOCATION_HINATA elseif boxId == 'vocationBoxTenten' then filters.vocationId = FILTER_VOCATION_TENTEN elseif boxId == 'vocationBoxItachi' then filters.vocationId = FILTER_VOCATION_ITACHI elseif boxId == 'vocationBoxBee' then filters.vocationId = FILTER_VOCATION_BEE elseif boxId == 'vocationBoxKakashi' then filters.vocationId = FILTER_VOCATION_KAKASHI end elseif widget == groupRadioGroup then local boxId = selectedWidget:getId() if boxId == 'groupBoxAny' then filters.groupId = FILTER_GROUP_ANY elseif boxId == 'groupBoxAttack' then filters.groupId = FILTER_GROUP_ATTACK elseif boxId == 'groupBoxHealing' then filters.groupId = FILTER_GROUP_HEALING elseif boxId == 'groupBoxSupport' then filters.groupId = FILTER_GROUP_SUPPORT end elseif widget == premiumRadioGroup then local boxId = selectedWidget:getId() if boxId == 'premiumBoxAny' then filters.premium = FILTER_PREMIUM_ANY elseif boxId == 'premiumBoxNo' then filters.premium = FILTER_PREMIUM_NO elseif boxId == 'premiumBoxYes' then filters.premium = FILTER_PREMIUM_YES end else local id = widget:getId() if id == 'buttonFilterLevel' then filters.level = not(filters.level) widget:setOn(filters.level) elseif id == 'buttonFilterVocation' then filters.vocation = not(filters.vocation) widget:setOn(filters.vocation) end end updateSpelllist() end function resizeWindow() spelllistWindow:setWidth(SpelllistSettings['Default'].spellWindowWidth + SpelllistSettings[spelllistProfile].iconSize.width - 32) spellList:setWidth(SpelllistSettings['Default'].spellListWidth + SpelllistSettings[spelllistProfile].iconSize.width - 32) end function resetWindow() spelllistWindow:hide() spelllistButton:setOn(true) -- Resetting filters filters.level = false filters.vocation = false local buttonFilterLevel = spelllistWindow:getChildById('buttonFilterLevel') buttonFilterLevel:setOn(filters.level) local buttonFilterVocation = spelllistWindow:getChildById('buttonFilterVocation') buttonFilterVocation:setOn(filters.vocation) vocationRadioGroup:selectWidget(vocationBoxAny) groupRadioGroup:selectWidget(groupBoxAny) premiumRadioGroup:selectWidget(premiumBoxAny) updateSpelllist() endspelllist.otui
SpellListLabel < Label font: verdana-11px-monochrome background-color: alpha text-offset: 42 3 focusable: true height: 36 image-clip: 0 0 32 32 image-size: 32 32 image-offset: 2 2 image-source: /images/game/spells/defaultspells $focus: background-color: #ffffff22 color: #ffffff SpellInfoLabel < Label width: 70 font: verdana-11px-monochrome text-align: right margin-left: 10 margin-top: 5 SpellInfoValueLabel < Label text-align: left width: 190 margin-left: 10 margin-top: 5 MainWindow id: spelllistWindow !text: tr('Spell List') size: 550 400 @onEscape: toggle() TextList id: spellList vertical-scrollbar: spellsScrollBar anchors.top: parent.top anchors.left: parent.left anchors.bottom: next.top margin-bottom: 10 padding: 1 width: 210 focusable: false Button id: buttonCancel !text: tr('Close') width: 64 anchors.right: parent.right anchors.bottom: parent.bottom @onClick: toggle() VerticalScrollBar id: spellsScrollBar anchors.top: spellList.top anchors.bottom: spellList.bottom anchors.right: spellList.right step: 50 pixels-scroll: true SpellInfoLabel id: labelName anchors.left: spellList.right anchors.top: spellList.top !text: tr('Name') .. ':' Button id: buttonFilterLevel !text: tr('Level') !tooltip: tr('Hide spells for higher exp. levels') width: 64 anchors.left: spellList.left anchors.top: spellList.bottom @onClick: toggleFilter(self) margin-left: 10 margin-top: 5 color: #FF0000D0 $on: color: green Button id: buttonFilterVocation !text: tr('Vocation') !tooltip: tr('Hide spells for other vocations') width: 64 anchors.left: prev.right anchors.top: spellList.bottom @onClick: toggleFilter(self) margin-left: 10 margin-top: 5 color: #FF0000D0 $on: color: green SpellInfoLabel id: labelFormula anchors.left: spellList.right anchors.top: labelName.bottom !text: tr('Formula') .. ':' SpellInfoLabel id: labelVocation anchors.left: spellList.right anchors.top: labelFormula.bottom !text: tr('Vocation') .. ':' SpellInfoLabel id: labelGroup anchors.left: spellList.right anchors.top: labelVocation.bottom !text: tr('Group') .. ':' SpellInfoLabel id: labelType anchors.left: spellList.right anchors.top: labelGroup.bottom !text: tr('Type') .. ':' SpellInfoLabel id: labelCooldown anchors.left: spellList.right anchors.top: labelType.bottom !text: tr('Cooldown') .. ':' SpellInfoLabel id: labelLevel anchors.left: spellList.right anchors.top: labelCooldown.bottom !text: tr('Level') .. ':' SpellInfoLabel id: labelMana anchors.left: spellList.right anchors.top: labelLevel.bottom !text: tr('Mana') .. ' / ' .. tr('Soul') .. ':' SpellInfoLabel id: labelPremium anchors.left: spellList.right anchors.top: labelMana.bottom !text: tr('Premium') .. ':' SpellInfoLabel id: labelDescription anchors.left: spellList.right anchors.top: labelPremium.bottom !text: tr('Description') .. ':' SpellInfoValueLabel id: labelNameValue anchors.left: labelName.right anchors.top: spellList.top SpellInfoValueLabel id: labelFormulaValue anchors.left: labelFormula.right anchors.top: labelNameValue.bottom SpellInfoValueLabel id: labelVocationValue anchors.left: labelVocation.right anchors.top: labelFormulaValue.bottom SpellInfoValueLabel id: labelGroupValue anchors.left: labelGroup.right anchors.top: labelVocationValue.bottom SpellInfoValueLabel id: labelTypeValue anchors.left: labelType.right anchors.top: labelGroupValue.bottom SpellInfoValueLabel id: labelCooldownValue anchors.left: labelCooldown.right anchors.top: labelTypeValue.bottom SpellInfoValueLabel id: labelLevelValue anchors.left: labelLevel.right anchors.top: labelCooldownValue.bottom SpellInfoValueLabel id: labelManaValue anchors.left: labelMana.right anchors.top: labelLevelValue.bottom SpellInfoValueLabel id: labelPremiumValue anchors.left: labelPremium.right anchors.top: labelManaValue.bottom SpellInfoValueLabel id: labelDescriptionValue anchors.left: labelDescription.right anchors.top: labelPremiumValue.bottom Label id: labelVocationFilter anchors.top: labelPremium.bottom anchors.left: spellList.right width: 70 font: verdana-11px-monochrome !text: tr('Vocation') margin-top: 30 margin-left: 20 CheckBox id: vocationBoxAny anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 margin-left: 3 !text: tr('Any') width: 75 CheckBox id: vocationBoxNaruto anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Naruto') width: 75 CheckBox id: vocationBoxSasuke anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Sasuke') width: 75 CheckBox id: vocationBoxLee anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Lee') width: 75 CheckBox id: vocationBoxSakura anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Sakura') width: 75 CheckBox id: vocationBoxGaara anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Gaara') width: 75 CheckBox id: vocationBoxNeji anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Neji') width: 75 CheckBox id: vocationBoxKiba anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Kiba') width: 75 CheckBox id: vocationBoxShikamaru anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Shikamaru') width: 75 CheckBox id: vocationBoxHinata anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Hinata') width: 75 CheckBox id: vocationBoxTenten anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Tenten') width: 75 CheckBox id: vocationBoxItachi anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Itachi') width: 75 CheckBox id: vocationBoxBee anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Bee') width: 75 CheckBox id: vocationBoxKakashi anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Kakashi') width: 75 Label id: labelGroupFilter anchors.top: labelPremium.bottom anchors.left: labelVocationFilter.right width: 70 font: verdana-11px-monochrome !text: tr('Group') margin-top: 30 margin-left: 20 CheckBox id: groupBoxAny anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 margin-left: 3 !text: tr('Any') width: 75 CheckBox id: groupBoxAttack anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Attack') width: 75 CheckBox id: groupBoxHealing anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Healing') width: 75 CheckBox id: groupBoxSupport anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Support') width: 75 Label id: labelPremiumFilter anchors.top: labelPremium.bottom anchors.left: labelGroupFilter.right width: 70 font: verdana-11px-monochrome !text: tr('Premium') margin-top: 30 margin-left: 20 CheckBox id: premiumBoxAny anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 margin-left: 3 !text: tr('Any') width: 75 CheckBox id: premiumBoxNo anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('No') width: 75 CheckBox id: premiumBoxYes anchors.left: prev.left anchors.top: prev.bottom margin-top: 3 !text: tr('Yes') width: 75Uma duvida o Server do robin ele tem opcode ?
se tive como ativo?
e eu queria um sistema de skills parecido com o do Shinobi.
Link para o comentário
https://xtibia.com/forum/topic/214583-ajuda-spelllist/Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Arquivado
Este tópico foi arquivado e está fechado para novas respostas.