Jump to content

.ZeNu

Banned
  • Posts

    100
  • Joined

  • Last visited

  • Days Won

    16
  • Feedback

    0%

Posts posted by .ZeNu

  1. 31 minutes ago, SlayerPro said:

     

    The file you are trying to download is no longer available.
    This could be due to the following reasons:
    The file has been removed because of a ToS/AUP violation.
    Invalid URL - the link you are trying to access does not exist
    The file has been deleted by the user.

     

    maybe u still have it >? xD 

    This is the hidden content, please

    • Metin2 Dev 29
    • Eyes 1
    • Sad 1
    • Think 1
    • Good 5
    • Love 9
  2. 26 minutes ago, sepheri0n said:
    
    'OnlinePopup' object has no attribute 'SetEvent'

    ?? Can someone help me with this?

    class ImageBox(Window):
    	def __init__(self, layer = "UI"):
    		Window.__init__(self, layer)
    
    		self.eventDict={}	
    		self.eventFunc = {
    			"MOUSE_LEFT_BUTTON_UP" : None, 
    			"MOUSE_LEFT_BUTTON_DOWN" : None, 
    			"MOUSE_RIGHT_BUTTON_UP" : None, 
    			"MOUSE_RIGHT_BUTTON_DOWN" : None, 
    			"MOUSE_OVER_IN" : None, 
    			"MOUSE_OVER_OUT" : None
    		}
    		self.eventArgs = {
    			"MOUSE_LEFT_BUTTON_UP" : None, 
    			"MOUSE_LEFT_BUTTON_DOWN" : None, 
    			"MOUSE_RIGHT_BUTTON_UP" : None, 
    			"MOUSE_RIGHT_BUTTON_DOWN" : None, 
    			"MOUSE_OVER_IN" : None, 
    			"MOUSE_OVER_OUT" : None
    		}
    
    	def __del__(self):
    		Window.__del__(self)	
    		self.eventFunc = None
    		self.eventArgs = None
    
    	def RegisterWindow(self, layer):
    		self.hWnd = wndMgr.RegisterImageBox(self, layer)
    
    	def LoadImage(self, imageName):
    		self.name=imageName
    		wndMgr.LoadImage(self.hWnd, imageName)
    
    	def GetImageName(self):
    		return self.name
    		
    	def SetAlpha(self, alpha):
    		wndMgr.SetDiffuseColor(self.hWnd, 1.0, 1.0, 1.0, alpha)
    		
    	def SetColor(self, r, g, b, a):
    		wndMgr.SetDiffuseColor(self.hWnd, r, g, b, a)
    
    	def GetWidth(self):
    		return wndMgr.GetWidth(self.hWnd)
    
    	def GetHeight(self):
    		return wndMgr.GetHeight(self.hWnd)
    
    	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 SAFE_SetEvent(self, func, *args):
    		result = self.eventFunc.has_key(args[0])		
    		if result :
    			self.eventFunc[args[0]] = __mem_func__(func)
    			self.eventArgs[args[0]] = args
    		else :
    			print "[ERROR] ui.py SAFE_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"])
    			
    	def OnMouseLeftButtonDown(self):
    		if self.eventFunc["MOUSE_LEFT_BUTTON_DOWN"] :
    			apply(self.eventFunc["MOUSE_LEFT_BUTTON_DOWN"], self.eventArgs["MOUSE_LEFT_BUTTON_DOWN"])
    
    	def OnMouseRightButtonUp(self):
    		if self.eventFunc["MOUSE_RIGHT_BUTTON_UP"] :
    			apply(self.eventFunc["MOUSE_RIGHT_BUTTON_UP"], self.eventArgs["MOUSE_RIGHT_BUTTON_UP"])
    			
    	def OnMouseRightButtonDown(self):
    		if self.eventFunc["MOUSE_RIGHT_BUTTON_DOWN"] :
    			apply(self.eventFunc["MOUSE_RIGHT_BUTTON_DOWN"], self.eventArgs["MOUSE_RIGHT_BUTTON_DOWN"])
    			
    	def OnMouseOverIn(self) :
    		if self.eventFunc["MOUSE_OVER_IN"] :
    			apply(self.eventFunc["MOUSE_OVER_IN"], self.eventArgs["MOUSE_OVER_IN"])
    
    	def OnMouseOverOut(self) :
    		if self.eventFunc["MOUSE_OVER_OUT"] :
    			apply(self.eventFunc["MOUSE_OVER_OUT"], self.eventArgs["MOUSE_OVER_OUT"])
    			
    	def SAFE_SetStringEvent(self, event, func,isa=False):
    		if not isa:
    			self.eventDict[event]=__mem_func__(func)
    		else:
    			self.eventDict[event]=func
    			
    	def LeftRightReverse(self):
    		wndMgr.LeftRightReverseImageBox(self.hWnd)
    	
    	def SetCoolTime(self, time):
    		wndMgr.SetCoolTimeImageBox(self.hWnd, time)
    
    	def SetStartCoolTime(self, time):
    		wndMgr.SetStartCoolTimeImageBox(self.hWnd, time)

     

  3. Acum 3 ore, filipw1 a spus:

    Why wouldn't you use ui.Bar instead of creating a new window? 

    The idea is nice, but I must say that it used to be this kind of window on Polish servers and people complained about it. You should make option to disable this, because it can be annoying when you have a lot of friends 

    Anyone can make a Config Option for this feature, there is many examples in binary .. about that ...

    This notification can be improved a lot, first thing is to delete OnUpdate .. from code. 

  4. M2 Download Center

    This is the hidden content, please
    ( 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:

    This is the hidden content, please

    • Metin2 Dev 80
    • Eyes 1
    • Facepalm 1
    • Dislove 1
    • Angry 2
    • Think 1
    • Confused 1
    • Scream 3
    • Good 29
    • muscle 1
    • Love 5
    • Love 72
  5. Acum 37 minute, ragem0re a spus:

    Hi, thanks for sharing!

    Unfortunately I've found a bug.

    It does only pickup items that you dropped and ignore party member drops.

    However it is possible to pick them up by clicking on.

    I don't see any way to check for party members on client-side, maybe someone do. (?)

    Appreciate any help, thanks.

    You probably refer to:

    Binary/UserInterface/PythonPlayer.cpp:

    In function

     ::SendClickItemPacket

    :
    you have this condition: 

    if (!IsPartyMemberByName(c_szOwnerName) ... 

    And source server: 

    In file:  Char_item.cpp , Function ::PickupItem.

    else if (!IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_GIVE | ITEM_ANTIFLAG_DROP)

    You have a condition for Party Group and antiflags object.

  6. Your tutorial is incompleted. (char_item part for RemoveSpecifyItem)

    // char_item.cpp
    // Search:
    int CHARACTER::CountSpecifyItem(DWORD vnum) const
    {
        int    count = 0;
        LPITEM item;
    
        for (int i = 0; i < INVENTORY_MAX_NUM; ++i)
        {
    // Replace with:
    int CHARACTER::CountSpecifyItem(DWORD vnum, int iExceptionCell) const
    {
        int    count = 0;
        LPITEM item;
    
        for (int i = 0; i < INVENTORY_MAX_NUM; ++i)
        {
            if(i == iExceptionCell)
                continue;
                
                
    // char_item.cpp
    // Search:
    void CHARACTER::RemoveSpecifyItem(DWORD vnum, DWORD count)
    {
        if (0 == count)
            return;
    
        for (UINT i = 0; i < INVENTORY_MAX_NUM; ++i)
        {
    // Replace with:
    void CHARACTER::RemoveSpecifyItem(DWORD vnum, DWORD count, int iExceptionCell)
    {
        if (0 == count)
            return;
    
        for (UINT i = 0; i < INVENTORY_MAX_NUM; ++i)
        {
            if(i == iExceptionCell)
                continue;
                
                
    // char_item.cpp
    // Search: 2x
                if (CountSpecifyItem(prt->materials[i].vnum) < prt->materials[i].count)
    // Replace with:
                if (CountSpecifyItem(prt->materials[i].vnum, item->GetCell()) < prt->materials[i].count)
                
                
    // char_item.cpp
    // Search: 2x
                RemoveSpecifyItem(prt->materials[i].vnum, prt->materials[i].count);
    // Replace with:
                RemoveSpecifyItem(prt->materials[i].vnum, prt->materials[i].count, item->GetCell());
                
                
    // char.h
    // Search:
            int                CountSpecifyItem(DWORD vnum) const;
            void            RemoveSpecifyItem(DWORD vnum, DWORD count = 1);
    // Replace with:
            int                CountSpecifyItem(DWORD vnum, int iExceptionCell = -1) const;
            void            RemoveSpecifyItem(DWORD vnum, DWORD count = 1, int iExceptionCell = -1);

     

    • Love 3
  7. Dungeon.cpp:

    We are looking for :

     

    deadEvent = event_create (dungeon_dead_event, info, PASSES_PER_SEC (10));

     

    PASSES_PER_SEC (10)); // 10 seconds
    PASSES_PER_SEC (300)); // 5 minutes


    Will be like:

     

    deadEvent = event_create (dungeon_dead_event, info, PASSES_PER_SEC (300));


    The session will be destroyed in 5 minutes.

    Into quest from the respective dungeon you have to save logout and login, you can use questFlag.

    • Love 8
×
×
  • 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.