Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 07/30/19 in all areas

  1. Hello boys and girls! With this small release you will be able to check every single affects on your character. The official server implemented this with their autohunt system to check the duration of taus and other potions. I had to do the same for the dragon soul I have decided to make it. After a small trip in the official binary, I figured out my solution, here it is: How to check if the first or the second deck of the dragon soul is activated? if player.CheckAffect(chr.NEW_AFFECT_DRAGON_SOUL_DECK1, 0): print("Hurray! The first deck is active now") elif player.CheckAffect(chr.NEW_AFFECT_DRAGON_SOUL_DECK2, 0): print("Oh, gosh! The second deck is activated, be careful") else: print("Without activated dragon soul you are weak....") If you find any problem with it, just let me know. I did test it, but not that much.
    2 points
  2. 2 points
  3. You could use a system caleld BOSS_SECRUITY it makes the BOSS ranked mobs go back to there created position . Good luck
    2 points
  4. M2 Download Center Download Here ( Internal ) ### 0.1 Root / uiMessenger.py: # 1. Search: def OnLogin(self, groupIndex ... # 1. After: member.Online() self.OnRefreshList() # 1. Add: if not name in constInfo.ALREADY_NOTIFY_LIST: self.onlinePopup = uiCommon.OnlinePopup() self.onlinePopup.SetUserName(name) self.onlinePopup.SetEvent(ui.__mem_func__(self.OpenWhisper), "MOUSE_LEFT_BUTTON_UP", name) self.onlinePopup.SlideIn() constInfo.ALREADY_NOTIFY_LIST.append(name) # 1.1 After: def OnLogin(... Add: def OpenWhisper(self, eventType, userName): self.whisperButtonEvent(userName) ### 0.2 Root / constInfo.py: # 2. Add: ALREADY_NOTIFY_LIST = [] ### 0.3 Root / ui.py # 3 Search: class Board(Window): (....) # 3 REPLACE this class with: class Board(Window): CORNER_WIDTH = 32 CORNER_HEIGHT = 32 LINE_WIDTH = 128 LINE_HEIGHT = 128 LT = 0 LB = 1 RT = 2 RB = 3 L = 0 R = 1 T = 2 B = 3 BASE_PATH = "d:/ymir work/ui/pattern" IMAGES = { 'CORNER' : { 0 : "Board_Corner_LeftTop", 1 : "Board_Corner_LeftBottom", 2 : "Board_Corner_RightTop", 3 : "Board_Corner_RightBottom" }, 'BAR' : { 0 : "Board_Line_Left", 1 : "Board_Line_Right", 2 : "Board_Line_Top", 3 : "Board_Line_Bottom" }, 'FILL' : "Board_Base" } def __init__(self, layer = "UI"): Window.__init__(self, layer) self.skipMaxCheck = False self.MakeBoard() def MakeBoard(self): CornerFileNames = [ ] LineFileNames = [ ] for imageDictKey in (['CORNER', 'BAR']): for x in xrange(len(self.IMAGES[imageDictKey])): if imageDictKey == "CORNER": CornerFileNames.append("%s/%s.tga" % (self.BASE_PATH, self.IMAGES[imageDictKey][x])) elif imageDictKey == "BAR": LineFileNames.append("%s/%s.tga" % (self.BASE_PATH, self.IMAGES[imageDictKey][x])) self.Corners = [] for fileName in CornerFileNames: Corner = ExpandedImageBox() Corner.AddFlag("not_pick") Corner.LoadImage(fileName) Corner.SetParent(self) Corner.SetPosition(0, 0) Corner.Show() self.Corners.append(Corner) self.Lines = [] for fileName in LineFileNames: Line = ExpandedImageBox() Line.AddFlag("not_pick") Line.LoadImage(fileName) Line.SetParent(self) Line.SetPosition(0, 0) Line.Show() self.Lines.append(Line) self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT) self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0) self.Base = ExpandedImageBox() self.Base.AddFlag("not_pick") self.Base.LoadImage("%s/%s.tga" % (self.BASE_PATH, self.IMAGES['FILL'])) self.Base.SetParent(self) self.Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT) self.Base.Show() def __del__(self): Window.__del__(self) def SetSize(self, width, height): if not self.skipMaxCheck: width = max(self.CORNER_WIDTH*2, width) height = max(self.CORNER_HEIGHT*2, height) Window.SetSize(self, width, height) self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT) self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0) self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT) self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT) self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT) verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage) self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage) self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0) self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0) if self.Base: self.Base.SetRenderingRect(0, 0, horizontalShowingPercentage, verticalShowingPercentage) # 3 AFTER CLASS BOARD ADD THIS CLASS: class BorderB(Board): CORNER_WIDTH = 16 CORNER_HEIGHT = 16 LINE_WIDTH = 16 LINE_HEIGHT = 16 BASE_PATH = "d:/ymir work/ui/pattern" IMAGES = { 'CORNER' : { 0 : "border_b_left_top", 1 : "border_b_left_bottom", 2 : "border_b_right_top", 3 : "border_b_right_bottom" }, 'BAR' : { 0 : "border_b_left", 1 : "border_b_right", 2 : "border_b_top", 3 : "border_b_bottom" }, 'FILL' : "border_b_center" } def __init__(self): Board.__init__(self) self.eventFunc = { "MOUSE_LEFT_BUTTON_UP" : None, } self.eventArgs = { "MOUSE_LEFT_BUTTON_UP" : None, } def __del__(self): Board.__del__(self) self.eventFunc = None self.eventArgs = None def SetSize(self, width, height): Board.SetSize(self, width, height) def SetEvent(self, func, *args) : result = self.eventFunc.has_key(args[0]) if result : self.eventFunc[args[0]] = func self.eventArgs[args[0]] = args else : print "[ERROR] ui.py SetEvent, Can`t Find has_key : %s" % args[0] def OnMouseLeftButtonUp(self): if self.eventFunc["MOUSE_LEFT_BUTTON_UP"] : apply(self.eventFunc["MOUSE_LEFT_BUTTON_UP"], self.eventArgs["MOUSE_LEFT_BUTTON_UP"]) ### 0.4 Root / uiCommon.py # 4 Add this to the end of file: ### (Check if you have in this file import app ) class OnlinePopup(ui.BorderB): def __init__(self): ui.BorderB.__init__(self) self.isActiveSlide = False self.isActiveSlideOut = False self.endTime = 0 self.wndWidth = 0 self.textLine = ui.TextLine() self.textLine.SetParent(self) self.textLine.SetWindowHorizontalAlignCenter() self.textLine.SetWindowVerticalAlignCenter() self.textLine.SetHorizontalAlignCenter() self.textLine.SetVerticalAlignCenter() self.textLine.SetPosition(13, 0) self.textLine.Show() self.onlineImage = ui.ImageBox() self.onlineImage.SetParent(self) self.onlineImage.SetPosition(8, 8) self.onlineImage.LoadImage("d:/ymir work/ui/game/windows/messenger_list_online.sub") self.onlineImage.Show() def __del__(self): ui.BorderB.__del__(self) def SlideIn(self): self.SetTop() self.Show() self.isActiveSlide = True self.endTime = app.GetGlobalTimeStamp() + 5 def Close(self): self.Hide() def Destroy(self): self.Close() def SetUserName(self, name): self.textLine.SetText("Player %s is online." % str(name)) self.wndWidth = self.textLine.GetTextSize()[0] + 40 self.SetSize(self.wndWidth, 25) self.SetPosition(-self.wndWidth, wndMgr.GetScreenHeight() - 200) def OnUpdate(self): if self.isActiveSlide and self.isActiveSlide == True: x, y = self.GetLocalPosition() if x < 0: self.SetPosition(x + 4, y) if self.endTime - app.GetGlobalTimeStamp() <= 0 and self.isActiveSlideOut == False and self.isActiveSlide == True: self.isActiveSlide = False self.isActiveSlideOut = True if self.isActiveSlideOut and self.isActiveSlideOut == True: x, y = self.GetLocalPosition() if x > -(self.wndWidth): self.SetPosition(x - 4, y) if x <= -(self.wndWidth): self.isActiveSlideOut = False self.Close() ######## Please write in topic If i forgot something. ######## Images for board: [Hidden Content]
    1 point
  5. M2 Download Center Download Here ( Internal ) Small modification of weapons. By default, this bow does not have a shield for the archer's hand. I also changed the icon and increased the gloss of the weapon a bit. I added a new dagger for the assassin. Download: [Hidden Content]
    1 point
  6. I think editing the topic is against the forum rules And you gave the best answer to yourself even thought i gave you an effective item_scale and you said thanks
    1 point
  7. Stonehearst Asylum have the same concept as Shutter Island, i recommand it too. And if we talk about Christopher Nolan: Interstellar Inception Transcendence The prestige
    1 point
  8. Hey as requested in the discussions section im gonna make a little beginners quest tutorial. If you see something wrong just correct me by posting below. Also you can extend my tutorial. I hope at last we get a little "book" of tutorials from different users. Lets begin. Im gonna mark every user editable variable like this: <variable> The first statement that has to be in every quest is following (lua works with "end" so we have to close almost everything with "end" like below) quest <questname> begin end Now for the beginning lets add the first state. A state is something like a chapter. The first state is always the state start. Like quest end it with an "end" quest <questname> begin state start begin end end Now we can start adding events.Possible actions (+ description): kill -gets triggered everytime you kill a monster or another player. party_kill -gets triggered everytime you or a party member kills a monster or another player. enter (you can use "letter" here aswell) -at changing into the state (explanation later) leave -at changing out of the state <mobvnum>.chat."<message>" -On clicking on the npc <mobvnum> and then choosing the <message> in the appearing questwindow <mobvnum>.click -On clicking on the npc <mobvnum> unmount -on unmounting your horse info or button(should be used together) -on clicking on a quest scroll login -on logging in logout or disconnect (should be used together) -on logging out take -on pulling an item on a npc Lets do the first example with a loginmessage. The event has following syntax: quest loginquest begin state start begin when login begin chat("You logged in") end end end So in this case the "when login begin" gets triggered when the user logs in.The "chat()" is a basic quest command in will show the user a white line in the public chat at the bottom of his game like if somebody writes something to the chat. Now you know the basic quest syntax. To limit then when actions there is another helper. The "with" tag. Lets say you want to get the message only if youre above level 25 when login with pc.get_level() > 25 begin chat("You logged in with level above 25") end I just didnt write that whole "quest" and "state" stuff now i think you know how i should look like now. In this case the "with pc.get_level() > 25" checks if you login with your level over 25. The load of function like pc.get_level() and chat() that you got is just remembering and looking for them. There are some public lists of it. Most of them are self explaining by their name. pc allways (except some really special cases you shouldnt get unless you try advanced questing) means your own character Now lets say you got a boss mob at mobvnum 90001 and you want all players to be noticed that a heroic player killed this one. You know the kill trigger but you dont know how to limit it to one mob only. But you also know the "with" tag now. So lets go ahead. The command you need here is npc.get_race(). the "npc" always means the mob you killed, clicked or used an item with right now. The get_race gives you his vnum when kill with npc.get_race() == 90001 begin notice(pc.get_name().." was a heroic player and killed the boss") end I think you should all know what pc.get_name() returns right now but whats the two dots there?It does link functions with strings. So lets say you called "Quester" then the quest sees this: notice(pc.get_name().." was a heroic player and killed the boss") as this: notice("Quester was a heroic player and killed the boss") For the next im gonna show you how to make this little grey popup with text in it like the most quests have. Lets say you want to have a little smalltalk with the old woman (9006). You go to her and ask her about her real name. 9006.chat."What's your real name?" will automaticly generate the option when you click at her. when 9006.chat."What's your real name?" begin say_title("Old woman:") say("Oh hey "..pc.get_name()) say("You want to know my real name") say("Its Dave and apperently I'm an old man") say("But i have something for you") pc.give_item2(72702, 1) say_reward("You got speed shoes") end Below the last line of text there will be an automaticly generated "OK" buttonIf you want the text to be on more than one page add a "wait()" where you want to begin the next page. But then you have to make a new say_title() aswell. As you see im teaching you the basic commands while showing you the syntax. In this case its pc.give_item2(<itemvnum>, <itemcount>) (pc.give_item() is deprecated) So as last lection for this thread the if statements. Lets say you get 10 yang if youre under lvl 20 and 20 yang if youre above or equal when 9006.chat."Money?" begin if pc.get_level() >= 20 then pc.change_money(20) else pc.change_money(10) end end the if structure is pretty easy and should be understood by you. If not let me know. Ok enough for the first part. I would be happy to see other people continue with a second part Greets Inya
    1 point
  9. The best series ever made: La casa de papel
    1 point
  10. I can highly recommend "The Expanse". Acutally the best SciFi series of 2018/2019. Also: Lethal Weapon Sons of Anarchy Vikings Kevin can wait
    1 point
  11. this was the case but somehow it changed ... Now it's updated !!
    1 point
  12. So called “developers” your time has come. on: why you don’t do it yourself? It’s easy enough and free.
    1 point
  13. I hope i say the Title with the right words for it i found this on a Chinese Site that is related to "Ymir Entertainment Co. Ltd" There are maskes for Old Armors that never have been seen before. and the first one i realy like because i never seen it in a "Black Color" I love it
    1 point
  14. M2 Download Center Download Here ( Internal ) Hey Community, I Found some nostalgic Wallpapers from the official metin2.co.kr site from 2004-2007 and i wanna share it with you this is only for the people that like that kind of old stuff i also find two comic pictures. and the comics that i found i still searching for the official metin2.co.kr beta client if someone have it upload it for the community ! ITS HISTORY !
    1 point
  15. Love, Death & Robots = highly recommended !! ?
    1 point
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.