Jump to content
metin2dev
Metin2International

Leaderboard


Popular Content

Showing content with the highest reputation since 12/09/2018 in all areas

  1. 2 points
    M: https://i.gyazo.com/d84d73b41414acb3e4570fb9ae7fd049.mp4 F: https://i.gyazo.com/b3ae946b25c4b0f81c6d4dcd1a4b9e29.mp4 GitHub repository: https://github.com/Vegas007/Metin2-Extended-Alignment-System
  2. 1 point
  3. 1 point
    Hello devs. I don't want to talk a lot about nothing, but I have to say what is this. With this little modification the party and the friend requests are cancelled automatically in seconds what you can change in the Open method. ( pyObj.Open(sec) ) Preview video: Make a backup before you are implementing it! And if you found a bug, please explain it. 0.) Open your uiCommon.py file and import chat module. 1.) Replace the whole QuestionDialogWithTimeLimit class in the uiCommon.py file with this: class QuestionDialogWithTimeLimit(QuestionDialog2): def __init__(self): ui.ScriptWindow.__init__(self) self.__CreateDialog() self.endTime = 0 self.timeOverMsg = 0 self.timeOverEvent = None self.timeOverEventArgs = None def __del__(self): QuestionDialog2.__del__(self) def __CreateDialog(self): pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "uiscript/questiondialog2.py") self.board = self.GetChild("board") self.textLine1 = self.GetChild("message1") self.textLine2 = self.GetChild("message2") self.acceptButton = self.GetChild("accept") self.cancelButton = self.GetChild("cancel") def Open(self, timeout): self.SetCenterPosition() self.SetTop() self.Show() self.endTime = app.GetTime() + timeout def SetTimeOverEvent(self, event, *args): self.timeOverEvent = event self.timeOverEventArgs = args def SetTimeOverMsg(self, msg): self.timeOverMsg = msg def OnTimeOver(self): if self.timeOverEvent: apply(self.timeOverEvent, self.timeOverEventArgs) if self.timeOverMsg: chat.AppendChat(chat.CHAT_TYPE_INFO, self.timeOverMsg) def OnUpdate(self): leftTime = max(0, self.endTime - app.GetTime()) self.SetText2(localeInfo.UI_LEFT_TIME % (leftTime)) if leftTime <= 0: self.OnTimeOver() 2.) Open your game.py file and replace each of these three methods to these: def OnMessengerAddFriendQuestion(self, name): messengerAddFriendQuestion = uiCommon.QuestionDialogWithTimeLimit() messengerAddFriendQuestion.SetText1(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND % (name)) messengerAddFriendQuestion.SetTimeOverMsg(localeInfo.MESSENGER_ADD_FRIEND_ANSWER_TIMEOVER) messengerAddFriendQuestion.SetTimeOverEvent(self.OnDenyAddFriend) messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend)) messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend)) messengerAddFriendQuestion.Open(10) messengerAddFriendQuestion.name = name self.messengerAddFriendQuestion = messengerAddFriendQuestion def RecvPartyInviteQuestion(self, leaderVID, leaderName): partyInviteQuestionDialog = uiCommon.QuestionDialogWithTimeLimit() partyInviteQuestionDialog.SetText1(leaderName + localeInfo.PARTY_DO_YOU_JOIN) partyInviteQuestionDialog.SetTimeOverMsg(localeInfo.PARTY_ANSWER_TIMEOVER) partyInviteQuestionDialog.SetTimeOverEvent(self.AnswerPartyInvite, False) partyInviteQuestionDialog.SetAcceptEvent(lambda arg=True: self.AnswerPartyInvite(arg)) partyInviteQuestionDialog.SetCancelEvent(lambda arg=False: self.AnswerPartyInvite(arg)) partyInviteQuestionDialog.Open(10) partyInviteQuestionDialog.partyLeaderVID = leaderVID self.partyInviteQuestionDialog = partyInviteQuestionDialog def BINARY_OnQuestConfirm(self, msg, timeout, pid): confirmDialog = uiCommon.QuestionDialogWithTimeLimit() confirmDialog.SetText1(msg) confirmDialog.Open(timeout) confirmDialog.SetAcceptEvent(lambda answer=True, pid=pid: m2net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide()) confirmDialog.SetCancelEvent(lambda answer=False, pid=pid: m2net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide()) self.confirmDialog = confirmDialog 3.) Open your locale/xy/locale_game.txt and add these if these aren't exists: MESSENGER_ADD_FRIEND_ANSWER_TIMEOVER Friend request was cancelled. PARTY_ANSWER_TIMEOVER Party invite was cancelled. Remove MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_2 line and change MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_1 with this: MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND %s added you as a friend, accept? At last take a look at your files and correct the net module calls and the True-False syntax. net <--> m2net, True <--> TRUE
  4. 1 point
    Hey. With this you can 12 Inventory Sites can change their freely used. A maximum of 65k Slot's are used. - Stands for Search and must be replaced with the + Game Source: Now the Client Source Path Client Source: So for me to use 12 slot's Image: Should any questions or problems you can give you welcome to contact. Even if you find bug's tells me this with me. Ps: The whole has been tested with no dragon stone alchemy should nevertheless go. The Python Part I hang on. Virustotal: https://www.virustotal.com/de/file/3a5a2bfe54aecd8398454fe70614093d153012e60a947be712871c3e2407464d/analysis/1440640111/ Download Python
  5. 1 point
    Hello guys.. I have a simple task for someone who knows from 3dsmax or simillar programs. I have a model of an object with textures and everything and all i need is to change it a little bit. I mean change its shape so it looks like something else. Can someone who knows how to do it contact me? I'm paying well if its done fast! Thanks everyone! facebook: Giannis Poriazis discord: Moon123 #0033 Skype: Γιαννης Ποριαζης
  6. 1 point
    For questiondialog go root/uishop.py find def AskBuyItem(self, slotPos): Add this control before itemBuyQuestionDialog = uiCommon.QuestionDialog(): if shop.IsMainPlayerPrivateShop(): return For Server-Side go shop.cpp Find in int CShop::Buy(LPCHARACTER ch, BYTE pos) if (IsPCShop()) { ///Add below if (m_pkPC == ch) return false; Not tested!
  7. 1 point
  8. 1 point
  9. 1 point
    Forget about all you used to know about Chest View System, this idea is more practical and simple.
  10. 1 point
    It isn't that great, but maybe will help someone: quest teleportation_ring begin state start begin when 70007.use begin say_title(item_name(70007)) say("") say("Alege unde vrei sã te teleportezi:") say("") local option = select("Teritorile comune", "Teritorile regatului", "Teritorile inamice", "Închide") if option == 4 then return elseif option == 1 then say_size(350, 380) say_title(item_name(70007)) local map = pc.get_map_index() local level = pc.get_level() local empire = pc.get_empire() local cost = math.floor(pc.get_level()*1000) if map == 181 or map == 182 or map == 183 then cost = 0 end if level < 10 then say("Hm... Cu nivelul actual,eºti încã[ENTER]prea slab pentru cãlãtorie în timp ºi spatiu.[ENTER]Vino înapoi atunci când sunteþi mai mari decât[ENTER]level 10. ") return end say("În cazul în care vrei sã fi teleportat? ") say_reward(string.format("Aceasta va costa %s Yang. ", cost)) say("") local guild_map_names = {"Jungrang", "Waryong", "Imha"} local guild_map_name = guild_map_names[empire] local sub_set = 0 if level < 30 then sub_set = select(guild_map_name, "Valea Seungryong(Lv.30)", "Deºertul Yongbi(Lv.35)", "Muntele Sohan(Lv.45)", "Închide") if sub_set == 5 then return end elseif level >= 30 and level < 45 then sub_set = select(guild_map_name, "Valea Seungryong(Lv.30)", "Deºertul Yongbi(Lv.35)", "Muntele Sohan(Lv.45)", "Temniþa pãianjenilor(Lv.50)", "Închide") if sub_set == 6 then return end elseif level >= 45 and level < 60 then sub_set = select(guild_map_name, "Valea Seungryong(Lv.30)", "Deºertul Yongbi(Lv.35)", "Muntele Sohan(Lv.45)", "Temniþa pãianjenilor(Lv.50)", "Turnul Demonilor(Lv.40)", "Închide") if sub_set == 7 then return end elseif level >= 60 and level < 70 then sub_set = select(guild_map_name, "Valea Seungryong(Lv.30)", "Deºertul Yongbi(Lv.35)", "Muntele Sohan(Lv.45)", "Temniþa pãianjenilor(Lv.50)", "Turnul Demonilor(Lv.40)", "Doyyumhwan(Lv.55)", "Pãdurea stafiilor(Lv.60)", "Închide") if sub_set == 9 then return end elseif level >= 70 and level < 75 then sub_set = select(guild_map_name, "Valea Seungryong(Lv.30)", "Deºertul Yongbi(Lv.35)", "Muntele Sohan(Lv.45)", "Temniþa pãianjenilor(Lv.50)", "Turnul Demonilor(Lv.40)", "Doyyumhwan(Lv.55)", "Pãdurea stafiilor(Lv.60)", "Tãrâmul Giganþilor(Lv.70)", "Pãdurea Roºie(Lv.70)", "Închide") if sub_set == 11 then return end elseif level >= 75 then sub_set = select(guild_map_name, "Valea Seungryong(Lv.30)", "Deºertul Yongbi(Lv.35)", "Muntele Sohan(Lv.45)", "Temniþa pãianjenilor(Lv.50)", "Turnul Demonilor(Lv.40)", "Doyyumhwan(Lv.55)", "Pãdurea stafiilor(Lv.60)", "Tãrâmul Giganþilor(Lv.70)", "Pãdurea Roºie(Lv.70)", "Grota Exilului(Lv.75)", "Închide") if sub_set == 12 then return end end if pc.get_gold() < cost then say_title(item_name(70007)) say("") say("Nu ai suficient yang.") say("") return end if pc.can_warp() == false then say("") say("Nu te poþi teleporta acum.") say("") return end pc.change_gold(-cost) local warplist = { {{135600, 4300}, {179500, 1000}, {271800, 13000},}, {{402100, 673900}, {270400, 739900}, {321300, 808000},}, {{217800, 627200}, {221900, 502700}, {344000, 502500},}, {{434200, 290600}, {375200, 174900}, {491800, 173600},}, {{60000, 496200}, {60000, 496200}, {60000, 496200},}, {{590500, 110500}, {590500, 110500}, {590500, 110500},}, {{599400, 756300}, {597800, 622200}, {730700, 689800},}, {{288400, 5800}, {288400, 5800}, {288400, 5800},}, {{828400, 763500}, {828400, 763500}, {828400, 763500},}, {{1119900, 70800}, {1119900, 70800}, {1119900, 70800},}, {{284300, 810000}, {284300, 810000}, {284300, 810000},}, } say_title(item_name(70007)) say("") say("Imediat vei fi teleportat...") say("") wait() pc.warp(warplist[sub_set][empire][1], warplist[sub_set][empire][2]) elseif option == 2 then local empire = pc.get_empire() local cost = math.floor(pc.get_level()*500) say_title(item_name(70007)) say("") say("În cazul în care vrei sã fi teleportat? ") say("") say_reward(string.format("Aceasta va costa %s Yang. ", cost)) say("") local sub_set2 = 3 if empire == 1 then sub_set2 = select("Satul Yongan", "Satul Yayang", "Biologul regatului", "Închide") elseif empire == 2 then sub_set2 = select("Satul Joan", "Satul Bokjung", "Biologul regatului", "Închide") elseif empire == 3 then sub_set2 = select("Satul Pyungmoo", "Satul Bakra", "Biologul regatului", "Închide") end if sub_set2 != 4 then if pc.can_warp() == false then say("") say("Nu te poþi teleporta acum.") say("") return end if pc.get_gold() < cost then say_title(item_name(70007)) say("") say("Nu ai suficient yang.") say("") return elseif sub_set2 == 1 then pc.changegold(-cost) say_title(item_name(70007)) say("") say("Imediat vei fi teleportat...") say("") wait() if empire == 1 then pc.warp(474300, 954800) elseif empire == 2 then pc.warp(63800, 166400) elseif empire == 3 then pc.warp(959900, 269200) end elseif sub_set2 == 2 then pc.changegold(-cost) say_title(item_name(70007)) say("") say("Imediat vei fi teleportat...") say("") wait() if empire == 1 then pc.warp(353100, 882900) elseif empire == 2 then pc.warp(145500, 240000) elseif empire == 3 then pc.warp(863900, 246000) end elseif sub_set2 == 3 then pc.changegold(-cost) say_title(item_name(70007)) say("") say("Imediat vei fi teleportat...") say("") wait() if empire == 1 then pc.warp(498500, 957000) elseif empire == 2 then pc.warp(89300, 182300) elseif empire == 3 then pc.warp(951100, 233400) end end end elseif option == 3 then local empire = pc.get_empire() local cost = math.floor(pc.get_level()*2000) say_title(item_name(70007)) say("") say("În cazul în care vrei sã fi teleportat? ") say("") say_reward(string.format("Aceasta va costa %s Yang. ", cost)) say("") if pc.get_empire() == 1 then sub_set = select("Satul Joan", "Satul Pyungmoo", "Închide") elseif pc.get_empire() == 2 then sub_set = select("Satul Yongan", "Satul Pyungmoo", "Închide") elseif pc.get_empire() == 3 then sub_set = select("Satul Yongan", "Satul Joan", "Închide") end if sub_set == 3 then return elseif sub_set == 1 then say_title(item_name(70007)) say("") if pc.get_gold() < cost then say("Nu ai suficient yang.") say("") return end if pc.can_warp() == false then say("") say("Nu te poþi teleporta acum.") say("") return end say("Imediat vei fi teleportat...") say("") wait() pc.change_gold(-cost) if pc.get_empire() == 1 then pc.warp(63800, 166400) elseif pc.get_empire() == 2 then pc.warp(474300, 954800) elseif pc.get_empire() == 3 then pc.warp(474300, 954800) end elseif sub_set == 2 then say_title(item_name(70007)) say("") if pc.get_gold() < cost then say("Nu ai suficient yang.") say("") return end if pc.can_warp() == false then say("") say("Nu te poþi teleporta acum.") say("") return end say("Imediat vei fi teleportat...") say("") wait() pc.change_gold(-cost) if pc.get_empire() == 1 then pc.warp(959900, 269200) elseif pc.get_empire() == 2 then pc.warp(959900, 269200) elseif pc.get_empire() == 3 then pc.warp(63800, 166400) end end end end end end
  11. 1 point
    if (type == DAMAGE_TYPE_POISON) { if (GetHP() - dam <= 0) { dam = GetHP() - 1; } } else if (type == DAMAGE_TYPE_BLEEDING) { if (GetHP() - dam <= 0) { dam = GetHP(); } } For your italian server tristano98 ò_ò (change the bugged skybox)
  12. 1 point
  13. 1 point
    I did not test it!!!!!! Open char.h and search: DWORD GetLastMoveTime() const { return m_dwLastMoveTime; } Add under: DWORD GetLastItemUseTime() const {return m_dwLastItemUseTime;} Search: DWORD m_dwLastMoveTime; Add under: DWORD m_dwLastItemUseTime; Open char.cpp file and search: m_dwPlayStartTime = m_dwLastMoveTime = get_dword_time(); Add under: m_dwLastItemUseTime = 0; Open char_item.cpp file and search: if (item->GetVnum() != 70302) { PIXEL_POSITION posWarp; int x = 0; int y = 0; double nDist = 0; const double nDistant = 5000.0; //±ÍČŻ±âľďşÎ if (item->GetVnum() == 22010) { x = item->GetSocket(0) - GetX(); y = item->GetSocket(1) - GetY(); } //±ÍČŻşÎ else if (item->GetVnum() == 22000) { SECTREE_MANAGER::instance().GetRecallPositionByEmpire(GetMapIndex(), GetEmpire(), posWarp); if (item->GetSocket(0) == 0) { x = posWarp.x - GetX(); y = posWarp.y - GetY(); } else { x = item->GetSocket(0) - GetX(); y = item->GetSocket(1) - GetY(); } } Add under: int CalcLastItemUseSec = (get_dword_time() - GetLastItemUseTime()) / 1000 + 0.5; if (CalcLastItemUseSec < 5) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("WAIT_5_SEC_TO_USE")); return false; }
  14. 1 point
    Official v18.5 XMas patch v18.5.6 r22630 Christmas pet, mount, costumes. New "miniboss" minigame gui + dungeon map. Download Full client: Download And please stop asking for root python files, I don't have them...
  15. 1 point
    Today I needed the original icon without the text on it, so I prepared it. I put it here on the forum, maybe it will also be useful to someone Download: https://mega.nz/#!DpFFyKzZ!MwMh_jZE8YAXemcrhIkMu6EA0eeYqOvRigkap6BDXys
  16. 1 point
    Hello ! I share a lot of work, a month and a week to correct the armor brilliance from level 0 to 70! Overview : Warriors : Shamans : Suras : Ninjas : Download : HERE ! Give me your opinion about this ! And sorry for my bad english I'm French Xayah,
  17. 1 point
    @xP3NG3Rx Your solution for hide weapon caused a little visual bug. You can see this bug when you buff yourself or another player. Skills are casted more faster than animation.
  18. 1 point
  19. 1 point
    "c++11" code, a little bit optimised maybe someone will be interested; void CPythonPlayer::PickCloseItemVector() { CInstanceBase * pkInstMain = NEW_GetMainActorPtr(); if (!pkInstMain) return; TPixelPosition kPPosMain; pkInstMain->NEW_GetPixelPosition(&kPPosMain); CPythonItem& rkItem = CPythonItem::Instance(); std::vector<DWORD> itemlist{ rkItem.GetCloseItemVector(pkInstMain->GetNameString(), kPPosMain)}; if (itemlist.empty()) return; for (auto &i : itemlist) SendClickItemVectorPacket(i); } std::vector<DWORD> CPythonItem::GetCloseItemVector(const std::string & myName, const TPixelPosition & c_rPixelPosition) { DWORD dwCloseItemDistance = 1000 * 1000; std::vector<DWORD> itemlist; for (auto &i : m_GroundItemInstanceMap) { TGroundItemInstance * pInstance = i.second; DWORD dwxDistance = DWORD(c_rPixelPosition.x - pInstance->v3EndPosition.x); DWORD dwyDistance = DWORD(c_rPixelPosition.y - (-pInstance->v3EndPosition.y)); DWORD dwDistance = DWORD(dwxDistance*dwxDistance + dwyDistance * dwyDistance); if (dwDistance < dwCloseItemDistance && (pInstance->stOwnership == "" || pInstance->stOwnership == myName)) { itemlist.push_back(i.first); } } return itemlist; // moving vector not explicit } void CPythonPlayer::SendClickItemVectorPacket(DWORD dwIID) { if (IsObserverMode()) return; CPythonNetworkStream& rkNetStream = CPythonNetworkStream::Instance(); rkNetStream.SendItemPickUpPacket(dwIID); }
  20. 1 point
    Why would anybody try to crack an antivirus? Guys? What? Really?
  21. 1 point
    Hello Community, this is my first tutorial ever and my english is very crappy, so I'll begin now without saying too much. What we need : ~InstanceBase.cpp (Clientsource) ~InstanceBase.h (Clientsource) ~playersettingmodule.py (Client root.e**) What we do : ~Lower the requested refine-level ~Add a new refine-effect HowTo : First of all, open the InstanceBase.cpp and search for "case CItemData::ITEM_TYPE_WEAPON:", for me it's in line 2690. Now replace the whole function with this : Then open the InstanceBase.h and search for "EFFECT_REFINED_NONE,", for me it's line 268. Replace everything with this : Then open the playersettingmodule.py and search for "chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+1, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7.mse")", for me it's line 391. Replace everything with this : That's all. Now the definition for everything : More weapons and definition : In line "7", where "if (vnum == ID)" is, you have to replace the "ID" with your Weapon ID. This only works for Swords and can be extended like this : InstanceBase.cpp InstanceBase.h playersettingmodule.py Now the definitions for everything : In InstanceBase.cpp and InstanceBase.h is everything self-explanatory I think, in playersettingmodule.py there it goes like this : For every weapon (sword/dagger/fan/bell/bow) is a own effect set, because they've different sizes. U have to edit the playersettingmodule.py where is "YOUR_EFFECT**.mse" to your effect, maybe to your direction where the effect is packed. The 2-hand-weapons will be handled the same way as the swords. Pictures : If u did it right, it should be like this : If you like the effect I use, you can get it from elitepvpers from xXDemonenXx. That's all. I hope you like my tutorial and understand everything, if you have any questions or problems, just let me know and I'll give my best to help you. Special thanks to Krusty. €: WARNING €: Fix effect doesn't disappear :
  22. 1 point
    Hi, everyone. Most people know when you are trying to connect the server with a lot of people, the server can not respond to you or something might go wrong. This example is same for warp too. Webzen did something about this too and I'd like to share it with you. What are exactly are we doing? If the client can not connect to the server, the client will wait one second to connect the server again. Open NetStream.cpp. Find Connect function and replace with this bool CNetworkStream::Connect(const CNetworkAddress& c_rkNetAddr, int limitSec) { Clear(); m_addr = c_rkNetAddr; m_sock = socket(AF_INET, SOCK_STREAM, 0); if (m_sock == INVALID_SOCKET) { Clear(); OnConnectFailure(); return false; } DWORD arg = 1; ioctlsocket(m_sock, FIONBIO, &arg); // Non-blocking mode if (connect(m_sock, reinterpret_cast<PSOCKADDR>(&m_addr), m_addr.GetSize()) == SOCKET_ERROR) { int error = WSAGetLastError(); // If something went wrong, the client will wait one second to connect the server again. // Of course, it will clear and setting up everything again. if (error != WSAEWOULDBLOCK) { Sleep(1000); Clear(); m_sock = socket(AF_INET, SOCK_STREAM, 0); if (m_sock == INVALID_SOCKET) { Clear(); OnConnectFailure(); return false; } ioctlsocket(m_sock, FIONBIO, &arg); if (connect(m_sock, reinterpret_cast<PSOCKADDR>(&m_addr), m_addr.GetSize()) == SOCKET_ERROR) { Tracen("error != WSAEWOULDBLOCK"); Clear(); OnConnectFailure(); return false; } } } m_connectLimitTime = time(NULL) + limitSec; return true; } Best Regards Ken
  23. 1 point
    Hello, some time ago I was selling a complete interface of Metin2 which I designed for a project in which it was closed. I sold it but as it was not my own idea, I propose to publish it free and thus not make money at the expense of the idea of another. I send the money back to those people that bought it from me. The original idea is from Evil-s (click to see it), it's not his PSD, I just took the images from his web page design and trimmed them to my liking, I designed some elements from zero, but the idea and the textures are of him. I recommend buying his work which is much higher quality than mine and very cheap for what it is. It takes me a long time to design all this, even if it is not my idea or my textures, but it does not do me any good to have it for me without giving it any use, and I will not sell it for what I said before, so I hope you guys give it a good one use. Web page concept Login concept Select Character concept Create character concept Flags for select kingdom concept Autopatcher concept First concept of the user interface ingame Second concept of the user interface ingame The interface has some graphic mistakes, but i cant fix them all cause i need to see them ingame. Dont delete the layer that says "Curvas" and "Brillo" from the psd, its important. There are just the PSD archives, if you have Photoshop, extract the images, if you know python, implement the images on the metin2 client . This thread its for avanced users that know how to code a new interface, its not just dowload and install. If you guys have luck, someone will do the code and then sell it or just release it. Dowload Credits : Evil-s Edited by : LovePlay, with the help of SeMa, Shang, Paci, R1z and Kizharu
  24. 1 point
    Python: player.GetStatus(player.MAX_HP) Source -> src/UserInterface/PythonPlayerModule.cpp (can find all modules from him) PyObject* poModule = Py_InitModule("player", s_methods); PyModule_AddIntConstant(poModule, "MAX_HP", POINT_MAX_HP);
  25. 1 point
    [ENG] Hi, I have found a way to fix the backporting on mounts, and with this way the monster appear correctly! Lets start: 1. You need the folder in which the MSM / MSA / GR2 files are thy Mount's 2. go to your server in the directory /usr/home/game/share/data/monster (green part of the path may differ) 3. load the folder where your mount is in this directory 4. go into your database and open the mob_proto 5. You search your Mount and go to the column "Folder" 6. put in the folder name of your Mount's in this column 7. Restart Server I know this way for quite a while and it also works with Pet's / monsters etc .. I´m sorry for my very bad english [GER] Hi, Ich habe einen Weg gefunden das zurück Porten auf Mounts zu verhindern, und das so dass die Monster korrekt erscheinen! Ich will nicht lang drum rum reden also fangen wir an: 1. Du brauchst den Ordner in dem sich die msm/msa/gr2 Dateien deines Mount´s befinden 2. Du gehst auf deinem Server in das Verzeichnis /usr/home/game/share/data/monster (Grüner teil des Pfades kann abweichen) 3. Du lädst den Ordner in dem sich dein Mount befindet in dieses Verzeichnis hoch 4. Du gehst in deine Datenbank und öffnest die mob_proto 5. Du suchst nach deinem Mount und gehst zur spalte "folder" 6. Du trägst den Ordnernamen deines Mount´s in diese spalte ein 7. Server neustarten Ich kenne diesen weg schon recht lange und er funktioniert auch bei Pet´s/Monstern etc...
×