Jump to content

Tasho

Banned
  • Posts

    358
  • Joined

  • Last visited

  • Days Won

    11
  • Feedback

    0%

Posts posted by Tasho

  1. This is from quests, it sounds like you have a spurious end somewhere on quests. without seeing the content of those scripts, nobody can help you. 
    Check the latest quests installed on the server, but i recommend to reinstall all quests after you checked it.
    You did changes on objects quests and you add something wrong.

    cd /usr/home/game/share/locale/germany/quest && sh make.sh

     

  2. 2 hours ago, Mali61 said:

    I am not a programmer if you know "Hard Level Coding" please code your systems

    • Don't take pride in how well you code. Take pride in how well you learn. Then learning that your code needs improvement provides you with an opportunity to demonstrate how good you are at learning, instead of coming across as criticism of how bad a "programmer" you are.
    • The truth is that probably in 1/2 years when you will see your current code you will agree that it was a mess. Learning programming is a never ending process and there will always be someone who is better at it than you.
    • So if person who said that your code is a mess is not just mean and it is not another case of "I would do it better" disease common among programmers you should ask him/her what exactly is wrong with your code and how can you improve it.
    • The trick is to learn to accept it. Learn to accept that you could do better. Learn to live with the flaws. Learn to accept that you're not going to get it perfect this time, and probably the next time too, and that it's a deliberate choice because the alternative is not delivering. And that's worse.
    • Disclaimer: none of this should be read as "bad code is OK".

    I hope you get these points (you can search on google more then this) and learn, don't try to look a smart because you do not impress anyone, we just want to help you, i not want to make too much off-topic, is enough i think.

    9b1_eM9mTb6po9Ue6sa3Dw.png

    • Love 1
  3. Try that.

    local x, y, targetGuild = pc.get_x() * 100, pc.get_y() * 100, pc.get_guild()
    			if is_blocked == 1 then
    				syschat("Player: "..sname.." blocked tp.")
    			elseif pc.get_guild() == 0 then
    				syschat("You have to be in a guild.")
    			elseif targetGuild == 0 then
    				syschat("Player: "..sname.." is not in a guild.")
    			elseif targetGuild ~= pc.get_guild() then
    				syschat("Player: "..sname.." is not member of same guild as you.")
    			else
    				[......................]
    			end

     

    • Love 1
  4. Try that.

    // Change the hook function with this:
    void MoveHook::hook(CInputMain* self, iCHARACTER* ch, const char* data)
    {
    	if (!ch || !self || !*data)
    		return;
    
    	if (ch->m_counterxxx == 100)
    		ch->m_counterxxx = 0;
        
    	ch->m_counterxxx++;
    	instance()->detour->GetOriginalFunction()(self, ch, data);
    }
    
    // Search for: void CHARACTER::Destroy() and add inside:
    	m_counterxxx = 0;
    // Search for: void CHARACTER::Disconnect(const char * c_pszReason) and add inside:
    	m_counterxxx = 0;

    The crash is generated when he destroyed the desc, you should check your class destroy and stop if something is nullptr and try to reinitializate the variables store to default.

    Without full code i can't say too much about that, but i hope you get my points.

    • Love 1
  5. Hi there comunity, today I was a little bored and an idea came to mind, what if I made a replica of the interface from League of Legends for Metin2.

    So this is the result:

     

     

    I just want to know what do you think and if you think that I need to continue with it.

    • Metin2 Dev 1
    • Good 1
    • Love 10
  6. Quote
    
    bool MessengerManager::IsBlocked(MessengerManager::keyA account, MessengerManager::keyA companion)
    {	
    	if (m_BlockRelation[account].find(companion) != m_BlockRelation[account].end() || m_BlockRelation[companion].find(account) != m_BlockRelation[companion].end())
    		return true;
    	else
    		return false;
    }

     

    bool MessengerManager::IsBlocked(MessengerManager::keyA account, MessengerManager::keyA companion)
    {	
    	return (m_BlockRelation[account].find(companion) != m_BlockRelation[account].end() || m_BlockRelation[companion].find(account) != m_BlockRelation[companion].end());
    }

    There are more things like this what you can do, also there not need a "else" you can do it like this too:

    	if (something)
    		return true;
    	return false;

     

  7. On 28.06.2017 at 11:54 PM, RatCatcher said:

    Wow, you removed some parentheses, very useful contribution indeed. 

    I think you don't know to read c++ code, the contribution doesn't was the "removed some parentheses" was this:

    	LPDUNGEON dung=it->second.pCharacter->GetDungeon();
    	dung->ExitAllToStartPosition();

    To this:

    	it->second.pCharacter->GetDungeon()->ExitAllToStartPosition();

    There we speak about good practice code, if you don't understand, not speak.

     

    EDIT: Why you need to do a spam for this? You just make +1 without do something, just speak about me and have child behavior, i do shortened the code and show you the good practices.

    Quote

    I have probably more experience with c++ than you

    Show us your skills if you are better then, at the moment you just speak without sense, people what say "i'm better then you", they are more low.

  8. On 27.06.2017 at 5:04 AM, M2BobFixed said:
    
    void CParty::UpdateOfflineState(DWORD dwPID)
    {
    	TPacketGCPartyAdd p;
    	p.header = HEADER_GC_PARTY_ADD;
    	p.pid = dwPID;
    	memset(p.name, 0, CHARACTER_NAME_MAX_LEN+1);
    	for (TMemberMap::iterator it = m_memberMap.begin(); it != m_memberMap.end(); ++it)
    	{
    		if (it->second.pCharacter && it->second.pCharacter->GetDesc()) {
    			if (it->second.pCharacter->GetDungeon()) {
    				LPDUNGEON dung=it->second.pCharacter->GetDungeon();
    				dung->ExitAllToStartPosition();
    			}else{
    				it->second.pCharacter->GetDesc()->Packet(&p, sizeof(p));
    			}
    		}
    	}
    }

     

    void CParty::UpdateOfflineState(DWORD dwPID)
    {
    	TPacketGCPartyAdd p;
    	p.header = HEADER_GC_PARTY_ADD;
    	p.pid = dwPID;
    	memset(p.name, 0, CHARACTER_NAME_MAX_LEN + 1);
    	for (TMemberMap::iterator it = m_memberMap.begin(); it != m_memberMap.end(); ++it)
    	{
    		if (it->second.pCharacter && it->second.pCharacter->GetDesc())
    		{
    			if (it->second.pCharacter->GetDungeon())
    				it->second.pCharacter->GetDungeon()->ExitAllToStartPosition();
    			else
    				it->second.pCharacter->GetDesc()->Packet(&p, sizeof(p));
    		}
    	}
    }

     

    • Love 1
  9. This is already public since 5 years ago.

    quest teleport_player begin
    	state start begin
    		when login begin
    			cmdchat("teleport_player "..q.getcurrentquestindex())
    		end
    		when button or info begin
    			local sname = getinput("getinput")
    			if sname == "" then return end	
    
    			local u_vid = find_pc_by_name(sname)
    			local m_vid = pc.get_vid()
    			if u_vid == 0 then return end
    			
    			local m_name = pc.name
    			local old = pc.select(u_vid)
    			local x,y = pc.get_x()*100,pc.get_y()*100
    	
    			pc.select(old)
    			if u_vid == m_vid then return end		
    
    			local ok_sign = confirm(u_vid, string.format("Player "..m_name.." want to teleport on you, accepted?", pc.name), 30) 
    			if ok_sign == CONFIRM_OK then
    				pc.warp(x, y)		
    			end	
    		end
    	end
    end	

    You just duplicate function do_warp and add call from quest..and called "new system".

    PS: You should stop to rename all functions with your name because that is a child act, to show the people like "i do that" but reality is just duplicate something what ymir already did 10+ years ago.

    But thanks for release anyway.

    • Love 2
  10. 1 hour ago, Shang said:

     

    I thought I was blind, but not, I see a dictionary here not a "theorical list".

    PS: Try to help not to correct others word.

    I speaking about python not lua oh my god and what error say.

    0617 03:07:26595 :: IndexError
    0617 03:07:26595 :: : 
    0617 03:07:26595 :: list index out of range
    0617 03:07:26595 :: 

    Already i give him a option to check it list by catID if exist, you give him "has_key" what is totally wrong.

    if int(catId) in self.items:

    I was speaking about your "has_key" on list python, how you can explain that if you say "you not was blind".

    You should learn bit python (because as i see you didn't know syntax of lua and python), maybe that say you something.

    if self.items.has_key(int(catId)):
    python 'list' object has no attribute 'has_key'

     

    I'm not trying to offense you, but as i say there was a list not a dictionary, because if  was dictionary was get KeyError not list index out of range, or maybe i'm wrong?

    @NeXoN

    That should solved your problem.

    def SelectCategory(self, catId):
    	categoryID = int(catId)
    
    	if self.selectedCategory == categoryID or categoryID not in self.items:
    		return
    
    	self.selectedCategory = categoryID
    	self.categoryList.SetButtonDown(categoryID)
    	self.itemList.ClearItems()
    
    	for item in self.items[categoryID]:
    		self.itemList.InsertItem(item[0], item[1], item[2], item[3], item[4], item[5], item[6])

     

    PS: @Shang

    itemsList = []
    print (itemsList[999])
    
    #Traceback (most recent call last):
    #File "python", line 2, in <module>
    #IndexError: list index out of range
    
    
    itemsDict = {}
    print (itemsDict[999])
    
    #Traceback (most recent call last):
    #File "python", line 2, in <module>
    #KeyError: 999

     

    PS: Now i hope you understand what is list and what is dictionary, have a nice day.

  11. Why not?

    Quote
    
            int type=lua_tonumber(L,1);
            PC* Check = CQuestManager::Instance().GetCurrentPC();
            Check->SetFlag("exp_block", type);
    ch->SetQuestFlag("exp_block", type);

     

    Quote
    
            if (type == 0) {
                ch->ChatPacket(CHAT_TYPE_INFO, "<ExpBlockSystem> [%d] You unlock your experience.", Check->GetFlag("exp_block"));
            }else{
                ch->ChatPacket(CHAT_TYPE_INFO, "<ExpBlockSystem> [%d] You lock your experience.", Check->GetFlag("exp_block"));
            }
    ch->ChatPacket(CHAT_TYPE_INFO, "<ExpBlockSystem> [%d] You %s your experience.", ch->GetQuestFlag("exp_block"), (type == 0 ? "lock" : "unlock"));
    • Love 1
  12. 8 minutes ago, Shang said:

    oh, and try to do a check if the catId is in the array with this: if self.items.has_key(int(catId)).

    Array Is a list theoretical , not a dictionary :D, 'list' no have attribute 'has_key', so that doesn't work.

    The check of list value should look like that, a simple version:

    if int(catId) in self.items:
    	# do something
  13. Hmm then try to change that:

    #cmd_General.cpp
    #Change:
    if (iRequestIndexMap < 1)
    #With:
    if (iRequestIndexMap <= 0)
    
    #Search:
    if (iRequestIndexMap > NUMBER_MAX_MAPS)
    #Add before:
    iRequestIndexMap -= 1;

    And replace the tables from .h with this:

    	int szTeleportConfig[NUMBER_MAX_MAPS][4] = 
    	{
    		{	473900,	954600,	1,	105	},	// metin2_map_a1                (idxMapIndex: 1)
    		{	352300,	882700,	1,	105	},	// metin2_map_a3                (idxMapIndex: 3)
    		{	63200,	166700,	1,	105	},	// metin2_map_b1                (idxMapIndex: 21)
    		{	145700,	239800,	1,	105	},	// metin2_map_b3                (idxMapIndex: 23)
    		{	959600,	269700,	1,	105	},	// metin2_map_c1                (idxMapIndex: 41)
    		{	863800,	246000,	1,	105	},	// metin2_map_c3                (idxMapIndex: 43)	
    		{	436300, 215700,	10,	105	},	// map_n_snowm_01               (idxMapIndex: 61)
    		{	270400, 739900,	15,	105	},	// map_n_threeway               (idxMapIndex: 64)
    		{	600900, 687500,	20,	105	},	// metin2_map_n_flame_01        (idxMapIndex: 62)
    		{	217800, 627200,	25,	75	},	// metin2_map_n_desert_01       (idxMapIndex: 63)
    		{	60000, 	496600, 30,	85	},	// metin2_map_spiderdungeon     (idxMapIndex: 10)
    		{	553600,	144900, 35,	95	},	// metin2_map_milgyo            (idxMapIndex: 65)
    		{	284200,	809600, 45,	105	}	// metin2_map_skipia_dungeon_01 (idxMapIndex: 72)
    	};
    	
    	char* szTableNameMaps[NUMBER_MAX_MAPS] =
    	{
    		"<1> Map1 Shinshoo            (Lv. min.%d) | | (Lv. max.%d)", 
    		"<2> Map2 Shinshoo            (Lv. min.%d) | | (Lv. max.%d)", 
    		"<3> Map1 Chunjo              (Lv. min.%d) | | (Lv. max.%d)", 
    		"<4> Map2 Chunjo              (Lv. min.%d) | | (Lv. max.%d)", 
    		"<5> Map1 Jinno               (Lv. min.%d) | | (Lv. max.%d)", 
    		"<6> Map2 Jinno               (Lv. min.%d) | | (Lv. max.%d)", 
    		"<7> Mount Sohan              (Lv. min.%d) | | (Lv. max.%d)", 
    		"<8> Valley of Seungryong     (Lv. min.%d) | | (Lv. max.%d)", 
    		"<9> Doyyumhwaji              (Lv. min.%d) | | (Lv. max.%d)", 
    		"<10> Yongbi Desert           (Lv. min.%d) | | (Lv. max.%d)", 	
    		"<11> Spiders Dungeon 1       (Lv. min.%d) | | (Lv. max.%d)", 
    		"<12> Hwang Temple            (Lv. min.%d) | | (Lv. max.%d)", 
    		"<13> Skipia Dungeon 1        (Lv. min.%d) | | (Lv. max.%d)"
    	};	

     

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