Jump to content

HITRON

Inactive Member
  • Posts

    228
  • Joined

  • Last visited

  • Days Won

    15
  • Feedback

    0%

Posts posted by HITRON

  1. I fixed all of this before some months ago, you can check here my functions and compare there is more checks for each one, so you can be sure:

     

    Pastebin

     

    The specific func:

     

    
        ALUA(npc_get_leader_vid)
        {
            CQuestManager & q = CQuestManager::instance();
     
            LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
     
            LPPARTY party = npc ? npc->GetParty() : NULL;
     
            LPCHARACTER leader = party ? party->GetLeader() : NULL;
     
            lua_pushnumber(L, leader ? leader->GetVID() : 0);
     
            return 1;
        }

     

    • Love 2
  2. The last one is that: When you have a Toggle enabled and the skill is lower than G1 (M1 example) and you upgrade it to P or S / L the Toggle is not activate again.

     

    (This is happening only with command setsk, i think is not possible with other way cause the skill must go to G1 and after will working normally).

     

    FIX:

     

    Find:

     

    if playerm2g2.IsSkillActive(slotIndex) and skillGrade == j:
    	skillPage.ActivateSlot(realSlotIndex)

     

    Replace it with:

    if playerm2g2.IsSkillActive(slotIndex):
    	if skillGrade == j or (skillGrade >= self.SKILL_GRADE_SLOT_COUNT) and j == (self.SKILL_GRADE_SLOT_COUNT - 1):
    		skillPage.ActivateSlot(realSlotIndex)
    

     

    • Love 1
  3. @Speachless This is a simple solution. About the (D:) you could just create a different partition in your HDD called (D:) instead to bought a external dvd-roam to test the problem. You can also check if the Game is running in (D:) and after use the ":" method from @ElRenardo. This could be done much more easier with FoxFS cause in FoxFS there is just almost 8 - 10 files with d:/ymir work/ instead of the normal (Client) that have multiple patches and you can put the check only for them by name instead.

  4. @KavMira

     

    I think the same thing happening with Stamina too and also Stamina is getting bugged when you Ride and Unride is stuck instead of continue to work but nobody notice it, the 36, 44 - 18, 22 is the Lv. Steps so if you change it to 44, 44, 18, 22 in every each step will be the same i think is wrong like that cause if you run already a Server is gonna make the new Players "STRONGER", so i think is better to make a calc when you reseting the Stats in that case so is gonna go back to normal somehow but not sure.

  5. This is complete wrong.. you didn't understand how the metinSlot[sash.ABSOPRTION_SOCKET] works.

     

    Of course you can't use:

    absChance = int(metinSlot[sash.ABSORPTION_SOCKET])

    In this case.

     

    Instead:

     

    You have to take the Sash Grade and make a List that have the default Abs Rate like:

    	argGrade = item.GetValue(0)
    
    	sashAbsByGrade = ( 1, 5, 10, (11, 25) )[argGrade - 1] 
    
    	if shop.isGayaShop:
    		if sashAbsGrade < 4:
    		   self.AppendTextLine("Sash Abs %d" % (sashAbsByGrade))
    		elif sashAbsGrade == 4:
    		   self.AppendTextLine("Sash Abs %d ~ %d" % sashAbsByGrade)
    	else:
    	   absChance = int(metinSlot[sash.ABSORPTION_SOCKET])
    
    	   # [...]

    # [...] The rest of the with code that you have in the ToolTip (Sash Abs Part).

     

    About the shop.IsGayaShop function is just a example what you need to add there, if you can't make a function by yourself, simply put in a arg in the def of the tooltip like isGayaShop = False and when you send the AddItemData from the Gaya.py add at the end the arg isGayaShop = True (not only (True) i think there is more thinks in order to avoid any issues).

    def AddItemData(arg, arg, arg, isGayaShop = False):
    self.tooltipItem.AddItemData(int(self.items[slotIndex][0]), isGayaShop = True)

    And rename the shop.isGayaShop -> isGayaShop only.

     

    Is easy solution and i think could be working in Shops / Cube also (Not tested).

     

  6. Hey,

     

    I'm trying to increase the Vnum Range for (Costume) - Weapons like 90000+ so i can add new without to conflict with official updates Vnums that i want to add in the future, but the Weapon Vnum have a Range as i know otherwise will won't show up, how is possible to change the Vnum Range?

  7. @VegaS™ Is not about the C++ part, just wrong flag in the topic, is more about the .txt table to be readable, about the changes in .cpp in different story that i changed it before long time ago i just shared it like that to avoid to do again the .txt with the old names.

     

    But now that you mention about the .cpp file improves i could update this too, but doesn't really matter the code is working fine.

  8. M2 Download Center

    This is the hidden content, please
    ( Internal )

    Hey,

     

    I had some free time and i make the DS Table more readable i saw a lot of people that can't understand how the table works and i decided to share it.

     

    There is much more better ways and one is to rewrite the way that is reading the DS Table. At this one i just improved it to be readable.

     

    In the Table bellow is including Wolfman Bonus so if you don't use him remove the additional bonus.

     

    • The Bonus is like official.

     

    • If you are using Myth DS Stones you can just add the extra values again and same in the .cpp .h files.

     

    • The extract for all the DS Stones is 100% you can change it from the (Dragon_Soul_Extract_Tables).

     

    I saw some P-Servers that they got issues with DS Stones +5 - +6 got the same Bonus, or the Bonus at +6 is all perfect expect one,  in the table bellow all this kind of issues is fixed and tested.

     

    Download

    • Metin2 Dev 18
    • Eyes 1
    • Good 5
    • Love 5
  9. 6 minutes ago, zeimpekis9 said:

    No the same section. I want for example the npc 20022 to have armors.

    The npc 20091 to have weapons. 

    Npc 20084 to have stones.

     

    Different sections.

     

    This is the default way that cube works.

     

    # Armors
    section
    npc	20022
    item	11209	1
    reward	11219
    percent	100
    end
    
    section
    npc	20022
    item	11219	1
    reward	11229
    percent	100
    end
    
    # Weapons
    section
    npc	20091
    item	19	1
    reward	29
    percent	100
    end
    
    section
    npc	20022
    item	29	1
    item	49 	1 # for more items you add more fields item and count.
    reward	39
    percent	100
    end
    
    # Stones
    section
    npc	20084
    item	28333	1
    reward	28433
    percent	100
    end

     

  10. Hey,

     

    I saw some sources that they have added and external folder that including every Output VS Files expect .cpp .h files like:

     

    PLTbaPk.png

     

    ggbsap1.png

     

    I'm search for a faster way to do this, i know how to do this manually, if anyone could help would be great.

     

    Thanks.

  11. Did you solve this?

     

    This could be fixed by rename the GetRegisterBegin from FoxFS source (cryptopp) and removing the getMacAddress func from FileSystem.h.

     

    - Other solution is to update cryptopp in last version and use the same in your binary, in EterPack the include Cryptopp when you are using FoxFS is useless you have to commented the code include "cryptopp/*", about the getMacAddress you need to use the linker in your UserInterface and add the

    Iphlpapi.lib.

     

    I think is fine like this way.

     

    lHhbLCX.png

    • Love 1
  12. 3 hours ago, tierrilopes said:

    When removing the INDEX, you need to be carefull with your search method, and notice if its searching by FILE or INDEX.

    You can replicate the order in your executabe following the order at your INDEX.

     

    But while you are at it, i advise you to merge the whole client into a single folder, replacing files according to the reverse INDEX order.

    That way it will ask you to replace files (you accept) eliminating the duplicates.

    You need first to remove the seasonX/ from your client.

     

    That will give you some work but you will end up with a no duplicates slightly smaller client.

     

    Then you wont have to worry about packs loading order (its just another bad practice from webzen).

     

    Thank you for your answer.

     

    I did it completely manualy and following the index priority by file and i just replace everything with priority, i still keep seasonX files but with priority in the RegisterPack / Index to avoid any issues with old / new files, is not much work to remove it either but i think i want to keep it separete this one.

     

    I had also a issue with Property file but did some changes in Gamelib / Property files and with a Python Script that i did i converting everything into .xml or list file even the Chinese characters is allowed now and not need to rename every folder, everything working fine.

     

    #closerequest

  13. Hey,

     

    I want to convert a client with .eix .epk files into FoxFS, but when i'm trying to convert them like into 1 file all the npc etc from metin2_patch seems that there is duplicates and i want to avoid any mistakes

    and replace new version of a file with the old, should i follow the index file priority? or is there any script that convert them automatically? Should i do it manualy?

  14. 1 minute ago, VegaS™ said:

     

    You're wrong, i don't know from where you copy-paste this function, this isn't by default in metin2 source.

    Could be done this very easily too, but here we talked about the poisoning, why i should do something general for affects, this is another subject.

    @xP3NG3Rx Already shared this but is implemented via CPythonPlayer, which means is just for your client instance, you've to implement it in CInstanceBase for each of player instance and will work fine.

     

    If you mean that the Poisoning is not updating in all characters that have clicked on the Target after or before then you are wrong, the function that i did long time ago that i don't even remember that is not existing in the metin2 source by default, is working pretty fine.

    • Love 1
  15. 1 hour ago, VegaS™ said:

    You don't need server source for this, you can do it directly via source client.

    For being in real time you'll need to do a boolean variable inside of CInstanceBase class which is updated from RecvAffectAddPacketRecvAffectRemovePacket for each instance.

    So with that you could do a function like chrmgr.IsPoisoned(self.GetTargetVID()) which will result the status of poison for specific vid and check it in OnUpdate.

    Btw, the implementation is very bad, if i would want to do this, i don't touch the hpGauge, just add a new gauge bar over the hpGauge and hide/show it, that's all, could be done just with few lines, without ☠️ the python.

     

    Or you can simply use chrmgr.HasAffectByVID(self.GetTargetVID(), chr.AFFECT_POISON) in Python instead to add this new functions that is not really needed to check if the vid is poisoned and you can change it also to AFFECT_BLEEDING, AFFECT_FIRE etc less code and the SetPoison etc is not really needed cause the OnUpdate will update it anyways in every player that have selected the vid thats is poisoned and sow on.

     

    Function: HasAffectByVID

    PyObject * chrmgrHasAffectByVID(PyObject * poSelf, PyObject * poArgs)
    {
    	int iVID, iAffect;
    
    	if (!PyTuple_GetInteger(poArgs, 0, &iVID))
    		return Py_BadArgument();
    
    	if (!PyTuple_GetInteger(poArgs, 1, &iAffect))
    		return Py_BadArgument();
    
    	CPythonCharacterManager & rkChrMgr = CPythonCharacterManager::Instance();
    
    	CInstanceBase * p = rkChrMgr.CPythonCharacterManager::GetInstancePtr(iVID);
    
    	if (p)
    		return Py_BuildValue("i", p->IsAffect(iAffect));
    
    	return Py_BuildNone();
    }

     

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