Jump to content

VegaS™

Forum Moderator
  • Posts

    656
  • Joined

  • Last visited

  • Days Won

    187
  • Feedback

    100%

Posts posted by VegaS™

  1. On 9/5/2019 at 6:13 PM, Thundernatsu said:

    expected primary-expression before '['token on shop manager line 534
    line 534
    std::sort(shopItems.begin(), shopItems.end(), [stSort](const TShopItemTable& i1, const TShopItemTable& i2)

    Lambda expressions (since C++11), you need CFLAG += -std=c++11, if you want to do it without, then you've to do something like this:

    This is the hidden content, please

     

    • Metin2 Dev 55
    • kekw 1
    • Eyes 1
    • Cry 1
    • Think 1
    • Confused 1
    • Scream 1
    • Good 17
    • Love 2
    • Love 53
  2. On 8/31/2019 at 9:34 PM, CHMarvin said:
    Spoiler
    
    
    	ANTI_FLAG_NAMES = (
    		localeInfo.TOOLTIP_ANTIFLAG_DROP,
    		localeInfo.TOOLTIP_ANTIFLAG_SELL,
    		localeInfo.TOOLTIP_ANTIFLAG_GIVE,
    		localeInfo.TOOLTIP_ANTIFLAG_PKDROP,
    		localeInfo.TOOLTIP_ANTIFLAG_STACK,
    		localeInfo.TOOLTIP_ANTIFLAG_MYSHOP,
    	)
    	ANTI_FLAG_COUNT = len(ANTI_FLAG_NAMES)
    
    	def AppendAntiflagInformation(self):
    		self.AppendSpace(5)
    	
    		antiFlagList = (
    			item.IsAntiFlag(item.ITEM_ANTIFLAG_DROP),	
    			item.IsAntiFlag(item.ITEM_ANTIFLAG_SELL),
    			item.IsAntiFlag(item.ITEM_ANTIFLAG_GIVE),
    			item.IsAntiFlag(item.ITEM_ANTIFLAG_PKDROP),
    			item.IsAntiFlag(item.ITEM_ANTIFLAG_STACK),
    			item.IsAntiFlag(item.ITEM_ANTIFLAG_MYSHOP),
    			item.IsAntiFlag(item.ITEM_ANTIFLAG_SAFEBOX),
    		)
    		
    		antiFlagNames = ""
    		flagCount = 0
    		for i in xrange(self.ANTI_FLAG_COUNT):
    
    			name = self.ANTI_FLAG_NAMES[i]
    			flag = antiFlagList[i]
    
    			if flag:
    				if flagCount > 0:
    					antiFlagNames += ", "
    				flagCount = flagCount + 1
    				antiFlagNames += name
    				
    		if flagCount > 0:
    			antiFlagNames += " "
    			antiFlagNames += localeInfo.NOT_POSSIBLE
    		
    		if antiFlagNames != "":
    			textLine = self.AppendTextLine(antiFlagNames, self.CONDITION_COLOR)
    			textLine.SetFeather()

    I would do it like this, in a simple way, without useless code, as i said in another forum too.

    This is the hidden content, please

     

    • Metin2 Dev 136
    • kekw 2
    • Eyes 2
    • Dislove 1
    • Angry 1
    • Not Good 2
    • Think 4
    • Scream 2
    • Good 25
    • Love 2
    • Love 82
  3. Did you check what level he sent from packet?

    Spoiler
    
    bool CPythonNetworkStream::RecvSkillLevelNew()
    {
    	TPacketGCSkillLevelNew packet;
    
    	if (!Recv(sizeof(TPacketGCSkillLevelNew), &packet))
    	{
    		Tracen("CPythonNetworkStream::RecvSkillLevelNew - RecvError");
    		return false;
    	}
    
    	const CPythonPlayer & rkPlayer = CPythonPlayer::Instance();
    
    	rkPlayer.SetSkill(7, 0);
    	rkPlayer.SetSkill(8, 0);
    
    	for (int i = 0; i < SKILL_MAX_NUM; ++i)
    	{
    		const TPlayerSkill & rPlayerSkill = packet.skills[i];
    
    		if (i >= 112 && i <= 115 && rPlayerSkill.bLevel)
    			rkPlayer.SetSkill(7, i);
    
    		if (i >= 116 && i <= 119 && rPlayerSkill.bLevel)
    			rkPlayer.SetSkill(8, i);
    
    		if (i == 122)
    			TraceError("Combo skill level: %d", rPlayerSkill.bLevel);
    
    		rkPlayer.SetSkillLevel_(i, rPlayerSkill.bMasterType, rPlayerSkill.bLevel);
    	}
    
    	__RefreshSkillWindow();
    	__RefreshStatus();
    	return true;
    }
    • 0903 00:56:53064 :: Combo skill level: 0
    • 0903 00:56:59268 :: Combo skill level: 1
    • 0903 00:56:00242 :: Combo skill level: 2
       
    • Love 2
  4. By default, you can increase the skill level of combo with books, not by point up.

    Check for DISABLE_BY_POINT_UP from skill index 122:

    • skill_proto (server)
    • skilltable.txt (client)

    void CPythonPlayer::SetComboSkillFlag(BOOL bFlag), you could check #1 #2, what happen. (btw, seems like your skill level of combo doesn't get update in client)

    • Love 1
  5. On 8/5/2019 at 3:20 PM, CxL'Mufuku said:
    Spoiler
    
    
    #untested
    
    ##ui.py
    import renderTarget
    
    class RenderTarget(Window):
    	def __init__(self, layer = "UI"):
    		Window.__init__(self, layer)
    		self.renderIdx = -1
    
    	def __del__(self):
    		Window.__del__(self)
    
    	def RegisterWindow(self, layer):
    		self.hWnd = wndMgr.RegisterRenderTarget(self, layer)
    		
    	def SetRenderTarget(self, renderIdx):
    		self.renderIdx = renderIdx
    		wndMgr.SetRenderTarget(self.hWnd, self.renderIdx)
    	
    	def SetBackground(self, image):
    		if self.renderIdx == -1:
    			dbg.TraceError("RenderTarget: You have to set the RenderTarget first!")
    			return
    		renderTarget.SetBackground(self.renderIdx, image)
    	
    	def SelectModel(self, index):
    		if self.renderIdx == -1:
    			dbg.TraceError("RenderTarget: You have to set the RenderTarget first!")
    			return
    		renderTarget.SelectModel(self.renderIdx, index)
    	
    	def SetVisibility(self, vis):
    		if self.renderIdx == -1:
    			dbg.TraceError("RenderTarget: You have to set the RenderTarget first!")
    			return
    		renderTarget.SetVisibility(self.renderIdx, vis)
    	
    	def SetHair(self, index):
    		if self.renderIdx == -1:
    			dbg.TraceError("RenderTarget: You have to set the RenderTarget first!")
    			return
    		renderTarget.SetHair(self.renderIdx, index)
    	
    	def SetArmor(self, index):
    		if self.renderIdx == -1:
    			dbg.TraceError("RenderTarget: You have to set the RenderTarget first!")
    			return
    		renderTarget.SetArmor(self.renderIdx, index)
    	
    	def SetWeapon(self, index):
    		if self.renderIdx == -1:
    			dbg.TraceError("RenderTarget: You have to set the RenderTarget first!")
    			return
    		renderTarget.SetWeapon(self.renderIdx, index)
    	
    	def SetAcce(self, index):
    		if self.renderIdx == -1:
    			dbg.TraceError("RenderTarget: You have to set the RenderTarget first!")
    			return
    		renderTarget.SetAcce(self.renderIdx, index)
    
    ##somewhere in init/load/create
    		self.ModelPreview = ui.RenderTarget()
    		self.ModelPreview.SetParent(self.ModelPreviewBoard)
    		self.ModelPreview.SetSize(190, 210)
    		self.ModelPreview.SetPosition(5, 22)
    		self.ModelPreview.SetRenderTarget(2) # Der index hat eindeutig zu sein -> sonst kann man nicht 2 rendertargets gleichzeitig sehen, logisch oder?
    		self.ModelPreview.SetBackground("d:/ymir work/ui/game/myshop_deco/model_view_bg.sub")
    		self.ModelPreview.SetVisibility(True)
    		self.ModelPreview.SelectModel(model)
    		self.ModelPreview.SetHair(Vnum)
    		self.ModelPreview.SetArmor(Vnum)	
    		self.ModelPreview.SetWeapon(Vnum)
    		self.ModelPreview.SetAcce(Vnum)
    		self.ModelPreview.Show()
            
    ##somewhere in hide/close/whatever:
    		self.ModelPreview.SetVisibility(False)
      
    ##somewhere in some fucking method, who cares?
    		self.ModelPreview.SetWeapon(Vnum)
      

     

    On 8/5/2019 at 4:18 PM, V0lvox said:

    Why i should define an extra function on RenderTarget class, when ich can use it directly ? e.g. from UiToolTip i call direkt the BInary. So why i should go the extra way over the RenderTarget class ? :D

    You're right, but if you really want to use something like this, you should do a customizable class, like:

    This is the hidden content, please

    • Metin2 Dev 59
    • Dislove 1
    • Not Good 1
    • Think 1
    • Confused 1
    • Good 12
    • Love 61
  6. Stonehearst Asylum have the same concept as Shutter Island, i recommand it too.

    And if we talk about Christopher Nolan:

    • Interstellar
    • Inception
    • Transcendence
    • The prestige

     

    • Love 1
  7. CommunityManager_metin2_pl_2016_322c042a19dd36ae7d9bdfab97e963f9.png

    "Rubinum pirate server was destroyed. 
    Private servers are announced to those who do not shut down.
    The turn will be destroyed.
    Those responsible will get heavy penalties.
    In addition, personal and corporate lawsuits are coming soon. 
    All of these videos will be downloaded and forwarded to legal authorities.
    Not warned. 
    Look, I'm not obligatory, but I warn you not to get hurt, but some of them do not listen unfortunately.
    Some of them do not take advice and throw in their minds will fight. 
    There's no war. I hope that those who break the law will show the virtue to bear the consequences." 
    Google translate

    Imagini pentru meme gameforge

    Let's change the hosts to China.

    ____________________________________________________________________________________________________________________________________________

    Prediction from: 29 June 2019, 12:23 am

    Spoiler

    debb50da622472e30f226a7b14e75a21.png

    Hello, after almost 6 passive years I would like to inform you today.
    At that time (at the time of the Source Leaks) and today we were in close contact with a certain employee, who belongs to the Metin2 department in Karlsruhe.
    Over the past few months, the measures against P Server (Investigations & Promotion) have been pretty quiet, but this will change in the near future, with (presumably) some busts following. Gameforge has achieved that the State Criminal Police Office of Baden-Württemberg has established a (according to our information) 3-member investigation team against the operation of Metin2 private servers.
    So take care of your ass - make certain arrangements and stay under the radar !!!
    Greetings from an old hand!

    ____________________________________________________________________________________________________________________________________________

    Update: Another message from the same CoMa of GameForge (TR). - Link

    First of all, the royalties are not related to the person or the TR team. We have no authority in this matter. This is a legal matter. Publications are now tracked with special algorithms. The relevant units worked on this issue and we all saw the results. Gameforge started to send warnings to pirated channels on 27.06.2019 as Global and this will continue.

    It was an action we've been waiting for recently. From now on, those who do not take this seriously and make fun of Gameforge and those who continue to pirate broadcast are a topic to consider. I already find it meaningless for those who keep repeating every day knowing that something is a crime and those who think that they can't do anything, waiting for a special warning before. Those who get angry with 2-3 caution should not forget that they have violated Gameforge's rights 500-1000 times with 5000-1000 videos.

    Don't misunderstand my Instagram sharing. We will not recruit publishers who insult us, denigrate, denigrate, target, humiliate, support pirate servers and illegal methods. Our decision on this issue has not changed. Hard is!

    Pirate; is theft and disrespect to the pirate ad emege. It is not possible to comprehend the pirate servers who disrespect Eme and make the premium talk about labor. This is a moral issue. Selling a product that does not belong to you, marketing, earning over this product, then selling "I spent a lot of labor, my labor has been lost" is no sense for us. The goods are already stolen. Bread literature is not made over stolen goods. Those who market stolen goods are considered to have taken all possible consequences. What can be expected when illegal content is shared ?.

    We will be with the publishers who continue to be with us. We'il be even closer with them. The warnings will continue and spread to all platforms. (Twitch, d-live, etc.) We do not understand the understanding of different thinkers.

    In the night people yedigün P servers copyright, copyright and they eat does not bring us money .. We did not do to revive the Turkey servers that. Gameforge's taxes, webzen shares, employees, and never made the server to spend on the server P servers, we do not throw royalties because people give money. It is not an attack on the publisher's income.

    Maybe you don't see it, but the biggest channels in TR were smaller than the other p-server channels that ate ban in many parts of the world. 25000 videos were released on youtube in different languages. This process is not specific to the TR:) region, and will never stop. The new team will never stop.

    Discarded royalties were thrown to people who were part of the illegal business system. When you introduce P server and play here, you work with people who don't pay taxes, don't give shares to manufacturer or publisher.

    How to work for people who do not pay taxes in the law (fake documents or deliberate use of tax offenses in the form of punishment of 2 years to 5 years imprisonment (VUK md.359 / c) :) If it corresponds to imprisonment, youtube on these accounts is a right action to remove. 3-year 5-year labor on the servers that make kacakcilik and offense people, such as the children in the field of the size of the channels they grow up knowing that they have grown. Gameforge, which grants taxes and shares for the broadcasting rights of other games such as Metin2, is also entitled to copyright for all non-P or P content. As a publisher, both the music company and the book company; has the right to manage how the content it publishes is spoken.

    Note: I don't have a page on my Facebook platform. Do not be deceived by impersonation.

     

    • Sad 1
    • Love 9
  8. 24 minutes ago, enisina said:

    Your life has been your money :D

    Your life has been Questions and Answers ?, let's stop with off-topic.

    Quote

    remember, I don't want videos here and there(if you can't compile them into a thorough guide,

    @TurKAdaM The previous reply was a joke, nobody can help you with a full guide how to develop everything in metin2, you need a lot of time to learn alone, so first one, start to learn programming.

    https://metin2.dev/board/index.php?/topic/20866-newbie-in-metin2-few-questions/

    https://metin2.dev/board/index.php?/topic/39-collection-useful-tools-to-get-you-started/

    https://www.youtube.com/results?search_query=how+to+create+a+metin2+private+server

     

    • Love 2
    • root/InterfaceModule.py:
    # Search for:
    		wndInventory = uiInventory.InventoryWindow()
    # Add after:
    		wndCharacter.BindInterfaceClass(wndInventory)
    • root/uicharacter.py:
    # Search for:
    		self.toolTipSkill = 0
    # Add after:
    		self.wndInventory = None
    		
    # Search for:
    	def __del__(self):
    		ui.ScriptWindow.__del__(self)
    # Add after:
    	def BindInterfaceClass(self, wndInventory):
    		self.wndInventory = wndInventory

    How-To-Use:

    if self.wndInventory:
    	self.wndInventory.ClickCostumeButton()

     

    • Love 2
  9. This is the hidden content, please

    #include "cff.h"
    std::string text = CFF::format("Metin2", "green");
    std::string text = CFF::format(std::to_string(8000), "banana");
    std::string text = CFF::format(std::to_string(412.55), "red");
    std::string text = CFF::format("Pending", "#113355");
    std::string text = CFF::format("Item name:", "springgreen", CFF::FLAG_NEW_TAB) + CFF::format(pItemData->GetName(), "chocolate");
    
    std::vector<string> text = CFF::multi_format({"a", "b", "c"}, "red"); // text[0], text[1], text[2]
    • Metin2 Dev 1
    • Love 7
  10. They exists, are the self-notations from item_proto.txt, so addon_type & addon_value are apply_type & apply_value.

    • ITEM_VNUM~RANGE    ITEM_NAME(K)    ITEM_TYPE    SUB_TYPE    SIZE    ANTI_FLAG    FLAG    ITEM_WEAR    IMMUNE    GOLD    SHOP_BUY_PRICE    REFINE    REFINESET    MAGIC_PCT    LIMIT_TYPE0    LIMIT_VALUE0    LIMIT_TYPE1    LIMIT_VALUE1    ADDON_TYPE0    ADDON_VALUE0    ADDON_TYPE1    ADDON_VALUE1    ADDON_TYPE2    ADDON_VALUE2    VALUE0    VALUE1    VALUE2    VALUE3    VALUE4    VALUE5    Specular    SOCKET    ATTU_ADDON
    Quote
    
    return m_pProto ? m_pProto->sAddonType : 0;

    Btw, you don't need the value, ymir wasn't used the value of addon type in game (#1, #2), just take it as a simple boolean condition if it's true (-1) or 0, and inside of CItemAddonManager::ApplyAddonTo(int iAddonType, LPITEM pItem) the argument is unused.

    So it's enough to return a simple boolean.

    This is the hidden content, please

    • Metin2 Dev 14
    • Scream 1
    • Good 5
    • Love 7
  11. Maybe i'm wrong, but i  think you need to use the ymir style because already there's a scale for image as (scaleX = screenWidth / imageWidth, scaleY = screenHeight / imageHeight)

    Spoiler

    GJn6fab.jpg

     

    • PxO5cab.png(full image: 1024 x 1024, selected: 1024 x 768)

    So you've to create a new image with size 1024x1024 and attach your current loading image and then the rest (1024x256) need to be black, use a paint bucket or just copy from ymir images that part.

    • Love 2
  12. //#include "item_manager.h"	
    const TItemTable * proto = ITEM_MANAGER::instance().GetTable(12019);
    if (proto)
    {
    	for (size_t i = 0; i < ITEM_APPLY_MAX_NUM; ++i)
    		sys_log("applyType[%d] = %d, applyValue[%d] = %d", i, proto->aApplies[i].bType, i, proto->aApplies[i].lValue);
    }
    
    >>> applyType[0] = 8, applyValue[0] = -6
    >>> applyType[1] = 37, applyValue[1] = 20
    >>> applyType[2] = 10, applyValue[2] = 40

     

  13. Quote

    4087314250d122fded28eca525fa4e4f.png

    If you use item_award you don't have to do these checks, if MALL window is full, rest of the items will be 'unmarked for cache', so you have to take the current items first one and then rest of items which was added will be loaded too.

    How-To-Test:

    • Insert 60 query's with itemVnum 27001 in item.award.
    • Take the 45 items from MALL window into inventory.
    • Re-open window mall and you will see the rest of items 15.

    So you can add unlimited query-items, they will be loaded by cache after you pickup the existent items and exist enough space.

    Here you can find the extended item award with more features.

     

    • Metin2 Dev 1
    • Love 2
×
  • 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.