Jump to content

DemoroCZ

Premium
  • Posts

    86
  • Joined

  • Last visited

  • Feedback

    0%

Everything posted by DemoroCZ

  1. Hello, first of all, sorry for my english... Please can someone help me with my new function? I don't know where is the problem... I'm C++ noob... My new function (pc.pet_bonus) apply bonus when someone call pet, but just for the moment (+- 1 second)... Function: int pc_pet_bonus(lua_State* L) { BYTE applyOn = static_cast<BYTE>(lua_tonumber(L, 1)); long value = static_cast<long>(lua_tonumber(L, 2)); long duration = static_cast<long>(lua_tonumber(L, 3)); LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); if( NULL != ch ) { ch->RemoveAffect(AFFECT_PET_BONUS); ch->AddAffect(AFFECT_PET_BONUS, aApplyInfo[applyOn].bPointType, value, AFF_NONE, duration, 0, false); } return 0; } Quest: quest pet_system begin state start begin function get_pet_info(itemVnum) pet_info_map = { -- [ITEM VNUM] MOB_VNUM, DEFAULT NAME [53001] = { 34001, gameforge.pet_system._010_say ,0, apply.DEF_GRADE_BONUS, 200}, [53002] = { 34002, gameforge.pet_system._020_say ,0, apply.DEF_GRADE_BONUS, 200}, [53003] = { 34003, gameforge.pet_system._040_say ,0, apply.DEF_GRADE_BONUS, 200}, [53005] = { 34004, gameforge.pet_system._050_say, 1, apply.DEF_GRADE_BONUS, 200}, [53006] = { 34009, gameforge.pet_system._050_say, 1, apply.DEF_GRADE_BONUS, 200}, [53010] = { 34008, gameforge.pet_system._060_say, 0, apply.DEF_GRADE_BONUS, 200}, [53011] = { 34007, gameforge.pet_system._070_say, 0, apply.DEF_GRADE_BONUS, 200}, [53012] = { 34005, gameforge.pet_system._080_say, 0, apply.DEF_GRADE_BONUS, 200}, [53013] = { 34006, gameforge.pet_system._090_say, 0, apply.DEF_GRADE_BONUS, 200}, [53007] = { 34010, gameforge.pet_system._100_say, 0, apply.DEF_GRADE_BONUS, 200}, [53008] = { 34011, gameforge.pet_system._110_say, 0, apply.DEF_GRADE_BONUS, 200}, [53009] = { 34012, gameforge.pet_system._120_say, 0, apply.DEF_GRADE_BONUS, 200}, -- GF specials [38200] = { 34006, gameforge.pet_system._090_say, 0, apply.DEF_GRADE_BONUS, 200}, [38201] = { 34006, gameforge.pet_system._090_say, 0, apply.DEF_GRADE_BONUS, 200}, [53014] = { 34013, gameforge.pet_system._130_say, 0, apply.DEF_GRADE_BONUS, 200}, [53015] = { 34014, gameforge.pet_system._140_say, 0, apply.DEF_GRADE_BONUS, 200}, [53016] = { 34015, gameforge.pet_system._150_say, 0, apply.DEF_GRADE_BONUS, 200}, [53017] = { 34016, gameforge.pet_system._160_say, 0, apply.DEF_GRADE_BONUS, 200}, } itemVnum = tonumber(itemVnum) return pet_info_map[itemVnum] end function get_spawn_effect_file(idx) effect_table = { [0] = nil, [1] = "d:ymir workeffectetcappear_dienpc2_appear.mse", } return effect_table [idx] end when 38200.use or 38201.use or 53007.use or 53013.use or 53012.use or 53011.use or 53010.use or 53006.use or 53005.use or 53002.use or 53001.use or 53003.use or 53008.use or 53009.use or 53014.use or 53015.use or 53016.use or 53017.use begin local pet_info = pet_system.get_pet_info(item.vnum) if null != pet_info then local mobVnum = pet_info[1] local petName = pet_info[2] local spawn_effect_file_name = pet_system.get_spawn_effect_file(pet_info[3]) local bonus_type = pet_system.get_spawn_effect_file(pet_info[4]) local bonus_value = pet_system.get_spawn_effect_file(pet_info[5]) if true == pet.is_summon(mobVnum) then if spawn_effect_file_name != nil then pet.spawn_effect (mobVnum, spawn_effect_file_name) end pet.unsummon(mobVnum) pc.pet_bonus(apply.DEF_GRADE_BONUS,100,14400) else if pet.count_summoned() < 1 then pet.summon(mobVnum, petName, false) pc.pet_bonus(apply.DEF_GRADE_BONUS,100,14400) else syschat(gameforge.pet_system._030_chat) end if spawn_effect_file_name != nil then pet.spawn_effect (mobVnum, spawn_effect_file_name) end end -- if pet.is_summon end -- if null != pet_info end -- when end -- state end -- quest Thanks
  2. Yes, i tried solve it, but unsuccessfully. uiinventory.py: import 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 locale import constInfo import ime 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 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") def __init__(self): ui.ScriptWindow.__init__(self) self.questionDialog = None self.tooltipItem = None self.sellingSlotNumber = -1 self.isLoaded = 0 self.isOpenedCostumeWindowWhenClosingInventory = 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() 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.mallButton = self.GetChild2("MallButton") self.costumeButton = self.GetChild2("CostumeButton") self.inventoryTab = [] self.inventoryTab.append(self.GetChild("Inventory_Tab_01")) self.inventoryTab.append(self.GetChild("Inventory_Tab_02")) 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 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[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)) # 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 = 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.questionDialog = None self.mallButton = None if self.wndCostume: self.wndCostume.Destroy() self.wndCostume = 0 self.inventoryTab = [] self.equipmentTab = [] def Close(self): if None != self.tooltipItem: self.tooltipItem.HideToolTip() if self.wndCostume: self.isOpenedCostumeWindowWhenClosingInventory = self.wndCostume.IsShow() # ŔÎşĄĹ丮 âŔĚ ´ÝČú ¶§ ÄÚ˝şĂőŔĚ ż­·Á ŔÖľú´Â°ˇ? self.wndCostume.Close() self.OnCloseQuestionDialog() self.dlgPickMoney.Close() self.Hide() def SetInventoryPage(self, page): self.inventoryPageIndex = page self.inventoryTab[1-page].SetUp() 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") 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: return self.dlgPickMoney.SetTitleName(locale.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): return local return 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) if itemCount <= 1: 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() 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) 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(locale.NumberToMoneyString(money)) def SetItemToolTip(self, tooltipItem): self.tooltipItem = tooltipItem def SellItem(self): net.SendShopSellPacketNew(self.sellingSlotNumber, self.questionDialog.count) 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 self.questionDialog: self.questionDialog.Close() self.questionDialog = None ## Slot Event def SelectEmptySlot(self, selectedSlotPos): if constInfo.GET_ITEM_DROP_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_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_DROP_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, locale.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(locale.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, locale.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.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) item.SelectItem(itemIndex) 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(locale.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 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, locale.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, locale.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, locale.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, locale.REFINE_FAILURE_UPGRADE_DISABLE_ITEM) elif player.REFINE_CANT_REFINE_METIN_TO_EQUIPMENT == result: chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_EQUIP_ITEM) if player.REFINE_OK != result: return self.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, locale.REFINE_FAILURE_METIN_INSEPARABLE_ITEM) return self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText(locale.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, locale.REFINE_FAILURE_CAN_NOT_ATTACH(itemName)) if player.ATTACH_METIN_NO_MATCHABLE_SOCKET == result: chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_SOCKET(itemName)) elif player.ATTACH_METIN_NOT_EXIST_GOLD_SOCKET == result: chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_GOLD_SOCKET(itemName)) elif player.ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT == result: chat.AppendChat(chat.CHAT_TYPE_INFO, locale.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.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.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; 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): if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS(): return slotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(slotIndex) self.__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(locale.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 else: self.__SendUseItemPacket(slotIndex) #net.SendItemUsePacket(slotIndex) def __UseItemQuestionDialog_OnCancel(self): self.OnCloseQuestionDialog() def __UseItemQuestionDialog_OnAccept(self): self.__SendUseItemPacket(self.questionDialog.slotIndex) if self.questionDialog: self.questionDialog.Close() self.questionDialog = None def __SendUseItemToItemPacket(self, srcSlotPos, dstSlotPos): # °łŔλóÁˇ ż­°í ŔÖ´Â µżľČ ľĆŔĚĹŰ »çżë ąćÁö if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, locale.USE_ITEM_FAILURE_PRIVATE_SHOP) return net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos) def __SendUseItemPacket(self, slotPos): # °łŔλóÁˇ ż­°í ŔÖ´Â µżľČ ľĆŔĚĹŰ »çżë ąćÁö if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, locale.USE_ITEM_FAILURE_PRIVATE_SHOP) return net.SendItemUsePacket(slotPos) def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount): # °łŔλóÁˇ ż­°í ŔÖ´Â µżľČ ľĆŔĚĹŰ »çżë ąćÁö if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, locale.MOVE_ITEM_FAILURE_PRIVATE_SHOP) return net.SendItemMovePacket(srcSlotPos, dstSlotPos, srcItemCount) Thanks.
  3. Hello, i have problem with my client binary (novaline). Client freeze after loading... Please can someone help me? Thanks syserr: 1006 16:40:00022 :: import marshal # builtin 1006 16:40:00022 :: import imp # builtin 1006 16:40:00046 :: ui.py: inconsistent use of tabs and spaces in indentation 1006 16:40:00076 :: import _weakref # builtin 1006 16:40:00628 :: # trying .os.pyd 1006 16:40:00628 :: # trying .os.py 1006 16:40:00628 :: # trying .os.pyw 1006 16:40:00628 :: # trying .os.pyc 1006 16:40:00628 :: # trying libos.pyd 1006 16:40:00628 :: # trying libos.py 1006 16:40:00628 :: # libos.pyc has bad magic 1006 16:40:00633 :: import os # from libos.py 1006 16:40:00633 :: import nt # builtin 1006 16:40:00633 :: # trying .ntpath.pyd 1006 16:40:00633 :: # trying .ntpath.py 1006 16:40:00633 :: # trying .ntpath.pyw 1006 16:40:00633 :: # trying .ntpath.pyc 1006 16:40:00634 :: # trying libntpath.pyd 1006 16:40:00634 :: # trying libntpath.py 1006 16:40:00634 :: # libntpath.pyc has bad magic 1006 16:40:00637 :: import ntpath # from libntpath.py 1006 16:40:00637 :: # trying .stat.pyd 1006 16:40:00637 :: # trying .stat.py 1006 16:40:00637 :: # trying .stat.pyw 1006 16:40:00638 :: # trying .stat.pyc 1006 16:40:00638 :: # trying libstat.pyd 1006 16:40:00638 :: # trying libstat.py 1006 16:40:00638 :: # libstat.pyc has bad magic 1006 16:40:00639 :: import stat # from libstat.py 1006 16:40:00639 :: # trying .UserDict.pyd 1006 16:40:00639 :: # trying .UserDict.py 1006 16:40:00639 :: # trying .UserDict.pyw 1006 16:40:00639 :: # trying .UserDict.pyc 1006 16:40:00639 :: # trying libUserDict.pyd 1006 16:40:00639 :: # trying libUserDict.py 1006 16:40:00640 :: # libUserDict.pyc has bad magic 1006 16:40:00641 :: import UserDict # from libUserDict.py 1006 16:40:00641 :: # trying .copy_reg.pyd 1006 16:40:00641 :: # trying .copy_reg.py 1006 16:40:00641 :: # trying .copy_reg.pyw 1006 16:40:00641 :: # trying .copy_reg.pyc 1006 16:40:00641 :: # trying libcopy_reg.pyd 1006 16:40:00641 :: # trying libcopy_reg.py 1006 16:40:00642 :: # libcopy_reg.pyc has bad magic 1006 16:40:00642 :: import copy_reg # from libcopy_reg.py 1006 16:40:00642 :: # trying .types.pyd 1006 16:40:00642 :: # trying .types.py 1006 16:40:00642 :: # trying .types.pyw 1006 16:40:00643 :: # trying .types.pyc 1006 16:40:00643 :: # trying libtypes.pyd 1006 16:40:00643 :: # trying libtypes.py 1006 16:40:00643 :: # libtypes.pyc has bad magic 1006 16:40:00644 :: import types # from libtypes.py 1006 16:40:00644 :: # trying .__future__.pyd 1006 16:40:00644 :: # trying .__future__.py 1006 16:40:00644 :: # trying .__future__.pyw 1006 16:40:00644 :: # trying .__future__.pyc 1006 16:40:00644 :: # trying lib__future__.pyd 1006 16:40:00644 :: # trying lib__future__.py 1006 16:40:00645 :: # lib__future__.pyc has bad magic 1006 16:40:00645 :: import __future__ # from lib__future__.py 1006 16:40:00646 :: import errno # builtin 1006 16:40:00681 :: import time # builtin 1006 16:40:08187 :: import math # builtin 1006 16:40:08247 :: uiTaskBar.py: inconsistent use of tabs and spaces in indentation 1006 16:40:08271 :: uiDragonSoul.py: inconsistent use of tabs and spaces in indentation 1006 16:40:08309 :: uiSystem.py: inconsistent use of tabs and spaces in indentation 1006 16:40:08359 :: uiQuest.py: inconsistent use of tabs and spaces in indentation 1006 16:41:16375 :: CPythonPlayer::SetItemData(window_type : 1, dwSlotIndex=10, itemIndex=9991) - Failed to item data 1006 16:41:20887 :: game.py: inconsistent use of tabs and spaces in indentation 1006 16:41:20985 :: Traceback (most recent call last): 1006 16:41:20985 :: File "networkModule.py", line 239, in SetGamePhase 1006 16:41:20986 :: File "game.py", line 105, in __init__ 1006 16:41:20986 :: File "interfaceModule.py", line 287, in MakeInterface 1006 16:41:20986 :: File "interfaceModule.py", line 171, in __MakeWindows 1006 16:41:20986 :: File "uiInventory.py", line 253, in __init__ 1006 16:41:20986 :: File "uiInventory.py", line 386, in __LoadWindow 1006 16:41:20986 :: File "uiInventory.py", line 452, in SetInventoryPage 1006 16:41:20987 :: File "uiInventory.py", line 524, in RefreshBagSlotWindow 1006 16:41:20987 :: File "uiInventory.py", line 513, in __InventoryLocalSlotPosToGlobalSlotPos 1006 16:41:20987 :: AttributeError 1006 16:41:20987 :: : 1006 16:41:20987 :: 'module' object has no attribute 'IsBeltInventorySlot' 1006 16:41:20987 :: 1006 16:41:28841 :: # clear __builtin__._ 1006 16:41:28841 :: # clear sys.path 1006 16:41:28841 :: # clear sys.argv 1006 16:41:28841 :: # clear sys.ps1 1006 16:41:28841 :: # clear sys.ps2 1006 16:41:28841 :: # clear sys.exitfunc 1006 16:41:28841 :: # clear sys.exc_type 1006 16:41:28841 :: # clear sys.exc_value 1006 16:41:28841 :: # clear sys.exc_traceback 1006 16:41:28841 :: # clear sys.last_type 1006 16:41:28841 :: # clear sys.last_value 1006 16:41:28841 :: # clear sys.last_traceback 1006 16:41:28841 :: # clear sys.path_hooks 1006 16:41:28841 :: # clear sys.path_importer_cache 1006 16:41:28841 :: # clear sys.meta_path 1006 16:41:28841 :: # clear sys.flags 1006 16:41:28841 :: # clear sys.float_info 1006 16:41:28841 :: # restore sys.stdin 1006 16:41:28841 :: # restore sys.stdout 1006 16:41:28841 :: # restore sys.stderr
  4. Hello, finally i found something about in syserr about DC, but still i can't solve this problem... Maybe it help with solving this problem..
  5. Původně jsem to měl na CH1, potom jsem na test. serveru smazal všechny mapy z CH99 a hodil tam jen katakomby, ale nepomohlo..
  6. I'm sure with syserr, there is nothing about DC. I've DC on CH99, on CH99 is only DC, nothing else. Only core (CH99) crash when everyone warp from DC. But i found one interesing thing - when i kill Azrael in another floor, quest works without problems - someone kill Azrael, everyone warp from DC, and everything works fine - nothing crash. Thanks, and sorry for my english.
  7. Díky, zkusim. Pořád nefunguje.. Ale všiml jsem si že to jádro nespadne hned po zabití azraela, ale až po portu z katakomb.
  8. Hello, I'm trying solve problem with Devil's catacomb for few hours, but i can't find solution... When someone kill Azrael in last floor in Devil's catacomb, core will crash. In syserr isn't anything about Devil's catacomb (map or quest). Please can someone help me? Sorry for my english, and thanks. Quest: quest devilscatacomb begin state start begin function getLevelByCord() if pc.get_local_x() > 30 and pc.get_local_y() > 45 and pc.get_local_x() < 450 and pc.get_local_y() < 450 then return 1 elseif pc.get_local_x() > 540 and pc.get_local_y() > 39 and pc.get_local_x() < 1000 and pc.get_local_y() < 462 then return 2 elseif pc.get_local_x() > 1048 and pc.get_local_y() > 35 and pc.get_local_x() < 1455 and pc.get_local_y() < 458 then return 3 elseif pc.get_local_x() > 31 and pc.get_local_y() > 541 and pc.get_local_x() < 564 and pc.get_local_y() < 1058 then return 4 elseif pc.get_local_x() > 650 and pc.get_local_y() > 540 and pc.get_local_x() < 1050 and pc.get_local_y() < 955 then return 5 elseif pc.get_local_x() > 1175 and pc.get_local_y() > 576 and pc.get_local_x() < 1420 and pc.get_local_y() < 810 then return 6 else return 0 end end function isInCatacomb() if pc.get_map_index() >= (213 * 10000) and pc.get_map_index() < (214 * 10000) and pc.in_dungeon() then return true else return false end end function get3FloorStonePositions() local positions = { {1365, 352}, {1349, 150}, {1133, 167}, {1151, 364}, {1234, 136}, {1255, 371}, {1132, 245}, } for i = 1, 6 do local j = number(i, 7) if i != j then local t = positions[i]; positions[i] = positions[j]; positions[j] = t; end end return positions end function getTimeLeft() local secondsLeft = (d.getf("time") - get_time()) local minutesLeft = math.ceil(secondsLeft / 60) d.notice("Zbývá "..minutesLeft.." minut.") end when logout begin pc.remove_item(30311, pc.count_item(30311)) pc.remove_item(30312, pc.count_item(30312)) pc.remove_item(30313, pc.count_item(30313)) end when login begin if pc.get_map_index() == 213 then if devilscatacomb.getLevelByCord() > 1 or not next_time_is_now() then pc.warp((5913)*100, (993)*100, 65) -- 5913x993 591374x end pc.set_warp_location(65, 5913, 993) say("V první úrovni musí vaše skupina získat Klíč krystalu duše.") say("Až klíč Krystalu duše získáte, musíte najít sochu Kud, a použít") say("klíč na sochu Kud.") say("Poté bude vaše skupina přesunuta do další úrovně. ") say("") say_item_vnum(30311) say("") elseif pc.get_map_index() >= (213 * 10000) and pc.get_map_index() <= (214 * 10000) then pc.set_warp_location(65, 5913, 993) end end when 20367.chat." Ďáblova katakomba" begin --Enter the Devil Catacomb if pc.get_level() < 75 then say_title(mob_name(npc.get_race()) ..":") say("Chceš vstoupit do Ďáblovi katakomby?") say("") say("Jestli chceš vstoupit, tak musíš ") say("mít aspoň úroveň 75.") say("Vrať se, až budeš mít úroveň 75.") else say_title(mob_name(npc.get_race()) ..":") say("Chceš vstoupit do Ďáblovi katakomby?") say("") say("Mohu tě teleportovat, ale ") say("chci tě varovat: Už vstoupili mnoho bojovníků, ") say("a ne všichni se vrátili!") say("") say("Chceš teleportovat?") say("") local s = select("Ano","Ne") if s == 2 then return elseif s == 1 then pc.warp(415300, 4209200) end end end when kill with pc.get_map_index() == 213 and pc.countitem(30311) < 1 begin local rnd = number(1, 100) if rnd == 6 then game.drop_item_with_ownership(30311, 1) end end when 30101.take with item.vnum == 30311 begin --Teleport to 2nd Stage with the passenger ticket if party.is_party() then if party.is_leader() then say("Portál byl otevřen.") say("Můžete rychle projít!") wait() say("Toto je místo, kde začíná dobrodružství! Máte jen") say("jednu hodinu na prozkoumání Ďáblovo katakomby.") item.remove() sys_log(0, "DC create try by "..pc.get_name()) d.join(213) else say("Musíš být vůdce skupiny.") end else say("Bez skupiny nesmíš vstoupit.") end end when login with devilscatacomb.isInCatacomb() begin say("Ujisťete se, že všichni členové vaší skupiny") say("mají Vysušenou hlavu: ") say_item_vnum(30319) say("Vysušené hlavy si schovává Modrá smrt z Věže démonů. ") say("Pokud máte Vysušené hlavy, musíte najít cestu do středu") say("úrovně, rozbíjet brány co vám stojí v cestě, a najít Želví skálu.") say("Na prozkoumání celé katakomby máte 60 minut.") d.spawn_mob(30103, 740, 227) loop_timer("item_check", 10) if party.is_leader() then d.set_regen_file("data/dungeon/dc/dc_regen1.txt") d.regen_file("data/dungeon/dc/dc_doors.txt") d.setf("level", 2) server_timer("runtime", 6, pc.get_map_index()) elseif pc.is_gm() and not party.is_party() then d.set_regen_file("data/dungeon/dc/dc_regen1.txt") d.regen_file("data/dungeon/dc/dc_doors.txt") d.setf("level", 2) server_timer("runtime", 6, pc.get_map_index()) end end when item_check.timer with d.getf("level") == 3 begin if pc.countitem(30319) >= 1 then say("Máte vysušenou hlavu, budete teleportováni ") say("do 3. úrovně katakomby.") pc.remove_item(30319, 1) timer("item_check_end", 2) else d.exit_all() end end when item_check_end.timer begin cleartimer("item_check") end when runtime.server_timer begin if d.select(get_server_timer_arg()) then d.setf("time", get_time()+60*60*1) devilscatacomb.getTimeLeft() server_timer("runtime_end", 60*60, get_server_timer_arg()) end end when runtime_end.server_timer begin if d.select(get_server_timer_arg()) then d.notice(" Čas vypršel.") d.exit_all() end end when 30103.click with devilscatacomb.isInCatacomb() and devilscatacomb.getLevelByCord() == 2 and npc.lock() begin say("Vypadá to, že na kameni je několik") say("míst do kterých by šla vložit vysušená hlava.") wait() say("Na kameni je vytesáno:") say_reward("Tento starý kámen je magický. ") say_reward("Při vložení vysušené hlavy od každého ") say_reward(" člena skupiny, tento starý kámen přenese ") say_reward("celou skupinu hlouběji do katakomby.") say_reward("Avšak každý člen musí svou vysušenou hlavu vložit ") say_reward("do kamene sám.") say("") wait() local s = select("Všichni členové, vložte hlavy!", "Zatím ne.") if s == 2 then return elseif s == 1 then if pc.count_item(30319) >= 1 then npc.purge() d.setf("level", 3) d.purge() d.clear_regen() timer("dc_jump_3", 6) else say("Všichni členové skupiny nemají vysušenou hlavu, ") say("budete teleportováni ...") pc.warp(591374, 99325, 65) end end end when dc_jump_3.timer begin d.set_regen_file("data/dungeon/dc/dc_regen2.txt") d.notice("Na této úrovni musíte najít správný Balvan Naděje!") devilscatacomb.getTimeLeft() d.jump_all(5451, 42282) local positions = devilscatacomb.get3FloorStonePositions() for i = 1, 6 do d.set_unique("fake" .. i , d.spawn_mob(8037, positions[i][1], positions[i][2])) end d.set_unique("real", d.spawn_mob(8037, positions[7][1], positions[7][2])) server_loop_timer('dc_stone3_update', 10, pc.get_map_index()) end when dc_stone3_update.server_timer begin if d.select(get_server_timer_arg()) then if not d.is_unique_dead("real") then for i = 1, 6 do if d.getf("fakedead" .. i) == 0 then if d.unique_get_hp_perc("fake" .. i) < 30 then if not d.is_unique_dead("fake" .. i) then d.purge_unique("fake" .. i) end d.setf("fakedead" .. i, 1) d.notice("Tento balvan je falešný, hledejte dál!"); end end end else server_timer("dc_stone_end3", 5, get_server_timer_arg()) d.notice("Skupina našla správný balvan, budete teleportování dále.") end else server_timer('dc_stone3_stop_timer', 1, get_server_timer_arg()) end end when dc_stone3_stop_timer.server_timer begin clear_server_timer('dc_stone3_update', get_server_timer_arg()) end when dc_stone_end3.server_timer begin if d.select(get_server_timer_arg()) then clear_server_timer('dc_stone3_update', get_server_timer_arg()) d.setf("level", 4) d.jump_all(4347, 42810) d.clear_regen() d.set_regen_file("data/dungeon/dc/dc_regen3.txt") d.regen_file("data/dungeon/dc/dc_warps.txt") d.spawn_mob(30104, 500, 716) end end when 30104.click with devilscatacomb.isInCatacomb() and devilscatacomb.getLevelByCord() == 4 and npc.lock() begin npc.purge() say_in_map(pc.get_map_index(),"Dokázali jste to! [ENTER] Toto vypadá jako výstup z bludiště! [ENTER] Budete přesunuti do 5. patra.") server_timer("dc4_enter", 6, pc.get_map_index()) end when dc4_enter.server_timer begin if d.select(get_server_timer_arg()) then d.jump_all(4918, 42939) d.set_regen_file("data/dungeon/dc/dc_regen4.txt") d.spawn_mob(30102, 848, 739) local mob_pos = { {1006, 649}, {979, 829}, {691, 822}, {714, 653}, {848, 593} } local rnd = number(1, 5) d.spawn_mob(2591, mob_pos[rnd][1], mob_pos[rnd][2]) server_timer("dc4_message", 3, get_server_timer_arg()) end end when dc4_message.server_timer begin if d.select(get_server_timer_arg()) then d.notice("Na této úrovni musíte najít Šklebící se totem. Schovává ho u sebe Král Azachiel.") devilscatacomb.getTimeLeft() end end when 30102.take with item.vnum == 30312 begin say("Našli jste Šklebící se totem.") say("Budete přesunuti na další úroveň!") say("") wait() say("Dobrá práce!") item.remove() npc.purge() d.clear_regen() timer("dc_level_5", 6) end when dc_level_5.timer begin d.jump_all(5312, 42799) timer("dc_level_5_start", 5) end when dc_level_5_start.timer begin d.setf("level", 5) d.notice("Poražte Charona!") devilscatacomb.getTimeLeft() d.regen_file("data/dungeon/dc/dc_regen5.txt") d.spawn_mob(2597, 1301, 699) end when kill begin if devilscatacomb.isInCatacomb() then if npc.race == 2597 then if d.count_monster() < 1000 then d.setf("level", 6) d.clear_regen() timer("dc_level_5_end", 12) else if d.getf("charon_spawns") < 4 then d.spawn_mob(2597, 1301, 699) d.setf("charon_spawns", d.getf("charon_spawns") + 1) else d.notice("Bohužel se vám nepodařilo zabít Charona.") d.notice("Budete teleportováni.") local nextTime=get_time()+time_min_to_sec(1) d.setqf("__NEXT_TIME__", nextTime) d.exit_all() end end end if npc.race == 2591 then game.drop_item_with_ownership(30312, 1) end end end when 2598.kill with pc.in_dungeon() begin clear_server_timer("runtime", get_server_timer_arg()) clear_server_timer("runtime_end", get_server_timer_arg()) notice_all("Skupina hráče "..pc.get_name().." zabila Azraela!") local text = "Azrael byl poražen. Za 60 sekund budete teleportováni." --d.spawn_mob(9012, 74, 1159) say_in_map(pc.get_map_index(), text) timer("glory_message", 60) end when dc_level_5_end.timer begin d.setf("level", 6) say_in_map(pc.get_map_index(),"Podařilo se vám zabít Charona.[ENTER]Budete teleportování na poslední úroveň katakomby.") timer("dc_level_6", 3) end when dc_level_6.timer begin d.jump_all(4145, 43187) timer("dc_level_6_into", 3) end when dc_level_6_into.timer begin d.regen_file("data/dungeon/dc/dc_regen6.txt") d.spawn_mob(2598, 74, 1103) d.notice("Poražte Azraela!") end when glory_message.timer begin --local text = "Azrael byl poražen. Můžete se teleportovat." --d.spawn_mob(9012, 74, 1159) --say_in_map(pc.get_map_index(), text) local nextTime=get_time()+time_min_to_sec(1) d.setqf("__NEXT_TIME__", nextTime) d.exit_all() --timer("dc_end", 60) end when dc_end.timer begin local nextTime=get_time()+time_min_to_sec(1) d.setqf("__NEXT_TIME__", nextTime) d.exit_all() return end end end
  9. Thanks, but i need block only warp using warp-scroll, this quest will warp player everytime when he login (relog, respawn in town, warp by NPC) Again, sorry for my english, and thanks.
  10. Thanks Is there solution for rev. 2089? I'm planning 40k core for my root server, but i need block warp scrolls quickly on some maps. Preparing 40k core takes weeks/months... Thanks, and sorry for my english.
  11. Hello, please how to block warp-scroll without quest (like watery cave for example). Thanks, and sorry for my english.
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.