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

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'metin2'.

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Metin2 Dev
    • Annonces
  • Communauté
    • Taverne d'Octavio
    • Vie des Royaumes
    • Présentations
    • Metin2
  • Serveurs Privés
    • Serveurs Privés
  • Assistance
    • Questions & Réponses
    • Demandes de fichiers
  • Tutoriels & Ressources
    • Création & Gestion de Serveur
    • Guides
    • Binaires
    • Programmation & Développement / Codes
    • Développement Web & Scripts
    • Outils
    • Cartes
    • Quêtes
    • Modèles 3D
    • Graphismes 2D
    • Files - 2012
    • Inclassable
  • Commerce
    • Ventes & Services
    • Recherches
  • Spécial
    • Corbeille
    • Archives
    • Metin2 Download

Groupes du produit

  • Advertisements
  • Advertisements - Pack

Rechercher les résultats dans…

Rechercher les résultats qui contiennent…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


Pilori


Commerce


Serveur Privé


Genre


Pays


Nationalité


Github


Gitlab


Discord


Skype


Site Internet

  1. Version des Files : 2014 calypso Bonjour à tous cela fait un moment que je n'ose pas poster un message d'aide, 1. Description du dysfonctionnement / Question : Alors voilà depuis 1 semaine j'essaie de passer mon serveur local en serveur dédié j'ai acheté un serveur dédié sous Kimsufi Je vous explique tout en details J'ai suivis le tuto: J'ai donc ajouté mes files et là j'ai eu de nombreux problèmes avec les libs + erreur " tmp mysql.sock" qui m'a fallu reinstaller complet le serveur FreeBSD car la solution ne fonctionne pas: pwd_mkdb -p /etc/master.passwd chown -R mysql /var/db/mysql && chgrp -R mysql /var/db/mysql + ce problème: AsyncSQL: connected to localhost (reconnect 1) Success ACCOUNT AsyncSQL: connected to localhost (reconnect 1) Success COMMON AsyncSQL: connected to localhost (reconnect 1) Success HOTBACKUP Donc j'ai recommencé tout à zéro et repris de nouvelles files 2014 cette fois ci les files de calypso. De nouveau des problèmes de manques de libs puis erreur "tmp mysql.sock" après avoir mis les libs j'ajoute les libs dans /usr/lib lib32 libexec libdata Je decompresse mon fichier mysql.tar.gz que j'ai fait avec mon serveur local dans /var/db/ avec la commande tar xvf mysql.tar.gz J'ai bien refait les fichiers CONFIG de tout les core de chaque channel + auth + game99 avec changement du DB PORT et changement identifiant mot de passe J'ai accès à Navicat + WINSCP avant l'erreur "tmp mysql.sock" puis après plus aucun accès. Le serveur ne demarre pas... J'ai relancé une réinstallation complète files calypso + ajout libs + refait les fichiers CONFIG + decompression fichier mysql.tar.gz l'extraction me donne une erreur " voir screen" Et là je relance encore un sh start.sh et j'ai un acces denied....LocaleService locale/france/locale_string.txt j'ajout un screen pour ça 2. SysErr ( Client / Server ) / SysLog ( Server ) Je peux vous fournir mes syserr et syslog mais de quel fichier ? game99 ? auth ? 3. Screenshots ? [Hidden Content] [Hidden Content] [Hidden Content] Merci à vous, Cordialement
  2. Version des Files : 2016 Saejin Bonjour a tous J'ai une petite question en ce beau dimanche matin Je voudrais savoir comment je fais avec les fichier src client et server pour les installé correctement J'ai vu que faut les compiler mais comment cela marche svp Merci d'avance et a quoi sert la compilation exactement Merci à tous, Cordialement
  3. Version des Files :Turc mustang Hello à tous, 1. Description du dysfonctionnement / Question : Je vous explique mon petit soucisJe n'arrive pas a lancer le .exe après compilation je ne vois pas tu tout d'ou sa peut venir car il n'y pas d'erreur a la compilation tout se compile parfaitement. je place donc metin2distribute.exe dans mon client mais a l'execution rien ne se passe Merci à tous, Cordialement
  4. Version des Files : 2014- Hello à tous, je vien vers vous car j'ai remarquer que mon soins ne soigne pas et n'enléve pas le poison .. je sais plus quoi faire Merci à tous, Cordialement
  5. Yo bonjour! Alors après avoir créé une map avec WorldEdit Remix, je m'attarde maintenant avec les PNJs. Je doit en effet en placer quelques uns mais un nouveau problème s'est posé. J'ai fait mes recherches et suis tombé sur ce thread qui explique comment les ajouter : Cependant même en loadant les bons fichiers (je précise que le dossier npc est dans le dossier ymir work), les PNJs n'apparaissent pas dans la fenêtre ni sur la map. C'est un peut compliqué à expliqué mais à la place de la photo qui suit, moi j'ai rien en loadant un PNJ. (Screen pas de moi, mais du thread précédemment donné) Voilà voilà, merci pour votre éventuelle aide!
  6. Version des Files : XXX Hello à tous, 1. Description du dysfonctionnement / Question : Apres l'implantation du switchbot je reste bloquer sur la fin du telechargement 2. SysErr ( Client / Server ) / SysLog ( Server ) Voici les erreur dans le syserr client 0524 08:59:40132 :: Traceback (most recent call last): 0524 08:59:40132 :: File "networkModule.py", line 245, in SetGamePhase 0524 08:59:40132 :: File "system.py", line 131, in __pack_import 0524 08:59:40132 :: File "system.py", line 110, in _process_result 0524 08:59:40132 :: File "game.py", line 28, in <module> 0524 08:59:40132 :: File "system.py", line 138, in __pack_import 0524 08:59:40132 :: ImportError 0524 08:59:40132 :: : 0524 08:59:40132 :: No module named uisidebar .. Merci à tous, Cordialement
  7. Version des Files : xxx Bonjour à tous, 1. Description du dysfonctionnement / Question : Le client ne reconnait pas les fichiers avec des majuscules (que ce soit le nom du fichier, l'extension, ou le texte à l'intérieur du fichier) exemple .GR2 = aucun modèle IG et .gr2 = fonctionnel. J'ai implanté pas mal de mobs/modèles batis / objets etc... et certains ne sont pas reconnus à cause de cette erreur... 2. SysErr ( Client / Server ) / SysLog ( Server ) Aucun. 3. Comment le reproduire ? XXX 4. Screenshots ? Merci Cordialement,
  8. Version des Files : 2014- Hello à tous, j'ai voulus commencer a faire bénédiction d'empire avec mes propres icones ect enfin bref … j'ai implanter la quêtes et celle-ci me mais une erreur si vous avez une idée ? Merci à tous, Cordialement
  9. romlo523

    Patcheur

    Version des Files : XXX Hello à tous, Alors j'explique ayant subit plusieurs arnaque j'avais quand même reçu un patcheur mais que je n'arrive pas a installer si une personne a 10 minute a m'accorder pour le faire avec moi et m'expliquer ça serait super cool de votre part .. je suis parti sur des files vierge sans rien et comme on es 2 j'aimerai qu'il puisse avoir la moindre mise a jours que j'effectue ^^ discord : Natsu#9539 Merci à tous, Cordialement
  10. Version des Files : Ephelion Hello à tous, Je suis sûr les files ephelion mais malheureusement j'ai énormément de mal à comprendre l'installation de celle ci sa fait 1 semaine que je cherche à les installer mais en vain si quelqu'un saurait me renseignée s'il vous plais car je ne comprend pas l'architecture des fichier serveur Merci à tous, Cordialement
  11. Version des Files : XXX Hello à tous, 1. Description du dysfonctionnement / Question : je n'arrive aucunement a me connecter sur un compte tout fraichement crée et je pense ne faire aucune erreur coté BDD je suis sous files 2018 starfoul 2. SysErr ( Client / Server ) / SysLog ( Server ) Si vous avez un syserr ou un syslog, fournissez les nous dans une balise révélation / spoiler ! Des informations peuvent être présente pour vous aider... 3. Comment le reproduire ? XXX 4. Screenshots ? Selon les cas, une image vaut plus que mile mots... Merci à tous, Cordialement
  12. Bloods

    Dev mt2

    Cherche un dev pour serveur mt2 mp sur discord Blood#9145
  13. Version des Files : 2016 Hello à tous, 1. Description du dysfonctionnement / Question : J'ai un problème avec mon switchbot que j'ai téléchargé ici. Quand je met plus de trois items à switch ça fait crash le serveur. Quelqu'un aurait une idée de la raison pour laquelle ça arrive ? 2. SysErr ( Client ) 0514 15:44:44148 :: Traceback (most recent call last): 0514 15:44:44148 :: File "ui.py", line 1462, in OnToggleDown 0514 15:44:44148 :: File "switchbot.py", line 128, in Activate 0514 15:44:44148 :: AttributeError 0514 15:44:44148 :: : 0514 15:44:44148 :: 'int' object has no attribute 'gameWindow' 0514 15:44:44148 :: 0514 15:45:12698 :: Traceback (most recent call last): 0514 15:45:12698 :: File "ui.py", line 1462, in OnToggleDown 0514 15:45:12698 :: File "switchbot.py", line 128, in Activate 0514 15:45:12698 :: AttributeError 0514 15:45:12698 :: : 0514 15:45:12698 :: 'int' object has no attribute 'gameWindow' 0514 15:45:12698 :: 0514 15:45:33815 :: skillGetAffect - Strange Formula [Accélération] 0514 15:45:33882 :: skillGetAffect - Strange Formula [Accélération] 0514 15:45:33882 :: skillGetAffect - Strange Formula [Accélération] 0514 15:45:33883 :: skillGetAffect - Strange Formula [Accélération] 0514 15:45:33884 :: skillGetAffect - Strange Formula [Accélération] 0514 15:45:33884 :: skillGetAffect - Strange Formula [Accélération] 0514 15:45:33885 :: skillGetAffect - Strange Formula [Accélération] 0514 15:45:33886 :: skillGetAffect - Strange Formula [Accélération] 0514 15:45:33887 :: skillGetAffect - Strange Formula [Accélération] 0514 15:45:33887 :: skillGetAffect - Strange Formula [Accélération] 0514 15:45:33888 :: skillGetAffect - Strange Formula [Accélération] 0514 15:45:33902 :: skillGetAffect - Strange Formula [Accélération] 0514 15:45:33903 :: skillGetAffect - Strange Formula [Accélération] 0514 15:45:33903 :: skillGetAffect - Strange Formula [Accélération] 0514 15:45:33904 :: skillGetAffect - Strange Formula [Accélération] 0514 15:45:33904 :: skillGetAffect - Strange Formula [Accélération] 0514 15:45:33905 :: skillGetAffect - Strange Formula [Accélération] 0514 15:46:04863 :: Traceback (most recent call last): 0514 15:46:04863 :: File "ui.py", line 1462, in OnToggleDown 0514 15:46:04864 :: File "switchbot.py", line 128, in Activate 0514 15:46:04864 :: AttributeError 0514 15:46:04864 :: : 0514 15:46:04864 :: 'int' object has no attribute 'gameWindow' 0514 15:46:04864 :: Merci à tous, Cordialement
  14. Version des Files : XXX Hello à tous, 1. Description du dysfonctionnement / Question : J'essaie d'implanter un système buy item with item, j'ai réussis à presque tout faire mais j'ai un problème lors de la modification de uitooltip.py. Mon fichier de base : if app.ENABLE_CHANGELOOK_SYSTEM: transmutation = shop.GetItemTransmutation(slotIndex) if not transmutation: self.AddItemData(itemVnum, metinSlot, attrSlot) else: self.AddItemData(itemVnum, metinSlot, attrSlot, 0, player.INVENTORY, -1, transmutation) else: self.AddItemData(itemVnum, metinSlot, attrSlot) self.AppendPrice(price) Ce qu'il me demande de faire : //cauta in functie self.AppendPrice(price) //modifica cu if app.ENABLE_MULTISHOP: if shop.GetBuyWithItem(slotIndex) != 0: self.AppendPriceTextLine(shop.GetBuyWithItemCount(slotIndex), shop.GetBuyWithItem(slotIndex)) else: self.AppendPrice(price) else: self.AppendPrice(price) Comment je l'ai adapté : if app.ENABLE_CHANGELOOK_SYSTEM: transmutation = shop.GetItemTransmutation(slotIndex) if not transmutation: self.AddItemData(itemVnum, metinSlot, attrSlot) else: self.AddItemData(itemVnum, metinSlot, attrSlot, 0, player.INVENTORY, -1, transmutation) if app.ENABLE_MULTISHOP: if shop.GetBuyWithItem(slotIndex) != 0: self.AppendPriceTextLine(shop.GetBuyWithItemCount(slotIndex), shop.GetBuyWithItem(slotIndex)) else: self.AppendPrice(price) else: self.AddItemData(itemVnum, metinSlot, attrSlot) self.AppendPrice(price) 2. SysErr ( Client / Server ) / SysLog ( Server ) Voici mon erreur : 0511 03:03:00911 :: File "uiToolTip.py", line 735, in ItemToolTip 0511 03:03:00911 :: NameError 0511 03:03:00911 :: : 0511 03:03:00911 :: name 'slotIndex' is not defined 0511 03:03:00911 :: Je vous ai mis directement les lignes concerné. Ps : La ligne 735 est : if shop.GetBuyWithItem(slotIndex) != 0: Merci à tous, Cordialement
  15. Roxas

    Armure bug

    Version des Files : 40K Hello à tous, ne montre pas d'armure root - warrior_m.msm Group ShapeData200 { SpecialPath "d:/ymir work/pc/pewi_armor/Dragon/" ShapeIndex 69691 Model "dragon_warrior_m.gr2" SourceSkin "nu_m_sk_dragon003.dds" TargetSkin "nu_m_sk_dragon003.dds" } locale - item_list.txt 69691 ARMOR icon/item/sura_prestigio.tga 69692 ARMOR icon/item/sura_prestigio.tga 69693 ARMOR icon/item/sura_prestigio.tga 69694 ARMOR icon/item/sura_prestigio.tga SERVER - item_names.txt 69691 Arm. Test G +9 69692 Traje Test N +9 69693 Arm. Test S +9 69694 Tunica Test SH +9 SERVER y locale item_proto.txt 69691 흑신철갑+9 ITEM_ARMOR ARMOR_BODY 2 ANTI_ASSASSIN | ANTI_SURA | ANTI_MUDANG | ANTI_SELL ITEM_TUNABLE WEAR_BODY NONE 120000 60000 12010 530 15 LEVEL 70 LIMIT_NONE 0 APPLY_MOV_SPEED -6 APPLY_RESIST_MAGIC 20 APPLY_NONE 0 0 90 0 69691 0 27 100 3 0 69692 흑풍+9 ITEM_ARMOR ARMOR_BODY 2 ANTI_MUSA | ANTI_SURA | ANTI_MUDANG | ANTI_SELL ITEM_TUNABLE WEAR_BODY NONE 120000 60000 12020 530 15 LEVEL 70 LIMIT_NONE 0 APPLY_MOV_SPEED -6 APPLY_RESIST_MAGIC 20 APPLY_NONE 0 0 90 0 69692 0 27 100 3 0 69693 흑마갑+9 ITEM_ARMOR ARMOR_BODY 2 ANTI_MUSA | ANTI_ASSASSIN | ANTI_MUDANG | ANTI_SELL ITEM_TUNABLE WEAR_BODY NONE 120000 60000 12030 530 15 LEVEL 70 LIMIT_NONE 0 APPLY_MOV_SPEED -6 APPLY_RESIST_MAGIC 20 APPLY_NONE 0 0 90 0 69693 0 27 100 3 0 69694 흑선의+9 ITEM_ARMOR ARMOR_BODY 2 ANTI_MUSA | ANTI_ASSASSIN | ANTI_SURA | ANTI_SELL ITEM_TUNABLE WEAR_BODY NONE 120000 60000 12040 530 15 LEVEL 70 LIMIT_NONE 0 APPLY_MOV_SPEED -6 APPLY_RESIST_MAGIC 20 APPLY_NONE 0 0 90 0 69694 0 27 100 3 0 PC y PC2 Descompilado syserr Clean Le serveur et le client les reconnaissent, ils ont les mêmes attributs que l'armure d'acier. Merci à tous, Cordialement
  16. Version des Files : Toutes Hello à tous, 1. Description du dysfonctionnement / Question : Alors voilà j'ai louer un dédié chez Scaleway il y a 5 jours, je l'ai installé sous FreeBSD12.1, j'ai installer mysql, les libs et j'ai essayer un nombre de files inimaginables mais rien a faire, aucune ne veut fonctionner... a chaque fois qu'il y a une erreur et que je la fix, il y en a d'autres qui apparaissent.... J'ai essayer toutes les files du forum quasiment.. je suis désespéré donc s'il vous plaît si quelqu'un peut m'aider car la je suis totalement perdu... Merci à tous, Cordialement
  17. Version des Files : Ephelion2 Hello à tous, 1. Description du dysfonctionnement / Question : Alors voila, depuis hier je cherche ou ce trouve le fichier root pour pouvoir modifier le serverinfo du client de Ephelion2... Je ne l'ai toujours pas trouver, quelqu un aurais t'il un idee d'ou il peut etre? Merci d avance.. Merci à tous, Cordialement
  18. Version des Files : 2016 FE V3 Hello à tous, 1. Description du dysfonctionnement / Question : J'ai un soucis avec les implantations de map! Je m'explique. J'ai suivi le tuto de la team FE mais dans celle-ci il est spécifié que la map est implanté avec les fichiers epk/eix directement dans le dossier pack du client. Seulement, sur tous les liens que je peux trouver, je trouve toujours les maps sous leur forme "brut" et je n'arrive vraiment pas à les implanter sur mon serveur. J'ai eu beau cherché sur le forum, la plupart des soucis semblables aux mien ont été résolus mais la réponse ne figure pas en commentaire. 2. SysErr ( Client / Server ) 0507 16:18:02398 :: LZObject: key incorrect 0507 16:18:02399 :: LZObject: key incorrect 0507 16:19:51070 :: NOT_FOUND_GLOBAL_POSITION(88888800, 88888800) 4. Screenshots ? Merci à tous, Cordialement Changement de situation. Maintenant le client crash complet et je ne peux plus me connecter sur le perso.
  19. Textures blanches et problèmes d'apparition de structures. La solution : Le lecteur doit impérativement être sous la lettre D (nomdupériph D:). Dans ce périphérique, créer un dossier ymir work et y déplacer tous les dossiers nécessaires. Vérifier que dans ces dossiers il n'y ai pas de sub dossier ymir work : D:\ymir work\zone et non D:\ymir work\zone\ymir work\zone
  20. Version des Files : XXX Hello à tous, 1. Description du dysfonctionnement / Question : J'ai essayer d'implanté le switchbot comme indiquer sur un tutoriel de se forum , le problèmes étant qu'à l'heure actuel quand je lance le client il crash aussi tôt... Alors es ce une erreur de ma part ? c'est fortement possible étant donner que je débute en dev...mais en soit je ne voit pas pourquoi j'ai se soucis Merci à tous, Cordialement
  21. Saug

    Taskbar

    FILE 2016 FE V3.0 Bonjour, J'ai tenté de mettre la taskbar sur la gauche de ce tutoriel : Mais le soucis c'est qu'elle est buger : Quand j'essaye de mettre un bouton comme ceci : self.sideBar = uisidebar.SideBar() self.sideBar.AddButton("Screenshot", self.SaveScreen) self.sideBar.Show() (Avec les tabulation et dans la fonction _init) je reste coincé sur l'écran de chargement. J'ai bien essayer avec mon switchbot même soucis je reste bloquer a l'écran de chargement et je ne voie pas ou es mon erreur. Quelqu'un serai t'il pourquoi ? import os import app import dbg import grp import item import background import chr import chrmgr import player import snd import chat import textTail import snd import net import effect import wndMgr import fly import systemSetting import quest import guild import skill import messenger import localeInfo import constInfo import exchange import ime import time import uisidebar import ui import uiCommon import uiPhaseCurtain import uiMapNameShower import uiAffectShower import uiPlayerGauge import uiCharacter import uiTarget # PRIVATE_SHOP_PRICE_LIST import uiPrivateShopBuilder # END_OF_PRIVATE_SHOP_PRICE_LIST import mouseModule import consoleModule import localeInfo import playerSettingModule import interfaceModule import musicInfo import debugInfo import uipetsystem import stringCommander from _weakref import proxy from switchbot import Bot # TEXTTAIL_LIVINGTIME_CONTROL #if localeInfo.IsJAPAN(): # app.SetTextTailLivingTime(8.0) # END_OF_TEXTTAIL_LIVINGTIME_CONTROL # SCREENSHOT_CWDSAVE SCREENSHOT_CWDSAVE = False SCREENSHOT_DIR = None if localeInfo.IsEUROPE(): SCREENSHOT_CWDSAVE = True if localeInfo.IsCIBN10(): SCREENSHOT_CWDSAVE = False SCREENSHOT_DIR = "YT2W" cameraDistance = 1550.0 cameraPitch = 27.0 cameraRotation = 0.0 cameraHeight = 100.0 testAlignment = 0 class GameWindow(ui.ScriptWindow): def __init__(self, stream): ui.ScriptWindow.__init__(self, "GAME") self.SetWindowName("game") net.SetPhaseWindow(net.PHASE_WINDOW_GAME, self) player.SetGameWindow(self) self.quickSlotPageIndex = 0 self.lastPKModeSendedTime = 0 self.pressNumber = None self.guildWarQuestionDialog = None self.interface = None self.targetBoard = None self.console = None self.mapNameShower = None self.affectShower = None self.playerGauge = None self.stream=stream self.interface = interfaceModule.Interface() self.interface.MakeInterface() self.interface.ShowDefaultWindows() self.curtain = uiPhaseCurtain.PhaseCurtain() self.curtain.speed = 0.03 self.curtain.Hide() self.targetBoard = uiTarget.TargetBoard() self.targetBoard.SetWhisperEvent(ui.__mem_func__(self.interface.OpenWhisperDialog)) self.targetBoard.Hide() self.petmain = uipetsystem.PetSystemMain() self.petmini = uipetsystem.PetSystemMini() self.console = consoleModule.ConsoleWindow() self.console.BindGameClass(self) self.console.SetConsoleSize(wndMgr.GetScreenWidth(), 200) self.console.Hide() self.mapNameShower = uiMapNameShower.MapNameShower() self.affectShower = uiAffectShower.AffectShower() self.playerGauge = uiPlayerGauge.PlayerGauge(self) self.playerGauge.Hide() #wj 2014.1.2. ESC키를 누를 시 우선적으로 DropQuestionDialog를 끄도록 만들었다. 하지만 처음에 itemDropQuestionDialog가 선언되어 있지 않아 ERROR가 발생하여 init에서 선언과 동시에 초기화 시킴. self.itemDropQuestionDialog = None self.__SetQuickSlotMode() self.__ServerCommand_Build() self.__ProcessPreservedServerCommand() self.switchbot = Bot() self.switchbot.Hide() self.sideBar = uisidebar.SideBar() #self.sideBar.AddButton("Screenshot", self.SaveScreen) self.sideBar.Show() def __del__(self): player.SetGameWindow(0) net.ClearPhaseWindow(net.PHASE_WINDOW_GAME, self) ui.ScriptWindow.__del__(self) def Open(self): app.SetFrameSkip(1) self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight()) self.quickSlotPageIndex = 0 self.PickingCharacterIndex = -1 self.PickingItemIndex = -1 self.consoleEnable = False self.isShowDebugInfo = False self.ShowNameFlag = False self.enableXMasBoom = False self.startTimeXMasBoom = 0.0 self.indexXMasBoom = 0 global cameraDistance, cameraPitch, cameraRotation, cameraHeight app.SetCamera(cameraDistance, cameraPitch, cameraRotation, cameraHeight) constInfo.SET_DEFAULT_CAMERA_MAX_DISTANCE() constInfo.SET_DEFAULT_CHRNAME_COLOR() constInfo.SET_DEFAULT_FOG_LEVEL() constInfo.SET_DEFAULT_CONVERT_EMPIRE_LANGUAGE_ENABLE() constInfo.SET_DEFAULT_USE_ITEM_WEAPON_TABLE_ATTACK_BONUS() constInfo.SET_DEFAULT_USE_SKILL_EFFECT_ENABLE() # TWO_HANDED_WEAPON_ATTACK_SPEED_UP constInfo.SET_TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE() # END_OF_TWO_HANDED_WEAPON_ATTACK_SPEED_UP import event event.SetLeftTimeString(localeInfo.UI_LEFT_TIME) textTail.EnablePKTitle(constInfo.PVPMODE_ENABLE) if constInfo.PVPMODE_TEST_ENABLE: self.testPKMode = ui.TextLine() self.testPKMode.SetFontName(localeInfo.UI_DEF_FONT) self.testPKMode.SetPosition(0, 15) self.testPKMode.SetWindowHorizontalAlignCenter() self.testPKMode.SetHorizontalAlignCenter() self.testPKMode.SetFeather() self.testPKMode.SetOutline() self.testPKMode.Show() self.testAlignment = ui.TextLine() self.testAlignment.SetFontName(localeInfo.UI_DEF_FONT) self.testAlignment.SetPosition(0, 35) self.testAlignment.SetWindowHorizontalAlignCenter() self.testAlignment.SetHorizontalAlignCenter() self.testAlignment.SetFeather() self.testAlignment.SetOutline() self.testAlignment.Show() self.__BuildKeyDict() self.__BuildDebugInfo() # PRIVATE_SHOP_PRICE_LIST uiPrivateShopBuilder.Clear() # END_OF_PRIVATE_SHOP_PRICE_LIST # UNKNOWN_UPDATE exchange.InitTrading() # END_OF_UNKNOWN_UPDATE if debugInfo.IsDebugMode(): self.ToggleDebugInfo() ## Sound snd.SetMusicVolume(systemSetting.GetMusicVolume()*net.GetFieldMusicVolume()) snd.SetSoundVolume(systemSetting.GetSoundVolume()) netFieldMusicFileName = net.GetFieldMusicFileName() if netFieldMusicFileName: snd.FadeInMusic("BGM/" + netFieldMusicFileName) elif musicInfo.fieldMusic != "": snd.FadeInMusic("BGM/" + musicInfo.fieldMusic) self.__SetQuickSlotMode() self.__SelectQuickPage(self.quickSlotPageIndex) self.SetFocus() self.Show() app.ShowCursor() net.SendEnterGamePacket() # START_GAME_ERROR_EXIT try: self.StartGame() except: import exception exception.Abort("GameWindow.Open") # END_OF_START_GAME_ERROR_EXIT # NPC가 큐브시스템으로 만들 수 있는 아이템들의 목록을 캐싱 # ex) cubeInformation[20383] = [ {"rewordVNUM": 72723, "rewordCount": 1, "materialInfo": "101,1&102,2", "price": 999 }, ... ] self.cubeInformation = {} self.currentCubeNPC = 0 self.acceInformation = {} self.currentAcceNPC = 0 def Close(self): self.Hide() global cameraDistance, cameraPitch, cameraRotation, cameraHeight (cameraDistance, cameraPitch, cameraRotation, cameraHeight) = app.GetCamera() if musicInfo.fieldMusic != "": snd.FadeOutMusic("BGM/"+ musicInfo.fieldMusic) self.onPressKeyDict = None self.onClickKeyDict = None chat.Close() snd.StopAllSound() grp.InitScreenEffect() chr.Destroy() textTail.Clear() quest.Clear() background.Destroy() guild.Destroy() messenger.Destroy() skill.ClearSkillData() wndMgr.Unlock() mouseModule.mouseController.DeattachObject() if self.guildWarQuestionDialog: self.guildWarQuestionDialog.Close() self.guildNameBoard = None self.partyRequestQuestionDialog = None self.partyInviteQuestionDialog = None self.guildInviteQuestionDialog = None self.guildWarQuestionDialog = None self.messengerAddFriendQuestion = None # UNKNOWN_UPDATE self.itemDropQuestionDialog = None # END_OF_UNKNOWN_UPDATE # QUEST_CONFIRM self.confirmDialog = None # END_OF_QUEST_CONFIRM self.PrintCoord = None self.FrameRate = None self.Pitch = None self.Splat = None self.TextureNum = None self.ObjectNum = None self.ViewDistance = None self.PrintMousePos = None self.ClearDictionary() self.petmain.Close() self.petmini.Close() self.playerGauge = None self.mapNameShower = None self.affectShower = None if self.console: self.console.BindGameClass(0) self.console.Close() self.console=None if self.targetBoard: self.targetBoard.Destroy() self.targetBoard = None if self.interface: self.interface.HideAllWindows() self.interface.Close() self.interface=None player.ClearSkillDict() player.ResetCameraRotation() self.KillFocus() app.HideCursor() self.sideBar.Destroy() self.sideBar = None print "---------------------------------------------------------------------------- CLOSE GAME WINDOW" def __BuildKeyDict(self): onPressKeyDict = {} ##PressKey 는 누르고 있는 동안 계속 적용되는 키이다. ## 숫자 단축키 퀵슬롯에 이용된다.(이후 숫자들도 퀵 슬롯용 예약) ## F12 는 클라 디버그용 키이므로 쓰지 않는 게 좋다. onPressKeyDict[app.DIK_1] = lambda : self.__PressNumKey(1) onPressKeyDict[app.DIK_2] = lambda : self.__PressNumKey(2) onPressKeyDict[app.DIK_3] = lambda : self.__PressNumKey(3) onPressKeyDict[app.DIK_4] = lambda : self.__PressNumKey(4) onPressKeyDict[app.DIK_5] = lambda : self.__PressNumKey(5) onPressKeyDict[app.DIK_6] = lambda : self.__PressNumKey(6) onPressKeyDict[app.DIK_7] = lambda : self.__PressNumKey(7) onPressKeyDict[app.DIK_8] = lambda : self.__PressNumKey(8) onPressKeyDict[app.DIK_9] = lambda : self.__PressNumKey(9) onPressKeyDict[app.DIK_F1] = lambda : self.__PressQuickSlot(4) onPressKeyDict[app.DIK_F2] = lambda : self.__PressQuickSlot(5) onPressKeyDict[app.DIK_F3] = lambda : self.__PressQuickSlot(6) onPressKeyDict[app.DIK_F4] = lambda : self.__PressQuickSlot(7) onPressKeyDict[app.DIK_LALT] = lambda : self.ShowName() onPressKeyDict[app.DIK_LCONTROL] = lambda : self.ShowMouseImage() onPressKeyDict[app.DIK_SYSRQ] = lambda : self.SaveScreen() onPressKeyDict[app.DIK_SPACE] = lambda : self.StartAttack() #캐릭터 이동키 onPressKeyDict[app.DIK_UP] = lambda : self.MoveUp() onPressKeyDict[app.DIK_DOWN] = lambda : self.MoveDown() onPressKeyDict[app.DIK_LEFT] = lambda : self.MoveLeft() onPressKeyDict[app.DIK_RIGHT] = lambda : self.MoveRight() onPressKeyDict[app.DIK_W] = lambda : self.MoveUp() onPressKeyDict[app.DIK_S] = lambda : self.MoveDown() onPressKeyDict[app.DIK_A] = lambda : self.MoveLeft() onPressKeyDict[app.DIK_D] = lambda : self.MoveRight() onPressKeyDict[app.DIK_E] = lambda: app.RotateCamera(app.CAMERA_TO_POSITIVE) onPressKeyDict[app.DIK_R] = lambda: app.ZoomCamera(app.CAMERA_TO_NEGATIVE) #onPressKeyDict[app.DIK_F] = lambda: app.ZoomCamera(app.CAMERA_TO_POSITIVE) onPressKeyDict[app.DIK_T] = lambda: app.PitchCamera(app.CAMERA_TO_NEGATIVE) onPressKeyDict[app.DIK_G] = self.__PressGKey onPressKeyDict[app.DIK_Q] = self.__PressQKey onPressKeyDict[app.DIK_NUMPAD9] = lambda: app.MovieResetCamera() onPressKeyDict[app.DIK_NUMPAD4] = lambda: app.MovieRotateCamera(app.CAMERA_TO_NEGATIVE) onPressKeyDict[app.DIK_NUMPAD6] = lambda: app.MovieRotateCamera(app.CAMERA_TO_POSITIVE) onPressKeyDict[app.DIK_PGUP] = lambda: app.MovieZoomCamera(app.CAMERA_TO_NEGATIVE) onPressKeyDict[app.DIK_PGDN] = lambda: app.MovieZoomCamera(app.CAMERA_TO_POSITIVE) onPressKeyDict[app.DIK_NUMPAD8] = lambda: app.MoviePitchCamera(app.CAMERA_TO_NEGATIVE) onPressKeyDict[app.DIK_NUMPAD2] = lambda: app.MoviePitchCamera(app.CAMERA_TO_POSITIVE) onPressKeyDict[app.DIK_GRAVE] = lambda : self.PickUpItem() onPressKeyDict[app.DIK_Z] = lambda : self.PickUpItem() onPressKeyDict[app.DIK_C] = lambda state = "STATUS": self.interface.ToggleCharacterWindow(state) onPressKeyDict[app.DIK_V] = lambda state = "SKILL": self.interface.ToggleCharacterWindow(state) #onPressKeyDict[app.DIK_B] = lambda state = "EMOTICON": self.interface.ToggleCharacterWindow(state) onPressKeyDict[app.DIK_N] = lambda state = "QUEST": self.interface.ToggleCharacterWindow(state) onPressKeyDict[app.DIK_I] = lambda : self.interface.ToggleInventoryWindow() onPressKeyDict[app.DIK_O] = lambda : self.interface.ToggleDragonSoulWindowWithNoInfo() onPressKeyDict[app.DIK_M] = lambda : self.interface.PressMKey() #onPressKeyDict[app.DIK_H] = lambda : self.interface.OpenHelpWindow() onPressKeyDict[app.DIK_ADD] = lambda : self.interface.MiniMapScaleUp() onPressKeyDict[app.DIK_SUBTRACT] = lambda : self.interface.MiniMapScaleDown() onPressKeyDict[app.DIK_L] = lambda : self.interface.ToggleChatLogWindow() onPressKeyDict[app.DIK_LSHIFT] = lambda : self.__SetQuickPageMode() onPressKeyDict[app.DIK_J] = lambda : self.__PressJKey() onPressKeyDict[app.DIK_H] = lambda : self.__PressHKey() onPressKeyDict[app.DIK_B] = lambda : self.__PressBKey() onPressKeyDict[app.DIK_F] = lambda : self.__PressFKey() # CUBE_TEST #onPressKeyDict[app.DIK_K] = lambda : self.interface.OpenCubeWindow() # CUBE_TEST_END self.onPressKeyDict = onPressKeyDict onClickKeyDict = {} onClickKeyDict[app.DIK_UP] = lambda : self.StopUp() onClickKeyDict[app.DIK_DOWN] = lambda : self.StopDown() onClickKeyDict[app.DIK_LEFT] = lambda : self.StopLeft() onClickKeyDict[app.DIK_RIGHT] = lambda : self.StopRight() onClickKeyDict[app.DIK_SPACE] = lambda : self.EndAttack() onClickKeyDict[app.DIK_W] = lambda : self.StopUp() onClickKeyDict[app.DIK_S] = lambda : self.StopDown() onClickKeyDict[app.DIK_A] = lambda : self.StopLeft() onClickKeyDict[app.DIK_D] = lambda : self.StopRight() onClickKeyDict[app.DIK_Q] = lambda: app.RotateCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_E] = lambda: app.RotateCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_R] = lambda: app.ZoomCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_F] = lambda: app.ZoomCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_T] = lambda: app.PitchCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_G] = lambda: self.__ReleaseGKey() onClickKeyDict[app.DIK_NUMPAD4] = lambda: app.MovieRotateCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_NUMPAD6] = lambda: app.MovieRotateCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_PGUP] = lambda: app.MovieZoomCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_PGDN] = lambda: app.MovieZoomCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_NUMPAD8] = lambda: app.MoviePitchCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_NUMPAD2] = lambda: app.MoviePitchCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_LALT] = lambda: self.HideName() onClickKeyDict[app.DIK_LCONTROL] = lambda: self.HideMouseImage() onClickKeyDict[app.DIK_LSHIFT] = lambda: self.__SetQuickSlotMode() onPressKeyDict[app.DIK_F6]= lambda : self.__toggleSwitchbot() onClickKeyDict[app.DIK_P] = lambda: self.OpenPetMainGui() #if constInfo.PVPMODE_ACCELKEY_ENABLE: # onClickKeyDict[app.DIK_B] = lambda: self.ChangePKMode() self.onClickKeyDict=onClickKeyDict def __PressNumKey(self,num): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): if num >= 1 and num <= 9: if(chrmgr.IsPossibleEmoticon(-1)): chrmgr.SetEmoticon(-1,int(num)-1) net.SendEmoticon(int(num)-1) else: if num >= 1 and num <= 4: self.pressNumber(num-1) def __ClickBKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): return else: if constInfo.PVPMODE_ACCELKEY_ENABLE: self.ChangePKMode() def __PressJKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): if player.IsMountingHorse(): net.SendChatPacket("/unmount") else: #net.SendChatPacket("/user_horse_ride") if not uiPrivateShopBuilder.IsBuildingPrivateShop(): for i in xrange(player.INVENTORY_PAGE_SIZE): if player.GetItemIndex(i) in (71114, 71116, 71118, 71120): net.SendItemUsePacket(i) break def __PressHKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): net.SendChatPacket("/user_horse_ride") else: self.interface.OpenHelpWindow() def __PressBKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): net.SendChatPacket("/user_horse_back") else: state = "EMOTICON" self.interface.ToggleCharacterWindow(state) def __PressFKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): net.SendChatPacket("/user_horse_feed") else: app.ZoomCamera(app.CAMERA_TO_POSITIVE) def __PressGKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): net.SendChatPacket("/ride") else: if self.ShowNameFlag: self.interface.ToggleGuildWindow() else: app.PitchCamera(app.CAMERA_TO_POSITIVE) def __ReleaseGKey(self): app.PitchCamera(app.CAMERA_STOP) def __PressQKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): if 0==interfaceModule.IsQBHide: interfaceModule.IsQBHide = 1 self.interface.HideAllQuestButton() else: interfaceModule.IsQBHide = 0 self.interface.ShowAllQuestButton() else: app.RotateCamera(app.CAMERA_TO_NEGATIVE) def __SetQuickSlotMode(self): self.pressNumber=ui.__mem_func__(self.__PressQuickSlot) def __SetQuickPageMode(self): self.pressNumber=ui.__mem_func__(self.__SelectQuickPage) def __PressQuickSlot(self, localSlotIndex): if localeInfo.IsARABIC(): if 0 <= localSlotIndex and localSlotIndex < 4: player.RequestUseLocalQuickSlot(3-localSlotIndex) else: player.RequestUseLocalQuickSlot(11-localSlotIndex) else: player.RequestUseLocalQuickSlot(localSlotIndex) def __SelectQuickPage(self, pageIndex): self.quickSlotPageIndex = pageIndex player.SetQuickPage(pageIndex) def ToggleDebugInfo(self): self.isShowDebugInfo = not self.isShowDebugInfo if self.isShowDebugInfo: self.PrintCoord.Hide() self.FrameRate.Hide() self.Pitch.Hide() self.Splat.Hide() self.TextureNum.Hide() self.ObjectNum.Hide() self.ViewDistance.Hide() self.PrintMousePos.Hide() else: self.PrintCoord.Hide() self.FrameRate.Hide() self.Pitch.Hide() self.Splat.Hide() self.TextureNum.Hide() self.ObjectNum.Hide() self.ViewDistance.Hide() self.PrintMousePos.Hide() def __BuildDebugInfo(self): ## Character Position Coordinate self.PrintCoord = ui.TextLine() self.PrintCoord.SetFontName(localeInfo.UI_DEF_FONT) self.PrintCoord.SetPosition(wndMgr.GetScreenWidth() - 270, 0) ## Frame Rate self.FrameRate = ui.TextLine() self.FrameRate.SetFontName(localeInfo.UI_DEF_FONT) self.FrameRate.SetPosition(wndMgr.GetScreenWidth() - 270, 20) ## Camera Pitch self.Pitch = ui.TextLine() self.Pitch.SetFontName(localeInfo.UI_DEF_FONT) self.Pitch.SetPosition(wndMgr.GetScreenWidth() - 270, 40) ## Splat self.Splat = ui.TextLine() self.Splat.SetFontName(localeInfo.UI_DEF_FONT) self.Splat.SetPosition(wndMgr.GetScreenWidth() - 270, 60) ## self.PrintMousePos = ui.TextLine() self.PrintMousePos.SetFontName(localeInfo.UI_DEF_FONT) self.PrintMousePos.SetPosition(wndMgr.GetScreenWidth() - 270, 80) # TextureNum self.TextureNum = ui.TextLine() self.TextureNum.SetFontName(localeInfo.UI_DEF_FONT) self.TextureNum.SetPosition(wndMgr.GetScreenWidth() - 270, 100) # 오브젝트 그리는 개수 self.ObjectNum = ui.TextLine() self.ObjectNum.SetFontName(localeInfo.UI_DEF_FONT) self.ObjectNum.SetPosition(wndMgr.GetScreenWidth() - 270, 120) # 시야거리 self.ViewDistance = ui.TextLine() self.ViewDistance.SetFontName(localeInfo.UI_DEF_FONT) self.ViewDistance.SetPosition(0, 0) def __NotifyError(self, msg): chat.AppendChat(chat.CHAT_TYPE_INFO, msg) def ChangePKMode(self): if not app.IsPressed(app.DIK_LCONTROL): return if player.GetStatus(player.LEVEL)<constInfo.PVPMODE_PROTECTED_LEVEL: self.__NotifyError(localeInfo.OPTION_PVPMODE_PROTECT % (constInfo.PVPMODE_PROTECTED_LEVEL)) return curTime = app.GetTime() if curTime - self.lastPKModeSendedTime < constInfo.PVPMODE_ACCELKEY_DELAY: return self.lastPKModeSendedTime = curTime curPKMode = player.GetPKMode() nextPKMode = curPKMode + 1 if nextPKMode == player.PK_MODE_PROTECT: if 0 == player.GetGuildID(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.OPTION_PVPMODE_CANNOT_SET_GUILD_MODE) nextPKMode = 0 else: nextPKMode = player.PK_MODE_GUILD elif nextPKMode == player.PK_MODE_MAX_NUM: nextPKMode = 0 net.SendChatPacket("/PKMode " + str(nextPKMode)) print "/PKMode " + str(nextPKMode) def OnChangePKMode(self): self.interface.OnChangePKMode() try: self.__NotifyError(localeInfo.OPTION_PVPMODE_MESSAGE_DICT[player.GetPKMode()]) except KeyError: print "UNKNOWN PVPMode[%d]" % (player.GetPKMode()) if constInfo.PVPMODE_TEST_ENABLE: curPKMode = player.GetPKMode() alignment, grade = chr.testGetPKData() self.pkModeNameDict = { 0 : "PEACE", 1 : "REVENGE", 2 : "FREE", 3 : "PROTECT", } self.testPKMode.SetText("Current PK Mode : " + self.pkModeNameDict.get(curPKMode, "UNKNOWN")) self.testAlignment.SetText("Current Alignment : " + str(alignment) + " (" + localeInfo.TITLE_NAME_LIST[grade] + ")") ############################################################################################### ############################################################################################### ## Game Callback Functions # Start def StartGame(self): self.RefreshInventory() self.RefreshEquipment() self.RefreshCharacter() self.RefreshSkill() # Refresh def CheckGameButton(self): if self.interface: self.interface.CheckGameButton() def RefreshAlignment(self): self.interface.RefreshAlignment() def RefreshStatus(self): self.CheckGameButton() if self.interface: self.interface.RefreshStatus() if self.playerGauge: self.playerGauge.RefreshGauge() def RefreshStamina(self): self.interface.RefreshStamina() def RefreshSkill(self): self.CheckGameButton() if self.interface: self.interface.RefreshSkill() def RefreshQuest(self): self.interface.RefreshQuest() def RefreshMessenger(self): self.interface.RefreshMessenger() def RefreshGuildInfoPage(self): self.interface.RefreshGuildInfoPage() def RefreshGuildBoardPage(self): self.interface.RefreshGuildBoardPage() def RefreshGuildMemberPage(self): self.interface.RefreshGuildMemberPage() def RefreshGuildMemberPageGradeComboBox(self): self.interface.RefreshGuildMemberPageGradeComboBox() def RefreshGuildSkillPage(self): self.interface.RefreshGuildSkillPage() def RefreshGuildGradePage(self): self.interface.RefreshGuildGradePage() def RefreshMobile(self): if self.interface: self.interface.RefreshMobile() def OnMobileAuthority(self): self.interface.OnMobileAuthority() def OnBlockMode(self, mode): self.interface.OnBlockMode(mode) def OpenQuestWindow(self, skin, idx): self.interface.OpenQuestWindow(skin, idx) def AskGuildName(self): guildNameBoard = uiCommon.InputDialog() guildNameBoard.SetTitle(localeInfo.GUILD_NAME) guildNameBoard.SetAcceptEvent(ui.__mem_func__(self.ConfirmGuildName)) guildNameBoard.SetCancelEvent(ui.__mem_func__(self.CancelGuildName)) guildNameBoard.Open() self.guildNameBoard = guildNameBoard def ConfirmGuildName(self): guildName = self.guildNameBoard.GetText() if not guildName: return if net.IsInsultIn(guildName): self.PopupMessage(localeInfo.GUILD_CREATE_ERROR_INSULT_NAME) return net.SendAnswerMakeGuildPacket(guildName) self.guildNameBoard.Close() self.guildNameBoard = None return True def CancelGuildName(self): self.guildNameBoard.Close() self.guildNameBoard = None return True ## Refine def PopupMessage(self, msg): self.stream.popupWindow.Close() self.stream.popupWindow.Open(msg, 0, localeInfo.UI_OK) def OpenRefineDialog(self, targetItemPos, nextGradeItemVnum, cost, prob, type=0): self.interface.OpenRefineDialog(targetItemPos, nextGradeItemVnum, cost, prob, type) def AppendMaterialToRefineDialog(self, vnum, count): self.interface.AppendMaterialToRefineDialog(vnum, count) def RunUseSkillEvent(self, slotIndex, coolTime): self.interface.OnUseSkill(slotIndex, coolTime) def ClearAffects(self): self.affectShower.ClearAffects() def SetAffect(self, affect): self.affectShower.SetAffect(affect) def ResetAffect(self, affect): self.affectShower.ResetAffect(affect) # UNKNOWN_UPDATE def BINARY_NEW_AddAffect(self, type, pointIdx, value, duration): self.affectShower.BINARY_NEW_AddAffect(type, pointIdx, value, duration) if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type: self.interface.DragonSoulActivate(type - chr.NEW_AFFECT_DRAGON_SOUL_DECK1) elif chr.NEW_AFFECT_DRAGON_SOUL_QUALIFIED == type: self.BINARY_DragonSoulGiveQuilification() def BINARY_NEW_RemoveAffect(self, type, pointIdx): self.affectShower.BINARY_NEW_RemoveAffect(type, pointIdx) if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type: self.interface.DragonSoulDeactivate() # END_OF_UNKNOWN_UPDATE def ActivateSkillSlot(self, slotIndex): if self.interface: self.interface.OnActivateSkill(slotIndex) def DeactivateSkillSlot(self, slotIndex): if self.interface: self.interface.OnDeactivateSkill(slotIndex) def RefreshEquipment(self): if self.interface: self.interface.RefreshInventory() def RefreshInventory(self): if self.interface: self.interface.RefreshInventory() def RefreshCharacter(self): if self.interface: self.interface.RefreshCharacter() def OnGameOver(self): self.CloseTargetBoard() self.OpenRestartDialog() def OpenRestartDialog(self): self.interface.OpenRestartDialog() def ChangeCurrentSkill(self, skillSlotNumber): self.interface.OnChangeCurrentSkill(skillSlotNumber) ## TargetBoard def SetPCTargetBoard(self, vid, name): self.targetBoard.Open(vid, name) if app.IsPressed(app.DIK_LCONTROL): if not player.IsSameEmpire(vid): return if player.IsMainCharacterIndex(vid): return elif chr.INSTANCE_TYPE_BUILDING == chr.GetInstanceType(vid): return self.interface.OpenWhisperDialog(name) def RefreshTargetBoardByVID(self, vid): self.targetBoard.RefreshByVID(vid) def RefreshTargetBoardByName(self, name): self.targetBoard.RefreshByName(name) def __RefreshTargetBoard(self): self.targetBoard.Refresh() def SetHPTargetBoard(self, vid, hpPercentage): if vid != self.targetBoard.GetTargetVID(): self.targetBoard.ResetTargetBoard() self.targetBoard.SetEnemyVID(vid) self.targetBoard.SetHP(hpPercentage) self.targetBoard.Show() def CloseTargetBoardIfDifferent(self, vid): if vid != self.targetBoard.GetTargetVID(): self.targetBoard.Close() def CloseTargetBoard(self): self.targetBoard.Close() ## View Equipment def OpenEquipmentDialog(self, vid): self.interface.OpenEquipmentDialog(vid) def SetEquipmentDialogItem(self, vid, slotIndex, vnum, count): self.interface.SetEquipmentDialogItem(vid, slotIndex, vnum, count) def SetEquipmentDialogSocket(self, vid, slotIndex, socketIndex, value): self.interface.SetEquipmentDialogSocket(vid, slotIndex, socketIndex, value) def SetEquipmentDialogAttr(self, vid, slotIndex, attrIndex, type, value): self.interface.SetEquipmentDialogAttr(vid, slotIndex, attrIndex, type, value) # SHOW_LOCAL_MAP_NAME def ShowMapName(self, mapName, x, y): if self.mapNameShower: self.mapNameShower.ShowMapName(mapName, x, y) if self.interface: self.interface.SetMapName(mapName) # END_OF_SHOW_LOCAL_MAP_NAME def BINARY_OpenAtlasWindow(self): self.interface.BINARY_OpenAtlasWindow() ## Chat def OnRecvWhisper(self, mode, name, line): if mode != chat.WHISPER_TYPE_GM: if os.path.exists("ignore.cfg"): ignored = open("ignore.cfg", "r") ignoredList = ignored.read() ignoredPlayer = ignoredList.split(",\n") ignored.close() for i in xrange(str(ignoredList).count(",\n")): if str(ignoredPlayer[i]) != name: pass else: return chat.AppendWhisper(mode, name, line) self.interface.RecvWhisper(name) else: self.interface.RegisterGameMasterName(name) chat.AppendWhisper(mode, name, line) self.interface.RecvWhisper(name) def OnRecvWhisperSystemMessage(self, mode, name, line): chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, line) self.interface.RecvWhisper(name) def OnRecvWhisperError(self, mode, name, line): if localeInfo.WHISPER_ERROR.has_key(mode): chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, localeInfo.WHISPER_ERROR[mode](name)) else: chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, "Whisper Unknown Error(mode=%d, name=%s)" % (mode, name)) self.interface.RecvWhisper(name) def RecvWhisper(self, name): self.interface.RecvWhisper(name) def OnPickMoney(self, money): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GAME_PICK_MONEY % (money)) def OnShopError(self, type): try: self.PopupMessage(localeInfo.SHOP_ERROR_DICT[type]) except KeyError: self.PopupMessage(localeInfo.SHOP_ERROR_UNKNOWN % (type)) def OnSafeBoxError(self): self.PopupMessage(localeInfo.SAFEBOX_ERROR) def OnFishingSuccess(self, isFish, fishName): chat.AppendChatWithDelay(chat.CHAT_TYPE_INFO, localeInfo.FISHING_SUCCESS(isFish, fishName), 2000) # ADD_FISHING_MESSAGE def OnFishingNotifyUnknown(self): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.FISHING_UNKNOWN) def OnFishingWrongPlace(self): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.FISHING_WRONG_PLACE) # END_OF_ADD_FISHING_MESSAGE def OnFishingNotify(self, isFish, fishName): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.FISHING_NOTIFY(isFish, fishName)) def OnFishingFailure(self): chat.AppendChatWithDelay(chat.CHAT_TYPE_INFO, localeInfo.FISHING_FAILURE, 2000) def OnCannotPickItem(self): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GAME_CANNOT_PICK_ITEM) # MINING def OnCannotMining(self): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GAME_CANNOT_MINING) # END_OF_MINING def OnCannotUseSkill(self, vid, type): if localeInfo.USE_SKILL_ERROR_TAIL_DICT.has_key(type): textTail.RegisterInfoTail(vid, localeInfo.USE_SKILL_ERROR_TAIL_DICT[type]) if localeInfo.USE_SKILL_ERROR_CHAT_DICT.has_key(type): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_SKILL_ERROR_CHAT_DICT[type]) def OnCannotShotError(self, vid, type): textTail.RegisterInfoTail(vid, localeInfo.SHOT_ERROR_TAIL_DICT.get(type, localeInfo.SHOT_ERROR_UNKNOWN % (type))) ## PointReset def StartPointReset(self): self.interface.OpenPointResetDialog() ## Shop def StartShop(self, vid): self.interface.OpenShopDialog(vid) def EndShop(self): self.interface.CloseShopDialog() def RefreshShop(self): self.interface.RefreshShopDialog() def SetShopSellingPrice(self, Price): pass ## Exchange def StartExchange(self): self.interface.StartExchange() def EndExchange(self): self.interface.EndExchange() def RefreshExchange(self): self.interface.RefreshExchange() ## Party def RecvPartyInviteQuestion(self, leaderVID, leaderName): partyInviteQuestionDialog = uiCommon.QuestionDialog() partyInviteQuestionDialog.SetText(leaderName + localeInfo.PARTY_DO_YOU_JOIN) partyInviteQuestionDialog.SetAcceptEvent(lambda arg=True: self.AnswerPartyInvite(arg)) partyInviteQuestionDialog.SetCancelEvent(lambda arg=False: self.AnswerPartyInvite(arg)) partyInviteQuestionDialog.Open() partyInviteQuestionDialog.partyLeaderVID = leaderVID self.partyInviteQuestionDialog = partyInviteQuestionDialog def AnswerPartyInvite(self, answer): if not self.partyInviteQuestionDialog: return partyLeaderVID = self.partyInviteQuestionDialog.partyLeaderVID distance = player.GetCharacterDistance(partyLeaderVID) if distance < 0.0 or distance > 5000: answer = False net.SendPartyInviteAnswerPacket(partyLeaderVID, answer) self.partyInviteQuestionDialog.Close() self.partyInviteQuestionDialog = None def AddPartyMember(self, pid, name): self.interface.AddPartyMember(pid, name) def UpdatePartyMemberInfo(self, pid): self.interface.UpdatePartyMemberInfo(pid) def RemovePartyMember(self, pid): self.interface.RemovePartyMember(pid) self.__RefreshTargetBoard() def LinkPartyMember(self, pid, vid): self.interface.LinkPartyMember(pid, vid) def UnlinkPartyMember(self, pid): self.interface.UnlinkPartyMember(pid) def UnlinkAllPartyMember(self): self.interface.UnlinkAllPartyMember() def ExitParty(self): self.interface.ExitParty() self.RefreshTargetBoardByVID(self.targetBoard.GetTargetVID()) def ChangePartyParameter(self, distributionMode): self.interface.ChangePartyParameter(distributionMode) ## Messenger def OnMessengerAddFriendQuestion(self, name): messengerAddFriendQuestion = uiCommon.QuestionDialog2() messengerAddFriendQuestion.SetText1(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_1 % (name)) messengerAddFriendQuestion.SetText2(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_2) messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend)) messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend)) messengerAddFriendQuestion.Open() messengerAddFriendQuestion.name = name self.messengerAddFriendQuestion = messengerAddFriendQuestion def OnAcceptAddFriend(self): name = self.messengerAddFriendQuestion.name net.SendChatPacket("/messenger_auth y " + name) self.OnCloseAddFriendQuestionDialog() return True def OnDenyAddFriend(self): name = self.messengerAddFriendQuestion.name net.SendChatPacket("/messenger_auth n " + name) self.OnCloseAddFriendQuestionDialog() return True def OnCloseAddFriendQuestionDialog(self): self.messengerAddFriendQuestion.Close() self.messengerAddFriendQuestion = None return True ## SafeBox def OpenSafeboxWindow(self, size): self.interface.OpenSafeboxWindow(size) def RefreshSafebox(self): self.interface.RefreshSafebox() def RefreshSafeboxMoney(self): self.interface.RefreshSafeboxMoney() # ITEM_MALL def OpenMallWindow(self, size): self.interface.OpenMallWindow(size) def RefreshMall(self): self.interface.RefreshMall() # END_OF_ITEM_MALL ## Guild def RecvGuildInviteQuestion(self, guildID, guildName): guildInviteQuestionDialog = uiCommon.QuestionDialog() guildInviteQuestionDialog.SetText(guildName + localeInfo.GUILD_DO_YOU_JOIN) guildInviteQuestionDialog.SetAcceptEvent(lambda arg=True: self.AnswerGuildInvite(arg)) guildInviteQuestionDialog.SetCancelEvent(lambda arg=False: self.AnswerGuildInvite(arg)) guildInviteQuestionDialog.Open() guildInviteQuestionDialog.guildID = guildID self.guildInviteQuestionDialog = guildInviteQuestionDialog def AnswerGuildInvite(self, answer): if not self.guildInviteQuestionDialog: return guildLeaderVID = self.guildInviteQuestionDialog.guildID net.SendGuildInviteAnswerPacket(guildLeaderVID, answer) self.guildInviteQuestionDialog.Close() self.guildInviteQuestionDialog = None def DeleteGuild(self): self.interface.DeleteGuild() ## Clock def ShowClock(self, second): self.interface.ShowClock(second) def HideClock(self): self.interface.HideClock() ## Emotion def BINARY_ActEmotion(self, emotionIndex): if self.interface.wndCharacter: self.interface.wndCharacter.ActEmotion(emotionIndex) ############################################################################################### ############################################################################################### ## Keyboard Functions def CheckFocus(self): if False == self.IsFocus(): if True == self.interface.IsOpenChat(): self.interface.ToggleChat() self.SetFocus() def SaveScreen(self): print "save screen" # SCREENSHOT_CWDSAVE if SCREENSHOT_CWDSAVE: if not os.path.exists(os.getcwd()+os.sep+"screenshot"): os.mkdir(os.getcwd()+os.sep+"screenshot") (succeeded, name) = grp.SaveScreenShotToPath(os.getcwd()+os.sep+"screenshot"+os.sep) elif SCREENSHOT_DIR: (succeeded, name) = grp.SaveScreenShot(SCREENSHOT_DIR) else: (succeeded, name) = grp.SaveScreenShot() # END_OF_SCREENSHOT_CWDSAVE if succeeded: pass """ chat.AppendChat(chat.CHAT_TYPE_INFO, name + localeInfo.SCREENSHOT_SAVE1) chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SCREENSHOT_SAVE2) """ else: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SCREENSHOT_SAVE_FAILURE) def ShowConsole(self): if debugInfo.IsDebugMode() or True == self.consoleEnable: player.EndKeyWalkingImmediately() self.console.OpenWindow() def ShowName(self): self.ShowNameFlag = True self.playerGauge.EnableShowAlways() player.SetQuickPage(self.quickSlotPageIndex+1) # ADD_ALWAYS_SHOW_NAME def __IsShowName(self): if systemSetting.IsAlwaysShowName(): return True if self.ShowNameFlag: return True return False # END_OF_ADD_ALWAYS_SHOW_NAME def HideName(self): self.ShowNameFlag = False self.playerGauge.DisableShowAlways() player.SetQuickPage(self.quickSlotPageIndex) def ShowMouseImage(self): self.interface.ShowMouseImage() def HideMouseImage(self): self.interface.HideMouseImage() def StartAttack(self): player.SetAttackKeyState(True) def EndAttack(self): player.SetAttackKeyState(False) def MoveUp(self): player.SetSingleDIKKeyState(app.DIK_UP, True) def MoveDown(self): player.SetSingleDIKKeyState(app.DIK_DOWN, True) def MoveLeft(self): player.SetSingleDIKKeyState(app.DIK_LEFT, True) def MoveRight(self): player.SetSingleDIKKeyState(app.DIK_RIGHT, True) def StopUp(self): player.SetSingleDIKKeyState(app.DIK_UP, False) def StopDown(self): player.SetSingleDIKKeyState(app.DIK_DOWN, False) def StopLeft(self): player.SetSingleDIKKeyState(app.DIK_LEFT, False) def StopRight(self): player.SetSingleDIKKeyState(app.DIK_RIGHT, False) def PickUpItem(self): player.PickCloseItem() ############################################################################################### ############################################################################################### ## Event Handler def OnKeyDown(self, key): if self.interface.wndWeb and self.interface.wndWeb.IsShow(): return if key == app.DIK_ESC: self.RequestDropItem(False) constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0) try: self.onPressKeyDict[key]() except KeyError: pass except: raise return True def OnKeyUp(self, key): try: self.onClickKeyDict[key]() except KeyError: pass except: raise return True def OnMouseLeftButtonDown(self): if self.interface.BUILD_OnMouseLeftButtonDown(): return if mouseModule.mouseController.isAttached(): self.CheckFocus() else: hyperlink = ui.GetHyperlink() if hyperlink: return else: self.CheckFocus() player.SetMouseState(player.MBT_LEFT, player.MBS_PRESS); return True def OnMouseLeftButtonUp(self): if self.interface.BUILD_OnMouseLeftButtonUp(): return if mouseModule.mouseController.isAttached(): attachedType = mouseModule.mouseController.GetAttachedType() attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex() attachedItemSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() attachedItemCount = mouseModule.mouseController.GetAttachedItemCount() ## QuickSlot if player.SLOT_TYPE_QUICK_SLOT == attachedType: player.RequestDeleteGlobalQuickSlot(attachedItemSlotPos) ## Inventory elif player.SLOT_TYPE_INVENTORY == attachedType: if player.ITEM_MONEY == attachedItemIndex: self.__PutMoney(attachedType, attachedItemCount, self.PickingCharacterIndex) else: self.__PutItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, self.PickingCharacterIndex) ## DragonSoul elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType: self.__PutItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, self.PickingCharacterIndex) mouseModule.mouseController.DeattachObject() else: hyperlink = ui.GetHyperlink() if hyperlink: if app.IsPressed(app.DIK_LALT): link = chat.GetLinkFromHyperlink(hyperlink) ime.PasteString(link) else: self.interface.MakeHyperlinkTooltip(hyperlink) return else: player.SetMouseState(player.MBT_LEFT, player.MBS_CLICK) #player.EndMouseWalking() return True def __PutItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, dstChrID): if player.SLOT_TYPE_INVENTORY == attachedType or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType: attachedInvenType = player.SlotTypeToInvenType(attachedType) if True == chr.HasInstance(self.PickingCharacterIndex) and player.GetMainCharacterIndex() != dstChrID: if player.IsEquipmentSlot(attachedItemSlotPos) and player.SLOT_TYPE_DRAGON_SOUL_INVENTORY != attachedType: self.stream.popupWindow.Close() self.stream.popupWindow.Open(localeInfo.EXCHANGE_FAILURE_EQUIP_ITEM, 0, localeInfo.UI_OK) else: if chr.IsNPC(dstChrID): net.SendGiveItemPacket(dstChrID, attachedInvenType, attachedItemSlotPos, attachedItemCount) else: net.SendExchangeStartPacket(dstChrID) net.SendExchangeItemAddPacket(attachedInvenType, attachedItemSlotPos, 0) else: self.__DropItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount) def __PutMoney(self, attachedType, attachedMoney, dstChrID): if True == chr.HasInstance(dstChrID) and player.GetMainCharacterIndex() != dstChrID: net.SendExchangeStartPacket(dstChrID) net.SendExchangeElkAddPacket(attachedMoney) else: self.__DropMoney(attachedType, attachedMoney) def __DropMoney(self, attachedType, attachedMoney): # PRIVATESHOP_DISABLE_ITEM_DROP - 개인상점 열고 있는 동안 아이템 버림 방지 if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) return # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP if attachedMoney>=1000: self.stream.popupWindow.Close() self.stream.popupWindow.Open(localeInfo.DROP_MONEY_FAILURE_1000_OVER, 0, localeInfo.UI_OK) return itemDropQuestionDialog = uiCommon.QuestionDialog() itemDropQuestionDialog.SetText(localeInfo.DO_YOU_DROP_MONEY % (attachedMoney)) itemDropQuestionDialog.SetAcceptEvent(lambda arg=True: self.RequestDropItem(arg)) itemDropQuestionDialog.SetCancelEvent(lambda arg=False: self.RequestDropItem(arg)) itemDropQuestionDialog.Open() itemDropQuestionDialog.dropType = attachedType itemDropQuestionDialog.dropCount = attachedMoney itemDropQuestionDialog.dropNumber = player.ITEM_MONEY self.itemDropQuestionDialog = itemDropQuestionDialog def __DropItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount): # PRIVATESHOP_DISABLE_ITEM_DROP - 개인상점 열고 있는 동안 아이템 버림 방지 if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) return # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP if player.SLOT_TYPE_INVENTORY == attachedType and player.IsEquipmentSlot(attachedItemSlotPos): self.stream.popupWindow.Close() self.stream.popupWindow.Open(localeInfo.DROP_ITEM_FAILURE_EQUIP_ITEM, 0, localeInfo.UI_OK) else: if player.SLOT_TYPE_INVENTORY == attachedType: dropItemIndex = player.GetItemIndex(attachedItemSlotPos) item.SelectItem(dropItemIndex) dropItemName = item.GetItemName() ## Question Text questionText = localeInfo.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount) ## Dialog itemDropQuestionDialog = uiCommon.QuestionDialog() itemDropQuestionDialog.SetText(questionText) itemDropQuestionDialog.SetAcceptEvent(lambda arg=True: self.RequestDropItem(arg)) itemDropQuestionDialog.SetCancelEvent(lambda arg=False: self.RequestDropItem(arg)) itemDropQuestionDialog.Open() itemDropQuestionDialog.dropType = attachedType itemDropQuestionDialog.dropNumber = attachedItemSlotPos itemDropQuestionDialog.dropCount = attachedItemCount self.itemDropQuestionDialog = itemDropQuestionDialog constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1) elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType: dropItemIndex = player.GetItemIndex(player.DRAGON_SOUL_INVENTORY, attachedItemSlotPos) item.SelectItem(dropItemIndex) dropItemName = item.GetItemName() ## Question Text questionText = localeInfo.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount) ## Dialog itemDropQuestionDialog = uiCommon.QuestionDialog() itemDropQuestionDialog.SetText(questionText) itemDropQuestionDialog.SetAcceptEvent(lambda arg=True: self.RequestDropItem(arg)) itemDropQuestionDialog.SetCancelEvent(lambda arg=False: self.RequestDropItem(arg)) itemDropQuestionDialog.Open() itemDropQuestionDialog.dropType = attachedType itemDropQuestionDialog.dropNumber = attachedItemSlotPos itemDropQuestionDialog.dropCount = attachedItemCount self.itemDropQuestionDialog = itemDropQuestionDialog constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1) def RequestDropItem(self, answer): if not self.itemDropQuestionDialog: return if answer: dropType = self.itemDropQuestionDialog.dropType dropCount = self.itemDropQuestionDialog.dropCount dropNumber = self.itemDropQuestionDialog.dropNumber if player.SLOT_TYPE_INVENTORY == dropType: if dropNumber == player.ITEM_MONEY: net.SendGoldDropPacketNew(dropCount) snd.PlaySound("sound/ui/money.wav") else: # PRIVATESHOP_DISABLE_ITEM_DROP self.__SendDropItemPacket(dropNumber, dropCount) # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == dropType: # PRIVATESHOP_DISABLE_ITEM_DROP self.__SendDropItemPacket(dropNumber, dropCount, player.DRAGON_SOUL_INVENTORY) # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP self.itemDropQuestionDialog.Close() self.itemDropQuestionDialog = None constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0) # PRIVATESHOP_DISABLE_ITEM_DROP def __SendDropItemPacket(self, itemVNum, itemCount, itemInvenType = player.INVENTORY): if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) return net.SendItemDropPacketNew(itemInvenType, itemVNum, itemCount) # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP def OnMouseRightButtonDown(self): self.CheckFocus() if True == mouseModule.mouseController.isAttached(): mouseModule.mouseController.DeattachObject() else: player.SetMouseState(player.MBT_RIGHT, player.MBS_PRESS) return True def OnMouseRightButtonUp(self): if True == mouseModule.mouseController.isAttached(): return True player.SetMouseState(player.MBT_RIGHT, player.MBS_CLICK) return True def OnMouseMiddleButtonDown(self): player.SetMouseMiddleButtonState(player.MBS_PRESS) def OnMouseMiddleButtonUp(self): player.SetMouseMiddleButtonState(player.MBS_CLICK) def OnUpdate(self): app.UpdateGame() if self.mapNameShower.IsShow(): self.mapNameShower.Update() if self.isShowDebugInfo: self.UpdateDebugInfo() if self.enableXMasBoom: self.__XMasBoom_Update() self.interface.BUILD_OnUpdate() def UpdateDebugInfo(self): # # 캐릭터 좌표 및 FPS 출력 (x, y, z) = player.GetMainCharacterPosition() nUpdateTime = app.GetUpdateTime() nUpdateFPS = app.GetUpdateFPS() nRenderFPS = app.GetRenderFPS() nFaceCount = app.GetFaceCount() fFaceSpeed = app.GetFaceSpeed() nST=background.GetRenderShadowTime() (fAveRT, nCurRT) = app.GetRenderTime() (iNum, fFogStart, fFogEnd, fFarCilp) = background.GetDistanceSetInfo() (iPatch, iSplat, fSplatRatio, sTextureNum) = background.GetRenderedSplatNum() if iPatch == 0: iPatch = 1 #(dwRenderedThing, dwRenderedCRC) = background.GetRenderedGraphicThingInstanceNum() self.PrintCoord.SetText("Coordinate: %.2f %.2f %.2f ATM: %d" % (x, y, z, app.GetAvailableTextureMemory()/(1024*1024))) xMouse, yMouse = wndMgr.GetMousePosition() self.PrintMousePos.SetText("MousePosition: %d %d" % (xMouse, yMouse)) self.FrameRate.SetText("UFPS: %3d UT: %3d FS %.2f" % (nUpdateFPS, nUpdateTime, fFaceSpeed)) if fAveRT>1.0: self.Pitch.SetText("RFPS: %3d RT:%.2f(%3d) FC: %d(%.2f) " % (nRenderFPS, fAveRT, nCurRT, nFaceCount, nFaceCount/fAveRT)) self.Splat.SetText("PATCH: %d SPLAT: %d BAD(%.2f)" % (iPatch, iSplat, fSplatRatio)) #self.Pitch.SetText("Pitch: %.2f" % (app.GetCameraPitch()) #self.TextureNum.SetText("TN : %s" % (sTextureNum)) #self.ObjectNum.SetText("GTI : %d, CRC : %d" % (dwRenderedThing, dwRenderedCRC)) self.ViewDistance.SetText("Num : %d, FS : %f, FE : %f, FC : %f" % (iNum, fFogStart, fFogEnd, fFarCilp)) def OnRender(self): app.RenderGame() if self.console.Console.collision: background.RenderCollision() chr.RenderCollision() (x, y) = app.GetCursorPosition() ######################## # Picking ######################## textTail.UpdateAllTextTail() if True == wndMgr.IsPickedWindow(self.hWnd): self.PickingCharacterIndex = chr.Pick() if -1 != self.PickingCharacterIndex: textTail.ShowCharacterTextTail(self.PickingCharacterIndex) if 0 != self.targetBoard.GetTargetVID(): textTail.ShowCharacterTextTail(self.targetBoard.GetTargetVID()) # ADD_ALWAYS_SHOW_NAME if not self.__IsShowName(): self.PickingItemIndex = item.Pick() if -1 != self.PickingItemIndex: textTail.ShowItemTextTail(self.PickingItemIndex) # END_OF_ADD_ALWAYS_SHOW_NAME ## Show all name in the range # ADD_ALWAYS_SHOW_NAME if self.__IsShowName(): textTail.ShowAllTextTail() self.PickingItemIndex = textTail.Pick(x, y) # END_OF_ADD_ALWAYS_SHOW_NAME textTail.UpdateShowingTextTail() textTail.ArrangeTextTail() if -1 != self.PickingItemIndex: textTail.SelectItemName(self.PickingItemIndex) grp.PopState() grp.SetInterfaceRenderState() textTail.Render() textTail.HideAllTextTail() def OnPressEscapeKey(self): if app.TARGET == app.GetCursor(): app.SetCursor(app.NORMAL) elif True == mouseModule.mouseController.isAttached(): mouseModule.mouseController.DeattachObject() else: self.interface.OpenSystemDialog() return True def OnIMEReturn(self): if app.IsPressed(app.DIK_LSHIFT): self.interface.OpenWhisperDialogWithoutTarget() else: self.interface.ToggleChat() return True def OnPressExitKey(self): self.interface.ToggleSystemDialog() return True ## BINARY CALLBACK ###################################################################################### # WEDDING def BINARY_LoverInfo(self, name, lovePoint): if self.interface.wndMessenger: self.interface.wndMessenger.OnAddLover(name, lovePoint) if self.affectShower: self.affectShower.SetLoverInfo(name, lovePoint) def BINARY_UpdateLovePoint(self, lovePoint): if self.interface.wndMessenger: self.interface.wndMessenger.OnUpdateLovePoint(lovePoint) if self.affectShower: self.affectShower.OnUpdateLovePoint(lovePoint) # END_OF_WEDDING # QUEST_CONFIRM def BINARY_OnQuestConfirm(self, msg, timeout, pid): confirmDialog = uiCommon.QuestionDialogWithTimeLimit() confirmDialog.Open(msg, timeout) confirmDialog.SetAcceptEvent(lambda answer=True, pid=pid: net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide()) confirmDialog.SetCancelEvent(lambda answer=False, pid=pid: net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide()) self.confirmDialog = confirmDialog # END_OF_QUEST_CONFIRM # GIFT command def Gift_Show(self): self.interface.ShowGift() # CUBE def BINARY_Cube_Open(self, npcVNUM): self.currentCubeNPC = npcVNUM self.interface.OpenCubeWindow() if npcVNUM not in self.cubeInformation: net.SendChatPacket("/cube r_info") else: cubeInfoList = self.cubeInformation[npcVNUM] i = 0 for cubeInfo in cubeInfoList: self.interface.wndCube.AddCubeResultItem(cubeInfo["vnum"], cubeInfo["count"]) j = 0 for materialList in cubeInfo["materialList"]: for materialInfo in materialList: itemVnum, itemCount = materialInfo self.interface.wndCube.AddMaterialInfo(i, j, itemVnum, itemCount) j = j + 1 i = i + 1 self.interface.wndCube.Refresh() def BINARY_Cube_Close(self): self.interface.CloseCubeWindow() # 제작에 필요한 골드, 예상되는 완성품의 VNUM과 개수 정보 update def BINARY_Cube_UpdateInfo(self, gold, itemVnum, count): self.interface.UpdateCubeInfo(gold, itemVnum, count) def BINARY_Cube_Succeed(self, itemVnum, count): print "큐브 제작 성공" self.interface.SucceedCubeWork(itemVnum, count) pass def BINARY_Cube_Failed(self): print "큐브 제작 실패" self.interface.FailedCubeWork() pass def BINARY_Cube_ResultList(self, npcVNUM, listText): # ResultList Text Format : 72723,1/72725,1/72730.1/50001,5 이런식으로 "/" 문자로 구분된 리스트를 줌 #print listText if npcVNUM == 0: npcVNUM = self.currentCubeNPC self.cubeInformation[npcVNUM] = [] try: for eachInfoText in listText.split("/"): eachInfo = eachInfoText.split(",") itemVnum = int(eachInfo[0]) itemCount = int(eachInfo[1]) self.cubeInformation[npcVNUM].append({"vnum": itemVnum, "count": itemCount}) self.interface.wndCube.AddCubeResultItem(itemVnum, itemCount) resultCount = len(self.cubeInformation[npcVNUM]) requestCount = 7 modCount = resultCount % requestCount splitCount = resultCount / requestCount for i in xrange(splitCount): #print("/cube r_info %d %d" % (i * requestCount, requestCount)) net.SendChatPacket("/cube r_info %d %d" % (i * requestCount, requestCount)) if 0 < modCount: #print("/cube r_info %d %d" % (splitCount * requestCount, modCount)) net.SendChatPacket("/cube r_info %d %d" % (splitCount * requestCount, modCount)) except RuntimeError, msg: dbg.TraceError(msg) return 0 pass def BINARY_Cube_MaterialInfo(self, startIndex, listCount, listText): # Material Text Format : 125,1|126,2|127,2|123,5&555,5&555,4/120000 try: #print listText if 3 > len(listText): dbg.TraceError("Wrong Cube Material Infomation") return 0 eachResultList = listText.split("@") cubeInfo = self.cubeInformation[self.currentCubeNPC] itemIndex = 0 for eachResultText in eachResultList: cubeInfo[startIndex + itemIndex]["materialList"] = [[], [], [], [], []] materialList = cubeInfo[startIndex + itemIndex]["materialList"] gold = 0 splitResult = eachResultText.split("/") if 1 < len(splitResult): gold = int(splitResult[1]) #print "splitResult : ", splitResult eachMaterialList = splitResult[0].split("&") i = 0 for eachMaterialText in eachMaterialList: complicatedList = eachMaterialText.split("|") if 0 < len(complicatedList): for complicatedText in complicatedList: (itemVnum, itemCount) = complicatedText.split(",") itemVnum = int(itemVnum) itemCount = int(itemCount) self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount) materialList[i].append((itemVnum, itemCount)) else: itemVnum, itemCount = eachMaterialText.split(",") itemVnum = int(itemVnum) itemCount = int(itemCount) self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount) materialList[i].append((itemVnum, itemCount)) i = i + 1 itemIndex = itemIndex + 1 self.interface.wndCube.Refresh() except RuntimeError, msg: dbg.TraceError(msg) return 0 pass # END_OF_CUBE def BINARY_Acce_Open(self, npcVNUM): self.interface.OpenAcceWindow() def BINARY_Acce_Close(self): self.interface.CloseAcceWindow() def BINARY_Acce_UpdateInfo(self, gold, itemVnum, count, rItemVnum, rCount): self.interface.UpdateAcceInfo(gold, itemVnum, count, rItemVnum, rCount) def BINARY_Acce_Succeed(self, itemVnum, count): print "La cr?tion de l'?ole a r?ssi !" self.interface.SucceedAcceWork(itemVnum, count) pass def BINARY_Acce_Failed(self): print "La cr?tion de l'?ole a ?hou?!" self.interface.FailedAcceWork() pass def BINARY_Acce_Abs_Open(self, npcVNUM): self.interface.OpenAcceAbsWindow() def BINARY_Acce_Abs_Succeed(self): print "L'absorption de l'?ole s'est faite avec succ? !" self.interface.SucceedAcceAbsWork() pass # 용혼석 def BINARY_Highlight_Item(self, inven_type, inven_pos): self.interface.Highligt_Item(inven_type, inven_pos) def BINARY_DragonSoulGiveQuilification(self): self.interface.DragonSoulGiveQuilification() def BINARY_DragonSoulRefineWindow_Open(self): self.interface.OpenDragonSoulRefineWindow() def BINARY_DragonSoulRefineWindow_RefineFail(self, reason, inven_type, inven_pos): self.interface.FailDragonSoulRefine(reason, inven_type, inven_pos) def BINARY_DragonSoulRefineWindow_RefineSucceed(self, inven_type, inven_pos): self.interface.SucceedDragonSoulRefine(inven_type, inven_pos) # END of DRAGON SOUL REFINE WINDOW def BINARY_SetBigMessage(self, message): self.interface.bigBoard.SetTip(message) def BINARY_SetTipMessage(self, message): self.interface.tipBoard.SetTip(message) def BINARY_AppendNotifyMessage(self, type): if not type in localeInfo.NOTIFY_MESSAGE: return chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.NOTIFY_MESSAGE[type]) def BINARY_Guild_EnterGuildArea(self, areaID): self.interface.BULID_EnterGuildArea(areaID) def BINARY_Guild_ExitGuildArea(self, areaID): self.interface.BULID_ExitGuildArea(areaID) def BINARY_GuildWar_OnSendDeclare(self, guildID): pass def BINARY_GuildWar_OnRecvDeclare(self, guildID, warType): mainCharacterName = player.GetMainCharacterName() masterName = guild.GetGuildMasterName() if mainCharacterName == masterName: self.__GuildWar_OpenAskDialog(guildID, warType) def BINARY_GuildWar_OnRecvPoint(self, gainGuildID, opponentGuildID, point): self.interface.OnRecvGuildWarPoint(gainGuildID, opponentGuildID, point) def BINARY_GuildWar_OnStart(self, guildSelf, guildOpp): self.interface.OnStartGuildWar(guildSelf, guildOpp) def BINARY_GuildWar_OnEnd(self, guildSelf, guildOpp): self.interface.OnEndGuildWar(guildSelf, guildOpp) def BINARY_BettingGuildWar_SetObserverMode(self, isEnable): self.interface.BINARY_SetObserverMode(isEnable) def BINARY_BettingGuildWar_UpdateObserverCount(self, observerCount): self.interface.wndMiniMap.UpdateObserverCount(observerCount) def __GuildWar_UpdateMemberCount(self, guildID1, memberCount1, guildID2, memberCount2, observerCount): guildID1 = int(guildID1) guildID2 = int(guildID2) memberCount1 = int(memberCount1) memberCount2 = int(memberCount2) observerCount = int(observerCount) self.interface.UpdateMemberCount(guildID1, memberCount1, guildID2, memberCount2) self.interface.wndMiniMap.UpdateObserverCount(observerCount) def __GuildWar_OpenAskDialog(self, guildID, warType): guildName = guild.GetGuildName(guildID) # REMOVED_GUILD_BUG_FIX if "Noname" == guildName: return # END_OF_REMOVED_GUILD_BUG_FIX import uiGuild questionDialog = uiGuild.AcceptGuildWarDialog() questionDialog.SAFE_SetAcceptEvent(self.__GuildWar_OnAccept) questionDialog.SAFE_SetCancelEvent(self.__GuildWar_OnDecline) questionDialog.Open(guildName, warType) self.guildWarQuestionDialog = questionDialog def __GuildWar_CloseAskDialog(self): self.guildWarQuestionDialog.Close() self.guildWarQuestionDialog = None def __GuildWar_OnAccept(self): guildName = self.guildWarQuestionDialog.GetGuildName() net.SendChatPacket("/war " + guildName) self.__GuildWar_CloseAskDialog() return 1 def __GuildWar_OnDecline(self): guildName = self.guildWarQuestionDialog.GetGuildName() net.SendChatPacket("/nowar " + guildName) self.__GuildWar_CloseAskDialog() return 1 ## BINARY CALLBACK ###################################################################################### def __ServerCommand_Build(self): serverCommandList={ "energysystem" : self.__energysystem, "ConsoleEnable" : self.__Console_Enable, "DayMode" : self.__DayMode_Update, "PRESERVE_DayMode" : self.__PRESERVE_DayMode_Update, "CloseRestartWindow" : self.__RestartDialog_Close, "OpenPrivateShop" : self.__PrivateShop_Open, "PartyHealReady" : self.PartyHealReady, "ShowMeSafeboxPassword" : self.AskSafeboxPassword, "CloseSafebox" : self.CommandCloseSafebox, # ITEM_MALL "CloseMall" : self.CommandCloseMall, "ShowMeMallPassword" : self.AskMallPassword, "item_mall" : self.__ItemMall_Open, # END_OF_ITEM_MALL "RefineSuceeded" : self.RefineSuceededMessage, "RefineFailed" : self.RefineFailedMessage, "xmas_snow" : self.__XMasSnow_Enable, "xmas_boom" : self.__XMasBoom_Enable, "xmas_song" : self.__XMasSong_Enable, "xmas_tree" : self.__XMasTree_Enable, "newyear_boom" : self.__XMasBoom_Enable, "PartyRequest" : self.__PartyRequestQuestion, "PartyRequestDenied" : self.__PartyRequestDenied, "horse_state" : self.__Horse_UpdateState, "hide_horse_state" : self.__Horse_HideState, "WarUC" : self.__GuildWar_UpdateMemberCount, "test_server" : self.__EnableTestServerFlag, "mall" : self.__InGameShop_Show, "PetEvolution" : self.SetPetEvolution, "PetName" : self.SetPetName, "PetLevel" : self.SetPetLevel, "PetDuration" : self.SetPetDuration, "PetBonus" : self.SetPetBonus, "PetSkill" : self.SetPetskill, "PetIcon" : self.SetPetIcon, "PetExp" : self.SetPetExp, "PetUnsummon" : self.PetUnsummon, "OpenPetIncubator" : self.OpenPetIncubator, # WEDDING "lover_login" : self.__LoginLover, "lover_logout" : self.__LogoutLover, "lover_near" : self.__LoverNear, "lover_far" : self.__LoverFar, "lover_divorce" : self.__LoverDivorce, "PlayMusic" : self.__PlayMusic, # END_OF_WEDDING # PRIVATE_SHOP_PRICE_LIST "MyShopPriceList" : self.__PrivateShop_PriceList, # END_OF_PRIVATE_SHOP_PRICE_LIST "AcceMessage" : self.AcceMessage, "AcceAbsMessage" : self.AcceAbsMessage, } self.serverCommander=stringCommander.Analyzer() for serverCommandItem in serverCommandList.items(): self.serverCommander.SAFE_RegisterCallBack( serverCommandItem[0], serverCommandItem[1] ) def BINARY_ServerCommand_Run(self, line): #dbg.TraceError(line) try: #print " BINARY_ServerCommand_Run", line return self.serverCommander.Run(line) except RuntimeError, msg: dbg.TraceError(msg) return 0 def __ProcessPreservedServerCommand(self): try: command = net.GetPreservedServerCommand() while command: print " __ProcessPreservedServerCommand", command self.serverCommander.Run(command) command = net.GetPreservedServerCommand() except RuntimeError, msg: dbg.TraceError(msg) return 0 def PartyHealReady(self): self.interface.PartyHealReady() def AskSafeboxPassword(self): self.interface.AskSafeboxPassword() # ITEM_MALL def AskMallPassword(self): self.interface.AskMallPassword() def __ItemMall_Open(self): self.interface.OpenItemMall(); def CommandCloseMall(self): self.interface.CommandCloseMall() # END_OF_ITEM_MALL def AcceMessage(self): snd.PlaySound("sound/ui/make_soket.wav") self.PopupMessage(localeInfo.ACCE_DEL_SERVEITEM) def AcceAbsMessage(self): snd.PlaySound("sound/ui/make_soket.wav") self.PopupMessage(localeInfo.ACCE_DEL_ABSORDITEM) def RefineSuceededMessage(self): snd.PlaySound("sound/ui/make_soket.wav") self.PopupMessage(localeInfo.REFINE_SUCCESS) def RefineFailedMessage(self): snd.PlaySound("sound/ui/jaeryun_fail.wav") self.PopupMessage(localeInfo.REFINE_FAILURE) def CommandCloseSafebox(self): self.interface.CommandCloseSafebox() # PRIVATE_SHOP_PRICE_LIST def __PrivateShop_PriceList(self, itemVNum, itemPrice): uiPrivateShopBuilder.SetPrivateShopItemPrice(itemVNum, itemPrice) # END_OF_PRIVATE_SHOP_PRICE_LIST def SetPetEvolution(self, evo): petname = ["Bebe", "Sauvage", "Courageux", "Heroique"] self.petmain.SetEvolveName(petname[int(evo)]) def SetPetName(self, name): if len(name) > 1 and name != "": self.petmini.Show() self.petmain.SetName(name) def SetPetLevel(self, level): self.petmain.SetLevel(level) def SetPetDuration(self, dur, durt): if int(durt) > 0: self.petmini.SetDuration(dur, durt) self.petmain.SetDuration(dur, durt) def SetPetBonus(self, hp, dif, sp): self.petmain.SetHp(hp) self.petmain.SetDef(dif) self.petmain.SetSp(sp) def SetPetskill(self, slot, idx, lv): if int(lv) > 0: self.petmini.SetSkill(slot, idx, lv) self.petmain.SetSkill(slot, idx, lv) self.affectShower.BINARY_NEW_AddAffect(5400+int(idx),int(constInfo.LASTAFFECT_POINT)+1,int(constInfo.LASTAFFECT_VALUE)+1, 0) if int(slot)==0: constInfo.SKILL_PET1=5400+int(idx) if int(slot)==1: constInfo.SKILL_PET2=5400+int(idx) if int(slot)==2: constInfo.SKILL_PET3=5400+int(idx) def SetPetIcon(self, vnum): if int(vnum) > 0: self.petmini.SetImageSlot(vnum) self.petmain.SetImageSlot(vnum) def SetPetExp(self, exp, expi, exptot): if int(exptot) > 0: self.petmini.SetExperience(exp, expi, exptot) self.petmain.SetExperience(exp, expi, exptot) def PetUnsummon(self): self.petmini.SetDefaultInfo() self.petmini.Close() self.petmain.SetDefaultInfo() self.affectShower.BINARY_NEW_RemoveAffect(int(constInfo.SKILL_PET1),0) self.affectShower.BINARY_NEW_RemoveAffect(int(constInfo.SKILL_PET2),0) self.affectShower.BINARY_NEW_RemoveAffect(int(constInfo.SKILL_PET3),0) constInfo.SKILL_PET1 = 0 constInfo.SKILL_PET2 = 0 constInfo.SKILL_PET3 = 0 def OpenPetMainGui(self): self.petmain.Show() self.petmain.SetTop() def OpenPetIncubator(self, pet_new = 0): import uipetincubatrice self.petinc = uipetincubatrice.PetSystemIncubator(pet_new) self.petinc.Show() self.petinc.SetTop() def OpenPetMini(self): self.petmini.Show() self.petmini.SetTop() def OpenPetFeed(self): self.feedwind = uipetfeed.PetFeedWindow() self.feedwind.Show() self.feedwind.SetTop() def Gift_Show(self): if constInfo.PET_MAIN == 0: self.petmain.Show() constInfo.PET_MAIN =1 self.petmain.SetTop() else: self.petmain.Hide() constInfo.PET_MAIN =0 def __Horse_HideState(self): self.affectShower.SetHorseState(0, 0, 0) def __Horse_UpdateState(self, level, health, battery): self.affectShower.SetHorseState(int(level), int(health), int(battery)) def __IsXMasMap(self): mapDict = ( "metin2_map_n_flame_01", "metin2_map_n_desert_01", "metin2_map_spiderdungeon", "metin2_map_deviltower1", ) if background.GetCurrentMapName() in mapDict: return False return True def __XMasSnow_Enable(self, mode): self.__XMasSong_Enable(mode) if "1"==mode: if not self.__IsXMasMap(): return print "XMAS_SNOW ON" background.EnableSnow(1) else: print "XMAS_SNOW OFF" background.EnableSnow(0) def __XMasBoom_Enable(self, mode): if "1"==mode: if not self.__IsXMasMap(): return print "XMAS_BOOM ON" self.__DayMode_Update("dark") self.enableXMasBoom = True self.startTimeXMasBoom = app.GetTime() else: print "XMAS_BOOM OFF" self.__DayMode_Update("light") self.enableXMasBoom = False def __XMasTree_Enable(self, grade): print "XMAS_TREE ", grade background.SetXMasTree(int(grade)) def __XMasSong_Enable(self, mode): if "1"==mode: print "XMAS_SONG ON" XMAS_BGM = "xmas.mp3" if app.IsExistFile("BGM/" + XMAS_BGM)==1: if musicInfo.fieldMusic != "": snd.FadeOutMusic("BGM/" + musicInfo.fieldMusic) musicInfo.fieldMusic=XMAS_BGM snd.FadeInMusic("BGM/" + musicInfo.fieldMusic) else: print "XMAS_SONG OFF" if musicInfo.fieldMusic != "": snd.FadeOutMusic("BGM/" + musicInfo.fieldMusic) musicInfo.fieldMusic=musicInfo.METIN2THEMA snd.FadeInMusic("BGM/" + musicInfo.fieldMusic) def __RestartDialog_Close(self): self.interface.CloseRestartDialog() def __Console_Enable(self): constInfo.CONSOLE_ENABLE = True self.consoleEnable = True app.EnableSpecialCameraMode() ui.EnablePaste(True) ## PrivateShop def __PrivateShop_Open(self): self.interface.OpenPrivateShopInputNameDialog() def BINARY_PrivateShop_Appear(self, vid, text): self.interface.AppearPrivateShop(vid, text) def BINARY_PrivateShop_Disappear(self, vid): self.interface.DisappearPrivateShop(vid) ## DayMode def __PRESERVE_DayMode_Update(self, mode): if "light"==mode: background.SetEnvironmentData(0) elif "dark"==mode: if not self.__IsXMasMap(): return background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT) background.SetEnvironmentData(1) def __DayMode_Update(self, mode): if "light"==mode: self.curtain.SAFE_FadeOut(self.__DayMode_OnCompleteChangeToLight) elif "dark"==mode: if not self.__IsXMasMap(): return self.curtain.SAFE_FadeOut(self.__DayMode_OnCompleteChangeToDark) def __DayMode_OnCompleteChangeToLight(self): background.SetEnvironmentData(0) self.curtain.FadeIn() def __DayMode_OnCompleteChangeToDark(self): background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT) background.SetEnvironmentData(1) self.curtain.FadeIn() ## XMasBoom def __XMasBoom_Update(self): self.BOOM_DATA_LIST = ( (2, 5), (5, 2), (7, 3), (10, 3), (20, 5) ) if self.indexXMasBoom >= len(self.BOOM_DATA_LIST): return boomTime = self.BOOM_DATA_LIST[self.indexXMasBoom][0] boomCount = self.BOOM_DATA_LIST[self.indexXMasBoom][1] if app.GetTime() - self.startTimeXMasBoom > boomTime: self.indexXMasBoom += 1 for i in xrange(boomCount): self.__XMasBoom_Boom() def __XMasBoom_Boom(self): x, y, z = player.GetMainCharacterPosition() randX = app.GetRandom(-150, 150) randY = app.GetRandom(-150, 150) snd.PlaySound3D(x+randX, -y+randY, z, "sound/common/etc/salute.mp3") def __PartyRequestQuestion(self, vid): vid = int(vid) partyRequestQuestionDialog = uiCommon.QuestionDialog() partyRequestQuestionDialog.SetText(chr.GetNameByVID(vid) + localeInfo.PARTY_DO_YOU_ACCEPT) partyRequestQuestionDialog.SetAcceptText(localeInfo.UI_ACCEPT) partyRequestQuestionDialog.SetCancelText(localeInfo.UI_DENY) partyRequestQuestionDialog.SetAcceptEvent(lambda arg=True: self.__AnswerPartyRequest(arg)) partyRequestQuestionDialog.SetCancelEvent(lambda arg=False: self.__AnswerPartyRequest(arg)) partyRequestQuestionDialog.Open() partyRequestQuestionDialog.vid = vid self.partyRequestQuestionDialog = partyRequestQuestionDialog def __AnswerPartyRequest(self, answer): if not self.partyRequestQuestionDialog: return vid = self.partyRequestQuestionDialog.vid if answer: net.SendChatPacket("/party_request_accept " + str(vid)) else: net.SendChatPacket("/party_request_deny " + str(vid)) self.partyRequestQuestionDialog.Close() self.partyRequestQuestionDialog = None def __PartyRequestDenied(self): self.PopupMessage(localeInfo.PARTY_REQUEST_DENIED) def __EnableTestServerFlag(self): app.EnableTestServerFlag() def __InGameShop_Show(self, url): if constInfo.IN_GAME_SHOP_ENABLE: self.interface.OpenWebWindow(url) # WEDDING def __LoginLover(self): if self.interface.wndMessenger: self.interface.wndMessenger.OnLoginLover() def __LogoutLover(self): if self.interface.wndMessenger: self.interface.wndMessenger.OnLogoutLover() if self.affectShower: self.affectShower.HideLoverState() def __LoverNear(self): if self.affectShower: self.affectShower.ShowLoverState() def __LoverFar(self): if self.affectShower: self.affectShower.HideLoverState() def __LoverDivorce(self): if self.interface.wndMessenger: self.interface.wndMessenger.ClearLoverInfo() if self.affectShower: self.affectShower.ClearLoverState() def __PlayMusic(self, flag, filename): flag = int(flag) if flag: snd.FadeOutAllMusic() musicInfo.SaveLastPlayFieldMusic() snd.FadeInMusic("BGM/" + filename) else: snd.FadeOutAllMusic() musicInfo.LoadLastPlayFieldMusic() snd.FadeInMusic("BGM/" + musicInfo.fieldMusic) # END_OF_WEDDING def __energysystem(self, value): import constinfo constinfo.ENERGY_TYPE = int(value[:value.find("|")]) constinfo.ENERGY = int(value[value.find("|") + 1:value.find("#")]) constinfo.ENERGY_END_TIME = int(value[value.find("#") + 1:]) def __toggleSwitchbot(self): if self.switchbot.bot_shown == 1: self.switchbot.Hide() else: self.switchbot.Show()
  22. Version des Files : XXX Hello à tous, 1. Description du dysfonctionnement / Question : j'esseye d'implanter une armure, elle a le même GR2 qu'une armure déjà implanter. Je veux juste changer la texture, j'ai tester la texture sur l'autre armure cela marche. Mais une fois l'armure implanter je ne la vois pas, ni le gr2 ni la texture. j'ai essayer de mettre d'autre valeur dans l'item proto value 3 pour voir si l'item marcher avec d'autre ShapeIndex mais aucune armure ne s'affiche, par contre pour celle qui etait implanter si je change le shapeIndex ca marche x) quelqu'un serrai d'ou viens le soucis ? 2. SysErr ( Client / Server ) / SysLog ( Server ) Vide Merci à tous, Cordialement
  23. Version des Files : 2014- Hello à tous, 1. Description du dysfonctionnement / Question : Le grade amicale,noble,chevalier n'apparaisse pas a côté du pseudo quelqu'un aurait une idée s'il vous plaît ? Merci à tous, Cordialement
  24. Version des Files : 2016 by Team FE V3.0 Hello à tous, 1. Description du dysfonctionnement / Question : Après plusieurs heures de recherches finalement infructueuses, je m'en remets à vous, qui aurez peut-être une piste de solution... Je cherche à compiler mon client après quelques modifications (passage des level en int à la place de byte), sous VS2019. J'utilise bien sûr les sources client associées à ce topic : J'ai tenté de composer avec le tuto suivant : [Hidden Content] Finalement, je suis arrivé à compiler, mais mon client crash avec une erreur liée à une "dlgQuestion". Un tutoriel supposait qu'il fallait supprimer les parties liées à la "dlgQuestion", mais après ça, mon client part en vrille (cf. partie Screenshots). Ma question est donc la suivante : si quelqu'un compile sous VS2019 avec les sources client de la Team FE 2016 V3.0, est-il possible de m'aiguiller sur ce qu'il faut faire pour compiler normalement ? 2. SysErr ( Client / Server ) / SysLog ( Server ) Les SysErr et SysLog ne montrent rien d'anormal (sauf pour la dlgQuestion bien sûr !). 4. Screenshots ? Merci à tous, Cordialement
  25. Version des Files : 2014+ Hello à tous, 1. Description du dysfonctionnement / Question : Bonjour à tous besoin d'un petit conseil j'ai des items non jetable ni échangeable je sais que cela se passe dans navicat et case antiflag, le problème et que je ne sais quoi mettre vous savez pas ou je peut trouver l'antiflag exact ? Merci à tous, Cordialement

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.