Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 01/09/20 in all areas

  1. Hey y'all. Question has been given, let me know.
    21 points
  2. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) Hello, came by to share something simple yet helpful for players, someone requested me this feature that allows you to input money with k format on the pick money dialog window, this will enable you to input “1kk” instead of “1000000” Hope it comes in handy for who is planning to use it.
    4 points
  3. The idea is good, but the code is bugged and unreadable, here're the bugs: text = '1kks' ValueError: invalid literal for int() with base 10: '1000000s' text = '1kk500' 1000000500 text = '1abcd' '1abcd' If I'm the one who do this, i would do it more extendable and using a proficient way. [Hidden Content] At least, keep the copyright.
    3 points
  4. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) There is already drop sounds. Here is for pick up: **Added code for SubTypes, you can prefer that.
    2 points
  5. No aggro-pulling when the monster is poisoned and you're dead and want to stand up again. maybe someone need this. in char_battle.cpp void CHARACTER::UpdateAggrPointEx(LPCHARACTER pAttacker, EDamageType type, int dam, CHARACTER::TBattleInfo & info) //this (last line): ChangeVictimByAggro(info.iAggro, pAttacker); //Change with this: if (type != DAMAGE_TYPE_POISON) ChangeVictimByAggro(info.iAggro, pAttacker);
    1 point
  6. you can use lower instead of replace moneyString.lower()
    1 point
  7. Why he would use libs, you can do this in game-source part with maximum 60 lines.
    1 point
  8. Why are you addicted to quest? I don't get it I didn't want to open any quest for this, this why I put the description on the gui, without description the players would do stupid things and complain after. When you accept the exchange, a question dialog appears to confirm the action how much won you would like to sell or buy for how much yang. I understand your point too, I prefer horizontal view, you do prefer the vertical, it's not a problem, the function supposed to work, later you can redesign the dialog however you want. Meantime I've got a bit wider taskbar button set from @Tatsumaru which is look like this: If it isn't against him, I'm gonna share both design. The thinner and the wider too.
    1 point
  9. Good idea, not the best solution. Thanks anyway.
    1 point
  10. I would like to correct you. ++it is more efficient because it++ need to return a copy of the object then increment itself.
    1 point
  11. A possible way to fix this issue is to change the scale of sash when the character is dead, at first I think all characters will be in the same position while laying down so adjusting the z position to -30 should do the trick and would be less weird. @ InstanceBase.cpp /// 1. // Search @ void CInstanceBase::SetAcce m_GraphicThingInstance.SetScalePosition(fPositionX, fPositionY, fPositionZ); // Add above if (IsDead()) fPositionZ -= 30; @ char_battle.cpp /// 1. // Search @ void CHARACTER::Dead GetDesc()->SetPhase(PHASE_DEAD); // Add below LPITEM pkAcce = GetWear(WEAR_COSTUME_ACCE); if (pkAcce && pkAcce->IsEquipped()) this->UpdatePacket();
    1 point
  12. dwVnum : n° of skill szName : name bType : Job of user bLevelStep : useless bMaxLevel : Minimal level to up a skill with book ? (type0) bLevelLimit : Level needed by skill szPointOn : Effect n°1 szPointPoly: Power of skill (only under M10) szSPCostPoly : Cost of mana (1-M10) szDurationPoly : Time of first effect szDurationSPCostPoly : Mana needed (like Sura buff skill) (1 and M10) szCooldownPoly : Time of cooldown need to be edited in skilldesc.txt too szMasterBonusPoly : Power of skill G1+ szAttackGradePoly : ? Always empty setFlag : Flag of skill setAffectFlag : Flag of n°1 effect (buff only) szPointOn2 : Effect n°2 szPointPoly2 : Power of n°2 effect szDurationPoly2 : Duration of effect n°2 (seconds) setAffectFlag2 : Flag of n°2 effect szPointOn3 : Effect n°3 of skill szPointPoly3 : Power of n°3 effect szDurationPoly3 : Duration of n°3 skill (seconds) szGrandMasterAddSPCostPoly : Number of mana required by a M10+ skill prerequisiteSkillVnum : Number of the needed skill to upgrade the first prerequisiteSkillLevel : Number of the last skill to upgrade the first Example : We have 2 in prerequisiteSkillVnum and 5 in prerequisiteSkillLevel, the skill will be upgradable only if the player have the skill in "5". eSkillType : Effect of dammage (splash etc...) iMaxHit : Number of mobs/player hit by the skill. 0 for no limit. szSplashAroundDamageAdjustPoly : Multiplication of skill dammage (first take 100% and the other take a part of this one by splash) dwTargetRange : Max range of the skill dwSplashRange : Max range of the splash. Here you go for skill_proto 1- Number of skill 2- Kind of Skill 3- Name of Skill (level 0-19) 4- Name of Skill (M1-M10) 5- Name of Skill (G1+) 6- Desc. of Skill In white : 7- Desc. n°1 of effect. In Yellow : 8- Desc. n°2 of effect. Yellow too 9- Desc. n°3 of effect. Yellow 10- ? 11- Characteristic of the skill If you add more of 1, don't forge the "|" (alt + 6) 12- Weapon needed for the skill 13- .sub 14- N° of skill (by race) 15- ? 4 = Skill, 1 = Mount & War skill 16 & 17- ? Empty 18- Desc of n°1 effect %.0f entire number %.1f flot with 1 number after the "," %% % 19- Valor of n°1 effect 20- Second valor of n°1 effect 21- Des. of n°2 effect (18-) 22- Valor of n°2 effect Here you go for skilldesc
    1 point
  13. Hello, there is a common error/bug in Metin2 related to the taskbar and character skill window. This error occurs when the skill has the status of "TOGGLE" and somebody or something killed us. When we are killed the game client still thinks that the skill is active somehow not updating its status (right clicking on slot causes the packet to be sent to the server again). What's even more funny, when we kill our character by command or when we've been shot down at once this problem does not occur ? Here are some screenshots explaining the bug: If you are interested in fixing this error, please follow the instructions below: Clientside: Open UserInterface/PythonPlayerModule.cpp and search: { "ClearSkillDict", playerClearSkillDict, METH_VARARGS }, add below: { "DisableToggleSkill", playerDisableToggleSkill, METH_VARARGS }, scroll down and search for: PyObject * playerClearSkillDict(PyObject * poSelf, PyObject * poArgs) add under: PyObject * playerDisableToggleSkill(PyObject * poSelf, PyObject * poArgs) { int iSlotIndex; if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex)) return Py_BadArgument(); CPythonPlayer::Instance().Disable_Toggle_Skill(iSlotIndex); return Py_BuildNone(); } Now move on to the UserInterface/PythonPlayer.cpp and search for: void CPythonPlayer::ClearSkillDict() add below: void CPythonPlayer::Disable_Toggle_Skill(DWORD dwSlotIndex) { CInstanceBase * pkInstMain = NEW_GetMainActorPtr(); if (!pkInstMain) return; if (!pkInstMain->IsDead()) return; if (dwSlotIndex >= SKILL_MAX_NUM) return; for (dwSlotIndex; dwSlotIndex <= SKILL_MAX_NUM; ++dwSlotIndex) { if (IsSkillActive(dwSlotIndex)) { m_playerStatus.aSkill[dwSlotIndex].bActive = FALSE; PyCallClassMemberFunc(m_ppyGameWindow, "DeactivateSkillSlot", Py_BuildValue("(i)", dwSlotIndex)); } } } after that UserInterface/PythonPlayer.h search: void ClearSkillDict(); // ľřľîÁö°ĹłŞ ClearGame ÂĘŔ¸·Î Ć÷Ç﵃ ÇÔĽö add: void Disable_Toggle_Skill(DWORD dwSlotIndex); UserInterface/PythonPlayerSkill.cpp Search: void CPythonPlayer::ClickSkillSlot(DWORD dwSlotIndex) and under: if (pSkillData->IsStandingSkill()) { if (pSkillData->IsToggleSkill()) { if (IsSkillActive(dwSlotIndex)) { CInstanceBase * pkInstMain = NEW_GetMainActorPtr(); if (!pkInstMain) return; if (pkInstMain->IsUsingSkill()) return; add new if statement: if (pkInstMain->IsDead()) return; like that: Rebuild solution. Python part: root/uitaskbar.py Search in OnUpdate(self): if app.GetGlobalTime() - self.lastUpdateQuickSlot > 500: add at the end: player.DisableToggleSkill(0) Thanks to @filipw1 idea there's no need to use python part anymore. Back to client source: UserInterface/PythonPlayer.cpp: search: void CPythonPlayer::NotifyDeadMainCharacter() and change void to this: void CPythonPlayer::NotifyDeadMainCharacter() { __ClearAutoAttackTargetActorID(); Disable_Toggle_Skill(0); } Rebuild solution. If you want to execute it from python script: player.DisableToggleSkill(skill_startIndex) Final result: [Hidden Content] This is my way to solve this graphic problem. All suggestions are welcome. Have a nice day ?
    0 points
  14. let's not dirty the thread with this topic. (So you vote for 10 euro?)
    0 points
  15. Resellers have no hands bro ahaha btw you're right, nowadays share things scares me and I also think of all those who voted negative.
    0 points
  16. Vote Reseller price: 1- 10eu 2- 20eu 3- 30eu Sorry if i'm a bit asshole but at least use libs or something safe, or we'll see it upon many server bought from some reseller. it's not nice to see someone else's work resold from other with 0 fatigue, I advise you to do a service.
    0 points
  17. I wrote it deliberately like this way to avoid the quest. Btw, is there any function to the warehouse keeper on private servers still? Also faster if you can open it anywhere you are, you don't need to get to the npc to do the exchange tho.
    0 points
  18. Hey @ScreamMyName, thank you for your feedback. So please give me a list or use the report button and send me proofs to your reproaches. Because I always try to follow exactly what is going on in the forum. For your information: Last year (2019) 40+ users got banned because of try to scam/reselling. We always try to do our best to keep the forum clean. Best regards Raylee / Metin2Dev - Team
    0 points
  19. Better: USE_MONEY_K_FORMAT = True if USE_MONEY_K_FORMAT: def FormatMoneyToK(string): moneyString = str(string) moneyString = moneyString.replace("K","k") money = 0 if len(moneyString) > 1 and 'k' in moneyString: money = int(moneyString.replace('k', '000')) return money
    0 points
  20. hello buy svf 40k clean, with classic systems (like sash mount costume etc) discord: miky#6277
    0 points
  21. switch (type) { case DAMAGE_TYPE_POISON: #ifdef ENABLE_WOLFMAN_CHARACTER case DAMAGE_TYPE_BLEEDING: #endif case DAMAGE_TYPE_FIRE: return; default: break; } ChangeVictimByAggro(info.iAggro, pAttacker);
    0 points
  22. Make it complete, then. switch (type) { case DAMAGE_TYPE_POISON: case DAMAGE_TYPE_BLEEDING: case DAMAGE_TYPE_FIRE: return; } ChangeVictimByAggro(info.iAggro, pAttacker);
    0 points
  23. @jeddawee Just use localeInfo.NumberToMoneyString uiExchange.py # Search self.OwnerMoney.SetText(str(exchange.GetElkFromSelf())) self.TargetMoney.SetText(str(exchange.GetElkFromTarget())) # Replace with self.OwnerMoney.SetText(localeInfo.NumberToMoneyString(exchange.GetElkFromSelf())) self.TargetMoney.SetText(localeInfo.NumberToMoneyString(exchange.GetElkFromTarget()))
    0 points
  24. @jeddawee @ uiPickMoney.py # Search str(maxValue)) # Replace with str(localeInfo.NumberToMoneyString(maxValue)))
    0 points
×
×
  • 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.