Aller au contenu
Top-Metin2.org - Vous êtes à la recherche d'un serveur Metin 2 ? ×
×
×
  • Créer...

herostar34

Retraité
  • Compteur de contenus

    637
  • Inscription

  • Dernière visite

Tout ce qui a été posté par herostar34

  1. herostar34

    Inventorywindow.py

    Bonsoir, A mon avis, avant que mettiez ce design d'inventaire, vous deviez avoir les bonus dans l'inventaire , est ce exact ?
  2. Il faut également ajouter les bonnes base de données
  3. herostar34

    Systems Succés.

    Avec plaisir. Attention ! Lorsque tu feras des copiés collé, mets des tabulations, sinon le client va avoir quelques soucis . Bien amicalement, herostar34.
  4. herostar34

    Systems Succés.

    Bonjour, Le systeme de succes dit aussi ' Systeme d'achèvement " . Voici le lien : /topic/10690-python-lua-achèvement/&highlight=systeme+de+succes Bien amicalement, HeroStar34.
  5. herostar34

    Armes X393

    Image hébergé sur facebook, certe, mais images visible donc ca va !
  6. herostar34

    .tga

    Bonsoir, Euh personnellement, moi je conseil DXTBMP . Logiciel rapide. Fonctionnalités supplémentaires : - Conception d'objets graphiques pour l’embellissement d'une interface de travail. - Possibilité de modifier en quelques clics le design de votre bureau et celui de votre barre de tâches. Bien amicalement, HeroStar34.
  7. herostar34

    Syserr

    Bonsoir, Je pense que le fichier root du client d'Elea contient les bonus dans l'inventaire. Néanmoins, si le fichier uiinventory.py ( compatible pour les bonus dans l'inventaire ) n'est pas présent, une erreure apparait dans le syserr et le client ne se lance pas. Je vous conseil de prendre les fichier root du client 2012 , ceux ci fonctionneront correctement. Bien amicalement, HeroStar34
  8. Alors l'item en effet n'est plus jetable, mais encore échangeable malheureusement. C'est bon emulateur, voici la solution. Pour que l'item ne soit pas jetable on met donc comme valeure dans antiflag : 32768 Pour que li'tem ne soit pas échangeable on met comme valeure dans antiflag : 8192 En sachant que comme valeure par défaut que j'avais dans mon antiflag est : 28 Si on ajoute les 3 on obtient 40988, et l'item n'est ni jetable, ni échangeable. Merci infiniement émulateur pour le coup de pouce. Sujet résolut.
  9. Salut emulateur merci pour ta réponse. Cela signifie que si jai une armure qui a pour flag " 28 " je rajoute la valeure 128, et dans anti flag si j'ai la valeure " exemple : 58 " je rajoute 32768 ? Bien amicalement.
  10. Bonjour à toute la communauté de Funky emulation. Aujourd'hui j'ai un trou total sur un point essentiel que je devrais connaitre, mais bon je ne pense pas à tout . Version des files : 2012 Domaine (Base de données, Core, etc.) : Client Votre niveau (débutant, intermédiaire, avancé) : Avancé Description du problème : Je n'arrive pas à bloquer les items pour qu'ils ne soient ni échangeables ni jetables. Comment reproduire le problème : J'ai essayé de modifié l'antiflag et le flag mais à mon avis il faut mettre une valeure bien pré définit. Recherches et tests effectué : J'ai demandé à d'autres personnes qui sont bien placés dans l'émulation de metin2, mais elles non plus ne se souviennent plus vraiment. Résultat des recherches et tests : Sans succès. Message d'erreur, capture d'écran : Aucunes intéractions aprés modifications de l'item proto du client et du serveur. En postant ma demande d'aide, j'affirme avoir lu et accepté le règlement des demandes d'aides. Je vous joint tout de même les lignes des items que je souhaite qu'ils soient ni échangeable ni vendable : Cliquez Ici
  11. herostar34

    Quête VIP

    Problème résolut par Croko. Merci à vous tous. Sujet résolut.
  12. Inventorywindow.py ( locale/fr/ui ) import uiScriptLocale MIDDLE_VALUE_FILE = "d:/ymir work/ui/public/Parameter_Slot_01.sub" EQUIPMENT_START_INDEX = 90 window = { "name" : "InventoryWindow", ## 600 - (width + ¿À¸¥ÂÊÀ¸·Î ºÎÅÍ ¶ç¿ì±â 24 px) "x" : SCREEN_WIDTH - 124 - 176, "y" : SCREEN_HEIGHT - 37 - 565, "style" : ("movable", "float",), "width" : 176+124, "height" : 565, "children" : ( { "name" : "board", "type" : "board", "style" : ("attach",), "x" : 0, "y" : 0, "width" : 176+124, "height" : 565, "children" : ( ## Title { "name" : "TitleBar", "type" : "titlebar", "style" : ("attach",), "x" : 8, "y" : 7, "width" : 161+124, "color" : "yellow", "children" : ( { "name":"TitleName", "type":"text", "x":77+62, "y":3, "text":uiScriptLocale.INVENTORY_TITLE, "text_horizontal_align":"center" }, ), }, ## Equipment Slot { "name" : "Equipment_Base", "type" : "image", "x" : 10, "y" : 33, "image" : "d:/ymir work/ui/game/windows/equipment_base.sub", "children" : ( { "name" : "EquipmentSlot", "type" : "slot", "x" : 3, "y" : 3, "width" : 150, "height" : 182, "slot" : ( {"index":EQUIPMENT_START_INDEX+0, "x":39, "y":37, "width":32, "height":64}, {"index":EQUIPMENT_START_INDEX+1, "x":39, "y":2, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+2, "x":39, "y":145, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+3, "x":75, "y":67, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+4, "x":3, "y":3, "width":32, "height":96}, {"index":EQUIPMENT_START_INDEX+5, "x":114, "y":84, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+6, "x":114, "y":52, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+7, "x":2, "y":113, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+8, "x":75, "y":113, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+9, "x":114, "y":1, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+10, "x":75, "y":35, "width":32, "height":32}, ), }, ## MallButton { "name" : "MallButton", "type" : "button", "x" : 120, "y" : 150, "tooltip_text" : uiScriptLocale.MALL_TITLE, "default_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_01.tga", "over_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_02.tga", "down_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_03.tga", }, { "name" : "Equipment_Tab_01", "type" : "radio_button", "x" : 86, "y" : 161, "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub", "children" : ( { "name" : "Equipment_Tab_01_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "I", }, ), }, { "name" : "Equipment_Tab_02", "type" : "radio_button", "x" : 86 + 32, "y" : 161, "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub", "children" : ( { "name" : "Equipment_Tab_02_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "II", }, ), }, ), }, ##BonusPageDialog { "name" : "Bonus_Page", "type" : "window", "x" : 166, "y" : 34, "width" : 124, "height" : 565-24, "children" : ( { "name" : "BonusBase1", "type" : "horizontalbar", "x" : 4, "y" : 0, "width" : 120, "children" : ( { "name" : "bonus_text_1", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "Defense", }, ), }, { "name" : "Sword_defence", "type" : "text", "x" : 5, "y" : 1*18, "text" : "Epée:" }, { "name" : "Sword_def", "type" : "window", "x" : 72, "y" : 1*18, "width" : 53, "height" : 19, "children" : ( { "name" : "Sword_def_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Sword_def_Value", "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" : "Twohand_defence", "type" : "text", "x" : 5, "y" : 2*18, "text" : "Deux mains:" }, { "name" : "Twohand_def", "type" : "window", "x" : 72, "y" : 2*18, "width" : 53, "height" : 19, "children" : ( { "name" : "Twohand_def_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Twohand_def_Value", "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" : "Knife_defence", "type" : "text", "x" : 5, "y" : 3*18, "text" : "Dague:" }, { "name" : "Knife_def", "type" : "window", "x" : 72, "y" : 3*18, "width" : 53, "height" : 19, "children" : ( { "name" : "Knife_def_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Knife_def_Value", "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" : "Bow_defence", "type" : "text", "x" : 5, "y" : 4*18, "text" : "Arc:" }, { "name" : "Bow_def", "type" : "window", "x" : 72, "y" : 4*18, "width" : 53, "height" : 19, "children" : ( { "name" : "Bow_def_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Bow_def_Value", "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" : "Bell_defence", "type" : "text", "x" : 5, "y" : 5*18, "text" : "Gong:" }, { "name" : "Bell_def", "type" : "window", "x" : 72, "y" : 5*18, "width" : 53, "height" : 19, "children" : ( { "name" : "Bell_def_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Bell_def_Value", "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" : "Fan_defence", "type" : "text", "x" : 5, "y" : 6*18, "text" : "Eventail:" }, { "name" : "Fan_def", "type" : "window", "x" : 72, "y" : 6*18, "width" : 53, "height" : 19, "children" : ( { "name" : "Fan_def_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Fan_def_Value", "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" : "Magic_defence", "type" : "text", "x" : 5, "y" : 7*18, "text" : "Magie:" }, { "name" : "Magic_def", "type" : "window", "x" : 72, "y" : 7*18, "width" : 53, "height" : 19, "children" : ( { "name" : "Magic_def_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Magic_def_Value", "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" : "Poison_defence", "type" : "text", "x" : 5, "y" : 8*18, "text" : "Poison:" }, { "name" : "Poison_def", "type" : "window", "x" : 72, "y" : 8*18, "width" : 53, "height" : 19, "children" : ( { "name" : "Poison_def_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Poison_def_Value", "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" : "Warrior_defence", "type" : "text", "x" : 5, "y" : 9*18, "text" : "Guerrier:" }, { "name" : "Warrior_def", "type" : "window", "x" : 72, "y" : 9*18, "width" : 53, "height" : 19, "children" : ( { "name" : "Warrior_def_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Warrior_def_Value", "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" : "Assassin_defence", "type" : "text", "x" : 5, "y" : 10*18, "text" : "Ninja:" }, { "name" : "Assassin_def", "type" : "window", "x" : 72, "y" : 10*18, "width" : 53, "height" : 19, "children" : ( { "name" : "Assassin_def_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Assassin_def_Value", "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" : "Sura_defence", "type" : "text", "x" : 5, "y" : 11*18, "text" : "Sura:" }, { "name" : "Sura_def", "type" : "window", "x" : 72, "y" : 11*18, "width" : 53, "height" : 19, "children" : ( { "name" : "Sura_def_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Sura_def_Value", "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" : "Mage_defence", "type" : "text", "x" : 5, "y" : 12*18, "text" : "Shaman:" }, { "name" : "Mage_def", "type" : "window", "x" : 72, "y" : 12*18, "width" : 53, "height" : 19, "children" : ( { "name" : "Mage_def_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Mage_def_Value", "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" : "BonusBase2", "type" : "horizontalbar", "x" : 4, "y" : 235, "width" : 120, "children" : ( { "name" : "bonus_text_1", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "Attaque", }, ), }, { "name" : "Critical_chance", "type" : "text", "x" : 5, "y" : 235+(1*18), "text" : "Critique:" }, { "name" : "Crit", "type" : "window", "x" : 72, "y" : 235+(1*18), "width" : 53, "height" : 19, "children" : ( { "name" : "Crit_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Crit_Value", "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" : "Pierce_chance", "type" : "text", "x" : 5, "y" : 235+(2*18), "text" : "Perçant:" }, { "name" : "Pierce", "type" : "window", "x" : 72, "y" : 235+(2*18), "width" : 53, "height" : 19, "children" : ( { "name" : "Pierce_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Pierce_Value", "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" : "Hit_damage", "type" : "text", "x" : 5, "y" : 235+(3*18), "text" : "Valeur d'att.:" }, { "name" : "Hitdmg", "type" : "window", "x" : 72, "y" : 235+(3*18), "width" : 53, "height" : 19, "children" : ( { "name" : "Hitdmg_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Hitdmg_Value", "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" : "Skill_damage", "type" : "text", "x" : 5, "y" : 235+(4*18), "text" : "Att. magique:" }, { "name" : "Skilldmg", "type" : "window", "x" : 72, "y" : 235+(4*18), "width" : 53, "height" : 19, "children" : ( { "name" : "Skilldmg_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Skilldmg_Value", "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" : "Halfhumans", "type" : "text", "x" : 5, "y" : 235+(5*18), "text" : "Demi-humain:" }, { "name" : "Halfhuman", "type" : "window", "x" : 72, "y" : 235+(5*18), "width" : 53, "height" : 19, "children" : ( { "name" : "Halfhuman_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Halfhuman_Value", "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" : "Undeads", "type" : "text", "x" : 5, "y" : 235+(6*18), "text" : "Mort vivant:" }, { "name" : "Undead", "type" : "window", "x" : 72, "y" : 235+(6*18), "width" : 53, "height" : 19, "children" : ( { "name" : "Undead_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Undead_Value", "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" : "Devil_gegen", "type" : "text", "x" : 5, "y" : 235+(7*18), "text" : "Mail:" }, { "name" : "Devil", "type" : "window", "x" : 72, "y" : 235+(7*18), "width" : 53, "height" : 19, "children" : ( { "name" : "Devil_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Devil_Value", "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" : "Warrior_gegen", "type" : "text", "x" : 5, "y" : 235+(8*18), "text" : "Guerrier:" }, { "name" : "Warrior_str", "type" : "window", "x" : 72, "y" : 235+(8*18), "width" : 53, "height" : 19, "children" : ( { "name" : "Warrior_str_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Warrior_str_Value", "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" : "Assassin_gegen", "type" : "text", "x" : 5, "y" : 235+(9*18), "text" : "Ninja:" }, { "name" : "Assassin_str", "type" : "window", "x" : 72, "y" : 235+(9*18), "width" : 53, "height" : 19, "children" : ( { "name" : "Assassin_str_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Assassin_str_Value", "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" : "Sura_gegen", "type" : "text", "x" : 5, "y" : 235+(10*18), "text" : "Sura:" }, { "name" : "Assassin_str", "type" : "window", "x" : 72, "y" : 235+(10*18), "width" : 53, "height" : 19, "children" : ( { "name" : "Sura_str_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Sura_str_Value", "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" : "Mage_gegen", "type" : "text", "x" : 5, "y" : 235+(11*18), "text" : "Shaman:" }, { "name" : "Mage_str", "type" : "window", "x" : 72, "y" : 235+(11*18), "width" : 53, "height" : 19, "children" : ( { "name" : "Mage_str_Slot", "type" : "image", "x" : 0, "y" : 0, "image" : MIDDLE_VALUE_FILE }, { "name" : "Mage_str_Value", "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" : "CopyRight", "type" : "horizontalbar", "x" : 4, "y" : 470, "width" : 120, "children" : ( { "name" : "(C)", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "© Mt2France", "r" : 0.0, "g" : 1.0, "b" : 0.0, "a" : 1.0, }, ), }, ), }, ##InventoryTabs { "name" : "Inventory_Tab_01", "type" : "radio_button", "x" : 10, "y" : 33 + 191, "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub", "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_1, "children" : ( { "name" : "Inventory_Tab_01_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "I", }, ), }, { "name" : "Inventory_Tab_02", "type" : "radio_button", "x" : 10 + 78, "y" : 33 + 191, "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub", "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_2, "children" : ( { "name" : "Inventory_Tab_02_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "II", }, ), }, ## Item Slot { "name" : "ItemSlot", "type" : "grid_table", "x" : 8, "y" : 246, "start_index" : 0, "x_count" : 5, "y_count" : 9, "x_step" : 32, "y_step" : 32, "image" : "d:/ymir work/ui/public/Slot_Base.sub" }, ## Print { "name":"Money_Slot", "type":"button", "x":8+20, "y":28, # "horizontal_align":"center", "vertical_align":"bottom", "default_image" : "d:/ymir work/ui/public/parameter_slot_05.sub", "over_image" : "d:/ymir work/ui/public/parameter_slot_05.sub", "down_image" : "d:/ymir work/ui/public/parameter_slot_05.sub", "children" : ( { "name":"Money_Icon", "type":"image", "x":-18, "y":2, "image":"d:/ymir work/ui/game/windows/money_icon.sub", }, { "name" : "Money", "type" : "text", "x" : 3, "y" : 3, "horizontal_align" : "right", "text_horizontal_align" : "right", "text" : "123456789", }, ), }, ), }, ), } uiinventory.py ( root ) import ui import player import mouseModule import net import app import snd import item import player import chat import grp import uiScriptLocale import uiRefine import uiAttachMetin import uiPickMoney import uiCommon import uiPrivateShopBuilder # ItemMove disabled when private shop opened import locale import constInfo import ime import background ITEM_MALL_BUTTON_ENABLE = TRUE WARP_SCROLLS = [22011, 22000, 22010] ITEM_FLAG_APPLICABLE = 1 << 14 class InventoryWindow(ui.ScriptWindow): USE_TYPE_TUPLE = ("USE_CLEAN_SOCKET", "USE_CHANGE_ATTRIBUTE", "USE_ADD_ATTRIBUTE", "USE_ADD_ATTRIBUTE2", "USE_ADD_ACCESSORY_SOCKET", "USE_PUT_INTO_ACCESSORY_SOCKET") def __init__(self): ui.ScriptWindow.__init__(self) self.questionDialog = None self.tooltipItem = None self.itemVNum = 0 self.sellingSlotNumber = -1 self.isLoaded = 0 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: return self.isLoaded = 1 try: pyScrLoader = ui.PythonScriptLoader() if ITEM_MALL_BUTTON_ENABLE: pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "InventoryWindow.py") else: pyScrLoader.LoadScriptFile(self, "UIScript/InventoryWindow.py") except: import exception exception.Abort("InventoryWindow.LoadWindow.LoadObject") try: wndItem = self.GetChild("ItemSlot") wndEquip = self.GetChild("EquipmentSlot") self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close)) self.wndMoney = self.GetChild("Money") self.wndMoneySlot = self.GetChild("Money_Slot") self.mallButton = self.GetChild2("MallButton") ##BonusPageDialog self.GetChild("Sword_def_Value").SetText(str(player.GetStatus(69))) self.GetChild("Twohand_def_Value").SetText(str(player.GetStatus(70))) self.GetChild("Knife_def_Value").SetText(str(player.GetStatus(71))) self.GetChild("Bow_def_Value").SetText(str(player.GetStatus(74))) self.GetChild("Bell_def_Value").SetText(str(player.GetStatus(72))) self.GetChild("Fan_def_Value").SetText(str(player.GetStatus(73))) self.GetChild("Magic_def_Value").SetText(str(player.GetStatus(77))) self.GetChild("Poison_def_Value").SetText(str(player.GetStatus(81))) self.GetChild("Warrior_def_Value").SetText(str(player.GetStatus(59))) self.GetChild("Assassin_def_Value").SetText(str(player.GetStatus(60))) self.GetChild("Sura_def_Value").SetText(str(player.GetStatus(61))) self.GetChild("Mage_def_Value").SetText(str(player.GetStatus(62))) self.GetChild("Crit_Value").SetText(str(player.GetStatus(40))) self.GetChild("Pierce_Value").SetText(str(player.GetStatus(41))) self.GetChild("Hitdmg_Value").SetText(str(player.GetStatus(122))) self.GetChild("Skilldmg_Value").SetText(str(player.GetStatus(121))) self.GetChild("Halfhuman_Value").SetText(str(player.GetStatus(43))) self.GetChild("Undead_Value").SetText(str(player.GetStatus(47))) self.GetChild("Devil_Value").SetText(str(player.GetStatus(48))) self.GetChild("Warrior_str_Value").SetText(str(player.GetStatus(54))) self.GetChild("Assassin_str_Value").SetText(str(player.GetStatus(55))) self.GetChild("Sura_str_Value").SetText(str(player.GetStatus(56))) self.GetChild("Mage_str_Value").SetText(str(player.GetStatus(57))) ##BonusPageDialog self.inventoryTab = [] self.inventoryTab.append(self.GetChild("Inventory_Tab_01")) self.inventoryTab.append(self.GetChild("Inventory_Tab_02")) self.equipmentTab = [] self.equipmentTab.append(self.GetChild("Equipment_Tab_01")) self.equipmentTab.append(self.GetChild("Equipment_Tab_02")) except: import exception exception.Abort("InventoryWindow.LoadWindow.BindObject") ## Item wndItem.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot)) wndItem.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot)) wndItem.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot)) wndItem.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot)) wndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem)) wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) ## Equipment wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot)) wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot)) wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot)) wndEquip.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot)) wndEquip.SetOverInItemEvent(ui.__mem_func__(self.OverInItem)) wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) ## PickMoneyDialog dlgPickMoney = uiPickMoney.PickMoneyDialog() dlgPickMoney.LoadDialog() dlgPickMoney.Hide() ## RefineDialog self.refineDialog = uiRefine.RefineDialog() self.refineDialog.Hide() ## AttachMetinDialog self.attachMetinDialog = uiAttachMetin.AttachMetinDialog() self.attachMetinDialog.Hide() ## MoneySlot self.wndMoneySlot.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog)) self.inventoryTab[0].SetEvent(lambda arg=0: self.SetInventoryPage(arg)) self.inventoryTab[1].SetEvent(lambda arg=1: self.SetInventoryPage(arg)) self.inventoryTab[0].Down() self.equipmentTab[0].SetEvent(lambda arg=0: self.SetEquipmentPage(arg)) self.equipmentTab[1].SetEvent(lambda arg=1: self.SetEquipmentPage(arg)) self.equipmentTab[0].Down() self.equipmentTab[0].Hide() self.equipmentTab[1].Hide() self.wndItem = wndItem self.wndEquip = wndEquip self.dlgPickMoney = dlgPickMoney # MallButton if self.mallButton: self.mallButton.SetEvent(ui.__mem_func__(self.ClickMallButton)) ##### ## Refresh self.SetInventoryPage(0) self.SetEquipmentPage(0) self.RefreshItemSlot() self.RefreshStatus() self.RefreshBonus() def Destroy(self): self.ClearDictionary() self.dlgPickMoney.Destroy() self.dlgPickMoney = 0 self.refineDialog.Destroy() self.refineDialog = 0 self.attachMetinDialog.Destroy() self.attachMetinDialog = 0 self.tooltipItem = None self.wndItem = 0 self.wndEquip = 0 self.dlgPickMoney = 0 self.wndMoney = 0 self.wndMoneySlot = 0 self.questionDialog = None self.mallButton = None self.inventoryTab = [] self.equipmentTab = [] def Close(self): if None != self.tooltipItem: self.tooltipItem.HideToolTip() self.OnCloseQuestionDialog() self.dlgPickMoney.Close() self.Hide() def SetInventoryPage(self, page): self.inventoryPageIndex = page self.inventoryTab[1-page].SetUp() self.RefreshBagSlotWindow() def SetEquipmentPage(self, page): self.equipmentPageIndex = page self.equipmentTab[1-page].SetUp() self.RefreshEquipSlotWindow() def ClickMallButton(self): print "click_mall_button" net.SendChatPacket("/click_mall") def OpenPickMoneyDialog(self): if mouseModule.mouseController.isAttached(): attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() if player.SLOT_TYPE_SAFEBOX == mouseModule.mouseController.GetAttachedType(): if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex(): net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount()) snd.PlaySound("sound/ui/money.wav") mouseModule.mouseController.DeattachObject() else: curMoney = player.GetElk() if curMoney <= 0: return self.dlgPickMoney.SetTitleName(locale.PICK_MONEY_TITLE) self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney)) self.dlgPickMoney.Open(curMoney) self.dlgPickMoney.SetMax(7) # Àκ¥Å丮 990000 Á¦ÇÑ ¹ö±× ¼öÁ¤ def OnPickMoney(self, money): mouseModule.mouseController.AttachMoney(self, player.SLOT_TYPE_INVENTORY, money) def OnPickItem(self, count): itemSlotIndex = self.dlgPickMoney.itemGlobalSlotIndex selectedItemVNum = player.GetItemIndex(itemSlotIndex) mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, count) def __InventoryLocalSlotPosToGlobalSlotPos(self, local): if player.IsEquipmentSlot(local): return local return self.inventoryPageIndex*player.INVENTORY_PAGE_SIZE + local ##BonusPageDialog def __LoadRefreshBonus(self): self.RefreshBonus() def RefreshBonus(self): try: self.GetChild("Sword_def_Value").SetText(str(player.GetStatus(69))) self.GetChild("Twohand_def_Value").SetText(str(player.GetStatus(70))) self.GetChild("Knife_def_Value").SetText(str(player.GetStatus(71))) self.GetChild("Bow_def_Value").SetText(str(player.GetStatus(74))) self.GetChild("Bell_def_Value").SetText(str(player.GetStatus(72))) self.GetChild("Fan_def_Value").SetText(str(player.GetStatus(73))) self.GetChild("Magic_def_Value").SetText(str(player.GetStatus(77))) self.GetChild("Poison_def_Value").SetText(str(player.GetStatus(81))) self.GetChild("Warrior_def_Value").SetText(str(player.GetStatus(59))) self.GetChild("Assassin_def_Value").SetText(str(player.GetStatus(60))) self.GetChild("Sura_def_Value").SetText(str(player.GetStatus(61))) self.GetChild("Mage_def_Value").SetText(str(player.GetStatus(62))) self.GetChild("Crit_Value").SetText(str(player.GetStatus(40))) self.GetChild("Pierce_Value").SetText(str(player.GetStatus(41))) self.GetChild("Hitdmg_Value").SetText(str(player.GetStatus(122))) self.GetChild("Skilldmg_Value").SetText(str(player.GetStatus(121))) self.GetChild("Halfhuman_Value").SetText(str(player.GetStatus(43))) self.GetChild("Undead_Value").SetText(str(player.GetStatus(47))) self.GetChild("Devil_Value").SetText(str(player.GetStatus(48))) self.GetChild("Warrior_str_Value").SetText(str(player.GetStatus(54))) self.GetChild("Assassin_str_Value").SetText(str(player.GetStatus(55))) self.GetChild("Sura_str_Value").SetText(str(player.GetStatus(56))) self.GetChild("Mage_str_Value").SetText(str(player.GetStatus(57))) except: import exception exception.Abort("InventoryWindow.RefreshBonus.BindObject") ##BonusPageDialog def RefreshBagSlotWindow(self): getItemVNum=player.GetItemIndex getItemCount=player.GetItemCount setItemVNum=self.wndItem.SetItemSlot for i in xrange(player.INVENTORY_PAGE_SIZE): slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i) itemCount = getItemCount(slotNumber) if itemCount <= 1: itemCount = 0 setItemVNum(i, getItemVNum(slotNumber), itemCount) self.wndItem.RefreshSlot() def RefreshEquipSlotWindow(self): getItemVNum=player.GetItemIndex getItemCount=player.GetItemCount setItemVNum=self.wndEquip.SetItemSlot for i in xrange(player.EQUIPMENT_PAGE_COUNT): slotNumber = player.EQUIPMENT_SLOT_START + i itemCount = getItemCount(slotNumber) if itemCount <= 1: itemCount = 0 setItemVNum(slotNumber, getItemVNum(slotNumber), itemCount) self.wndEquip.RefreshSlot() def RefreshItemSlot(self): self.RefreshBagSlotWindow() self.RefreshEquipSlotWindow() def RefreshStatus(self): money = player.GetElk() self.wndMoney.SetText(locale.NumberToMoneyString(money)) def SetItemToolTip(self, tooltipItem): self.tooltipItem = tooltipItem def SellItem(self): net.SendShopSellPacketNew(self.sellingSlotNumber, self.questionDialog.count) snd.PlaySound("sound/ui/money.wav") self.OnCloseQuestionDialog() def OnDetachMetinFromItem(self): if None == self.questionDialog: return #net.SendItemUseToItemPacket(self.questionDialog.sourcePos, self.questionDialog.targetPos) self.__SendUseItemToItemPacket(self.questionDialog.sourcePos, self.questionDialog.targetPos) self.OnCloseQuestionDialog() def OnCloseQuestionDialog(self): if self.questionDialog: self.questionDialog.Close() self.questionDialog = None ## Slot Event def SelectEmptySlot(self, selectedSlotPos): if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1: return selectedSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(selectedSlotPos) if mouseModule.mouseController.isAttached(): attachedSlotType = mouseModule.mouseController.GetAttachedType() attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() attachedItemCount = mouseModule.mouseController.GetAttachedItemCount() attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex() if player.SLOT_TYPE_INVENTORY == attachedSlotType: itemCount = player.GetItemCount(attachedSlotPos) attachedCount = mouseModule.mouseController.GetAttachedItemCount() self.__SendMoveItemPacket(attachedSlotPos, selectedSlotPos, attachedCount) if item.IsRefineScroll(attachedItemIndex): self.wndItem.SetUseMode(FALSE) elif 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, selectedSlotPos) elif player.SLOT_TYPE_MALL == attachedSlotType: net.SendMallCheckoutPacket(attachedSlotPos, selectedSlotPos) mouseModule.mouseController.DeattachObject() def SelectItemSlot(self, itemSlotIndex): if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1: return itemSlotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(itemSlotIndex) if mouseModule.mouseController.isAttached(): attachedSlotType = mouseModule.mouseController.GetAttachedType() attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() attachedItemVID = mouseModule.mouseController.GetAttachedItemIndex() if player.SLOT_TYPE_INVENTORY == attachedSlotType: self.__DropSrcItemToDestItemInInventory(attachedItemVID, attachedSlotPos, itemSlotIndex) mouseModule.mouseController.DeattachObject() else: curCursorNum = app.GetCursor() if app.SELL == curCursorNum: self.__SellItem(itemSlotIndex) elif app.BUY == curCursorNum: chat.AppendChat(chat.CHAT_TYPE_INFO, locale.SHOP_BUY_INFO) elif app.IsPressed(app.DIK_LALT): link = player.GetItemLink(itemSlotIndex) ime.PasteString(link) elif app.IsPressed(app.DIK_LSHIFT): itemCount = player.GetItemCount(itemSlotIndex) if itemCount > 1: self.dlgPickMoney.SetTitleName(locale.PICK_ITEM_TITLE) self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickItem)) self.dlgPickMoney.Open(itemCount) self.dlgPickMoney.itemGlobalSlotIndex = itemSlotIndex #else: #selectedItemVNum = player.GetItemIndex(itemSlotIndex) #mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum) elif app.IsPressed(app.DIK_LCONTROL): itemIndex = player.GetItemIndex(itemSlotIndex) if TRUE == item.CanAddToQuickSlotItem(itemIndex): player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_INVENTORY, itemSlotIndex) else: chat.AppendChat(chat.CHAT_TYPE_INFO, locale.QUICKSLOT_REGISTER_DISABLE_ITEM) else: selectedItemVNum = player.GetItemIndex(itemSlotIndex) itemCount = player.GetItemCount(itemSlotIndex) mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, itemCount) if self.__IsUsableItemToItem(selectedItemVNum, itemSlotIndex): self.wndItem.SetUseMode(TRUE) else: self.wndItem.SetUseMode(FALSE) snd.PlaySound("sound/ui/pick.wav") def __DropSrcItemToDestItemInInventory(self, srcItemVID, srcItemSlotPos, dstItemSlotPos): if srcItemSlotPos == dstItemSlotPos: return if item.IsRefineScroll(srcItemVID): self.RefineItem(srcItemSlotPos, dstItemSlotPos) self.wndItem.SetUseMode(FALSE) elif item.IsMetin(srcItemVID): self.AttachMetinToItem(srcItemSlotPos, dstItemSlotPos) elif item.IsDetachScroll(srcItemVID): self.DetachMetinFromItem(srcItemSlotPos, dstItemSlotPos) elif item.IsKey(srcItemVID): self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos) elif (player.GetItemFlags(srcItemSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE: self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos) elif item.GetUseType(srcItemVID) in self.USE_TYPE_TUPLE: self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos) else: #snd.PlaySound("sound/ui/drop.wav") ## À̵¿½ÃŲ °÷ÀÌ ÀåÂø ½½·ÔÀÏ °æ¿ì ¾ÆÀÌÅÛÀ» »ç¿ëÇؼ­ ÀåÂø ½ÃŲ´Ù - [levites] if player.IsEquipmentSlot(dstItemSlotPos): ## µé°í ÀÖ´Â ¾ÆÀÌÅÛÀÌ ÀåºñÀ϶§¸¸ if item.IsEquipmentVID(srcItemVID): self.__UseItem(srcItemSlotPos) else: self.__SendMoveItemPacket(srcItemSlotPos, dstItemSlotPos, 0) #net.SendItemMovePacket(srcItemSlotPos, dstItemSlotPos, 0) def __SellItem(self, itemSlotPos): if not player.IsEquipmentSlot(itemSlotPos): self.sellingSlotNumber = itemSlotPos itemIndex = player.GetItemIndex(itemSlotPos) itemCount = player.GetItemCount(itemSlotPos) item.SelectItem(itemIndex) itemPrice = item.GetISellItemPrice() if item.Is1GoldItem(): itemPrice = itemCount / itemPrice / 5 else: itemPrice = itemPrice * itemCount / 5 item.GetItemName(itemIndex) itemName = item.GetItemName() self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText(locale.DO_YOU_SELL_ITEM(itemName, itemCount, itemPrice)) self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.SellItem)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog)) self.questionDialog.Open() self.questionDialog.count = itemCount def RefineItem(self, scrollSlotPos, targetSlotPos): scrollIndex = player.GetItemIndex(scrollSlotPos) targetIndex = player.GetItemIndex(targetSlotPos) if player.REFINE_OK != player.CanRefine(scrollIndex, targetSlotPos): return ########################################################### self.__SendUseItemToItemPacket(scrollSlotPos, targetSlotPos) #net.SendItemUseToItemPacket(scrollSlotPos, targetSlotPos) return ########################################################### ########################################################### #net.SendRequestRefineInfoPacket(targetSlotPos) #return ########################################################### result = player.CanRefine(scrollIndex, targetSlotPos) if player.REFINE_ALREADY_MAX_SOCKET_COUNT == result: #snd.PlaySound("sound/ui/jaeryun_fail.wav") chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_MORE_SOCKET) elif player.REFINE_NEED_MORE_GOOD_SCROLL == result: #snd.PlaySound("sound/ui/jaeryun_fail.wav") chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NEED_BETTER_SCROLL) elif player.REFINE_CANT_MAKE_SOCKET_ITEM == result: #snd.PlaySound("sound/ui/jaeryun_fail.wav") chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_SOCKET_DISABLE_ITEM) elif player.REFINE_NOT_NEXT_GRADE_ITEM == result: #snd.PlaySound("sound/ui/jaeryun_fail.wav") chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_UPGRADE_DISABLE_ITEM) elif player.REFINE_CANT_REFINE_METIN_TO_EQUIPMENT == result: chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_EQUIP_ITEM) if player.REFINE_OK != result: return self.refineDialog.Open(scrollSlotPos, targetSlotPos) def DetachMetinFromItem(self, scrollSlotPos, targetSlotPos): scrollIndex = player.GetItemIndex(scrollSlotPos) targetIndex = player.GetItemIndex(targetSlotPos) if not player.CanDetach(scrollIndex, targetSlotPos): chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_METIN_INSEPARABLE_ITEM) return self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText(locale.REFINE_DO_YOU_SEPARATE_METIN) self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.OnDetachMetinFromItem)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog)) self.questionDialog.Open() self.questionDialog.sourcePos = scrollSlotPos self.questionDialog.targetPos = targetSlotPos def AttachMetinToItem(self, metinSlotPos, targetSlotPos): metinIndex = player.GetItemIndex(metinSlotPos) targetIndex = player.GetItemIndex(targetSlotPos) item.SelectItem(metinIndex) itemName = item.GetItemName() result = player.CanAttachMetin(metinIndex, targetSlotPos) if player.ATTACH_METIN_NOT_MATCHABLE_ITEM == result: chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_CAN_NOT_ATTACH(itemName)) if player.ATTACH_METIN_NO_MATCHABLE_SOCKET == result: chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_SOCKET(itemName)) elif player.ATTACH_METIN_NOT_EXIST_GOLD_SOCKET == result: chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_GOLD_SOCKET(itemName)) elif player.ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT == result: chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_EQUIP_ITEM) if player.ATTACH_METIN_OK != result: return self.attachMetinDialog.Open(metinSlotPos, targetSlotPos) def OverOutItem(self): self.wndItem.SetUsableItem(FALSE) if None != self.tooltipItem: self.tooltipItem.HideToolTip() def OverInItem(self, overSlotPos): overSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(overSlotPos) self.wndItem.SetUsableItem(FALSE) if mouseModule.mouseController.isAttached(): attachedItemType = mouseModule.mouseController.GetAttachedType() if player.SLOT_TYPE_INVENTORY == attachedItemType: attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() attachedItemVNum = mouseModule.mouseController.GetAttachedItemIndex() if self.__CanUseSrcItemToDstItem(attachedItemVNum, attachedSlotPos, overSlotPos): self.wndItem.SetUsableItem(TRUE) self.ShowToolTip(overSlotPos) return self.ShowToolTip(overSlotPos) def __IsUsableItemToItem(self, srcItemVNum, srcSlotPos): "´Ù¸¥ ¾ÆÀÌÅÛ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¾ÆÀÌÅÛÀΰ¡?" if item.IsRefineScroll(srcItemVNum): return TRUE elif item.IsMetin(srcItemVNum): return TRUE elif item.IsDetachScroll(srcItemVNum): return TRUE elif item.IsKey(srcItemVNum): return TRUE elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE: return TRUE else: if item.GetUseType(srcItemVNum) in self.USE_TYPE_TUPLE: return TRUE return FALSE def __CanUseSrcItemToDstItem(self, srcItemVNum, srcSlotPos, dstSlotPos): "´ë»ó ¾ÆÀÌÅÛ¿¡ »ç¿ëÇÒ ¼ö Àִ°¡?" if srcSlotPos == dstSlotPos: return FALSE if item.IsRefineScroll(srcItemVNum): if player.REFINE_OK == player.CanRefine(srcItemVNum, dstSlotPos): return TRUE elif item.IsMetin(srcItemVNum): if player.ATTACH_METIN_OK == player.CanAttachMetin(srcItemVNum, dstSlotPos): return TRUE elif item.IsDetachScroll(srcItemVNum): if player.DETACH_METIN_OK == player.CanDetach(srcItemVNum, dstSlotPos): return TRUE elif item.IsKey(srcItemVNum): if player.CanUnlock(srcItemVNum, dstSlotPos): return TRUE elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE: return TRUE else: useType=item.GetUseType(srcItemVNum) if "USE_CLEAN_SOCKET" == useType: if self.__CanCleanBrokenMetinStone(dstSlotPos): return TRUE elif "USE_CHANGE_ATTRIBUTE" == useType: if self.__CanChangeItemAttrList(dstSlotPos): return TRUE elif "USE_ADD_ATTRIBUTE" == useType: if self.__CanAddItemAttr(dstSlotPos): return TRUE elif "USE_ADD_ATTRIBUTE2" == useType: if self.__CanAddItemAttr(dstSlotPos): return TRUE elif "USE_ADD_ACCESSORY_SOCKET" == useType: if self.__CanAddAccessorySocket(dstSlotPos): return TRUE elif "USE_PUT_INTO_ACCESSORY_SOCKET" == useType: if self.__CanPutAccessorySocket(dstSlotPos, srcItemVNum): return TRUE; return FALSE def __CanCleanBrokenMetinStone(self, dstSlotPos): dstItemVNum = player.GetItemIndex(dstSlotPos) if dstItemVNum == 0: return FALSE item.SelectItem(dstItemVNum) if item.ITEM_TYPE_WEAPON != item.GetItemType(): return FALSE for i in xrange(player.METIN_SOCKET_MAX_NUM): if player.GetItemMetinSocket(dstSlotPos, i) == constInfo.ERROR_METIN_STONE: return TRUE return FALSE def __CanChangeItemAttrList(self, dstSlotPos): dstItemVNum = player.GetItemIndex(dstSlotPos) if dstItemVNum == 0: return FALSE item.SelectItem(dstItemVNum) if not item.GetItemType() in (item.ITEM_TYPE_WEAPON, item.ITEM_TYPE_ARMOR): return FALSE for i in xrange(player.METIN_SOCKET_MAX_NUM): if player.GetItemAttribute(dstSlotPos, i) != 0: return TRUE return FALSE def __CanPutAccessorySocket(self, dstSlotPos, mtrlVnum): dstItemVNum = player.GetItemIndex(dstSlotPos) if dstItemVNum == 0: return FALSE item.SelectItem(dstItemVNum) if item.GetItemType() != item.ITEM_TYPE_ARMOR: return FALSE if not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR): return FALSE curCount = player.GetItemMetinSocket(dstSlotPos, 0) maxCount = player.GetItemMetinSocket(dstSlotPos, 1) if mtrlVnum != constInfo.GET_ACCESSORY_MATERIAL_VNUM(dstItemVNum, item.GetItemSubType()): return FALSE if curCount>=maxCount: return FALSE return TRUE def __CanAddAccessorySocket(self, dstSlotPos): dstItemVNum = player.GetItemIndex(dstSlotPos) if dstItemVNum == 0: return FALSE item.SelectItem(dstItemVNum) if item.GetItemType() != item.ITEM_TYPE_ARMOR: return FALSE if not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR): return FALSE curCount = player.GetItemMetinSocket(dstSlotPos, 0) maxCount = player.GetItemMetinSocket(dstSlotPos, 1) ACCESSORY_SOCKET_MAX_SIZE = 3 if maxCount >= ACCESSORY_SOCKET_MAX_SIZE: return FALSE return TRUE def __CanAddItemAttr(self, dstSlotPos): dstItemVNum = player.GetItemIndex(dstSlotPos) if dstItemVNum == 0: return FALSE item.SelectItem(dstItemVNum) if not item.GetItemType() in (item.ITEM_TYPE_WEAPON, item.ITEM_TYPE_ARMOR): return FALSE attrCount = 0 for i in xrange(player.METIN_SOCKET_MAX_NUM): if player.GetItemAttribute(dstSlotPos, i) != 0: attrCount += 1 if attrCount<4: return TRUE return FALSE def ShowToolTip(self, slotIndex): if None != self.tooltipItem: self.tooltipItem.SetInventoryItem(slotIndex) def OnTop(self): if None != self.tooltipItem: self.tooltipItem.SetTop() def OnPressEscapeKey(self): self.Close() return TRUE def UseItemSlot(self, slotIndex): if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS(): return slotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(slotIndex) self.__UseItem(slotIndex) mouseModule.mouseController.DeattachObject() self.OverOutItem() def __UseItem(self, slotIndex): ItemVNum = player.GetItemIndex(slotIndex) item.SelectItem(ItemVNum) if item.IsFlag(item.ITEM_FLAG_CONFIRM_WHEN_USE): self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText(locale.INVENTORY_REALLY_USE_ITEM) self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.__UseItemQuestionDialog_OnAccept)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.__UseItemQuestionDialog_OnCancel)) self.questionDialog.Open() self.questionDialog.slotIndex = slotIndex else: self.__SendUseItemPacket(slotIndex) #net.SendItemUsePacket(slotIndex) def __UseItemQuestionDialog_OnCancel(self): self.OnCloseQuestionDialog() def __UseItemQuestionDialog_OnAccept(self): self.__SendUseItemPacket(self.questionDialog.slotIndex) if self.questionDialog: self.questionDialog.Close() self.questionDialog = None def __SendUseItemToItemPacket(self, srcSlotPos, dstSlotPos): # °³ÀλóÁ¡ ¿­°í ÀÖ´Â µ¿¾È ¾ÆÀÌÅÛ »ç¿ë ¹æÁö if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, locale.USE_ITEM_FAILURE_PRIVATE_SHOP) return net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos) def __SendUseItemPacket(self, slotPos): # °³ÀλóÁ¡ ¿­°í ÀÖ´Â µ¿¾È ¾ÆÀÌÅÛ »ç¿ë ¹æÁö if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, locale.USE_ITEM_FAILURE_PRIVATE_SHOP) return ## WARP_SCROLL_BLOCK # Atlasinfo.txt szerint kell megadni a map neveket! itemVNum = player.GetItemIndex(slotPos) if itemVNum in WARP_SCROLLS: MapName = str(background.GetCurrentMapName()) if MapName == "season1/metin2_map_oxevent" or MapName =="metin2_map_deviltower1" or MapName == "metin2_map_t1" or MapName == "metin2_map_t2" or MapName == "metin2_map_t3": chat.AppendChat(chat.CHAT_TYPE_INFO, "Ezen a területen nem használatod a Visszaszállító tekercset!") return TRUE ## END_OF_WARP_SCROLL_BLOCK net.SendItemUsePacket(slotPos) def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount): # °³ÀλóÁ¡ ¿­°í ÀÖ´Â µ¿¾È ¾ÆÀÌÅÛ »ç¿ë ¹æÁö if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, locale.MOVE_ITEM_FAILURE_PRIVATE_SHOP) return net.SendItemMovePacket(srcSlotPos, dstSlotPos, srcItemCount) ##BonusPageDialog def OnUpdate(self): if self.isLoaded == 1: self.__LoadRefreshBonus() ##BonusPageDialog
  13. J'approuve, fonctionnel et beau rendu sur le jeu ! Merci beaucoup, point de réputation.
  14. herostar34

    Arme

    Maintenant, que j'y pense, a la fin de l'item_list vous avez pensé à laisser un espace vide ? Aussi, sur mt2 repacker, avez vous pensé à faire " Modifer, Actualiser ( sélectionner ou y a les + en vert ) , Ajouter, enregistrer " ? Dans le cas ou ca ne fonctionnerait pas, ajoutez moi sur skype : rapdancemusic Ca me semble vraiment bizarre que les armes ne marchent pas alors qu'elles ne présentent aucun bug technique. Bien cordialement.
  15. herostar34

    Quête VIP

    Peu importe pour les ressources, Je cherche tout de même a faire cette quête car je ne sais pas comment la faire..
  16. herostar34

    Arme

    Bonsoir guii59, Quel est l'arme que vous avez voulut implanter ? Si vous avez un lien de téléchargement ou un autre lien, ce sera plus facile de vous aider. Bien cordialement.
  17. herostar34

    Quête VIP

    Ca ne fonctionne pas malheureusement, Je rappels qu'un personne [VIP] a les insignes [VIP] devant son personnage. Il faudrait que cette quête fasse l'effet cité ci - dessous : - Si le joueur a les crochets [VIP] devant son personnage, on autorise l'accés a un magasin - Si le joueur n'a pas les crochets [VIP] devant son pseudo, on interdit l'accés au magasin par un message de type : say_reward(" Désolé, vous n'êtes pas VIP blablabla") Bien cordialement.
  18. Bonsoir, Je vous écrit ce soir, car je viens de penser qu'un système VIP c'est bien de l'avoir, mais pourquoi payer plus pour n'avoir uniquement les crochets [VIP] ainsi qu'un logo au dessus de sa tête ? Aucun intérêt. C'est par la présente occasion, que je vous écrite pour vous demander, si il est possible que vous me réalisiez une quête plus ou moins difficile pour certains d'entre vous. Personnellement je n'ai pas eu d'idées sur le comment rédiger la quête. Voici les détails : Une quête qui permettrait seulement aux joueurs qui ont l'insigne [VIP] à accéder à certaines maps, ainsi qu'à certains magasins. Merci pour votre éventuelle aide, A trés bientot.
  19. La source se demande poliement. Poste édité.
  20. De rien, avec plaisir x)
  21. Oui j'ai compris grace a Sparkk, merci à lui.
  22. Centre de Téléchargement Télécharger ( Interne ) Bonsoir. Je viens de faire des trouvailles sympathique sur epvp. --------------------- QUETES -------------------- Le but de cette quête : Vous détruisez n'importe quel metin, ce qui fait que vous récoltez des éclats de metins ( des points , un peu comme le systeme de succès ). Ces éclats de Metin sont échangeables au pnj que vous souhaitez utiliser. Je n'ai pas testé cette quête n'ayant pas encore renouvellé mon dédié, cependant elle m'a l'air fonctionnelle. quest metines_logros begin state start begin when kill with not npc.is_pc() begin local metin = { [8001] = {1,"Metin"}, -- id de la metin,splitterid,nom de la metin [8002] = {1,"Metin"}, [8003] = {2,"Metin"}, [8004] = {2,"Metin"}, [8005] = {3,"Metin"}, [8006] = {3,"Metin"}, [8007] = {3,"Metin"}, [8008] = {4,"Metin}, [8009] = {4,"Metin"}, [8010] = {5,"Metin"}, [8011] = {5,"Metin"}, [8012] = {6,"Metin"}, [8013] = {6,"Metin"}, [8014] = {8,"Metin"}, [8024] = {10,"Metin"}, [8025] = {11,"Metin"}, [8026] = {12,"Metin"}, [8027] = {13,"Metin"} } pc.give_item2("27003",metin[npc.get_race()][1]) -- mettre l'id des eclats de metin devant 27003 chat("Tu as détruit une "..metin[npc.get_race()][2]..", tu obtiens "..metin[npc.get_race()][1].." eclats de metin") end when 20012.chat."Echanger Eclats Metin" begin say_title("Echanger Eclats de Metin") say("") say("Salut "..pc.get_name().." ici tu vas pouvoir faire des echanges.") say("Tu peux le faire en detruisant toutes les metins") say("") say("Chaque metin vous donnera une quantité différentes") say("Vous avez maintenant "..pc.count_item("27003").." Eclat de metin") -- id eclats de metin say("") say("Qu'est ce que tu veux faire ??") say("") local canj = select ("Echanger Eclats Metin" , "Fermer") if canj == 1 then say_size(350,355) say_title("Echanger Eclats Metin") say("") local elegir = select("Item1","Item2","Item3","Item4","Item5","Item6","Item7","Annuler") -- prix noms local premios = { {27002,1,27003,1}, -- prix id,prix montant,id eclat,nombre d'eclats {27002,5,27003,2}, {27002,10,27003,3}, {27002,15,27003,4}, {27002,50,27003,5}, {27002,100,27003,6}, {27002,200,27003,7} } if elegir != 8 then if pc.count_item(premios[elegir][3]) < premios[elegir][4] then say_title("Echanger Eclats Metin") say("") say("Je suis desole, mais vous n'avez pas assez") say("d'eclats pour acheter cet item.") say("") say("Vous devez en avoir "..premios[elegir][4]-pc.count_item(premios[elegir][3]).." plus pour l'obtenir") say("Revenez plus tard lorsque vous aurez ce qu'il faut") say("") return end pc.give_item2(premios[elegir][1],premios[elegir][2]) pc.remove_item(premios[elegir][3],premios[elegir][4]) end end end end end Si vous ne savez pas implanter une quête, suivez ce tutoriel : ici
  23. D'accord, Alors premièrement je vous conseil d'utilisez les Files 2012, ceux ci sont largement plus stables, et vous bénéficierez d'un client stable et traduit avec des bugs minimes. Suivez les instructions rédigées par Elea /topic/10681-installer-les-server-files-2012/ Bien cordialement.
  24. Bonsoir, Tout d'abord avant de vous donner des informations utiles pour résoudre votre problème, j'aurais besoin de ces informations : - Êtes vous en files 2012 ? - Quel client utilisez vous ?
  25. Bonsoir, Tout d'abord merci de nous dire qui héberge votre serveur dédié, peut etre qu'aprés ca je pourrais vous en dire plus. Ca évitera de partir sur de mauvaise pistes.

Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.