5 mesaje
Administrator Administrator
  • Mesaje: 4244
  • Reacții: 82863
  • Mesaje utile: 44
  • Status: Pe aici.. 🤠
  • Server: Saga2 - Soon
  • Regat: Jinno
  • [ID Discord]
  • Contact:
    *Descriere:

    Un sistem pentru drop la bossi Metin2:

    - Atunci cand omori un boss iti va aparea fereastra de mai jos de unde poti alege un premiu
    - Vei primi un premiu aleatoriu, in functie de ce alegere ai facut.

    Testat - Perfect functional. Am adaugat mai jos ce lipseste din tutorial:

    In ItemManager.h cauta:
    Code:
    		bool			ReadSpecialDropItemFile(const char * c_pszFileName, bool isReloading = false);
    Adauga:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Structura special_card_reward.txt (Exemplu):
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    *Poze / Video (obligatoriu):
    [C++/Py] System Alege Premiu (Boss Card Reward) - Mesaj 1 - Imagine 1
    *Link download:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.

    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.

    Nou Cum descarc de pe TeraBox?

    Afișează detalii Ascunde detalii
    • Este asemănător cu Mega.nz
    • Instalați-vă clientul lor de Download de aici
    • Faceți-vă un cont (vă puteți loga cu Facebook / Google / etc)
    • Nou Dacă nu vreți să descărcați clientul de Download, folosiți acest site
    • Gata! Acum puteți descărca resursele rapid & simplu.

    De ce folosim TeraBox?

    • Este gratuit
    • Primești 1TB de spațiu gratuit la orice cont creat!
    • Este ușor de folosit și varianta premium este foarte ieftină
    • Fișierele nu sunt șterse niciodată
    TeraBox logo
    Te asteptam si pe serverul de Discord :p - aici ne-am strans toata comunitatea de Metin2 din Romania.
    Link: https://discord.gg/jWxeDSf7HP

    Suntem aproape 2000 membri! - Avem chat activ zilnic, support, cereri, resurse. :D :ymcowboy:




    See full signature

    🔥 Hai pe Discord! - Chat activ și support direct

    Te așteptăm și pe serverul de Discord - aici ne-am strâns toată comunitatea de Metin2 din România.

    Alătură-te acum!
    Suntem aproape: 
    Robot Discord
    Roboțelu'
    Anunț
    Membru Începător Membru Începător
  • Mesaje: 4
  • Reacții: 11
  • Mesaje utile: 0
  • Medalii

    Avatar utilizator
    Membru Începător
    Membru Începător

    Mesaj de Adrian16hz »

    ce structura trebuie sa contina fisierul .txt?

    edit: testat si functional!

    [C++/Py] System Alege Premiu (Boss Card Reward) - Mesaj 2 - Imagine 1
    [C++/Py] System Alege Premiu (Boss Card Reward) - Mesaj 2 - Imagine 2
    Administrator Administrator
  • Mesaje: 4244
  • Reacții: 82863
  • Mesaje utile: 44
  • Status: Pe aici.. 🤠
  • Server: Saga2 - Soon
  • Regat: Jinno
  • [ID Discord]
  • Contact:
    Avatar utilizator
    Administrator
    Administrator

    Mesaj de [HF]White »

    Adrian16hz scrie: 25 Mar 2026, 22:06 ce structura trebuie sa contina fisierul .txt?
    Cum ai facut pana la urma structura?

    Edit: Am adaugat si eu sistemul - este perfect functional.
    [C++/Py] System Alege Premiu (Boss Card Reward) - Mesaj 3 - Imagine 1

    Am adaugat in topic ce lipseste + structura de la special_card_reward.txt:
    Code:
    goblin
    {
        mob    101
    
        1      30001 1
        2      30002 2
        3      30003 5
        4      19     1
    }
    
    orc_general
    {
        mob    115
    
        1      30010 1
        2      30011 1
        3      30012 3
    }
    
    devil_boss
    {
        mob    2493
    
        1      50001 1
        2      50002 2
        3      50003 3
        4      50004 1
        5      50005 1
    }
    Te asteptam si pe serverul de Discord :p - aici ne-am strans toata comunitatea de Metin2 din Romania.
    Link: https://discord.gg/jWxeDSf7HP

    Suntem aproape 2000 membri! - Avem chat activ zilnic, support, cereri, resurse. :D :ymcowboy:




    See full signature
    Membru Începător Membru Începător
  • Mesaje: 4
  • Reacții: 11
  • Mesaje utile: 0
  • Medalii

    Avatar utilizator
    Membru Începător
    Membru Începător

    Mesaj de Adrian16hz »

    [HF]White scrie:
    Adrian16hz scrie: 25 Mar 2026, 22:06 ce structura trebuie sa contina fisierul .txt?
    Cum ai facut pana la urma structura?

    Edit: Am adaugat si eu sistemul - este perfect functional.

    03-27-2026, 15-05-15.png


    Am adaugat in topic ce lipseste + structura de la special_card_reward.txt:
    Code:
    goblin
    {
        mob    101
    
        1      30001 1
        2      30002 2
        3      30003 5
        4      19     1
    }
    
    orc_general
    {
        mob    115
    
        1      30010 1
        2      30011 1
        3      30012 3
    }
    
    devil_boss
    {
        mob    2493
    
        1      50001 1
        2      50002 2
        3      50003 3
        4      50004 1
        5      50005 1
    }
    am copiat structura de la special_item_group si am inlocuit Vnum cu mob. Tot odata am adaptat in sursa game sa fie functional indiferent daca este mob sau Mob cu litera mare. in python, am rectificat ca avea indexarea incorecta. Adica Codul încerca să calculeze poziția sloturilor de recompense folosind un multiplicator gresit. In loc sa folosească un index simplu, el făcea un calcul de tipul i * slot_width, dar variabila i nu era resetata...


    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    asta-i fisierul modificat de catre mine. Am pus pentru mine, un mesaj tip debug pentru a vedea daca sunt probleme la afisarea itemelor si am scos de asemenea si acel text de deasupra cartilor. Am considerat ca devenea repetitiv si enervant in timp. Si de asemenea am adaugat fisierele .tga in etc. am considerat ca este mai bine sa le am acolo decat sa umplu constant root cu tot felul de lucruri.

    Code:
    import ui
    import net
    import grp
    import wndMgr
    import item
    import uiToolTip
    import dbg
    
    COLOR_BG = grp.GenerateColor(0.0, 0.0, 0.0, 0.0)
    POSITIONS = [-200, 0, 200]
    
    PHASE_OPENING = 1
    PHASE_OPEN = 2
    PHASE_CLOSE = 3
    
    TEST_IMAGES = [0, 0, 0]
    
    class SpecialImage(ui.Window):
    	def __init__(self):
    		ui.Window.__init__(self)
    		self.SetSize(32, 96)
    		self.itemImage = ui.ImageBox()
    		self.itemImage.SetParent(self)
    		self.itemImage.Show()
    		self.itemToolTip = uiToolTip.ItemToolTip()
    		self.Show()
    
    	def __del__(self):
    		ui.Window.__del__(self)
    
    	def LoadItem(self, itemVnum):
    		try:
    			item.SelectItem(int(itemVnum))
    			self.itemToolTip.ClearToolTip()
    			self.itemToolTip.SetItemToolTip(int(itemVnum))
    			self.itemToolTip.HideToolTip()
    			self.itemImage.LoadImage(item.GetIconImageFileName())
    			self.SetSize(self.itemImage.GetWidth(), self.itemImage.GetHeight())
    		except:
    			dbg.TraceError("SpecialCard: Eroare la incarcarea itemului %d" % itemVnum)
    
    	def OnUpdate(self):
    		if self.itemImage.IsIn():
    			self.itemToolTip.ShowToolTip()
    		else:
    			self.itemToolTip.HideToolTip()
    
    class SpecialCardReward(ui.Bar):
    	def __init__(self):
    		ui.Bar.__init__(self, "TOP_MOST")
    		self.WindowPhase = 0
    		self.BackgroundAlpha = 0.0
    		self.ImagesAlpha = 0.0
    		self.CoverAlpha = [1.0, 1.0, 1.0]
    		self.BackgroundCards = []
    		self.CoverCards = []
    		self.CardButtons = []
    		self.ItemImages = []
    		self.ItemIndex = 0
    		self.Selected = False
    		self.SelectedID = 0
    		self.ShowOther = False
    		self.BuildWindow()
    
    	def __del__(self):
    		ui.Bar.__del__(self)
    
    	def BuildWindow(self):
    		self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight())
    		self.SetColor(COLOR_BG)
    
    		for x in xrange(3):
    			bgCard = ui.ExpandedImageBox()
    			bgCard.SetParent(self)
    			try:
    				bgCard.LoadImage("d:/ymir work/ui/new_gui/special_cards/background_card.tga")
    			except:
    				dbg.TraceError("SpecialCard: Lipseste background_card.tga")
    			bgCard.SetWindowHorizontalAlignCenter()
    			bgCard.SetWindowVerticalAlignCenter()
    			bgCard.SetPosition(POSITIONS[x], 20)
    			bgCard.Hide()
    			self.BackgroundCards.append(bgCard)
    
    			coverCard = ui.ExpandedImageBox()
    			coverCard.SetParent(self)
    			try:
    				coverCard.LoadImage("d:/ymir work/ui/new_gui/special_cards/card_01.tga")
    			except:
    				pass
    			coverCard.SetWindowHorizontalAlignCenter()
    			coverCard.SetWindowVerticalAlignCenter()
    			coverCard.SetPosition(POSITIONS[x], 20)
    			coverCard.SetAlpha(0.0)
    			coverCard.Show()
    			self.CoverCards.append(coverCard)
    
    			cardButton = ui.Button()
    			cardButton.SetParent(self)
    			cardButton.SetUpVisual("d:/ymir work/ui/new_gui/special_cards/card_01.tga")
    			cardButton.SetOverVisual("d:/ymir work/ui/new_gui/special_cards/card_02.tga")
    			cardButton.SetDownVisual("d:/ymir work/ui/new_gui/special_cards/card_02.tga")
    			cardButton.SetWindowHorizontalAlignCenter()
    			cardButton.SetWindowVerticalAlignCenter()
    			cardButton.SetPosition(POSITIONS[x], 20)
    			cardButton.SetEvent(ui.__mem_func__(self.SelectReward), x)
    			cardButton.Hide()
    			self.CardButtons.append(cardButton)
    
    			itemImage = SpecialImage()
    			itemImage.SetParent(bgCard)
    			itemImage.LoadItem(TEST_IMAGES[x])
    			itemImage.SetWindowHorizontalAlignCenter()
    			itemImage.SetWindowVerticalAlignCenter()
    			itemImage.Show()
    			self.ItemImages.append(itemImage)
    
    		self.ShowOtherButton = ui.Button()
    		self.ShowOtherButton.SetParent(self)
    		self.ShowOtherButton.SetUpVisual("d:/ymir work/ui/public/xlarge_button_01.sub")
    		self.ShowOtherButton.SetOverVisual("d:/ymir work/ui/public/xlarge_button_02.sub")
    		self.ShowOtherButton.SetDownVisual("d:/ymir work/ui/public/xlarge_button_03.sub")
    		self.ShowOtherButton.SetWindowHorizontalAlignCenter()
    		self.ShowOtherButton.SetWindowVerticalAlignCenter()
    		self.ShowOtherButton.SetPosition(0, 160)
    		self.ShowOtherButton.SetText("Afisare Carti")
    		self.ShowOtherButton.SetEvent(ui.__mem_func__(self.OtherRewards))
    		self.ShowOtherButton.Hide()
    
    		self.CloseButton = ui.Button()
    		self.CloseButton.SetParent(self)
    		self.CloseButton.SetUpVisual("d:/ymir work/ui/public/xlarge_button_01.sub")
    		self.CloseButton.SetOverVisual("d:/ymir work/ui/public/xlarge_button_02.sub")
    		self.CloseButton.SetDownVisual("d:/ymir work/ui/public/xlarge_button_03.sub")
    		self.CloseButton.SetWindowHorizontalAlignCenter()
    		self.CloseButton.SetWindowVerticalAlignCenter()
    		self.CloseButton.SetPosition(0, 190)
    		self.CloseButton.SetText("Inchide")
    		self.CloseButton.SetEvent(ui.__mem_func__(self.Close))
    		self.CloseButton.Hide()
    
    	def SelectReward(self, index):
    		for x in xrange(3):
    			self.CardButtons[x].Hide()
    		self.SelectedID = index
    		self.Selected = True
    		self.ShowOtherButton.Show()
    		self.CloseButton.Show()
    		net.SendChatPacket("/get_card_reward " + str(index))
    
    	def ShowElements(self):
    		for x in xrange(3):
    			self.BackgroundCards[x].Show()
    			self.CardButtons[x].Show()
    
    	def AddItem(self, itemVnum):
    		if self.ItemIndex < 3:
    			self.ItemImages[self.ItemIndex].LoadItem(int(itemVnum))
    			self.ItemIndex += 1
    
    	def OtherRewards(self):
    		self.ShowOther = True
    
    	def ResetWindow(self):
    		self.WindowPhase = 0
    		self.BackgroundAlpha = 0.0
    		self.ImagesAlpha = 0.0
    		self.CoverAlpha = [1.0, 1.0, 1.0]
    		self.Selected = False
    		self.SelectedID = 0
    		self.ItemIndex = 0
    		self.ShowOther = False
    		self.ShowOtherButton.Hide()
    		self.CloseButton.Hide()
    		self.SetColor(grp.GenerateColor(0.0, 0.0, 0.0, self.BackgroundAlpha))
    		for x in xrange(3):
    			self.BackgroundCards[x].Hide()
    			self.CoverCards[x].SetAlpha(0.0)
    			self.CardButtons[x].Hide()
    			self.CoverCards[x].Show()
    
    	def OnUpdate(self):
    		if self.WindowPhase == PHASE_OPENING:
    			if self.BackgroundAlpha < 0.6:
    				self.BackgroundAlpha += 0.03
    				self.SetColor(grp.GenerateColor(0.0, 0.0, 0.0, self.BackgroundAlpha))
    
    			if self.ImagesAlpha < 1.0:
    				self.ImagesAlpha += 0.04
    				for x in xrange(3):
    					self.CoverCards[x].SetAlpha(self.ImagesAlpha)
    			else:
    				self.WindowPhase = PHASE_OPEN
    				self.ShowElements()
    
    		if self.ShowOther:
    			for x in xrange(3):
    				if self.CoverAlpha[x] > 0.0:
    					self.CoverAlpha[x] -= 0.05
    					self.CoverCards[x].SetAlpha(self.CoverAlpha[x])
    				else:
    					self.CoverCards[x].Hide()
    
    		if self.Selected:
    			if self.CoverAlpha[self.SelectedID] > 0.0:
    				self.CoverAlpha[self.SelectedID] -= 0.05
    				self.CoverCards[self.SelectedID].SetAlpha(self.CoverAlpha[self.SelectedID])
    			else:
    				self.CoverCards[self.SelectedID].Hide()
    
    	def Open(self):
    		self.ResetWindow()
    		self.WindowPhase = PHASE_OPENING
    		self.Show()
    
    	def Close(self):
    		self.ResetWindow()
    		self.Hide()
    Membru Avansat Membru Avansat
  • Mesaje: 118
  • Reacții: 412
  • Mesaje utile: 2
  • Status: // Coding: 1% writing, 99% fixing typos.
  • Regat: Jinno
  • [ID Discord]
  • Contact:

    Medalii

    Avatar utilizator
    Membru Avansat
    Membru Avansat

    Mesaj de thewolf98 »

    Testat, functioneaza perfect, Multumim @[HF]White
    Am ajustat la el doar doua lucruri
    1. l-am pus pe define in ambele surse ca sa fie usor de controlat in caz ca e nevoie de disable sau modificat ceva
    2. am fixat un mic warning la compilare

    Preview cu testul :


    Un mic fix.
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.

    🔥 Hai pe Discord! - Chat activ și support direct

    Te așteptăm și pe serverul de Discord - aici ne-am strâns toată comunitatea de Metin2 din România.

    Alătură-te acum!
    Suntem aproape: 
    Robot Discord
    Roboțelu'
    Anunț
    Scrie răspuns

    Creează-ți un cont sau autentifică-te pentru a participa la discuție

    Trebuie să fii membru pentru a răspunde

    Creează-ți un cont

    Membrii pot crea subiecte noi și pot descărca resurse Metin2 Gratuit!


    Te poți înregistra sau conecta rapid utilizând contul tău de Discord, Github sau Google.

    Înregistrare

    Autentifică-te

    Înapoi la “Sisteme Metin2”

    Informații

    Utilizatori ce navighează pe acest forum: 1emilionarul, Ablados, bubu1495, champagne, deza8977, Kazuhiri, KuramaT, loss_m2, Lugh și 2 vizitatori

    Discord ID copiat: