Jump to content

Pisti95

Member
  • Posts

    113
  • Joined

  • Last visited

  • Days Won

    1
  • Feedback

    0%

Posts posted by Pisti95

  1. // UserInterface/PythonApplication.h
    // Find this:

    #include "MovieMan.h"

    // Add after this:

    #include "PythonConfig.h"

    // Find this:

    CPythonSystem m_pySystem;

    // Add after this:

    #ifdef ENABLE_CONFIG_MODULE
    CPythonConfig m_pyConfig;
    #endif

    //locale_inc.h
    // Add

    #define ENABLE_CONFIG_MODULE // Enable configuration module for saving settings

     

    Userinterface.cpp

    //search for

    extern "C" {
    extern int _fltused;
    volatile int _AVOID_FLOATING_POINT_LIBRARY_BUG = _fltused;
    };


    // replace to

    #ifdef ENABLE_NEW_MODULE_CONFIG
    #include "PythonConfig.h"
    #include "minIni.h"
    #endif
    
    extern "C" {
    #include "minIni.c"
    extern int _fltused;
    volatile int _AVOID_FLOATING_POINT_LIBRARY_BUG = _fltused;
    };

     

    RENAME minIni.c in minIni.cpp

     

    //minIni.cpp

    //search for

    #if defined NDEBUG
    #define assert(e)
    #else
    #include <assert.h>
    #endif


    // replace to

    #include "StdAfx.h"
    
    #include "minIni.h"
    #include "PythonApplication.h"
    #include "PythonConfig.h"
    
    #if defined NDEBUG
    #define assert(e)
    #else
    #include <assert.h>
    #endif

     

    Source:  just4metin

  2. I know this tread is old, but if somebody needs a solution:

    uiaffectshower.py

    Search for:
     

    MALL_DESC_IDX_START+player.POINT_MALL_ATTBONUS : (localeInfo.TOOLTIP_MALL_ATTBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/att_bonus.sub",),

     

    Change for it:
     

    MALL_DESC_IDX_START+player.POINT_MELEE_MAGIC_ATT_BONUS_PER : (localeInfo.TOOLTIP_MALL_ATTBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/att_bonus.sub",),

     

     

    PythonPlayerModule.cpp

    Search for:

    	PyModule_AddIntConstant(poModule, "ENERGY_END_TIME",        POINT_ENERGY_END_TIME);

     

    Add these:
     

    	PyModule_AddIntConstant(poModule, "POINT_COSTUME_ATTR_BONUS",        POINT_COSTUME_ATTR_BONUS);
    	PyModule_AddIntConstant(poModule, "POINT_MAGIC_ATT_BONUS_PER",        POINT_MAGIC_ATT_BONUS_PER);
    	PyModule_AddIntConstant(poModule, "POINT_MELEE_MAGIC_ATT_BONUS_PER", POINT_MELEE_MAGIC_ATT_BONUS_PER);

     

    Source:   DragonGod attack fix theme

     

  3. 4 hours ago, Dr3Ame3r said:

    Yeah but this will not work as it will keep the flags in uiaffectshower after one player will kill you, in PVM works fine.

    Yes, you are right.

     

    Solution:
     

    InstanceBase.h

    Search for:

    class CInstanceBase
    {

     

    Add to:

    	public:
    		int						BuffAffect;

     

    InstanceBaseBattle.cpp

    Search for:
     

    void CInstanceBase::Die()

     

    In this function search for it:
     

    __ClearAffects();

     

    Change for it:

    	////////////////////////////////////////
        std::vector<int> BuffAffectList = {
    									AFFECT_JEONGWI, AFFECT_GEOMGYEONG, AFFECT_CHEONGEUN,
    									AFFECT_GYEONGGONG, AFFECT_EUNHYEONG, AFFECT_GWIGEOM,
    									AFFECT_GONGPO, AFFECT_JUMAGAP, AFFECT_HOSIN, AFFECT_BOHO,
    									AFFECT_GICHEON, AFFECT_KWAESOK, AFFECT_HEUKSIN, AFFECT_MUYEONG,
    									AFFECT_JEUNGRYEOK, AFFECT_PABEOP
    #ifdef ENABLE_WOLFMAN_CHARACTER
    									, AFFECT_RED_POSSESSION, AFFECT_BLUE_POSSESSION
    #endif
    									};
        if (std::find(BuffAffectList.begin(), BuffAffectList.end(), BuffAffect) != BuffAffectList.end())
            __ClearAffects();
    	////////////////////////////////////////

     

    This solution for buffs. The affect left top of corner don't disappear.

  4. @Many

    my cmd_general.cpp:

    Detail:

    		if (ch->GetHorse() != NULL)
    		{
    			sys_log(1, "[DO_RIDE] start riding");
    			ch->StartRiding();
    			return;
    		}
    
    		for (UINT i=0; i<INVENTORY_AND_EQUIP_SLOT_MAX; ++i) //INVENTORY_MAX_NUM
    		{
    			LPITEM item = ch->GetInventoryItem(i);
    			if (NULL == item)
    				continue;
    
    			if (item->IsRideItem())
    			{
    				if (
    					NULL==ch->GetWear(WEAR_UNIQUE1)
    					|| NULL==ch->GetWear(WEAR_UNIQUE2)
    	#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
    					|| NULL==ch->GetWear(WEAR_COSTUME_MOUNT)
    	#endif
    				)

     

    • Lmao 1
  5. If someone search it.

    Solution:

    Add to your new_introselect.py:

    	def OnIMEReturn(self):
    		self.StartGameButton()
    		return True

     

    if you have old char select (introselect.py):

    Search for it:

    	def OnKeyDown(self, key):

    Add for this:

    		if 28 == key:
    
    			id = net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_ID)
    			if 0 == id:
    				self.CreateCharacter()
    
    			else:
    				self.StartGame()

     

    That's all.
     

    • Love 1
  6. if use char_item.cpp from martysama :

    Plus additional:

    Search for:

    	// @fixme141 BEGIN
    	if (TItemPos(item->GetWindow(), item->GetCell()).IsBeltInventoryPosition())
    	{
    		LPITEM beltItem = GetWear(WEAR_BELT);
    
    		if (NULL == beltItem)
    		{
    			ChatPacket(CHAT_TYPE_INFO, "<Belt> You can't use this item if you have no equipped belt.");
    			return false;
    		}
    
    		if (false == CBeltInventoryHelper::IsAvailableCell(item->GetCell() - BELT_INVENTORY_SLOT_START, beltItem->GetValue(0)))
    		{
    			ChatPacket(CHAT_TYPE_INFO, "<Belt> You can't use this item if you don't upgrade your belt.");
    			return false;
    		}
    	}
    	// @fixme141 END

     

    Make it look like this:

    	// @fixme141 BEGIN
    	if (TItemPos(item->GetWindow(), item->GetCell()).IsBeltInventoryPosition())
    	{
    		/*LPITEM beltItem = GetWear(WEAR_BELT);
    
    		if (NULL == beltItem)
    		{
    			ChatPacket(CHAT_TYPE_INFO, "<Belt> You can't use this item if you have no equipped belt.");
    			return false;
    		}
    
    		if (false == CBeltInventoryHelper::IsAvailableCell(item->GetCell() - BELT_INVENTORY_SLOT_START, beltItem->GetValue(0)))
    		{
    			ChatPacket(CHAT_TYPE_INFO, "<Belt> You can't use this item if you don't upgrade your belt.");
    			return false;
    		}*/
    		
    		return true;
    	}
    	// @fixme141 END

     

    Good luck! 😄

     

    • Metin2 Dev 1
    • Good 1
    • Love 1
  7. On 10/29/2021 at 10:23 PM, narcisxb said:
    1029 22:03:29127 :: Traceback (most recent call last):
    
    1029 22:03:29127 ::   File "ui.py", line 1535, in OnSelectEmptySlot
    
    1029 22:03:29127 ::   File "ui.py", line 87, in __call__
    
    1029 22:03:29127 ::   File "ui.py", line 78, in __call__
    
    1029 22:03:29127 ::   File "uiSkillBookCombination.py", line 116, in SelectEmptySlot
    
    1029 22:03:29128 :: AttributeError
    1029 22:03:29128 :: : 
    1029 22:03:29128 :: 'module' object has no attribute 'ITEM_SLOT_COUNT'
    1029 22:03:29128 :: 

    Any ideea? I don t have special invetory.

     

    in GameType.h, if you have this:

    const DWORD c_ItemSlot_Count = c_Inventory_Page_Size * c_Inventory_Page_Count;

     

    You should add it to your PythonPlayerModule.cpp:

    	PyModule_AddIntConstant(poModule, "ITEM_SLOT_COUNT",		c_ItemSlot_Count);

     

  8. My problem is this:    GIF

     

    Solution my problem:

    char.h

    Everywhere in the file

    Search for:

    BYTE bCell

    Change for:

    UINT bCell


    After

    Search for: (everywhere too)

    BYTE bDestCell

    Change for:

    UINT bDestCell

     

     

                 You should do In char_item.cpp too.

     

     

     

    • Metin2 Dev 3
    • Love 1
  9. my problem is this:    GIF

     

    Don't remove books from special inventory, and don't add to new book.

     

    Does anybody have idea?

     

    This part (original):

     

    Spoiler
    
    
    #if defined(__SKILLBOOK_COMB_SYSTEM__)
    bool CInputMain::SkillBookCombination(LPCHARACTER ch, TItemPos(&CombItemGrid)[SKILLBOOK_COMB_SLOT_MAX], BYTE bAction)
    {
    	if (!ch->GetDesc())
    		return false;
    
    	// if (CombItemGrid.empty())
    		// return false;
    
    	if (ch->GetExchange() || ch->GetShop() || ch->GetMyShop() || ch->IsOpenSafebox() || ch->IsCubeOpen())
    		return false;
    
    	if (bAction != 2 /* COMBI_START */)
    		return false;
    
    	std::set <LPITEM> set_items;
    	for (int i = 0; i < SKILLBOOK_COMB_SLOT_MAX; i++)
    	{
    		LPITEM pItem = ch->GetItem(CombItemGrid[i]);
    		if (pItem)
    		{	
    			if (pItem->GetType() != ITEM_SKILLBOOK)
    				return false;
    
    			set_items.insert(pItem);
    		}
    	}
    
    	if (set_items.empty())
    		return false;
    
    	if (ch->GetGold() < SKILLBOOK_COMB_COST)
    	{
    		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You don't have enough Yang to trade books with me."));
    		return false;
    	}
    
    	for (std::set <LPITEM>::iterator it = set_items.begin(); it != set_items.end(); ++it)
    	{
    		LPITEM pItem = *it;
    		if (pItem)
    		{
    			pItem->SetCount(pItem->GetCount() - 1);
    			// pItem->RemoveFromCharacter();
    			// M2_DESTROY_ITEM(pItem);
    		}
    	}
    
    	DWORD dwBooks[JOB_MAX_NUM][2 /* SKILL_GROUPS */][2] = {
    		{ // 0 - Warrior
    			{50401, 50406}, // Skill Group 1
    			{50416, 50421}, // Skill Group 2
    		},
    		{ // 1 - Ninja
    			{50431, 50436}, // Skill Group 1
    			{50446, 50451}, // Skill Group 2
    		},
    		{ // 2 - Sura
    			{50461, 50466}, // Skill Group 1
    			{50476, 50481}, // Skill Group 2
    		},
    		{ // 3 - Shaman
    			{50491, 50496}, // Skill Group 1
    			{50506, 50511}, // Skill Group 2
    		},
    	#ifdef ENABLE_WOLFMAN_CHARACTER
    		{ // 4 - Wolfman
    			{50530, 50535}, // Skill Group 1
    			{0, 0}, // Skill Group 2
    		},
    	#endif
    	};
    
    	ch->PointChange(POINT_GOLD, -SKILLBOOK_COMB_COST);
    
    	if (ch->GetSkillGroup() != 0)
    	{
    		DWORD dwMinRandomBook = dwBooks[ch->GetJob()][ch->GetSkillGroup() - 1][0];
    		DWORD dwMaxRandomBook = dwBooks[ch->GetJob()][ch->GetSkillGroup() - 1][1];
    
    		std::random_device rd;
    		std::mt19937 gen(rd());
    		std::uniform_real_distribution<> dis(dwMinRandomBook, dwMaxRandomBook);
    		DWORD dwRandomBook = dis(gen);
    
    		ch->AutoGiveItem(dwRandomBook, 1);
    	}
    	else
    		ch->AutoGiveItem(50300, 1);
    
    	return true;
    }
    #endif

     

     

  10. Fix skill for damage:

     

    skill_proto:

    UPDATE `player`.`skill_proto` SET `dwVnum`='93', `szName`='Ruggito del drago', `bType`='4', `bLevelStep`='1', `bMaxLevel`='1', `bLevelLimit`='0', `szPointOn`='HP', `szPointPoly`='-(70+3*lv+(22*iq+13*mwep+100)*ar*k)', `szSPCostPoly`='50+160*k', `szDurationPoly`='', `szDurationSPCostPoly`='', `szCooldownPoly`='20', `szMasterBonusPoly`='-(70+3*lv+(22*iq+13*mwep+100)*ar*k)', `szAttackGradePoly`='', `setFlag`='ATTACK,SPLASH,ATTACK_FIRE_CONT', `setAffectFlag`='0', `szPointOn2`='NONE', `szPointPoly2`='lv+5*iq *k', `szDurationPoly2`='iq*0.2*k', `setAffectFlag2`='', `szPointOn3`='', `szPointPoly3`='', `szDurationPoly3`='', `szGrandMasterAddSPCostPoly`='50+160*k', `prerequisiteSkillVnum`='0', `prerequisiteSkillLevel`='0', `eSkillType`='MAGIC', `iMaxHit`='15', `szSplashAroundDamageAdjustPoly`='1', `dwTargetRange`='2500', `dwSplashRange`='500' WHERE (`dwVnum`='93');

     

    Skill_table.txt:

     

    93	??????	4	1	1	0	HP	-(70+3*lv+(22*iq+13*mwep+100)*ar*k)	50+160*k			20			ATTACK,SPLASH,ATTACK_FIRE_CONT		NONE	lv+5*iq*k	iq*0.2*k		0	0	MAGIC	15	1	2500	500

     

  11. char.cpp

     

    #ifdef ENABLE_WOLFMAN_CHARACTER
                if (GetJob() == JOB_WOLFMAN)
                {
                    if ((5 <= val) && (GetSkillGroup()!=1))
                    {
                        ClearSkill();
                        // set skill group
                        SetSkillGroup(1);
                        // set skill points
                        SetRealPoint(POINT_SKILL, GetLevel()-1);
                        SetPoint(POINT_SKILL, GetRealPoint(POINT_SKILL));
                        PointChange(POINT_SKILL, 0);
                        // update points (not required)
                        // ComputePoints();
                        // PointsPacket();
                    }
                }
    #endif

     

     

    Automatic skill group for wolfman, if it's level 5. It should be comment out.

    • 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.