antiblock
diamwall

SINVAL o.O

Membro Plus
  • Content Count

    1,895
  • Joined

  • Last visited

  • Days Won

    16

Everything posted by SINVAL o.O

  1. quest raking begin state start begin when 20095.chat."Ranking" begin local rangliste = mysql_query("SELECT * FROM player.player WHERE player.name NOT LIKE '[%]%' ORDER BY player.level DESC, player.exp DESC","root","rootpw","player","rootip") say_title("Top 15") say("#: Nombre Nivel ") say("Top 1: "..rangliste.name[1].." "..rangliste.level[1].." ") say("Top 2: "..rangliste.name[2].." "..rangliste.level[2].." ") say("Top 3: "..rangliste.name[3].." "..rangliste.level[3].." ") say("Top 4: "..rangliste.name[4].." "..rangliste.level[4].." ") say("Top 5: "..rangliste.name[5].." "..rangliste.level[5].." ") say("Top 6: "..rangliste.name[6].." "..rangliste.level[6].." ") say("Top 7: "..rangliste.name[7].." "..rangliste.level[7].." ") say("Top 8: "..rangliste.name[8].." "..rangliste.level[8].." ") say("Top 9: "..rangliste.name[9].." "..rangliste.level[9].." ") say("Top 10: "..rangliste.name[10].." "..rangliste.level[10].." ") say("Top 11: "..rangliste.name[11].." "..rangliste.level[11].." ") say("Top 12: "..rangliste.name[12].." "..rangliste.level[12].." ") say("Top 13: "..rangliste.name[13].." "..rangliste.level[13].." ") say("Top 14: "..rangliste.name[14].." "..rangliste.level[14].." ") say("Top 15: "..rangliste.name[15].." "..rangliste.level[15].." ") local s = select("Sair") elseif s == 1 then return end endendCréditos : serex
  2. Hj venho apresentar o Sistema de Conquista. Sistema de Conquista, consiste em matar determinados mobs, pedras e com isso ganhar ponto, que apos ter o determinado tanto voçê troca seus pontos por itens, etc; (Tudo pod ser alterado o que ganhar, os mob que tem que matar pra ganhar os pontos). 1º- Prints de como ficara no final. 2º- É necessario fazer algumas editações no cliente, pro Sistema ficar certo, então fasa o donwload pra começar a por... '> https://mega.co.nz/#!u9B3XSCT!RTmrvWvl3X1d-prNn2S37mROZAdg9VAzOaPjJKYHZa4 https://www.virustotal.com/pt/file/e4aa27a23c9dbab4c1fee249cd9a7edada9344250d45d801e111029704798058/analysis/1365848870/ 3º- Bem vamos la, 1º na parte do cliente. Para começar No cliente editar os seguintes arquivos: -Root: dentro dos arquivos e game.py uiachievement.py (isso, vamos colocar-nos). -ETC: onde colocar os arquivos e achievement_small.dds achievement_small.sub -Uiscript: aqui e vai colocar o arquivo warteschleife.py achievementboard.py Primeiro começomos com o root,Descompacta seu root, e abra o arquivo e procurar game.py esta: def __ServerCommand_Build(self):Depois de achar procura : # Achievement System START "achievement" : self.__AchievementTest, "achievementpoints" : self.__ShowAchievementPoints, # Achievement System END Voçê vai em baixo do código assima e meta isso : # Achievement System STARTdef __ShowAchievementPoints(self, points): import uiAchievement import uiTaskbar self.uiAchievement = uiAchievement.AchievementDialog() uiAchievement.AchievementPoints = int(points)def __AchievementTest(self, archivement): import uiAchievement self.uiAchievement = uiAchievement.AchievementDialog() self.uiAchievement.Show(1, str(archivement)) self.uiAchievement.SetTop()# Achievement System ENDFicando assim : 4º- Entrar na pasta root e adiciona o arquivo "uiachievement.py" , depois adiciona a xml : <File archivedPath="uiachievement.py" type="2"><![CDATA[Source\uiachievement.py]]></File>5º- Decompilamos nosso etc, ir para o trabalho Ymir pasta / ui e colocamos os achievement_small.dds. Então vá para o trabalho Ymir pasta / ui / público e introduzir o achievement_small.sub. Por fim, adicione as xml:<File archivedPath="d:/ymir work/ui/public/achievement_small.sub" type="0"><![CDATA[Source\ymir work\ui\public\achievement_small.sub]]></File><File archivedPath="d:/ymir work/ui/achievement_small.dds" type="0"><![CDATA[Source\ymir work\ui\achievement_small.dds]]></File>6º- O último passo no cliente é o nosso descompilar uiscript e colocar o arquivo achievementboard.py warteschleife.py: na pasta. depois adiciona a xml e compacta: [/center]<File archivedPath="uiscript/achievementboard.py" type="2"><![CDATA[Source\uiscript\achievementboard.py]]></File><File archivedPath="uiscript/warteschleife.py" type="2"><![CDATA[Source\uiscript\warteschleife.py]]></File>[center] E nós já temos cliente tudo pronto: D Parte no servidor : 1º- Vá no diretorio do seu servidor é adiciona as quest : E não é para voçê ficar simplesmente recebendo a quest vo ta a explicar como funciona: 1º- A realização mais importante é que, quando voçê chega a um (por exemplo, matar o chefe orc) voçê ganha pontos por pc.setqf: when 691.kill beginlocal Reward = 2pc.setqf("achievement_points", actual_achievement_points + Reward)Como você vê o chefe orc aha (mob ID 691) atribuiu o valor de ponto com Recompensa Local = 2 e, em seguida, adicionar 2 pontos para o pc.setqf ("achievement_points" actual_achievement_points + recompensa (a recompensa, neste caso, seria um +2). Então, se você quiser adicionar outro mobs à lista de realizações só tem que fazer o seguinte: when idmob.kill begin local Reward = puntos -- Poneis cuantos puntos quereis que os de local Achievement = "Nombre del mob que saldra en el cliente" local killcount = pc.getqf("idmob") -- Se usa para que el juego lleve la cuenta de cuantas veces lo mataste local actual_achievement_points = pc.getqf("achievement_points") -- Calcula cuantos puntos tenes pc.setqf("693", killcount + 1) -- Aqui os suma 1 al numero de ese mob que llevais pc.setqf("achievement_points", actual_achievement_points + Reward) -- aqui te suma tus puntos por matarlo cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") -- Con esto te saldra la ventana en el cliente diciendo que lo mataste y cuantos puntos tenes endAgora eu ensin como são swaps. No meu caso, as trocas são feitas por um item, mas voçê pode fazer o que quiser iditem.use simplement Ao alterar um npc.chat quando. "Troca de Conquistas" ou como eu gosto. Eu vejo como eu tenho swaps: * Se voçê olhar a última opção na loja troca permite que você veja suas realizações, pois fez uma realização que você adicionar 0 pontos, mas ensina-lhe como : [/center]elseif p2 == 6 thenlocal Reward = 0local Achievement = "Ver_tus_logros"local killcount = pc.getqf("logros")local actual_achievement_points = pc.getqf("achievement_points")pc.setqf("achievement_points", actual_achievement_points + Reward)cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."")[center] Então, se voçê precisa fazer a sua escolha para ver realizações Eis ^ ^ Como swaps, que são tudo, se voçê quiser fazer seus próprios negócios Faço aqui um pequeno script ou trocar para explicar como seria: when 20095.chat."Canjear mis logros" beginsay_title("Canjear mis logros")say("")say("Hola jugador, si tienes logros")say("yo te los puedo cambiar por cositas.")say("")say("Si no tienes intenta conseguir alguno")say("porque merece la pena")say("")say_reward("Quieres canjear tus punots?")local canje = select ("Si" , "No")if canje == 1 thensay_title("Canjes de logros")say("")say("Elige lo que quieras")local elegir = select ("Quinto bonus - 3 logros" , "Añadir 6-7 bonus - 4 logros" , "Cambiar 6-7 bonus - 5 logros" , "Caballo armado - 6 logros" , "Caballo militar - 8 logros" , "Cerrar")if elegir == 1 thenif pc . getqf ( "achievement_points" ) <= 2 thenchat( "Lo siento necesitas mas puntos" )returnendpc.give_item2("70024", 1)local actual_achievement_points = pc . getqf ( "achievement_points" )pc . setqf ( "achievement_points" , actual_achievement_points - 3 )returnelseif elegir == 2 thenif pc . getqf ( "achievement_points" ) <= 3 thenchat( "Lo siento necesitas mas puntos" )returnendpc.give_item2("71051", 1)local actual_achievement_points = pc . getqf ( "achievement_points" )pc . setqf ( "achievement_points" , actual_achievement_points - 4 )returnelseif elegir == 3 thenif pc . getqf ( "achievement_points" ) <= 4 thensay ( "Lo siento necesitas mas puntos" )returnendpc.give_item2("71052", 1)local actual_achievement_points = pc . getqf ( "achievement_points" )pc . setqf ( "achievement_points" , actual_achievement_points - 5 )returnelseif elegir == 4 thenif pc . getqf ( "achievement_points" ) <= 5 thenchat( "Lo siento necesitas mas puntos" )returnendlocal actual_achievement_points = pc . getqf ( "achievement_points" )pc . setqf ( "achievement_points" , actual_achievement_points - 6 )chat ( "Has recibido un caballo armado" )horse . set_level ( "11" )horse . unsummon ( )horse . summon ( )pc . give_item2 ( "50052" , 1 )returnelseif elegir == 5 thenelseif p == 2 thenif pc . getqf ( "achievement_points" ) <= 7 thensay ( "Lo siento necesitas mas puntos" )returnendlocal actual_achievement_points = pc . getqf ( "achievement_points" )pc . setqf ( "achievement_points" , actual_achievement_points - 8 )chat( "Has recibido un caballo militar" )horse . set_level ( "21" )horse . unsummon ( )horse . summon ( )pc . give_item2 ( "50053" , 1 )returnelseif elegir == 6 thenreturnendelseif canje == 2 thenreturnendendEste script é um pequeno presente para voçê , eu fiz por voçê agora pode usar outro se você não quer que ele tinha em êxtase. * Para colocá-lo em sua busca, voçê pode armazenar os meus swaps e cole este se você quiser, ou fazê-lo como uma busca separada. Finalmente eu explico como swaps de trabalhar com um exemplo: local p = select ( "Caballo armado - 5 logros")if p == 1 thenif pc . getqf ( "achievement_points" ) <= 4 thensay ( "Lo siento necesitas mas puntos" )returnendlocal actual_achievement_points = pc . getqf ( "achievement_points" )pc . setqf ( "achievement_points" , actual_achievement_points - 5 )say ( "Has recibido un caballo armado" )horse . set_level ( "11" )horse . unsummon ( )horse . summon ( )pc . give_item2 ( "50052" , 1 )returnComece com uma = local selecionar para que você escolher a sua recompensa e eu aconselho a colocar muitas realizações, há duro como eu fiz. Então eu coloquei uma restrição, de modo que se você tem menos pontos do que o item que pediu para não deixar de comprar: if pc . getqf ( "achievement_points" ) <= 2 thenchat( "Lo siento necesitas mas puntos" )returnendEle funciona da seguinte forma: onde diz <= 2 você tem que colocar um ponto a menos do que a pedir, porque diz que se você tem esses pontos ou menos não vai deixar de comprar. Após o final de retorno e você só tem que colocar o comando para remover os pontos que você é esta: local actual_achievement_points = pc . getqf ( "achievement_points" )pc . setqf ( "achievement_points" , actual_achievement_points - 5 ) --Poneis ahi los que quereis que quiteE o que você quer que eu dea logo abaixo estas duas linhas: pc.give_item2("71052", 1) --- Ahi poned lo que quereis que deaE isso é tudo cyberianos desfruem do sistema de conquista! : D Créditos: Keko por fazer as quest, eu por traduzir e postar aki, o criador do sistema no tópico ond eu peguei não cita ele. Não testei ainda, mais todos que testaram deu certo, desculpe si o português ta ruim mais foi o maximo que consegui pois tópico original era espanhol. C. Se ajudei não seja egoista da http://cyber-gamers.org/public/style_emoticons/default/451960.gif ae.
  3. Parei de usar há algum tempo ai resolvi postar pra ajudar quem precisa... [*]Contém 10 channels. [*]Sem proteção. [*]Sistema de energia. [*]Sistema de costume.(Acho que eu removi para add outros system, SÓ TESTANDO PARA SABER OU OLHAR ARQUIVOS) [*]Sistema de auto-potes Fixed. [*]Sexta Skill warrior e ninja Fixed. [*]Nova dança Gangnam style Fixed. [*]Pets adicionado. [*]Novas texturas. [*]Brilho normal dos itens. [*]Novos mobs. [*]Novos NPCs. [*]Novos items. [*]Mapa Monarch room e gm_guild_build. [*]Novo mapa Caverna Demoniaca. [*]Todas as montarias oficiais atacam. [*]Traduzido para português - BR. [*]Todas as correções disponibilizadas pelo rancoroso. [*]Efeito de kill adicionado. [*]Exe/bin 2013 versão r36469. [*]Armas placas beta pt. [*]Alguns erros do syserr corrigidos. [*]Kill-Gui Adicionado.(F5 Abre) [*]Bônus Page adicionado.(F6 Abre) [*]Cliente Atualizado para versão 2013 (qualquer bin/exe 2013 funciona) [*]Sistema dia tarde noite Download: https://mega.co.nz/#...f4IHk05LC_fnsg0 Bem acho que é isso, se precisarem corrigir erros bugs que eu não corrigi podem dizer que tento ajeitar. Créditos [*]Cliente rancoroso [*]Edição Sinval Alguns prints de quando eu usava...
  4. Pack com 54 difs para game versão 32083 8MB & 60MB Donwload VT Tá 2/46 mais meu antivírus acusou nada. Créditos Cumprimentos Sinval.
  5. Você fez a alteração no servidor/navicat, caso não, não irá funcionar mesmo não. Você usa txts no servidor ou pelo navicat ?
  6. Quando eu testei, usava item/mob em txt, apenas substituía o último 0 da linha do item por -1 e usava o dump_proto para converter em item_proto do cliente, mas caso use de outra forma, basta substituir o 0 do AddonType/addon_type do cliente/navicat por -1. Alterações feitas no cliente, alteram apenas o visual.
  7. Olá! Estou querendo comprar uma placa gráfica mas não sei qual seria a mais ideal pra minha máquina, gostaria de opiniões sobre uma básica e uma avançada, também queria sugestões para possíveis melhorias em geral. Características Atuais: - Processador Intel Core i7 6700K 4.0GHz 8MB Skylake 6ª Geração LGA 1151 Quad Core - Placa Mãe Gigabyte GA-Z170-D3H DDR4 LGA 1151 - Memória DDR4 Kingston HyperX Fury HX421C14FB/4 4GB 2133MHz - Memória DDR4 Kingston HyperX Fury HX421C14FB/8 8GB 2133MHz - SSD CORSAIR FORCE SERIES LE CSSD-F120GBLEB 120GB SATA III - Gravador DVD Asus DRW-24F1ST Dual Layer Preto Sata - Fonte Corsair CX500 500W CP-9020047-WW ATX 2.3 PFC Ativo - Gabinete Corsair Carbide SPEC-01 RED CC-9011050-WW Mid Tower S/Fonte Agradeço desde já!
  8. Verifique se você possui a quest "mining.quest" instalada, caso não tenha, só instalar. when 20047.click or 20048.click or 20049.click or 20050.click or 20051.click or 20052.click or 20053.click or 20054.click or 20055.click or 20056.click or 20057.click or 20058.click or 20059.click or 30301.click or 30302.click or 30303.click or 30304.click or 30305.click begin if pc.is_mount() != true then if game.get_event_flag("labor_day") > 0 then char_log(0, "MINING", "Log for Labor Day") end pc.mining() end end
  9. http://paste.ubuntu.com/25037071/ Fonte/Post Original: Metin2Dev Créditos: Mali61
  10. Você está ativando a QUEST no canal->núcleo dos castelos ?
  11. Do cliente e do servidor (auth, db, canal1, game99) todos que tiverem. Sem analisar é difícil saber o que é, ou impossível, uma má configuração nos arquivos de drop pode causar isso, e outras 1001 coisas.
  12. Verifique todos os syserr e syslog, só assim pra descobrir a causa.
  13. Só comentar as funções em input_main.cpp
  14. Olá Pessoal Sistema Oficial Crafting para compartilhar hoje Print: Download VT Bem vamos lá: Add game.py dragon_soul_refine_settings.py locale/de/ui dragonsoulrefinewindow.py locale/de/ui dragonsoulwindow.py root uidragonsoul.py .Down()self.deckTab[(page+1)%2].SetUp()self.RefreshEquipSlotWindow()# ¿ëÈ¥¼® È°¼ºÈ* °ü·Ãdef ActivateDragonSoulByExtern(self, deck):self.isActivated = TRUEself.activateButton.Down()self.deckPageIndex = deckself.deckTab[deck].Down()self.deckTab[(deck+1)%2].SetUp()self.RefreshEquipSlotWindow()def DeactivateDragonSoul(self):self.isActivated = FALSEself.activateButton.SetUp()def ActivateButtonClick(self):self.isActivated = self.isActivated ^ TRUEif self.isActivated:if self.__CanActivateDeck():net.SendChatPacket("/dragon_soul activate " + str(self.deckPageIndex))else:self.isActivated = FALSEself.activateButton.SetUp()else:net.SendChatPacket("/dragon_soul deactivate")def __CanActivateDeck(self):canActiveNum = 0for i in xrange(6):slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i)itemVnum = player.GetItemIndex(slotNumber)if itemVnum != 0:item.SelectItem(itemVnum)isNoLimit = TRUEfor i in xrange(item.LIMIT_MAX_NUM):(limitType, limitValue) = item.GetLimit(i)# LIMIT_TIMER_BASED_ON_WEAR´Â ¼ÒÄÏ0¿¡ ³²Àº ½Ã°£À» ¹Ú´Â´Ù.# LIMIT_REAL_TIMEÀº ½Ã°£ ´Ù µÇ¸é ¾ÆÀÌÅÛÀÌ »ç¶óÁö¹Ç·Î ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.# LIMIT_REAL_TIME_START_FIRST_USE´Â ¼*¹ö¿¡ Á¦´ë·Î Á¤ÀǵÇÁö ¾Ê¾Æ ÀÏ´Ü ³ÀµĞ´Ù.if item.LIMIT_TIMER_BASED_ON_WEAR == limitType:isNoLimit = FALSEremain_time = player.GetItemMetinSocket(player.INVENTORY, slotNumber, 0)if 0 != remain_time:canActiveNum += 1break# ŸÀ̸Ӱ¡ ¾ø´Ù¸é ActivateÇÒ ¼ö ÀÖ´Â ¿ëÈ¥¼®.if isNoLimit:canActiveNum += 1return canActiveNum &--#62; 0# È°¼ºÈ* °ü·Ã ³¡# ½½·Ô highlight °ü·Ãdef __HighlightSlot_ClearCurrentPage(self):for i in xrange(self.wndItem.GetSlotCount()):slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, i)if slotNumber in self.listHighlightedSlot:self.wndItem.DeactivateSlot(i)self.listHighlightedSlot.remove(slotNumber)def __HighlightSlot_RefreshCurrentPage(self):for i in xrange(self.wndItem.GetSlotCount()):slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, i)if slotNumber in self.listHighlightedSlot:self.wndItem.ActivateSlot(i)def HighlightSlot(self, slot):if not slot in self.listHighlightedSlot:self.listHighlightedSlot.append (slot)# ½½·Ô highlight °ü·Ã ³¡def SetDragonSoulRefineWindow(self, wndDragonSoulRefine):if app.ENABLE_DRAGON_SOUL_SYSTEM:from _weakref import proxyself.wndDragonSoulRefine = proxy(wndDragonSoulRefine)## °*È*ÇÒ ¼ö ¾ø´Â °æ¿ì ³¯¸®´Â ¿¹¿Ü#class DragonSoulRefineException(Exception):#passclass DragonSoulRefineWindow(ui.ScriptWindow):REFINE_TYPE_GRADE, REFINE_TYPE_STEP, REFINE_TYPE_STRENGTH = xrange(3)DS_SUB_HEADER_DIC = {REFINE_TYPE_GRADE : player.DS_SUB_HEADER_DO_UPGRADE,REFINE_TYPE_STEP : player.DS_SUB_HEADER_DO_IMPROVEMENT,REFINE_TYPE_STRENGTH : player.DS_SUB_HEADER_DO_REFINE}REFINE_STONE_SLOT, DRAGON_SOUL_SLOT = xrange(2)INVALID_DRAGON_SOUL_INFO = -1def __init__(self):ui.ScriptWindow.__init__(self)self.tooltipItem = Noneself.sellingSlotNumber = -1self.isLoaded = 0self.refineChoiceButtonDict = Noneself.doRefineButton = Noneself.wndMoney = Noneself.SetWindowName("DragonSoulRefineWindow")self.__LoadWindow()def __del__(self):ui.ScriptWindow.__del__(self)def Show(self):self.__LoadWindow()ui.ScriptWindow.Show(self)def __LoadWindow(self):if self.isLoaded == 1:returnself.isLoaded = 1try:pyScrLoader = ui.PythonScriptLoader()pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "dragonsoulrefinewindow.py")except:import exceptionexception.Abort("dragonsoulrefinewindow.LoadWindow.LoadObject")try:if locale.IsARABIC():self.board = self.GetChild("DragonSoulRefineWindowBaseImage")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)wndRefineSlot = self.GetChild("RefineSlot")wndResultSlot = self.GetChild("ResultSlot")self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))self.refineChoiceButtonDict = {self.REFINE_TYPE_GRADE : self.GetChild("GradeButton"),self.REFINE_TYPE_STEP: self.GetChild("StepButton"),self.REFINE_TYPE_STRENGTH : self.GetChild("StrengthButton"),}self.doRefineButton = self.GetChild("DoRefineButton")self.wndMoney = self.GetChild("Money_Slot")except:import exceptionexception.Abort("DragonSoulRefineWindow.LoadWindow.BindObject")## Item SlotswndRefineSlot.SetOverInItemEvent(ui.__mem_func__(self.__OverInRefineItem))wndRefineSlot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutItem))wndRefineSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.__SelectRefineEmptySlot))wndRefineSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectRefineItemSlot))wndRefineSlot.SetUseSlotEvent(ui.__mem_func__(self.__SelectRefineItemSlot))wndRefineSlot.SetUnselectItemSlotEvent(ui.__mem_func__(self.__SelectRefineItemSlot))wndResultSlot.SetOverInItemEvent(ui.__mem_func__(self.__OverInResultItem))wndResultSlot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutItem))self.wndRefineSlot = wndRefineSlotself.wndResultSlot = wndResultSlot## Buttonself.refineChoiceButtonDict[self.REFINE_TYPE_GRADE].SetToggleDownEvent(self.__ToggleDownGradeButton)self.refineChoiceButtonDict[self.REFINE_TYPE_STEP].SetToggleDownEvent(self.__ToggleDownStepButton)self.refineChoiceButtonDict[self.REFINE_TYPE_STRENGTH].SetToggleDownEvent(self.__ToggleDownStrengthButton)self.refineChoiceButtonDict[self.REFINE_TYPE_GRADE].SetToggleUpEvent(lambda : self.__ToggleUpButton(self.REFINE_TYPE_GRADE))self.refineChoiceButtonDict[self.REFINE_TYPE_STEP].SetToggleUpEvent(lambda : self.__ToggleUpButton(self.REFINE_TYPE_STEP))self.refineChoiceButtonDict[self.REFINE_TYPE_STRENGTH].SetToggleUpEvent(lambda : self.__ToggleUpButton(self.REFINE_TYPE_STRENGTH))self.doRefineButton.SetEvent(self.__PressDoRefineButton)## Dialogself.wndPopupDialog = uiCommon.PopupDialog()self.currentRefineType = self.REFINE_TYPE_GRADEself.refineItemInfo = {}self.resultItemInfo = {}self.currentRecipe = {}self.wndMoney.SetText(locale.NumberToMoneyString(0))self.refineChoiceButtonDict[self.REFINE_TYPE_GRADE].Down()self.__Initialize()def Destroy(self):self.ClearDictionary()self.tooltipItem = Noneself.wndItem = 0self.wndEquip = 0self.activateButton = 0self.questionDialog = Noneself.mallButton = Noneself.inventoryTab = []self.deckTab = []self.equipmentTab = []self.tabDict = Noneself.tabButtonDict = Nonedef Close(self):if None != self.tooltipItem:self.tooltipItem.HideToolTip()self.__FlushRefineItemSlot()player.SendDragonSoulRefine(player.DRAGON_SOUL_REFINE_CLOSE)self.Hide()def Show(self):self.currentRefineType = self.REFINE_TYPE_GRADEself.wndMoney.SetText(locale.NumberToMoneyString(0))self.refineChoiceButtonDict[self.REFINE_TYPE_GRADE].Down()self.refineChoiceButtonDict[self.REFINE_TYPE_STEP].SetUp()self.refineChoiceButtonDict[self.REFINE_TYPE_STRENGTH].SetUp()self.Refresh()ui.ScriptWindow.Show(self)def SetItemToolTip(self, tooltipItem):self.tooltipItem = tooltipItem# ¹öÆ° ´*·Á ÀÖ´Â »óŸ¦ Á¦¿ÜÇÑ ¸ğµç °*È*â °ü·Ã º¯¼öµéÀ» ÃʱâÈ*.def __Initialize(self):self.currentRecipe = {}self.refineItemInfo = {}self.resultItemInfo = {}if self.REFINE_TYPE_STRENGTH == self.currentRefineType:self.refineSlotLockStartIndex = 2else:self.refineSlotLockStartIndex = 1for i in xrange(self.refineSlotLockStartIndex):self.wndRefineSlot.HideSlotBaseImage(i)self.wndMoney.SetText(locale.NumberToMoneyString(0))def __FlushRefineItemSlot(self):## Item slot settings# ¿ø·¡ Àκ¥ÀÇ ¾ÆÀÌÅÛ Ä«¿îÆ® ȸº¹for invenType, invenPos, itemCount in self.refineItemInfo.values():remainCount = player.GetItemCount(invenType, invenPos)player.SetItemCount(invenType, invenPos, remainCount + itemCount)self.__Initialize()def __ToggleUpButton(self, idx):#if self.REFINE_TYPE_GRADE == self.currentRefineType:self.refineChoiceButtonDict[idx].Down()def __ToggleDownGradeButton(self):if self.REFINE_TYPE_GRADE == self.currentRefineType:returnself.refineChoiceButtonDict[self.currentRefineType].SetUp()self.currentRefineType = self.REFINE_TYPE_GRADEself.__FlushRefineItemSlot()self.Refresh()def __ToggleDownStepButton(self):if self.REFINE_TYPE_STEP == self.currentRefineType:returnself.refineChoiceButtonDict[self.currentRefineType].SetUp()self.currentRefineType = self.REFINE_TYPE_STEPself.__FlushRefineItemSlot()self.Refresh()def __ToggleDownStrengthButton(self):if self.REFINE_TYPE_STRENGTH == self.currentRefineType:returnself.refineChoiceButtonDict[self.currentRefineType].SetUp()self.currentRefineType = self.REFINE_TYPE_STRENGTHself.__FlushRefineItemSlot()self.Refresh()def __PopUp(self, message):self.wndPopupDialog.SetText(message)self.wndPopupDialog.Open()def __SetItem(self, (invenType, invenPos), dstSlotIndex, itemCount):if dstSlotIndex &--#62;= self.refineSlotLockStartIndex:return FALSEitemVnum = player.GetItemIndex(invenType, invenPos)maxCount = player.GetItemCount(invenType, invenPos)if itemCount &--#62; maxCount:raise Exception, ("Invalid attachedItemCount(%d). (base pos (%d, %d), base itemCount(%d))" % (itemCount, invenType, invenPos, maxCount))#return FALSE# strength °*È*ÀÏ °æ¿ì, 0¹ø¿£ °*È*¼®, 1¹ø¿£ ¿ëÈ¥¼®À» ³õµµ·Ï °*Á¦ÇÔ.if DragonSoulRefineWindow.REFINE_TYPE_STRENGTH == self.currentRefineType:if self.__IsDragonSoul(itemVnum):dstSlotIndex = 1else:dstSlotIndex = 0# ºó ½½·ÔÀ̾î¾ßÇÔ.if dstSlotIndex in self.refineItemInfo:return FALSE# °*È*â¿¡ ¿Ã¸± ¼ö ÀÖ´Â ¾ÆÀÌÅÛÀÎÁö °Ë»ç.if FALSE == self.__CheckCanRefine(itemVnum):return FALSE# ²ø¾î´Ù ³õÀº ¾ÆÀÌÅÛ Ä«¿îÆ®¸¸Å* ¿ø·¡ ÀÚ¸®ÀÇ ¾ÆÀÌÅÛ Ä«¿îÆ® °¨¼Òplayer.SetItemCount(invenType, invenPos, maxCount - itemCount)self.refineItemInfo[dstSlotIndex] = (invenType, invenPos, itemCount)self.Refresh()return TRUE# °*È* °¡´ÉÇÑ ¾ÆÀÌÅÛÀÎÁö üũ# ¿ëÈ¥¼® °*È*´Â °*È* ·¹½ÃÇǸ¦ Á¤Çسõ°í ½ÃÀÛÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó,# óÀ½¿¡ °*È*â¿¡ ¿Ã¸° ¿ëÈ¥¼®¿¡ ÀÇÇØ °*È* ·¹½ÃÇÇ°¡ °áÁ¤µÈ´Ù.# ±×·¡¼* __CanRefineGrade, __CanRefineStep, __CanRefineStrength ÇÔ¼ö¿¡¼*# °*È* ·¹½ÃÇÇ°¡ ¾ø´Ù¸é(óÀ½ ¿Ã¸®´Â ¾ÆÀÌÅÛÀ̶ó¸é), °*È* ·¹½ÃÇǸ¦ ¼³Á¤ÇØÁÖ´Â ¿ªÇÒµµ ÇÑ´Ù.def __CheckCanRefine(self, vnum):if self.REFINE_TYPE_GRADE == self.currentRefineType:return self.__CanRefineGrade(vnum)elif self.REFINE_TYPE_STEP == self.currentRefineType:return self.__CanRefineStep(vnum)elif self.REFINE_TYPE_STRENGTH == self.currentRefineType:return self.__CanRefineStrength(vnum)else:return FALSEreturn TRUEdef __CanRefineGrade (self, vnum):ds_info = self.__GetDragonSoulTypeInfo(vnum)if DragonSoulRefineWindow.INVALID_DRAGON_SOUL_INFO == ds_info:self.__PopUp(locale.DRAGON_SOUL_IS_NOT_DRAGON_SOUL)return FALSEif self.currentRecipe:ds_type, grade, step, strength = ds_infocur_refine_ds_type, cur_refine_grade, cur_refine_step, cur_refine_strength = self.currentRecipe["ds_info"]if not (cur_refine_ds_type == ds_type and cur_refine_grade == grade):self.__PopUp(locale.DRAGON_SOUL_INVALID_DRAGON_SOUL)return FALSE# °*È* â¿¡ óÀ½ ¾ÆÀÌÅÛÀ» ¿Ã¸®´Â °æ¿ì, °*È* Àç·á¿¡ °üÇÑ Á¤º¸°¡ ¾ø´Ù.# ¿ëÈ¥¼® °*È*°¡, ·¹½ÃÇǸ¦ °¡Áö°í ½ÃÀÛÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, °*È*â¿¡ óÀ½ ¿Ã¸®´Â ¾ÆÀÌÅÛÀÌ ¹«¾ùÀ̳Ŀ¡ µû¶ó,# ¹«¾ùÀ» °*È*ÇÏ°í, Àç·á°¡ ¹«¾ùÀÎÁö(ÀÌÇÏ ·¹½ÃÇÇ)°¡ Á¤ÇØÁø´Ù.# ·¹½ÃÇÇ°¡ ¾ø´Ù¸é, óÀ½ ¿Ã¸° ¾ÆÀÌÅÛÀ̶ó »ı°¢ÇÏ°í, vnumÀ» ¹ÙÅÁÀ¸·Î ·¹½ÃÇǸ¦ ¼ÂÆÃ.else:self.currentRecipe = self.__GetRefineGradeRecipe(vnum)if self.currentRecipe:self.refineSlotLockStartIndex = self.currentRecipe["need_count"]self.wndMoney.SetText(locale.NumberToMoneyString(self.currentRecipe["fee"]))return TRUEelse:# °*È* Á¤º¸ ¼ÂÆÿ¡ ½ÇÆĞÇÏ¸é ¿Ã¸± ¼ö ¾ø´Â ¾ÆÀÌÅÛÀ¸·Î ÆÇ´Ü.self.__PopUp(locale.DRAGON_SOUL_CANNOT_REFINE)return FALSEdef __CanRefineStep (self, vnum):ds_info = self.__GetDragonSoulTypeInfo(vnum)if DragonSoulRefineWindow.INVALID_DRAGON_SOUL_INFO == ds_info:self.__PopUp(locale.DRAGON_SOUL_IS_NOT_DRAGON_SOUL)return FALSEif self.currentRecipe:ds_type, grade, step, strength = ds_infocur_refine_ds_type, cur_refine_grade, cur_refine_step, cur_refine_strength = self.currentRecipe["ds_info"]if not (cur_refine_ds_type == ds_type and cur_refine_grade == grade and cur_refine_step == step):self.__PopUp(locale.DRAGON_SOUL_INVALID_DRAGON_SOUL)return FALSE# °*È* â¿¡ óÀ½ ¾ÆÀÌÅÛÀ» ¿Ã¸®´Â °æ¿ì, Àç·á¿¡ °üÇÑ Á¤º¸°¡ ¾ø´Ù.# ¿ëÈ¥¼® °*È*°¡, ·¹½ÃÇǸ¦ °¡Áö°í ½ÃÀÛÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, °*È*â¿¡ óÀ½ ¿Ã¸®´Â ¾ÆÀÌÅÛÀÌ ¹«¾ùÀ̳Ŀ¡ µû¶ó,# ¹«¾ùÀ» °*È*ÇÏ°í, Àç·á°¡ ¹«¾ùÀÎÁö(ÀÌÇÏ ·¹½ÃÇÇ)°¡ Á¤ÇØÁø´Ù.# ·¹½ÃÇÇ°¡ ¾ø´Ù¸é, óÀ½ ¿Ã¸° ¾ÆÀÌÅÛÀ̶ó »ı°¢ÇÏ°í, vnumÀ» ¹ÙÅÁÀ¸·Î ·¹½ÃÇǸ¦ ¼ÂÆÃ.else:self.currentRecipe = self.__GetRefineStepRecipe(vnum)if self.currentRecipe:self.refineSlotLockStartIndex = self.currentRecipe["need_count"]self.wndMoney.SetText(locale.NumberToMoneyString(self.currentRecipe["fee"]))return TRUEelse:# °*È* Á¤º¸ ¼ÂÆÿ¡ ½ÇÆĞÇÏ¸é ¿Ã¸± ¼ö ¾ø´Â ¾ÆÀÌÅÛÀ¸·Î ÆÇ´Ü.self.__PopUp(locale.DRAGON_SOUL_CANNOT_REFINE)return FALSEdef __CanRefineStrength (self, vnum):# ¿ëÈ¥¼®ÀÎ °æ¿ì, ´õ ÀÌ»ó strength °*È*¸¦ ÇÒ ¼ö ¾ø´ÂÁö üũÇؾßÇÔ.if self.__IsDragonSoul(vnum):ds_type, grade, step, strength = self.__GetDragonSoulTypeInfo(vnum)import dragon_soul_refine_settingsif strength &--#62;= dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["strength_max_table"][grade][step]:self.__PopUp(locale.DRAGON_SOUL_CANNOT_REFINE_MORE)return FALSEelse:return TRUE# strength °*È*ÀÇ °æ¿ì, refine_recipe°¡ ¿ëÈ¥¼®ÀÇ Á¾·ù°¡ ¾Æ´Ñ, °*È*¼®ÀÇ Á¾·ù¿¡ µû¶ó ´Ş¶óÁø´Ù.# µû¶ó¼* ¿ëÈ¥¼®ÀÌ ¾Æ´Ï¶ó¸é,# ÀÌ¹Ì ·¹½ÃÇÇ°¡ ÀÖ´Â °æ¿ì´Â, °*È*¼®ÀÌ °*È*â¿¡ ÀÖ´Ù´Â °ÍÀ̹ǷÎ, return FALSE# ·¹½ÃÇÇ°¡ ¾ø´Â °æ¿ì´Â, °*È*¼®ÀÎÁö È®ÀÎÇÏ°í, ·¹½ÃÇǸ¦ ¼ÂÆÃÇÑ´Ù.else:if self.currentRecipe:self.__PopUp(locale.DRAGON_SOUL_IS_NOT_DRAGON_SOUL)return FALSEelse:refineRecipe = self.__GetRefineStrengthInfo(vnum)if refineRecipe:self.currentRecipe = refineRecipeself.wndMoney.SetText(locale.NumberToMoneyString(self.currentRecipe["fee"]))return TRUEelse:# ·¹½ÃÇǸ¦ ¼ÂÆÃÇÒ ¼ö ¾ø´Â °æ¿ìself.__PopUp(locale.DRAGON_SOUL_NOT_DRAGON_SOUL_REFINE_STONE)return FALSEdef __GetRefineGradeRecipe (self, vnum):ds_type, grade, step, strength = self.__GetDragonSoulTypeInfo(vnum)try:import dragon_soul_refine_settingsreturn {"ds_info" : (ds_type, grade, step, strength),"need_count" : dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["grade_need_count"][grade],"fee" : dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["grade_fee"][grade]}except:return Nonedef __GetRefineStepRecipe (self, vnum):ds_type, grade, step, strength = self.__GetDragonSoulTypeInfo(vnum)try:import dragon_soul_refine_settingsreturn {"ds_info" : (ds_type, grade, step, strength),"need_count" : dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["step_need_count"][step],"fee" : dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["step_fee"][step]}except:return None# strength °*È*ÀÇ °æ¿ì, refineInfo´Â °*È*¼®¿¡ µû¶ó ´Ş¶óÁø´Ù.def __GetRefineStrengthInfo (self, itemVnum):try:# À̳ğÀÇ À§Ä¡¸¦ ¾îÂîÇÏÁö....# °*È*¼®ÀÌ ¾Æ´Ï¸é ¾ÈµÊ.item.SelectItem(itemVnum)if not (item.ITEM_TYPE_MATERIAL == item.GetItemType()and (item.MATERIAL_DS_REFINE_NORMAL &--#60;= item.GetItemSubType() and item.GetItemSubType() &--#60;= item.MATERIAL_DS_REFINE_HOLLY)):return Noneimport dragon_soul_refine_settingsreturn { "fee" : dragon_soul_refine_settings.strength_fee[item.GetItemSubType()] }except:return Nonedef __IsDragonSoul(self, vnum):item.SelectItem(vnum)return item.GetItemType() == item.ITEM_TYPE_DS# ¿ëÈ¥¼® Vnum¿¡ ´ëÇÑ comment# ITEM VNUMÀ» 10¸¸ ÀÚ¸®ºÎÅÍ, FEDCBA¶ó°í ÇÑ´Ù¸é# FE : ¿ëÈ¥¼® Á¾·ù. D : µî±Ş# C : ´Ü°è B : °*È*# A : ¿©¹úÀÇ ¹øÈ£µé...def __GetDragonSoulTypeInfo(self, vnum):if not self.__IsDragonSoul(vnum):return DragonSoulRefineWindow.INVALID_DRAGON_SOUL_INFOds_type = vnum / 10000grade = vnum % 10000 /1000step = vnum % 1000 / 100strength = vnum % 100 / 10return (ds_type, grade, step, strength)def __MakeDragonSoulVnum(self, ds_type, grade, step, strength):return ds_type * 10000 + grade * 1000 + step * 100 + strength * 10## ºó ½½·Ô ¼±Åà Eventdef __SelectRefineEmptySlot(self, selectedSlotPos):try:if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returnif selectedSlotPos &--#62;= self.refineSlotLockStartIndex:returnif mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()mouseModule.mouseController.DeattachObject()if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, locale.MOVE_ITEM_FAILURE_PRIVATE_SHOP)returnattachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if player.INVENTORY == attachedInvenType and player.IsEquipmentSlot(attachedSlotPos):returnif player.INVENTORY != attachedInvenType and player.DRAGON_SOUL_INVENTORY != attachedInvenType:returnif TRUE == self.__SetItem((attachedInvenType, attachedSlotPos), selectedSlotPos, attachedItemCount):self.Refresh()except Exception, e:import dbgdbg.TraceError("Exception : __SelectRefineEmptySlot, %s" % e)# Ŭ¸¯À¸·Î ½½·Ô¿¡¼* »èÁ¦.def __SelectRefineItemSlot(self, selectedSlotPos):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returntry:if not selectedSlotPos in self.refineItemInfo:# »õ·Î¿î ¾ÆÀÌÅÛÀ» °*È*â¿¡ ¿Ã¸®´Â ÀÛ¾÷.if mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()mouseModule.mouseController.DeattachObject()if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)returnattachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if player.INVENTORY == attachedInvenType and player.IsEquipmentSlot(attachedSlotPos):returnif player.INVENTORY != attachedInvenType and player.DRAGON_SOUL_INVENTORY != attachedInvenType:returnself.AutoSetItem((attachedInvenType, attachedSlotPos), 1)returnelif mouseModule.mouseController.isAttached():returnattachedInvenType, attachedSlotPos, attachedItemCount = self.refineItemInfo[selectedSlotPos]selectedItemVnum = player.GetItemIndex(attachedInvenType, attachedSlotPos)# °*È*â¿¡¼* »èÁ¦ ¹× ¿ø·¡ Àκ¥ÀÇ ¾ÆÀÌÅÛ Ä«¿îÆ® ȸº¹invenType, invenPos, itemCount = self.refineItemInfo[selectedSlotPos]remainCount = player.GetItemCount(invenType, invenPos)player.SetItemCount(invenType, invenPos, remainCount + itemCount)del self.refineItemInfo[selectedSlotPos]# °*È*âÀÌ ºñ¾ú´Ù¸é, ÃʱâÈ*if not self.refineItemInfo:self.__Initialize()else:item.SelectItem(selectedItemVnum)# ¾ø¾Ø ¾ÆÀÌÅÛÀÌ °*È*¼®À̾ú´Ù¸é °*È* ·¹Çǽà ÃʱâÈ*if (item.ITEM_TYPE_MATERIAL == item.GetItemType()and (item.MATERIAL_DS_REFINE_NORMAL &--#60;= item.GetItemSubType() and item.GetItemSubType() &--#60;= item.MATERIAL_DS_REFINE_HOLLY)):self.currentRecipe = {}self.wndMoney.SetText(localeInfo.NumberToMoneyString(0))# ¿ëÈ¥¼®À̾ú´Ù¸é,# strength°*È*°¡ ¾Æ´Ñ °æ¿ì, °*È*â¿¡ ´Ù¸¥ ¿ëÈ¥¼®ÀÌ ³²¾ÆÀÖÀ¸¹Ç·Î, ·¹½ÃÇǸ¦ ÃʱâÈ*ÇÏ¸é ¾ÈµÊ.# strength°*È*ÀÇ °æ¿ì, °*È* ·¹½ÃÇÇ´Â °*È*¼®¿¡ Á¾¼ÓµÈ °ÍÀ̹ǷΠ´Ù¸¥ ó¸®ÇÒ ÇÊ¿ä°¡ ¾øÀ½.else:passexcept Exception, e:import dbgdbg.TraceError("Exception : __SelectRefineItemSlot, %s" % e)self.Refresh()def __OverInRefineItem(self, slotIndex):if self.refineItemInfo.has_key(slotIndex):inven_type, inven_pos, item_count = self.refineItemInfo[slotIndex]self.tooltipItem.SetInventoryItem(inven_pos, inven_type)def __OverInResultItem(self, slotIndex):if self.resultItemInfo.has_key(slotIndex):inven_type, inven_pos, item_count = self.resultItemInfo[slotIndex]self.tooltipItem.SetInventoryItem(inven_pos, inven_type)def __OverOutItem(self):if self.tooltipItem:self.tooltipItem.HideToolTip()def __PressDoRefineButton(self):for i in xrange(self.refineSlotLockStartIndex):if not i in self.refineItemInfo:self.wndPopupDialog.SetText(locale.DRAGON_SOUL_NOT_ENOUGH_MATERIAL)self.wndPopupDialog.Open()returnplayer.SendDragonSoulRefine(DragonSoulRefineWindow.DS_SUB_HEADER_DIC[self.currentRefineType], self.refineItemInfo)def OnPressEscapeKey(self):self.Close()return TRUEdef Refresh(self):self.__RefreshRefineItemSlot()self.__ClearResultItemSlot()def __RefreshRefineItemSlot(self):try:for slotPos in xrange(self.wndRefineSlot.GetSlotCount()):self.wndRefineSlot.ClearSlot(slotPos)if slotPos &--#60; self.refineSlotLockStartIndex:# self.refineItemInfo[slotPos]ÀÇ Á¤º¸È®ÀÎ# (½ÇÁ¦·Î ¾ÆÀÌÅÛÀÌ Á¸ÀçÇÏ´ÂÁö È®ÀÎ)# Á¸Àç -&--#62; ¾ÆÀÌÅÛ ¾ÆÀÌÄÜÀ» ½½·Ô¿¡ ¼ÂÆÃ.# ºñÁ¸Àç -&--#62; ¾ÆÀÌÅÛÀÌ ¾øÀ¸¹Ç·Î °*È*â¿¡¼* »èÁ¦.if slotPos in self.refineItemInfo:invenType, invenPos, itemCount = self.refineItemInfo[slotPos]itemVnum = player.GetItemIndex(invenType, invenPos)# if itemVnum:if itemVnum:self.wndRefineSlot.SetItemSlot(slotPos, player.GetItemIndex(invenType, invenPos), itemCount)else:del self.refineItemInfo[slotPos]# ºó ½½·Ô¿¡ reference ¾ÆÀÌÄÜÀ» alpha 0.5·Î ¼ÂÆÃ.if not slotPos in self.refineItemInfo:try:reference_vnum = 0# strength °*È*ÀÏ ¶§´Â,# 0¹ø ½½·Ô¿¡ °*È*¼®À», 1¹ø ½½·Ô¿¡ ¿ëÈ¥¼®À» ³õ´Â´Ù.if DragonSoulRefineWindow.REFINE_TYPE_STRENGTH == self.currentRefineType:if DragonSoulRefineWindow.REFINE_STONE_SLOT == slotPos:reference_vnum = 100300else:reference_vnum = self.__MakeDragonSoulVnum(*self.currentRecipe["ds_info"])if 0 != reference_vnum:item.SelectItem(reference_vnum)itemIcon = item.GetIconImage()(width, height) = item.GetItemSize()self.wndRefineSlot.SetSlot(slotPos, 0, width, height, itemIcon, (1.0, 1.0, 1.0, 0.5))# slot ¿ìÃø ÇÏ´Ü¿¡ ¼ıÀÚ ¶ß¸é ¾È ¿¹»İ...self.wndRefineSlot.SetSlotCount(slotPos, 0)except:pass# refineSlotLockStartIndex º¸´Ù ÀÛÀº ½½·ÔÀº ´İÈù À̹ÌÁö¸¦ º¸¿©ÁÖ¸é ¾ÈµÊ.self.wndRefineSlot.HideSlotBaseImage(slotPos)# slotPos &--#62;= self.refineSlotLockStartIndex:else:# Á¤»óÀûÀÎ °æ¿ì¶ó¸é ÀÌ if¹®¿¡ µé¾î°¥ ÀÏÀº ¾ø°ÚÁö¸¸,# (¾ÖÃÊ¿¡ À妽º°¡ refineSlotLockStartIndex ÀÌ»óÀÎ ½½·Ô¿¡´Â ¾ÆÀÌÅÛÀ» ³ÖÁö ¸øÇÏ°Ô Ç߱⠶§¹®)# Ȥ½Ã ¸ğ¸¦ ¿¡·¯¿¡ ´ëºñÇÔ.if slotPos in self.refineItemInfo:invenType, invenPos, itemCount = self.refineItemInfo[slotPos]remainCount = player.GetItemCount(invenType, invenPos)player.SetItemCount(invenType, invenPos, remainCount + itemCount)del self.refineItemInfo[selectedSlotPos]# refineSlotLockStartIndex ÀÌ»óÀÎ ½½·ÔÀº ´İÈù À̹ÌÁö¸¦ º¸¿©Áà¾ßÇÔ.self.wndRefineSlot.ShowSlotBaseImage(slotPos)# °*È*â¿¡ ¾Æ¹«·± ¾ÆÀÌÅÛÀÌ ¾ø´Ù¸é, ÃʱâÈ*ÇØÁÜ.# À§¿¡¼* Áß°£ Áß°£¿¡ "del self.refineItemInfo[slotPos]"¸¦ Ç߱⠶§¹®¿¡,# ¿©±â¼* Çѹø üũÇØÁà¾ßÇÔ.if not self.refineItemInfo:self.__Initialize()self.wndRefineSlot.RefreshSlot()except Exception, e:import dbgdbg.TraceError("Exception : __RefreshRefineItemSlot, %s" % e)def __GetEmptySlot(self, itemVnum = 0):# STRENGTH °*È*ÀÇ °æ¿ì, ¿ëÈ¥¼® ½½·Ô°ú °*È*¼® ½½·ÔÀÌ ±¸ºĞµÇ¾îÀֱ⠋š¹®¿¡# vnumÀ» ¾Ë¾Æ¾ß ÇÑ´Ù.if DragonSoulRefineWindow.REFINE_TYPE_STRENGTH == self.currentRefineType:if 0 == itemVnum:return -1if self.__IsDragonSoul(itemVnum):if not DragonSoulRefineWindow.DRAGON_SOUL_SLOT in self.refineItemInfo:return DragonSoulRefineWindow.DRAGON_SOUL_SLOTelse:if not DragonSoulRefineWindow.REFINE_STONE_SLOT in self.refineItemInfo:return DragonSoulRefineWindow.REFINE_STONE_SLOTelse:for slotPos in xrange(self.wndRefineSlot.GetSlotCount()):if not slotPos in self.refineItemInfo:return slotPosreturn -1def AutoSetItem(self, (invenType, invenPos), itemCount):itemVnum = player.GetItemIndex(invenType, invenPos)emptySlot = self.__GetEmptySlot(itemVnum)if -1 == emptySlot:returnself.__SetItem((invenType, invenPos), emptySlot, itemCount)def __ClearResultItemSlot(self):self.wndResultSlot.ClearSlot(0)self.resultItemInfo = {}def RefineSucceed(self, inven_type, inven_pos):self.__Initialize()self.Refresh()itemCount = player.GetItemCount(inven_type, inven_pos)if itemCount &--#62; 0:self.resultItemInfo[0] = (inven_type, inven_pos, itemCount)self.wndResultSlot.SetItemSlot(0, player.GetItemIndex(inven_type, inven_pos), itemCount)def RefineFail(self, reason, inven_type, inven_pos):if net.DS_SUB_HEADER_REFINE_ [img]import uiimport playerimport mouseModuleimport netimport appimport sndimport itemimport chatimport grpimport uiScriptLocaleimport uiRefineimport uiAttachMetinimport uiPickMoneyimport uiCommonimport uiPrivateShopBuilderimport localeimport constInfoimport imeimport uiInventoryimport sysITEM_FLAG_APPLICABLE = 1 &--#60;&--#60; 14# ¿ëÈ¥¼® Vnum¿¡ ´ëÇÑ comment# ITEM VNUMÀ» 10¸¸ ÀÚ¸®ºÎÅÍ, FEDCBA¶ó°í ÇÑ´Ù¸é# FE : ¿ëÈ¥¼® Á¾·ù. D : µî±Ş# C : ´Ü°è B : °*È*# A : ¿©¹úÀÇ ¹øÈ£µé...class DragonSoulWindow(ui.ScriptWindow):KIND_TAP_TITLES = [uiScriptLocale.DRAGONSOUL_TAP_TITLE_1, uiScriptLocale.DRAGONSOUL_TAP_TITLE_2,uiScriptLocale.DRAGONSOUL_TAP_TITLE_3, uiScriptLocale.DRAGONSOUL_TAP_TITLE_4, uiScriptLocale.DRAGONSOUL_TAP_TITLE_5, uiScriptLocale.DRAGONSOUL_TAP_TITLE_6]def __init__(self):ui.ScriptWindow.__init__(self)self.questionDialog = Noneself.tooltipItem = Noneself.sellingSlotNumber = -1self.isLoaded = 0self.isActivated = FALSEself.DSKindIndex = 0self.tabDict = Noneself.tabButtonDict = Noneself.deckPageIndex = 0self.inventoryPageIndex = 0self.SetWindowName("DragonSoulWindow")self.__LoadWindow()def __del__(self):ui.ScriptWindow.__del__(self)def Show(self):self.__LoadWindow()ui.ScriptWindow.Show(self)def __LoadWindow(self):if self.isLoaded == 1:returnself.isLoaded = 1try:pyScrLoader = ui.PythonScriptLoader()pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "dragonsoulwindow.py")except:import exceptionexception.Abort("dragonsoulwindow.LoadWindow.LoadObject")try:if locale.IsARABIC():self.board = self.GetChild("Equipment_Base")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_01")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_02")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_03")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_04")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_05")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_06")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)wndItem = self.GetChild("ItemSlot")wndEquip = self.GetChild("EquipmentSlot")self.activateButton = self.GetChild("activate")self.deckTab = []self.deckTab.append(self.GetChild("deck1"))self.deckTab.append(self.GetChild("deck2"))self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))self.inventoryTab = []self.inventoryTab.append(self.GetChild("Inventory_Tab_01"))self.inventoryTab.append(self.GetChild("Inventory_Tab_02"))self.inventoryTab.append(self.GetChild("Inventory_Tab_03"))self.inventoryTab.append(self.GetChild("Inventory_Tab_04"))self.inventoryTab.append(self.GetChild("Inventory_Tab_05"))self.tabDict = {0 : self.GetChild("Tab_01"),1 : self.GetChild("Tab_02"),2 : self.GetChild("Tab_03"),3 : self.GetChild("Tab_04"),4 : self.GetChild("Tab_05"),5 : self.GetChild("Tab_06"),}self.tabButtonDict = {0 : self.GetChild("Tab_Button_01"),1 : self.GetChild("Tab_Button_02"),2 : self.GetChild("Tab_Button_03"),3 : self.GetChild("Tab_Button_04"),4 : self.GetChild("Tab_Button_05"),5 : self.GetChild("Tab_Button_06"),}self.tabText = self.GetChild("tab_text_area")except:import exceptionexception.Abort("InventoryWindow.LoadWindow.BindObject")## DragonSoul Kind Tapfor (tabKey, tabButton) in self.tabButtonDict.items():tabButton.SetEvent(ui.__mem_func__(self.SetDSKindIndex), tabKey)## ItemwndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))wndItem.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))wndItem.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))wndItem.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))wndItem.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))## EquipmentwndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptyEquipSlot))wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectEquipItemSlot))wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseEquipItemSlot))wndEquip.SetUseSlotEvent(ui.__mem_func__(self.UseEquipItemSlot))wndEquip.SetOverInItemEvent(ui.__mem_func__(self.OverInEquipItem))wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.OverOutEquipItem))## Deckself.deckTab[0].SetToggleDownEvent(lambda arg=0: self.SetDeckPage(arg))self.deckTab[1].SetToggleDownEvent(lambda arg=1: self.SetDeckPage(arg))self.deckTab[0].SetToggleUpEvent(lambda arg=0: self.__DeckButtonDown(arg))self.deckTab[1].SetToggleUpEvent(lambda arg=1: self.__DeckButtonDown(arg))self.deckTab[0].Down()## Grade buttonself.inventoryTab[0].SetEvent(lambda arg=0: self.SetInventoryPage(arg))self.inventoryTab[1].SetEvent(lambda arg=1: self.SetInventoryPage(arg))self.inventoryTab[2].SetEvent(lambda arg=2: self.SetInventoryPage(arg))self.inventoryTab[3].SetEvent(lambda arg=3: self.SetInventoryPage(arg))self.inventoryTab[4].SetEvent(lambda arg=4: self.SetInventoryPage(arg))self.inventoryTab[0].Down()## Etcself.wndItem = wndItemself.wndEquip = wndEquipself.dlgQuestion = uiCommon.QuestionDialog2()self.dlgQuestion.Close()self.activateButton.SetToggleDownEvent(ui.__mem_func__(self.ActivateButtonClick))self.activateButton.SetToggleUpEvent(ui.__mem_func__(self.ActivateButtonClick))self.wndPopupDialog = uiCommon.PopupDialog()##self.listHighlightedSlot = []## Refreshself.SetInventoryPage(0)self.RefreshItemSlot()self.RefreshEquipSlotWindow()self.RefreshBagSlotWindow()self.SetDSKindIndex(0)self.activateButton.Enable()self.deckTab[self.deckPageIndex].Down()self.activateButton.SetUp()def Destroy(self):self.ClearDictionary()self.tooltipItem = Noneself.wndItem = 0self.wndEquip = 0self.activateButton = 0self.questionDialog = Noneself.mallButton = Noneself.inventoryTab = []self.deckTab = []self.equipmentTab = []self.tabDict = Noneself.tabButtonDict = Nonedef Close(self):if None != self.tooltipItem:self.tooltipItem.HideToolTip()self.Hide()def __DeckButtonDown(self, deck):self.deckTab[deck].Down()def SetInventoryPage(self, page):if self.inventoryPageIndex != page:self.__HighlightSlot_ClearCurrentPage()self.inventoryPageIndex = pageself.inventoryTab[(page+1)%5].SetUp()self.inventoryTab[(page+2)%5].SetUp()self.inventoryTab[(page+3)%5].SetUp()self.inventoryTab[(page+4)%5].SetUp()self.RefreshBagSlotWindow()def SetItemToolTip(self, tooltipItem):self.tooltipItem = tooltipItemdef RefreshItemSlot(self):self.RefreshBagSlotWindow()self.RefreshEquipSlotWindow()def RefreshEquipSlotWindow(self):for i in xrange(6):slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i)itemVnum = player.GetItemIndex(slotNumber)self.wndEquip.SetItemSlot(player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i, itemVnum, 0)self.wndEquip.EnableSlot(player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i)if itemVnum != 0:item.SelectItem(itemVnum)for j in xrange(item.LIMIT_MAX_NUM):(limitType, limitValue) = item.GetLimit(j)# ¹Ø¿¡¼* remain_timeÀÌ 0ÀÌÇÏÀÎÁö üũ Çϱ⠶§¹®¿¡ ÀÓÀÇÀÇ ¾ç¼ö·Î ÃʱâÈ*remain_time = 999# ÀÏ´Ü ÇöÀç ŸÀ̸Ӵ ÀÌ ¼¼°³ »ÓÀÌ´Ù.if item.LIMIT_REAL_TIME == limitType:remain_time = player.GetItemMetinSocket(player.INVENTORY, slotNumber, 0) - app.GetGlobalTimeStamp()elif item.LIMIT_REAL_TIME_START_FIRST_USE == limitType:remain_time = player.GetItemMetinSocket(player.INVENTORY, slotNumber, 0) - app.GetGlobalTimeStamp()elif item.LIMIT_TIMER_BASED_ON_WEAR == limitType:remain_time = player.GetItemMetinSocket(player.INVENTORY, slotNumber, 0)if remain_time &--#60;= 0:self.wndEquip.DisableSlot(player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i)breakself.wndEquip.RefreshSlot()def RefreshStatus(self):self.RefreshItemSlot()def __InventoryLocalSlotPosToGlobalSlotPos(self, window_type, local_slot_pos):if player.INVENTORY == window_type:return self.deckPageIndex * player.DRAGON_SOUL_EQUIPMENT_FIRST_SIZE + local_slot_posreturn (self.DSKindIndex * 5 * player.DRAGON_SOUL_PAGE_SIZE) + self.inventoryPageIndex * player.DRAGON_SOUL_PAGE_SIZE + local_slot_posdef RefreshBagSlotWindow(self):getItemVNum=player.GetItemIndexgetItemCount=player.GetItemCountsetItemVnum=self.wndItem.SetItemSlotfor i in xrange(player.DRAGON_SOUL_PAGE_SIZE):self.wndItem.EnableSlot(i)#&--#60;- dragon soul kindslotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, i)itemCount = getItemCount(player.DRAGON_SOUL_INVENTORY, slotNumber)if 0 == itemCount:self.wndItem.ClearSlot(i)continueelif 1 == itemCount:itemCount = 0itemVnum = getItemVNum(player.DRAGON_SOUL_INVENTORY, slotNumber)setItemVnum(i, itemVnum, itemCount)if itemVnum != 0:item.SelectItem(itemVnum)for j in xrange(item.LIMIT_MAX_NUM):(limitType, limitValue) = item.GetLimit(j)# ¹Ø¿¡¼* remain_timeÀÌ À½¼öÀÎÁö üũ Çϱ⠶§¹®¿¡ ÀÓÀÇÀÇ ¾ç¼ö·Î ÃʱâÈ*remain_time = 999if item.LIMIT_REAL_TIME == limitType:remain_time = player.GetItemMetinSocket(player.DRAGON_SOUL_INVENTORY, slotNumber, 0)elif item.LIMIT_REAL_TIME_START_FIRST_USE == limitType:remain_time = player.GetItemMetinSocket(player.DRAGON_SOUL_INVENTORY, slotNumber, 0)elif item.LIMIT_TIMER_BASED_ON_WEAR == limitType:remain_time = player.GetItemMetinSocket(player.DRAGON_SOUL_INVENTORY, slotNumber, 0)if remain_time &--#60;= 0:self.wndItem.DisableSlot(i)breakself.__HighlightSlot_RefreshCurrentPage()self.wndItem.RefreshSlot()def ShowToolTip(self, window_type, slotIndex):if None != self.tooltipItem:if player.INVENTORY == window_type:self.tooltipItem.SetInventoryItem(slotIndex)else:self.tooltipItem.SetInventoryItem(slotIndex, player.DRAGON_SOUL_INVENTORY)def OnPressEscapeKey(self):self.Close()return TRUEdef OnTop(self):if None != self.tooltipItem:self.tooltipItem.SetTop()# item slot °ü·Ã ÇÔ¼ödef OverOutItem(self):self.wndItem.SetUsableItem(FALSE)if None != self.tooltipItem:self.tooltipItem.HideToolTip()def OverInItem(self, overSlotPos):self.wndItem.DeactivateSlot(overSlotPos)overSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, overSlotPos)try:self.listHighlightedSlot.remove(overSlotPos)except:passself.wndItem.SetUsableItem(FALSE)self.ShowToolTip(player.DRAGON_SOUL_INVENTORY, overSlotPos)def __UseItem(self, slotIndex):ItemVNum = player.GetItemIndex(player.DRAGON_SOUL_INVENTORY, slotIndex)if 0 == player.GetItemMetinSocket(player.DRAGON_SOUL_INVENTORY, slotIndex, 0):self.wndPopupDialog.SetText(locale.DRAGON_SOUL_EXPIRED)self.wndPopupDialog.Open()returnself.__EquipItem(slotIndex)def __EquipItem(self, slotIndex):ItemVNum = player.GetItemIndex(player.DRAGON_SOUL_INVENTORY, slotIndex)item.SelectItem(ItemVNum)subType = item.GetItemSubType()equipSlotPos = player.DRAGON_SOUL_EQUIPMENT_SLOT_START + self.deckPageIndex * player.DRAGON_SOUL_EQUIPMENT_FIRST_SIZE + subTypesrcItemPos = (player.DRAGON_SOUL_INVENTORY, slotIndex)dstItemPos = (player.INVENTORY, equipSlotPos)self.__OpenQuestionDialog(TRUE, srcItemPos, dstItemPos)def SelectItemSlot(self, itemSlotIndex):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returnitemSlotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, itemSlotIndex)if mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemVID = mouseModule.mouseController.GetAttachedItemIndex()attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if player.RESERVED_WINDOW != attachedInvenType:net.SendItemUseToItemPacket(attachedInvenType, attachedSlotPos, player.DRAGON_SOUL_INVENTORY, itemSlotIndex)mouseModule.mouseController.DeattachObject()else:selectedItemVNum = player.GetItemIndex(player.DRAGON_SOUL_INVENTORY, itemSlotIndex)itemCount = player.GetItemCount(player.DRAGON_SOUL_INVENTORY, itemSlotIndex)mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_DRAGON_SOUL_INVENTORY, itemSlotIndex, selectedItemVNum, itemCount)self.wndItem.SetUseMode(FALSE)snd.PlaySound("sound/ui/pick.wav")def SelectEmptySlot(self, selectedSlotPos):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returnselectedSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, selectedSlotPos)print "__debug", selectedSlotPosif mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if player.SLOT_TYPE_PRIVATE_SHOP == attachedSlotType:mouseModule.mouseController.RunCallBack("INVENTORY")elif player.SLOT_TYPE_SHOP == attachedSlotType:net.SendShopBuyPacket(attachedSlotPos)elif player.SLOT_TYPE_SAFEBOX == attachedSlotType:if player.ITEM_MONEY == attachedItemIndex:net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount())snd.PlaySound("sound/ui/money.wav")else:net.SendSafeboxCheckoutPacket(attachedSlotPos, player.DRAGON_SOUL_INVENTORY, selectedSlotPos)elif player.SLOT_TYPE_MALL == attachedSlotType:net.SendMallCheckoutPacket(attachedSlotPos, player.DRAGON_SOUL_INVENTORY, selectedSlotPos)elif player.RESERVED_WINDOW != attachedInvenType:if player.IsDSEquipmentSlot(attachedInvenType, attachedSlotPos):srcItemPos = (attachedInvenType, attachedSlotPos)dstItemPos = (player.DRAGON_SOUL_INVENTORY, selectedSlotPos)self.__OpenQuestionDialog(FALSE, srcItemPos, dstItemPos)else:itemCount = player.GetItemCount(attachedInvenType, attachedSlotPos)attachedCount = mouseModule.mouseController.GetAttachedItemCount()self.__SendMoveItemPacket(attachedInvenType, attachedSlotPos, player.DRAGON_SOUL_INVENTORY, selectedSlotPos, attachedCount)mouseModule.mouseController.DeattachObject()def UseItemSlot(self, slotIndex):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS():returnslotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, slotIndex)try:# ¿ëÈ¥¼® °*È*âÀÌ ¿*·ÁÀÖÀ¸¸é, ¾ÆÀÌÅÛ ¿ìŬ¸¯ ½Ã ÀÚµ¿À¸·Î °*È*âÀ¸·Î µé¾î°¨.if self.wndDragonSoulRefine.IsShow():if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)returnself.wndDragonSoulRefine.AutoSetItem((player.DRAGON_SOUL_INVENTORY, slotIndex), 1)returnexcept:passself.__UseItem(slotIndex)mouseModule.mouseController.DeattachObject()self.OverOutItem()def __SendMoveItemPacket(self, srcSlotWindow, srcSlotPos, dstSlotWindow, dstSlotPos, srcItemCount):if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, locale.MOVE_ITEM_FAILURE_PRIVATE_SHOP)returnnet.SendItemMovePacket(srcSlotWindow , srcSlotPos, dstSlotWindow, dstSlotPos, srcItemCount)# equip ½½·Ô °ü·Ã ÇÔ¼öµé.def OverOutEquipItem(self):self.OverOutItem()def OverInEquipItem(self, overSlotPos):overSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, overSlotPos)self.wndItem.SetUsableItem(FALSE)self.ShowToolTip(player.INVENTORY, overSlotPos)def UseEquipItemSlot(self, slotIndex):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS():returnslotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, slotIndex)self.__UseEquipItem(slotIndex)mouseModule.mouseController.DeattachObject()self.OverOutEquipItem()def __UseEquipItem(self, slotIndex):if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, locale.USE_ITEM_FAILURE_PRIVATE_SHOP)returnself.__OpenQuestionDialog(FALSE, (player.INVENTORY, slotIndex), (1, 1))def SelectEquipItemSlot(self, itemSlotIndex):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returnitemSlotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, itemSlotIndex)if mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()# ÀÚ±â ÀÚ½ÅÀ» ÀÚ±â Àڽſ¡°Ô µå·¡±×ÇÏ´Â °æ¿ìif player.SLOT_TYPE_INVENTORY == attachedSlotType and itemSlotIndex == attachedSlotPos:returnattachedItemVID = mouseModule.mouseController.GetAttachedItemIndex()attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if player.RESERVED_WINDOW != attachedInvenType:net.SendItemUseToItemPacket(attachedInvenType, attachedSlotPos, player.INVENTORY, itemSlotIndex)mouseModule.mouseController.DeattachObject()else:selectedItemVNum = player.GetItemIndex(player.INVENTORY, itemSlotIndex)itemCount = player.GetItemCount(player.INVENTORY, itemSlotIndex)mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, itemCount)self.wndItem.SetUseMode(FALSE)snd.PlaySound("sound/ui/pick.wav")def SelectEmptyEquipSlot(self, selectedSlot):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returnselectedSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, selectedSlot)if mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()if player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedSlotType:if 0 == player.GetItemMetinSocket(player.DRAGON_SOUL_INVENTORY, attachedSlotPos, 0):self.wndPopupDialog.SetText(locale.DRAGON_SOUL_EXPIRED)self.wndPopupDialog.Open()returnitem.SelectItem(attachedItemIndex)subType = item.GetItemSubType()if subType != (selectedSlot - player.DRAGON_SOUL_EQUIPMENT_SLOT_START):self.wndPopupDialog.SetText(locale.DRAGON_SOUL_UNMATCHED_SLOT)self.wndPopupDialog.Open()else:srcItemPos = (player.DRAGON_SOUL_INVENTORY, attachedSlotPos)dstItemPos = (player.INVENTORY, selectedSlotPos)self.__OpenQuestionDialog(TRUE, srcItemPos, dstItemPos)mouseModule.mouseController.DeattachObject()# equip ½½·Ô °ü·Ã ÇÔ¼öµé ³¡.# °æ°íâ °ü·Ãdef __OpenQuestionDialog(self, Equip, srcItemPos, dstItemPos):self.srcItemPos = srcItemPosself.dstItemPos = dstItemPosself.dlgQuestion.SetAcceptEvent(ui.__mem_func__(self.__Accept))self.dlgQuestion.SetCancelEvent(ui.__mem_func__(self.__Cancel))if Equip:self.dlgQuestion.SetText1(locale.DRAGON_SOUL_EQUIP_WARNING1)self.dlgQuestion.SetText2(locale.DRAGON_SOUL_EQUIP_WARNING2)else:self.dlgQuestion.SetText1(locale.DRAGON_SOUL_UNEQUIP_WARNING1)self.dlgQuestion.SetText2(locale.DRAGON_SOUL_UNEQUIP_WARNING2)self.dlgQuestion.Open()def __Accept(self):if (-1, -1) == self.dstItemPos:net.SendItemUsePacket(*srcItemPos)else:self.__SendMoveItemPacket(*(self.srcItemPos + self.dstItemPos + (0,)))self.dlgQuestion.Close()def __Cancel(self):self.srcItemPos = (0, 0)self.dstItemPos = (0, 0)self.dlgQuestion.Close()# °æ°íâ °ü·Ã ³¡def SetDSKindIndex(self, kindIndex):if self.DSKindIndex != kindIndex:self.__HighlightSlot_ClearCurrentPage()self.DSKindIndex = kindIndexfor (tabKey, tabButton) in self.tabButtonDict.items():if kindIndex!=tabKey:tabButton.SetUp()for tabValue in self.tabDict.itervalues():tabValue.Hide()self.tabDict[kindIndex].Show()self.tabText.SetText(DragonSoulWindow.KIND_TAP_TITLES[kindIndex])self.RefreshBagSlotWindow()def SetDeckPage(self, page):if page == self.deckPageIndex:returnif self.isActivated:self.DeactivateDragonSoul()net.SendChatPacket("/dragon_soul deactivate")self.deckPageIndex = pageself.deckTab .Down()self.deckTab[(page+1)%2].SetUp()self.RefreshEquipSlotWindow()# ¿ëÈ¥¼® È°¼ºÈ* °ü·Ãdef ActivateDragonSoulByExtern(self, deck):self.isActivated = TRUEself.activateButton.Down()self.deckPageIndex = deckself.deckTab[deck].Down()self.deckTab[(deck+1)%2].SetUp()self.RefreshEquipSlotWindow()def DeactivateDragonSoul(self):self.isActivated = FALSEself.activateButton.SetUp()def ActivateButtonClick(self):self.isActivated = self.isActivated ^ TRUEif self.isActivated:if self.__CanActivateDeck():net.SendChatPacket("/dragon_soul activate " + str(self.deckPageIndex))else:self.isActivated = FALSEself.activateButton.SetUp()else:net.SendChatPacket("/dragon_soul deactivate")def __CanActivateDeck(self):canActiveNum = 0for i in xrange(6):slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i)itemVnum = player.GetItemIndex(slotNumber)if itemVnum != 0:item.SelectItem(itemVnum)isNoLimit = TRUEfor i in xrange(item.LIMIT_MAX_NUM):(limitType, limitValue) = item.GetLimit(i)# LIMIT_TIMER_BASED_ON_WEAR´Â ¼ÒÄÏ0¿¡ ³²Àº ½Ã°£À» ¹Ú´Â´Ù.# LIMIT_REAL_TIMEÀº ½Ã°£ ´Ù µÇ¸é ¾ÆÀÌÅÛÀÌ »ç¶óÁö¹Ç·Î ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.# LIMIT_REAL_TIME_START_FIRST_USE´Â ¼*¹ö¿¡ Á¦´ë·Î Á¤ÀǵÇÁö ¾Ê¾Æ ÀÏ´Ü ³ÀµĞ´Ù.if item.LIMIT_TIMER_BASED_ON_WEAR == limitType:isNoLimit = FALSEremain_time = player.GetItemMetinSocket(player.INVENTORY, slotNumber, 0)if 0 != remain_time:canActiveNum += 1break# ŸÀ̸Ӱ¡ ¾ø´Ù¸é ActivateÇÒ ¼ö ÀÖ´Â ¿ëÈ¥¼®.if isNoLimit:canActiveNum += 1return canActiveNum &--#62; 0# È°¼ºÈ* °ü·Ã ³¡# ½½·Ô highlight °ü·Ãdef __HighlightSlot_ClearCurrentPage(self):for i in xrange(self.wndItem.GetSlotCount()):slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, i)if slotNumber in self.listHighlightedSlot:self.wndItem.DeactivateSlot(i)self.listHighlightedSlot.remove(slotNumber)def __HighlightSlot_RefreshCurrentPage(self):for i in xrange(self.wndItem.GetSlotCount()):slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, i)if slotNumber in self.listHighlightedSlot:self.wndItem.ActivateSlot(i)def HighlightSlot(self, slot):if not slot in self.listHighlightedSlot:self.listHighlightedSlot.append (slot)# ½½·Ô highlight °ü·Ã ³¡def SetDragonSoulRefineWindow(self, wndDragonSoulRefine):if app.ENABLE_DRAGON_SOUL_SYSTEM:from _weakref import proxyself.wndDragonSoulRefine = proxy(wndDragonSoulRefine)## °*È*ÇÒ ¼ö ¾ø´Â °æ¿ì ³¯¸®´Â ¿¹¿Ü#class DragonSoulRefineException(Exception):#passclass DragonSoulRefineWindow(ui.ScriptWindow):REFINE_TYPE_GRADE, REFINE_TYPE_STEP, REFINE_TYPE_STRENGTH = xrange(3)DS_SUB_HEADER_DIC = {REFINE_TYPE_GRADE : player.DS_SUB_HEADER_DO_UPGRADE,REFINE_TYPE_STEP : player.DS_SUB_HEADER_DO_IMPROVEMENT,REFINE_TYPE_STRENGTH : player.DS_SUB_HEADER_DO_REFINE}REFINE_STONE_SLOT, DRAGON_SOUL_SLOT = xrange(2)INVALID_DRAGON_SOUL_INFO = -1def __init__(self):ui.ScriptWindow.__init__(self)self.tooltipItem = Noneself.sellingSlotNumber = -1self.isLoaded = 0self.refineChoiceButtonDict = Noneself.doRefineButton = Noneself.wndMoney = Noneself.SetWindowName("DragonSoulRefineWindow")self.__LoadWindow()def __del__(self):ui.ScriptWindow.__del__(self)def Show(self):self.__LoadWindow()ui.ScriptWindow.Show(self)def __LoadWindow(self):if self.isLoaded == 1:returnself.isLoaded = 1try:pyScrLoader = ui.PythonScriptLoader()pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "dragonsoulrefinewindow.py")except:import exceptionexception.Abort("dragonsoulrefinewindow.LoadWindow.LoadObject")try:if locale.IsARABIC():self.board = self.GetChild("DragonSoulRefineWindowBaseImage")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)wndRefineSlot = self.GetChild("RefineSlot")wndResultSlot = self.GetChild("ResultSlot")self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))self.refineChoiceButtonDict = {self.REFINE_TYPE_GRADE : self.GetChild("GradeButton"),self.REFINE_TYPE_STEP: self.GetChild("StepButton"),self.REFINE_TYPE_STRENGTH : self.GetChild("StrengthButton"),}self.doRefineButton = self.GetChild("DoRefineButton")self.wndMoney = self.GetChild("Money_Slot")except:import exceptionexception.Abort("DragonSoulRefineWindow.LoadWindow.BindObject")## Item SlotswndRefineSlot.SetOverInItemEvent(ui.__mem_func__(self.__OverInRefineItem))wndRefineSlot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutItem))wndRefineSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.__SelectRefineEmptySlot))wndRefineSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectRefineItemSlot))wndRefineSlot.SetUseSlotEvent(ui.__mem_func__(self.__SelectRefineItemSlot))wndRefineSlot.SetUnselectItemSlotEvent(ui.__mem_func__(self.__SelectRefineItemSlot))wndResultSlot.SetOverInItemEvent(ui.__mem_func__(self.__OverInResultItem))wndResultSlot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutItem))self.wndRefineSlot = wndRefineSlotself.wndResultSlot = wndResultSlot## Buttonself.refineChoiceButtonDict[self.REFINE_TYPE_GRADE].SetToggleDownEvent(self.__ToggleDownGradeButton)self.refineChoiceButtonDict[self.REFINE_TYPE_STEP].SetToggleDownEvent(self.__ToggleDownStepButton)self.refineChoiceButtonDict[self.REFINE_TYPE_STRENGTH].SetToggleDownEvent(self.__ToggleDownStrengthButton)self.refineChoiceButtonDict[self.REFINE_TYPE_GRADE].SetToggleUpEvent(lambda : self.__ToggleUpButton(self.REFINE_TYPE_GRADE))self.refineChoiceButtonDict[self.REFINE_TYPE_STEP].SetToggleUpEvent(lambda : self.__ToggleUpButton(self.REFINE_TYPE_STEP))self.refineChoiceButtonDict[self.REFINE_TYPE_STRENGTH].SetToggleUpEvent(lambda : self.__ToggleUpButton(self.REFINE_TYPE_STRENGTH))self.doRefineButton.SetEvent(self.__PressDoRefineButton)## Dialogself.wndPopupDialog = uiCommon.PopupDialog()self.currentRefineType = self.REFINE_TYPE_GRADEself.refineItemInfo = {}self.resultItemInfo = {}self.currentRecipe = {}self.wndMoney.SetText(locale.NumberToMoneyString(0))self.refineChoiceButtonDict[self.REFINE_TYPE_GRADE].Down()self.__Initialize()def Destroy(self):self.ClearDictionary()self.tooltipItem = Noneself.wndItem = 0self.wndEquip = 0self.activateButton = 0self.questionDialog = Noneself.mallButton = Noneself.inventoryTab = []self.deckTab = []self.equipmentTab = []self.tabDict = Noneself.tabButtonDict = Nonedef Close(self):if None != self.tooltipItem:self.tooltipItem.HideToolTip()self.__FlushRefineItemSlot()player.SendDragonSoulRefine(player.DRAGON_SOUL_REFINE_CLOSE)self.Hide()def Show(self):self.currentRefineType = self.REFINE_TYPE_GRADEself.wndMoney.SetText(locale.NumberToMoneyString(0))self.refineChoiceButtonDict[self.REFINE_TYPE_GRADE].Down()self.refineChoiceButtonDict[self.REFINE_TYPE_STEP].SetUp()self.refineChoiceButtonDict[self.REFINE_TYPE_STRENGTH].SetUp()self.Refresh()ui.ScriptWindow.Show(self)def SetItemToolTip(self, tooltipItem):self.tooltipItem = tooltipItem# ¹öÆ° ´*·Á ÀÖ´Â »óŸ¦ Á¦¿ÜÇÑ ¸ğµç °*È*â °ü·Ã º¯¼öµéÀ» ÃʱâÈ*.def __Initialize(self):self.currentRecipe = {}self.refineItemInfo = {}self.resultItemInfo = {}if self.REFINE_TYPE_STRENGTH == self.currentRefineType:self.refineSlotLockStartIndex = 2else:self.refineSlotLockStartIndex = 1for i in xrange(self.refineSlotLockStartIndex):self.wndRefineSlot.HideSlotBaseImage(i)self.wndMoney.SetText(locale.NumberToMoneyString(0))def __FlushRefineItemSlot(self):## Item slot settings# ¿ø·¡ Àκ¥ÀÇ ¾ÆÀÌÅÛ Ä«¿îÆ® ȸº¹for invenType, invenPos, itemCount in self.refineItemInfo.values():remainCount = player.GetItemCount(invenType, invenPos)player.SetItemCount(invenType, invenPos, remainCount + itemCount)self.__Initialize()def __ToggleUpButton(self, idx):#if self.REFINE_TYPE_GRADE == self.currentRefineType:self.refineChoiceButtonDict[idx].Down()def __ToggleDownGradeButton(self):if self.REFINE_TYPE_GRADE == self.currentRefineType:returnself.refineChoiceButtonDict[self.currentRefineType].SetUp()self.currentRefineType = self.REFINE_TYPE_GRADEself.__FlushRefineItemSlot()self.Refresh()def __ToggleDownStepButton(self):if self.REFINE_TYPE_STEP == self.currentRefineType:returnself.refineChoiceButtonDict[self.currentRefineType].SetUp()self.currentRefineType = self.REFINE_TYPE_STEPself.__FlushRefineItemSlot()self.Refresh()def __ToggleDownStrengthButton(self):if self.REFINE_TYPE_STRENGTH == self.currentRefineType:returnself.refineChoiceButtonDict[self.currentRefineType].SetUp()self.currentRefineType = self.REFINE_TYPE_STRENGTHself.__FlushRefineItemSlot()self.Refresh()def __PopUp(self, message):self.wndPopupDialog.SetText(message)self.wndPopupDialog.Open()def __SetItem(self, (invenType, invenPos), dstSlotIndex, itemCount):if dstSlotIndex &--#62;= self.refineSlotLockStartIndex:return FALSEitemVnum = player.GetItemIndex(invenType, invenPos)maxCount = player.GetItemCount(invenType, invenPos)if itemCount &--#62; maxCount:raise Exception, ("Invalid attachedItemCount(%d). (base pos (%d, %d), base itemCount(%d))" % (itemCount, invenType, invenPos, maxCount))#return FALSE# strength °*È*ÀÏ °æ¿ì, 0¹ø¿£ °*È*¼®, 1¹ø¿£ ¿ëÈ¥¼®À» ³õµµ·Ï °*Á¦ÇÔ.if DragonSoulRefineWindow.REFINE_TYPE_STRENGTH == self.currentRefineType:if self.__IsDragonSoul(itemVnum):dstSlotIndex = 1else:dstSlotIndex = 0# ºó ½½·ÔÀ̾î¾ßÇÔ.if dstSlotIndex in self.refineItemInfo:return FALSE# °*È*â¿¡ ¿Ã¸± ¼ö ÀÖ´Â ¾ÆÀÌÅÛÀÎÁö °Ë»ç.if FALSE == self.__CheckCanRefine(itemVnum):return FALSE# ²ø¾î´Ù ³õÀº ¾ÆÀÌÅÛ Ä«¿îÆ®¸¸Å* ¿ø·¡ ÀÚ¸®ÀÇ ¾ÆÀÌÅÛ Ä«¿îÆ® °¨¼Òplayer.SetItemCount(invenType, invenPos, maxCount - itemCount)self.refineItemInfo[dstSlotIndex] = (invenType, invenPos, itemCount)self.Refresh()return TRUE# °*È* °¡´ÉÇÑ ¾ÆÀÌÅÛÀÎÁö üũ# ¿ëÈ¥¼® °*È*´Â °*È* ·¹½ÃÇǸ¦ Á¤Çسõ°í ½ÃÀÛÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó,# óÀ½¿¡ °*È*â¿¡ ¿Ã¸° ¿ëÈ¥¼®¿¡ ÀÇÇØ °*È* ·¹½ÃÇÇ°¡ °áÁ¤µÈ´Ù.# ±×·¡¼* __CanRefineGrade, __CanRefineStep, __CanRefineStrength ÇÔ¼ö¿¡¼*# °*È* ·¹½ÃÇÇ°¡ ¾ø´Ù¸é(óÀ½ ¿Ã¸®´Â ¾ÆÀÌÅÛÀ̶ó¸é), °*È* ·¹½ÃÇǸ¦ ¼³Á¤ÇØÁÖ´Â ¿ªÇÒµµ ÇÑ´Ù.def __CheckCanRefine(self, vnum):if self.REFINE_TYPE_GRADE == self.currentRefineType:return self.__CanRefineGrade(vnum)elif self.REFINE_TYPE_STEP == self.currentRefineType:return self.__CanRefineStep(vnum)elif self.REFINE_TYPE_STRENGTH == self.currentRefineType:return self.__CanRefineStrength(vnum)else:return FALSEreturn TRUEdef __CanRefineGrade (self, vnum):ds_info = self.__GetDragonSoulTypeInfo(vnum)if DragonSoulRefineWindow.INVALID_DRAGON_SOUL_INFO == ds_info:self.__PopUp(locale.DRAGON_SOUL_IS_NOT_DRAGON_SOUL)return FALSEif self.currentRecipe:ds_type, grade, step, strength = ds_infocur_refine_ds_type, cur_refine_grade, cur_refine_step, cur_refine_strength = self.currentRecipe["ds_info"]if not (cur_refine_ds_type == ds_type and cur_refine_grade == grade):self.__PopUp(locale.DRAGON_SOUL_INVALID_DRAGON_SOUL)return FALSE# °*È* â¿¡ óÀ½ ¾ÆÀÌÅÛÀ» ¿Ã¸®´Â °æ¿ì, °*È* Àç·á¿¡ °üÇÑ Á¤º¸°¡ ¾ø´Ù.# ¿ëÈ¥¼® °*È*°¡, ·¹½ÃÇǸ¦ °¡Áö°í ½ÃÀÛÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, °*È*â¿¡ óÀ½ ¿Ã¸®´Â ¾ÆÀÌÅÛÀÌ ¹«¾ùÀ̳Ŀ¡ µû¶ó,# ¹«¾ùÀ» °*È*ÇÏ°í, Àç·á°¡ ¹«¾ùÀÎÁö(ÀÌÇÏ ·¹½ÃÇÇ)°¡ Á¤ÇØÁø´Ù.# ·¹½ÃÇÇ°¡ ¾ø´Ù¸é, óÀ½ ¿Ã¸° ¾ÆÀÌÅÛÀ̶ó »ı°¢ÇÏ°í, vnumÀ» ¹ÙÅÁÀ¸·Î ·¹½ÃÇǸ¦ ¼ÂÆÃ.else:self.currentRecipe = self.__GetRefineGradeRecipe(vnum)if self.currentRecipe:self.refineSlotLockStartIndex = self.currentRecipe["need_count"]self.wndMoney.SetText(locale.NumberToMoneyString(self.currentRecipe["fee"]))return TRUEelse:# °*È* Á¤º¸ ¼ÂÆÿ¡ ½ÇÆĞÇÏ¸é ¿Ã¸± ¼ö ¾ø´Â ¾ÆÀÌÅÛÀ¸·Î ÆÇ´Ü.self.__PopUp(locale.DRAGON_SOUL_CANNOT_REFINE)return FALSEdef __CanRefineStep (self, vnum):ds_info = self.__GetDragonSoulTypeInfo(vnum)if DragonSoulRefineWindow.INVALID_DRAGON_SOUL_INFO == ds_info:self.__PopUp(locale.DRAGON_SOUL_IS_NOT_DRAGON_SOUL)return FALSEif self.currentRecipe:ds_type, grade, step, strength = ds_infocur_refine_ds_type, cur_refine_grade, cur_refine_step, cur_refine_strength = self.currentRecipe["ds_info"]if not (cur_refine_ds_type == ds_type and cur_refine_grade == grade and cur_refine_step == step):self.__PopUp(locale.DRAGON_SOUL_INVALID_DRAGON_SOUL)return FALSE# °*È* â¿¡ óÀ½ ¾ÆÀÌÅÛÀ» ¿Ã¸®´Â °æ¿ì, Àç·á¿¡ °üÇÑ Á¤º¸°¡ ¾ø´Ù.# ¿ëÈ¥¼® °*È*°¡, ·¹½ÃÇǸ¦ °¡Áö°í ½ÃÀÛÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, °*È*â¿¡ óÀ½ ¿Ã¸®´Â ¾ÆÀÌÅÛÀÌ ¹«¾ùÀ̳Ŀ¡ µû¶ó,# ¹«¾ùÀ» °*È*ÇÏ°í, Àç·á°¡ ¹«¾ùÀÎÁö(ÀÌÇÏ ·¹½ÃÇÇ)°¡ Á¤ÇØÁø´Ù.# ·¹½ÃÇÇ°¡ ¾ø´Ù¸é, óÀ½ ¿Ã¸° ¾ÆÀÌÅÛÀ̶ó »ı°¢ÇÏ°í, vnumÀ» ¹ÙÅÁÀ¸·Î ·¹½ÃÇǸ¦ ¼ÂÆÃ.else:self.currentRecipe = self.__GetRefineStepRecipe(vnum)if self.currentRecipe:self.refineSlotLockStartIndex = self.currentRecipe["need_count"]self.wndMoney.SetText(locale.NumberToMoneyString(self.currentRecipe["fee"]))return TRUEelse:# °*È* Á¤º¸ ¼ÂÆÿ¡ ½ÇÆĞÇÏ¸é ¿Ã¸± ¼ö ¾ø´Â ¾ÆÀÌÅÛÀ¸·Î ÆÇ´Ü.self.__PopUp(locale.DRAGON_SOUL_CANNOT_REFINE)return FALSEdef __CanRefineStrength (self, vnum):# ¿ëÈ¥¼®ÀÎ °æ¿ì, ´õ ÀÌ»ó strength °*È*¸¦ ÇÒ ¼ö ¾ø´ÂÁö üũÇؾßÇÔ.if self.__IsDragonSoul(vnum):ds_type, grade, step, strength = self.__GetDragonSoulTypeInfo(vnum)import dragon_soul_refine_settingsif strength &--#62;= dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["strength_max_table"][grade][step]:self.__PopUp(locale.DRAGON_SOUL_CANNOT_REFINE_MORE)return FALSEelse:return TRUE# strength °*È*ÀÇ °æ¿ì, refine_recipe°¡ ¿ëÈ¥¼®ÀÇ Á¾·ù°¡ ¾Æ´Ñ, °*È*¼®ÀÇ Á¾·ù¿¡ µû¶ó ´Ş¶óÁø´Ù.# µû¶ó¼* ¿ëÈ¥¼®ÀÌ ¾Æ´Ï¶ó¸é,# ÀÌ¹Ì ·¹½ÃÇÇ°¡ ÀÖ´Â °æ¿ì´Â, °*È*¼®ÀÌ °*È*â¿¡ ÀÖ´Ù´Â °ÍÀ̹ǷÎ, return FALSE# ·¹½ÃÇÇ°¡ ¾ø´Â °æ¿ì´Â, °*È*¼®ÀÎÁö È®ÀÎÇÏ°í, ·¹½ÃÇǸ¦ ¼ÂÆÃÇÑ´Ù.else:if self.currentRecipe:self.__PopUp(locale.DRAGON_SOUL_IS_NOT_DRAGON_SOUL)return FALSEelse:refineRecipe = self.__GetRefineStrengthInfo(vnum)if refineRecipe:self.currentRecipe = refineRecipeself.wndMoney.SetText(locale.NumberToMoneyString(self.currentRecipe["fee"]))return TRUEelse:# ·¹½ÃÇǸ¦ ¼ÂÆÃÇÒ ¼ö ¾ø´Â °æ¿ìself.__PopUp(locale.DRAGON_SOUL_NOT_DRAGON_SOUL_REFINE_STONE)return FALSEdef __GetRefineGradeRecipe (self, vnum):ds_type, grade, step, strength = self.__GetDragonSoulTypeInfo(vnum)try:import dragon_soul_refine_settingsreturn {"ds_info" : (ds_type, grade, step, strength),"need_count" : dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["grade_need_count"][grade],"fee" : dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["grade_fee"][grade]}except:return Nonedef __GetRefineStepRecipe (self, vnum):ds_type, grade, step, strength = self.__GetDragonSoulTypeInfo(vnum)try:import dragon_soul_refine_settingsreturn {"ds_info" : (ds_type, grade, step, strength),"need_count" : dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["step_need_count"][step],"fee" : dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["step_fee"][step]}except:return None# strength °*È*ÀÇ °æ¿ì, refineInfo´Â °*È*¼®¿¡ µû¶ó ´Ş¶óÁø´Ù.def __GetRefineStrengthInfo (self, itemVnum):try:# À̳ğÀÇ À§Ä¡¸¦ ¾îÂîÇÏÁö....# °*È*¼®ÀÌ ¾Æ´Ï¸é ¾ÈµÊ.item.SelectItem(itemVnum)if not (item.ITEM_TYPE_MATERIAL == item.GetItemType()and (item.MATERIAL_DS_REFINE_NORMAL &--#60;= item.GetItemSubType() and item.GetItemSubType() &--#60;= item.MATERIAL_DS_REFINE_HOLLY)):return Noneimport dragon_soul_refine_settingsreturn { "fee" : dragon_soul_refine_settings.strength_fee[item.GetItemSubType()] }except:return Nonedef __IsDragonSoul(self, vnum):item.SelectItem(vnum)return item.GetItemType() == item.ITEM_TYPE_DS# ¿ëÈ¥¼® Vnum¿¡ ´ëÇÑ comment# ITEM VNUMÀ» 10¸¸ ÀÚ¸®ºÎÅÍ, FEDCBA¶ó°í ÇÑ´Ù¸é# FE : ¿ëÈ¥¼® Á¾·ù. D : µî±Ş# C : ´Ü°è B : °*È*# A : ¿©¹úÀÇ ¹øÈ£µé...def __GetDragonSoulTypeInfo(self, vnum):if not self.__IsDragonSoul(vnum):return DragonSoulRefineWindow.INVALID_DRAGON_SOUL_INFOds_type = vnum / 10000grade = vnum % 10000 /1000step = vnum % 1000 / 100strength = vnum % 100 / 10return (ds_type, grade, step, strength)def __MakeDragonSoulVnum(self, ds_type, grade, step, strength):return ds_type * 10000 + grade * 1000 + step * 100 + strength * 10## ºó ½½·Ô ¼±Åà Eventdef __SelectRefineEmptySlot(self, selectedSlotPos):try:if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returnif selectedSlotPos &--#62;= self.refineSlotLockStartIndex:returnif mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()mouseModule.mouseController.DeattachObject()if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, locale.MOVE_ITEM_FAILURE_PRIVATE_SHOP)returnattachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if player.INVENTORY == attachedInvenType and player.IsEquipmentSlot(attachedSlotPos):returnif player.INVENTORY != attachedInvenType and player.DRAGON_SOUL_INVENTORY != attachedInvenType:returnif TRUE == self.__SetItem((attachedInvenType, attachedSlotPos), selectedSlotPos, attachedItemCount):self.Refresh()except Exception, e:import dbgdbg.TraceError("Exception : __SelectRefineEmptySlot, %s" % e)# Ŭ¸¯À¸·Î ½½·Ô¿¡¼* »èÁ¦.def __SelectRefineItemSlot(self, selectedSlotPos):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returntry:if not selectedSlotPos in self.refineItemInfo:# »õ·Î¿î ¾ÆÀÌÅÛÀ» °*È*â¿¡ ¿Ã¸®´Â ÀÛ¾÷.if mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()mouseModule.mouseController.DeattachObject()if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)returnattachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if player.INVENTORY == attachedInvenType and player.IsEquipmentSlot(attachedSlotPos):returnif player.INVENTORY != attachedInvenType and player.DRAGON_SOUL_INVENTORY != attachedInvenType:returnself.AutoSetItem((attachedInvenType, attachedSlotPos), 1)returnelif mouseModule.mouseController.isAttached():returnattachedInvenType, attachedSlotPos, attachedItemCount = self.refineItemInfo[selectedSlotPos]selectedItemVnum = player.GetItemIndex(attachedInvenType, attachedSlotPos)# °*È*â¿¡¼* »èÁ¦ ¹× ¿ø·¡ Àκ¥ÀÇ ¾ÆÀÌÅÛ Ä«¿îÆ® ȸº¹invenType, invenPos, itemCount = self.refineItemInfo[selectedSlotPos]remainCount = player.GetItemCount(invenType, invenPos)player.SetItemCount(invenType, invenPos, remainCount + itemCount)del self.refineItemInfo[selectedSlotPos]# °*È*âÀÌ ºñ¾ú´Ù¸é, ÃʱâÈ*if not self.refineItemInfo:self.__Initialize()else:item.SelectItem(selectedItemVnum)# ¾ø¾Ø ¾ÆÀÌÅÛÀÌ °*È*¼®À̾ú´Ù¸é °*È* ·¹Çǽà ÃʱâÈ*if (item.ITEM_TYPE_MATERIAL == item.GetItemType()and (item.MATERIAL_DS_REFINE_NORMAL &--#60;= item.GetItemSubType() and item.GetItemSubType() &--#60;= item.MATERIAL_DS_REFINE_HOLLY)):self.currentRecipe = {}self.wndMoney.SetText(localeInfo.NumberToMoneyString(0))# ¿ëÈ¥¼®À̾ú´Ù¸é,# strength°*È*°¡ ¾Æ´Ñ °æ¿ì, °*È*â¿¡ ´Ù¸¥ ¿ëÈ¥¼®ÀÌ ³²¾ÆÀÖÀ¸¹Ç·Î, ·¹½ÃÇǸ¦ ÃʱâÈ*ÇÏ¸é ¾ÈµÊ.# strength°*È*ÀÇ °æ¿ì, °*È* ·¹½ÃÇÇ´Â °*È*¼®¿¡ Á¾¼ÓµÈ °ÍÀ̹ǷΠ´Ù¸¥ ó¸®ÇÒ ÇÊ¿ä°¡ ¾øÀ½.else:passexcept Exception, e:import dbgdbg.TraceError("Exception : __SelectRefineItemSlot, %s" % e)self.Refresh()def __OverInRefineItem(self, slotIndex):if self.refineItemInfo.has_key(slotIndex):inven_type, inven_pos, item_count = self.refineItemInfo[slotIndex]self.tooltipItem.SetInventoryItem(inven_pos, inven_type)def __OverInResultItem(self, slotIndex):if self.resultItemInfo.has_key(slotIndex):inven_type, inven_pos, item_count = self.resultItemInfo[slotIndex]self.tooltipItem.SetInventoryItem(inven_pos, inven_type)def __OverOutItem(self):if self.tooltipItem:self.tooltipItem.HideToolTip()def __PressDoRefineButton(self):for i in xrange(self.refineSlotLockStartIndex):if not i in self.refineItemInfo:self.wndPopupDialog.SetText(locale.DRAGON_SOUL_NOT_ENOUGH_MATERIAL)self.wndPopupDialog.Open()returnplayer.SendDragonSoulRefine(DragonSoulRefineWindow.DS_SUB_HEADER_DIC[self.currentRefineType], self.refineItemInfo)def OnPressEscapeKey(self):self.Close()return TRUEdef Refresh(self):self.__RefreshRefineItemSlot()self.__ClearResultItemSlot()def __RefreshRefineItemSlot(self):try:for slotPos in xrange(self.wndRefineSlot.GetSlotCount()):self.wndRefineSlot.ClearSlot(slotPos)if slotPos &--#60; self.refineSlotLockStartIndex:# self.refineItemInfo[slotPos]ÀÇ Á¤º¸È®ÀÎ# (½ÇÁ¦·Î ¾ÆÀÌÅÛÀÌ Á¸ÀçÇÏ´ÂÁö È®ÀÎ)# Á¸Àç -&--#62; ¾ÆÀÌÅÛ ¾ÆÀÌÄÜÀ» ½½·Ô¿¡ ¼ÂÆÃ.# ºñÁ¸Àç -&--#62; ¾ÆÀÌÅÛÀÌ ¾øÀ¸¹Ç·Î °*È*â¿¡¼* »èÁ¦.if slotPos in self.refineItemInfo:invenType, invenPos, itemCount = self.refineItemInfo[slotPos]itemVnum = player.GetItemIndex(invenType, invenPos)# if itemVnum:if itemVnum:self.wndRefineSlot.SetItemSlot(slotPos, player.GetItemIndex(invenType, invenPos), itemCount)else:del self.refineItemInfo[slotPos]# ºó ½½·Ô¿¡ reference ¾ÆÀÌÄÜÀ» alpha 0.5·Î ¼ÂÆÃ.if not slotPos in self.refineItemInfo:try:reference_vnum = 0# strength °*È*ÀÏ ¶§´Â,# 0¹ø ½½·Ô¿¡ °*È*¼®À», 1¹ø ½½·Ô¿¡ ¿ëÈ¥¼®À» ³õ´Â´Ù.if DragonSoulRefineWindow.REFINE_TYPE_STRENGTH == self.currentRefineType:if DragonSoulRefineWindow.REFINE_STONE_SLOT == slotPos:reference_vnum = 100300else:reference_vnum = self.__MakeDragonSoulVnum(*self.currentRecipe["ds_info"])if 0 != reference_vnum:item.SelectItem(reference_vnum)itemIcon = item.GetIconImage()(width, height) = item.GetItemSize()self.wndRefineSlot.SetSlot(slotPos, 0, width, height, itemIcon, (1.0, 1.0, 1.0, 0.5))# slot ¿ìÃø ÇÏ´Ü¿¡ ¼ıÀÚ ¶ß¸é ¾È ¿¹»İ...self.wndRefineSlot.SetSlotCount(slotPos, 0)except:pass# refineSlotLockStartIndex º¸´Ù ÀÛÀº ½½·ÔÀº ´İÈù À̹ÌÁö¸¦ º¸¿©ÁÖ¸é ¾ÈµÊ.self.wndRefineSlot.HideSlotBaseImage(slotPos)# slotPos &--#62;= self.refineSlotLockStartIndex:else:# Á¤»óÀûÀÎ °æ¿ì¶ó¸é ÀÌ if¹®¿¡ µé¾î°¥ ÀÏÀº ¾ø°ÚÁö¸¸,# (¾ÖÃÊ¿¡ À妽º°¡ refineSlotLockStartIndex ÀÌ»óÀÎ ½½·Ô¿¡´Â ¾ÆÀÌÅÛÀ» ³ÖÁö ¸øÇÏ°Ô Ç߱⠶§¹®)# Ȥ½Ã ¸ğ¸¦ ¿¡·¯¿¡ ´ëºñÇÔ.if slotPos in self.refineItemInfo:invenType, invenPos, itemCount = self.refineItemInfo[slotPos]remainCount = player.GetItemCount(invenType, invenPos)player.SetItemCount(invenType, invenPos, remainCount + itemCount)del self.refineItemInfo[selectedSlotPos]# refineSlotLockStartIndex ÀÌ»óÀÎ ½½·ÔÀº ´İÈù À̹ÌÁö¸¦ º¸¿©Áà¾ßÇÔ.self.wndRefineSlot.ShowSlotBaseImage(slotPos)# °*È*â¿¡ ¾Æ¹«·± ¾ÆÀÌÅÛÀÌ ¾ø´Ù¸é, ÃʱâÈ*ÇØÁÜ.# À§¿¡¼* Áß°£ Áß°£¿¡ "del self.refineItemInfo[slotPos]"¸¦ Ç߱⠶§¹®¿¡,# ¿©±â¼* Çѹø üũÇØÁà¾ßÇÔ.if not self.refineItemInfo:self.__Initialize()self.wndRefineSlot.RefreshSlot()except Exception, e:import dbgdbg.TraceError("Exception : __RefreshRefineItemSlot, %s" % e)def __GetEmptySlot(self, itemVnum = 0):# STRENGTH °*È*ÀÇ °æ¿ì, ¿ëÈ¥¼® ½½·Ô°ú °*È*¼® ½½·ÔÀÌ ±¸ºĞµÇ¾îÀֱ⠋š¹®¿¡# vnumÀ» ¾Ë¾Æ¾ß ÇÑ´Ù.if DragonSoulRefineWindow.REFINE_TYPE_STRENGTH == self.currentRefineType:if 0 == itemVnum:return -1if self.__IsDragonSoul(itemVnum):if not DragonSoulRefineWindow.DRAGON_SOUL_SLOT in self.refineItemInfo:return DragonSoulRefineWindow.DRAGON_SOUL_SLOTelse:if not DragonSoulRefineWindow.REFINE_STONE_SLOT in self.refineItemInfo:return DragonSoulRefineWindow.REFINE_STONE_SLOTelse:for slotPos in xrange(self.wndRefineSlot.GetSlotCount()):if not slotPos in self.refineItemInfo:return slotPosreturn -1def AutoSetItem(self, (invenType, invenPos), itemCount):itemVnum = player.GetItemIndex(invenType, invenPos)emptySlot = self.__GetEmptySlot(itemVnum)if -1 == emptySlot:returnself.__SetItem((invenType, invenPos), emptySlot, itemCount)def __ClearResultItemSlot(self):self.wndResultSlot.ClearSlot(0)self.resultItemInfo = {}def RefineSucceed(self, inven_type, inven_pos):self.__Initialize()self.Refresh()itemCount = player.GetItemCount(inven_type, inven_pos)if itemCount &--#62; 0:self.resultItemInfo[0] = (inven_type, inven_pos, itemCount)self.wndResultSlot.SetItemSlot(0, player.GetItemIndex(inven_type, inven_pos), itemCount)def RefineFail(self, reason, inven_type, inven_pos):if net.DS_SUB_HEADER_REFINE_ [img]http://cyber-gamers.org/public/style_emoticons/<#EMO_DIR#>/55158.gif[/img]http://cyber-gamers.org/public/style_emoticons/<#EMO_DIR#>/55158.gif[/img] == reason:self.__Initialize()self.Refresh()itemCount = player.GetItemCount(inven_type, inven_pos)if itemCount &--#62; 0:self.resultItemInfo[0] = (inven_type, inven_pos, itemCount)self.wndResultSlot.SetItemSlot(0, player.GetItemIndex(inven_type, inven_pos), itemCount)else:self.Refresh()def SetInventoryWindows(self, wndInventory, wndDragonSoul):self.wndInventory = wndInventoryself.wndDragonSoul = wndDragonSoul Adicionar game.py ## Inventory Suche Add Game.py # END_OF_CUBE Add Game.py onPressKeyDict[app.DIK_I] = lambda : self.interface.ToggleInventoryWindow() e adicioná-lo onPressKeyDict[app.DIK_O] = lambda : self.interface.ToggleDragonSoulWindowWithNoInfo() Add Game.py # UNKNOWN_UPDATE def BINARY_NEW_AddAffect(self, type, pointIdx, value, duration): self.affectShower.BINARY_NEW_AddAffect(type, pointIdx, value, duration) if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type: self.interface.DragonSoulActivate(type - chr.NEW_AFFECT_DRAGON_SOUL_DECK1) elif chr.NEW_AFFECT_DRAGON_SOUL_QUALIFIED == type: self.BINARY_DragonSoulGiveQuilification() def BINARY_NEW_RemoveAffect(self, type, pointIdx): self.affectShower.BINARY_NEW_RemoveAffect(type, pointIdx) if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type: self.interface.DragonSoulDeactivate() Fonte : EPVP Cumprimentos,
  15. 1023 22:00:01009 :: CSoundManager::PlayMusic - Failed to load stream sound : BGM/login_window.mp3 1023 22:00:17148 :: CSoundManager::PlayMusic - Failed to load stream sound : BGM/characterselect.mp3 Acredito que seja algum erro nesses arquivos. Tente altera-los..
  16. Olhem eu presiso que 3 pessoas entre aki e dao like, ou cliquem nas imagens 1 ou 2 entra no facebook ou em outras reds sociais, so entrar no trem que vai abrir e clica na imagen presiso 14 pontos ja tenho 11 pf ajudemhttp://freesteamgifts.com/index.php?id=146746
  17. Ando sem nada pra fazer, e como ficar parado não dá dinheiro, eu vou começar a editar/corrigir server files + cliente. * Funciona assim os interessados me manda PM combinamos o valor e o que vão querer nas files, fazem uma listra de tudo que querem eu faço quando acabar me pagam e eu entrego files se preferirem entrego elas já no dedicado com site, autopatcher já pra abrirem vosso servidor, se preferirem forneço o dedicado também. * Se tiver um servidor quiser corrigir bugs erros, quiser colocar algo novo ou quiser eventos etc, basta me contactar para conversamos e se der faço, o preço é a combinar mais nada caro é mesmo só pra ganhar uns trocos. Não faço nada sem me pagar então não adianta vim com papo assim: "Me passa ai tal coisa que te pago amanhã ou semana que vem" "Me passa ai tal coisa te pago assim que me passar" Mensagens assim nem vou responder. Forma de Pagamento *Paypal *PagSeguro *Transferência Server que já fiz algum trabalho: *GalaxyMT2 skype sinval2020
  18. Vendo pela metade do preço. Steam: Origin: Formas de Pagamento: - Paypal - PagSeguro - Transferência Entrego key apenas depois do pagamento. Cumprimentos.
  19. [*]Server files 100% PT_PT [*]Ficou 9 meses em um servidor e não deu nenhum problema [*]Sem bugs, erros [*]Configuradas pra PVM [*]Últimos Updates do oficial [*]Sistemas Especiais [*]Novos Eventos [*]Sistema de pet com status itens para mesmo etc [*]novas skill passivas [*]sistema de imperador por reino [*]sistema de cubo [*]Missões do Biologo até 96 todas em PT [*]e muito mais... [*]Cliente paras files acompanha Files tem 4 channels, bem estável como disse já esteve 9 meses em servidor dedicado e não apresentou nenhum erro, e os que apresentou foram todos corrigidos. Não tem preço ainda, é mais por ofertas, para saber mais sobre todo conteúdo da mesma basta me adicionar no skype sinval2020 Se não tem interesse em comprar não precisa vim cá nem me add skype para fazer spam. Meios de pagamento : [*]PayPal [*]PaySafeCard [*]Transferência Bancaria
  20. Não precisa de tutorial tem tudo dividido.
  21. Bem ando por ai a tentar desenvolver um servidor porém até hoje só tive desanimo e nunca ganhei nada apenas perdi enorme tempo com isso agora vou abrir uma loja de serviços com preço bom. Perguntas frequentes : O que você faz ? [*] Correção de bugs/erros [*]Proteções básicas cliente [*]Compactação de arquivos dentro do executável [*]Criação de quest [*]Implementação de itens etc, cliente side/server side [*]Faço mais coisas, entre em contato por skype para saberem mais informações Skype : Sinval2020 Meios de Pagamento : Paypal Perguntas frequentes : Mais como vai passar os produtos ou serviços ? [*] Posso fazer tudo via team com um valor mais alto ou posso fazer tudo escrito com preço mais acessível, mais qualquer forma terá suporte pra qualquer problema. Perguntas frequentes : Mais como vamos te pagar e confiar em você ? [*] Já abri um shop anterior quando eu não sabia nada e vendia coisas free, todo mundo tem defeitos mais não sou ladrão, sobre pagamentos não entrego nada antes do pagamento. Cumprimentos Sinval.
  22. Eu tinha comprado para jogar War Z e Day Z, mais no final nunca joguei nada e para não perder o dinheiro queria vender, se eu não me engane paguei 94 reais, vendo por 70Reais/ 25€ por PayPal, posso arrumar outros métodos. Talvez dependendo da situação posso abaixar o preço, conta é minha passo os dados todos tudo certinho nada de rolo. Podem falar cmg por mp, ou skype :sinval2020 Cumprimentos.
  23. Isso aí já é parte do kernel(ant ddos) se não for abrir servidor já acho que não necessita instalar, além de pouco complicado qualquer coisinha dá vários erros, recomendo também usar outros tutoriais para proteção.