Jump to content

xP3NG3Rx

Honorable Member
  • Posts

    839
  • Joined

  • Days Won

    393
  • Feedback

    100%

Posts posted by xP3NG3Rx

  1. It seems you don't have the interface bound into the ExpandedMoneyTaskBar class.

    Search this line in the interfaceModule.py: "self.wndExpandedMoneyTaskBar.LoadWindow()" and add below this:

    		self.wndExpandedMoneyTaskBar.BindInterface(self)

    Then open the uiTaskBar.py and put the following line into the ExpandedMoneyTaskBar.__init__ function:

    		self.interface = None

    Last the following function anywhere inside the ExpandedMoneyTaskBar class:

    	def BindInterface(self, interface):
    		from _weakref import proxy
    		self.interface = proxy(interface)

     

    But I don't get it, how did you get 'Interface' instead of 'interface'. ?

    • Love 1
  2. First of all:
    b02561e6ba.png

     

    Secondly, just open up the function named by

    CRaceMotionData::SetName

    and fix it, if you can't, you have no business in the private server development unless you start learning cpp to get some knowledge.

    Spoiler
    Quote

    I'm just honest, and also rude sometimes if I see a person who is giving a shit on the general rules.
    Like it or not, deal with it. Can't you again? You know where you came from, right?

     

     

    • Metin2 Dev 1
    • Love 2
  3. This is the hidden content, please

    Includes some models re-exported via 2.12.02 granny.

    And no, before you will ask the new shrimp pet which is defined in the npclist.txt is not available yet, neither the summer armors, they gonna release later maybe.

    I've forgot to pack the property,

    This is the hidden content, please

     

    This is the hidden content, please

    • Metin2 Dev 68
    • Eyes 2
    • Think 1
    • Confused 1
    • Scream 1
    • Good 19
    • Love 1
    • Love 38
  4. if app.ENABLE_QUIVER_SYSTEM:

    This line is false, but why?

    Do you have this in the PythonApplicationModule.cpp defined as true?

    It supposed to look like this by the intellisense highlight:

    c7fe9bfdd0.png

    • Love 1
  5. Well, I just checked the code, and I've seen the way to it, but anyway thanks.

    I think this is a good implementation.

    I'm trying to reverse it from the official, but it's ridiculous how they have done this with the arabic codepage.

    They have split the render and update functions into two functions like this way

    void __thiscall CGraphicTextInstance::Render(void *this, int a2)
    {
      void *v2; // esi
    
      v2 = this;
      if ( GetDefaultCodePage(this) == 1256 )
        CGraphicTextInstance::RenderAR((int)v2, a2);
      else
        CGraphicTextInstance::RenderEU((int)v2, a2);
    }

    but the normal also has references to the arabic codepage, and vice versa too

    2418501857.png

  6. If you place a text below of the textline from its height, where will it shown?

    For example you have this text object:

    self.text1.SetPosition(30, 36)
    self.text1.SetText("This is a\ntext just to\nbe sure it\nworks.")
    self.text1.SetLineHeight(20)

    And another one like this way:

    self.text2.SetPosition(30, self.text1.GetPosition()[1]+5)
    self.text2.SetText("This one is good")

     

  7. Also if you are smart enough as the webzen developers weren't, you will put an exception where the render of the textline class will skip the splitting on special places like whisper nameinput :).

    Doesn't matter if they have added the DisableEnterToken if they didn't apply everywhere where they supposed to.

    And when you report this problem on their forum(gayforge obv..), they delete the topic, and giving a single piece of nothing about it.

    • Love 2
  8. Hello everyone.

    Let me share these with you here.

     

    This post contains everything for the recent[v20.1.5.1 05.05.2020] item and mob proto structure.
    About the mob_proto it might be some false data, but it's okay ;), it is impossible to figure out totally from clientside only.
    I am going to explain my thoughts about the new AI Flags as well as about everything I know, or think.

    enum EMisc
    {
    	CHARACTER_NAME_MAX_LEN = 24,
    	MOB_SKILL_MAX_NUM = 5,
    	ITEM_NAME_MAX_LEN = 24,
    	ITEM_LIMIT_MAX_NUM = 2,
    	ITEM_VALUES_MAX_NUM = 6,
    	ITEM_APPLY_MAX_NUM = 4,
    	ITEM_SOCKET_MAX_NUM = 3,
    	CHARACTER_FOLDER_MAX_LEN = 64,
    };

    Fist stop, this enum contains some basic informations which mostly the same, except one.
    ITEM_APPLY_MAX_NUM has been increased to 4 from 3.
    Why? Because of the new mounting system what they have done.
    The seal items of the mounts control everything about the mounting and its bonuses;
    - New APPLY_MOUNT bonus, its value is the vnum of the mount, stored into POINT_MOUNT.
    - The bonuses what the mount gives are in the rest of the applies. This why they had to add an extra apply because some mounts gives up to 3 bonuses.

     

    typedef struct SItemLimit
    {
    	BYTE		bType;
    	long		lValue;
    } TItemLimit;
    
    typedef struct SItemApply
    {
    	WORD		wType;
    	long		lValue;
    } TItemApply;

    Ho-ho-ho another stop here for a sentence.
    Might be you cannot see any new values, but if you check the datatypes in the TItemApply, you will see they
    have changed the datatype of the ApplyType from BYTE(unsigned char) to WORD(unsigned short).
    Why? The answer is easy; because of their number of the bonuses reached the 255 limit of the BYTE,
    above of 255 the data will overflow. This modification they made with the 6th 7th bonuses.
    They added lots of worthless bonuses to be different from the private section and to squeeze out the money of the players with the 6th 7th bonuses.

     

    enum EItemAntiFlag
    {
    	ITEM_ANTIFLAG_FEMALE			= (1 << 0),
    	ITEM_ANTIFLAG_MALE				= (1 << 1),
    	ITEM_ANTIFLAG_WARRIOR			= (1 << 2),
    	ITEM_ANTIFLAG_ASSASSIN			= (1 << 3),
    	ITEM_ANTIFLAG_SURA				= (1 << 4),
    	ITEM_ANTIFLAG_SHAMAN			= (1 << 5),
    	ITEM_ANTIFLAG_GET				= (1 << 6),
    	ITEM_ANTIFLAG_DROP				= (1 << 7),
    	ITEM_ANTIFLAG_SELL				= (1 << 8),
    	ITEM_ANTIFLAG_EMPIRE_A			= (1 << 9),
    	ITEM_ANTIFLAG_EMPIRE_B			= (1 << 10)
    	ITEM_ANTIFLAG_EMPIRE_R			= (1 << 11)
    	ITEM_ANTIFLAG_SAVE				= (1 << 12)
    	ITEM_ANTIFLAG_GIVE				= (1 << 13)
    	ITEM_ANTIFLAG_PKDROP			= (1 << 14)
    	ITEM_ANTIFLAG_STACK				= (1 << 15)
    	ITEM_ANTIFLAG_MYSHOP			= (1 << 16)
    	ITEM_ANTIFLAG_SAFEBOX			= (1 << 17)
    	ITEM_ANTIFLAG_WOLFMAN			= (1 << 18)
    	ITEM_ANTIFLAG_RT_REMOVE			= (1 << 19)
    	ITEM_ANTIFLAG_QUICKSLOT			= (1 << 20)
    	ITEM_ANTIFLAG_CHANGELOOK		= (1 << 21)
    	ITEM_ANTIFLAG_REINFORCE			= (1 << 22)
    	ITEM_ANTIFLAG_ENCHANT			= (1 << 23)
    	ITEM_ANTIFLAG_ENERGY			= (1 << 24)
    	ITEM_ANTIFLAG_PETFEED			= (1 << 25)
    	ITEM_ANTIFLAG_APPLY				= (1 << 26)
    	ITEM_ANTIFLAG_ACCE				= (1 << 27)
    	ITEM_ANTIFLAG_MAIL				= (1 << 28)
    };

    Okay, here also there are many of new antiflags and I am going the explain the new flags only:
    ITEM_ANTIFLAG_RT_REMOVE : This one kind of funny, because this doesn't have any reference at clientside, but it should be ANTIFLAG_REAL_TIME_REMOVE.
    Which blocks the destroyitem function when the real_time_expire_event is executed. It is about 98% sure.
    Only the new pet system seals have this flag, and their transport box.
    Isn't it funny that I've just figured this out now when I wrote this? haha :D
    ITEM_ANTIFLAG_QUICKSLOT : Obviously blocks to attach the item with this flag to the quickslots.
    ITEM_ANTIFLAG_CHANGELOOK : This one will block the changelook process. That item which has this flag cannot be used for appearance for another.
    ITEM_ANTIFLAG_REINFORCE : Blocks to add new bonuses to an item.
    ITEM_ANTIFLAG_ENCHANT : Blocks to change the attributes of an item.
    ITEM_ANTIFLAG_ENERGY : Blocks to use the item for making Energy Fragment from it.
    ITEM_ANTIFLAG_PETFEED : This flag blocks the pet, to eat the item which has it.
    ITEM_ANTIFLAG_APPLY : This flag will make the item unstonable, you will not be able to put any stones into it. Or It blocks every applicable item to use on it, can be both too, dunno.
    ITEM_ANTIFLAG_ACCE : This flag will block theowadan to absorb the bonuses from the item which has this flag.
    ITEM_ANTIFLAG_MAIL : The flag will make the item unsendable via mail.

     

    enum EItemFlag
    {
    	ITEM_FLAG_REFINEABLE		= (1 <<  0),
    	ITEM_FLAG_SAVE				= (1 <<  1),
    	ITEM_FLAG_STACKABLE			= (1 <<  2),
    	ITEM_FLAG_COUNT_PER_1GOLD	= (1 <<  3),
    	ITEM_FLAG_SLOW_QUERY		= (1 <<  4),
    	ITEM_FLAG_RARE				= (1 <<  5),
    	ITEM_FLAG_UNIQUE			= (1 <<  6),
    	ITEM_FLAG_MAKECOUNT			= (1 <<  7),
    	ITEM_FLAG_IRREMOVABLE		= (1 <<  8),
    	ITEM_FLAG_CONFIRM_WHEN_USE	= (1 <<  9),
    	ITEM_FLAG_QUEST_USE			= (1 << 10),
    	ITEM_FLAG_QUEST_USE_MULTIPLE= (1 << 11),
    	ITEM_FLAG_QUEST_GIVE		= (1 << 12),
    	ITEM_FLAG_LOG				= (1 << 13),
    	ITEM_FLAG_APPLICABLE		= (1 << 14),
    };

    Small confess about the normal Flags, I'm too lazy to explain everything so I just put here the list of them
    Anyway they didn't add any new, just removed some unused from 2003 devphase.

    enum EItemWearFlag
    {
    	WEARABLE_BODY		= (1 <<  0),
    	WEARABLE_HEAD		= (1 <<  1),
    	WEARABLE_FOOTS		= (1 <<  2),
    	WEARABLE_WRIST		= (1 <<  3),
    	WEARABLE_WEAPON		= (1 <<  4),
    	WEARABLE_NECK		= (1 <<  5),
    	WEARABLE_EAR		= (1 <<  6),
    	WEARABLE_UNIQUE		= (1 <<  7),
    	WEARABLE_SHIELD		= (1 <<  8),
    	WEARABLE_ARROW		= (1 <<  9),
    	WEARABLE_HAIR		= (1 << 10),
    	WEARABLE_ABILITY	= (1 << 11),
    	WEARABLE_PENDANT	= (1 << 12),
    };

    Here for a comment, they have just added the pendant as new, and changed the index of the unique with the shield.
    Also wondering when they are going to remove the unused wear ability flag, and its I dont know how many slots from the equipments .. :)
    Those were back in time couple of hidden items, for the collection quests bonus holder of the results, or whatever, stupid thing, unused, supposed to be removed. Done.

    The Immune flag is untouched, pf obviously because it is used for nothing at all rofl.

    About the LimitTypes, they removed the PC_BANG value, and its items, codes completely.

    typedef struct SItemTable
    {
    	DWORD			dwVnum;
    	DWORD			dwVnumRange;
    	char			szName[ITEM_NAME_MAX_LEN + 1];
    	char			szLocaleName[ITEM_NAME_MAX_LEN + 1];
    	BYTE			bType;
    	BYTE			bSubType;
    	BYTE			bWeight;
    	BYTE			bSize;
    	DWORD			dwAntiFlags;
    	DWORD			dwFlags;
    	DWORD			dwWearFlags;
    	DWORD			dwImmuneFlag;
    	DWORD			dwBuyItemPrice;
    	DWORD			dwSellItemPrice;
    	TItemLimit		aLimits[ITEM_LIMIT_MAX_NUM];
    	TItemApply		aApplies[ITEM_APPLY_MAX_NUM];
    	long			alValues[ITEM_VALUES_MAX_NUM];
    	long			alSockets[ITEM_SOCKET_MAX_NUM];
    	DWORD			dwRefinedVnum;
    	WORD			wRefineSet;
    	DWORD			dw67Material;
    	BYTE			bAlterToMagicItemPct;
    	BYTE			bSpecular;
    	BYTE			bGainSocketPct;
    	BYTE			bMaskType;
    	BYTE			bMaskSubType;
    } TItemTable;

    Okay, lets do this one too.
    So, as you can see here are couple of new values, compared to the old one from 2013. Let's roll over on the new values.
    dw67Material : This one will be the vnum for the 6th 7th bonus adder, which material is necessary to add the bonus to the item. You can read about this on the official wiki.
    bMaskType : This is used for the private shop search to categorize the items.
    bMaskSubType : This is also used for the private shop search to categorize the items.

     

    Last word about the item_proto: I will not put the types, subtypes, and their mask version and describe them because none of you will use it :).
    Coming up the mob_proto.

    enum EMobEnchants
    {
    	MOB_ENCHANT_CURSE,
    	MOB_ENCHANT_SLOW,
    	MOB_ENCHANT_POISON,
    	MOB_ENCHANT_STUN,
    	MOB_ENCHANT_CRITICAL,
    	MOB_ENCHANT_PENETRATE,
    	MOB_ENCHANTS_MAX_NUM,
    };

    Yes this is untoucheed. No, they didn't add bleeding as enchant to the mobs. It is an effect of some skills of the monsters in the zodiac temple.

    enum EMobResists
    {
    	MOB_RESIST_FIST,
    	MOB_RESIST_SWORD,
    	MOB_RESIST_TWOHAND,
    	MOB_RESIST_DAGGER,
    	MOB_RESIST_BELL,
    	MOB_RESIST_FAN,
    	MOB_RESIST_BOW,
    	MOB_RESIST_CLAW,
    	MOB_RESIST_FIRE,
    	MOB_RESIST_ELECT,
    	MOB_RESIST_MAGIC,
    	MOB_RESIST_WIND,
    	MOB_RESIST_POISON,
    	MOB_RESIST_BLEEDING,
    	MOB_RESISTS_MAX_NUM,
    };

    Here you can see couple of new values, all of them obvious, and readable to understand.
    But if it isn't...
    MOB_RESIST_FIST: Resist to fist, so when you hit the monster without weapon equipped and it has this defence value, the damage will be reduced.
    MOB_RESIST_CLAW: Resist against claw attacks, come on, I don't want to do this. :D
    MOB_RESIST_BLEEDING: Same as resist_poison just against of the bleeding.

    enum EMobElementaryWhatevers
    {
    	MOB_ELEMENTAL_ELEC,
    	MOB_ELEMENTAL_FIRE,
    	MOB_ELEMENTAL_ICE,
    	MOB_ELEMENTAL_WIND,
    	MOB_ELEMENTAL_EARTH,
    	MOB_ELEMENTAL_DARK,
    	MOB_ELEMENTAL_MAX_NUM
    };

    Without serverside these values are not understandable properly. Naturaly those monsters which has elemental resists they have this values as well on the same elemental.
    Forexample: Lets see the Death reaper(1093).
    He has UNDEAD and ATT_DARK as RaceFlag, 50% resist fist(just telling ;]), ElemDark=1 and resist dark "-20%"
    But some monsters are having these values 100+ which is.... no idea why. Zodiac monsters only if I'm not wrong.

    enum EMobAIFlags
    {
    	AIFLAG_AGGRESSIVE		= (1 << 0),
    	AIFLAG_NOMOVE			= (1 << 1),
    	AIFLAG_COWARD			= (1 << 2),
    	AIFLAG_NOATTACKSHINSU	= (1 << 3),
    	AIFLAG_NOATTACKJINNO	= (1 << 4),
    	AIFLAG_NOATTACKCHUNJO	= (1 << 5),
    	AIFLAG_ATTACKMOB		= (1 << 6),
    	AIFLAG_BERSERK			= (1 << 7),
    	AIFLAG_STONESKIN		= (1 << 8),
    	AIFLAG_GODSPEED			= (1 << 9),
    	AIFLAG_DEATHBLOW		= (1 << 10),
    	AIFLAG_REVIVE			= (1 << 11),
    	AIFLAG_HEALER			= (1 << 12),
    	AIFLAG_COUNT			= (1 << 13),
    	AIFLAG_NORECOVERY		= (1 << 14),
    	AIFLAG_REFLECT			= (1 << 15),
    	AIFLAG_FALL				= (1 << 16),
    	AIFLAG_VIT				= (1 << 17),
    	AIFLAG_RATTSPEED		= (1 << 18),
    	AIFLAG_RCASTSPEED		= (1 << 19),
    	AIFLAG_RHP_REGEN		= (1 << 20),
    	AIFLAG_TIMEVIT			= (1 << 21),
    };

    Here you can see many of new AIFlag values. I am not 100% sure about them, but here is what I think about these new values:
    AIFLAG_HEALER : This one is the healer, who will heal all members in its group.
    AIFLAG_COUNT : Who has this flag, you can make just 1 damage on it.
    AIFLAG_NORECOVERY : This will blocks the monster to recover its health.
    AIFLAG_REFLECT : <vice> With this flag the monster will be able to transform you into a monster, npc, or statue.
    AIFLAG_FALL : Ability to force you to fall off your mount.
    AIFLAG_VIT : <versa> Make your attack damage half, for 10 minutes, until the zodiac floor expires.
    AIFLAG_RATTSPEED : Reduces the speed of your attack.
    AIFLAG_RCASTSPEED : Reduces the speed of your skills, it means the cooldown of your skills will be increased.
    AIFLAG_RHP_REGEN : Reduces the regeneration of your health.
    AIFLAG_TIMEVIT : <versa> Make your attack damage half, for x seconds.

     

    About the vice-versa, those values are imaginable in switched description too.
    If the reflect is removing your attack damage with the half of it for x seconds then the VIT flags are the transformations.
    Forexample: the timevit is for tranforming you into monster, or mount for couple of seconds.
    the vit is for transforming you into a statue until the zodiac floor runs, or until one of your mate hits you.

    typedef struct SMobSkillLevel
    {
    	DWORD		dwVnum;
    	BYTE		bLevel;
    } TMobSkillLevel;
    
    typedef struct SMobTable
    {
    	DWORD		dwVnum;
    	char		szName[CHARACTER_NAME_MAX_LEN + 1];
    	char		szLocaleName[CHARACTER_NAME_MAX_LEN + 1];
    	BYTE		bType;
    	BYTE		bRank;
    	BYTE		bBattleType;
    	BYTE		bLevel;
    	BYTE		bScale;
    	BYTE		bSize;
    	DWORD		dwGoldMin;
    	DWORD		dwGoldMax;
    	DWORD		dwExp;
    	DWORD		dwMaxHP;
    	BYTE		bRegenCycle;
    	BYTE		bRegenPercent;
    	WORD		wDef;
    	DWORD		dwAIFlag;
    	DWORD		dwRaceFlag;
    	DWORD		dwImmuneFlag;
    	BYTE		bStr, bDex, bCon, bInt;
    	DWORD		dwDamageRange[2];
    	short		sAttackSpeed;
    	short		sMovingSpeed;
    	BYTE		bAggresiveHPPct;
    	WORD		wAggressiveSight;
    	WORD		wAttackRange;
    	char		cEnchants[MOB_ENCHANTS_MAX_NUM];
    	char		cResists[MOB_RESISTS_MAX_NUM];
    	char		cElementalFlags[MOB_ELEMENTAL_MAX_NUM];
    	char		cResistDark, cResistIce, cResistEarth;
    	DWORD		dwResurrectionVnum;
    	DWORD		dwDropItemVnum;
    	BYTE		bMountCapacity;
    	BYTE		bOnClickType;
    	BYTE		bEmpire;
    	char		szFolder[CHARACTER_FOLDER_MAX_LEN + 1];
    	float		fDamMultiply;
    	DWORD		dwSummonVnum;
    	DWORD		dwDrainSP;
    	DWORD		dwMonsterColor;
    	DWORD		dwPolymorphItemVnum;
    	TMobSkillLevel	Skills[MOB_SKILL_MAX_NUM];
    	BYTE		bBerserkPoint;
    	BYTE		bStoneSkinPoint;
    	BYTE		bGodSpeedPoint;
    	BYTE		bDeathBlowPoint;
    	BYTE		bRevivePoint;
    	BYTE		bHealPoint;
    	BYTE		bRAttSpeedPoint;
    	BYTE		bRCastSpeedPoint;
    	BYTE		bRHPRegenPoint;
    	FLOAT		fHitRange;
    } TMobTable;

    bScale: : Scale value between 50 and 200. It will resize the monster.
    cElementalFlags : So I've told you some info about this, I don't know more.
    cResistDark : This is a missing elemental resist, they have added it, I just don't really know why even there, not into the resists array, stupid.
    cResistIce : This is a missing elemental resist, they have added it, I just don't really know why even there, not into the resists array, stupid.
    cResistEarth : This is a missing elemental resist, they have added it, I just don't really know why even there, not into the resists array, stupid.
    bHealPoint : Healing percent for the healers.
    bRAttSpeedPoint : These can be used for what I've named them or the REFLECT or the VIT and TIMEVIT flags too, to give them special value, so it is still a questionmark.
    bRCastSpeedPoint : These can be used for what I've named them or the REFLECT or the VIT and TIMEVIT flags too, to give them special value, so it is still a questionmark.
    bRHPRegenPoint : These can be used for what I've named them or the REFLECT or the VIT and TIMEVIT flags too, to give them special value, so it is still a questionmark.
    fHitRange : Because the client is using its default value to make the checks, this one for sure is on serverside,
    to check the distance between the character and the monster to validate the attack, skill or the movement of the monsters. But still not 100%

     

    I hope it is understandable, my english isn't the best sorry for that.

    If I missed something let me know in PM.

     

    • Metin2 Dev 4
    • Confused 1
    • Good 3
    • Love 33
×
×
  • 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.