![Rodnia | Alpha & Omega](https://i.imgur.com/xImjC8o.gif)
![](https://cyber-gamers.org/uploads/set_resources_21/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://cyber-gamers.org/uploads/set_resources_21/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
uScared?
-
Content Count
257 -
Joined
-
Last visited
-
Days Won
5
Posts posted by uScared?
-
-
16 minutos atrás, NewReboot disse:Não consegui meter como anexo mas fiz upload para o meu site:
Mob_Proto: http://oblivion2.pt/mob_proto
-
Eu quero é descompactar o do cliente....
-
Não consegui meter como anexo mas fiz upload para o meu site:
Mob_Proto: http://oblivion2.pt/mob_proto
-
Boas pessoal. Eu já traduzi o mob_names.txt no server side, e no navicat, os nomes dos NPC's traduziram, mas o dos moobs não traduziram.. E quando tento descompactar o mob_proto do cliente dame este erro:
<mob_proto isOldStructure="false"> </mob_proto>
-
"porém o ID e PASS do navicat estão certos, mas não consigo fazer a ligação do website á base de dados do servidor. "
Presta atenção do tópico sff
-
Boas pessoal., o meu servidor já está on no dedicado, e tenho um alojamento web na mesma empresa, porém o ID e PASS do navicat estão certos, mas não consigo fazer a ligação do website á base de dados do servidor. Alguém me sabe ajudar ?
HatsuneMiku reacted to this -
Boas pessoal, tou a seguir um tutorial aqui da cybers.
Este:
Mas estou com um problema, e não tou a perceber porque..
quando faço o comando: cd /../ && fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/9.3-RELEASE/src.txz
Aparece o seguinte erro: fetch: src.txz: open () : Permission Denied
Alguem me ajuda a resolver isto?
O meu sistema operativo é Freebsd 9.3 32 Bits
-
Pessoal a minha dúvida seria se esta máquina é uma boa opção, contando com 200-250 jogadores em média ?
Hardware:
SpoilerRede:
Spoiler -
Quando utilizas o comando /etc/rc.d/netif restart isso acontece, aconselho a não utiliza-lo. Esta é a única ajuda que te consigo dar de momento, pois não sei a solução permanente para esse problema.
-
Boas pessoal, alguem me consegue dizer o porquê desta quest estar a dar core dumped ? Spoiler quest sistem_animale begin state start begin function Calareste( vnum ) when 71114.use or 71116.use or 71118.use or 71120.use or 71124.use or 71125.use or 71126.use or 71127.use or 71128.use or 71131.use or 71132.use or 71133.use or 71134.use or 71137.use or 71138.use or 71139.use or 71140.use begin horse.unsummon() if pc.get_map_index() == 113 or pc.get_map_index() == 222 then command ( "unmount" ) chat ( "Nu poþi invoca un animal in acest loc." ) return end sistem_animale.Calareste(item.get_vnum()) end when login begin if pc.get_map_index() == 113 or pc.get_map_index() == 222 then command ( "unmount" ) return end local vnum, remain_time = pc.get_special_ride_vnum() if 0 != vnum then if pc.is_polymorphed() then return elseif pc.is_riding() then return else command ( "unmount" ) end end end
-
Alguem me sabe dizer como traduzir onde diz:
EXP Necesarã
Proprietãti
Vit.Atac ( etc )
Status, Calific, Emotie, Task.. ?
-
Hmmm. Excelente. Obrigado. Não mudei porque não associei o nome.
MONETARY_UNIT1 Zece mii
MONETARY_UNIT2 O sutã de milioaneentao isto o que será ?
-
Vou deixar-te aqui em locale>ui>inventorywindow.py:
Spoilerimport uiScriptLocale import item EQUIPMENT_START_INDEX = 180 window = { "name" : "InventoryWindow", ## 600 - (width + 오른쪽으로 부터 띄우기 24 px) "x" : SCREEN_WIDTH - 220, "y" : SCREEN_HEIGHT - 37 - 610, "style" : ("movable", "float",), "width" : 220, "height" : 610, "children" : ( ## Inventory, Equipment Slots { "name" : "board", "type" : "board", "style" : ("attach",), "x" : 0, "y" : 0, "width" : 220, "height" : 610, "children" : ( ## Title { "name" : "TitleBar", "type" : "titlebar", "style" : ("attach",), "x" : 8, "y" : 7, "width" : 161, "color" : "yellow", "children" : ( { "name":"TitleName", "type":"text", "x":77, "y":3, "text":uiScriptLocale.INVENTORY_TITLE, "text_horizontal_align":"center" }, ), }, ## Offline Shop Button { "name" : "OfflineShopButton", "type" : "button", "x" : 170, "y" : 33, #+36 "tooltip_text" : uiScriptLocale.TASKBAR_OFFLINE_SHOP, "default_image" : "locale/es/offlineshop/boton1.tga", "over_image" : "locale/es/offlineshop/boton2.tga", "down_image" : "locale/es/offlineshop/boton1.tga", }, ## Afisare_bonusuri { "name" : "Alaska_py", "type" : "button", "x" : 170, "y" : 33 + 36, "tooltip_text" : "V.Bonusuri", "default_image" : "Jin_Han/1.tga", "over_image" : "Jin_Han/2.tga", "down_image" : "Jin_Han/1.tga", }, ## depozit { "name" : "depozit", "type" : "button", "x" : 170, "y" : 33 + 36 + 36, "tooltip_text" : "Depozit", "default_image" : "Jin_Han/5.tga", "over_image" : "Jin_Han/6.tga", "down_image" : "Jin_Han/5.tga", }, ## anti_exp { "name" : "inelexp", "type" : "button", "x" : 170, "y" : 33 + 36 + 36 + 36, "tooltip_text" : "AntiExp", "default_image" : "Jin_Han/7.tga", "over_image" : "Jin_Han/8.tga", "down_image" : "Jin_Han/7.tga", }, ## Teleport { "name" : "Telep", "type" : "button", "x" : 170, "y" : 33 + 36 + 36 + 36 + 36, "tooltip_text" : "Teleport", "default_image" : "Jin_Han/9.tga", "over_image" : "Jin_Han/10.tga", "down_image" : "Jin_Han/9.tga", }, ## Depozit { "name" : "VegaS_Switch_Dinos_Perfect_Work", "type" : "button", "x" : 170, "y" : 33 + 36 + 36 + 36 + 36 + 36, "tooltip_text" : "Switchbot", "default_image" : "Jin_Han/s1.tga", "over_image" : "Jin_Han/s1.tga", "down_image" : "Jin_Han/s2.tga", }, ## Schimba Echipamentul { "name" : "fastbutton", "type" : "button", "x" : 170, "y" : 33 + 36 + 36 + 36 + 36 + 36 + 36, "tooltip_text" : "Schimba Echipamentul", "default_image" : "Jin_Han/fast.tga", "over_image" : "Jin_Han/fast.tga", "down_image" : "Jin_Han/fast1.tga", }, ## Equipment Slot { "name" : "Equipment_Base", "type" : "image", "x" : 10, "y" : 33, "image" : "d:/ymir work/ui/equipment_bg_with_ring.tga", "children" : ( { "name" : "EquipmentSlot", "type" : "slot", "x" : 3, "y" : 3, "width" : 150, "height" : 182, "slot" : ( {"index":EQUIPMENT_START_INDEX+0, "x":39, "y":37, "width":32, "height":64}, {"index":EQUIPMENT_START_INDEX+1, "x":39, "y":2, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+2, "x":39, "y":145, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+3, "x":75, "y":67, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+4, "x":3, "y":3, "width":32, "height":96}, {"index":EQUIPMENT_START_INDEX+5, "x":114, "y":67, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+6, "x":114, "y":35, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+7, "x":2, "y":145, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+8, "x":75, "y":145, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+9, "x":114, "y":2, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+10, "x":75, "y":35, "width":32, "height":32}, {"index":item.EQUIPMENT_RING1, "x":2, "y":106, "width":32, "height":32}, {"index":item.EQUIPMENT_RING2, "x":75, "y":106, "width":32, "height":32}, {"index":item.EQUIPMENT_BELT, "x":39, "y":106, "width":32, "height":32}, ), }, ## Dragon Soul Button { "name" : "DSSButton", "type" : "button", "x" : 114, "y" : 107, "tooltip_text" : uiScriptLocale.TASKBAR_DRAGON_SOUL, "default_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_01.tga", "over_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_02.tga", "down_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_03.tga", }, ## MallButton { "name" : "MallButton", "type" : "button", "x" : 118, "y" : 148, "tooltip_text" : uiScriptLocale.MALL_TITLE, "default_image" : "d:/ymir work/ui/game/TaskBar/ishop.tga", "over_image" : "d:/ymir work/ui/game/TaskBar/ishop1.tga", "down_image" : "d:/ymir work/ui/game/TaskBar/ishop2.tga", }, ## CostumeButton { "name" : "CostumeButton", "type" : "button", "x" : 78, "y" : 5, "tooltip_text" : uiScriptLocale.COSTUME_TITLE, "default_image" : "d:/ymir work/ui/game/taskbar/costume_Button_01.tga", "over_image" : "d:/ymir work/ui/game/taskbar/costume_Button_02.tga", "down_image" : "d:/ymir work/ui/game/taskbar/costume_Button_03.tga", }, { "name" : "Equipment_Tab_01", "type" : "radio_button", "x" : 86, "y" : 161, "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub", "children" : ( { "name" : "Equipment_Tab_01_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "I", }, ), }, { "name" : "Equipment_Tab_02", "type" : "radio_button", "x" : 86 + 32, "y" : 161, "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub", "children" : ( { "name" : "Equipment_Tab_02_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "II", }, ), }, ), }, { "name" : "Inventory_Tab_01", "type" : "radio_button", "x" : 11, "y" : 33 + 191, "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub", "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_1, "children" : ( { "name" : "Inventory_Tab_01_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "I", }, ), }, { "name" : "Inventory_Tab_02", "type" : "radio_button", "x" : 13 + 37, "y" : 33 + 191, "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub", "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_2, "children" : ( { "name" : "Inventory_Tab_02_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "II", }, ), }, { "name" : "Inventory_Tab_03", "type" : "radio_button", "x" : 13 + 77, "y" : 33 + 191, "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub", "tooltip_text" : "3.Inventar", "children" : ( { "name" : "Inventory_Tab_03_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "III", }, ), }, { "name" : "Inventory_Tab_04", "type" : "radio_button", "x" : 14 + 116, "y" : 33 + 191, "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub", "tooltip_text" : "4.Inventar", "children" : ( { "name" : "Inventory_Tab_04_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "IV", }, ), }, ## Item Slot { "name" : "ItemSlot", "type" : "grid_table", "x" : 8, "y" : 246, "start_index" : 0, "x_count" : 5, "y_count" : 9, "x_step" : 32, "y_step" : 32, "image" : "d:/ymir work/ui/public/Slot_Base.sub" }, ## Sterge Item Din Inventar { "name" : "Sil_Slot", "type" : "image", "x" : 13, "y" : 538, "image" : "locale/es/ui/inventar/brain_sterge_inventar.tga", "children" : ( { "name" : "Sil_Slot", "type" : "slot", "x" : 0, "y" : 0, "width" : 32, "height" : 32, "slot" : ( {"index":0, "x":0, "y":0, "width":32, "height":32}, ), }, ), }, ## Print { "name":"Money_Slot", "type":"button", "x":50, "y":50, #"horizontal_align":"center", "vertical_align":"bottom", "default_image" : "d:/ymir work/ui/public/parameter_slot_04.sub", "over_image" : "d:/ymir work/ui/public/parameter_slot_04.sub", "down_image" : "d:/ymir work/ui/public/parameter_slot_04.sub", "children" : ( { "name" : "Money", "type" : "text", "x" : 3, "y" : 3, "horizontal_align" : "right", "text_horizontal_align" : "right", "text" : "123456789", }, ), }, { "name":"Premium_Slot", "type":"button", "x":50, "y":30, #"horizontal_align":"center", "vertical_align":"bottom", "default_image" : "d:/ymir work/ui/public/parameter_slot_04.sub", "over_image" : "d:/ymir work/ui/public/parameter_slot_04.sub", "down_image" : "d:/ymir work/ui/public/parameter_slot_04.sub", "children" : ( { "name" : "Premium", "type" : "text", "x" : 3, "y" : 3, "horizontal_align" : "right", "text_horizontal_align" : "right", "text" : "AlphaMt2", }, ), }, { "name":"Mds_Slot", "type":"button", "x":50, "y":70, #"horizontal_align":"center", "vertical_align":"bottom", "default_image" : "d:/ymir work/ui/public/parameter_slot_04.sub", "over_image" : "d:/ymir work/ui/public/parameter_slot_04.sub", "down_image" : "d:/ymir work/ui/public/parameter_slot_04.sub", "children" : ( { "name" : "Mds", "type" : "text", "x" : 3, "y" : 3, "horizontal_align" : "right", "text_horizontal_align" : "right", "text" : "123456789 Mds", }, ), }, ), }, ), }
E aqui está o uiinventory.py
SpoilerCitarimport ui import player import mouseModule import net import app import snd import item import player import chat import grp import uiScriptLocale import uiRefine import uiAttachMetin import uiPickMoney import uiCommon import uiPrivateShopBuilder # 개인상점 열동안 ItemMove 방지 import uiOfflineShopBuilder import uiOfflineShop import localeInfo import constInfo import ime import wndMgr import event ITEM_MALL_BUTTON_ENABLE = True ITEM_FLAG_APPLICABLE = 1 << 14 class CostumeWindow(ui.ScriptWindow): def __init__(self, wndInventory): import exception if not app.ENABLE_COSTUME_SYSTEM: exception.Abort("What do you do?") return if not wndInventory: exception.Abort("wndInventory parameter must be set to InventoryWindow") return ui.ScriptWindow.__init__(self) self.isLoaded = 0 self.wndInventory = wndInventory; self.__LoadWindow() def __del__(self): ui.ScriptWindow.__del__(self) def Show(self): self.__LoadWindow() self.RefreshCostumeSlot() ui.ScriptWindow.Show(self) def Close(self): self.Hide() def __LoadWindow(self): if self.isLoaded == 1: return self.isLoaded = 1 try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "UIScript/CostumeWindow.py") except: import exception exception.Abort("CostumeWindow.LoadWindow.LoadObject") try: wndEquip = self.GetChild("CostumeSlot") self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close)) except: import exception exception.Abort("CostumeWindow.LoadWindow.BindObject") ## Equipment wndEquip.SetOverInItemEvent(ui.__mem_func__(self.wndInventory.OverInItem)) wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.wndInventory.OverOutItem)) wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot)) wndEquip.SetUseSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot)) wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.wndInventory.SelectEmptySlot)) wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.wndInventory.SelectItemSlot)) self.wndEquip = wndEquip def RefreshCostumeSlot(self): getItemVNum=player.GetItemIndex for i in xrange(item.COSTUME_SLOT_COUNT): slotNumber = item.COSTUME_SLOT_START + i self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0) self.wndEquip.RefreshSlot() class BeltInventoryWindow(ui.ScriptWindow): def __init__(self, wndInventory): import exception if not app.ENABLE_NEW_EQUIPMENT_SYSTEM: exception.Abort("What do you do?") return if not wndInventory: exception.Abort("wndInventory parameter must be set to InventoryWindow") return ui.ScriptWindow.__init__(self) self.isLoaded = 0 self.wndInventory = wndInventory; self.wndBeltInventoryLayer = None self.wndBeltInventorySlot = None self.expandBtn = None self.minBtn = None self.__LoadWindow() def __del__(self): ui.ScriptWindow.__del__(self) def Show(self, openBeltSlot = False): self.__LoadWindow() self.RefreshSlot() ui.ScriptWindow.Show(self) if openBeltSlot: self.OpenInventory() else: self.CloseInventory() def Close(self): self.Hide() def IsOpeningInventory(self): return self.wndBeltInventoryLayer.IsShow() def OpenInventory(self): self.wndBeltInventoryLayer.Show() self.expandBtn.Hide() self.AdjustPositionAndSize() def CloseInventory(self): self.wndBeltInventoryLayer.Hide() self.expandBtn.Show() self.AdjustPositionAndSize() ## 현재 인벤토리 위치를 기준으로 BASE 위치를 계산, 리턴.. 숫자 하드코딩하기 정말 싫지만 방법이 없다.. def GetBasePosition(self): x, y = self.wndInventory.GetGlobalPosition() return x - 148, y + 241 def AdjustPositionAndSize(self): bx, by = self.GetBasePosition() if self.IsOpeningInventory(): self.SetPosition(bx, by) self.SetSize(self.ORIGINAL_WIDTH, self.GetHeight()) else: self.SetPosition(bx + 138, by); self.SetSize(10, self.GetHeight()) def __LoadWindow(self): if self.isLoaded == 1: return self.isLoaded = 1 try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "UIScript/BeltInventoryWindow.py") except: import exception exception.Abort("CostumeWindow.LoadWindow.LoadObject") try: self.ORIGINAL_WIDTH = self.GetWidth() wndBeltInventorySlot = self.GetChild("BeltInventorySlot") self.wndBeltInventoryLayer = self.GetChild("BeltInventoryLayer") self.expandBtn = self.GetChild("ExpandBtn") self.minBtn = self.GetChild("MinimizeBtn") self.expandBtn.SetEvent(ui.__mem_func__(self.OpenInventory)) self.minBtn.SetEvent(ui.__mem_func__(self.CloseInventory)) for i in xrange(item.BELT_INVENTORY_SLOT_COUNT): slotNumber = item.BELT_INVENTORY_SLOT_START + i wndBeltInventorySlot.SetCoverButton(slotNumber, "d:/ymir work/ui/game/quest/slot_button_01.sub",\ "d:/ymir work/ui/game/quest/slot_button_01.sub",\ "d:/ymir work/ui/game/quest/slot_button_01.sub",\ "d:/ymir work/ui/game/belt_inventory/slot_disabled.tga", False, False) except: import exception exception.Abort("CostumeWindow.LoadWindow.BindObject") ## Equipment wndBeltInventorySlot.SetOverInItemEvent(ui.__mem_func__(self.wndInventory.OverInItem)) wndBeltInventorySlot.SetOverOutItemEvent(ui.__mem_func__(self.wndInventory.OverOutItem)) wndBeltInventorySlot.SetUnselectItemSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot)) wndBeltInventorySlot.SetUseSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot)) wndBeltInventorySlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.wndInventory.SelectEmptySlot)) wndBeltInventorySlot.SetSelectItemSlotEvent(ui.__mem_func__(self.wndInventory.SelectItemSlot)) self.wndBeltInventorySlot = wndBeltInventorySlot def RefreshSlot(self): getItemVNum=player.GetItemIndex for i in xrange(item.BELT_INVENTORY_SLOT_COUNT): slotNumber = item.BELT_INVENTORY_SLOT_START + i self.wndBeltInventorySlot.SetItemSlot(slotNumber, getItemVNum(slotNumber), player.GetItemCount(slotNumber)) self.wndBeltInventorySlot.SetAlwaysRenderCoverButton(slotNumber, True) avail = "0" if player.IsAvailableBeltInventoryCell(slotNumber): self.wndBeltInventorySlot.EnableCoverButton(slotNumber) else: self.wndBeltInventorySlot.DisableCoverButton(slotNumber) self.wndBeltInventorySlot.RefreshSlot() class InventoryWindow(ui.ScriptWindow): USE_TYPE_TUPLE = ("USE_CLEAN_SOCKET", "USE_CHANGE_ATTRIBUTE", "USE_ADD_ATTRIBUTE", "USE_ADD_ATTRIBUTE2", "USE_ADD_ACCESSORY_SOCKET", "USE_PUT_INTO_ACCESSORY_SOCKET", "USE_PUT_INTO_BELT_SOCKET", "USE_PUT_INTO_RING_SOCKET") questionDialog = None tooltipItem = None wndCostume = None wndBelt = None dlgPickMoney = None sellingSlotNumber = -1 isLoaded = 0 isOpenedCostumeWindowWhenClosingInventory = 0 # 인벤토리 닫을 때 코스츔이 열려있었는지 여부-_-; 네이밍 ㅈㅅ isOpenedBeltWindowWhenClosingInventory = 0 # 인벤토리 닫을 때 벨트 인벤토리가 열려있었는지 여부-_-; 네이밍 ㅈㅅ def __init__(self): ui.ScriptWindow.__init__(self) self.OpenBoniSwitcherEvent = lambda : None self.__LoadWindow() def Alaska_py(self): import uifastequip self.fastequip = uifastequip.changeequip() self.fastequip.Show() def __del__(self): ui.ScriptWindow.__del__(self) def ParolaInventarWnd(self): self.ParolaInventar = ui.BoardWithTitleBar() self.ParolaInventar.SetSize(180, 100) self.ParolaInventar.SetCenterPosition() self.ParolaInventar.AddFlag('movable') self.ParolaInventar.AddFlag('float') self.ParolaInventar.SetTitleName('Inventar') self.ParolaInventar.SetCloseEvent(self.InchidereParolaInventar) self.ParolaInventar.Show() self.TextParola = ui.TextLine() self.TextParola.SetParent(self.ParolaInventar) self.TextParola.SetDefaultFontName() self.TextParola.SetPosition(15, 35) self.TextParola.SetFeather() self.TextParola.SetText("Parola inventar:") self.TextParola.SetOutline() self.TextParola.Show() self.SlotParola = ui.SlotBar() self.SlotParola.SetParent(self.ParolaInventar) self.SlotParola.SetSize(60, 15) self.SlotParola.SetPosition(30, 35) self.SlotParola.SetWindowHorizontalAlignCenter() self.SlotParola.Show() self.CampParola = ui.EditLine() self.CampParola.SetParent(self.SlotParola) self.CampParola.SetSize(60, 15) self.CampParola.SetPosition(4, 1) self.CampParola.SetMax(4) self.CampParola.SetNumberMode() self.CampParola.SetFocus() self.CampParola.Show() self.ButonParolaOK = ui.Button() self.ButonParolaOK.SetParent(self.ParolaInventar) self.ButonParolaOK.SetEvent(self.VerificareParola) self.ButonParolaOK.SetPosition(46, 67) self.ButonParolaOK.SetUpVisual("d:/ymir work/ui/public/large_button_01.sub") self.ButonParolaOK.SetOverVisual("d:/ymir work/ui/public/large_button_02.sub") self.ButonParolaOK.SetDownVisual("d:/ymir work/ui/public/large_button_03.sub") self.ButonParolaOK.SetText("Deblocare") self.ButonParolaOK.Show() self.CampParola.SetReturnEvent(ui.__mem_func__(self.VerificareParola)) def VerificareParola(self): self.ParolaInventar.Hide() activare_skill2 = constInfo.SECURIATE_QUESTINDEX constInfo.NegotFereastraNume = self.CampParola.GetText() event.QuestButtonClick(activare_skill2) def InchidereParolaInventar(self): self.ParolaInventar.Hide() def Show(self): if constInfo.SECURIATE_CONT == 0: self.__LoadWindow() ui.ScriptWindow.Show(self) if self.isOpenedCostumeWindowWhenClosingInventory and self.wndCostume: self.wndCostume.Show() if self.wndBelt: self.wndBelt.Show(self.isOpenedBeltWindowWhenClosingInventory) else: self.ParolaInventarWnd() def BindInterfaceClass(self, interface): self.interface = interface def __LoadWindow(self): if self.isLoaded == 1: return self.isLoaded = 1 try: pyScrLoader = ui.PythonScriptLoader() if ITEM_MALL_BUTTON_ENABLE: pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "InventoryWindow.py") else: pyScrLoader.LoadScriptFile(self, "UIScript/InventoryWindow.py") except: import exception exception.Abort("InventoryWindow.LoadWindow.LoadObject") try: wndItem = self.GetChild("ItemSlot") wndEquip = self.GetChild("EquipmentSlot") self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close)) self.wndMoney = self.GetChild("Money") self.wndMoneySlot = self.GetChild("Money_Slot") self.wndMds = self.GetChild("Mds") self.wndMdsSlot = self.GetChild("Mds_Slot") self.mallButton = self.GetChild2("MallButton") self.DSSButton = self.GetChild2("DSSButton") self.costumeButton = self.GetChild2("CostumeButton") Alaska_py_button = self.GetChild("fastbutton") Alaska_py_button.SetEvent(ui.__mem_func__(self.Alaska_py)) Alaska_py_button.SetToolTipText("Schimba") self.VegaS_Switch_Dinos_Perfect_Work = self.GetChild2("VegaS_Switch_Dinos_Perfect_Work") self.Telep = self.GetChild2("Telep") self.depozit = self.GetChild2("depozit") self.Alaska_py = self.GetChild2("Alaska_py") self.inelexp = self.GetChild2("inelexp") self.offlineShopButton = self.GetChild2("OfflineShopButton") self.inventoryTab = [] self.inventoryTab.append(self.GetChild("Inventory_Tab_01")) self.inventoryTab.append(self.GetChild("Inventory_Tab_02")) self.inventoryTab.append(self.GetChild("Inventory_Tab_03")) self.inventoryTab.append(self.GetChild("Inventory_Tab_04")) self.equipmentTab = [] self.equipmentTab.append(self.GetChild("Equipment_Tab_01")) self.equipmentTab.append(self.GetChild("Equipment_Tab_02")) if self.costumeButton and not app.ENABLE_COSTUME_SYSTEM: self.costumeButton.Hide() self.costumeButton.Destroy() self.costumeButton = 0 # Belt Inventory Window self.wndBelt = None if app.ENABLE_NEW_EQUIPMENT_SYSTEM: self.wndBelt = BeltInventoryWindow(self) except: import exception exception.Abort("InventoryWindow.LoadWindow.BindObject") ## Item wndItem.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot)) wndItem.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot)) wndItem.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot)) wndItem.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot)) wndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem)) wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) ## Equipment wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot)) wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot)) wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot)) wndEquip.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot)) wndEquip.SetOverInItemEvent(ui.__mem_func__(self.OverInItem)) wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) self.GetChild("Sil_Slot").SetSelectEmptySlotEvent(ui.__mem_func__(self.SilEmptySlot)) ## PickMoneyDialog dlgPickMoney = uiPickMoney.PickMoneyDialog() dlgPickMoney.LoadDialog() dlgPickMoney.Hide() ## RefineDialog self.refineDialog = uiRefine.RefineDialog() self.refineDialog.Hide() ## AttachMetinDialog self.attachMetinDialog = uiAttachMetin.AttachMetinDialog() self.attachMetinDialog.Hide() ## MoneySlot self.wndMoneySlot.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog)) self.inventoryTab[0].SetEvent(lambda arg=0: self.SetInventoryPage(arg)) self.inventoryTab[1].SetEvent(lambda arg=1: self.SetInventoryPage(arg)) self.inventoryTab[2].SetEvent(lambda arg=2: self.SetInventoryPage(arg)) self.inventoryTab[3].SetEvent(lambda arg=3: self.SetInventoryPage(arg)) self.inventoryPageIndex = 0 self.equipmentTab[0].SetEvent(lambda arg=0: self.SetEquipmentPage(arg)) self.equipmentTab[1].SetEvent(lambda arg=1: self.SetEquipmentPage(arg)) self.equipmentTab[0].Down() self.equipmentTab[0].Hide() self.equipmentTab[1].Hide() self.wndItem = wndItem self.wndEquip = wndEquip self.dlgPickMoney = dlgPickMoney # MallButton if self.mallButton: self.mallButton.SetEvent(ui.__mem_func__(self.ClickMallButton)) if self.DSSButton: self.DSSButton.SetEvent(ui.__mem_func__(self.ClickDSSButton)) # Costume Button if self.costumeButton: self.costumeButton.SetEvent(ui.__mem_func__(self.ClickCostumeButton)) if self.VegaS_Switch_Dinos_Perfect_Work: self.VegaS_Switch_Dinos_Perfect_Work.SetEvent(ui.__mem_func__(self.Functie_VegaS_Switch_Perfect_Work)) #Telep if self.Telep: self.Telep.SetEvent(ui.__mem_func__(self.ClickTelep)) #Depozit if self.depozit: self.depozit.SetEvent(ui.__mem_func__(self.Clickdepozit)) #Bonusuri if self.Alaska_py: self.Alaska_py.SetEvent(ui.__mem_func__(self.ClickAlaska_py)) #Inel_AntiExp if self.inelexp: self.inelexp.SetEvent(ui.__mem_func__(self.Clickinelexp)) # Offline Shop Button if (self.offlineShopButton): self.offlineShopButton.SetEvent(ui.__mem_func__(self.ClickOfflineShopButton)) self.wndCostume = None ##### ## Refresh self.SetInventoryPage(0) self.SetEquipmentPage(0) self.RefreshItemSlot() self.RefreshStatus() def Destroy(self): self.ClearDictionary() self.dlgPickMoney.Destroy() self.dlgPickMoney = 0 self.refineDialog.Destroy() self.refineDialog = 0 self.attachMetinDialog.Destroy() self.attachMetinDialog = 0 self.tooltipItem = None self.wndItem = 0 self.wndEquip = 0 self.dlgPickMoney = 0 self.wndMoney = 0 self.wndMoneySlot = 0 self.wndMds = 0 self.wndMdsSlot = 0 self.questionDialog = None self.mallButton = None self.DSSButton = None self.interface = None if self.wndCostume: self.wndCostume.Destroy() self.wndCostume = 0 if self.wndBelt: self.wndBelt.Destroy() self.wndBelt = None self.inventoryTab = [] self.equipmentTab = [] def SilEmptySlot(self): if mouseModule.mouseController.isAttached(): attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() itemIndex = player.GetItemIndex(attachedSlotPos) if player.SLOT_TYPE_INVENTORY == mouseModule.mouseController.GetAttachedType(): item.SelectItem(itemIndex) itemDropQuestionDialog = uiCommon.QuestionDialog() miktar_pls = player.GetItemCount(attachedSlotPos) if miktar_pls != 1: itemDropQuestionDialog.SetText(("%dx %s Doriti sa stergeti itemul respectiv?" % (miktar_pls, item.GetItemName()))) else: itemDropQuestionDialog.SetText(("%s Se va sterge sunteti de acord?" % (item.GetItemName()))) itemDropQuestionDialog.SetAcceptEvent(lambda arg = TRUE: self.SilItem(arg, attachedSlotPos)) itemDropQuestionDialog.SetCancelEvent(lambda arg = FALSE: self.SilItem(arg, attachedSlotPos)) itemDropQuestionDialog.Open() self.itemDropQuestionDialog = itemDropQuestionDialog mouseModule.mouseController.DeattachObject() else: warn = uiCommon.PopupDialog() warn.SetText("Ai sters:") warn.Open() def SilItem(self, answer, attachedSlotPos): if not self.itemDropQuestionDialog: return if answer: constInfo.ItemSil_Slot = attachedSlotPos event.QuestButtonClick(constInfo.ItemSil_Index) snd.PlaySound('sound/ui/drop.wav') self.itemDropQuestionDialog.Close() self.itemDropQuestionDialog = None def Hide(self): if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS(): self.OnCloseQuestionDialog() return if None != self.tooltipItem: self.tooltipItem.HideToolTip() if self.wndCostume: self.isOpenedCostumeWindowWhenClosingInventory = self.wndCostume.IsShow() # 인벤토리 창이 닫힐 때 코스츔이 열려 있었는가? self.wndCostume.Close() if self.wndBelt: self.isOpenedBeltWindowWhenClosingInventory = self.wndBelt.IsOpeningInventory() # 인벤토리 창이 닫힐 때 벨트 인벤토리도 열려 있었는가? print "Is Opening Belt Inven?? ", self.isOpenedBeltWindowWhenClosingInventory self.wndBelt.Close() if self.dlgPickMoney: self.dlgPickMoney.Close() self.OnCloseQuestionDialog() wndMgr.Hide(self.hWnd) def Close(self): self.Hide() def SetInventoryPage(self, page): self.inventoryTab[self.inventoryPageIndex].SetUp() self.inventoryPageIndex = page self.RefreshBagSlotWindow() def SetEquipmentPage(self, page): self.equipmentPageIndex = page self.equipmentTab[1-page].SetUp() self.RefreshEquipSlotWindow() def ClickMallButton(self): print "click_mall_button" net.SendChatPacket("/click_mall") # DSSButton def ClickDSSButton(self): print "click_dss_button" self.interface.ToggleDragonSoulWindow() # Offline Shop Button def ClickOfflineShopButton(self): print "click_offline_shop_button" self.interface.ToggleOfflineShopAdminPanelWindow() def ClickCostumeButton(self): print "Click Costume Button" if self.wndCostume: if self.wndCostume.IsShow(): self.wndCostume.Hide() else: self.wndCostume.Show() else: self.wndCostume = CostumeWindow(self) self.wndCostume.Show() def Functie_VegaS_Switch_Perfect_Work(self): constInfo.SWITCHBOT = 1 #Telep def ClickTelep(self): import event qid = constInfo.Telepqin event.QuestButtonClick(qid) #Depozit def Clickdepozit(self): import event qid = constInfo.depozitqin event.QuestButtonClick(qid) #Bonusuri def ClickAlaska_py(self): import uibonuspage uibonuspage.BonusBoardDialog().Show() #inelexp def Clickinelexp(self): import event qid = constInfo.inelexpqin event.QuestButtonClick(qid) def OpenPickMoneyDialog(self): if mouseModule.mouseController.isAttached(): attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() if player.SLOT_TYPE_SAFEBOX == mouseModule.mouseController.GetAttachedType(): if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex(): net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount()) snd.PlaySound("sound/ui/money.wav") mouseModule.mouseController.DeattachObject() else: curMoney = player.GetElk() if curMoney <= 0: return self.dlgPickMoney.SetTitleName(localeInfo.PICK_MONEY_TITLE) self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney)) self.dlgPickMoney.Open(curMoney) self.dlgPickMoney.SetMax(7) # 인벤토리 990000 제한 버그 수정 def OnPickMoney(self, money): mouseModule.mouseController.AttachMoney(self, player.SLOT_TYPE_INVENTORY, money) def OnPickItem(self, count): itemSlotIndex = self.dlgPickMoney.itemGlobalSlotIndex selectedItemVNum = player.GetItemIndex(itemSlotIndex) mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, count) def __InventoryLocalSlotPosToGlobalSlotPos(self, local): if player.IsEquipmentSlot(local) or player.IsCostumeSlot(local) or player.IsBeltInventorySlot(local): return local return self.inventoryPageIndex*player.INVENTORY_PAGE_SIZE + local def RefreshBagSlotWindow(self): is_activated = 0 getItemVNum=player.GetItemIndex getItemCount=player.GetItemCount setItemVNum=self.wndItem.SetItemSlot for i in xrange(player.INVENTORY_PAGE_SIZE*2): slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i) itemCount = getItemCount(slotNumber) if 0 == itemCount: self.wndItem.ClearSlot(i) continue elif 1 == itemCount: itemCount = 0 itemVnum = getItemVNum(slotNumber) setItemVNum(i, itemVnum, itemCount) if constInfo.IS_AUTO_POTION(itemVnum): 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 isActivated = 0 != metinSocket[0] if isActivated: self.wndItem.ActivateSlot(i) potionType = 0; if constInfo.IS_AUTO_POTION_HP(itemVnum): potionType = player.AUTO_POTION_TYPE_HP elif constInfo.IS_AUTO_POTION_SP(itemVnum): potionType = player.AUTO_POTION_TYPE_SP usedAmount = int(metinSocket[1]) totalAmount = int(metinSocket[2]) player.SetAutoPotionInfo(potionType, isActivated, (totalAmount - usedAmount), totalAmount, self.__InventoryLocalSlotPosToGlobalSlotPos(i)) else: self.wndItem.DeactivateSlot(i) elif constInfo.IS_ACCE_ITEM(itemVnum, 1) == True: metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)] isActivated = metinSocket[0] if isActivated == 1: player.SetAcceInfo(isActivated, i) self.wndItem.ActivateAcceSlot(i) else: self.wndItem.DeactivateAcceSlot(i) self.wndItem.RefreshSlot() if self.wndBelt: self.wndBelt.RefreshSlot() def RefreshEquipSlotWindow(self): getItemVNum=player.GetItemIndex getItemCount=player.GetItemCount setItemVNum=self.wndEquip.SetItemSlot for i in xrange(player.EQUIPMENT_PAGE_COUNT): slotNumber = player.EQUIPMENT_SLOT_START + i itemCount = getItemCount(slotNumber) if itemCount <= 1: itemCount = 0 setItemVNum(slotNumber, getItemVNum(slotNumber), itemCount) if app.ENABLE_NEW_EQUIPMENT_SYSTEM: for i in xrange(player.NEW_EQUIPMENT_SLOT_COUNT): slotNumber = player.NEW_EQUIPMENT_SLOT_START + i itemCount = getItemCount(slotNumber) if itemCount <= 1: itemCount = 0 setItemVNum(slotNumber, getItemVNum(slotNumber), itemCount) print "ENABLE_NEW_EQUIPMENT_SYSTEM", slotNumber, itemCount, getItemVNum(slotNumber) self.wndEquip.RefreshSlot() if self.wndCostume: self.wndCostume.RefreshCostumeSlot() def RefreshItemSlot(self): self.RefreshBagSlotWindow() self.RefreshEquipSlotWindow() def RefreshStatus ( self ): money = player . GetElk () if money <= 100000000 : self . wndMoney . SetFontColor ( 1.0 , 0.2 , 0.2 ) elif money >= 100000001 and money <= 1000000000 : self . wndMoney . SetFontColor ( 1.0 , 0.6 , 0.2 ) elif money >= 1000000001 and money <= 1500000000 : self . wndMoney . SetFontColor ( 1.0 , 1.0 , 0.2 ) elif money >= 1500000001 : self . wndMoney . SetFontColor ( 0.6 , 1.0 , 0.2 ) self . wndMoney . SetText ( localeInfo . NumberToMoneyString ( money )) def OnUpdate(self): import constInfo self.wndMds.SetText(str(constInfo.mds) + " PTC") def SetItemToolTip(self, tooltipItem): self.tooltipItem = tooltipItem def SellItem(self): if self.sellingSlotitemIndex == player.GetItemIndex(self.sellingSlotNumber): if self.sellingSlotitemCount == player.GetItemCount(self.sellingSlotNumber): ## 용혼석도 팔리게 하는 기능 추가하면서 인자 type 추가 net.SendShopSellPacketNew(self.sellingSlotNumber, self.questionDialog.count, player.INVENTORY) snd.PlaySound("sound/ui/money.wav") self.OnCloseQuestionDialog() def OnDetachMetinFromItem(self): if None == self.questionDialog: return #net.SendItemUseToItemPacket(self.questionDialog.sourcePos, self.questionDialog.targetPos) self.__SendUseItemToItemPacket(self.questionDialog.sourcePos, self.questionDialog.targetPos) self.OnCloseQuestionDialog() def OnCloseQuestionDialog(self): if not self.questionDialog: return self.questionDialog.Close() self.questionDialog = None constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0) ## Slot Event def SelectEmptySlot(self, selectedSlotPos): if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1: return selectedSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(selectedSlotPos) if mouseModule.mouseController.isAttached(): attachedSlotType = mouseModule.mouseController.GetAttachedType() attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() attachedItemCount = mouseModule.mouseController.GetAttachedItemCount() attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex() if player.SLOT_TYPE_INVENTORY == attachedSlotType: itemCount = player.GetItemCount(attachedSlotPos) attachedCount = mouseModule.mouseController.GetAttachedItemCount() self.__SendMoveItemPacket(attachedSlotPos, selectedSlotPos, attachedCount) if item.IsRefineScroll(attachedItemIndex): self.wndItem.SetUseMode(False) elif player.SLOT_TYPE_PRIVATE_SHOP == attachedSlotType: mouseModule.mouseController.RunCallBack("INVENTORY") elif player.SLOT_TYPE_OFFLINE_SHOP == attachedSlotType: mouseModule.mouseController.RunCallBack("INVENTORY") elif player.SLOT_TYPE_SHOP == attachedSlotType: net.SendShopBuyPacket(attachedSlotPos) elif player.SLOT_TYPE_SAFEBOX == attachedSlotType: if player.ITEM_MONEY == attachedItemIndex: net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount()) snd.PlaySound("sound/ui/money.wav") else: net.SendSafeboxCheckoutPacket(attachedSlotPos, selectedSlotPos) elif player.SLOT_TYPE_MALL == attachedSlotType: net.SendMallCheckoutPacket(attachedSlotPos, selectedSlotPos) mouseModule.mouseController.DeattachObject() def SelectItemSlot(self, itemSlotIndex): if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1: return itemSlotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(itemSlotIndex) if mouseModule.mouseController.isAttached(): attachedSlotType = mouseModule.mouseController.GetAttachedType() attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() attachedItemVID = mouseModule.mouseController.GetAttachedItemIndex() if player.SLOT_TYPE_INVENTORY == attachedSlotType: self.__DropSrcItemToDestItemInInventory(attachedItemVID, attachedSlotPos, itemSlotIndex) mouseModule.mouseController.DeattachObject() else: curCursorNum = app.GetCursor() if app.SELL == curCursorNum: self.__SellItem(itemSlotIndex) elif app.BUY == curCursorNum: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SHOP_BUY_INFO) elif app.IsPressed(app.DIK_LALT): link = player.GetItemLink(itemSlotIndex) ime.PasteString(link) elif app.IsPressed(app.DIK_LSHIFT): itemCount = player.GetItemCount(itemSlotIndex) if itemCount > 1: self.dlgPickMoney.SetTitleName(localeInfo.PICK_ITEM_TITLE) self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickItem)) self.dlgPickMoney.Open(itemCount) self.dlgPickMoney.itemGlobalSlotIndex = itemSlotIndex #else: #selectedItemVNum = player.GetItemIndex(itemSlotIndex) #mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum) elif app.IsPressed(app.DIK_LCONTROL): itemIndex = player.GetItemIndex(itemSlotIndex) if True == item.CanAddToQuickSlotItem(itemIndex): player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_INVENTORY, itemSlotIndex) else: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.QUICKSLOT_REGISTER_DISABLE_ITEM) else: selectedItemVNum = player.GetItemIndex(itemSlotIndex) itemCount = player.GetItemCount(itemSlotIndex) mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, itemCount) if self.__IsUsableItemToItem(selectedItemVNum, itemSlotIndex): self.wndItem.SetUseMode(True) else: self.wndItem.SetUseMode(False) snd.PlaySound("sound/ui/pick.wav") def __DropSrcItemToDestItemInInventory(self, srcItemVID, srcItemSlotPos, dstItemSlotPos): if srcItemSlotPos == dstItemSlotPos: return if item.IsRefineScroll(srcItemVID): self.RefineItem(srcItemSlotPos, dstItemSlotPos) self.wndItem.SetUseMode(False) elif item.IsMetin(srcItemVID): self.AttachMetinToItem(srcItemSlotPos, dstItemSlotPos) elif item.IsCostumeScroll(srcItemVID): self.CostumeMetinFromItem(srcItemSlotPos, dstItemSlotPos) elif item.IsDetachScroll(srcItemVID): self.DetachMetinFromItem(srcItemSlotPos, dstItemSlotPos) elif item.IsKey(srcItemVID): self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos) elif (player.GetItemFlags(srcItemSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE: self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos) elif item.GetUseType(srcItemVID) in self.USE_TYPE_TUPLE: self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos) else: #snd.PlaySound("sound/ui/drop.wav") ## 이동시킨 곳이 장착 슬롯일 경우 아이템을 사용해서 장착 시킨다 - [levites] if player.IsEquipmentSlot(dstItemSlotPos): ## 들고 있는 아이템이 장비일때만 if item.IsEquipmentVID(srcItemVID): self.__UseItem(srcItemSlotPos) else: self.__SendMoveItemPacket(srcItemSlotPos, dstItemSlotPos, 0) #net.SendItemMovePacket(srcItemSlotPos, dstItemSlotPos, 0) def __SellItem(self, itemSlotPos): if not player.IsEquipmentSlot(itemSlotPos): self.sellingSlotNumber = itemSlotPos itemIndex = player.GetItemIndex(itemSlotPos) itemCount = player.GetItemCount(itemSlotPos) self.sellingSlotitemIndex = itemIndex self.sellingSlotitemCount = itemCount item.SelectItem(itemIndex) ## 안티 플레그 검사 빠져서 추가 ## 20140220 if item.IsAntiFlag(item.ANTIFLAG_SELL): popup = uiCommon.PopupDialog() popup.SetText(localeInfo.SHOP_CANNOT_SELL_ITEM) popup.SetAcceptEvent(self.__OnClosePopupDialog) popup.Open() self.popup = popup return itemPrice = item.GetISellItemPrice() if item.Is1GoldItem(): itemPrice = itemCount / itemPrice / 5 else: itemPrice = itemPrice * itemCount / 5 item.GetItemName(itemIndex) itemName = item.GetItemName() self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText(localeInfo.DO_YOU_SELL_ITEM(itemName, itemCount, itemPrice)) self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.SellItem)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog)) self.questionDialog.Open() self.questionDialog.count = itemCount constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1) def __OnClosePopupDialog(self): self.pop = None def RefineItem(self, scrollSlotPos, targetSlotPos): scrollIndex = player.GetItemIndex(scrollSlotPos) targetIndex = player.GetItemIndex(targetSlotPos) if player.REFINE_OK != player.CanRefine(scrollIndex, targetSlotPos): return ########################################################### self.__SendUseItemToItemPacket(scrollSlotPos, targetSlotPos) #net.SendItemUseToItemPacket(scrollSlotPos, targetSlotPos) return ########################################################### ########################################################### #net.SendRequestRefineInfoPacket(targetSlotPos) #return ########################################################### result = player.CanRefine(scrollIndex, targetSlotPos) if player.REFINE_ALREADY_MAX_SOCKET_COUNT == result: #snd.PlaySound("sound/ui/jaeryun_fail.wav") chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_MORE_SOCKET) elif player.REFINE_NEED_MORE_GOOD_SCROLL == result: #snd.PlaySound("sound/ui/jaeryun_fail.wav") chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NEED_BETTER_SCROLL) elif player.REFINE_CANT_MAKE_SOCKET_ITEM == result: #snd.PlaySound("sound/ui/jaeryun_fail.wav") chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_SOCKET_DISABLE_ITEM) elif player.REFINE_NOT_NEXT_GRADE_ITEM == result: #snd.PlaySound("sound/ui/jaeryun_fail.wav") chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_UPGRADE_DISABLE_ITEM) elif player.REFINE_CANT_REFINE_METIN_TO_EQUIPMENT == result: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_EQUIP_ITEM) if player.REFINE_OK != result: return self.refineDialog.Open(scrollSlotPos, targetSlotPos) def CostumeMetinFromItem(self, scrollSlotPos, targetSlotPos): scrollIndex = player.GetItemIndex(scrollSlotPos) targetIndex = player.GetItemIndex(targetSlotPos) self.__SendUseItemToItemPacket(scrollSlotPos, targetSlotPos) def DetachMetinFromItem(self, scrollSlotPos, targetSlotPos): scrollIndex = player.GetItemIndex(scrollSlotPos) targetIndex = player.GetItemIndex(targetSlotPos) if constInfo.IS_ACCE_ITEM_DETACH(scrollIndex) == True: item.SelectItem(targetIndex) if item.GetItemSubType() == item.COSTUME_TYPE_ACCE: if self.GetAcceAttribute(targetSlotPos) == 0: return self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText(localeInfo.ACCE_DO_YOU_REMOVE_ATTR) self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.OnDetachMetinFromItem)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog)) self.questionDialog.Open() self.questionDialog.sourcePos = scrollSlotPos self.questionDialog.targetPos = targetSlotPos else: return else: if not player.CanDetach(scrollIndex, targetSlotPos): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_METIN_INSEPARABLE_ITEM) return self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText(localeInfo.REFINE_DO_YOU_SEPARATE_METIN) self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.OnDetachMetinFromItem)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog)) self.questionDialog.Open() self.questionDialog.sourcePos = scrollSlotPos self.questionDialog.targetPos = targetSlotPos def AttachMetinToItem(self, metinSlotPos, targetSlotPos): metinIndex = player.GetItemIndex(metinSlotPos) targetIndex = player.GetItemIndex(targetSlotPos) item.SelectItem(metinIndex) itemName = item.GetItemName() result = player.CanAttachMetin(metinIndex, targetSlotPos) if player.ATTACH_METIN_NOT_MATCHABLE_ITEM == result: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_CAN_NOT_ATTACH(itemName)) if player.ATTACH_METIN_NO_MATCHABLE_SOCKET == result: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_SOCKET(itemName)) elif player.ATTACH_METIN_NOT_EXIST_GOLD_SOCKET == result: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_GOLD_SOCKET(itemName)) elif player.ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT == result: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_EQUIP_ITEM) if player.ATTACH_METIN_OK != result: return self.attachMetinDialog.Open(metinSlotPos, targetSlotPos) def OverOutItem(self): self.wndItem.SetUsableItem(False) if None != self.tooltipItem: self.tooltipItem.HideToolTip() def OverInItem(self, overSlotPos): overSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(overSlotPos) self.wndItem.SetUsableItem(False) if mouseModule.mouseController.isAttached(): attachedItemType = mouseModule.mouseController.GetAttachedType() if player.SLOT_TYPE_INVENTORY == attachedItemType: attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() attachedItemVNum = mouseModule.mouseController.GetAttachedItemIndex() if self.__CanUseSrcItemToDstItem(attachedItemVNum, attachedSlotPos, overSlotPos): self.wndItem.SetUsableItem(True) self.ShowToolTip(overSlotPos) return self.ShowToolTip(overSlotPos) def __IsUsableItemToItem(self, srcItemVNum, srcSlotPos): "다른 아이템에 사용할 수 있는 아이템인가?" if item.IsRefineScroll(srcItemVNum): return True elif item.IsMetin(srcItemVNum): return True elif item.IsCostumeScroll(srcItemVNum): return True elif item.IsDetachScroll(srcItemVNum): return True elif item.IsKey(srcItemVNum): return True elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE: return True else: if item.GetUseType(srcItemVNum) in self.USE_TYPE_TUPLE: return True return False def __CanUseSrcItemToDstItem(self, srcItemVNum, srcSlotPos, dstSlotPos): "대상 아이템에 사용할 수 있는가?" if srcSlotPos == dstSlotPos: return False if item.IsRefineScroll(srcItemVNum): if player.REFINE_OK == player.CanRefine(srcItemVNum, dstSlotPos): return True elif item.IsMetin(srcItemVNum): if player.ATTACH_METIN_OK == player.CanAttachMetin(srcItemVNum, dstSlotPos): return True elif item.IsCostumeScroll(srcItemVNum): if player.DETACH_METIN_OK == player.CanDetach(srcItemVNum, dstSlotPos): return True elif item.IsDetachScroll(srcItemVNum): if player.DETACH_METIN_OK == player.CanDetach(srcItemVNum, dstSlotPos): return True elif item.IsKey(srcItemVNum): if player.CanUnlock(srcItemVNum, dstSlotPos): return True elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE: return True else: useType=item.GetUseType(srcItemVNum) if "USE_CLEAN_SOCKET" == useType: if self.__CanCleanBrokenMetinStone(dstSlotPos): return True elif "USE_CHANGE_ATTRIBUTE" == useType: if self.__CanChangeItemAttrList(dstSlotPos): return True elif "USE_ADD_ATTRIBUTE" == useType: if self.__CanAddItemAttr(dstSlotPos): return True elif "USE_ADD_ATTRIBUTE2" == useType: if self.__CanAddItemAttr(dstSlotPos): return True elif "USE_ADD_ACCESSORY_SOCKET" == useType: if self.__CanAddAccessorySocket(dstSlotPos): return True elif "USE_PUT_INTO_ACCESSORY_SOCKET" == useType: if self.__CanPutAccessorySocket(dstSlotPos, srcItemVNum): return True; elif "USE_PUT_INTO_BELT_SOCKET" == useType: dstItemVNum = player.GetItemIndex(dstSlotPos) print "USE_PUT_INTO_BELT_SOCKET", srcItemVNum, dstItemVNum item.SelectItem(dstItemVNum) if item.ITEM_TYPE_BELT == item.GetItemType(): return True return False def __CanCleanBrokenMetinStone(self, dstSlotPos): dstItemVNum = player.GetItemIndex(dstSlotPos) if dstItemVNum == 0: return False item.SelectItem(dstItemVNum) if item.ITEM_TYPE_WEAPON != item.GetItemType(): return False for i in xrange(player.METIN_SOCKET_MAX_NUM): if player.GetItemMetinSocket(dstSlotPos, i) == constInfo.ERROR_METIN_STONE: return True return False def __CanChangeItemAttrList(self, dstSlotPos): dstItemVNum = player.GetItemIndex(dstSlotPos) if dstItemVNum == 0: return False item.SelectItem(dstItemVNum) if not item.GetItemType() in (item.ITEM_TYPE_WEAPON, item.ITEM_TYPE_ARMOR): return False for i in xrange(player.METIN_SOCKET_MAX_NUM): if player.GetItemAttribute(dstSlotPos, i) != 0: return True return False def __CanPutAccessorySocket(self, dstSlotPos, mtrlVnum): dstItemVNum = player.GetItemIndex(dstSlotPos) if dstItemVNum == 0: return False item.SelectItem(dstItemVNum) if item.GetItemType() != item.ITEM_TYPE_ARMOR: return False if not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR): return False curCount = player.GetItemMetinSocket(dstSlotPos, 0) maxCount = player.GetItemMetinSocket(dstSlotPos, 1) if mtrlVnum != constInfo.GET_ACCESSORY_MATERIAL_VNUM(dstItemVNum, item.GetItemSubType()): return False if curCount>=maxCount: return False return True def __CanAddAccessorySocket(self, dstSlotPos): dstItemVNum = player.GetItemIndex(dstSlotPos) if dstItemVNum == 0: return False item.SelectItem(dstItemVNum) if item.GetItemType() != item.ITEM_TYPE_ARMOR: return False if not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR): return False curCount = player.GetItemMetinSocket(dstSlotPos, 0) maxCount = player.GetItemMetinSocket(dstSlotPos, 1) ACCESSORY_SOCKET_MAX_SIZE = 3 if maxCount >= ACCESSORY_SOCKET_MAX_SIZE: return False return True def __CanAddItemAttr(self, dstSlotPos): dstItemVNum = player.GetItemIndex(dstSlotPos) if dstItemVNum == 0: return False item.SelectItem(dstItemVNum) if not item.GetItemType() in (item.ITEM_TYPE_WEAPON, item.ITEM_TYPE_ARMOR): return False attrCount = 0 for i in xrange(player.METIN_SOCKET_MAX_NUM): if player.GetItemAttribute(dstSlotPos, i) != 0: attrCount += 1 if attrCount<4: return True return False def ShowToolTip(self, slotIndex): if None != self.tooltipItem: self.tooltipItem.SetInventoryItem(slotIndex) def OnTop(self): if None != self.tooltipItem: self.tooltipItem.SetTop() def OnPressEscapeKey(self): self.Close() return True def UseItemSlot(self, slotIndex): curCursorNum = app.GetCursor() if app.SELL == curCursorNum: return if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS(): return slotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(slotIndex) if app.ENABLE_DRAGON_SOUL_SYSTEM: if self.wndDragonSoulRefine.IsShow(): self.wndDragonSoulRefine.AutoSetItem((player.INVENTORY, slotIndex), 1) return self.__UseItem(slotIndex) mouseModule.mouseController.DeattachObject() self.OverOutItem() def SetOpenBoniSwitcherEvent(self, event): self.OpenBoniSwitcherEvent = ui.__mem_func__(event) def __UseItem(self, slotIndex): ItemVNum = player.GetItemIndex(slotIndex) item.SelectItem(ItemVNum) if item.IsFlag(item.ITEM_FLAG_CONFIRM_WHEN_USE): self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText(localeInfo.INVENTORY_REALLY_USE_ITEM) self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.__UseItemQuestionDialog_OnAccept)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.__UseItemQuestionDialog_OnCancel)) self.questionDialog.Open() self.questionDialog.slotIndex = slotIndex constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1) else: self.__SendUseItemPacket(slotIndex) def __UseItemQuestionDialog_OnCancel(self): self.OnCloseQuestionDialog() def __UseItemQuestionDialog_OnAccept(self): self.__SendUseItemPacket(self.questionDialog.slotIndex) self.OnCloseQuestionDialog() def __SendUseItemToItemPacket(self, srcSlotPos, dstSlotPos): # 개인상점 열고 있는 동안 아이템 사용 방지 if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP) return if (uiOfflineShopBuilder.IsBuildingOfflineShop()): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_OFFLINE_SHOP) return if (uiOfflineShop.IsEditingOfflineShop()): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_OFFLINE_SHOP) return net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos) def __SendUseItemPacket(self, slotPos): # 개인상점 열고 있는 동안 아이템 사용 방지 if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP) return if (uiOfflineShopBuilder.IsBuildingOfflineShop()): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_OFFLINE_SHOP) return if (uiOfflineShop.IsEditingOfflineShop()): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_OFFLINE_SHOP) return net.SendItemUsePacket(slotPos) def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount): # 개인상점 열고 있는 동안 아이템 사용 방지 if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP) return if (uiOfflineShopBuilder.IsBuildingOfflineShop()): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_OFFLINE_SHOP) return if (uiOfflineShop.IsEditingOfflineShop()): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_OFFLINE_SHOP) return net.SendItemMovePacket(srcSlotPos, dstSlotPos, srcItemCount) def SetDragonSoulRefineWindow(self, wndDragonSoulRefine): if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoulRefine = wndDragonSoulRefine def GetAcceAttribute(self, srcSlotPos): result = 0 attrSlot = [] for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM): attrSlot.append(player.GetItemAttribute(srcSlotPos, i)) if 0 != attrSlot: for c in xrange(player.ATTRIBUTE_SLOT_MAX_NUM): type = attrSlot[c][0] if type != 0: result = result + 1 return result def OnMoveWindow(self, x, y): # print "Inventory Global Pos : ", self.GetGlobalPosition() if self.wndBelt: # print "Belt Global Pos : ", self.wndBelt.GetGlobalPosition() self.wndBelt.AdjustPositionAndSize()
Portanto como vês, não há ai nenhum Lovele ou PTC..
-
Boas pessoal, esotu com uma dúvida, realmente muito estúpida. Mas de facto não encontro como mudar o nome do yang. Podem ver na seguinte imagem como está:
-
@pedro4001 como resolveste o bug das montadas não montarem nessas files ? Estou há uns dias nisto e não encontro essa solução.
-
-
-
Mas como ?
-
Boas pessoal, tou a utilizar files 40k, se utilizra o comando /mount_test funciona com todas, mas se utilizar o item, ele vai lá para cima para o slot ( equipado ) mas não monta a montada.
Deixo aqui a quest em .lua:
Alguem sabe como resolver isso ?
Spoiler------------------------------------------------------------
--------Montarias Oficiais By: Edson.B.Junior -------- ------------------------------------------------------------ quest ride begin state start begin function Ride(vnum, remain_time) ride_info = { ------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------- -- ID do Item | ID da Montaria | Tempo | Bonus | Qt do Bonus | Level | Remover item sim ou não - True or False --------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------- [71114] = {20110, 60*10, apply.DEF_GRADE_BONUS, 75, 75, true}, --[71115] = {00000, 60*10, apply.NONE, 0, 1, true }, [71116] = {20111, 60*10, apply.DEF_GRADE_BONUS, 100, 80, true}, --[71117] = {00000, 60*10, apply.NONE, 0, 1, true }, [71118] = {20112, 60*10, apply.DEF_GRADE_BONUS, 125, 85, true}, --[71119] = {00000, 60*10, apply.NONE, 0, 1, true }, [71120] = {20113, 60*10, apply.DEF_GRADE_BONUS, 200, 85, true}, --[71121] = {00000, 60*10, apply.NONE, 0, 1, true }, -------------------------------- 2592000 [71124] = {20114, item.get_socket(2)*60, apply.EXP_DOUBLE_BONUS, 20, 1, false}, --Item Shop [71125] = {20115, 60*60*24*30, apply.ATTBONUS_MONSTER, 20, 20, false}, [71126] = {20116, 60*60*24*30, apply.CRITICAL_PCT, 10, 20, false}, [71127] = {20117, 60*60*24*30, apply.CRITICAL_PCT, 10, 20, false}, [71128] = {20118, 60*60*24*30, apply.NORMAL_HIT_DEFEND_BONUS, 10, 20, false}, -------------------------------- [71131] = {20119, 60*60*24*7, apply.MOV_SPEED, 60, 1, false}, [71132] = {20119, 60*60*24*15, apply.MOV_SPEED, 60, 1, false}, [71133] = {20119, 60*60*24*30, apply.MOV_SPEED, 60, 1, false}, [71134] = {20119, 60*60*24*60, apply.MOV_SPEED, 60, 1, false}, -------------------------------- [71137] = {20120, 60*60*24*30, apply.EXP_DOUBLE_BONUS, 20, 1, false}, [71138] = {20121, 60*60*24*30, apply.EXP_DOUBLE_BONUS, 20, 1, false}, [71139] = {20122, 60*60*24*30, apply.EXP_DOUBLE_BONUS, 20, 1, false}, [71140] = {20123, 60*60*24*30, apply.EXP_DOUBLE_BONUS, 20, 1, false}, [71141] = {20124, 60*60*24*30, apply.EXP_DOUBLE_BONUS, 20, 1, false}, [71142] = {20125, 60*60*24*30, apply.EXP_DOUBLE_BONUS, 20, 1, false}, -------------------------------- [71161] = {20219, 60*60*24*30, apply.MOV_SPEED, 60, 1, false}, [71164] = {20220, 60*60*24*30, apply.MOV_SPEED, 60, 1, false}, [71165] = {20221, 60*60*24*30, apply.MOV_SPEED, 60, 1, false}, [71166] = {20222, 60*60*24*30, apply.MOV_SPEED, 60, 1, false}, [71171] = {20227, 60*60*24*30, apply.MOV_SPEED, 60, 1, false}, [71172] = {20226, 60*60*24*30, apply.MOV_SPEED, 60, 1, false}, [71176] = {20231, 60*60*24*30, apply.MOV_SPEED, 30, 1, false}, [71177] = {20232, 60*60*24*30, apply.MOV_SPEED, 30, 1, false}, [71182] = {20233, 60*60*24*30, apply.MOV_SPEED, 30, 1, false}, [71183] = {20234, 60*60*24*30, apply.MOV_SPEED, 30, 1, false}, [71184] = {20235, 60*60*24*30, apply.MOV_SPEED, 30, 1, false}, [71185] = {20236, 60*60*24*30, apply.MOV_SPEED, 30, 1, false}, [71186] = {20237, 60*60*24*30, apply.MOV_SPEED, 30, 1, false}, [71187] = {20238, 60*60*24*30, apply.MOV_SPEED, 30, 1, false}, -------------------------------- [71192] = {20239, 60*60*24*30, apply.MOV_SPEED, 20, 1, false}, [71193] = {20240, 60*60*24*30, apply.MOV_SPEED, 20, 1, false}, ------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------- [52001] = {20201, 60*60*24*7, apply.NONE, 0, 0, false}, [52002] = {20201, 60*60*24*7, apply.NONE, 0, 0, false}, [52003] = {20201, 60*60*24*7, apply.NONE, 0, 0, false}, [52004] = {20201, 60*60*24*7, apply.NONE, 0, 0, false}, [52005] = {20201, 60*60*24*7, apply.NONE, 0, 0, false}, [52006] = {20205, 60*60*24*15, apply.ATTBONUS_MONSTER, 3, 0, false}, [52007] = {20205, 60*60*24*15, apply.MALL_EXPBONUS, 3, 0, false}, [52008] = {20205, 60*60*24*15, apply.MAX_HP, 250, 0, false}, [52009] = {20205, 60*60*24*15, apply.DEF_GRADE_BONUS, 50, 0, false}, [52010] = {20205, 60*60*24*15, apply.ATT_GRADE_BONUS, 30, 0, false}, [52011] = {20209, 60*60*24*30, apply.ATTBONUS_MONSTER, 5, 0, false}, [52012] = {20209, 60*60*24*30, apply.MALL_EXPBONUS, 5, 0, false}, [52013] = {20209, 60*60*24*30, apply.MAX_HP, 500, 0, false}, [52014] = {20209, 60*60*24*30, apply.DEF_GRADE_BONUS, 150, 0, false}, [52015] = {20209, 60*60*24*30, apply.ATT_GRADE_BONUS, 100, 0, false}, --------------------------- [52016] = {20202, 60*60*24*365, apply.NONE, 0, 0, false}, [52017] = {20202, 60*60*24*365, apply.NONE, 0, 0, false}, [52018] = {20202, 60*60*24*365, apply.NONE, 0, 0, false}, [52019] = {20202, 60*60*24*365, apply.NONE, 0, 0, false}, [52020] = {20202, 60*60*24*365, apply.NONE, 0, 0, false}, [52021] = {20206, 60*60*24*365, apply.ATTBONUS_MONSTER, 3, 0, false}, [52022] = {20206, 60*60*24*365, apply.MALL_EXPBONUS, 3, 0, false}, [52023] = {20206, 60*60*24*365, apply.MAX_HP, 250, 0, false}, [52024] = {20206, 60*60*24*365, apply.DEF_GRADE_BONUS, 50, 0, false}, [52025] = {20206, 60*60*24*365, apply.ATT_GRADE_BONUS, 30, 0, false}, [52026] = {20210, 60*60*24*365, apply.ATTBONUS_MONSTER, 5, 0, false}, [52027] = {20210, 60*60*24*365, apply.MALL_EXPBONUS, 5, 0, false}, [52028] = {20210, 60*60*24*365, apply.MAX_HP, 500, 0, false}, [52029] = {20210, 60*60*24*365, apply.DEF_GRADE_BONUS, 150, 0, false}, [52030] = {20210, 60*60*24*365, apply.ATT_GRADE_BONUS, 100, 0, false}, --------------------------- [52031]= {20204, 60*60*24*365, apply.NONE, 0, 0, false}, [52032]= {20204, 60*60*24*365, apply.NONE, 0, 0, false}, [52033]= {20204, 60*60*24*365, apply.NONE, 0, 0, false}, [52034]= {20204, 60*60*24*365, apply.NONE, 0, 0, false}, [52035]= {20204, 60*60*24*365, apply.NONE, 0, 0, false}, [52036]= {20208, 60*60*24*365, apply.ATTBONUS_MONSTER, 3, 0, false}, [52037]= {20208, 60*60*24*365, apply.MALL_EXPBONUS, 3, 0, false}, [52038]= {20208, 60*60*24*365, apply.MAX_HP, 250, 0, false}, [52039]= {20208, 60*60*24*365, apply.DEF_GRADE_BONUS, 50, 0, false}, [52040]= {20208, 60*60*24*365, apply.ATT_GRADE_BONUS, 30, 0, false}, [52041]= {20212, 60*60*24*365, apply.ATTBONUS_MONSTER, 5, 0, false}, [52042]= {20212, 60*60*24*365, apply.MALL_EXPBONUS, 5, 0, false}, [52043]= {20212, 60*60*24*365, apply.MAX_HP, 500, 0, false}, [52044]= {20212, 60*60*24*365, apply.DEF_GRADE_BONUS, 150, 0, false}, [52045]= {20212, 60*60*24*365, apply.ATT_GRADE_BONUS, 100, 0, false}, --------------------------- [52046]= {20203, 60*60*24*365, apply.NONE, 0, 0, false}, [52047]= {20203, 60*60*24*365, apply.NONE, 0, 0, false}, [52048]= {20203, 60*60*24*365, apply.NONE, 0, 0, false}, [52049]= {20203, 60*60*24*365, apply.NONE, 0, 0, false}, [52050]= {20203, 60*60*24*365, apply.NONE, 0, 0, false}, [52051]= {20207, 60*60*24*365, apply.ATTBONUS_MONSTER, 3, 0, false}, [52052]= {20207, 60*60*24*365, apply.MALL_EXPBONUS, 3, 0, false}, [52053]= {20207, 60*60*24*365, apply.MAX_HP, 250, 0, false}, [52054]= {20207, 60*60*24*365, apply.DEF_GRADE_BONUS, 50, 0, false}, [52055]= {20207, 60*60*24*365, apply.ATT_GRADE_BONUS, 30, 0, false}, [52056]= {20211, 60*60*24*365, apply.ATTBONUS_MONSTER, 5, 0, false}, [52057]= {20211, 60*60*24*365, apply.MALL_EXPBONUS, 5, 0, false}, [52058]= {20211, 60*60*24*365, apply.MAX_HP, 500, 0, false}, [52059]= {20211, 60*60*24*365, apply.DEF_GRADE_BONUS, 150, 0, false}, [52060]= {20211, 60*60*24*365, apply.ATT_GRADE_BONUS, 100, 0, false}, ------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------- } if pc.level < ride_info[vnum][5] then say("") say_title("Olá "..pc.get_name()) say("") say("Seu nível é muito baixo para usar essa montaria! ") say("Você não é capaz de doma-la... ") say("") return -- elseif pc.is_polymorphed() then -- say("") -- say_title("Olá "..pc.get_name()) -- say("") -- say("Não é permitido o uso da montaria, enquanto estiver transformado! ") -- say("") -- return -- elseif pc.is_riding() then -- say("") -- say_title("Olá "..pc.get_name()) -- say("") -- say("Não é permitido o uso da montaria, quando está montado") -- say("") -- return else if ride_info[vnum][2] == 0 and remain_time != 0 then pc.mount(ride_info[vnum][1], remain_time*60) pc.mount_bonus( ride_info[vnum][3], ride_info[vnum][4], remain_time*60) else pc.mount(ride_info[vnum][1], ride_info[vnum][2] ) pc.mount_bonus(ride_info[vnum][3], ride_info[vnum][4], ride_info[vnum][2]) end -- pc.mount(ride_info[vnum][1], ride_info[vnum][2]) -- pc.mount_bonus(ride_info[vnum][3], ride_info[vnum][4], ride_info[vnum][2]) if true == ride_info[vnum][6] then pc.remove_item(vnum, 1) end end end when 71114.use or 71115.use or 71116.use or 71117.use or 71118.use or 71119.use or 71120.use or 71121.use or 71124.use or 71125.use or 71126.use or 71127.use or 71128.use or 71137.use or 71138.use or 71139.use or 71140.use or 71141.use or 71142.use or 71161.use or 71164.use or 71165.use or 71166.use or 71171.use or 71172.use or 71176.use or 71177.use or 71182.use or 71183.use or 71184.use or 71185.use or 71186.use or 71187.use or 71131.use or 71132.use or 71133.use or 71134.use or 71192.use or 71193.use begin if pc.get_map_index() == 110 or pc.get_map_index() == 111 or pc.get_map_index() == 112 or pc.get_map_index() == 113 or pc.get_map_index() == 118 or pc.get_map_index() == 119 or pc.get_map_index() == 120 or pc.get_map_index() == 122 or pc.get_map_index() == 123 or pc.get_map_index() == 124 or pc.get_map_index() == 126 or pc.get_map_index() == 127 or pc.get_map_index() == 128 and not pc.is_gm() then say("") say_title("Olá "..pc.get_name()) say("") say("Não é permitido o uso da montaria neste local. ") return end if pc.is_polymorphed() then syschat("Não é permitido o uso da montaria, enquanto estiver transformado! ") elseif false == pc.is_riding() then if true == horse.is_summon() then horse.unsummon() end ride.Ride(item.vnum, 0) else pc.unmount() end end when 52001.use or 52002.use or 52003.use or 52004.use or 52005.use or 52006.use or 52007.use or 52008.use or 52009.use or 52010.use or 52011.use or 52012.use or 52013.use or 52014.use or 52015.use or 52016.use or 52017.use or 52018.use or 52019.use or 52020.use or 52021.use or 52022.use or 52023.use or 52024.use or 52025.use or 52026.use or 52027.use or 52028.use or 52029.use or 52030.use or 52031.use or 52032.use or 52033.use or 52034.use or 52035.use or 52036.use or 52037.use or 52038.use or 52039.use or 52040.use or 52041.use or 52042.use or 52043.use or 52044.use or 52045.use or 52046.use or 52047.use or 52048.use or 52049.use or 52050.use or 52051.use or 52052.use or 52053.use or 52054.use or 52055.use or 52056.use or 52057.use or 52058.use or 52059.use or 52060.use begin if pc.get_map_index() == 110 or pc.get_map_index() == 111 or pc.get_map_index() == 112 or pc.get_map_index() == 113 or pc.get_map_index() == 118 or pc.get_map_index() == 119 or pc.get_map_index() == 120 or pc.get_map_index() == 122 or pc.get_map_index() == 123 or pc.get_map_index() == 124 or pc.get_map_index() == 126 or pc.get_map_index() == 127 or pc.get_map_index() == 128 and not pc.is_gm() then say("") say_title("Olá "..pc.get_name()) say("") say("Não é permitido o uso da montaria neste local. ") return end -- if pc.get_armor() == 11901 or pc.get_armor() == 11902 then -- say("") -- say_title("Olá "..pc.get_name()) -- say("") -- say("Não é permitido montar usando Smoking") -- say("") -- return -- elseif pc.get_armor() == 11903 or pc.get_armor() == 11904 then -- say("") -- say_title("Olá "..pc.get_name()) -- say("") -- say("Não é permitido montar usando Vestido de Noiva") -- say("") -- return -- end if pc.is_polymorphed() then syschat("Não é permitido o uso da montaria, enquanto estiver transformado! ") elseif false == pc.is_riding() then if true == horse.is_summon() then horse.unsummon() end ride.Ride(item.vnum, 0) else pc.unmount() end end when login begin local vnum, remain_time = pc.get_special_ride_vnum() if 0 != vnum then ride.Ride(vnum, remain_time) end end end end
-
Tenho o mesmo problema, alguém pode ajudar ? por favor.
-
Boas pessoal, eu ando há procura da source para as files 40k do maxmi, alguem me consegue arranjar o link ?
Queria editar umas files completas.. Implementar shops offline, alquimia, trajes, e isso tudo
Portanto, comvém ter a source xD
E como não estou muito por dentro das melhores sources venho pedir-vos a vossa opinião/link.
-
Continua igual.. O problema é que eu não sei mexer muito bem na parte de clienteside ao ponto de fazer isso.. :/
-
Feito isso, o cliente desliga antes de entrar na personagem.
syserr do cliente metin2rage:
0213 01:28:08165 ::networkModule.py(line:200) SetSelectCharacterPhasesystem.py(line:130) __pack_importsystem.py(line:110) _process_resultintroSelect.py(line:25) <module>system.py(line:130) __pack_importsystem.py(line:110) _process_resultuiCharacter.py(line:43) <module>networkModule.SetSelectCharacterPhase - <type 'exceptions.AttributeError'>:'module' object has no attribute 'RACE_WOLFMAN_M'0213 01:28:08165 :: ============================================================================================================0213 01:28:08165 :: Abort!!!! -
Feito isso, continuo a conectar-me mas não aparece as personagens que eu tenho na conta. E quando clico em " criar " ele fica parado a mostrar as personagens que podemos criar apenas.
Syserr limpo
[Sondagem]2 ou 3 reinos ?
in Criatividade
Posted · Edited by NewReboot (see edit history)
Boas pessoal, há cerca de 2 meses atrás iniciei um projeto no qual estou perto de o concluir. Este tópico é apenas uma sondagem para algo que tenho bastantes dúvidas e incertezas.
Neste momento conto apenas com 2 reinos no meu servidor: Jinno e Shinsoo.
O que quero saber é, jogariam num servidor onde apenas existem 2 reinos ?
Sendo tu um jogador de metin, onde só te concentras-te no reino amarelo, jogarias noutro reino ?
Aqui estão os meus pontos de vista para apenas ter 2 reinos:
- Dar utilidade ás wars:
Se apenas tiver 2 reinos, as guild's irão ter mais gente ( ou não ).
Concentrar os jogadores apenas em 2 pontos, de modo a obter negocio, dialogo, e como objetivo principal, PVP e reconhecimento para wars.
- Novos eventos:
Novos eventos onde apenas 2 reinos disputaram, e o melhor ganhará ( maior rivalidade (amigável) entre os reinos.
Um enorme obrigado a todos os que me ajudarem nesta sondagem.