MRMJ-1: Messenger & Skills fixes
This commit is contained in:
@@ -1016,6 +1016,10 @@ class GameWindow(ui.ScriptWindow):
|
||||
messengerAddFriendQuestion.SetText2(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_2)
|
||||
messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend))
|
||||
messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend))
|
||||
|
||||
if app.FIX_MESSENGER_ACTION_SYNC:
|
||||
messengerAddFriendQuestion.OnPressEscapeKey = ui.__mem_func__(self.OnDenyAddFriend) # ESC → deny
|
||||
|
||||
messengerAddFriendQuestion.Open()
|
||||
messengerAddFriendQuestion.name = name
|
||||
self.messengerAddFriendQuestion = messengerAddFriendQuestion
|
||||
@@ -2180,4 +2184,7 @@ class GameWindow(ui.ScriptWindow):
|
||||
|
||||
# END_OF_WEDDING
|
||||
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
def SkillClearCoolTime(self, slotIndex):
|
||||
self.interface.SkillClearCoolTime(slotIndex)
|
||||
|
||||
|
||||
@@ -305,10 +305,15 @@ class Interface(object):
|
||||
self.whisperDialogDict = {}
|
||||
self.privateShopAdvertisementBoardDict = {}
|
||||
|
||||
if app.FIX_MESSENGER_ACTION_SYNC:
|
||||
self.wndMessenger.InitializeHandler()
|
||||
|
||||
self.wndInventory.SetItemToolTip(self.tooltipItem)
|
||||
|
||||
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
||||
self.wndDragonSoul.SetItemToolTip(self.tooltipItem)
|
||||
self.wndDragonSoulRefine.SetItemToolTip(self.tooltipItem)
|
||||
|
||||
self.wndSafebox.SetItemToolTip(self.tooltipItem)
|
||||
self.wndCube.SetItemToolTip(self.tooltipItem)
|
||||
self.wndCubeResult.SetItemToolTip(self.tooltipItem)
|
||||
@@ -535,6 +540,11 @@ class Interface(object):
|
||||
def OnChangeCurrentSkill(self, skillSlotNumber):
|
||||
self.wndTaskBar.OnChangeCurrentSkill(skillSlotNumber)
|
||||
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
def SkillClearCoolTime(self, slotIndex):
|
||||
self.wndCharacter.SkillClearCoolTime(slotIndex)
|
||||
self.wndTaskBar.SkillClearCoolTime(slotIndex)
|
||||
|
||||
def SelectMouseButtonEvent(self, dir, event):
|
||||
self.wndTaskBar.SelectMouseButtonEvent(dir, event)
|
||||
|
||||
@@ -564,7 +574,7 @@ class Interface(object):
|
||||
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
||||
self.wndDragonSoul.RefreshItemSlot()
|
||||
|
||||
def RefreshCharacter(self): ## Character 페이지의 얼굴, Inventory 페이지의 전신 그림 등의 Refresh
|
||||
def RefreshCharacter(self): ## Character <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>, Inventory <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD> Refresh
|
||||
self.wndCharacter.RefreshCharacter()
|
||||
self.wndTaskBar.RefreshQuickSlot()
|
||||
|
||||
@@ -696,7 +706,7 @@ class Interface(object):
|
||||
def RemovePartyMember(self, pid):
|
||||
self.wndParty.RemovePartyMember(pid)
|
||||
|
||||
##!! 20061026.levites.퀘스트_위치_보정
|
||||
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD><EFBFBD>ġ_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
self.__ArrangeQuestButton()
|
||||
|
||||
def LinkPartyMember(self, pid, vid):
|
||||
@@ -711,7 +721,7 @@ class Interface(object):
|
||||
def ExitParty(self):
|
||||
self.wndParty.ExitParty()
|
||||
|
||||
##!! 20061026.levites.퀘스트_위치_보정
|
||||
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD><EFBFBD>ġ_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
self.__ArrangeQuestButton()
|
||||
|
||||
def PartyHealReady(self):
|
||||
@@ -874,7 +884,7 @@ class Interface(object):
|
||||
if True == self.wndChat.IsEditMode():
|
||||
self.wndChat.CloseChat()
|
||||
else:
|
||||
# 웹페이지가 열렸을때는 채팅 입력이 안됨
|
||||
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ä<><C3A4> <20>Է<EFBFBD><D4B7><EFBFBD> <20>ȵ<EFBFBD>
|
||||
if self.wndWeb and self.wndWeb.IsShow():
|
||||
pass
|
||||
else:
|
||||
@@ -975,7 +985,7 @@ class Interface(object):
|
||||
else:
|
||||
self.wndExpandedTaskBar.Close()
|
||||
|
||||
# 용혼석
|
||||
# <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
|
||||
def DragonSoulActivate(self, deck):
|
||||
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
||||
self.wndDragonSoul.ActivateDragonSoulByExtern(deck)
|
||||
@@ -1046,7 +1056,7 @@ class Interface(object):
|
||||
if True == self.wndDragonSoulRefine.IsShow():
|
||||
self.wndDragonSoulRefine.Close()
|
||||
|
||||
# 용혼석 끝
|
||||
# <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD> <20><>
|
||||
|
||||
def ToggleGuildWindow(self):
|
||||
if not self.wndGuild.IsShow():
|
||||
@@ -1096,7 +1106,7 @@ class Interface(object):
|
||||
def OpenWebWindow(self, url):
|
||||
self.wndWeb.Open(url)
|
||||
|
||||
# 웹페이지를 열면 채팅을 닫는다
|
||||
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ä<><C3A4><EFBFBD><EFBFBD> <20>ݴ´<DDB4>
|
||||
self.wndChat.CloseChat()
|
||||
|
||||
# show GIFT
|
||||
@@ -1124,9 +1134,9 @@ class Interface(object):
|
||||
def SucceedCubeWork(self, itemVnum, count):
|
||||
self.wndCube.Clear()
|
||||
|
||||
print "큐브 제작 성공! [%d:%d]" % (itemVnum, count)
|
||||
print "ť<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>! [%d:%d]" % (itemVnum, count)
|
||||
|
||||
if 0: # 결과 메시지 출력은 생략 한다
|
||||
if 0: # <EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>
|
||||
self.wndCubeResult.SetPosition(*self.wndCube.GetGlobalPosition())
|
||||
self.wndCubeResult.SetCubeResultItem(itemVnum, count)
|
||||
self.wndCubeResult.Open()
|
||||
@@ -1289,7 +1299,7 @@ class Interface(object):
|
||||
btn = uiWhisper.WhisperButton()
|
||||
|
||||
# QUEST_LETTER_IMAGE
|
||||
##!! 20061026.levites.퀘스트_이미지_교체
|
||||
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD>̹<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD>ü
|
||||
import item
|
||||
if "item"==iconType:
|
||||
item.SelectItem(int(iconName))
|
||||
@@ -1336,7 +1346,7 @@ class Interface(object):
|
||||
screenWidth = wndMgr.GetScreenWidth()
|
||||
screenHeight = wndMgr.GetScreenHeight()
|
||||
|
||||
##!! 20061026.levites.퀘스트_위치_보정
|
||||
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD><EFBFBD>ġ_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if self.wndParty.IsShow():
|
||||
xPos = 100 + 30
|
||||
else:
|
||||
@@ -1390,8 +1400,8 @@ class Interface(object):
|
||||
def __InitWhisper(self):
|
||||
chat.InitWhisper(self)
|
||||
|
||||
## 채팅창의 "메시지 보내기"를 눌렀을때 이름 없는 대화창을 여는 함수
|
||||
## 이름이 없기 때문에 기존의 WhisperDialogDict 와 별도로 관리된다.
|
||||
## ä<EFBFBD><EFBFBD>â<EFBFBD><EFBFBD> "<22><EFBFBD><DEBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȭâ<C8AD><C3A2> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
|
||||
## <EFBFBD≯<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WhisperDialogDict <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>.
|
||||
def OpenWhisperDialogWithoutTarget(self):
|
||||
if not self.dlgWhisperWithoutTarget:
|
||||
dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog)
|
||||
@@ -1408,7 +1418,7 @@ class Interface(object):
|
||||
self.dlgWhisperWithoutTarget.SetTop()
|
||||
self.dlgWhisperWithoutTarget.OpenWithoutTarget(self.RegisterTemporaryWhisperDialog)
|
||||
|
||||
## 이름 없는 대화창에서 이름을 결정했을때 WhisperDialogDict에 창을 넣어주는 함수
|
||||
## <EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȭâ<C8AD><C3A2><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WhisperDialogDict<EFBFBD><EFBFBD> â<><C3A2> <20>־<EFBFBD><D6BE>ִ<EFBFBD> <20>Լ<EFBFBD>
|
||||
def RegisterTemporaryWhisperDialog(self, name):
|
||||
if not self.dlgWhisperWithoutTarget:
|
||||
return
|
||||
@@ -1427,7 +1437,7 @@ class Interface(object):
|
||||
self.dlgWhisperWithoutTarget = None
|
||||
self.__CheckGameMaster(name)
|
||||
|
||||
## 캐릭터 메뉴의 1:1 대화 하기를 눌렀을때 이름을 가지고 바로 창을 여는 함수
|
||||
## ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEB4><EFBFBD> 1:1 <20><>ȭ <20>ϱ⸦ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
|
||||
def OpenWhisperDialog(self, name):
|
||||
if not self.whisperDialogDict.has_key(name):
|
||||
dlg = self.__MakeWhisperDialog(name)
|
||||
@@ -1440,7 +1450,7 @@ class Interface(object):
|
||||
if 0 != btn:
|
||||
self.__DestroyWhisperButton(btn)
|
||||
|
||||
## 다른 캐릭터로부터 메세지를 받았을때 일단 버튼만 띄워 두는 함수
|
||||
## <EFBFBD>ٸ<EFBFBD> ij<><C4B3><EFBFBD>ͷκ<CDB7><CEBA><EFBFBD> <20><EFBFBD><DEBC><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEBE><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><>ư<EFBFBD><C6B0> <20><><EFBFBD> <20>δ<EFBFBD> <20>Լ<EFBFBD>
|
||||
def RecvWhisper(self, name):
|
||||
if not self.whisperDialogDict.has_key(name):
|
||||
btn = self.__FindWhisperButton(name)
|
||||
@@ -1459,7 +1469,7 @@ class Interface(object):
|
||||
def MakeWhisperButton(self, name):
|
||||
self.__MakeWhisperButton(name)
|
||||
|
||||
## 버튼을 눌렀을때 창을 여는 함수
|
||||
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
|
||||
def ShowWhisperDialog(self, btn):
|
||||
try:
|
||||
self.__MakeWhisperDialog(btn.name)
|
||||
@@ -1471,11 +1481,11 @@ class Interface(object):
|
||||
import dbg
|
||||
dbg.TraceError("interface.ShowWhisperDialog - Failed to find key")
|
||||
|
||||
## 버튼 초기화
|
||||
## <EFBFBD><EFBFBD>ư <20>ʱ<EFBFBD>ȭ
|
||||
self.__DestroyWhisperButton(btn)
|
||||
|
||||
## WhisperDialog 창에서 최소화 명령을 수행했을때 호출되는 함수
|
||||
## 창을 최소화 합니다.
|
||||
## WhisperDialog â<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ּ<EFBFBD>ȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3>Ǵ<EFBFBD> <20>Լ<EFBFBD>
|
||||
## â<EFBFBD><EFBFBD> <20>ּ<EFBFBD>ȭ <20>մϴ<D5B4>.
|
||||
def MinimizeWhisperDialog(self, name):
|
||||
|
||||
if 0 != name:
|
||||
@@ -1483,8 +1493,8 @@ class Interface(object):
|
||||
|
||||
self.CloseWhisperDialog(name)
|
||||
|
||||
## WhisperDialog 창에서 닫기 명령을 수행했을때 호출되는 함수
|
||||
## 창을 지웁니다.
|
||||
## WhisperDialog â<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3>Ǵ<EFBFBD> <20>Լ<EFBFBD>
|
||||
## â<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
def CloseWhisperDialog(self, name):
|
||||
|
||||
if 0 == name:
|
||||
@@ -1503,7 +1513,7 @@ class Interface(object):
|
||||
import dbg
|
||||
dbg.TraceError("interface.CloseWhisperDialog - Failed to find key")
|
||||
|
||||
## 버튼의 개수가 바뀌었을때 버튼을 재정렬 하는 함수
|
||||
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ư<EFBFBD><C6B0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20>Լ<EFBFBD>
|
||||
def __ArrangeWhisperButton(self):
|
||||
|
||||
screenWidth = wndMgr.GetScreenWidth()
|
||||
@@ -1520,9 +1530,9 @@ class Interface(object):
|
||||
button.SetPosition(xPos + (int(count/yCount) * -50), yPos + (count%yCount * 63))
|
||||
count += 1
|
||||
|
||||
## 이름으로 Whisper 버튼을 찾아 리턴해 주는 함수
|
||||
## 버튼은 딕셔너리로 하지 않는 것은 정렬 되어 버려 순서가 유지 되지 않으며
|
||||
## 이로 인해 ToolTip들이 다른 버튼들에 의해 가려지기 때문이다.
|
||||
## <EFBFBD≯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Whisper <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> ã<><C3A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>Լ<EFBFBD>
|
||||
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><>ųʸ<C5B3><CAB8><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
## <EFBFBD>̷<EFBFBD> <20><><EFBFBD><EFBFBD> ToolTip<69><70><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><>ư<EFBFBD>鿡 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
|
||||
def __FindWhisperButton(self, name):
|
||||
for button in self.whisperButtonList:
|
||||
if button.name == name:
|
||||
@@ -1530,7 +1540,7 @@ class Interface(object):
|
||||
|
||||
return 0
|
||||
|
||||
## 창을 만듭니다.
|
||||
## â<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
def __MakeWhisperDialog(self, name):
|
||||
dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog)
|
||||
dlgWhisper.BindInterface(self)
|
||||
@@ -1542,7 +1552,7 @@ class Interface(object):
|
||||
|
||||
return dlgWhisper
|
||||
|
||||
## 버튼을 만듭니다.
|
||||
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
def __MakeWhisperButton(self, name):
|
||||
whisperButton = uiWhisper.WhisperButton()
|
||||
whisperButton.SetUpVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub")
|
||||
|
||||
@@ -105,30 +105,47 @@ def DefineSkillIndexDict():
|
||||
},
|
||||
}
|
||||
|
||||
def RegisterSkill(race, group, empire=0):
|
||||
|
||||
def RegisterSkill(race, group, empire = 0):
|
||||
DefineSkillIndexDict()
|
||||
|
||||
job = chr.RaceToJob(race)
|
||||
|
||||
## Character Skill
|
||||
if SKILL_INDEX_DICT.has_key(job):
|
||||
# Ensure group 0 exists (horse-only) when cooldown fix is on
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN and SKILL_INDEX_DICT.has_key(job):
|
||||
if not SKILL_INDEX_DICT[job].has_key(0):
|
||||
# Assassin has 140 as well; others only 137-139
|
||||
SKILL_INDEX_DICT[job][0] = (0, 0, 0, 0, 0, 0, 0, 0,
|
||||
137, 0, 138, 0, 139, 0) + ((140,) if job == JOB_ASSASSIN else ())
|
||||
|
||||
if SKILL_INDEX_DICT[job].has_key(group):
|
||||
|
||||
activeSkillList = SKILL_INDEX_DICT[job][group]
|
||||
|
||||
for i in xrange(len(activeSkillList)):
|
||||
skillIndex = activeSkillList[i]
|
||||
|
||||
## 7번 8번 스킬은 여기서 설정하면 안됨
|
||||
if i != 6 and i != 7:
|
||||
player.SetSkill(i+1, skillIndex)
|
||||
|
||||
supportSkillList = SKILL_INDEX_DICT[job]["SUPPORT"]
|
||||
## Support Skills (Always register regardless of skill group)
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
if SKILL_INDEX_DICT.has_key(job):
|
||||
supportSkillList = SKILL_INDEX_DICT[job].get("SUPPORT", ())
|
||||
|
||||
for i in xrange(len(supportSkillList)):
|
||||
player.SetSkill(i+100+1, supportSkillList[i])
|
||||
player.SetSkill(i + 100 + 1, supportSkillList[i])
|
||||
|
||||
## Character Skill
|
||||
if SKILL_INDEX_DICT.has_key(job):
|
||||
if SKILL_INDEX_DICT[job].has_key(group):
|
||||
activeSkillList = SKILL_INDEX_DICT[job][group]
|
||||
|
||||
if not app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
for i, idx in enumerate(activeSkillList):
|
||||
if i not in (6, 7): # keep skipping unused slots
|
||||
player.SetSkill(i + 1, idx)
|
||||
else:
|
||||
for i in xrange(len(activeSkillList)):
|
||||
skillIndex = activeSkillList[i]
|
||||
|
||||
## 7<><37> 8<><38> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD>⼭ <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>ȵ<EFBFBD>
|
||||
if i != 6 and i != 7:
|
||||
player.SetSkill(i + 1, skillIndex)
|
||||
|
||||
supportSkillList = SKILL_INDEX_DICT[job]["SUPPORT"]
|
||||
|
||||
for i in xrange(len(supportSkillList)):
|
||||
player.SetSkill(i + 100 + 1, supportSkillList[i])
|
||||
|
||||
## Language Skill
|
||||
if 0 != empire:
|
||||
@@ -211,20 +228,20 @@ def __InitData():
|
||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_SPEEDUP_GREEN, "", "d:/ymir work/effect/etc/recuperation/drugup_green.mse")
|
||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DXUP_PURPLE, "", "d:/ymir work/effect/etc/recuperation/drugup_purple.mse")
|
||||
|
||||
#자동물약 HP, SP
|
||||
#<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HP, SP
|
||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_AUTO_HPUP, "", "d:/ymir work/effect/etc/recuperation/autodrugup_red.mse")
|
||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_AUTO_SPUP, "", "d:/ymir work/effect/etc/recuperation/autodrugup_blue.mse")
|
||||
|
||||
#라마단 초승달의 반지(71135) 착용순간 발동 이펙트
|
||||
#<EFBFBD><EFBFBD> <20>ʽ´<CABD><C2B4><EFBFBD> <20><><EFBFBD><EFBFBD>(71135) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_RAMADAN_RING_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item1.mse")
|
||||
|
||||
#할로윈 사탕 착용순간 발동 이펙트
|
||||
#<EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_HALLOWEEN_CANDY_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item2.mse")
|
||||
|
||||
#행복의 반지 착용순간 발동 이펙트
|
||||
#<EFBFBD>ູ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_HAPPINESS_RING_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item3.mse")
|
||||
|
||||
#사랑의 팬던트 착용순간 발동 이펙트
|
||||
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_LOVE_PENDANT_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item4.mse")
|
||||
|
||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_PENETRATE, "Bip01", "d:/ymir work/effect/hit/gwantong.mse")
|
||||
@@ -251,8 +268,8 @@ def __InitData():
|
||||
#chrmgr.RegisterCacheEffect(chrmgr.EFFECT_SUCCESS, "", "season1/effect/success.mse")
|
||||
#chrmgr.RegisterCacheEffect(chrmgr.EFFECT_FAIL, "", "season1/effect/fail.mse")
|
||||
|
||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_LEVELUP_ON_14_FOR_GERMANY, "","season1/effect/paymessage_warning.mse") #레벨업 14일때 ( 독일전용 )
|
||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_LEVELUP_UNDER_15_FOR_GERMANY, "", "season1/effect/paymessage_decide.mse" )#레벨업 15일때 ( 독일전용 )
|
||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_LEVELUP_ON_14_FOR_GERMANY, "","season1/effect/paymessage_warning.mse") #<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 14<31>϶<EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> )
|
||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_LEVELUP_UNDER_15_FOR_GERMANY, "", "season1/effect/paymessage_decide.mse" )#<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 15<31>϶<EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> )
|
||||
|
||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_PERCENT_DAMAGE1, "", "d:/ymir work/effect/hit/percent_damage1.mse")
|
||||
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_PERCENT_DAMAGE2, "", "d:/ymir work/effect/hit/percent_damage2.mse")
|
||||
@@ -361,28 +378,28 @@ def __LoadGameEffect():
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+0, "Bip01", localeInfo.FN_GM_MARK)
|
||||
# END_OF_LOCALE
|
||||
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+3, "Bip01", "d:/ymir work/effect/hit/blow_poison/poison_loop.mse") ## 중독
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+3, "Bip01", "d:/ymir work/effect/hit/blow_poison/poison_loop.mse") ## <EFBFBD>ߵ<EFBFBD>
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+4, "", "d:/ymir work/effect/affect/slow.mse")
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+5, "Bip01 Head", "d:/ymir work/effect/etc/stun/stun_loop.mse")
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+6, "", "d:/ymir work/effect/etc/ready/ready.mse")
|
||||
#chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+8, "", "d:/ymir work/guild/effect/10_construction.mse")
|
||||
#chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+9, "", "d:/ymir work/guild/effect/20_construction.mse")
|
||||
#chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+10, "", "d:/ymir work/guild/effect/20_upgrade.mse")
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+16, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse") ## 천근추 (밑에도 있따-_-)
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+17, "", "d:/ymir work/pc/assassin/effect/gyeonggong_loop.mse") ## 자객 - 경공
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+16, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse") ## õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28>ؿ<EFBFBD><D8BF><EFBFBD> <20>ֵ<EFBFBD>-_-)
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+17, "", "d:/ymir work/pc/assassin/effect/gyeonggong_loop.mse") ## <EFBFBD>ڰ<EFBFBD> - <20><><EFBFBD>
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+19, "Bip01 R Finger2", "d:/ymir work/pc/sura/effect/gwigeom_loop.mse")
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+20, "", "d:/ymir work/pc/sura/effect/fear_loop.mse") ## 수라 - 공포
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+21, "", "d:/ymir work/pc/sura/effect/jumagap_loop.mse") ## 수라 - 주마갑
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+22, "", "d:/ymir work/pc/shaman/effect/3hosin_loop.mse") ## 무당 - 호신
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+23, "", "d:/ymir work/pc/shaman/effect/boho_loop.mse") ## 무당 - 보호
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+24, "", "d:/ymir work/pc/shaman/effect/10kwaesok_loop.mse") ## 무당 - 쾌속
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+20, "", "d:/ymir work/pc/sura/effect/fear_loop.mse") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+21, "", "d:/ymir work/pc/sura/effect/jumagap_loop.mse") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20>ָ<EFBFBD><D6B8><EFBFBD>
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+22, "", "d:/ymir work/pc/shaman/effect/3hosin_loop.mse") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - ȣ<><C8A3>
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+23, "", "d:/ymir work/pc/shaman/effect/boho_loop.mse") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ȣ
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+24, "", "d:/ymir work/pc/shaman/effect/10kwaesok_loop.mse") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD>
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+25, "", "d:/ymir work/pc/sura/effect/heuksin_loop.mse")
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+26, "", "d:/ymir work/pc/sura/effect/muyeong_loop.mse")
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+28, "Bip01", "d:/ymir work/effect/hit/blow_flame/flame_loop.mse")
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+29, "Bip01 R Hand", "d:/ymir work/pc/shaman/effect/6gicheon_hand.mse")
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+30, "Bip01 L Hand", "d:/ymir work/pc/shaman/effect/jeungryeok_hand.mse")
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+32, "Bip01 Head", "d:/ymir work/pc/sura/effect/pabeop_loop.mse")
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+33, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse") ## 천근추 (Fallen)
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+33, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse") ## õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Fallen)
|
||||
## 34 Polymoph
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+35, "", "d:/ymir work/effect/etc/guild_war_flag/flag_red.mse")
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+36, "", "d:/ymir work/effect/etc/guild_war_flag/flag_blue.mse")
|
||||
@@ -416,53 +433,53 @@ def __LoadGameEffect():
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+20, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-4-2-2.mse")
|
||||
|
||||
## FlyData
|
||||
effect.RegisterIndexedFlyData(effect.FLY_EXP, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_yellow_small2.msf") ## 노란색 (EXP)
|
||||
effect.RegisterIndexedFlyData(effect.FLY_HP_MEDIUM, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_small.msf") ## 빨간색 (HP) 작은거
|
||||
effect.RegisterIndexedFlyData(effect.FLY_HP_BIG, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_big.msf") ## 빨간색 (HP) 큰거
|
||||
effect.RegisterIndexedFlyData(effect.FLY_SP_SMALL, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_warrior_small.msf") ## 파란색 꼬리만 있는거
|
||||
effect.RegisterIndexedFlyData(effect.FLY_SP_MEDIUM, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_small.msf") ## 파란색 작은거
|
||||
effect.RegisterIndexedFlyData(effect.FLY_SP_BIG, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_big.msf") ## 파란색 큰거
|
||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK1, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_1.msf") ## 폭죽 1
|
||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK2, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_2.msf") ## 폭죽 2
|
||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK3, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_3.msf") ## 폭죽 3
|
||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK4, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_4.msf") ## 폭죽 4
|
||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK5, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_5.msf") ## 폭죽 5
|
||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK6, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_6.msf") ## 폭죽 6
|
||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK_XMAS, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_xmas.msf") ## 폭죽 X-Mas
|
||||
effect.RegisterIndexedFlyData(effect.FLY_CHAIN_LIGHTNING, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/pc/shaman/effect/pokroe.msf") ## 폭뢰격
|
||||
effect.RegisterIndexedFlyData(effect.FLY_HP_SMALL, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_smallest.msf") ## 빨간색 매우 작은거
|
||||
effect.RegisterIndexedFlyData(effect.FLY_SKILL_MUYEONG, effect.INDEX_FLY_TYPE_AUTO_FIRE, "d:/ymir work/pc/sura/effect/muyeong_fly.msf") ## 무영진
|
||||
effect.RegisterIndexedFlyData(effect.FLY_EXP, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_yellow_small2.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (EXP)
|
||||
effect.RegisterIndexedFlyData(effect.FLY_HP_MEDIUM, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_small.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (HP) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
effect.RegisterIndexedFlyData(effect.FLY_HP_BIG, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_big.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (HP) ū<EFBFBD><EFBFBD>
|
||||
effect.RegisterIndexedFlyData(effect.FLY_SP_SMALL, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_warrior_small.msf") ## <EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ°<D6B4>
|
||||
effect.RegisterIndexedFlyData(effect.FLY_SP_MEDIUM, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_small.msf") ## <EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
effect.RegisterIndexedFlyData(effect.FLY_SP_BIG, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_big.msf") ## <EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD> ū<><C5AB>
|
||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK1, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_1.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1
|
||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK2, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_2.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2
|
||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK3, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_3.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3
|
||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK4, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_4.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4
|
||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK5, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_5.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5
|
||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK6, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_6.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 6
|
||||
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK_XMAS, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_xmas.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> X-Mas
|
||||
effect.RegisterIndexedFlyData(effect.FLY_CHAIN_LIGHTNING, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/pc/shaman/effect/pokroe.msf") ## <EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD>
|
||||
effect.RegisterIndexedFlyData(effect.FLY_HP_SMALL, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_smallest.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ſ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
effect.RegisterIndexedFlyData(effect.FLY_SKILL_MUYEONG, effect.INDEX_FLY_TYPE_AUTO_FIRE, "d:/ymir work/pc/sura/effect/muyeong_fly.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
#########################################################################################
|
||||
## Emoticon
|
||||
EmoticonStr = "d:/ymir work/effect/etc/emoticon/"
|
||||
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+0, "", EmoticonStr+"sweat.mse")
|
||||
net.RegisterEmoticonString("(황당)")
|
||||
net.RegisterEmoticonString("(Ȳ<EFBFBD><EFBFBD>)")
|
||||
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+1, "", EmoticonStr+"money.mse")
|
||||
net.RegisterEmoticonString("(돈)")
|
||||
net.RegisterEmoticonString("(<EFBFBD><EFBFBD>)")
|
||||
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+2, "", EmoticonStr+"happy.mse")
|
||||
net.RegisterEmoticonString("(기쁨)")
|
||||
net.RegisterEmoticonString("(<EFBFBD><EFBFBD><EFBFBD>)")
|
||||
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+3, "", EmoticonStr+"love_s.mse")
|
||||
net.RegisterEmoticonString("(좋아)")
|
||||
net.RegisterEmoticonString("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)")
|
||||
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+4, "", EmoticonStr+"love_l.mse")
|
||||
net.RegisterEmoticonString("(사랑)")
|
||||
net.RegisterEmoticonString("(<EFBFBD><EFBFBD><EFBFBD>)")
|
||||
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+5, "", EmoticonStr+"angry.mse")
|
||||
net.RegisterEmoticonString("(분노)")
|
||||
net.RegisterEmoticonString("(<EFBFBD>г<EFBFBD>)")
|
||||
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+6, "", EmoticonStr+"aha.mse")
|
||||
net.RegisterEmoticonString("(아하)")
|
||||
net.RegisterEmoticonString("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)")
|
||||
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+7, "", EmoticonStr+"gloom.mse")
|
||||
net.RegisterEmoticonString("(우울)")
|
||||
net.RegisterEmoticonString("(<EFBFBD><EFBFBD><EFBFBD>)")
|
||||
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+8, "", EmoticonStr+"sorry.mse")
|
||||
net.RegisterEmoticonString("(죄송)")
|
||||
net.RegisterEmoticonString("(<EFBFBD>˼<EFBFBD>)")
|
||||
|
||||
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+9, "", EmoticonStr+"!_mix_back.mse")
|
||||
net.RegisterEmoticonString("(!)")
|
||||
@@ -1128,7 +1145,7 @@ def __LoadGameShamanEx(race, path):
|
||||
#chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+10, "budong.msa")
|
||||
|
||||
START_INDEX = 0
|
||||
#skill.SKILL_EFFECT_COUNT 까지//
|
||||
#skill.SKILL_EFFECT_COUNT <EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
||||
for i in (1, 2, 3):
|
||||
END_STRING = ""
|
||||
if i != 0: END_STRING = "_%d" % (i+1)
|
||||
@@ -1335,7 +1352,7 @@ def LoadGuildBuildingList(filename):
|
||||
elif itemID == uiGuild.MATERIAL_PLYWOOD_ID:
|
||||
materialList[uiGuild.MATERIAL_PLYWOOD_INDEX] = count
|
||||
|
||||
## GuildSymbol 은 일반 NPC 들과 함께 등록한다.
|
||||
## GuildSymbol <EFBFBD><EFBFBD> <20>Ϲ<EFBFBD> NPC <20><><EFBFBD> <20>Բ<EFBFBD> <20><><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
import chrmgr
|
||||
chrmgr.RegisterRaceSrcName(name, folderName)
|
||||
chrmgr.RegisterRaceName(vnum, name)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
SERVER_NAME = "Metin2"
|
||||
SERVER_NAME_TEST = "Test"
|
||||
SERVER_IP = "10.246.140.76"
|
||||
SERVER_IP = "10.122.201.77"
|
||||
SERVER_IP_TEST = "127.0.0.1"
|
||||
CH1_NAME = "CH1"
|
||||
CH2_NAME = "CH2"
|
||||
|
||||
@@ -1385,6 +1385,19 @@ class SlotWindow(Window):
|
||||
def SetSlotCoolTime(self, slotIndex, coolTime, elapsedTime = 0.0):
|
||||
wndMgr.SetSlotCoolTime(self.hWnd, slotIndex, coolTime, elapsedTime)
|
||||
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
def StoreSlotCoolTime(self, key, slotIndex, coolTime, elapsedTime = 0.0):
|
||||
wndMgr.StoreSlotCoolTime(self.hWnd, key, slotIndex, coolTime, elapsedTime)
|
||||
|
||||
def RestoreSlotCoolTime(self, key):
|
||||
wndMgr.RestoreSlotCoolTime(self.hWnd, key)
|
||||
|
||||
def TransferSlotCoolTime(self, slotIndex1, slotIndex2):
|
||||
wndMgr.TransferSlotCoolTime(self.hWnd, slotIndex1, slotIndex2)
|
||||
|
||||
def ClearSlotCoolTime(self, slotIndex):
|
||||
wndMgr.ClearSlotCoolTime(self.hWnd, slotIndex)
|
||||
|
||||
def DisableSlot(self, slotIndex):
|
||||
wndMgr.DisableSlot(self.hWnd, slotIndex)
|
||||
|
||||
|
||||
@@ -50,7 +50,11 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
SUPPORT_PAGE_SLOT_COUNT = 12
|
||||
|
||||
PAGE_SLOT_COUNT = 12
|
||||
PAGE_HORSE = 2
|
||||
|
||||
if app.FIX_HORSE_SKILLS_TAB:
|
||||
PAGE_HORSE = 3
|
||||
else:
|
||||
PAGE_HORSE = 2
|
||||
|
||||
SKILL_GROUP_NAME_DICT = {
|
||||
playerSettingModule.JOB_WARRIOR : { 1 : localeInfo.SKILL_GROUP_WARRIOR_1, 2 : localeInfo.SKILL_GROUP_WARRIOR_2, },
|
||||
@@ -131,6 +135,10 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
self.supportSkillPointValue = None
|
||||
self.skillGroupButton1 = None
|
||||
self.skillGroupButton2 = None
|
||||
|
||||
if app.FIX_HORSE_SKILLS_TAB:
|
||||
self.skillGroupButton3 = None
|
||||
|
||||
self.activeSkillGroupName = None
|
||||
|
||||
self.guildNameSlot = None
|
||||
@@ -178,6 +186,10 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
self.supportSkillPointValue = self.GetChild("Support_Skill_Point_Value")
|
||||
self.skillGroupButton1 = self.GetChild("Skill_Group_Button_1")
|
||||
self.skillGroupButton2 = self.GetChild("Skill_Group_Button_2")
|
||||
|
||||
if app.FIX_HORSE_SKILLS_TAB:
|
||||
self.skillGroupButton3 = self.GetChild("Skill_Group_Button_3")
|
||||
|
||||
self.activeSkillGroupName = self.GetChild("Active_Skill_Group_Name")
|
||||
|
||||
self.tabDict = {
|
||||
@@ -237,11 +249,12 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
self.skillGroupButton = (
|
||||
self.GetChild("Skill_Group_Button_1"),
|
||||
self.GetChild("Skill_Group_Button_2"),
|
||||
)
|
||||
) + ((self.GetChild("Skill_Group_Button_3"),) if app.FIX_HORSE_SKILLS_TAB else ())
|
||||
|
||||
|
||||
global SHOW_ONLY_ACTIVE_SKILL
|
||||
global HIDE_SUPPORT_SKILL_POINT
|
||||
|
||||
if SHOW_ONLY_ACTIVE_SKILL or HIDE_SUPPORT_SKILL_POINT:
|
||||
self.GetChild("Support_Skill_Point_Label").Hide()
|
||||
|
||||
@@ -253,6 +266,7 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
self.questScrollBar = self.GetChild("Quest_ScrollBar")
|
||||
self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.OnQuestScroll))
|
||||
self.questSlot = self.GetChild("Quest_Slot")
|
||||
|
||||
for i in xrange(quest.QUEST_MAX_NUM):
|
||||
self.questSlot.HideSlotBaseImage(i)
|
||||
self.questSlot.SetCoverButton(i,\
|
||||
@@ -264,6 +278,7 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
self.questNameList = []
|
||||
self.questLastTimeList = []
|
||||
self.questLastCountList = []
|
||||
|
||||
for i in xrange(quest.QUEST_MAX_NUM):
|
||||
self.questNameList.append(self.GetChild("Quest_Name_0" + str(i)))
|
||||
self.questLastTimeList.append(self.GetChild("Quest_LastTime_0" + str(i)))
|
||||
@@ -284,7 +299,6 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
"d:/ymir work/ui/game/windows/btn_plus_down.sub")
|
||||
|
||||
def __SetEmotionSlot(self):
|
||||
|
||||
self.emotionToolTip = uiToolTip.ToolTip()
|
||||
|
||||
for slot in (self.soloEmotionSlot, self.dualEmotionSlot):
|
||||
@@ -302,6 +316,7 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
emotionIdx = slotIdx
|
||||
|
||||
slot = self.soloEmotionSlot
|
||||
|
||||
if slotIdx > 50:
|
||||
slot = self.dualEmotionSlot
|
||||
|
||||
@@ -314,16 +329,19 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
|
||||
if app.IsPressed(app.DIK_LCONTROL):
|
||||
player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_EMOTION, slotIndex)
|
||||
|
||||
return
|
||||
|
||||
mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_EMOTION, slotIndex, slotIndex)
|
||||
|
||||
def __ClickEmotionSlot(self, slotIndex):
|
||||
print "click emotion"
|
||||
|
||||
if not slotIndex in emotion.EMOTION_DICT:
|
||||
return
|
||||
|
||||
print "check acting"
|
||||
|
||||
if player.IsActingEmotion():
|
||||
return
|
||||
|
||||
@@ -336,6 +354,7 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
if 0 == vid or vid == player.GetMainCharacterIndex() or chr.IsNPC(vid) or chr.IsEnemy(vid):
|
||||
import chat
|
||||
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EMOTION_CHOOSE_ONE)
|
||||
|
||||
return
|
||||
|
||||
command += " " + chr.GetNameByVID(vid)
|
||||
@@ -521,7 +540,7 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
except:
|
||||
#import exception
|
||||
#exception.Abort("CharacterWindow.RefreshStatus.BindObject")
|
||||
## 게임이 튕겨 버림
|
||||
## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ƨ<><C6A8> <20><><EFBFBD><EFBFBD>
|
||||
pass
|
||||
|
||||
self.__RefreshStatusPlusButtonList()
|
||||
@@ -595,25 +614,21 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
statusPlusButton.Hide()
|
||||
|
||||
def SelectSkill(self, skillSlotIndex):
|
||||
|
||||
mouseController = mouseModule.mouseController
|
||||
|
||||
if False == mouseController.isAttached():
|
||||
|
||||
srcSlotIndex = self.__RealSkillSlotToSourceSlot(skillSlotIndex)
|
||||
selectedSkillIndex = player.GetSkillIndex(srcSlotIndex)
|
||||
|
||||
if skill.CanUseSkill(selectedSkillIndex):
|
||||
|
||||
if app.IsPressed(app.DIK_LCONTROL):
|
||||
|
||||
player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_SKILL, srcSlotIndex)
|
||||
|
||||
return
|
||||
|
||||
mouseController.AttachObject(self, player.SLOT_TYPE_SKILL, srcSlotIndex, selectedSkillIndex)
|
||||
|
||||
else:
|
||||
|
||||
mouseController.DeattachObject()
|
||||
|
||||
def SelectEmptySlot(self, SlotIndex):
|
||||
@@ -621,7 +636,6 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
|
||||
## ToolTip
|
||||
def OverInItem(self, slotNumber):
|
||||
|
||||
if mouseModule.mouseController.isAttached():
|
||||
return
|
||||
|
||||
@@ -728,6 +742,7 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
|
||||
def __GetStatMinusPoint(self):
|
||||
POINT_STAT_RESET_COUNT = 112
|
||||
|
||||
return player.GetStatus(POINT_STAT_RESET_COUNT)
|
||||
|
||||
def __OverInStatMinusButton(self, stat):
|
||||
@@ -761,6 +776,7 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
|
||||
def OnPressEscapeKey(self):
|
||||
self.Close()
|
||||
|
||||
return True
|
||||
|
||||
def OnUpdate(self):
|
||||
@@ -771,20 +787,20 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
global SHOW_LIMIT_SUPPORT_SKILL_LIST
|
||||
|
||||
skillPage = self.skillPageDict[name]
|
||||
|
||||
startSlotIndex = skillPage.GetStartIndex()
|
||||
|
||||
if "ACTIVE" == name:
|
||||
if self.PAGE_HORSE == self.curSelectedSkillGroup:
|
||||
startSlotIndex += slotCount
|
||||
|
||||
getSkillType=skill.GetSkillType
|
||||
getSkillIndex=player.GetSkillIndex
|
||||
getSkillGrade=player.GetSkillGrade
|
||||
getSkillLevel=player.GetSkillLevel
|
||||
getSkillLevelUpPoint=skill.GetSkillLevelUpPoint
|
||||
getSkillMaxLevel=skill.GetSkillMaxLevel
|
||||
for i in xrange(slotCount+1):
|
||||
getSkillType = skill.GetSkillType
|
||||
getSkillIndex = player.GetSkillIndex
|
||||
getSkillGrade = player.GetSkillGrade
|
||||
getSkillLevel = player.GetSkillLevel
|
||||
getSkillLevelUpPoint = skill.GetSkillLevelUpPoint
|
||||
getSkillMaxLevel = skill.GetSkillMaxLevel
|
||||
|
||||
for i in xrange(slotCount + 1):
|
||||
slotIndex = i + startSlotIndex
|
||||
skillIndex = getSkillIndex(slotIndex)
|
||||
|
||||
@@ -798,7 +814,7 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
skillLevel = getSkillLevel(slotIndex)
|
||||
skillType = getSkillType(skillIndex)
|
||||
|
||||
## 승마 스킬 예외 처리
|
||||
## <EFBFBD>¸<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> ó<><C3B3>
|
||||
if player.SKILL_INDEX_RIDING == skillIndex:
|
||||
if 1 == skillGrade:
|
||||
skillLevel += 19
|
||||
@@ -807,48 +823,124 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
elif 3 == skillGrade:
|
||||
skillLevel = 40
|
||||
|
||||
skillPage.SetSkillSlotNew(slotIndex, skillIndex, max(skillLevel-1, 0), skillLevel)
|
||||
skillPage.SetSkillSlotNew(slotIndex, skillIndex, max(skillLevel - 1, 0), skillLevel)
|
||||
skillPage.SetSlotCount(slotIndex, skillLevel)
|
||||
|
||||
## ACTIVE
|
||||
elif skill.SKILL_TYPE_ACTIVE == skillType:
|
||||
for j in xrange(skill.SKILL_GRADE_COUNT):
|
||||
realSlotIndex = self.__GetRealSkillSlot(j, slotIndex)
|
||||
|
||||
skillPage.SetSkillSlotNew(realSlotIndex, skillIndex, j, skillLevel)
|
||||
skillPage.SetCoverButton(realSlotIndex)
|
||||
|
||||
if (skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT-1):
|
||||
if (skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT - 1):
|
||||
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
|
||||
elif (not self.__CanUseSkillNow()) or (skillGrade != j):
|
||||
skillPage.SetSlotCount(realSlotIndex, 0)
|
||||
skillPage.DisableCoverButton(realSlotIndex)
|
||||
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
if not player.IsSkillActive(slotIndex):
|
||||
skillPage.DeactivateSlot(realSlotIndex)
|
||||
|
||||
if player.IsSkillCoolTime(slotIndex) and skillGrade != j:
|
||||
skillPage.TransferSlotCoolTime(realSlotIndex, self.__GetRealSkillSlot(skillGrade, i))
|
||||
else:
|
||||
self.SkillClearCoolTime(realSlotIndex)
|
||||
else:
|
||||
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
|
||||
|
||||
## 그외
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
# Check if this is the active slot
|
||||
# Grade 3 appears in slot 2, so check both conditions
|
||||
isActiveSlot = (skillGrade == j) or ((skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT - 1))
|
||||
|
||||
if player.IsSkillActive(slotIndex) and isActiveSlot:
|
||||
skillPage.ActivateSlot(realSlotIndex)
|
||||
else:
|
||||
skillPage.DeactivateSlot(realSlotIndex)
|
||||
else:
|
||||
if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
|
||||
realSlotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
|
||||
|
||||
skillPage.SetSkillSlot(realSlotIndex, skillIndex, skillLevel)
|
||||
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
|
||||
|
||||
if skill.CanUseSkill(skillIndex):
|
||||
skillPage.SetCoverButton(realSlotIndex)
|
||||
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
# Clear storage for horse skills at level 0 BEFORE restore runs
|
||||
if skillType == skill.SKILL_TYPE_HORSE and skillLevel == 0:
|
||||
player.ResetHorseSkillCoolTime(skillIndex, realSlotIndex)
|
||||
skillPage.SetSlotCoolTime(realSlotIndex, 0)
|
||||
|
||||
if player.IsSkillActive(slotIndex):
|
||||
skillPage.ActivateSlot(realSlotIndex)
|
||||
else:
|
||||
skillPage.DeactivateSlot(realSlotIndex)
|
||||
else:
|
||||
if not player.IsSkillActive(slotIndex):
|
||||
skillPage.DeactivateSlot(realSlotIndex)
|
||||
|
||||
skillPage.RefreshSlot()
|
||||
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
self.__RestoreSlotCoolTime(skillPage)
|
||||
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
def __RestoreSlotCoolTime(self, skillPage):
|
||||
restoreType = skill.SKILL_TYPE_NONE
|
||||
|
||||
if self.PAGE_HORSE == self.curSelectedSkillGroup:
|
||||
restoreType = skill.SKILL_TYPE_HORSE
|
||||
else:
|
||||
restoreType = skill.SKILL_TYPE_ACTIVE
|
||||
|
||||
skillPage.RestoreSlotCoolTime(restoreType)
|
||||
|
||||
def __ClearHorseSkillQuickSlots(self):
|
||||
HORSE_SKILL_SET = (137, 138, 139, 140)
|
||||
|
||||
quick_slot_per_page = 8 # two quick_slot windows * 4 slots
|
||||
quick_page_count = 4 # matches QUICKPAGE_NUMBER_FILENAME
|
||||
current_page = player.GetQuickPage()
|
||||
|
||||
for page in xrange(quick_page_count):
|
||||
player.SetQuickPage(page)
|
||||
|
||||
for local_slot in xrange(quick_slot_per_page):
|
||||
slotType, position = player.GetLocalQuickSlot(local_slot)
|
||||
|
||||
if slotType != player.SLOT_TYPE_SKILL:
|
||||
continue
|
||||
|
||||
skillIndex = player.GetSkillIndex(position)
|
||||
|
||||
if skillIndex in HORSE_SKILL_SET:
|
||||
player.RequestDeleteGlobalQuickSlot(page * quick_slot_per_page + local_slot)
|
||||
|
||||
player.SetQuickPage(current_page)
|
||||
|
||||
def RefreshSkill(self):
|
||||
|
||||
if self.isLoaded==0:
|
||||
if self.isLoaded == 0:
|
||||
return
|
||||
|
||||
if self.__IsChangedHorseRidingSkillLevel():
|
||||
if app.FIX_HORSE_SKILLS_TAB:
|
||||
if not self.__CanUseHorseSkill():
|
||||
if self.curSelectedSkillGroup == self.PAGE_HORSE:
|
||||
self.__SelectSkillGroup(0) # fall back to first active tab
|
||||
|
||||
self.__ClearHorseSkillQuickSlots() # remove horse skills from taskbar
|
||||
|
||||
self.RefreshCharacter()
|
||||
|
||||
return
|
||||
|
||||
|
||||
global SHOW_ONLY_ACTIVE_SKILL
|
||||
|
||||
if SHOW_ONLY_ACTIVE_SKILL:
|
||||
self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
|
||||
else:
|
||||
@@ -858,12 +950,11 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
self.RefreshSkillPlusButtonList()
|
||||
|
||||
def CanShowPlusButton(self, skillIndex, skillLevel, curStatPoint):
|
||||
|
||||
## 스킬이 있으면
|
||||
## <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if 0 == skillIndex:
|
||||
return False
|
||||
|
||||
## 레벨업 조건을 만족한다면
|
||||
## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵٸ<D1B4>
|
||||
if not skill.CanLevelUpSkill(skillIndex, skillLevel):
|
||||
return False
|
||||
|
||||
@@ -871,6 +962,7 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
|
||||
def __RefreshSkillPlusButton(self, name):
|
||||
global HIDE_SUPPORT_SKILL_POINT
|
||||
|
||||
if HIDE_SUPPORT_SKILL_POINT and "SUPPORT" == name:
|
||||
return
|
||||
|
||||
@@ -878,11 +970,13 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
slotWindow.HideAllSlotButton()
|
||||
|
||||
slotStatType = self.skillPageStatDict[name]
|
||||
|
||||
if 0 == slotStatType:
|
||||
return
|
||||
|
||||
statPoint = player.GetStatus(slotStatType)
|
||||
startSlotIndex = slotWindow.GetStartIndex()
|
||||
|
||||
if "HORSE" == name:
|
||||
startSlotIndex += self.ACTIVE_PAGE_SLOT_COUNT
|
||||
|
||||
@@ -904,7 +998,7 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
slotWindow.ShowSlotButton(self.__GetETCSkillRealSlotIndex(slotIndex))
|
||||
|
||||
else:
|
||||
if "SUPPORT" == name:
|
||||
if "SUPPORT" == name:
|
||||
if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
|
||||
if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
|
||||
slotWindow.ShowSlotButton(slotIndex)
|
||||
@@ -914,7 +1008,6 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
|
||||
|
||||
def RefreshSkillPlusButtonList(self):
|
||||
|
||||
if self.isLoaded==0:
|
||||
return
|
||||
|
||||
@@ -933,6 +1026,7 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
|
||||
except:
|
||||
import exception
|
||||
|
||||
exception.Abort("CharacterWindow.RefreshSkillPlusButtonList.BindObject")
|
||||
|
||||
def RefreshSkillPlusPointLabel(self):
|
||||
@@ -979,10 +1073,9 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
|
||||
mouseModule.mouseController.DeattachObject()
|
||||
|
||||
## FIXME : 스킬을 사용했을때 슬롯 번호를 가지고 해당 슬롯을 찾아서 업데이트 한다.
|
||||
## 매우 불합리. 구조 자체를 개선해야 할듯.
|
||||
## FIXME : <EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>Ƽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>Ѵ<EFBFBD>.
|
||||
## <EFBFBD>ſ<EFBFBD> <20><><EFBFBD>ո<EFBFBD>. <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>ҵ<EFBFBD>.
|
||||
def OnUseSkill(self, slotIndex, coolTime):
|
||||
|
||||
skillIndex = player.GetSkillIndex(slotIndex)
|
||||
skillType = skill.GetSkillType(skillIndex)
|
||||
|
||||
@@ -996,32 +1089,81 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
|
||||
for slotWindow in self.skillPageDict.values():
|
||||
if slotWindow.HasSlot(slotIndex):
|
||||
slotWindow.SetSlotCoolTime(slotIndex, coolTime)
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
slotWindow.StoreSlotCoolTime(skillType, slotIndex, coolTime)
|
||||
self.__RestoreSlotCoolTime(slotWindow)
|
||||
else:
|
||||
slotWindow.SetSlotCoolTime(slotIndex, coolTime)
|
||||
|
||||
return
|
||||
|
||||
def OnActivateSkill(self, slotIndex):
|
||||
|
||||
skillGrade = player.GetSkillGrade(slotIndex)
|
||||
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
skillIndex = player.GetSkillIndex(slotIndex)
|
||||
skillType = skill.GetSkillType(skillIndex)
|
||||
|
||||
## ACTIVE
|
||||
if skill.SKILL_TYPE_ACTIVE == skillType:
|
||||
skillGrade = player.GetSkillGrade(slotIndex)
|
||||
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
|
||||
## ETC
|
||||
else:
|
||||
slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
|
||||
else:
|
||||
skillGrade = player.GetSkillGrade(slotIndex)
|
||||
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
|
||||
|
||||
for slotWindow in self.skillPageDict.values():
|
||||
if slotWindow.HasSlot(slotIndex):
|
||||
slotWindow.ActivateSlot(slotIndex)
|
||||
|
||||
return
|
||||
|
||||
def OnDeactivateSkill(self, slotIndex):
|
||||
|
||||
skillGrade = player.GetSkillGrade(slotIndex)
|
||||
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
skillIndex = player.GetSkillIndex(slotIndex)
|
||||
skillType = skill.GetSkillType(skillIndex)
|
||||
|
||||
## ACTIVE
|
||||
if skill.SKILL_TYPE_ACTIVE == skillType:
|
||||
skillGrade = player.GetSkillGrade(slotIndex)
|
||||
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
|
||||
## ETC
|
||||
else:
|
||||
slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
|
||||
else:
|
||||
skillGrade = player.GetSkillGrade(slotIndex)
|
||||
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
|
||||
|
||||
for slotWindow in self.skillPageDict.values():
|
||||
if slotWindow.HasSlot(slotIndex):
|
||||
slotWindow.DeactivateSlot(slotIndex)
|
||||
|
||||
return
|
||||
|
||||
def __ShowJobToolTip(self):
|
||||
self.toolTipJob.ShowToolTip()
|
||||
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
def SkillClearCoolTime(self, slotIndex):
|
||||
skillIndex = player.GetSkillIndex(slotIndex)
|
||||
|
||||
if skillIndex < 1:
|
||||
return
|
||||
|
||||
skillType = skill.GetSkillType(skillIndex)
|
||||
|
||||
## ACTIVE
|
||||
# Map to the correct visual slot based on skill type
|
||||
if skill.SKILL_TYPE_ACTIVE == skillType:
|
||||
slotIndex = self.__GetRealSkillSlot(player.GetSkillGrade(slotIndex), slotIndex)
|
||||
else:
|
||||
slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
|
||||
|
||||
for slotWindow in self.skillPageDict.values():
|
||||
if slotWindow.HasSlot(slotIndex):
|
||||
slotWindow.SetSlotCoolTime(slotIndex, 0)
|
||||
|
||||
def __HideJobToolTip(self):
|
||||
self.toolTipJob.HideToolTip()
|
||||
|
||||
@@ -1037,6 +1179,7 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
jobInfoData=localeInfo.JOBINFO_DATA_LIST[mainJob][subJob]
|
||||
except IndexError:
|
||||
print "uiCharacter.CharacterWindow.__SetJobText(mainJob=%d, subJob=%d)" % (mainJob, subJob)
|
||||
|
||||
return
|
||||
|
||||
self.toolTipJob.AutoAppendTextLine(jobInfoTitle)
|
||||
@@ -1105,18 +1248,20 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
## GroupName
|
||||
self.__SetSkillGroupName(race, group)
|
||||
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
self.__SetSkillSlotData(race, group, empire)
|
||||
|
||||
## Skill
|
||||
if 0 == group:
|
||||
self.__SelectSkillGroup(0)
|
||||
|
||||
else:
|
||||
self.__SetSkillSlotData(race, group, empire)
|
||||
if not app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
self.__SetSkillSlotData(race, group, empire)
|
||||
|
||||
if self.__CanUseHorseSkill():
|
||||
self.__SelectSkillGroup(0)
|
||||
|
||||
def __SetSkillGroupName(self, race, group):
|
||||
|
||||
job = chr.RaceToJob(race)
|
||||
|
||||
if not self.SKILL_GROUP_NAME_DICT.has_key(job):
|
||||
@@ -1127,27 +1272,43 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
if 0 == group:
|
||||
self.skillGroupButton1.SetText(nameList[1])
|
||||
self.skillGroupButton2.SetText(nameList[2])
|
||||
|
||||
if app.FIX_HORSE_SKILLS_TAB:
|
||||
if self.__CanUseHorseSkill():
|
||||
self.skillGroupButton3.SetText(localeInfo.SKILL_GROUP_HORSE)
|
||||
self.skillGroupButton3.Show()
|
||||
self.skillGroupButton3.SetPosition(95, 2)
|
||||
else:
|
||||
self.skillGroupButton3.Hide()
|
||||
|
||||
self.skillGroupButton1.Show()
|
||||
self.skillGroupButton2.Show()
|
||||
self.activeSkillGroupName.Hide()
|
||||
|
||||
else:
|
||||
|
||||
if self.__CanUseHorseSkill():
|
||||
self.activeSkillGroupName.Hide()
|
||||
self.skillGroupButton1.SetText(nameList.get(group, "Noname"))
|
||||
self.skillGroupButton2.SetText(localeInfo.SKILL_GROUP_HORSE)
|
||||
self.skillGroupButton1.Show()
|
||||
self.skillGroupButton2.Show()
|
||||
|
||||
if app.FIX_HORSE_SKILLS_TAB:
|
||||
self.skillGroupButton3.SetText(localeInfo.SKILL_GROUP_HORSE)
|
||||
self.skillGroupButton1.Show()
|
||||
self.skillGroupButton2.Hide()
|
||||
self.skillGroupButton3.Show()
|
||||
self.skillGroupButton3.SetPosition(50, 2)
|
||||
else:
|
||||
self.skillGroupButton2.SetText(localeInfo.SKILL_GROUP_HORSE)
|
||||
self.skillGroupButton1.Show()
|
||||
self.skillGroupButton2.Show()
|
||||
else:
|
||||
self.activeSkillGroupName.SetText(nameList.get(group, "Noname"))
|
||||
self.activeSkillGroupName.Show()
|
||||
self.skillGroupButton1.Hide()
|
||||
self.skillGroupButton2.Hide()
|
||||
|
||||
def __SetSkillSlotData(self, race, group, empire=0):
|
||||
if app.FIX_HORSE_SKILLS_TAB:
|
||||
self.skillGroupButton3.Hide()
|
||||
|
||||
def __SetSkillSlotData(self, race, group, empire=0):
|
||||
## SkillIndex
|
||||
playerSettingModule.RegisterSkill(race, group, empire)
|
||||
|
||||
@@ -1157,19 +1318,42 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
## Refresh
|
||||
self.RefreshSkill()
|
||||
|
||||
def __SelectSkillGroup(self, index):
|
||||
for btn in self.skillGroupButton:
|
||||
btn.SetUp()
|
||||
self.skillGroupButton[index].Down()
|
||||
if app.FIX_HORSE_SKILLS_TAB:
|
||||
def __SelectSkillGroup(self, pageIndex, (PAGE_SKILL_1, PAGE_SKILL_2, PAGE_SKILL_HORSE) = range(3)):
|
||||
for pageButton in self.skillGroupButton:
|
||||
pageButton.SetUp()
|
||||
|
||||
if self.__CanUseHorseSkill():
|
||||
if 0 == index:
|
||||
index = net.GetMainActorSkillGroup()-1
|
||||
elif 1 == index:
|
||||
index = self.PAGE_HORSE
|
||||
self.skillGroupButton[pageIndex].Down()
|
||||
|
||||
self.curSelectedSkillGroup = index
|
||||
self.__SetSkillSlotData(net.GetMainActorRace(), index+1, net.GetMainActorEmpire())
|
||||
if pageIndex in (PAGE_SKILL_1, PAGE_SKILL_2):
|
||||
skillGroupIndex = net.GetMainActorSkillGroup()
|
||||
|
||||
if bool(skillGroupIndex):
|
||||
(tmpCurSkillGroup, tmpSkillGroup) = (skillGroupIndex - 1, skillGroupIndex)
|
||||
else:
|
||||
(tmpCurSkillGroup, tmpSkillGroup) = (pageIndex, pageIndex + 1)
|
||||
|
||||
self.curSelectedSkillGroup = tmpCurSkillGroup
|
||||
self.__SetSkillSlotData(net.GetMainActorRace(), tmpSkillGroup, net.GetMainActorEmpire())
|
||||
elif pageIndex == PAGE_SKILL_HORSE and self.__CanUseHorseSkill():
|
||||
self.curSelectedSkillGroup = self.PAGE_HORSE
|
||||
|
||||
self.RefreshSkill()
|
||||
else:
|
||||
def __SelectSkillGroup(self, index):
|
||||
for btn in self.skillGroupButton:
|
||||
btn.SetUp()
|
||||
|
||||
self.skillGroupButton[index].Down()
|
||||
|
||||
if self.__CanUseHorseSkill():
|
||||
if 0 == index:
|
||||
index = net.GetMainActorSkillGroup() - 1
|
||||
elif 1 == index:
|
||||
index = self.PAGE_HORSE
|
||||
|
||||
self.curSelectedSkillGroup = index
|
||||
self.__SetSkillSlotData(net.GetMainActorRace(), index + 1, net.GetMainActorEmpire())
|
||||
|
||||
def __CanUseSkillNow(self):
|
||||
if 0 == net.GetMainActorSkillGroup():
|
||||
@@ -1178,7 +1362,6 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
return True
|
||||
|
||||
def __CanUseHorseSkill(self):
|
||||
|
||||
slotIndex = player.GetSkillSlotIndex(player.SKILL_INDEX_RIDING)
|
||||
|
||||
if not slotIndex:
|
||||
@@ -1186,12 +1369,33 @@ class CharacterWindow(ui.ScriptWindow):
|
||||
|
||||
grade = player.GetSkillGrade(slotIndex)
|
||||
level = player.GetSkillLevel(slotIndex)
|
||||
|
||||
if level < 0:
|
||||
level *= -1
|
||||
if grade >= 1 and level >= 1:
|
||||
return True
|
||||
|
||||
return False
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
# Map to UI-displayed riding level (matches __RefreshSkillPage logic)
|
||||
# grade 1: base 1..20 shown as 20..39 (offset +19)
|
||||
# grade 2: base 1..10 shown as 30..39 (offset +29)
|
||||
# grade 3: shown as 40
|
||||
effective = 0
|
||||
|
||||
if grade >= 3:
|
||||
effective = 40
|
||||
elif grade == 2:
|
||||
effective = level + 29
|
||||
elif grade == 1:
|
||||
effective = level + 19
|
||||
else:
|
||||
effective = level
|
||||
|
||||
# Require displayed riding level >= 21 to enable the horse page
|
||||
return effective >= 21
|
||||
else:
|
||||
if grade >= 1 and level >= 1:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def __IsChangedHorseRidingSkillLevel(self):
|
||||
ret = False
|
||||
|
||||
@@ -13,7 +13,7 @@ import uiRefine
|
||||
import uiAttachMetin
|
||||
import uiPickMoney
|
||||
import uiCommon
|
||||
import uiPrivateShopBuilder # 개인상점 열동안 ItemMove 방지
|
||||
import uiPrivateShopBuilder # <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ItemMove <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
import localeInfo
|
||||
import constInfo
|
||||
import ime
|
||||
@@ -41,7 +41,7 @@ class CostumeWindow(ui.ScriptWindow):
|
||||
ui.ScriptWindow.__init__(self)
|
||||
|
||||
self.isLoaded = 0
|
||||
self.wndInventory = wndInventory;
|
||||
self.wndInventory = wndInventory
|
||||
|
||||
self.__LoadWindow()
|
||||
|
||||
@@ -113,7 +113,7 @@ class BeltInventoryWindow(ui.ScriptWindow):
|
||||
ui.ScriptWindow.__init__(self)
|
||||
|
||||
self.isLoaded = 0
|
||||
self.wndInventory = wndInventory;
|
||||
self.wndInventory = wndInventory
|
||||
|
||||
self.wndBeltInventoryLayer = None
|
||||
self.wndBeltInventorySlot = None
|
||||
@@ -156,7 +156,7 @@ class BeltInventoryWindow(ui.ScriptWindow):
|
||||
if localeInfo.IsARABIC() == 0:
|
||||
self.AdjustPositionAndSize()
|
||||
|
||||
## 현재 인벤토리 위치를 기준으로 BASE 위치를 계산, 리턴.. 숫자 하드코딩하기 정말 싫지만 방법이 없다..
|
||||
## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD><CEBA>丮 <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BASE <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD>.. <20><><EFBFBD><EFBFBD> <20>ϵ<EFBFBD><CFB5>ڵ<EFBFBD><DAB5>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
|
||||
def GetBasePosition(self):
|
||||
x, y = self.wndInventory.GetGlobalPosition()
|
||||
return x - 148, y + 241
|
||||
@@ -169,7 +169,7 @@ class BeltInventoryWindow(ui.ScriptWindow):
|
||||
self.SetSize(self.ORIGINAL_WIDTH, self.GetHeight())
|
||||
|
||||
else:
|
||||
self.SetPosition(bx + 138, by);
|
||||
self.SetPosition(bx + 138, by)
|
||||
self.SetSize(10, self.GetHeight())
|
||||
|
||||
def __LoadWindow(self):
|
||||
@@ -251,13 +251,13 @@ class InventoryWindow(ui.ScriptWindow):
|
||||
|
||||
sellingSlotNumber = -1
|
||||
isLoaded = 0
|
||||
isOpenedCostumeWindowWhenClosingInventory = 0 # 인벤토리 닫을 때 코스츔이 열려있었는지 여부-_-; 네이밍 ㅈㅅ
|
||||
isOpenedBeltWindowWhenClosingInventory = 0 # 인벤토리 닫을 때 벨트 인벤토리가 열려있었는지 여부-_-; 네이밍 ㅈㅅ
|
||||
isOpenedCostumeWindowWhenClosingInventory = 0 # <EFBFBD>κ<EFBFBD><EFBFBD>丮 <20><><EFBFBD><EFBFBD> <20><> <20>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-_-; <20><><EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
isOpenedBeltWindowWhenClosingInventory = 0 # <EFBFBD>κ<EFBFBD><EFBFBD>丮 <20><><EFBFBD><EFBFBD> <20><> <20><>Ʈ <20>κ<EFBFBD><CEBA>丮<EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-_-; <20><><EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
def __init__(self):
|
||||
ui.ScriptWindow.__init__(self)
|
||||
|
||||
self.isOpenedBeltWindowWhenClosingInventory = 0 # 인벤토리 닫을 때 벨트 인벤토리가 열려있었는지 여부-_-; 네이밍 ㅈㅅ
|
||||
self.isOpenedBeltWindowWhenClosingInventory = 0 # <EFBFBD>κ<EFBFBD><EFBFBD>丮 <20><><EFBFBD><EFBFBD> <20><> <20><>Ʈ <20>κ<EFBFBD><CEBA>丮<EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-_-; <20><><EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
self.__LoadWindow()
|
||||
|
||||
@@ -269,11 +269,11 @@ class InventoryWindow(ui.ScriptWindow):
|
||||
|
||||
ui.ScriptWindow.Show(self)
|
||||
|
||||
# 인벤토리를 닫을 때 코스츔이 열려있었다면 인벤토리를 열 때 코스츔도 같이 열도록 함.
|
||||
# <EFBFBD>κ<EFBFBD><EFBFBD>丮<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ٸ<EFBFBD> <20>κ<EFBFBD><CEBA>丮<EFBFBD><E4B8AE> <20><> <20><> <20>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
||||
if self.isOpenedCostumeWindowWhenClosingInventory and self.wndCostume:
|
||||
self.wndCostume.Show()
|
||||
|
||||
# 인벤토리를 닫을 때 벨트 인벤토리가 열려있었다면 같이 열도록 함.
|
||||
# <EFBFBD>κ<EFBFBD><EFBFBD>丮<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><>Ʈ <20>κ<EFBFBD><CEBA>丮<EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
||||
if self.wndBelt:
|
||||
self.wndBelt.Show(self.isOpenedBeltWindowWhenClosingInventory)
|
||||
|
||||
@@ -439,11 +439,11 @@ class InventoryWindow(ui.ScriptWindow):
|
||||
self.tooltipItem.HideToolTip()
|
||||
|
||||
if self.wndCostume:
|
||||
self.isOpenedCostumeWindowWhenClosingInventory = self.wndCostume.IsShow() # 인벤토리 창이 닫힐 때 코스츔이 열려 있었는가?
|
||||
self.isOpenedCostumeWindowWhenClosingInventory = self.wndCostume.IsShow() # <EFBFBD>κ<EFBFBD><EFBFBD>丮 â<><C3A2> <20><><EFBFBD><EFBFBD> <20><> <20>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE>°<EFBFBD>?
|
||||
self.wndCostume.Close()
|
||||
|
||||
if self.wndBelt:
|
||||
self.isOpenedBeltWindowWhenClosingInventory = self.wndBelt.IsOpeningInventory() # 인벤토리 창이 닫힐 때 벨트 인벤토리도 열려 있었는가?
|
||||
self.isOpenedBeltWindowWhenClosingInventory = self.wndBelt.IsOpeningInventory() # <EFBFBD>κ<EFBFBD><EFBFBD>丮 â<><C3A2> <20><><EFBFBD><EFBFBD> <20><> <20><>Ʈ <20>κ<EFBFBD><CEBA>丮<EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE>°<EFBFBD>?
|
||||
print "Is Opening Belt Inven?? ", self.isOpenedBeltWindowWhenClosingInventory
|
||||
self.wndBelt.Close()
|
||||
|
||||
@@ -508,7 +508,7 @@ class InventoryWindow(ui.ScriptWindow):
|
||||
self.dlgPickMoney.SetTitleName(localeInfo.PICK_MONEY_TITLE)
|
||||
self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
|
||||
self.dlgPickMoney.Open(curMoney)
|
||||
self.dlgPickMoney.SetMax(7) # 인벤토리 990000 제한 버그 수정
|
||||
self.dlgPickMoney.SetMax(7) # <EFBFBD>κ<EFBFBD><EFBFBD>丮 990000 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
def OnPickMoney(self, money):
|
||||
mouseModule.mouseController.AttachMoney(self, player.SLOT_TYPE_INVENTORY, money)
|
||||
@@ -533,7 +533,7 @@ class InventoryWindow(ui.ScriptWindow):
|
||||
slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i)
|
||||
|
||||
itemCount = getItemCount(slotNumber)
|
||||
# itemCount == 0이면 소켓을 비운다.
|
||||
# itemCount == 0<EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
if 0 == itemCount:
|
||||
self.wndItem.ClearSlot(i)
|
||||
continue
|
||||
@@ -543,19 +543,19 @@ class InventoryWindow(ui.ScriptWindow):
|
||||
itemVnum = getItemVNum(slotNumber)
|
||||
setItemVNum(i, itemVnum, itemCount)
|
||||
|
||||
## 자동물약 (HP: #72723 ~ #72726, SP: #72727 ~ #72730) 특수처리 - 아이템인데도 슬롯에 활성화/비활성화 표시를 위한 작업임 - [hyo]
|
||||
## <EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (HP: #72723 ~ #72726, SP: #72727 ~ #72730) Ư<EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD>Կ<EFBFBD> Ȱ<><C8B0>ȭ/<2F><>Ȱ<EFBFBD><C8B0>ȭ ǥ<>ø<EFBFBD> <20><><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> - [hyo]
|
||||
if constInfo.IS_AUTO_POTION(itemVnum):
|
||||
# metinSocket - [0] : 활성화 여부, [1] : 사용한 양, [2] : 최대 용량
|
||||
# metinSocket - [0] : Ȱ<EFBFBD><EFBFBD>ȭ <20><><EFBFBD><EFBFBD>, [1] : <20><><EFBFBD><EFBFBD><EFBFBD> <20><>, [2] : <EFBFBD>ִ<EFBFBD> <20>뷮
|
||||
metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
|
||||
|
||||
if slotNumber >= player.INVENTORY_PAGE_SIZE:
|
||||
slotNumber -= player.INVENTORY_PAGE_SIZE
|
||||
if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
|
||||
slotNumber -= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex
|
||||
|
||||
isActivated = 0 != metinSocket[0]
|
||||
|
||||
if isActivated:
|
||||
self.wndItem.ActivateSlot(slotNumber)
|
||||
potionType = 0;
|
||||
potionType = 0
|
||||
if constInfo.IS_AUTO_POTION_HP(itemVnum):
|
||||
potionType = player.AUTO_POTION_TYPE_HP
|
||||
elif constInfo.IS_AUTO_POTION_SP(itemVnum):
|
||||
@@ -614,7 +614,7 @@ class InventoryWindow(ui.ScriptWindow):
|
||||
def SellItem(self):
|
||||
if self.sellingSlotitemIndex == player.GetItemIndex(self.sellingSlotNumber):
|
||||
if self.sellingSlotitemCount == player.GetItemCount(self.sellingSlotNumber):
|
||||
## 용혼석도 팔리게 하는 기능 추가하면서 인자 type 추가
|
||||
## <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȸ<EFBFBD><C8B8><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD> <20>߰<EFBFBD><DFB0>ϸ鼭 <20><><EFBFBD><EFBFBD> type <EFBFBD>߰<EFBFBD>
|
||||
net.SendShopSellPacketNew(self.sellingSlotNumber, self.questionDialog.count, player.INVENTORY)
|
||||
snd.PlaySound("sound/ui/money.wav")
|
||||
self.OnCloseQuestionDialog()
|
||||
@@ -764,10 +764,10 @@ class InventoryWindow(ui.ScriptWindow):
|
||||
else:
|
||||
#snd.PlaySound("sound/ui/drop.wav")
|
||||
|
||||
## 이동시킨 곳이 장착 슬롯일 경우 아이템을 사용해서 장착 시킨다 - [levites]
|
||||
## <EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD>Ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ų<EFBFBD><C5B2> - [levites]
|
||||
if player.IsEquipmentSlot(dstItemSlotPos):
|
||||
|
||||
## 들고 있는 아이템이 장비일때만
|
||||
## <EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD>
|
||||
if item.IsEquipmentVID(srcItemVID):
|
||||
self.__UseItem(srcItemSlotPos)
|
||||
|
||||
@@ -786,7 +786,7 @@ class InventoryWindow(ui.ScriptWindow):
|
||||
self.sellingSlotitemCount = itemCount
|
||||
|
||||
item.SelectItem(itemIndex)
|
||||
## 안티 플레그 검사 빠져서 추가
|
||||
## <EFBFBD><EFBFBD>Ƽ <20>÷<EFBFBD><C3B7><EFBFBD> <20>˻<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
||||
## 20140220
|
||||
if item.IsAntiFlag(item.ANTIFLAG_SELL):
|
||||
popup = uiCommon.PopupDialog()
|
||||
@@ -932,7 +932,7 @@ class InventoryWindow(ui.ScriptWindow):
|
||||
|
||||
|
||||
def __IsUsableItemToItem(self, srcItemVNum, srcSlotPos):
|
||||
"다른 아이템에 사용할 수 있는 아이템인가?"
|
||||
"<EFBFBD>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>?"
|
||||
|
||||
if item.IsRefineScroll(srcItemVNum):
|
||||
return True
|
||||
@@ -951,7 +951,7 @@ class InventoryWindow(ui.ScriptWindow):
|
||||
return False
|
||||
|
||||
def __CanUseSrcItemToDstItem(self, srcItemVNum, srcSlotPos, dstSlotPos):
|
||||
"대상 아이템에 사용할 수 있는가?"
|
||||
"<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ°<D6B4>?"
|
||||
|
||||
if srcSlotPos == dstSlotPos:
|
||||
return False
|
||||
@@ -992,7 +992,7 @@ class InventoryWindow(ui.ScriptWindow):
|
||||
return True
|
||||
elif "USE_PUT_INTO_ACCESSORY_SOCKET" == useType:
|
||||
if self.__CanPutAccessorySocket(dstSlotPos, srcItemVNum):
|
||||
return TRUE;
|
||||
return TRUE
|
||||
elif "USE_PUT_INTO_BELT_SOCKET" == useType:
|
||||
dstItemVNum = player.GetItemIndex(dstSlotPos)
|
||||
print "USE_PUT_INTO_BELT_SOCKET", srcItemVNum, dstItemVNum
|
||||
@@ -1158,7 +1158,7 @@ class InventoryWindow(ui.ScriptWindow):
|
||||
self.OnCloseQuestionDialog()
|
||||
|
||||
def __SendUseItemToItemPacket(self, srcSlotPos, dstSlotPos):
|
||||
# 개인상점 열고 있는 동안 아이템 사용 방지
|
||||
# <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if uiPrivateShopBuilder.IsBuildingPrivateShop():
|
||||
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP)
|
||||
return
|
||||
@@ -1166,7 +1166,7 @@ class InventoryWindow(ui.ScriptWindow):
|
||||
net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos)
|
||||
|
||||
def __SendUseItemPacket(self, slotPos):
|
||||
# 개인상점 열고 있는 동안 아이템 사용 방지
|
||||
# <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if uiPrivateShopBuilder.IsBuildingPrivateShop():
|
||||
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP)
|
||||
return
|
||||
@@ -1174,7 +1174,7 @@ class InventoryWindow(ui.ScriptWindow):
|
||||
net.SendItemUsePacket(slotPos)
|
||||
|
||||
def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount):
|
||||
# 개인상점 열고 있는 동안 아이템 사용 방지
|
||||
# <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if uiPrivateShopBuilder.IsBuildingPrivateShop():
|
||||
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
|
||||
return
|
||||
|
||||
@@ -42,6 +42,7 @@ class MessengerItem(ui.Window):
|
||||
|
||||
def SetName(self, name):
|
||||
self.name = name
|
||||
|
||||
if name:
|
||||
self.text.SetText(name)
|
||||
self.SetSize(20 + 6*len(name) + 4, 16)
|
||||
@@ -377,6 +378,16 @@ class MessengerWindow(ui.ScriptWindow):
|
||||
self.__AddGroup()
|
||||
messenger.RefreshGuildMember()
|
||||
|
||||
if app.FIX_MESSENGER_ACTION_SYNC:
|
||||
# NEW: Separate initialization from visibility
|
||||
def InitializeHandler(self):
|
||||
"""Load UI and register packet handlers without showing window"""
|
||||
if self.isLoaded == 0:
|
||||
self.__LoadWindow()
|
||||
self.OnRefreshList()
|
||||
self.OnResizeDialog()
|
||||
self.isLoaded = 1
|
||||
|
||||
def Show(self):
|
||||
if self.isLoaded==0:
|
||||
self.isLoaded=1
|
||||
@@ -390,7 +401,7 @@ class MessengerWindow(ui.ScriptWindow):
|
||||
def __LoadWindow(self):
|
||||
|
||||
pyScrLoader = ui.PythonScriptLoader()
|
||||
pyScrLoader.LoadScriptFile(self, "UIScript/MessengerWindow.py")
|
||||
pyScrLoader.LoadScriptFile(self, "UIScript/MessengerWindow.py")
|
||||
|
||||
try:
|
||||
self.board = self.GetChild("board")
|
||||
@@ -669,6 +680,12 @@ class MessengerWindow(ui.ScriptWindow):
|
||||
self.selectedItem.OnRemove()
|
||||
self.selectedItem.UnSelect()
|
||||
self.selectedItem = None
|
||||
|
||||
if app.FIX_MESSENGER_ACTION_SYNC:
|
||||
self.whisperButton.Disable()
|
||||
self.mobileButton.Disable()
|
||||
self.removeButton.Disable()
|
||||
|
||||
self.OnRefreshList()
|
||||
|
||||
self.OnCloseQuestionDialog()
|
||||
@@ -770,7 +787,27 @@ class MessengerWindow(ui.ScriptWindow):
|
||||
|
||||
def OnRemoveList(self, groupIndex, key):
|
||||
group = self.groupList[groupIndex]
|
||||
group.RemoveMember(group.FindMember(key))
|
||||
|
||||
if app.FIX_MESSENGER_ACTION_SYNC:
|
||||
member = group.FindMember(key)
|
||||
|
||||
if not member:
|
||||
return
|
||||
|
||||
if self.selectedItem is member or member.IsSameKey(key):
|
||||
member.UnSelect()
|
||||
self.selectedItem = None
|
||||
|
||||
# Optional: also disable buttons to mirror local delete flow
|
||||
self.whisperButton.Disable()
|
||||
self.mobileButton.Disable()
|
||||
self.removeButton.Disable()
|
||||
|
||||
member.Hide()
|
||||
group.RemoveMember(member)
|
||||
else:
|
||||
group.RemoveMember(group.FindMember(key))
|
||||
|
||||
self.OnRefreshList()
|
||||
|
||||
def OnRemoveAllList(self, groupIndex):
|
||||
|
||||
@@ -672,6 +672,23 @@ class TaskBar(ui.ScriptWindow):
|
||||
for button in self.selectSkillButtonList:
|
||||
button.RefreshSkill()
|
||||
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
def SkillClearCoolTime(self, usedSlotIndex):
|
||||
QUICK_SLOT_SLOT_COUNT = 4
|
||||
slotIndex = 0
|
||||
|
||||
for slotWindow in self.quickslot:
|
||||
for i in xrange(QUICK_SLOT_SLOT_COUNT):
|
||||
(Type, Position) = player.GetLocalQuickSlot(slotIndex)
|
||||
|
||||
if Type == player.SLOT_TYPE_SKILL:
|
||||
if usedSlotIndex == Position:
|
||||
slotWindow.SetSlotCoolTime(slotIndex, 0)
|
||||
|
||||
return
|
||||
|
||||
slotIndex += 1
|
||||
|
||||
def SetHP(self, curPoint, recoveryPoint, maxPoint):
|
||||
curPoint = min(curPoint, maxPoint)
|
||||
if maxPoint > 0:
|
||||
@@ -776,17 +793,19 @@ class TaskBar(ui.ScriptWindow):
|
||||
slot.DeactivateSlot(slotNumber)
|
||||
|
||||
slot.SetItemSlot(slotNumber, itemIndex, itemCount)
|
||||
|
||||
elif player.SLOT_TYPE_SKILL == Type:
|
||||
|
||||
skillIndex = player.GetSkillIndex(Position)
|
||||
|
||||
if 0 == skillIndex:
|
||||
slot.ClearSlot(slotNumber)
|
||||
|
||||
continue
|
||||
|
||||
skillType = skill.GetSkillType(skillIndex)
|
||||
|
||||
if skill.SKILL_TYPE_GUILD == skillType:
|
||||
import guild
|
||||
|
||||
skillGrade = 0
|
||||
skillLevel = guild.GetSkillLevel(Position)
|
||||
|
||||
@@ -799,13 +818,26 @@ class TaskBar(ui.ScriptWindow):
|
||||
slot.SetCoverButton(slotNumber)
|
||||
|
||||
## NOTE : CoolTime 체크
|
||||
if player.IsSkillCoolTime(Position):
|
||||
(coolTime, elapsedTime) = player.GetSkillCoolTime(Position)
|
||||
slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
if player.IsSkillCoolTime(Position) and skillLevel > 0:
|
||||
(coolTime, elapsedTime) = player.GetSkillCoolTime(Position)
|
||||
|
||||
slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)
|
||||
else:
|
||||
if skillType != skill.SKILL_TYPE_GUILD and skillLevel <= 0:
|
||||
slot.SetSlotCoolTime(slotNumber, 0, 0)
|
||||
else:
|
||||
if player.IsSkillCoolTime(Position):
|
||||
(coolTime, elapsedTime) = player.GetSkillCoolTime(Position)
|
||||
|
||||
slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)
|
||||
|
||||
## NOTE : Activate 되어 있다면 아이콘도 업데이트
|
||||
if player.IsSkillActive(Position):
|
||||
slot.ActivateSlot(slotNumber)
|
||||
else:
|
||||
if app.FIX_REFRESH_SKILL_COOLDOWN:
|
||||
slot.DeactivateSlot(slotNumber)
|
||||
|
||||
elif player.SLOT_TYPE_EMOTION == Type:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user