Jump to content

xP3NG3Rx

Honorable Member
  • Posts

    839
  • Joined

  • Days Won

    393
  • Feedback

    100%

Posts posted by xP3NG3Rx

  1. ACMD(do_view_equip)
    {
    #ifndef ENABLE_VIEW_EQUIP_FOR_PLAYERS
    	if (ch->GetGMLevel() <= GM_PLAYER)
    		return;
    #endif
    //[...]
    
    ACMD(do_view_equip)
    {
    	if (ch->GetGMLevel() <= GM_PLAYER && 0 == quest::CQuestManager::instance().GetEventFlag("view_equip_for_players"))
    		return;
    //[...]
    

    Or how do you think?

    • Love 1
  2. I'm sorry but I couldn't understand what's this for.

    Could you explain more please?

    Can you sell your dragon stones in npc-shop?

     

     

    You can say something is from ellie about your root file. What ever thanks for share us.

     

    Kind Regards

    Ken

    That root is containing your wolf modifications? I did not know. :)

  3. M2 Download Center

    This is the hidden content, please
    ( Internal )

    Hello everyone,
     
    It is a nice day to release my modifications to sell items from dragon soul inventory too :)
    So let's go.
     
    Serverside:
    1) Open input_main.cpp
    2.1) Search(CTRL+F) this:

    case SHOP_SUBHEADER_CG_SELL2:

    2.2) Replace that whole case with this:

    		case SHOP_SUBHEADER_CG_SELL2:
    			{
    				if (uiBytes < sizeof(WORD) + sizeof(BYTE) + sizeof(BYTE))
    					return -1;
    
    				const WORD wPos = *reinterpret_cast<const WORD*>(c_pData);
    				const BYTE bCount = *(c_pData + sizeof(WORD));
    				const BYTE bType = *(c_pData + sizeof(WORD) + sizeof(BYTE));
    
    				sys_log(0, "INPUT: %s SHOP: SELL2", ch->GetName());
    
    				CShopManager::instance().Sell(ch, wPos, bCount, bType);
    				return sizeof(WORD) + sizeof(BYTE) + sizeof(BYTE);
    			}
    
    

     
    3) Save and close it, now open shop_manager.h
    3.1) And replace this:

    void		Sell(LPCHARACTER ch, BYTE bCell, BYTE bCount = 0);

    3.2) With this:

    void		Sell(LPCHARACTER ch, WORD wCell, BYTE bCount = 0, BYTE bType = 0);

     
    4) Save it and close it.
    4.1) Next step; open shop_manager.cpp and search this function:

    void CShopManager::Sell(LPCHARACTER ch, BYTE bCell, BYTE bCount)

    4.2) Replace the parameters/arguments only with this:

    LPCHARACTER ch, WORD wCell, BYTE bCount, BYTE bType

    4.3) Search this line:

    LPITEM item = ch->GetInventoryItem(bCell);

    4.4) And replace it with this:

    LPITEM item = ch->GetItem(TItemPos(bType, wCell));

    4.5-Choosable) I added a log function too into the antiflag_sell check against hackers :D
    4.5.1) Replace this:

    	if (IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_SELL))
    		return;
    
    

    4.5.2) With this(as I said, this is choosable, not important change):

    	if (IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_SELL))
    	{
    		// In clientside the sell is blocked by python if a player arrive here he's a hacker, maybe.
    		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't sell this item."));
    		sys_err("[HACKER] Force sell-script used by name [%u]%s.", ch->GetPlayerID(), ch->GetName());
    		return;
    	}
    
    

     
    5) Save and close the file, now you are ready to build your game.
     

    Clientside-BIN:
    1) Open PythonNetworkStream.h
    1.1) Search this:

    bool SendShopSellPacketNew(BYTE bySlot, BYTE byCount);

    1.2) Replace it with this:

    bool SendShopSellPacketNew(WORD wSlot, BYTE byCount, BYTE byType);

     
    2) Save it, close it. Open PythonNetworkStreamPhaseGameItem.cpp
    2.1) Search this function:

    bool CPythonNetworkStream::SendShopSellPacketNew(BYTE bySlot, BYTE byCount)

    2.2) Replace the whole function with this:

    bool CPythonNetworkStream::SendShopSellPacketNew(WORD wSlot, BYTE byCount, BYTE byType)
    {
    	if (!__CanActMainInstance())
    		return true;
    
    	TPacketCGShop PacketShop;
    	PacketShop.header = HEADER_CG_SHOP;
    	PacketShop.subheader = SHOP_SUBHEADER_CG_SELL2;
    
    	if (!Send(sizeof(TPacketCGShop), &PacketShop))
    	{
    		Tracef("SendShopSellPacket Errorn");
    		return false;
    	}
    	if (!Send(sizeof(WORD), &wSlot))
    	{
    		Tracef("SendShopAddSellPacket Errorn");
    		return false;
    	}
    	if (!Send(sizeof(BYTE), &byCount))
    	{
    		Tracef("SendShopAddSellPacket Errorn");
    		return false;
    	}
    	if (!Send(sizeof(BYTE), &byType))
    	{
    		Tracef("SendShopAddSellPacket Errorn");
    		return false;
    	}
    
    	Tracef(" SendShopSellPacketNew(wSlot=%d, byCount=%d, byType=%d)n", wSlot, byCount, byType);
    
    	return SendSequence();
    }
    
    

     
    3) Save and close. Open PythonNetworkStreamModule.cpp
    3.1) Search this function:

    PyObject* netSendShopSellPacketNew(PyObject* poSelf, PyObject* poArgs)

    3.2) And replace it with this:

    PyObject* netSendShopSellPacketNew(PyObject* poSelf, PyObject* poArgs)
    {
    	int iSlotNumber;
    	if (!PyTuple_GetInteger(poArgs, 0, &iSlotNumber))
    		return Py_BuildException();
    	int iCount;
    	if (!PyTuple_GetInteger(poArgs, 1, &iCount))
    		return Py_BuildException();
    	int iType;
    	if (!PyTuple_GetInteger(poArgs, 2, &iType))
    		return Py_BuildException();
    
    	CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
    	rkNetStream.SendShopSellPacketNew(iSlotNumber, iCount, iType);
    	return Py_BuildNone();
    }
    
    

     
    4) Save, close and build :D
     

    Clientside-Python:
    Here you have to do it by yourself.
    The new function of the m2net/net module are called by 3 files

    • uiInventory.py
    • uiDragonSoul.py
    • uiShop.py

    You have to edit these files if your files are not containing these updates, but thanks to [sA]Con for the newer root package from his release ^^
    Here you can download the "new" root package which is containing every changes for this and for wolfman.
    I do not recomment to replace or overwrite your files with those files!
    Use a comparer tool like Notepad++ Compare plugin to check the differences at "sell" keyword.
     
    Tested and works, but if you found bug/mistake/error please write into this thread a detailed post.
    So not like this:

    Quote

    *nerdface* This is not working for me, help! *endofnerdface*

     
     
    ps.: I hope you understand everything, and sorry for my poor english:3

    ps2: In the official bin this message " SendShopSellPacketNew(bySlot=%d, byCount=%d, byType=%d)" can be found, but I renamed the variable too, hehe :-D.

    With Regards,
    P3NG3R

    • Metin2 Dev 18
    • Eyes 2
    • Think 2
    • Good 5
    • Love 18
  4. I have installed 2008PRO+SP1, 2010PRO+SP1, 2012U, 2013U VS and I compile my files in VS2013Ultimate with 2008 toolset.

    Installed other contents from Microsoft:

    1. Microsoft.Windows SDK for Windows 7 and .NET Framework 3.5
    2. Microsoft.Windows SDK for Windows 7 and .NET Framework 4
    3. Microsoft.Windows Server 2008 SDK and .NET Framework 3.5
      (If i do not install these SDKs my VS tells me IL mismatch p1 p2 version blabla error message.)

    Only one problem with 2013VS: Huge RAM-Consuming :(

    But if you want to start a server, build your server src on BSD with gcc/g++.

  5. Everyone, but if you want to do it for GMs only, replace the ShowDefaultButton function with this:

    	def ShowDefaultButton(self):
    		self.isShowButton = True
    		self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_WHISPER])
    		self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_EXCHANGE])
    		if chr.IsGameMaster(player.GetMainCharacterIndex()):
    			self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_VIEW_EQUIPMENT])
    		self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_FIGHT])
    		self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_EMOTION_ALLOW])
    		for button in self.showingButtonList:
    			button.Show()
    
    • Love 1
  6. Like this:

    	## Wolfman content
    	chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+42, "Bip01", "d:/ymir work/effect/hit/blow_poison/bleeding_loop.mse")
    	chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+43, "Bip01", "d:/ymir work/effect/hit/blow_flame/flame_loop_w.mse")
    	chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+44, "", "d:/ymir work/pc3/common/effect/gyeokgongjang_loop_w.mse")
    	## End of Wolfman content
    

    From official.

    chr.AFFECT_BLEEDING: 42

    chr.AFFECT_RED_POSSESSION: 43

    chr.AFFECT_BLUE_POSSESSION: 44

    • Love 1
  7. Here is in xml:

    https://mega.co.nz/#!2ZFljQhL!f1K1d2ZEMz7F8Dc2MkpdulG411oSS2jGtU9NrBXTBYc

     

    Syntax:

    <MobDef Vnum="101" Name="??" LocalizedName="Căo Selvagem" Type="0" Rank="0" BattleType="0" Level="1" Size="0" DropGoldMin="0" DropGoldMax="0" Experience="15" MaxHP="126" RegenCycle="6" RegenPercent="7" Defense="4" AIFlags="0" RaceFlag="1" ImmuneFlag="0" Str="3" Dex="6" Con="5" Int="2" DamageMin="20" DamageMax="24" AttackSpeed="100" MovingSpeed="100" AggressiveHPPct="0" AggressiveSight="2000" AttackRange="175" EnchantCurse="0" EnchantSlow="0" EnchantPoison="0" EnchantStun="0" EnchantCritical="0" EnchantPenetrate="0" ResistSword="0" ResistTwohand="0" ResistDagger="0" ResistBell="0" FesistFan="0" ResistBow="0" ResistFire="0" ResistElect="0" ResistMagic="0" ResistWind="0" ResistPoison="0" ResistBleeding="0" ResurrectionVnum="0" DropItemVnum="0" MountCapacity="0" OnClickType="0" Empire="0" Folder="stray_dog" DamMultiply="1.000000" SummonVnum="0" DrainSP="0" MonsterColor="0" PolymorphItemVnum="0" SkillVnum0="0" SkillLevel0="0" SkillVnum1="0" SkillLevel1="0" SkillVnum2="0" SkillLevel2="0" SkillVnum3="0" SkillLevel3="0" SkillVnum4="0" SkillLevel4="0" BerserkPoint="0" StoneSkinPoint="0" GodSpeedPoint="0" DeathBlowPoint="0" RevivePoint="0" />
    
    • 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.