M4str0
-
Posts
25 -
Joined
-
Last visited
-
Feedback
0%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Posts posted by M4str0
-
-
you'll never find the source of 2089m, in the network are only pseudocode
-
hi,i modified the source to implement the horse level 30, however, it is still visible the horse lv 21 even if the horse is 30 lv.
This source
horse_rider.cpp
SpoilerTHorseStat c_aHorseStat[HORSE_MAX_LEVEL+1] =
/*
int iMinLevel; // ž½ÂÇÒ ¼ö ÀÖ´Â ÃÖ¼Ò ·¹º§
int iNPCRace;
int iMaxHealth; // ¸»ÀÇ ÃÖ´ë ü·Â
int iMaxStamina; // ¸»ÀÇ ÃÖ´ë ½ºÅ׹̳Ê
int iST;
int iDX;
int iHT;
int iIQ;
int iDamMean;
int iDamMin;
int iDamMax;
int iDef;
*/
{
{ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 25, 20101, 3, 4, 26, 35, 18, 9, 54, 43, 64, 32 }, // 1 (ÃʱÞ)
{ 25, 20101, 4, 4, 27, 36, 18, 9, 55, 44, 66, 33 },
{ 25, 20101, 5, 5, 28, 38, 19, 9, 56, 44, 67, 33 },
{ 25, 20101, 7, 5, 29, 39, 19, 10, 57, 45, 68, 34 },
{ 25, 20101, 8, 6, 30, 40, 20, 10, 58, 46, 69, 34 },
{ 25, 20101, 9, 6, 31, 41, 21, 10, 59, 47, 70, 35 },
{ 25, 20101, 11, 7, 32, 42, 21, 11, 60, 48, 72, 36 },
{ 25, 20101, 12, 7, 33, 44, 22, 11, 61, 48, 73, 36 },
{ 25, 20101, 13, 8, 34, 45, 22, 11, 62, 49, 74, 37 },
{ 25, 20101, 15, 10, 35, 46, 23, 12, 63, 50, 75, 37 },
{ 35, 20104, 18, 30, 40, 53, 27, 13, 69, 55, 82, 41 }, // 11 (Áß±Þ)
{ 35, 20104, 19, 35, 41, 54, 27, 14, 70, 56, 84, 42 },
{ 35, 20104, 21, 40, 42, 56, 28, 14, 71, 56, 85, 42 },
{ 35, 20104, 22, 50, 43, 57, 28, 14, 72, 57, 86, 43 },
{ 35, 20104, 24, 55, 44, 58, 29, 15, 73, 58, 87, 43 },
{ 35, 20104, 25, 60, 44, 59, 30, 15, 74, 59, 88, 44 },
{ 35, 20104, 27, 65, 45, 60, 30, 15, 75, 60, 90, 45 },
{ 35, 20104, 28, 70, 46, 62, 31, 15, 76, 60, 91, 45 },
{ 35, 20104, 30, 80, 47, 63, 31, 16, 77, 61, 92, 46 },
{ 35, 20104, 32, 100, 48, 64, 32, 16, 78, 62, 93, 46 },
{ 50, 20107, 35, 120, 53, 71, 36, 18, 84, 67, 100, 50 }, // 21 (°í±Þ)
{ 50, 20107, 36, 125, 55, 74, 37, 18, 86, 68, 103, 51 },
{ 50, 20107, 37, 130, 57, 76, 38, 19, 88, 70, 105, 52 },
{ 50, 20107, 38, 135, 59, 78, 39, 20, 90, 72, 108, 54 },
{ 50, 20107, 40, 140, 60, 80, 40, 20, 91, 72, 109, 54 },
{ 50, 20107, 42, 145, 61, 81, 40, 20, 92, 73, 110, 55 },
{ 50, 20107, 44, 150, 62, 83, 42, 21, 94, 75, 112, 56 },
{ 50, 20107, 46, 160, 63, 84, 42, 21, 95, 76, 114, 57 },
{ 50, 20107, 48, 170, 65, 87, 43, 22, 97, 77, 116, 58 },
{ 50, 20107, 50, 200, 67, 89, 45, 22, 99, 79, 118, 59 },
{ 75, 20401, 50, 120, 53, 89, 45, 22, 99, 79, 118, 60 }, // 30 imperiale
{ 75, 20401, 50, 125, 55, 91, 47, 22, 101, 81, 120, 61 },
{ 75, 20401, 50, 130, 57, 93, 49, 22, 101, 83, 122, 62 },
{ 75, 20401, 55, 135, 59, 95, 49, 23, 101, 85, 124, 64 },
{ 75, 20401, 55, 140, 60, 97, 49, 23, 101, 87, 126, 64 },
{ 75, 20401, 55, 145, 61, 99, 49, 23, 101, 89, 128, 65 },
{ 75, 20401, 60, 150, 62, 101, 51, 24, 101, 91, 130, 66 },
{ 75, 20401, 60, 160, 63, 103, 15, 24, 102, 93, 135, 67 },
{ 75, 20401, 65, 170, 65, 105, 51, 24, 102, 95, 140, 68 },
{ 75, 20401, 65, 200, 67, 107, 51, 25, 103, 97, 150, 70 }
};
horse_rider.h
const int HORSE_MAX_LEVEL = 40;
-
-
Hi, i have this problem, how to resolve?
Spoiler1229 15:19:16169 :: GRANNY: r:/granny/rt/granny_file_info.cpp(145): File has run-time type tag of 0x8000000f, which doesn't match this version of Granny (0x80000010). Automatic conversion will be attempted.
1229 15:19:16677 :: CTerrain::LoadShadowTexture - ShadowTexture is Empty
1229 15:19:21287 ::
uiInventory.py(line:313) __LoadWindow
ui.py(line:2709) GetChildInventoryWindow.LoadWindow.BindObject - <type 'exceptions.KeyError'>:'Inventory_Tab_03'
1229 15:19:21287 :: ============================================================================================================
1229 15:19:21287 :: Abort!!!!
my files:
inventorywindows.py
Spoilerimport uiScriptLocale
EQUIPMENT_START_INDEX = 180
window = {
"name" : "InventoryWindow",## 600 - (width + 오른쪽으로 부터 띄우기 24 px)
"x" : SCREEN_WIDTH - 176 - 200,
"y" : SCREEN_HEIGHT - 37 - 565,"style" : ("movable", "float",),
"width" : 176,
"height" : 565,"children" :
(
{
"name" : "board",
"type" : "board",
"style" : ("attach",),"x" : 0,
"y" : 0,"width" : 176,
"height" : 565,"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_PAGE_BUTTON_TOOLTIP_2, "text_horizontal_align":"center" },
),
},## Equipment Slot
{
"name" : "Equipment_Base",
"type" : "image","x" : 10,
"y" : 33,"image" : "d:/ymir work/ui/game/windows/equipment_base.sub",
"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":84, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+6, "x":114, "y":52, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+7, "x":2, "y":113, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+8, "x":75, "y":113, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+9, "x":114, "y":1, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+10, "x":75, "y":35, "width":32, "height":32},
),
},{
"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" : 10,
"y" : 33 + 191,"default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_large_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" : 10 + 78,
"y" : 33 + 191,"default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_large_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" : 10,
"y" : 33 + 210,"default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
"tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_3,"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" : 10 + 78,
"y" : 33 + 210,"default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
"tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_4,"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"
},## Print
{
"name":"Money_Slot",
"type":"button","x":8,
"y":28,"horizontal_align":"center",
"vertical_align":"bottom","default_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",
"over_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",
"down_image" : "d:/ymir work/ui/public/parameter_slot_05.sub","children" :
(
{
"name":"Money_Icon",
"type":"image","x":-18,
"y":20,"image":"d:/ymir work/ui/game/windows/money_icon.sub",
},{
"name" : "Money",
"type" : "text","x" : 3,
"y" : 3,"horizontal_align" : "right",
"text_horizontal_align" : "right","text" : "123456789",
},
),
},),
},
),
}
uiinventory.py
Spoilerimport 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 localeInfo
import constInfo
import ime
import wndMgrITEM_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?")
returnif 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:
returnself.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?")
returnif 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 = Noneself.__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()if localeInfo.IsARABIC() == 0:
self.AdjustPositionAndSize()
def CloseInventory(self):
self.wndBeltInventoryLayer.Hide()
self.expandBtn.Show()
if localeInfo.IsARABIC() == 0:
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:
returnself.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))
if localeInfo.IsARABIC() :
self.expandBtn.SetPosition(self.expandBtn.GetWidth() - 2, 15)
self.wndBeltInventoryLayer.SetPosition(self.wndBeltInventoryLayer.GetWidth() - 5, 0)
self.minBtn.SetPosition(self.minBtn.GetWidth() + 3, 15)
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.isOpenedBeltWindowWhenClosingInventory = 0 # 인벤토리 닫을 때 벨트 인벤토리가 열려있었는지 여부-_-; 네이밍 ㅈㅅ
self.__LoadWindow()
def __del__(self):
ui.ScriptWindow.__del__(self)def Show(self):
self.__LoadWindow()ui.ScriptWindow.Show(self)
# 인벤토리를 닫을 때 코스츔이 열려있었다면 인벤토리를 열 때 코스츔도 같이 열도록 함.
if self.isOpenedCostumeWindowWhenClosingInventory and self.wndCostume:
self.wndCostume.Show()# 인벤토리를 닫을 때 벨트 인벤토리가 열려있었다면 같이 열도록 함.
if self.wndBelt:
self.wndBelt.Show(self.isOpenedBeltWindowWhenClosingInventory)def BindInterfaceClass(self, interface):
self.interface = interface
def __LoadWindow(self):
if self.isLoaded == 1:
returnself.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.mallButton = self.GetChild2("MallButton")
self.DSSButton = self.GetChild2("DSSButton")
self.costumeButton = self.GetChild2("CostumeButton")
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))## 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.inventoryTab[0].Down()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))self.wndCostume = None
####### Refresh
self.SetInventoryPage(0)
self.SetEquipmentPage(0)
self.RefreshItemSlot()
self.RefreshStatus()def Destroy(self):
self.ClearDictionary()self.dlgPickMoney.Destroy()
self.dlgPickMoney = 0self.refineDialog.Destroy()
self.refineDialog = 0self.attachMetinDialog.Destroy()
self.attachMetinDialog = 0self.tooltipItem = None
self.wndItem = 0
self.wndEquip = 0
self.dlgPickMoney = 0
self.wndMoney = 0
self.wndMoneySlot = 0
self.questionDialog = None
self.mallButton = None
self.DSSButton = None
self.interface = Noneif self.wndCostume:
self.wndCostume.Destroy()
self.wndCostume = 0
if self.wndBelt:
self.wndBelt.Destroy()
self.wndBelt = None
self.inventoryTab = []
self.equipmentTab = []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()
wndMgr.Hide(self.hWnd)
def Close(self):
self.Hide()def SetInventoryPage(self, page):
self.inventoryTab[self.inventoryPageIndex].SetUp()
self.inventoryPageIndex = page
self.inventoryTab[self.inventoryPageIndex].Down()
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()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 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:
returnself.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 (app.ENABLE_NEW_EQUIPMENT_SYSTEM and player.IsBeltInventorySlot(local)):
return localreturn self.inventoryPageIndex*player.INVENTORY_PAGE_SIZE + local
def RefreshBagSlotWindow(self):
getItemVNum=player.GetItemIndex
getItemCount=player.GetItemCount
setItemVNum=self.wndItem.SetItemSlot
for i in xrange(player.INVENTORY_PAGE_SIZE):
slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i)
itemCount = getItemCount(slotNumber)
# itemCount == 0이면 소켓을 비운다.
if 0 == itemCount:
self.wndItem.ClearSlot(i)
continue
elif 1 == itemCount:
itemCount = 0
itemVnum = getItemVNum(slotNumber)
setItemVNum(i, itemVnum, itemCount)
## 자동물약 (HP: #72723 ~ #72726, SP: #72727 ~ #72730) 특수처리 - 아이템인데도 슬롯에 활성화/비활성화 표시를 위한 작업임 - [hyo]
if constInfo.IS_AUTO_POTION(itemVnum):
# metinSocket - [0] : 활성화 여부, [1] : 사용한 양, [2] : 최대 용량
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(slotNumber)
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(slotNumber)
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()
self.wndMoney.SetText(localeInfo.NumberToMoneyString(money))def SetItemToolTip(self, tooltipItem):
self.tooltipItem = tooltipItemdef 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:
returnselectedSlotPos = 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_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:
returnitemSlotIndex = 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 player.GetItemIndex(dstItemSlotPos) == player.GetItemIndex(srcItemSlotPos):
self.__SendMoveItemPacket(srcItemSlotPos, dstItemSlotPos, 0)
return
if item.IsRefineScroll(srcItemVID):
self.RefineItem(srcItemSlotPos, dstItemSlotPos)
self.wndItem.SetUseMode(FALSE)
elif item.IsMetin(srcItemVID):
self.AttachMetinToItem(srcItemSlotPos, dstItemSlotPos)
elif item.IsDetachScroll(srcItemVID):
self.DetachMetinFromItem(srcItemSlotPos, dstItemSlotPos)
elif item.IsKey(srcItemVID):
self.__Send(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")
## AIμ¿½AA² °÷AI AaAø ½½·OAI °æ¿i ¾ÆAIAUA≫ ≫c¿eCؼ AaAø ½AA²´U - [levites]
if player.IsEquipmentSlot(dstItemSlotPos):
## μe°i AO´A ¾ÆAIAUAI AaºnAI¶§¸¸
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 = itemCountitem.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
returnitemPrice = item.GetISellItemPrice()
if item.Is1GoldItem():
itemPrice = itemCount / itemPrice / 5
else:
itemPrice = itemPrice * itemCount / 5item.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 = Nonedef 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:
returnself.refineDialog.Open(scrollSlotPos, targetSlotPos)
def DetachMetinFromItem(self, scrollSlotPos, targetSlotPos):
scrollIndex = player.GetItemIndex(scrollSlotPos)
targetIndex = player.GetItemIndex(targetSlotPos)if not player.CanDetach(scrollIndex, targetSlotPos):
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_METIN_INSEPARABLE_ITEM)
returnself.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 = targetSlotPosdef 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:
returnself.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 constInfo.IS_POWERSNACK(srcItemVNum):
return True
elif item.IsRefineScroll(srcItemVNum):
return True
elif item.IsMetin(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 Falsedef __CanUseSrcItemToDstItem(self, srcItemVNum, srcSlotPos, dstSlotPos):
"대상 아이템에 사용할 수 있는가?"
if srcSlotPos == dstSlotPos:
return False
if constInfo.IS_POWERSNACK(srcItemVNum):
if constInfo.IS_MOUNT(player.GetItemIndex(dstSlotPos)):
return True
elif 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.IsDetachScroll(srcItemVNum):
if player.DETACH_METIN_OK == player.CanDetach(srcItemVNum, dstSlotPos):
return True
elif item.IsKey(srcItemVNum):
if player.CanUnlock(srcItemVNum, dstSlotPos):
return Trueelif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
return Trueelse:
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_TIME_CHARGE_FIX" == useType:
if self.__CanAddTime(dstSlotPos, srcItemVNum):
return TRUE;
elif "USE_PUT_INTO_BELT_SOCKET" == useType:
dstItemVNum = player.GetItemIndex(dstSlotPos)
print "USE_PUT_INTO_BELT_SOCKET", srcItemVNum, dstItemVNumitem.SelectItem(dstItemVNum)
if item.ITEM_TYPE_BELT == item.GetItemType():
return True
return Falsedef __CanCleanBrokenMetinStone(self, dstSlotPos):
dstItemVNum = player.GetItemIndex(dstSlotPos)
if dstItemVNum == 0:
return Falseitem.SelectItem(dstItemVNum)
if item.ITEM_TYPE_WEAPON != item.GetItemType():
return Falsefor i in xrange(player.METIN_SOCKET_MAX_NUM):
if player.GetItemMetinSocket(dstSlotPos, i) == constInfo.ERROR_METIN_STONE:
return Truereturn False
def __CanChangeItemAttrList(self, dstSlotPos):
dstItemVNum = player.GetItemIndex(dstSlotPos)
if dstItemVNum == 0:
return Falseitem.SelectItem(dstItemVNum)
if not item.GetItemType() in (item.ITEM_TYPE_WEAPON, item.ITEM_TYPE_ARMOR):
return Falsefor i in xrange(player.METIN_SOCKET_MAX_NUM):
if player.GetItemAttribute(dstSlotPos, i) != 0:
return Truereturn False
def __CanAddTime(self, dstSlotPos, mtrlVnum):
dstItemVNum = player.GetItemIndex(dstSlotPos)
if dstItemVNum == 0:
return Falseitem.SelectItem(dstItemVNum)
if not item.GetItemSubType() in (item.UNIQUE_SPECIAL_MOUNT_RIDE):
return FalsecurCount = player.GetItemMetinSocket(dstSlotPos, 0)
maxCount = player.GetItemMetinSocket(dstSlotPos, 1)
if curCount>=maxCount:
return Falsereturn True
def __CanPutAccessorySocket(self, dstSlotPos, mtrlVnum):
dstItemVNum = player.GetItemIndex(dstSlotPos)
if dstItemVNum == 0:
return Falseitem.SelectItem(dstItemVNum)
if item.GetItemType() != item.ITEM_TYPE_ARMOR:
return Falseif not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR):
return FalsecurCount = 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 Falsereturn True
def __CanAddAccessorySocket(self, dstSlotPos):
dstItemVNum = player.GetItemIndex(dstSlotPos)
if dstItemVNum == 0:
return Falseitem.SelectItem(dstItemVNum)
if item.GetItemType() != item.ITEM_TYPE_ARMOR and item.GetItemType() != item.ITEM_TYPE_BELT:
return Falseif not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR) and item.GetItemType() != item.ITEM_TYPE_BELT:
return FalsecurCount = player.GetItemMetinSocket(dstSlotPos, 0)
maxCount = player.GetItemMetinSocket(dstSlotPos, 1)
ACCESSORY_SOCKET_MAX_SIZE = 3
if maxCount >= ACCESSORY_SOCKET_MAX_SIZE:
return Falsereturn True
def __CanAddItemAttr(self, dstSlotPos):
dstItemVNum = player.GetItemIndex(dstSlotPos)
if dstItemVNum == 0:
return Falseitem.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 += 1if attrCount<4:
return True
return Falsedef 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 Truedef UseItemSlot(self, slotIndex):
curCursorNum = app.GetCursor()
if app.SELL == curCursorNum:
returnif constInfo.GET_ITEM_QUESTION_DIALOG_STATUS():
returnslotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(slotIndex)
if app.ENABLE_DRAGON_SOUL_SYSTEM:
if self.wndDragonSoulRefine.IsShow():
self.wndDragonSoulRefine.AutoSetItem((player.INVENTORY, slotIndex), 1)
returnself.__UseItem(slotIndex)
mouseModule.mouseController.DeattachObject()
self.OverOutItem()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)
#net.SendItemUsePacket(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)
returnnet.SendItemUseToItemPacket(srcSlotPos, dstSlotPos)
def __SendUseItemPacket(self, slotPos):
# 개인상점 열고 있는 동안 아이템 사용 방지
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP)
returnnet.SendItemUsePacket(slotPos)
def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount):
# 개인상점 열고 있는 동안 아이템 사용 방지
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
returnnet.SendItemMovePacket(srcSlotPos, dstSlotPos, srcItemCount)
def SetDragonSoulRefineWindow(self, wndDragonSoulRefine):
if app.ENABLE_DRAGON_SOUL_SYSTEM:
self.wndDragonSoulRefine = wndDragonSoulRefine
def OnMoveWindow(self, x, y):
# print "Inventory Global Pos : ", self.GetGlobalPosition()
if self.wndBelt:
# print "Belt Global Pos : ", self.wndBelt.GetGlobalPosition()
self.wndBelt.AdjustPositionAndSize()
locale_interface:
SpoilerACCEPT Conferma
ACCE_ABSORB Assorbimento dei bonus
ACCE_COMBINE Fusione
ACCE_MAIN Stola 1
ACCE_RESULT Risultato
ACCE_SERVE Stola 2
ATTACH_METIN_INFO Vuoi utilizzare la Pietra Spirituale?
ATTACH_METIN_TITLE Utilizza la Pietra Spirituale
CANCEL Interrompi
CHANGE_PASSWORD_CONFIRM Conferma nuova pass
CHANGE_PASSWORD_NEW Nuova password
CHANGE_PASSWORD_OLD Vecchia password
CHANGE_PASSWORD_TITLE Modifica password
CHARACTER_ACTION Azioni
CHARACTER_EMOTICON Emozioni
CHARACTER_MAIN Personaggio
CHARACTER_MUTUAL_ACTION Azioni interattive
CHARACTER_NORMAL_ACTION Azioni normali
CHARACTER_QUEST Missioni
CHARACTER_SKILL Abilità
CLOSE Chiudi
COSTUME_TITLE Costumi
COSTUME_WINDOW_TITLE Costumi
CREATE_ATT_GRADE STR
CREATE_CREATE Imposta
CREATE_DEX_GRADE DEX
CREATE_HP VIT
CREATE_LAST_POINT Punti
CREATE_MAN Uomo
CREATE_NAME Nome
CREATE_NEXT Avanti
CREATE_PREV Indietro
CREATE_SEX Sesso
CREATE_SHAPE Aspetto
CREATE_SP INT
CREATE_STAT_RESET Indietro
CREATE_WOMAN Donna
CUBE_INFO_TITLE Manuale della rifinitura
CUBE_REQUIRE_MATERIAL Materiali necessari
CUBE_REQUIRE_MATERIAL_OR oppure
CUBE_TITLE Finestra del raffinamento
DO_REFINE Raffinamento
DRAGONSOUL_ACTIVATE Attiva
DRAGONSOUL_PAGE_BUTTON_1 Grezzo
DRAGONSOUL_PAGE_BUTTON_2 Tagliato
DRAGONSOUL_PAGE_BUTTON_3 Raro
DRAGONSOUL_PAGE_BUTTON_4 Antico
DRAGONSOUL_PAGE_BUTTON_5 Leggendario
DRAGONSOUL_REFINE_WINDOW_TITLE Finestra del raffinamento
DRAGONSOUL_TAP_TITLE_1 Diamante del drago
DRAGONSOUL_TAP_TITLE_2 Rubino del drago
DRAGONSOUL_TAP_TITLE_3 Giada del drago
DRAGONSOUL_TAP_TITLE_4 Zaffiro del drago
DRAGONSOUL_TAP_TITLE_5 Granato del drago
DRAGONSOUL_TAP_TITLE_6 Onice del drago
DRAGONSOUL_TITLE Alchimia delle Pietre del drago
EMPIRE_EXIT Fine
EMPIRE_NEXT Avanti
EMPIRE_PREV Indietro
EMPIRE_SELECT Scegli
EXCHANGE_ACCEPT Accetta
EXCHANGE_TITLE Commercio
GAMEOPTION_TITLE Opzioni di gioco
GAME_EXIT_OBSERVER Termina modalità spettatore
GAME_HELP Aiuto
GAME_QUEST Rinuncia
GAME_SKILL_UP Aumenta abilità.
GAME_STAT_UP Aumenta status
GRADE Classe
GRADE_SELECT Classe
GUILD_BASENAME Nome base
GUILD_BOARD_ID Nome
GUILD_BOARD_REFRESH Attualizzare(F5)
GUILD_BOARD_TEXT Messaggio
GUILD_BUILDING_CATEGORY_TITLE Unità di costruzione
GUILD_BUILDING_CHANGE Cambia
GUILD_BUILDING_DIRECTION Orientamento
GUILD_BUILDING_GRADE Posizione
GUILD_BUILDING_INFO Info edifici e costi
GUILD_BUILDING_LIST_TITLE Lista edifici
GUILD_BUILDING_LOG Tronco
GUILD_BUILDING_NAME Nome edificio
GUILD_BUILDING_OPERATE Uso
GUILD_BUILDING_PLY Compensato
GUILD_BUILDING_POSITION Posizione
GUILD_BUILDING_PREVIEW Anteprima
GUILD_BUILDING_PRICE Prezzo
GUILD_BUILDING_REFRESH Attualizzare(F5)
GUILD_BUILDING_STONE Pietra fond.
GUILD_BUILDING_TITLE Edificio della Gilda
GUILD_CRYSTAL Cristallo
GUILD_DEPOSIT Numeri
GUILD_DROP_RESOURCE1 qui
GUILD_DROP_RESOURCE2 Far cadere risorse
GUILD_GEM Pietre preziose
GUILD_GRADE_CHANGE_GRADE_NAME Nuovo nome di Rango
GUILD_GRADE_NUM Nr.
GUILD_GRADE_PERMISSION_DELETE Estrometti
GUILD_GRADE_PERMISSION_JOIN Invita
GUILD_GRADE_PERMISSION_NOTICE Scrivi
GUILD_GRADE_PERMISSION_SKILL Abilità
GUILD_GRADE_RANK Rango
GUILD_GRADE_WRITE Scrivi
GUILD_INFO Informazioni della Gilda
GUILD_INFO_CUR_EXP Esperienza
GUILD_INFO_DECALRE_WAR Dichiara guerra
GUILD_INFO_ENEMY_GUILD Gilda nemica
GUILD_INFO_ENEMY_GUILD_EMPTY Nessuno
GUILD_INFO_LEVEL Livello Gilde
GUILD_INFO_MARK Simbolo delle Gilde
GUILD_INFO_MASTER Capo
GUILD_INFO_MASTER_VALUE Capo
GUILD_INFO_MEMBER_AVG_LEVEL Livello medio
GUILD_INFO_MEMBER_NUM Numero di membri
GUILD_INFO_NAME Nome della Gilda
GUILD_INFO_NAME_VALUE Questo è il nome di una Gilda
GUILD_INFO_OFFER_EXP Invest.
GUILD_INFO_REST_EXP Esperienza necessaria
GUILD_INFO_UPLOAD_MARK Carica Stemma
GUILD_INFO_UPLOAD_SYMBOL Carica bandiera
GUILD_MARK Stemma della gilda
GUILD_MEMBER_JOB Classe
GUILD_MEMBER_KNIGHT Capo
GUILD_MEMBER_LEVEL Livello
GUILD_MEMBER_NAME Nome
GUILD_MEMBER_RANK Posizione
GUILD_MEMBER_SPECIFIC_GRAVITY Invest.
GUILD_METIN_STONE Pietra spirituale
GUILD_MINENAL Minerale
GUILD_MONEY Yang
GUILD_NAME Gilda
GUILD_RESOURCE_INFO Informazioni delle risorse
GUILD_SAFE_TITLE Magazzino Gilda
GUILD_SKILL_ACTIVE Attivo
GUILD_SKIlL_HEAL_GSP Ricaricare
GUILD_SKILL_PASSIVE Passivo
GUILD_SKILL_POWER Energia
GUILD_SKILL_STATE Abilità della Gilda
GUILD_SYMBOL Stemma della Gilda
GUILD_WAR_ACCEPT Accettare dichiarazione di guerra
GUILD_WAR_BATTLE_TYPE Tipo di lotta
GUILD_WAR_CTF Bandiera
GUILD_WAR_DECLARE Dichiarare guerra
GUILD_WAR_ENEMY Avversario
GUILD_WAR_NORMAL Campo
GUILD_WAR_WARP Arena
GUILD_WATER Acqua
GUILD_WATER_STONE Pietra acquatica
GUILD_WITHDRAW Prendi
HELP_ATTACK_KEY Attacco: tasto sinistro del mouse o barra spaziatrice
HELP_CHANGE_PK_MODE Cambiare il tipo di attacco: modifica impostazioni del tasto sinistro del mouse
HELP_CHARACTER_BUTTON1 (Finestra del personaggio, finestra dell'inventario,
HELP_CHARACTER_BUTTON2 lista degli amici e opzioni)
HELP_CONTROL_CAMERA_BY_MIDDLEBUTTON Modalità telecamera: tasto centrale o destro del mouse
HELP_CONTROL_CAMERA_BY_RIGHTBUTTON Modalità telecamera: tasto destro o centrale del mouse
HELP_EXP Esperienza
HELP_FURY Item Shop Ingame
HELP_GUILD_WINDOW Aprire la finestra della Gilda: Alt + G
HELP_HELP Mostra aiuto: H
HELP_HP Punti vita (HP)
HELP_MESSENGER_WINDOW Aprire la lista degli amici: Alt + M
HELP_MOUSE_LEFT Funzione del tasto sinistro del mouse
HELP_MOUSE_RIGHT Funzione del tasto destro del mouse
HELP_MOVE_KEY Movimento personaggio: W, S, A, D o tasti freccia
HELP_OPEN_CHARACTER Finestra del personaggio: C
HELP_OPEN_CHAT Aprire la finestra di chat: invio
HELP_OPEN_INVENTORY Aprire la finestra dell'inventario: I
HELP_OPEN_LOG Aprire il protocollo chat (log): L
HELP_OPEN_MINIMAP Aprire la mini-mappa: Shift + M
HELP_OPEN_QUEST Aprire la finestra delle missioni: N
HELP_OPEN_SKILL Aprire la finestra delle abilità: V
HELP_OPEN_WHISPER Aprire la chat privata: shift + invio
HELP_OPEN_ZONEMAP Aprire la mappa grande: M
HELP_PICK_ITEM Raccogliere oggetti: \ o z o il tasto sinistro del mouse
HELP_QUICKSLOT Campi di accesso rapido
HELP_SCREEN_CAPTURE Fare uno screenshot: Stamp o Print (l'immagine sarà salvata nella cartella "Metin2\screenshot")
HELP_SHOW_ALL_NAME Visualizza nome: Alt
HELP_SP Punti Mana (PM)
HELP_SYSTEM_BUTTON Tasti di sistema
INVENTORY_PAGE_BUTTON_TOOLTIP_1 1° Inventario
INVENTORY_PAGE_BUTTON_TOOLTIP_2 2° Inventario
INVENTORY_PAGE_BUTTON_TOOLTIP_3 3° Inventario
INVENTORY_PAGE_BUTTON_TOOLTIP_4 4° Inventario
INVENTORY_TITLE Inventario
ITEM_MALL Item Shop
LOAD_ERROR Il file dati è rovinato. Reinstalla il Client. Clicca ora il tasto ESC.
LOGIN_CONNECT Collegare
LOGIN_CONNECTING Stai per essere collegato al server.
LOGIN_DEFAULT_SERVERADDR Nome del server, Canale 1
LOGIN_EXIT Termina
LOGIN_REGION_TITLE Luogo dove deve essere spedito il conto
LOGIN_SELECT_BUTTON Scegli
LOGIN_SELECT_EXIT Termina
LOGIN_SELECT_OK Ok
LOGIN_SELECT_TITLE Scegli server
MALL_PASSWORD_TITLE Password
MALL_TITLE Magazzino dell'Item Shop
MARKET_TITLE Negozio
MARKLIST_REFRESH Attualizza
MARKLIST_TITLE Registra il logo della Gilda
MESSAGE Questo è un messaggio
MESSENGER_ADD_FRIEND Aggiungi amico
MESSENGER_DELETE_FRIEND Cancella amico
MESSENGER_MOBILE Invia SMS
MESSENGER_OPEN_GUILD Apri la finestra della Gilda
MESSENGER_TITLE Amici
MESSENGER_USE_GUILD_MOVE_SKILL Utilizza l'abitlità di movimento della Gilda
MESSENGER_WHISPER Chat privata
MINIMIZE Minimizza
MOUSEBUTTON_ATTACK Attacca
MOUSEBUTTON_AUTO_ATTACK Attacca automaticamente
MOUSEBUTTON_CAMERA Videocamera
MOUSEBUTTON_SKILL Abilità.
MUSICLIST_TITLE Scelta della musica
NO No
OK Ok
OPTION_ALWAYS_SHOW_NAME Nome
OPTION_ALWAYS_SHOW_NAME_OFF Limitato
OPTION_ALWAYS_SHOW_NAME_ON Sempre
OPTION_BLOCK Blocca
OPTION_BLOCK_EXCHANGE Commercio
OPTION_BLOCK_FRIEND Amici
OPTION_BLOCK_GUILD Gilda
OPTION_BLOCK_PARTY Gruppo
OPTION_BLOCK_PARTY_REQUEST Richiesta
OPTION_BLOCK_WHISPER Chat privata
OPTION_CAMERA_DISTANCE Videocamera
OPTION_CAMERA_DISTANCE_LONG Lontano
OPTION_CAMERA_DISTANCE_SHORT Vicino
OPTION_DELETE_MOBILE_BUTTON Cancella numero di cellulare
OPTION_EFFECT Visualizzatore dei bersagli
OPTION_ENV_EFFECT Ambiente
OPTION_ENV_EFFECT_OFF Off
OPTION_ENV_EFFECT_ON On
OPTION_FOG Nebbia
OPTION_FOG_DENSE Molto
OPTION_FOG_LIGHT Poco
OPTION_FOG_MIDDLE Media
OPTION_INPUT_MOBILE_BUTTON Inserisci il numero di cellulare
OPTION_MOBILE Cellulare
OPTION_MUSIC Musica
OPTION_MUSIC_CHANGE Cambia
OPTION_MUSIC_DEFAULT_THEMA Titolo standard di Metin2
OPTION_NAME_COLOR Colore Nome
OPTION_NAME_COLOR_EMPIRE Nome del regno
OPTION_NAME_COLOR_NORMAL Normale
OPTION_NIGHT_MODE Notte
OPTION_NIGHT_MODE_OFF Off
OPTION_NIGHT_MODE_ON On
OPTION_PVPMODE Modo PvP
OPTION_PVPMODE_FREE Libero
OPTION_PVPMODE_FREE_TOOLTIP Puoi attaccare tutti i giocatori.
OPTION_PVPMODE_GUILD Gilda
OPTION_PVPMODE_GUILD_TOOLTIP Puoi attaccare tutti i giocatori esclusi membri della Gilda.
OPTION_PVPMODE_PEACE Pace
OPTION_PVPMODE_PEACE_TOOLTIP Non puoi attaccare i giocatori del tuo regno.
OPTION_PVPMODE_REVENGE Ostile
OPTION_PVPMODE_REVENGE_TOOLTIP Puoi attaccare solo giocatori con gradi diversi dal tuo.
OPTION_SALESTEXT Nome del negozio
OPTION_SALESTEXT_VIEW_OFF nascondi
OPTION_SALESTEXT_VIEW_ON visualizza
OPTION_SNOW_MODE Nevicata
OPTION_SNOW_MODE_OFF Off
OPTION_SNOW_MODE_ON On
OPTION_SNOW_TEXTURE_MODE Neve
OPTION_SNOW_TEXTURE_MODE_OFF Off
OPTION_SNOW_TEXTURE_MODE_ON On
OPTION_SOUND Effetti
OPTION_TARGET_BOARD Menù bersaglio
OPTION_TARGET_BOARD_NO_VIEW Chiudi
OPTION_TARGET_BOARD_VIEW Visualizza
OPTION_TILING Memoria video
OPTION_TILING_APPLY Usa
OPTION_TILING_CPU CPU
OPTION_TILING_GPU GPU
OPTION_TITLE Opzioni
OPTION_VIEW_CHAT Righe di Chat
OPTION_VIEW_CHAT_OFF nascondi
OPTION_VIEW_CHAT_ON visualizza
PARTY_MEMBER_INFO_NAME Nome dei membri del gruppo
PASSWORD_DESC_1 Digita una password,
PASSWORD_DESC_2 per aprire il magazzino.
PASSWORD_DESC_3 Hai già cambiato la password?
PASSWORD_DESC_4 In caso non l'avessi fatto, la tua password è: "000000".
PASSWORD_DESC_5 Cambia la tua password nel magazzino.
PASSWORD_TITLE Salva-PW
PICK_MONEY_TITLE Dividi
PRIVATE_SHOP_CLOSE_BUTTON Chiudi negozio
PRIVATE_SHOP_NAME Nome del negozio
PRIVATE_SHOP_TITLE Crea un negozio privato
REFINE_COST Costi di miglioramento: 0 Yang
REFINE_INFO Probabilità di successo del miglioramento: 100%
REFINE_MONEY Tassa sul raffinamento
REFINE_SELECT Raffinamento
REFINE_TTILE Miglioramenti
REPORT_VIOLENT_WHISPER
RESTART_HERE Ricomincia qui
RESTART_TOWN Ricomincia nella città.
SAFE_CHANGE_PASSWORD Modifica password
SAFE_TITLE Magazzino
SELECT_ATT_GRADE STR
SELECT_CREATE Crea
SELECT_DELETE Cancella
SELECT_DEX_GRADE DEX
SELECT_EMPIRE_NAME Nome del Regno
SELECT_EXIT Termina
SELECT_HP VIT
SELECT_LEVEL Livello
SELECT_METIN_STONE_TITLE Scegli pietra spirituale
SELECT_NAME Nome
SELECT_NO_GUILD Nessuna Gilda
SELECT_PLAYTIME Tempo gioco (min.)
SELECT_SELECT Start
SELECT_SP INT
SELECT_TITLE Scegli titolo
SHOP_BUY Compra
SHOP_SELL Vendi
SHOP_TITLE Negozio
SKILL_SUPPORT_TITLE Abilità standard
STEP Grado di chiarezza
STEP_SELECT Grado di purezza
STRENGTH Rinforza
STRENGTH_SELECT Livello
SYSTEMOPTION_TITLE Opzioni di sistema
SYSTEM_CHANGE Cambia personaggio
SYSTEM_EXIT Termina gioco
SYSTEM_HELP Aiuto
SYSTEM_LOGOUT Sconnetti
SYSTEM_MALL Item Shop
SYSTEM_OPTION Opzioni di sistema
TASKBAR_CHARACTER Personaggio [C/V/B/N]
TASKBAR_CHAT Finestra di Chat [Invio]
TASKBAR_DISABLE Disattiva
TASKBAR_DRAGON_SOUL Alchimia delle Pietre del drago
TASKBAR_EXPAND Ingrandisci la finestra
TASKBAR_INVENTORY Inventario
TASKBAR_MESSENGER Amici [Alt+M]
TASKBAR_NEXT_QUICKSLOT Prossimo campo di utilizzo veloce [Shift + Numero, Alt]
TASKBAR_PREV_QUICKSLOT Precedente campo di utilizzo veloce [Shift + Numero]
TASKBAR_SYSTEM Opzioni[ESC]
WHISPER_BAN Blocca
WHISPER_NAME Sussurra
WHISPER_REPORT
WHISPER_SEND Invia
YES Sì.
ZONE_MAP Mappa grande
BONUS_PAGE Pagina Bonus
CHANGE_BONUS_TITLE Cambia Bonus
CHANGE_BONUS_SUBTITLE Bonus
CHANGE_BONUS Gira
-
upp.... please help me
-
Hi, i have this bug , how can I solve it?
-
-
-
Hello everyone, I have looked everywhere but could not find the dif which brings the number of books to read to 10, file 34k. Someone has? >.<
-
I followed the lead but after I enter y (freebsd-update upgrade -r 9.3-RELEASE) gives me the following error:
The update metadata is correctly signed, but
failed an integrity check.
Cowardly Refusing to proceed any further.how do I fix?
-
I followed the lead but after I enter y (freebsd-update upgrade -r 9.3-RELEASE) gives me the following error:
The update metadata is correctly signed, but
failed an integrity check.
Cowardly Refusing to proceed any further.how do I fix?
-
Hi, I want to know how to upgrade a VPS with FreeBSD 9.2 to 9.3. Can you tell me the commands? Thank you
-
-
-
-
-
This is a problem of server_Attr part of server.
- 1
-
Hello everyone. it is possible start a timer, internal to the game when you start the process, to reach a function (of course I want to do it in the source)? You might like to do?
Thank you all in advance.
-
Hi, as the title try:
- 3D graphics to create new animations (skill).
You will be rewarded appropriately for the job.
Contact Skype: peppe_fz
Or please contact me via PM -
Hi, I have a problem with the file regen, npc, boss .txt.
If I present in the file listed first, one line (then one mob or group) in the map I find instead three of the same mob or group. Can you tell me what's the problem?This is the content of such boss.txt and find below screen of what's going on
Also in the same map if I do the command / m not appear monsters
m 433 70 10 10 0 0 1200s 100 1 25020
-
Hi guys, could someone tell me where is the source function that manages the Scroll of the Dragon? thanks
-
I use this launcher : http://metin2dev.org/board/index.php?/topic/958-sln-metin2client-with-updated-directx-granny-python-and-more/
how do I fix?
-
Hallo, I have the following problem, if I open a client textures you can clearly see, if I open the second client textures become so:
how do I fix?
-
Hi, I wanted to know in which file is the class LPCHARACTER, I can not find the source.
Thanks.
Full Costume Mount System
in Features & Metin2 Systems
Posted
item_proto sql? Please give me the type, subtype ecc....