-
Posts
100 -
Joined
-
Last visited
-
Days Won
16 -
Feedback
0%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Posts posted by .ZeNu
-
-
5 hours ago, Kirazu said:
File: length.h
You don't have in
enum EWearPositions
this:
WEAR_COSTUME_MOUNT
-
-
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)
-
2 hours ago, Metin2Place said:Video unavailableThis video is private.
Done!
- 1
-
Just add
if(dam > 0)
in condition from char_battle.cpp
- 1
-
Acum 20 minute, Raylee a spus:
Nice release.
Is your notification also shown when players move/teleport to other maps?
Because this is really annoying.
Best regards
RayleeNo, just once per session.
- 2
-
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.
-
Attention on tabs or and space.
-
-
### 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:
- 80
- 1
- 1
- 1
- 2
- 1
- 1
- 3
- 29
- 1
- 5
- 72
-
-
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.
-
-
-
-
Acum 4 ore, ricou77 a spus:
Could you add the locale_fr please ?
And then ramadan costume's icons
Thanks
I saw in this post a few days ago a download link with Ramadan Costume's Icons. But i don't know where he disappeared ...
Anyway:
Icons:
Locale:
- 3
- 1
- 3
-
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);
- 3
-
Nice release, good contribution for community.
- 1
-
-
-
-
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.
- 8
-
Acum 8 ore, Pablo Escopăr a spus:
He's not arrogant, just Romanian.
Like you, too.
And no, just a bad day.
- 1
-
Hi, Groot!
- 1
Remove Fog
in Community Support - Questions & Answers
Posted