Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Plik Uirefine I Ulepszanie Itemków...


Kujoo

Rekomendowane odpowiedzi

Opublikowano

Zamieszczam tu plik uirefne.py:

import app
import net
import player
import item
import ui
import uiToolTip
import mouseModule
import locale
import uiCommon
import constInfo

class RefineDialog(ui.ScriptWindow):

makeSocketSuccessPercentage = ( 100, 33, 20, 15, 10, 5, 0 )
upgradeStoneSuccessPercentage = ( 30, 29, 28, 27, 26, 25, 24, 23, 22 )
upgradeArmorSuccessPercentage = ( 99, 66, 33, 33, 33, 33, 33, 33, 33 )
upgradeAccessorySuccessPercentage = ( 99, 88, 77, 66, 33, 33, 33, 33, 33 )
upgradeSuccessPercentage = ( 99, 66, 33, 33, 33, 33, 33, 33, 33 )

def __init__(self):
	ui.ScriptWindow.__init__(self)
	self.__LoadScript()

	self.scrollItemPos = 0
	self.targetItemPos = 0

def __LoadScript(self):

	self.__LoadQuestionDialog()

	try:
		pyScrLoader = ui.PythonScriptLoader()
		pyScrLoader.LoadScriptFile(self, "uiscript/refinedialog.py")

	except:
		import exception
		exception.Abort("RefineDialog.__LoadScript.LoadObject")

	try:
		self.board = self.GetChild("Board")
		self.titleBar = self.GetChild("TitleBar")
		self.successPercentage = self.GetChild("SuccessPercentage")
		self.GetChild("AcceptButton").SetEvent(self.OpenQuestionDialog)
		self.GetChild("CancelButton").SetEvent(self.Close)
	except:
		import exception
		exception.Abort("RefineDialog.__LoadScript.BindObject")

	## 936 : °ł·® Č®·ü ÇĄ˝Ă ľČÇÔ
	##if 936 == app.GetDefaultCodePage():

	toolTip = uiToolTip.ItemToolTip()
	toolTip.SetParent(self)
	toolTip.SetPosition(15, 38)
	toolTip.SetFollow(FALSE)
	toolTip.Show()
	self.toolTip = toolTip

	self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))

def __del__(self):
	ui.ScriptWindow.__del__(self)

def __LoadQuestionDialog(self):
	self.dlgQuestion = ui.ScriptWindow()

	try:
		pyScrLoader = ui.PythonScriptLoader()
		pyScrLoader.LoadScriptFile(self.dlgQuestion, "uiscript/questiondialog2.py")
	except:
		import exception
		exception.Abort("RefineDialog.__LoadQuestionDialog.LoadScript")

	try:
		GetObject=self.dlgQuestion.GetChild
		GetObject("message1").SetText(locale.REFINE_DESTROY_WARNING)
		GetObject("message2").SetText(locale.REFINE_WARNING2)
		GetObject("accept").SetEvent(ui.__mem_func__(self.Accept))
		GetObject("cancel").SetEvent(ui.__mem_func__(self.dlgQuestion.Hide))
	except:
		import exception
		exception.Abort("SelectCharacterWindow.__LoadQuestionDialog.BindObject")

def Destroy(self):
	self.ClearDictionary()
	self.board = 0
	self.successPercentage = 0
	self.titleBar = 0
	self.toolTip = 0
	self.dlgQuestion = 0

def GetRefineSuccessPercentage(self, scrollSlotIndex, itemSlotIndex):

	if -1 != scrollSlotIndex:
		if player.IsRefineGradeScroll(scrollSlotIndex):
			curGrade = player.GetItemGrade(itemSlotIndex)
			itemIndex = player.GetItemIndex(itemSlotIndex)

			item.SelectItem(itemIndex)
			itemType = item.GetItemType()
			itemSubType = item.GetItemSubType()

			if item.ITEM_TYPE_METIN == itemType:

				if curGrade >= len(self.upgradeStoneSuccessPercentage):
					return 0
				return self.upgradeStoneSuccessPercentage[curGrade]

			elif item.ITEM_TYPE_ARMOR == itemType:

				if item.ARMOR_BODY == itemSubType:
					if curGrade >= len(self.upgradeArmorSuccessPercentage):
						return 0
					return self.upgradeArmorSuccessPercentage[curGrade]
				else:
					if curGrade >= len(self.upgradeAccessorySuccessPercentage):
						return 0
					return self.upgradeAccessorySuccessPercentage[curGrade]

			else:

				if curGrade >= len(self.upgradeSuccessPercentage):
					return 0
				return self.upgradeSuccessPercentage[curGrade]

	for i in xrange(player.METIN_SOCKET_MAX_NUM+1):
		if 0 == player.GetItemMetinSocket(itemSlotIndex, i):
			break

	return self.makeSocketSuccessPercentage[i]

def Open(self, scrollItemPos, targetItemPos):
	self.scrollItemPos = scrollItemPos
	self.targetItemPos = targetItemPos

	percentage = self.GetRefineSuccessPercentage(scrollItemPos, targetItemPos)
	if 0 == 0:
		return
	self.successPercentage.SetText(locale.REFINE_SUCCESS_PROBALITY % (percentage))

	itemIndex = player.GetItemIndex(targetItemPos)
	self.toolTip.ClearToolTip()
	metinSlot = []
	for i in xrange(player.METIN_SOCKET_MAX_NUM):
		metinSlot.append(player.GetItemMetinSocket(targetItemPos, i))
	self.toolTip.AddItemData(itemIndex, metinSlot)

	self.UpdateDialog()
	self.SetTop()
	self.Show()

def UpdateDialog(self):
	newWidth = self.toolTip.GetWidth() + 30
	newHeight = self.toolTip.GetHeight() + 98
	self.board.SetSize(newWidth, newHeight)
	self.titleBar.SetWidth(newWidth-15)
	self.SetSize(newWidth, newHeight)


	(x, y) = self.GetLocalPosition()
	self.SetPosition(x, y)

def OpenQuestionDialog(self):
	percentage = self.GetRefineSuccessPercentage(100, self.targetItemPos)
	if 100 == 100:
		self.Accept()
		return

	self.dlgQuestion.SetTop()
	self.dlgQuestion.Show()

def Accept(self):
	net.SendItemUseToItemPacket(self.scrollItemPos, self.targetItemPos)
	self.Close()

def Close(self):
	self.dlgQuestion.Hide()
	self.Hide()

def OnPressEscapeKey(self):
	self.Close()
	return TRUE

class RefineDialogNew(ui.ScriptWindow):

def __init__(self):
	ui.ScriptWindow.__init__(self)
	self.__Initialize()
	self.isLoaded = FALSE

def __Initialize(self):
	self.dlgQuestion = None
	self.children = []
	self.vnum = 0
	self.targetItemPos = 0
	self.dialogHeight = 0
	self.cost = 0
	self.percentage = 0
	self.type = 0

def __LoadScript(self):

	try:
		pyScrLoader = ui.PythonScriptLoader()
		pyScrLoader.LoadScriptFile(self, "uiscript/refinedialog.py")

	except:
		import exception
		exception.Abort("RefineDialog.__LoadScript.LoadObject")

	try:
		self.board = self.GetChild("Board")
		self.titleBar = self.GetChild("TitleBar")
		self.probText = self.GetChild("SuccessPercentage")
		self.costText = self.GetChild("Cost")
		self.successPercentage = self.GetChild("SuccessPercentage")
		self.GetChild("AcceptButton").SetEvent(self.OpenQuestionDialog)
		self.GetChild("CancelButton").SetEvent(self.CancelRefine)
	except:
		import exception
		exception.Abort("RefineDialog.__LoadScript.BindObject")

	## 936 : °ł·® Č®·ü ÇĄ˝Ă ľČÇÔ
	##if 936 == app.GetDefaultCodePage():

	toolTip = uiToolTip.ItemToolTip()
	toolTip.SetParent(self)
	toolTip.SetFollow(FALSE)
	toolTip.SetPosition(15, 38)
	toolTip.Show()
	self.toolTip = toolTip

	self.slotList = []
	for i in xrange(3):
		slot = self.__MakeSlot()
		slot.SetParent(toolTip)
		slot.SetWindowVerticalAlignCenter()
		self.slotList.append(slot)

	itemImage = self.__MakeItemImage()
	itemImage.SetParent(toolTip)
	itemImage.SetWindowVerticalAlignCenter()
	itemImage.SetPosition(-35, 0)
	self.itemImage = itemImage

	self.titleBar.SetCloseEvent(ui.__mem_func__(self.CancelRefine))
	self.isLoaded = TRUE

def __del__(self):
	ui.ScriptWindow.__del__(self)

def __MakeSlot(self):
	slot = ui.ImageBox()
	slot.LoadImage("d:/ymir work/ui/public/slot_base.sub")
	slot.Show()
	self.children.append(slot)
	return slot

def __MakeItemImage(self):
	itemImage = ui.ImageBox()
	itemImage.Show()
	self.children.append(itemImage)
	return itemImage

def __MakeThinBoard(self):
	thinBoard = ui.ThinBoard()
	thinBoard.SetParent(self)
	thinBoard.Show()
	self.children.append(thinBoard)
	return thinBoard

def Destroy(self):
	self.ClearDictionary()
	self.dlgQuestion = None
	self.board = 0
	self.probText = 0
	self.costText = 0
	self.titleBar = 0
	self.toolTip = 0
	self.successPercentage = None
	self.slotList = []
	self.children = []

def Open(self, targetItemPos, nextGradeItemVnum, cost, prob, type):

	if FALSE == self.isLoaded:
		self.__LoadScript()

	self.__Initialize()

	self.targetItemPos = targetItemPos
	self.vnum = nextGradeItemVnum
	self.cost = cost
	self.percentage = prob
	self.type = type

	self.probText.SetText(locale.REFINE_SUCCESS_PROBALITY % (self.percentage))
	self.costText.SetText(locale.REFINE_COST % (self.cost))

	self.toolTip.ClearToolTip()
	metinSlot = []
	for i in xrange(player.METIN_SOCKET_MAX_NUM):
		metinSlot.append(player.GetItemMetinSocket(targetItemPos, i))

	attrSlot = []
	for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM):
		attrSlot.append(player.GetItemAttribute(targetItemPos, i))
	self.toolTip.AddRefineItemData(nextGradeItemVnum, metinSlot, attrSlot)

	item.SelectItem(nextGradeItemVnum)
	self.itemImage.LoadImage(item.GetIconImageFileName())
	xSlotCount, ySlotCount = item.GetItemSize()
	for slot in self.slotList:
		slot.Hide()
	for i in xrange(min(3, ySlotCount)):
		self.slotList[i].SetPosition(-35, i*32 - (ySlotCount-1)*16)
		self.slotList[i].Show()

	self.dialogHeight = self.toolTip.GetHeight() + 46
	self.UpdateDialog()

	self.SetTop()
	self.Show()

def Close(self):
	self.dlgQuestion = None
	self.Hide()

def AppendMaterial(self, vnum, count):
	self.UpdateDialog()

def UpdateDialog(self):
	newWidth = self.toolTip.GetWidth() + 60
	newHeight = self.dialogHeight + 69

	## 936 : °ł·® Č®·ü ÇĄ˝Ă ľČÇÔ
	##if 936 == app.GetDefaultCodePage():
	newHeight -= 8

	self.board.SetSize(newWidth, newHeight)
	self.toolTip.SetPosition(15 + 35, 38)
	self.titleBar.SetWidth(newWidth-15)
	self.SetSize(newWidth, newHeight)

	(x, y) = self.GetLocalPosition()
	self.SetPosition(x, y)

def OpenQuestionDialog(self):

	if 100 == self.percentage:
		self.Accept()
		return

	if 5 == self.type: ## ą«˝ĹŔÇ ĂŕşąĽ­
		self.Accept()
		return

	dlgQuestion = uiCommon.QuestionDialog2()
	dlgQuestion.SetText2(locale.REFINE_WARNING2)
	dlgQuestion.SetAcceptEvent(ui.__mem_func__(self.Accept))
	dlgQuestion.SetCancelEvent(ui.__mem_func__(dlgQuestion.Close))

	if 3 == self.type: ## Çöö
		dlgQuestion.SetText1(locale.REFINE_DESTROY_WARNING_WITH_BONUS_PERCENT_1)
		dlgQuestion.SetText2(locale.REFINE_DESTROY_WARNING_WITH_BONUS_PERCENT_2)
	elif 2 == self.type: ## ĂŕşąĽ­
		dlgQuestion.SetText1(locale.REFINE_DOWN_GRADE_WARNING)
	else:
		dlgQuestion.SetText1(locale.REFINE_DESTROY_WARNING)

	dlgQuestion.Open()
	self.dlgQuestion = dlgQuestion

def Accept(self):
	net.SendRefinePacket(self.targetItemPos, self.type)
	self.Close()

def CancelRefine(self):
	net.SendRefinePacket(255, 255)
	self.Close()

def OnPressEscapeKey(self):
	self.CancelRefine()
	return TRUE

Plik już trochę edytowałem i raczej jest trochę inny od oryginału (ale nie w tym rzecz).

Mam do was pytanie, czy wie ktoś która komenda jest odpowiedzialna za ulepszanie itemków?

(prawdopodobnie ta:

net.SendRefinePacket(self.targetItemPos, self.type)

ale nie jestem pewien, dlatego się pytam).

Może ktoś z was ma pomysł jak zrobić by się dało ulepszać bez "ulepszaczy" lub zwiększyć szanse na ulepszenie (lub coś podobnego)?

Wszelkie propozycje i pomysły mile widziane ;D Jak będzie trzeba zamieszczę inne pliki.

Pozdro

Jeżeli pomogłem daj + ;]

Zrewanżuję się przy najbliższej okazji.

sygna1p.jpg1398204485.png

Opublikowano

Źle mnie zrozumieliście... Sory

Chodzi mi nie o kowala na moim serwie lecz o kowala na metinie PL oficjalnym ;D

Czy dało by się właśnie zrobić coś takiego na Pl'u by lepiej ulepszał lub bez ulepszaczy?

Jeżeli pomogłem daj + ;]

Zrewanżuję się przy najbliższej okazji.

sygna1p.jpg1398204485.png

Opublikowano

Nikt nie ma pomysłu?? Już doszedłem, że ta funkcja odpowiada za ulepszanie, tylko jak to oszukać? Może jakieś pomysły. Jeszcze mam taka koncepcje aby znaleźć typ ulepszania w dt, bo taki też chyba musi istnieć. To wygląda mniej więcej tak: net.SendRefinePacket(int(pos), int(type)) - pos przyjmę 0 - (1 miejsce w eq); a type jakie mogą być? 0 to zwykły kowal a inne? Może ktoś wie?

Jeżeli pomogłem daj + ;]

Zrewanżuję się przy najbliższej okazji.

sygna1p.jpg1398204485.png

Opublikowano

Do bazy danych Metina PL nie da się wlamac... Haslo jest zmieniane co tydzien wiec jest 0.01% szans ze zlamiesz haslo majac na to TYDZIEN!

"Nigdy nie walcz z debilem... Najpierw zniży cię do swojego poziomu, a potem wygra doświadczeniem..."

ostrysygna.jpg

Metin2PL:

[s2] Wojownik Body - 68lv. - FUN

[s2] Sura Weapon - 66lv. - ON

[s2] Wojownik Body - 35lv. <drop> - ON

Opublikowano

Do bazy zawsze da się włamać, ale trzeba doświadczonego informatyka (hacker'a ^^). Na 100% są na tym świecie ludzie, którzy potrafiliby to zrobić. Można też zrobić (tak jak jest to rozwiązane w hackach), że client wysyła do głównego serwera jakieś impulsy, które dają nam np. szybsze chodzenie itd.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...