Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by PACI

  1. PACI

    [Release] Quest Categories

    Hi there. While cleaning out "my closet", I found this thing I developed between 2014-2015 - maybe(?) - for my, at that moment, server. Since it's now closed, and I won't use it, I'm sharing it with you guys. Note: Didn't do the scrollbar, wasn't needed for me, so yeah. Now, let's start with opening your locale_game.txt and adding these lines: QUESTCATEGORY_0 Main Quests QUESTCATEGORY_1 Sub Quests QUESTCATEGORY_2 Collect Quests QUESTCATEGORY_3 Levelup Quests QUESTCATEGORY_4 Scroll Quests QUESTCATEGORY_5 System Quests Alright, now find your characterwindow.py (uiscript?) and you can either comment Quest_Page children or simply remove them all. Moving on to your interfaceModule.py find this line self.BINARY_RecvQuest(index, name, "file", localeInfo.GetLetterImageName()) and replace it with self.wndCharacter.questCategory.RecvQuest(self.BINARY_RecvQuest, index, name) Ok, then we are at the most, let's say, difficult part of this. Open your uiCharacter.py and just as you did in your characterwindow.py, remove or simply comment any single line related to quests. You can just search for these vars: self.questShowingStartIndex self.questScrollBar self.questSlot self.questNameList self.questLastTimeList self.questLastCountList Once you did that, you just: # Find these lines self.soloEmotionSlot = self.GetChild("SoloEmotionSlot") self.dualEmotionSlot = self.GetChild("DualEmotionSlot") self.__SetEmotionSlot() # And add the following import uiQuestCategory self.questCategory = uiQuestCategory.QuestCategoryWindow(self.pageDict["QUEST"]) # Find this def OnUpdate(self): self.__UpdateQuestClock() # Replace it with def OnUpdate(self): self.questCategory.OnUpdate() And we're done with the client-side. I attached some extra elements needed (such as the main python file (uiQuestCategory.py) and some image resources). Remember to edit the path linked to these images in that file. For the server-side... Well, screw it, uploaded it too. Too lazy to write. It has only a new quest function (q.getcurrentquestname()) and a few things to add in your questlib.lua. Btw, not sure if you have it, but if not, just add this extra function in ui.Button() (ui.py - class Button). def SetTextAlignLeft(self, text, height = 4): if not self.ButtonText: textLine = TextLine() textLine.SetParent(self) textLine.SetPosition(27, self.GetHeight()/2) textLine.SetVerticalAlignCenter() textLine.SetHorizontalAlignLeft() textLine.Show() self.ButtonText = textLine #Äù½ºÆ® ¸®½ºÆ® UI¿¡ ¸ÂÃç À§Ä¡ ÀâÀ½ self.ButtonText.SetText(text) self.ButtonText.SetPosition(27, self.GetHeight()/2) self.ButtonText.SetVerticalAlignCenter() self.ButtonText.SetHorizontalAlignLeft() Forgot the source part, fml, here it is. Add it to your questlua_quest.cpp. int quest_get_current_quest_name(lua_State* L) { CQuestManager& q = CQuestManager::instance(); PC* pPC = q.GetCurrentPC(); lua_pushstring(L, pPC->GetCurrentQuestName().c_str()); return 1; } void RegisterQuestFunctionTable() { luaL_reg quest_functions[] = { { "getcurrentquestname", quest_get_current_quest_name}, { NULL, NULL } }; CQuestManager::instance().AddLuaFunctionTable("q", quest_functions); } Now, finally, have fun and bye! questcategory.7z server-side.7z
  2. PACI

    open Temple Ochao - Black Floor

    Setting.txt terrainvisible[TAB]0
  3. PACI

    [RELEASE]Fix Korean Errors #PART1

    !ch->IsDead() for FCountMonster is also handy.
  4. PACI

    open Python ignore function

    I assume you already have the Ignored group added to your client's friends list. If that's not the case, just take a look at root/uiMessenger.py and UIScript/messengerwindow.py and follow the pattern. Now I'd personally cache the file's entries at the client's startup, but even if you don't do that, the concept's still the same. Loop over your file lines/dict content and then use the AppendMember(key, playerName) function in order to add the entries to the list. Regarding the deletion, it is almost the same, the only difference is you firstly need to find the object, FindMember(key), and then use the RemoveMember(obj) func.
  5. PACI

    open Python ignore function

    Is that file client or server sided?
  6. PACI

    open Python ignore function

    Got the idea and stuff, but you didn't clarify where's the problem at. Is it the deletion thingy?
  7. you can't use any kind of quest function that sends the player into a suspended state (e.g: wait(), input(), select()) with a login statement. if you want to use it that way, add a quick timer, and then do the stuff.
  8. PACI

    solved Bug pet mount

    i don't even know why you're using the same piece of code on each condition. there's no difference at all. it's useless. also, you're using item.vnum (item.get_vnum()) without anything pointing to an item.
  9. PACI

    Kind of Belt System for r34083

    Hello. I made this quest some time ago, I was still using rev 34083 and iMer posted a very useful lib. So, thanks to the quest functions which this lib has included, it allowed me to do something like belt system, but without belt inventory. Also, nowadays, we have that crap systems full, and that's why I post this here. Now first of all, iMer's stuff: libgame_item2_pc2.so libstdc++.so.6 And now the quest: quest belt_system begin state start begin function is_belt() return item.vnum >= 18000 and item.vnum <= 18089 end function equip_belt() item2.equip(11) pc.setqf('belt', item.vnum) end when 18000.use or 18001.use or 18002.use or 18003.use or 18004.use or 18005.use or 18006.use or 18007.use or 18008.use or 18009.use or 18010.use or 18011.use or 18012.use or 18013.use or 18014.use or 18015.use or 18016.use or 18017.use or 18018.use or 18019.use or 18020.use or 18021.use or 18022.use or 18023.use or 18024.use or 18025.use or 18026.use or 18027.use or 18028.use or 18029.use or 18030.use or 18031.use or 18032.use or 18033.use or 18034.use or 18035.use or 18036.use or 18037.use or 18038.use or 18039.use or 18040.use or 18041.use or 18042.use or 18043.use or 18044.use or 18045.use or 18046.use or 18047.use or 18048.use or 18049.use or 18050.use or 18051.use or 18052.use or 18053.use or 18054.use or 18055.use or 18056.use or 18057.use or 18058.use or 18059.use or 18060.use or 18061.use or 18062.use or 18063.use or 18064.use or 18065.use or 18066.use or 18067.use or 18068.use or 18069.use or 18070.use or 18071.use or 18072.use or 18073.use or 18074.use or 18075.use or 18076.use or 18077.use or 18078.use or 18079.use or 18080.use or 18081.use or 18082.use or 18083.use or 18084.use or 18085.use or 18086.use or 18087.use or 18088.use or 18089.use begin local v = item.vnum local bonus = {{item2.get_attr(0)}, {item2.get_attr(1)}, {item2.get_attr(2)}, {item2.get_attr(3)}, {item2.get_attr(4)}, {item2.get_attr(5)}, {item2.get_attr(6)}} if belt_system.is_belt() and v ~= pc.getqf('belt') then belt_system.equip_belt() elseif item.select_cell(101) then item.remove() pc2.give_or_drop_item_and_select(v) for i = 1, table.getn(bonus) do if tonumber(bonus[i][1]) > 0 then item2.set_attr(i-1, bonus[i][1], bonus[i][2]) end end else belt_system.equip_belt() end end when 20090.take with belt_system.is_belt() begin local maintab = { [0] = { {18000, 1, 50}, {18010, 2, 20}, {18020, 44, 1}, {18030, 44, 1}, {18040, 78, 1}, {18050, 79, 1}, {18060, 80, 1}, {18070, 81, 1}, {18080, 63, 1} }, [1] = { {18000, 1, 50}, {18010, 2, 20}, {18020, 44, 1}, {18030, 44, 1}, {18040, 78, 1}, {18050, 79, 1}, {18060, 80, 1}, {18070, 81, 1}, {18080, 63, 1} }, [2] = { {18000, 1, 100}, {18010, 2, 40}, {18020, 44, 1}, {18030, 44, 1}, {18040, 78, 1}, {18050, 79, 1}, {18060, 80, 1}, {18070, 81, 1}, {18080, 63, 1} } } if pc.count_item(18900) < 1 then syschat("You dont have "..item_name(18900)..".") return end for i = 0, 2 do for k = 1, table.getn(maintab[i]) do if item.vnum >= maintab[i][k][1] and item.vnum <= maintab[i][k][1]+9 and item2.get_attr(i) == 0 then if number(1,3) == 1 then item2.set_attr(i, maintab[i][k][2], maintab[i][k][3]) syschat('Your belt received a bonus.') else syschat('Wasnt possible to put a bonus in your belt.') end end end pc.remove_item(18900, 1) end end end endIt also wasn't possible to add the stones to belt's, so I made also a NPC which gives your belt a bonus in exchange for that item. All we have to do in clientside, is adding a new line on our inventorywindow.py which is localed in locale. So we search this: {"index":EQUIPMENT_START_INDEX+10, "x":75, "y":35, "width":32, "height":32},And we write down the following line: {"index":EQUIPMENT_START_INDEX+11, "x":39, "y":106, "width":32, "height":32},We also need equipment_bg_without_ring.tga, or with_ring as you wish. And change the inventory image path to that file. That's all. Special thanks to iMer who had written the lib that made this possible, and without cmdchats and affects, because, since the item is equipped into a true slot, the bonuses are defined on item_proto, like a normal weapon, armor, etc.
  10. -> say("")
  11. PACI

    solved How to get client bonus name on quest

    if you have an ingame ui for your system just send the affect id to the client. otherwise you have to build a lua table having the ids as keys and the names as values.
  12. PACI

    open Newbie with lots of questions.

    yes my bad, was a long time ago and didn't remember correctly. yes it is.
  13. PACI

    open Newbie with lots of questions.

    1. metin2 is open source since the beginning of 2015. through a leak. 2. no, 1/10 here are actually reverse engineers. 3. as i said before, we got everything through a leak. 4. you can give it a search. took the source-files published in 2015 and modified them.
  14. petLevel * affectMaxValue / petMaxLevel
  15. PACI

    solved Problem with flame dungeon monsters

    probably mob_color.
  16. PACI

    open PM from quest?

    you can do it without even touching your source files, messing around with the quest login statement and a cmdchat().
  17. PACI

    open DMG BUG 2089M

    no one uses such old cores, why don't you upgrade yourself up?
  18. for the first question, the wiki post says the potion manufacturing is available since 17 july 2007. probably a normal warrior or ninja couldn't do much against a magic class, such as sura and shaman, but at that time we didn't know how to play properly with each class right? so i guess there were some fair 1v1 matches. not forgetting that metin2 is a game that at it's early stage hadn't the pvp system implemented, but players asked for it, so it came a couple of time later. correct me if i'm wrong. regarding the soul stones, i don't really remember, and can't answer that question precisely, but i guess there were able to obtain the same way it's already known, through metin stones from level 45+. third question, at first we had only the well known horse with all it's different stages (pony, armed horse, military horse, as well as them different skins for non guild members, guild members and guild leaders). the first mounts being added in the game were those 4 you said, the normal lion, boar, wolf and tiger. they were probably added at the same time the devils catacomb was, so somewhere around 2012, although i'm not sure, so i'd say between 2011 and 2012. the dragon lair was added in 2011 and probably yes, the blue steel armors came at the same time. the last stage for metin2 before the Dark Dragons update had every single thing you said on your post. dragon lair, devil's catacomb, spider dungeon 3, blue steel armors, pets, mounts, even costumes and the energy system. the max level was 99 though.
  19. PACI

    Blocking exp on dungeons

    char.cpp CHARACTER::PointChange(), case POINT_EXP
  20. PACI

    How to change the signature

    Account settings.
  21. PACI

    [RLS]First multi language offline message system

    @Tasho, didn't get that for-loop.
  22. PACI

    [Release] Quest Categories

    @Hik, on questcategory.txt. Show me your client syserr entries.
  23. PACI

    [Release] Quest Categories

    @Galet, yes it does. @AlexKenT, paste your syserr here. @xHope, as I said, I didn't do the scrollbar.
  24. PACI

    [Release] Quest Categories

    There you go, uiCharacter.py and characterwindow.py for you to compare with yours. characterwindow.py uicharacter.py