Search the Community

Showing results for tags 'mt2 fr python'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Register & Login
    • Register
    • Login
  • Espace Communautaire
    • Funky Emulation
    • Présentations
    • Services
    • Discussions Générales
    • Bureau de la Communauté
    • Espace Premium
  • Emulation & Co
    • Rewrite a Release / Tutorial
    • Suggest a Release / Tutorial
    • The Ideas Box
  • Emulation de jeux
    • RaiderZ
    • Aura Kingdom
    • Metin2
    • Dofus
    • World of Warcraft
    • Minecraft
    • Aion
    • Habbo
    • Voir plus...
  • Espace Divers
  • Internationnal Forum
  • PassionDev's Forum
  • M2Project - Metin2's M2SF
  • M2Project - Metin2's Aide / Questions / Support
  • M2Project - Metin2's Tutoriels & Partages
  • M2Project - Metin2's Suggestions
  • M2Project - Metin2's Report de Bugs

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Nationality


Sexe


Discord


Skype


Biographie


Site


Nombre

 
or  

Found 59 results

  1. Bonjour, Je vous partage un petit tutoriel rédigé par mes soins afin d'installer le système de bonus dans l'inventaire sur les files 2014 (et 2016 by FE). PS : Sur l'image le système est en espagnol mais dans ce tutoriel le système est traduit en français par Eristoff. Point positif : Système fonctionnel une fois adapté. Point négatif : Le bouton "Minimiser" ne fonctionne plus (Ce qui n'est pas très grave). Edit : Le bouton fonctionne ! Voir plus bas dans le tutoriel. Dans un premier temps vous devez vous munir d'un éditeur de texte et de vos fichiers "root" et "local_fr". Dans root : Trouvez et ouvrez le fichier "uiinventory.py" Trouvez ce bout de code : ## Refresh self.SetInventoryPage(0) self.SetEquipmentPage(0) self.RefreshItemSlot() self.RefreshStatus() Le remplacer par : ## Refresh self.SetInventoryPage(0) self.SetEquipmentPage(0) self.RefreshItemSlot() self.RefreshStatus() self.ActualizarBonus() def MinimizarBonus(self): if self.ESTADO_PAGINA_INVENTORY == False: #####Esta parte pertence en volver al estado original al inventory self.GetChild("board").SetSize(176,585) self.GetChild("TitleBar").SetWidth(161) self.GetChild("TitleName").SetPosition(77, 3) self.GetChild("OcultarTabla").SetPosition(161 - 30, 10) self.SetSize(176, 585) self.SetPosition(wndMgr.GetScreenWidth() - 176, wndMgr.GetScreenHeight() - 37 - 585) self.GetChild("Money_Slot").SetPosition(8, 28) #Tabla self.GetChild("txt_info_defenza").Hide() self.ESTADO_PAGINA_INVENTORY = True else: #####Esta parte pertence en volver al estado editado al inventory self.GetChild("board").SetSize(306,585) self.GetChild("TitleBar").SetWidth(161 + 130) self.GetChild("TitleName").SetPosition((161 + 130) / 2, 3) self.GetChild("OcultarTabla").SetPosition(161 + 130 - 30, 10) self.SetSize(306, 585) self.SetPosition(wndMgr.GetScreenWidth() - 176 - 130, wndMgr.GetScreenHeight() - 37 - 585) self.GetChild("Money_Slot").SetPosition(-55, 28) #Tabla self.GetChild("txt_info_defenza").Show() self.ESTADO_PAGINA_INVENTORY = False self.OcultarInfoTable(self.ESTADO_PAGINA_INVENTORY) if self.wndBelt: self.wndBelt.AdjustPositionAndSize() def OcultarInfoTable(self, arg): if arg == True: self.GetChild("txt_info_defenza").Hide() self.GetChild("txt_info_defenza_espada").Hide() self.GetChild("Thin_info_defenza_espada").Hide() self.GetChild("txt_info_defenza_2manos").Hide() self.GetChild("Thin_info_defenza_2manos").Hide() self.GetChild("txt_info_defenza_daga").Hide() self.GetChild("Thin_info_defenza_daga").Hide() self.GetChild("txt_info_defenza_Felcha").Hide() self.GetChild("Thin_info_defenza_Felcha").Hide() self.GetChild("txt_info_defenza_campana").Hide() self.GetChild("Thin_info_defenza_campana").Hide() self.GetChild("txt_info_defenza_fan").Hide() self.GetChild("Thin_info_defenza_fan").Hide() self.GetChild("txt_info_resist_Magia").Hide() self.GetChild("Thin_info_resist_Magia").Hide() self.GetChild("txt_info_resist_veneno").Hide() self.GetChild("Thin_info_resist_veneno").Hide() self.GetChild("txt_info_resist_guerrero").Hide() self.GetChild("Thin_info_resist_guerrero").Hide() self.GetChild("txt_info_resist_ninja").Hide() self.GetChild("Thin_info_resist_ninja").Hide() self.GetChild("txt_info_resist_sura").Hide() self.GetChild("Thin_info_resist_sura").Hide() self.GetChild("txt_info_resist_chaman").Hide() self.GetChild("Thin_info_resist_chaman_").Hide() self.GetChild("txt_info_onfensivo").Hide() self.GetChild("txt_info_criticos").Hide() self.GetChild("Thin_info_criticos").Hide() self.GetChild("txt_info_penetracion").Hide() self.GetChild("Thin_info_penetracion").Hide() self.GetChild("txt_info_danomedia").Hide() self.GetChild("Thin_info_danomedia").Hide() self.GetChild("txt_info_danohabilidad").Hide() self.GetChild("Thin_info_danohabilidad").Hide() self.GetChild("txt_info_fmediohumano").Hide() self.GetChild("Thin_info_fmediohumano").Hide() self.GetChild("txt_info_fnomuerto").Hide() self.GetChild("Thin_info_fnomuerto").Hide() self.GetChild("txt_info_fdemonio").Hide() self.GetChild("Thin_info_fdemonio").Hide() self.GetChild("txt_info_fguerrero").Hide() self.GetChild("Thin_info_fguerrero").Hide() self.GetChild("txt_info_fninja").Hide() self.GetChild("Thin_info_fninja").Hide() self.GetChild("txt_info_fsura").Hide() self.GetChild("Thin_info_fsura").Hide() self.GetChild("txt_info_fcham").Hide() self.GetChild("Thin_info_fcham").Hide() else: self.GetChild("txt_info_defenza").Show() self.GetChild("txt_info_defenza_espada").Show() self.GetChild("Thin_info_defenza_espada").Show() self.GetChild("txt_info_defenza_2manos").Show() self.GetChild("Thin_info_defenza_2manos").Show() self.GetChild("txt_info_defenza_daga").Show() self.GetChild("Thin_info_defenza_daga").Show() self.GetChild("txt_info_defenza_Felcha").Show() self.GetChild("Thin_info_defenza_Felcha").Show() self.GetChild("txt_info_defenza_campana").Show() self.GetChild("Thin_info_defenza_campana").Show() self.GetChild("txt_info_defenza_fan").Show() self.GetChild("Thin_info_defenza_fan").Show() self.GetChild("txt_info_resist_Magia").Show() self.GetChild("Thin_info_resist_Magia").Show() self.GetChild("txt_info_resist_veneno").Show() self.GetChild("Thin_info_resist_veneno").Show() self.GetChild("txt_info_resist_guerrero").Show() self.GetChild("Thin_info_resist_guerrero").Show() self.GetChild("txt_info_resist_ninja").Show() self.GetChild("Thin_info_resist_ninja").Show() self.GetChild("txt_info_resist_sura").Show() self.GetChild("Thin_info_resist_sura").Show() self.GetChild("txt_info_resist_chaman").Show() self.GetChild("Thin_info_resist_chaman_").Show() self.GetChild("txt_info_onfensivo").Show() self.GetChild("txt_info_criticos").Show() self.GetChild("Thin_info_criticos").Show() self.GetChild("txt_info_penetracion").Show() self.GetChild("Thin_info_penetracion").Show() self.GetChild("txt_info_danomedia").Show() self.GetChild("Thin_info_danomedia").Show() self.GetChild("txt_info_danohabilidad").Show() self.GetChild("Thin_info_danohabilidad").Show() self.GetChild("txt_info_fmediohumano").Show() self.GetChild("Thin_info_fmediohumano").Show() self.GetChild("txt_info_fnomuerto").Show() self.GetChild("Thin_info_fnomuerto").Show() self.GetChild("txt_info_fdemonio").Show() self.GetChild("Thin_info_fdemonio").Show() self.GetChild("txt_info_fguerrero").Show() self.GetChild("Thin_info_fguerrero").Show() self.GetChild("txt_info_fninja").Show() self.GetChild("Thin_info_fninja").Show() self.GetChild("txt_info_fsura").Show() self.GetChild("Thin_info_fsura").Show() self.GetChild("txt_info_fcham").Show() self.GetChild("Thin_info_fcham").Show() def ActualizarBonus(self): self.GetChild("bonus_1").SetText(str(player.GetStatus(69))) self.GetChild("bonus_2").SetText(str(player.GetStatus(70))) self.GetChild("bonus_3").SetText(str(player.GetStatus(71))) self.GetChild("bonus_4").SetText(str(player.GetStatus(74))) self.GetChild("bonus_5").SetText(str(player.GetStatus(72))) self.GetChild("bonus_6").SetText(str(player.GetStatus(73))) self.GetChild("bonus_7").SetText(str(player.GetStatus(77))) self.GetChild("bonus_8").SetText(str(player.GetStatus(81))) self.GetChild("bonus_9").SetText(str(player.GetStatus(59))) self.GetChild("bonus_10").SetText(str(player.GetStatus(60))) self.GetChild("bonus_11").SetText(str(player.GetStatus(61))) self.GetChild("bonus_12").SetText(str(player.GetStatus(62))) self.GetChild("bonus_13").SetText(str(player.GetStatus(40))) self.GetChild("bonus_14").SetText(str(player.GetStatus(41))) self.GetChild("bonus_15").SetText(str(player.GetStatus(122))) self.GetChild("bonus_16").SetText(str(player.GetStatus(121))) self.GetChild("bonus_17").SetText(str(player.GetStatus(43))) self.GetChild("bonus_18").SetText(str(player.GetStatus(47))) self.GetChild("bonus_19").SetText(str(player.GetStatus(48))) self.GetChild("bonus_20").SetText(str(player.GetStatus(54))) self.GetChild("bonus_21").SetText(str(player.GetStatus(55))) self.GetChild("bonus_22").SetText(str(player.GetStatus(56))) self.GetChild("bonus_23").SetText(str(player.GetStatus(57))) En suite rendez vous tout tout à la fin et ajoutez : def OnUpdate(self): self.ActualizarBonus() Pour faire fonctionner le bouton "Minimiser" il faut (toujours dans le même fichier) trouver : wndItem = self.GetChild("ItemSlot") wndEquip = self.GetChild("EquipmentSlot") Et ajouter juste en dessous : self.ButonMinimize = self.GetChild2("OcultarTabla") self.ButonMinimize.SetEvent(ui.__mem_func__(self.MinimizarBonus)) Dans locale_fr : Trouvez et ouvrez le fichier "inventorywindow.py" Sélectionnez tout le début jusqu'à la ligne : (Arrêtez votre sélection juste avant cette ligne) ## Equipment Slot Et remplacez par : import uiScriptLocale import item EQUIPMENT_START_INDEX = 180 SPACE_BONUS_INVENTORY = 130 IMAGE_CHELO = "d:/ymir work/ui/public/Parameter_Slot_01.sub" window = { "name" : "InventoryWindow", ## 600 - (width + 오른쪽으로 부터 띄우기 24 px) "x" : SCREEN_WIDTH - 176 - SPACE_BONUS_INVENTORY, "y" : SCREEN_HEIGHT - 37 - 585, "style" : ("movable", "float",), "width" : 176 + SPACE_BONUS_INVENTORY, "height" : 585, "children" : ( ## Inventory, Equipment Slots { "name" : "board", "type" : "board", "style" : ("attach",), "x" : 0, "y" : 0, "width" : 176 + SPACE_BONUS_INVENTORY, "height" : 585, "children" : ( ## Title { "name" : "TitleBar", "type" : "titlebar", "style" : ("attach",), "x" : 8, "y" : 7, "width" : 161 + SPACE_BONUS_INVENTORY, "color" : "yellow", "children" : ( { "name":"TitleName", "type":"text", "x": (161 + SPACE_BONUS_INVENTORY) / 2, "y":3, "text":uiScriptLocale.INVENTORY_TITLE, "text_horizontal_align":"center" }, ), }, ##Ocultar table de bonus { "name" : "OcultarTabla", "type" : "button", "x" : 161 + SPACE_BONUS_INVENTORY - 30, "y" : 10, "default_image" : "d:/ymir work/ui/public/minimize_button_01.sub", "over_image" : "d:/ymir work/ui/public/minimize_button_02.sub", "down_image" : "d:/ymir work/ui/public/minimize_button_03.sub", "tooltip_text" : "Bonus", }, ################################################### ################################################### ################################################### #############Tabla de Bonus @Chelo############ #Bonus de Defenza.......................... { "name" : "txt_info_defenza", "type" : "horizontalbar", "x" : 176 - 7, "y" : 33, "width" : 125, "children" : ( { "name" : "bonus_text_1", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "Defensif", }, ), }, ######################################## { "name" : "txt_info_defenza_espada", "type" : "text", "x" : 176 - 5, "y" : 55, "text" : "Epee:" }, { "name" : "Thin_info_defenza_espada", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 55 - 2, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_1", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ######################################## { "name" : "txt_info_defenza_2manos", "type" : "text", "x" : 176 - 5, "y" : 75, "text" : "Lance:" }, { "name" : "Thin_info_defenza_2manos", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 - 2, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_2", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ######################################## { "name" : "txt_info_defenza_daga", "type" : "text", "x" : 176 - 5, "y" : 75 + 20, "text" : "Dague:" }, { "name" : "Thin_info_defenza_daga", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_3", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ######################################## { "name" : "txt_info_defenza_Felcha", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20, "text" : "Fleche:" }, { "name" : "Thin_info_defenza_Felcha", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_4", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ######################################## { "name" : "txt_info_defenza_campana", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20, "text" : "Gong:" }, { "name" : "Thin_info_defenza_campana", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_5", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ######################################## { "name" : "txt_info_defenza_fan", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20, "text" : "Eventail:" }, { "name" : "Thin_info_defenza_fan", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_6", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ######################################## { "name" : "txt_info_resist_Magia", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20, "text" : "Magie:" }, { "name" : "Thin_info_resist_Magia", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_7", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ######################################## ######################################## { "name" : "txt_info_resist_veneno", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20, "text" : "Poison:" }, { "name" : "Thin_info_resist_veneno", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_8", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ######################################## { "name" : "txt_info_resist_guerrero", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "text" : "Guerrier:" }, { "name" : "Thin_info_resist_guerrero", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_9", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ######################################## { "name" : "txt_info_resist_ninja", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "text" : "Ninja:" }, { "name" : "Thin_info_resist_ninja", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_10", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ######################################## { "name" : "txt_info_resist_sura", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "text" : "Sura:" }, { "name" : "Thin_info_resist_sura", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_11", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ######################################## { "name" : "txt_info_resist_chaman", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "text" : "Shaman:" }, { "name" : "Thin_info_resist_chaman_", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_12", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ################################################### #Bonus de onfensivo.......................... { "name" : "txt_info_onfensivo", "type" : "horizontalbar", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "width" : 125, "children" : ( { "name" : "bonus_text_2", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "Offensif", }, ), }, ######################################## { "name" : "txt_info_criticos", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "text" : "Critique:" }, { "name" : "Thin_info_criticos", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_13", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ################################################### { "name" : "txt_info_penetracion", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "text" : "Percant:" }, { "name" : "Thin_info_penetracion", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_14", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ################################################### { "name" : "txt_info_danomedia", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "text" : "Degats moyen:" }, { "name" : "Thin_info_danomedia", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_15", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ################################################### { "name" : "txt_info_danohabilidad", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "text" : "Degats comp.:" }, { "name" : "Thin_info_danohabilidad", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_16", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ################################################### { "name" : "txt_info_fmediohumano", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "text" : "Demi humains:" }, { "name" : "Thin_info_fmediohumano", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_17", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ################################################### { "name" : "txt_info_fnomuerto", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "text" : "Mort vivant:" }, { "name" : "Thin_info_fnomuerto", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_18", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ################################################### { "name" : "txt_info_fdemonio", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "text" : "Mal:" }, { "name" : "Thin_info_fdemonio", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_19", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ################################################### { "name" : "txt_info_fguerrero", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "text" : "Guerrier:" }, { "name" : "Thin_info_fguerrero", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_20", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ################################################### { "name" : "txt_info_fninja", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "text" : "Ninja:" }, { "name" : "Thin_info_fninja", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_21", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ################################################### { "name" : "txt_info_fsura", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "text" : "Sura:" }, { "name" : "Thin_info_fsura", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_22", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ################################################### { "name" : "txt_info_fcham", "type" : "text", "x" : 176 - 5, "y" : 75 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "text" : "Shaman:" }, { "name" : "Thin_info_fcham", "type" : "image", "x" : 176 + SPACE_BONUS_INVENTORY - 65, "y" : 75 + 20 - 2 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20 + 20, "image" : IMAGE_CHELO, "children" : ( { "name" : "bonus_23", "type" : "text", "x" : 26, "y" : 3, "text" : "999", "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, "text_horizontal_align":"center" }, ), }, ################################################### Et le tour est joué Petite astuce dans Notepad++ si en copiant/collant il vous remplace les tabulations par des espaces : Placez votre curseur là ou devraient être les tabulations, appuyez sur la touche de tabulation et appuyez sur la touche précédent. En faisant cette manip Notepad++ remplacera les espaces par le nombre de tabulation qu'il faut. Ce tutoriel est à présent terminé. Merci d'avoir lu en espérant en aider certains. Source : FreakGamers, et un peu moi ^^
  2. Bonjour, De retour, pour un petit tutoriel encore tout simple. Franchement, quand je ferais des trucs compliqués, les poules auront des dents Dans ce tutoriel on va apprendre à modifier les phrases du genre : L'adversaire est trop loin. Je ne peux pas attaquer l'adversaire d'ici. Qui est la cible ? Vous n’êtes pas autorisé à utiliser, GM dans le nom de votre personnage Je pense que vous aurez compris. Sur ce, on commence maintenant ! 1. Ouvrez EterNexus ou votre programme pour depacker. Vous allez donc dépacker le pack locale-[Votre langue] (ex : local_fr / local_de...) 2. On se rend au bon endroit : Vous allez donc vous rendre dans : Le pack locale-[VotreLangue] ---> locale ---> [VotreLangue] ---> local_game.txt 3. On modifie tout ça !!! Vous devriez donc voir ceci environ : AFF_LOVE_POINT Point d'amour : %d%% ALIGNMENT_NAME Points de grade : ATTACK_ERROR_UNKNOWN Erreur d'attaque inconnue : %s CANNOT_ATTACK_DEST_IN_SAFE L'adversaire est trop loin. CANNOT_ATTACK_SELF_IN_SAFE Je ne peux pas attaquer. CANNOT_EQUIP_IN_EXCHANGE Vous ne pouvez pas changer d'équipement pendant un échange. CANNOT_EQUIP_IN_SHOP Vous ne pouvez pas changer Vous aurez compris je pense le système, mais on ne sait jamais donc je vais vous donner un exemple : De base ceci : CREATE_ERROR_GM_NAME Vous n'êtes pas autorisé à utiliser, GM dans le nom de votre personnage. Changez en ceci : CREATE_ERROR_GM_NAME Désolé, t'as pas le droit, tu laisses le respect chez Funky-Emu stp. Voila le résultat en jeu : Voilà, vous aurez compris le système. N'oubliez pas le retour à la ligne seulement pour démarquer les expressions Bon jeu !
  3. Bonjours à toutes et à tous ! Il ne me semble pas avoir vu ce tuto sur ce forum donc je vais partager la façon d'installer un nouveau bouton sur l'interface IG. Pour l'exemple, je vais utiliser la Bonus Gui en la mettant sur un nouveau bouton à côté de celui de l'inventaire. Bien évidemment on peut adapter ce tuto pour mettre sur le bouton tout autre chose que la bonus gui ! Dans ce tuto nous allons utiliser la Bonus Gui partagée par Cube: [Hidden Content] Commencez par télécharger le script python de la GUI: [Hidden Content] Mettez ce fichier dans votre root. Pour commencer, nous allons ajouter le bouton à l'interface. Dépackez locale_fr puis ouvrez le fichier "taskbar.py" se trouvant dans: depack\locale\fr\ui Dans ce fichier, cherchez ceci: { "name" : "InventoryButton", "type" : "button", "x" : SCREEN_WIDTH - 110, "y" : 3 + Y_ADD_POSITION, "tooltip_text" : uiScriptLocale.TASKBAR_INVENTORY, "default_image" : ROOT + "TaskBar/Inventory_Button_01.sub", "over_image" : ROOT + "TaskBar/Inventory_Button_02.sub", "down_image" : ROOT + "TaskBar/Inventory_Button_03.sub", }, Une fois trouvé, faites un copier/coller de ceci juste en dessous: { "name" : "BonusGui", "type" : "button", "x" : SCREEN_WIDTH - 178, "y" : 3 + Y_ADD_POSITION, "tooltip_text" : "Bonus", "default_image" : ROOT + "TaskBar/Inventory_Button_01.sub", "over_image" : ROOT + "TaskBar/Inventory_Button_02.sub", "down_image" : ROOT + "TaskBar/Inventory_Button_03.sub", }, "tooltip_text" : "Bonus", Ceci veut dire que lorsque vous passez votre curseur sur la case, le texte "Bonus" s'affiche, vous pouvez donc le modifier comme vous le souhaitez "default_image" : ROOT + "TaskBar/Inventory_Button_01.sub", "over_image" : ROOT + "TaskBar/Inventory_Button_02.sub", "down_image" : ROOT + "TaskBar/Inventory_Button_03.sub", Cette partie gère les 3 images composant l'icône, il y a l'image lorsque l'icône est normal, lorsqu'on passe notre curseur sur l'icône est lorsqu'on clic dessus. Pour ce tuto, c'est donc l'icône de l'inventaire, à vous de mettre ce que vous voulez ! "name" : "BonusGui", Ici, mettez le nom de ce que vous ajoutez, vous pouvez entrer ce que vous voulez mais il me paraît logique de mettre le nom de ce qu'on ajoute pour se repérer plus facilement (et que ce soit plus facile pour la suite du tuto). Suivant ce que vous ajoutez, modifiez cette ligne comme bon vous semble mais on en aura besoin pour la suite du tuto. Lorsque vous avez ajouté et modifié comme vous le souhaitez, on va tester si l'icône s'affiche bien. Repackez puis connectez-vous, si vous avez gardé les mêmes coordonnées que dans le tuto, vous aurez un nouvel icône ayant le skin de celui de l'inventaire en bas à droite de votre écran. Lorsque vous cliquez dessus rien ne se passe ? c'est normal, ça se passe dans la suite du tuto ! On passe maintenant au plus "compliqué". Dépackez root et ouvrez le fichier "uitaskbar.py" (attention, ce n'est pas celui qui se trouve dans locale_fr !) Cherchez maintenant la ligne: toggleButtonDict[TaskBar.BUTTON_CHARACTER]=self.GetChild("CharacterButton") Puis collez en dessous ceci: toggleButtonDict[TaskBar.BUTTON_BONUSGUI]=self.GetChild("BonusGui") self.GetChild("BonusGui") Dans ces crochets, veillez à écrire le "name" précédemment ajouté dans le fichier uitaskbar.py du locale_fr. Dans notre cas c'est donc "BonusGui" toggleButtonDict[TaskBar.BUTTON_BONUSGUI] Cette partie est importante ! vous pouvez écrire ce que vous souhaitez, ce sera le nom de la fonction qu'on utilisera plus tard, il faut que ce qu'il y a après "TaskBar." soit écrit EN MAJUSCULE comme dans l'exemple ! Cherchez maintenant: BUTTON_CHAT = 4 On va donner un numéro à cette fonction, ajoutez donc en dessus: BUTTON_BONUSGUI = 5 "BUTTON_BONUSGUI" est le nom de la fonction précédemment ajoutée, celle qu'on a dû écrire en majuscule, veillez à écrire le même nom ! Vous pouvez bien évidemment écrire ce que vous voulez, mais il faut que ce soit le même nom que la fonction qu'on a écrit ici: toggleButtonDict[TaskBar.BUTTON_BONUSGUI]=self.GetChild("BonusGui") Dans root, ouvrez le fichier "interfacemodule.py" puis cherchez: self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_CHAT, ui.__mem_func__(self.ToggleChat)) Et ajoutez en dessous: self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_BONUSGUI, ui.__mem_func__(self.BonusGui)) TaskBar.BUTTON_BONUSGUI À cette ligne vous devez écrire le nom de la fonction (donc "BUTTON_BONUSGUI" si on suit ce tuto à la lettre) (self.BonusGui) Ici c'est "name" se trouvant dans uitaskbar.py dans locale_fr. Veillez à ce qu'il y ai écrit exactement la même chose que dans "name". Maintenant il vous suffit d'ajouter le code que vous souhaitez exécuter lorsqu'on clic sur ce bouton. Je vais donc utiliser le code pour la Bonus Gui. Mettez où vous le souhaitez, pour ma part je l'ai mis au dessus de " def __MakeParty(self): Pour les personnes implantant la bonus gui, ajoutez ceci: def BonusGui(self): import uiBonusPage global BPisLoaded try: if BPisLoaded != 1: exec 'uiBonusPage.BonusBoardDialog().Show()' else: pass except ImportError: import dbg,app dbg.Trace('uiBonusPage.py Importing error') app.Abort() Pour les autres ajoutez VOTRE code. Vous l'aurez sans doute compris, après "def" vous devez écrire le nom inscrit dans "name" dans uitaskbar.py du locale_fr. Pour les personnes implantant quelque chose d'autre que la BonusGui, ce tuto est fini, vous pouvez repack root et tester votre icône ! pour ceux qui implantent la bonus gui du topic de Cube vous avez encore 2-3 choses à faire ! Toujours dans interfacemodule.py, cherchez: IsQBHide = 0 Puis ajoutez en dessous: BPisLoaded = 0 Toujours pour ceux implantant la Bonus Gui, on reprend simplement le topic de Cube, allez dans ui.py puis cherchez ceci: def SetOverVisual(self, filename): Ajoutez ensuite en dessous: ##Bonus def GetText(self): if not self.ButtonText: return# "" return self.ButtonText.GetText() def SetDownVisual(self, filename): wndMgr.SetDownVisual(self.hWnd, filename) N'oubliez pas que le python n'aime pas les espaces ! remplacez donc les espaces par des tabulations et mettez les tabulations aux bons endroits. Ce tuto est maintenant terminé, vous pouvez repack root ! si vous avez des questions n'hésitez pas à les poser dans la section "Aide / Questions / Support" ! Bonne soirée/journée à toutes et à tous !
  4. Salut à tous ! J'ai remarqué qu'il manquait à certains clients un SwitchBot donc j'en ai implanté un et j'ai décidé de le partager avec vous : Screenshots : Installation : Téléchargement : Un p'tit merci si vous avez aimé ! PS : Merci à BakeModz pour adaptation Française !
  5. Plop, Je vous partage l'item shop in game de shang dans sa dernière version v1.3.1 fonctionne parfaitement avec quelques petites retouches sur les files FE 2016 Dl : ICI FE Pour les problèmes et les bugs c'est dans l'A/Q/S Source : Shang
  6. Ce tutoriel a pour but de vous expliquer comment mettre un effet visuel sur berserk. Tous les buffs en ont un, par exemple bénédiction entoure le joueur d'une aura bleutée, berserk est l'exception. 1 -- Pour commencer dépacker le pack root puis ouvrez le fichier playersettingmodule.py vers la ligne 300 vous aurez : chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+16, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse") ajoutez cette ligne là avant : chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+14, "Bip01", "d:/ymir work/pc/warrior/effect/berserk.mse") 2 -- Enregistrez, puis dépackez le pack pc. Il faut rajouter le fichier berserk.mse dans le dossier ymir work/pc/warrior/effect/ si vous n'en avez pas, voici le mien : 3 -- Repackez root et pc puis lancez berserk, vous devriez avoir ça: En espérant vous avoir aidé. Pour toutes questions, rendez-vous dans la catégorie Aide/Questions/Support
  7. Niveau requis : Intermédiaire Temps estimé : 10 minutes Ré-écrit par @Gurgarath Bonjour, Grâce à ce tutoriel, vous pourrez, voir les PV et les PM de votre adversaire lors d'un duel. En contrepartie, il pourra voir les vôtres ! Plus de tricherie possible lors d'un duel grâce à ça Pré-Requis : L'accès au fichier root dépacké Un accès aux files serveur (quêtes) I. Installation (Partie client) II. Installation (Partie serveur -> quêtes) III. Potentielles remarques Source : ElitePvPers Cordialement,
  8. Salut. Ce bouton, vous a jamais soûlé car il marche pas ? : Moi si. Je partage donc vite fait le debug que je fais je ne sais quand. Dans votre intrologin.py: Dans : class LoginWindow(ui.ScriptWindow): Trouvez : def __init__(self, stream): Ajoutez dans la fonction : self.HakConnexionStop = False Allez dans la fonction Close qui se trouve un petit peu plus bas et ajoutez : self.HakConnexionStop = None Cherchez ensuite : def OnConnectFailure(self): Vous aurez dans la fonction : if self.isNowCountDown: return Ajoutez en dessous : if self.HakConnexionStop: self.HakConnexionStop = False return Cherchez : def Connect(self, id, pwd): Vous trouverez : self.stream.popupWindow.Open(localeInfo.LOGIN_CONNETING, localeInfo.UI_CANCEL) Changez cette ligne en : self.stream.popupWindow.Open(localeInfo.LOGIN_CONNETING, self.HakOnConnexionSTOP, localeInfo.UI_CANCEL) Après la fonction, ajoutez : def HakOnConnexionSTOP(self): self.HakConnexionStop = True self.stream.popupWindow.Close() Vous n'avez plus qu'à repack et le bouton marchera. Quand on clique sur le bouton, je n'efface pas les inputs comme pouvait le faire l'erreur de connexion etc. Si c'est nécessaire je peux vous dire comment faire. Code original = Frozen, forum étrangé.
  9. Niveau requis : Intermédiaire Temps estimé : Entre 15 et 30 minutes Réécriture by Xayah Bonjour, Ce système ressemble à celui avec l'affichage des Metins sur la Minimap, cette fois ce sont les Boss qui sont concernés. Pré-requis: Des sources client Votre client Notepadd++ I. Partie Sources Client II. Partie Python Pour continuer: Si vous avez un problème n'hésitez pas à poster vos demandes dans la section AQS !
  10. Niveau requis : Débutant Temps estimé : Entre 10 et 15 minutes Réécriture by Xayah Bonjour, voici un système qui vous permettra d'équiper des stuffs pré-enregistrés dans une fenêtre ! Pré-requis: Cette archive : Téléchargement ou FE Votre client Eternexus I. Tutoriel II. Placer les fichiers Succès ! Vous pouvez désormais profiter pleinement de ce système, Enjoy ! A savoir : Si vous ne savez pas comment utiliser Eternexus, je vous invite à bien lire ce tutoriel : Depack & Repack avec Eternexus Si vous avez un problème, n'hésitez pas à rédiger un sujet dans la section A/Q/S
  11. Niveau requis : Débutant Temps estimé : 15 minutes Réécriture by Xayah Ce tutoriel aura pour but de vous aider à installer le SwitchBot sur votre Client Metin2. Pré-requis : L'archive suivante : ICI ou ICI ou FE I. Installation Pour continuer: Si vous avez un soucis, n'hésitez pas à faire une demande d'aide dans l'AQS
  12. Bonjour ! Je vien aujourd'hui vous partager un système d'effet qui vous permettra d'ajouter des effets à n'importe quel armures ou costumes par un fichier .py Téléchargement : ICIV2 - FEV1 - FEV2 Source : Freakgamer Edit : Ajout du code pour les effets sur les costumes dans le fichier InstanceBase.cpp Si vous avez des soucis avec ce système, je vous demande de poster votre problèmes dans la section Aide / Questions / Support.
  13. Hellow, Je vous partage un petit "systeme ?" pour choisir le skin de son magasin ==> ICI FE Le tuto est dans le dossier , petit screen de ce petit système a l'ouverture d'un magasin : source : turkmmo feat. iRyZz ^_-
  14. Bonjour à tous. Dans ce tutoriel, je vais vous expliquer comment avoir 6 inventaires dans l'entrepôt. Pour ce faire, vous aurez besoin de : -Source client -Source serveur -Votre client SOURCE CLIENT SOURCE SERVEUR CLIENT Voici un aperçu IG: Le tutoriel est à présent terminé, j'espère qu'il vous sera utile. Cordialement. Source: Freakgamers
  15. Bien le bonjour, comme son nom l'indique, je viens vous proposer ce tutoriel détaillé pour modifier votre Selection Empire, sur un serveur files 2014. Tout d'abord il faut télécharger cette archive: ICI FE -Commençons avec le plus simple, il suffit de suivre l'emplacement des dossier. -Pour la modification du selectempirewindow.py, si vous avez un fichier modifier, plutôt que de remplacer le fichier ou que vous n'avez pas envie de chercher, il suffit de modifier comme ceci : Remplacez : ## Alpha { "name" : "Alpha", "type" : "expanded_image", "x" : 0, "y" : 0, "image" : "d:/ymir work/ui/intro/select/background_alpha.sub", "x_scale" : float(SCREEN_WIDTH) / 100.0, "y_scale" : float(SCREEN_HEIGHT) / 69.0, }, Par ceci : ## Alpha { "name" : "Alpha", "type" : "expanded_image", "x" : 0, "y" : 0, "image" : "d:/ymir work/ui/intro/select/background_alpha.sub", "x_scale" : float(SCREEN_WIDTH) / 100.0, "y_scale" : float(SCREEN_HEIGHT) / 69.0, }, { "name" : "bg_A", "type" : "expanded_image", "x" : 0, "y" : 0, "x_scale" : float(SCREEN_WIDTH) / 1024.0, "y_scale" : float(SCREEN_HEIGHT) / 768.0, "image" : "d:/ymir work/ui/intro/select/empire_A.jpg", }, { "name" : "bg_B", "type" : "expanded_image", "x" : 0, "y" : 0, "x_scale" : float(SCREEN_WIDTH) / 1024.0, "y_scale" : float(SCREEN_HEIGHT) / 768.0, "image" : "d:/ymir work/ui/intro/select/empire_B.jpg", }, { "name" : "bg_C", "type" : "expanded_image", "x" : 0, "y" : 0, "x_scale" : float(SCREEN_WIDTH) / 1024.0, "y_scale" : float(SCREEN_HEIGHT) / 768.0, "image" : "d:/ymir work/ui/intro/select/empire_C.jpg", }, Voila pour le selectempirewindow.py. -Concernant le root, modifiez introempire.py et, pareil, remplacer ceci : def __init__(self, stream): print "NEW EMPIRE WINDOW ----------------------------------------------------------------------------" ui.ScriptWindow.__init__(self) net.SetPhaseWindow(net.PHASE_WINDOW_EMPIRE, self) self.stream=stream self.empireID=app.GetRandom(1, 3) self.descIndex=0 self.empireArea = {} self.empireAreaFlag = {} self.empireFlag = {} self.empireAreaButton = {} self.empireAreaCurAlpha = { net.EMPIRE_A:0.0, net.EMPIRE_B:0.0, net.EMPIRE_C:0.0 } self.empireAreaDestAlpha = { net.EMPIRE_A:0.0, net.EMPIRE_B:0.0, net.EMPIRE_C:0.0 } self.empireAreaFlagCurAlpha = { net.EMPIRE_A:0.0, net.EMPIRE_B:0.0, net.EMPIRE_C:0.0 } self.empireAreaFlagDestAlpha = { net.EMPIRE_A:0.0, net.EMPIRE_B:0.0, net.EMPIRE_C:0.0 } self.empireFlagCurAlpha = { net.EMPIRE_A:0.0, net.EMPIRE_B:0.0, net.EMPIRE_C:0.0 } self.empireFlagDestAlpha = { net.EMPIRE_A:0.0, net.EMPIRE_B:0.0, net.EMPIRE_C:0.0 } Par ceci : def __init__(self, stream): print "NEW EMPIRE WINDOW ----------------------------------------------------------------------------" ui.ScriptWindow.__init__(self) net.SetPhaseWindow(net.PHASE_WINDOW_EMPIRE, self) self.stream=stream self.empireID=app.GetRandom(1, 3) self.descIndex=0 self.bg = {} self.empireArea = {} self.empireAreaFlag = {} self.empireFlag = {} self.empireAreaButton = {} self.empireBGCurAlpha = { net.EMPIRE_A:0.0, net.EMPIRE_B:0.0, net.EMPIRE_C:0.0 } self.empireBGDestAlpha = { net.EMPIRE_A:0.0, net.EMPIRE_B:0.0, net.EMPIRE_C:0.0 } self.empireAreaCurAlpha = { net.EMPIRE_A:0.0, net.EMPIRE_B:0.0, net.EMPIRE_C:0.0 } self.empireAreaDestAlpha = { net.EMPIRE_A:0.0, net.EMPIRE_B:0.0, net.EMPIRE_C:0.0 } self.empireAreaFlagCurAlpha = { net.EMPIRE_A:0.0, net.EMPIRE_B:0.0, net.EMPIRE_C:0.0 } self.empireAreaFlagDestAlpha = { net.EMPIRE_A:0.0, net.EMPIRE_B:0.0, net.EMPIRE_C:0.0 } self.empireFlagCurAlpha = { net.EMPIRE_A:0.0, net.EMPIRE_B:0.0, net.EMPIRE_C:0.0 } self.empireFlagDestAlpha = { net.EMPIRE_A:0.0, net.EMPIRE_B:0.0, net.EMPIRE_C:0.0 } -Ensuite cherchez def OnSelectEmpire(self, arg): for key in self.empireArea.keys(): self.empireAreaDestAlpha[key] = 0.0 self.empireAreaFlagDestAlpha[key] = 0.0 self.empireFlagDestAlpha[key] = 0.0 self.empireAreaDestAlpha[arg] = 1.0 self.empireAreaFlagDestAlpha[arg] = 1.0 self.empireFlagDestAlpha[arg] = 1.0 self.empireID = arg et remplacez par : def OnSelectEmpire(self, arg): for key in self.empireArea.keys(): self.empireBGDestAlpha[key] = 0.0 self.empireAreaDestAlpha[key] = 0.0 self.empireAreaFlagDestAlpha[key] = 0.0 self.empireFlagDestAlpha[key] = 0.0 self.empireBGDestAlpha[arg] = 1.0 self.empireAreaDestAlpha[arg] = 1.0 self.empireAreaFlagDestAlpha[arg] = 1.0 self.empireFlagDestAlpha[arg] = 1.0 self.empireID = arg Continuons, cherchez : try: GetObject=self.GetChild self.leftButton = GetObject("left_button") self.rightButton = GetObject("right_button") self.selectButton = GetObject("select_button") self.exitButton = GetObject("exit_button") self.textBoard = GetObject("text_board") self.empireArea[net.EMPIRE_A] = GetObject("EmpireArea_A") self.empireArea[net.EMPIRE_B] = GetObject("EmpireArea_B") self.empireArea[net.EMPIRE_C] = GetObject("EmpireArea_C") self.empireAreaFlag[net.EMPIRE_A] = GetObject("EmpireAreaFlag_A") self.empireAreaFlag[net.EMPIRE_B] = GetObject("EmpireAreaFlag_B") self.empireAreaFlag[net.EMPIRE_C] = GetObject("EmpireAreaFlag_C") self.empireFlag[net.EMPIRE_A] = GetObject("EmpireFlag_A") self.empireFlag[net.EMPIRE_B] = GetObject("EmpireFlag_B") self.empireFlag[net.EMPIRE_C] = GetObject("EmpireFlag_C") GetObject("prev_text_button").SetEvent(ui.__mem_func__(self.PrevDescriptionPage)) GetObject("next_text_button").SetEvent(ui.__mem_func__(self.NextDescriptionPage)) et remplacez par : try: GetObject=self.GetChild self.leftButton = GetObject("left_button") self.rightButton = GetObject("right_button") self.selectButton = GetObject("select_button") self.exitButton = GetObject("exit_button") self.textBoard = GetObject("text_board") self.bg[net.EMPIRE_A] = GetObject("bg_A") self.bg[net.EMPIRE_B] = GetObject("bg_B") self.bg[net.EMPIRE_C] = GetObject("bg_C") self.empireArea[net.EMPIRE_A] = GetObject("EmpireArea_A") self.empireArea[net.EMPIRE_B] = GetObject("EmpireArea_B") self.empireArea[net.EMPIRE_C] = GetObject("EmpireArea_C") self.empireAreaFlag[net.EMPIRE_A] = GetObject("EmpireAreaFlag_A") self.empireAreaFlag[net.EMPIRE_B] = GetObject("EmpireAreaFlag_B") self.empireAreaFlag[net.EMPIRE_C] = GetObject("EmpireAreaFlag_C") self.empireFlag[net.EMPIRE_A] = GetObject("EmpireFlag_A") self.empireFlag[net.EMPIRE_B] = GetObject("EmpireFlag_B") self.empireFlag[net.EMPIRE_C] = GetObject("EmpireFlag_C") GetObject("prev_text_button").SetEvent(ui.__mem_func__(self.PrevDescriptionPage)) GetObject("next_text_button").SetEvent(ui.__mem_func__(self.NextDescriptionPage)) Pour finir il suffit de chercher : def OnUpdate(self): (xposEventSet, yposEventSet) = self.textBoard.GetGlobalPosition() event.UpdateEventSet(self.descIndex, xposEventSet+7, -(yposEventSet+7)) self.descriptionBox.SetIndex(self.descIndex) self.__UpdateAlpha(self.empireArea, self.empireAreaCurAlpha, self.empireAreaDestAlpha) self.__UpdateAlpha(self.empireAreaFlag, self.empireAreaFlagCurAlpha, self.empireAreaFlagDestAlpha) self.__UpdateAlpha(self.empireFlag, self.empireFlagCurAlpha, self.empireFlagDestAlpha) et de rajouter ceci juste en dessous : self.__UpdateAlpha(self.bg, self.empireBGCurAlpha, self.empireBGDestAlpha) Et voila, plus qu'a repacker etc, local_fr et root, petit reboot et vous aurez une jolie selection d'empire, aperçus de mon sp Je sais que le tuto existe, enfin si on peut dire "tuto", mais c'est un peu mode "j'vous le donne et demerdez vous". Au moins là, même les débutants peuvent se débrouiller Amusez vous bien !
  16. Bonjour la communauté! Après avoir été sur Epvp j'ai trouvé un joli système en python. Je vous glisse une aperçu. Pour commencer ouvrez: game.py Recherchez: import ime Ajoutez en dessous: import uisidebar Recherchez: self.__ServerCommand_Build() self.__ProcessPreservedServerCommand() Passer une ligne et ajoutez: self.sideBar = uisidebar.SideBar() self.sideBar.Show() Recherchez: self.KillFocus() app.HideCursor() Passer une ligne et ajoutez: self.sideBar.Destroy() self.sideBar = None Téléchargez-ici FE Bonne journée!
  17. Hello tout le monde, Je vous partage une interface pour votre kill gui. Interface adapté et traduite par moi. Source de base : epvp Aperçu du kill gui : Installation : Pour l'installer il vous faudra suivre le tutoriel de Craven ici : ICI DL : FE L'interface est téléchargeable en pièce jointe. Code optimisé pour cette interface : #START_KILLGUI KillGuiBg = ui.AniImageBox() KillGuiBg.AppendImage("d:/ymir work/ui/blue_killgui_interface.tga") self.KillGuiBg = KillGuiBg self.KillGuiBg.SetPosition(wndMgr.GetScreenWidth()-235,185) self.KillBlauReich = ui.TextLine() self.KillBlauReich.SetDefaultFontName() self.KillBlauReich.SetPosition((wndMgr.GetScreenWidth()-220)+120, 207) self.KillBlauReich.SetText("Bleu Tuer: NaN") self.KillBlauReich.SetOutline() self.KillGelbReich = ui.TextLine() self.KillGelbReich.SetDefaultFontName() self.KillGelbReich.SetPosition((wndMgr.GetScreenWidth()-220)+120, 231) self.KillGelbReich.SetText("Jaune Tuer: NaN") self.KillGelbReich.SetOutline() self.KillRotReich = ui.TextLine() self.KillRotReich.SetDefaultFontName() self.KillRotReich.SetPosition((wndMgr.GetScreenWidth()-220)+120, 253) self.KillRotReich.SetText("Rouge Tuer: NaN") self.KillRotReich.SetOutline() self.KillMob = ui.TextLine() self.KillMob.SetDefaultFontName() self.KillMob.SetPosition((wndMgr.GetScreenWidth()-220)+120, 276) self.KillMob.SetText("Monstre: NaN") self.KillMob.SetOutline() ##END_KILLGUI Have fun ! Emulateur.
  18. Bonjour, Voici un système de blocage identique à celui du FR : Lien : ICI FE Source : metin2dev.org
  19. Bonjour ! C'est un bug tellement répandu que plus personne n'y fait attention pourtant il est là, mais plus pour longtemps Screen : Chez le marchand, le temps restant ne s'affiche pas ! Pourtant, une fois acheté, le temps est correct. Voila ce que vous devez faire : - Dépack root. - Ouvrir uitooltip.py - Cherchez la ligne : def AppendUniqueItemLastTime(self, restMin): vous devriez avoir ça : Voici par quoi vous devez le remplacer : def AppendUniqueItemLastTime(self, restMin): if restMin == 0 and shop.IsOpen() and not shop.IsPrivateShop(): restMin = item.GetValue(0) restSecond = restMin*60 self.AppendSpace(5) self.AppendTextLine(locale.LEFT_TIME + " : " + locale.SecondToHM(restSecond), self.NORMAL_COLOR) def AppendMallItemLastTime(self, endTime): if endTime == 0 and shop.IsOpen() and not shop.IsPrivateShop(): endTime = item.GetValue(0)+app.GetGlobalTimeStamp() leftSec = max(0, endTime - app.GetGlobalTimeStamp()) self.AppendSpace(5) self.AppendTextLine(locale.LEFT_TIME + " : " + locale.SecondToDHM(leftSec), self.NORMAL_COLOR) (attention aux tabulations !) Voici ce que vous devriez avoir : Repackez le root et vérifiez ig : Et voilà ! le tutoriel est terminé ! Bon jeu à tous
  20. Salut à tous, aujourd'hui, je vais vous faire un petit tutoriel sur comment implanter le BonusPage, alors commençons d'abord, téléchargez le fichier suivant : ICI FE Ouvrez votre game.py Cherchez la ligne import chat Ajoutez en dessous import uibonuspage Cherchez la ligne onPressKeyDict[app.DIK_F4] = lambda : self.__PressQuickSlot(7) Ajoutez en dessous onPressKeyDict[app.DIK_U] = lambda : self.__BonusPage() Allez à la fin de votre game.py et ajoutez # Page de bonus def __showbonus(self): import uiBonusPage global bonuspp try: if bonuspp != 1: exec 'uiBonusPage.BonusBoardDialog().Show()' else: pass except ImportError: import dbg,app dbg.Trace('uiBonusPage.py Importing error') app.Abort() def __BonusPage(self): import uibonuspage self.wndBonus = uibonuspage.BonusBoardDialog() self.wndBonus.Show() Enregistrez votre game.py, fermez le et ouvrez ui.py Cherchez la ligne def SetOverVisual(self, filename): wndMgr.SetOverVisual(self.hWnd, filename) Ajoutez en dessous en sautant une ligne # Page de bonus def GetText(self): if not self.ButtonText: return return self.ButtonText.GetText() Voilà, le tutoriel est fini, le BonusPage apparaîtra quand vous appuierez sur la touche U Le BonusPage est totalement traduit en français, il n'y aura donc pas besoin de le traduire Sources : J'ai copié ce système sur le client de Metin2 World Bonne journée !
  21. Bonjour à tous, je partage donc aujourd'hui le système de costume weapon. Je tiens à signialer que celui si bug au niveau des arc et des dagues, en effet, le personnage porte l'arc du mauvais coter, et la dague une seul partie est apparente l'autre c'est la dague normal. Je vous met tout de même deux screen vous montrant les bug Le liens de téléchargement : ICI FE
  22. Plop, je vous partage un système que j'ai trouvé avec l'aide de Franch Chaque grade comporte un grade IMPLEMENTOR = GA HIGH_WIZARD = SGM GOD = GM LOW_WIZARD = MOD Il faudra modifier la partie Source serveur ( tutoriel dans le fichier rar ) Il faudra modifier la partie source client ( tutoriel dans le fichier rar ) Il faudra modifier la partie root.eix Il faudra modifier la partie locale_fr.eix Toute les informations ce trouve dans le fichiers rar, Le partage vient du forum turkmmo l'auteur c'est Suky Voici les screens qui vont avec : Virus Total : ICI Download : ICI FE Mirroir : Yeni Yetkili Tagları.rar J’espère que sa pourra vous intéressé
  23. Carquois de flèche. 1) Qu'est-ce que c'est? 2) Les prérequis. 3) Les téléchargements. 1) Qu'est-ce que c'est? Il existe 4 type de carquois qui ont chacun un temps différent. Durée de 24 Heures. Durée de 7 Jours. Durée de 15 Jours. Durée de 30 Jours. Une carquois c'est un stock de flèche illimité sauf en temps comme indiqué ci-dessus, Les dégâts infligés ne sont pas réduit par la distances. 2) Les prérequis. Sources Client / Server. Un Client. Files. Les fichiers en téléchargement. Votre tête qui encore une fois vous sera utile. 3) Les téléchargements. Cliquez ici FE Sources : Board-Legend LeNn't. Traduction : Moi. Bonne installation. Cordialement, History.
  24. Plop, J'ai vue que certains avait des problèmes avec l'ajout d'effets sur leurs costumes, je vous ai fait un petit tuto rapido :p, bien-sur ce n'est pas la méthode la plus optimisé etc etc mais elle marche. Alors on a besoin des fichiers suivant : InstanceBase.h InstanceBase.cpp playersettingmodule.py Ouvrez votre instanceBase.h (qui est dans vos sources client) Cherchez: EFFECT_BODYARMOR_SPECIAL2, En dessous mettez: EFFECT_BODYCOSTUME, C'est le nom de variable qui va nous servir a attribué un effet a nos costumes !! une variable = un effet !! !! Maintenant mettez votre souris sur la variable EFFECT_BODYCOSTUME vous allez voir un petit message du style: enum CInstanceBase::<unnamed>::EFFECT_BODYCOSTUME =25 retenez bien ce nombre on en aura besoin plus tard !! Enregistrez instanceBase.h on en a plus besoin Ouvrez votre instanceBase.cpp(toujours dans vos sources client) Cherchez: if (pItem->GetSubType() == CItemData::ARMOR_BODY) { m_armorRefineEffect = EFFECT_REFINED+EFFECT_BODYARMOR_REFINED7+refine-7; __AttachEffect(m_armorRefineEffect); } break; Apres le break; revenez a la ligne et collez ce code: case CItemData::ITEM_TYPE_COSTUME: if (pItem->GetSubType() == CItemData::COSTUME_BODY) { DWORD vnum = pItem->GetIndex(); if (41517 == vnum) { __AttachEffect(EFFECT_REFINED + EFFECT_BODYCOSTUME); } } break; De sorte a ce que sa ressemble à ça: if (pItem->GetSubType() == CItemData::ARMOR_BODY) { m_armorRefineEffect = EFFECT_REFINED+EFFECT_BODYARMOR_REFINED7+refine-7; __AttachEffect(m_armorRefineEffect); } break; case CItemData::ITEM_TYPE_COSTUME: if (pItem->GetSubType() == CItemData::COSTUME_BODY) { DWORD vnum = pItem->GetIndex(); if (41517 == vnum) { __AttachEffect(EFFECT_REFINED + EFFECT_BODYCOSTUME); } } break; if (41517 == vnum) veut dire si l'id est égal a 41517(Costume à crocs+) alors on lui attribue un effet ici sa sera effect_refined + notre effet Enregistrez instanceBase.cpp et vous pouvez compilé vos sources client Ensuite on va ouvrir playersettingmodule.py (qui est dans votre dossier root) Cherchez: chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+20, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-4-2-2.mse") En dessous on va coller le code suivant en changeant ""votre nombre"" et ""le chemin de votre effet"" par votre nombre et votre chemin bien-sur : chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED + votre nombre, "Bip01", "d:/ymir work/le chemin de votre effet") votre nombre = le nombre qui c'est affiche au passage de la souris dans notre instanceBase.h le chemin de votre effet = le chemin de votre effet ^^^^^^^^ Ce code renseigne le chemin de l'effet a notre variable Enregistrer, repacker et c'est parti ! Noubliez pas de mettre votre nouveau lanceur ^^ Petite bonus, Pour rajouter plusieurs effet on devra crée plusieurs variable EXEMPLE : EFFECT_BODYCOSTUME, EFFECT_BODYCOSTUME_1, EFFECT_BODYCOSTUME_2, EFFECT_BODYCOSTUME_N, Une variable = un effet Pour rajouter un effet a plusieurs costume EXEMPLE: if (41517 == vnum || 41518 == vnum || 41519 == vnum) { __AttachEffect(EFFECT_REFINED + EFFECT_BODYCOSTUME); } Ou si vous voulez ajouter l'effet a 10 costumes qui se suivent (id parlant) on pourra faire EXEMPLE: if (41517 <= vnum && vnum <= 41530) { __AttachEffect(EFFECT_REFINED + EFFECT_BODYCOSTUME); } Ici tout les costumes de l'id 41517 à 41530 auront l'effet (EFFECT_REFINED + EFFECT_BODYCOSTUME) Pour rajouter plusieurs effet sur un costume EXEMPLE: if (41517 == vnum) { __AttachEffect(EFFECT_REFINED + EFFECT_BODYCOSTUME + EFFECT_BODYCOSTUME_1 + EFFECT_BODYCOSTUME_N); } Et enfin pour finir ajouté plusieurs effet different sur plusieurs costumes different on va répéter notre condition if EXEMPLE: if (41517 == vnum) { __AttachEffect(EFFECT_REFINED + EFFECT_BODYCOSTUME); } if (41555 == vnum) { __AttachEffect(EFFECT_REFINED + EFFECT_BODYCOSTUME_N); } if (41590 == vnum) { __AttachEffect(EFFECT_REFINED + EFFECT_BODYCOSTUME_N); } Voilà maintenant vous pouvez ajouter vos effets sur vos costumes ps : c'est mon premier tuto si y'a des choses mal expliquer ou a modifier dites le moi ps2 : je suis loin d'être expert c++ donc si on peu optimiser ce code dites le moi aussi