Creature Shared Data

z0n4r1e

Интересующийся
Местный
Сообщения
183
Розыгрыши
0
Репутация
175
Реакции
162
Баллы
358
Хроники
  1. Scions of Destiny
Исходники
Присутствуют
Сборка
Vanganth
Есть вот такой класс:
Подскажите есть ли поля отвечающие за
агрессивность и социальность или клан?

Код:
class CreatureSharedData
{
public:
    /* 0000 */ int    _dw0000;
    /* 0004 */ int    _dw0004;
    /* 0008 */ FVector Pos;
    /* 0020 */ WORD    sHeading;
    /* 0022 */ WORD us0022;
    /* 0024 */ UINT    nObjectID;
    /* 0028 */ int    nServerIndex;
    /* 002C */ int    nContainerIndex;
    /* 0030 */ int    _dw0030;
    /* 0034 */ int    _dw0034;
    /* 0038 */ int    _dw0038;
    /* 003C */ int    _dw003C;
    /* 0040 */ int    _dw0040;
    /* 0044 */ int    _dw0044;
    /* 0048 */ int    _dw0048;
    /* 004C */ int    _dw004C;
    /* 0050 */ int    nActiveUser;
    /* 0054 */ int    nSharedIndex;    //-1 - last or  used by const creature, -2 used by normal creature
    /* 0058 */ int    nNextIndex;    // -1 when used, else next sd index
    /* 005C */ int    _dw005C;    //0
    /* 0060 */ int    _dw0060;    //0
    /* 0064 */ int    nIsPC;        //1 player 0 - npc
    /* 0068 */ int    nAlive;        //1 - live 0- dead
    /* 006C */ int    _dw006C;    
    /* 0070 */ int    _dw0070;
    /* 0074 */ int    _dw0074;
    /* 0078 */ int    _dw0078;
    /* 007C */ int    _dw007C;
    /* 0080 */ int    _dw0080;
    /* 0084 */ int    _dw0084;
    /* 0088 */ int    _dw0088;
    /* 008C */ int    _dw008C;
    
    /* 0090 */ int    _dw0090; //Damage?
    /* 0094 */ int    nPrivateID;    //summon, private npc
    /* 0098 */ unsigned int    nSubClassIndex;
    /* 009C */ int    nNobless;    //0- none; 1- nobless;
    
    /* 00A0 */ int    nHero;    //0- none; 1- waiting; 2- hero;        
    /* 00A4 */ int    _dw00A4;
    /* 00A8 */ int    nNoblessIndex;
    /* 00AC */ int    nSubJobClass[4];
    /* 00BC */ int    nRace; // 0- human, 1- elf, 2- dark elf 3- orc, 4- dwarf, 23- mercenary, 24- castle_guard
    
    /* 00C0 */ int    nClass;
    /* 00C4 */ int    nSex;
    /* 00C8 */ WCHAR    wszName[25];
    /* 00FA */ bool    bUndying;
    /* 00FB */ bool    bCanBeAttacked;
    /* 00FC */ bool    bHide;
    /* 00FD */ bool    _b00FD;
    /* 00FE */ short    _w00FE;
    /* 0100 */ double fCollisionRadius; // NPC default 16
    /* 0108 */ double fCollisionHeight; // NPC default 1000
    /* 0110 */ int    nHairShape;
    /* 0114 */ int    nHairColor;    
    /* 0118 */ int    nFaceIndex;    
    /* 011C */ int    nExp;
    /* 0120 */ int    nSp;

    /* 0124 */ int nLastItemIndex; //first item in inventory
    /* 0128 */ int nEquipment[18]; //Item Index

    /* 0170 */ int    nDefaultINT;
    /* 0174 */ int    nDefaultSTR;
    /* 0178 */ int    nDefaultCON;
    /* 017C */ int    nDefaultMEN;
    /* 0180 */ int    nDefaultDEX;
    /* 0184 */ int    nDefaultWIT;
    
    /* 0188 */ double    fHP;
    /* 0190 */ double    fMP;
    /* 0198 */ double    fCP;
    
    /* 01A0 */ int m_MovingStatus; // MSTE_MOVING = 0x0,  MSTE_NOT_MOVING = 0x1,
    /* 01A4 */ int nMoveType;
    /* 01A8 */ int nStopMode;
    /* 01AC */ int m_Environment;    //  ENV_GROUND = 0x0,  ENV_UNDERWATER = 0x1,  ENV_AIR = 0x2,  ENV_HOVER = 0x3,  ENV_MAX = 0x4,
    /* 01B0 */ int _n1B0; //Used by CSPointer FindObjectSP
    /* 01B4 */ int _n1B8;
    /* 01B8 */ int nTargetIndex;
    /* 01BC */ UINT nTargetObjId;
    /* 01C0 */ int _n1C0;
    /* 01C4 */ bool bGuilty;    //1C5 - in siege zone
    /* 01C5 */ bool bSiegeGround; //freezed ?
    /* 01C6 */ bool bUnkn1C6;
    /* 01C7 */ bool bUnkn1C7;
    /* 01C8 */ int nPvpCount;
    /* 01CC */ int nPkCount;
    /* 01D0 */ int nPkPardon;
    /* 01D4 */ int nKarma;
    /* 01D8 */ USHORT _unkn1d8;
    /* 01DA */ SHORT nUsedSulffrage;
    /* 01DC */ int nEvalScore;
    
    /* 01E0 */ long nPvPAttackTimeStamp;
    /* 01E4 */ int nQuestDataU[16][4]; //QuestData
    /* 02E4 */ BYTE OneTimeQuestBitMap[32];
    /* 0304 */ int nQuestLastRewardTime;
    /* 0308 */ int nLastAttackerID;
    /* 030C */ int _n30C;
    /* 0310 */ int _n310;
    /* 0314 */ int _n314;
    /* 0318 */ int nPledgeID;
    /* 031C */ int _n31C;
    /* 0320 */ int nIsPledgeLeader;
    /* 0324 */ int nAllianceID;
    /* 0328 */ int _n328;
    /* 032C */ int nPartyID;
    /* 0330 */ int _n330;
    /* 0334 */ int _n334;
    /* 0338 */ int nResidenceID;
    /* 033C */ int _n33C;
    /* 0340 */ int nBossResidenceID; //in siege agit/npc battle agit etc
    /* 0344 */ int nYongmaType;
    /* 0348 */ int nYongmaClass;
    /* 034C */ UINT nStoreMode;    //PrivateStoreBuy - 3, PrivateStoreSell - 1, Dwarven Recipe - 5
    /* 0350 */ int _n350;
    /* 0354 */ int _n354;
    /* 0358 */ int _n358;
    /* 035C */ int nSoulshotGrade; //6- S 5-A 4-B 3-C 2-D 1-NG
    /* 0360 */ double dSoulshotPower; 
    /* 0368 */ int bSpiritshot; //Spiritshot /Blessed spiritshot = 1
    /* 036C */ int bIsRiding;
    
    /* 0370 */ double dSpiritShotPower;
    /* 0378 */ double dSpiritShotSkillReuseReduce;
    
    /* 0380 */ double _d0380;
    /* 0388 */ bool _b388; 
    /* 0389 */ bool _b389;
    /* 038A */ short _w38A;
    /* 038C */ int _n38C;
    /* 0390 */ int _n390;
    /* 0394 */ int nDuringRessurection;
    /* 0398 */ int _n398;
    /* 039C */ int _n39C;
    /* 03A0 */ int _n3A0;
    /* 03A4 */ int _n3A4;
    /* 03A8 */ int _n3A8;
    /* 03AC */ int _n3AC;
    /* 03B0 */ int _n3B0;
    /* 03B4 */ int _n3B4;
    /* 03B8 */ int _n3B8;
    /* 03BC */ int _n3BC;
    /* 03C0 */ int _n3C0;
    /* 03C4 */ int _n3C4;
    /* 03C8 */ int _n3C8;
    /* 03CC */ int nRessurectExp;    //percent of resurrected exp
    /* 03D0 */ int nRessurectTickCount;
    /* 03D4 */ int _n3D4;
    /* 03D8 */ int nIsNewbie;
    /* 03DC */ int nDBID;
    
    /* 03E0 */ int nDefaultWeaponType;
    /* 03E4 */ int _n3E4;
    /* 03E8 */ int nDefaultAttackRange;
    /* 03EC */ int nDefaultDamageRange[4];
    /* 03FC */ int nDefaultRandomDamage;

    /* 0400 */ int nDefaultBasePhysAttack;
    /* 0404 */ int _n404;
    /* 0408 */ int nDefaultBaseAttackSpeed;
    /* 040C */ int nDefaultBaseCritical;

    /* 0410 */ int _n410;
    /* 0414 */ int nBaseAttackSpeed;
    /* 0418 */ int nBaseCritical;

    /* 041C */ int nINT;
    /* 0420 */ int nSTR;
    /* 0424 */ int nCON;
    /* 0428 */ int nMEN;
    /* 042C */ int nDEX;
    /* 0430 */ int nWIT;
    
    /* 0434 */ int nHenna1;
    /* 0438 */ int nHenna2;
    /* 043C */ int nHenna3;
    /* 0440 */ int _n440;
    //=====================//
    /* 0444 */ int nLevel;
    /* 0448 */ int _n448;
    /* 044C */ int _n44C;
    /* 0450 */ int _n450;
    /* 0454 */ int _n454;
    /* 0458 */ int _n458;
    /* 045C */ int _n45C;
    /* 0460 */ int _n460;
    /* 0464 */ int _n464;
    /* 0468 */ int _n468;
    /* 046C */ int _n46C;
    /* 0470 */ int _n470;
    /* 0474 */ int _n474;
    /* 0478 */ int _n478;
    /* 047C */ int _n47C;
    /* 0480 */ int _n480;
    /* 0484 */ int _n484;
    /* 0488 */ int _n488;
    /* 048C */ int _n48C;
    /* 0490 */ int nMaxSlot;
    /* 0494 */ int nCurrSlot;
    /* 0498 */ int nCurrWeight;
    /* 049C */ int _n49C;
    /* 04A0 */ double fMaxLoad;
    /* 04A8 */ double fOrgHP;
    /* 04B0 */ double fOrgMP;
    /* 04B8 */ double fOrgCP; 
    /* 04C0 */ double MaxHP; 
    /* 04C8 */ double MaxMP;
    /* 04D0 */ double MaxCP; 
    /* 04D8 */ double _unkn4D8;
    /* 04E0 */ double _unkn4e0;
    /* 04E8 */ double _unkn4E8;// forgspeed ?
    /* 04F0 */ double hpRegen;
    /* 04F8 */ double mpRegen;
    /* 0500 */ double cpRegen;
    /* 0508 */ double _f508;
    /* 0510 */ double fSpeed;
    /* 0518 */ double fHit;
    /* 0520 */ double fAvoid;
    /* 0528 */ double _f528;
    /* 0530 */ double fNoise;
    /* 0538 */ double fAccuracy;
    /* 0540 */ double fEvasion;
    /* 0548 */ double accakSpeedBonus1_8;
    /* 0550 */ int _n550;
    /* 0554 */ int _n554;
    /* 0558 */ int _n558;
    /* 055C */ int _n55C;
    /* 0560 */ int _n560;
    /* 0564 */ int _n564;
    
    /* 0568 */ UINT nWeaponId; //WeaponID
    /* 056C */ UINT nWeaponType;        //none=0; sword= 1; blunt= 2; dagger= 3; pole= 4; fist= 5; bow= 6; etc= 7; dual=8; dualfist=9; fishing_rod=10;
    
    /* 0570 */ int _n570;        
    /* 0574 */ int nArmorType;
    /* 0578 */ int _n578;
    /* 057C */ int nWeaponRange;
    /* 0580 */ int nDamageRange1;
    /* 0584 */ int nDamageRange2;
    /* 0588 */ int nDamageRange3;
    /* 058C */ int nDamageRange4;
    /* 0590 */ int nWeaponRandomDmg;
    /* 0594 */ int nWeaponPhysDmg;
    /* 0598 */ int _n598;
    /* 059C */ int nWeaponAtkSpeed;
    /* 05A0 */ int _n5A0;
    /* 05A4 */ int nWeaponMagicDmg;
    /* 05A8 */ int _n5A8;
    /* 05AC */ int _n5AC;
    /* 05B0 */ double fPAtk;
    /* 05B8 */ double fPDef;
    /* 05C0 */ double fMAtk;
    /* 05C8 */ double fMDef;
    /* 05D0 */ double attackSpeed;
    /* 05D8 */ double criticalRate;    //final critical rate
    /* 05E0 */ double fBaseAtkSpeed;
    /* 05E8 */ double fBaseCastSpeed; //AtkSpeed
    /* 05F0 */ double castingSpeed;
    /* 05F8 */ int _n5F8;
    /* 05FC */ int _n5FC;
    /* 0600 */ int _n600;
    /* 0604 */ int _n604;
    /* 0608 */ int _n608;
    /* 060C */ int _n60C;
    /* 0610 */ int _n610;
    /* 0614 */ int _n614;
    /* 0618 */ int nBuilder;
    /* 061C */ int _n61C;
    /* 0620 */ int _n620;
    /* 0624 */ int _n624;
    /* 0628 */ int _n628;
    /* 062C */ int nLastBlowWeaponClassID;
    /* 0630 */ int nSSQRoundNumber;
    /* 0634 */ int nSSQPart;
    /* 0638 */ int nSSQPosition;;
    /* 063C */ int nSealSelectionNo;
    /* 0640 */ int nSSQPoints;
    /* 0644 */ int _n644;
    /* 0648 */ int _n648;
    /* 064C */ int _n64C;
    /* 0650 */ int _n650;
    /* 0654 */ int _n654;
    /* 0658 */ int _n658;
    /* 065C */ int _n65C;
    /* 0660 */ int nSSQDawnRound;
    /* 0664 */ int nInPeaceZone;
    /* 0668 */ int nInBattleField;
    /* 066C */ WCHAR wszAI[64];
    /* 06EC */ int _n6EC;
    /* 06F0 */ int _n6F0;
    /* 06F4 */ int _n6F4;
    /* 06F8 */ int _n6F8;
    /* 06FC */ int _n6FC;
    /* 0700 */ int _n0700;
    /* 0704 */ int _n0704;
    /* 0708 */ int _n0708;
    /* 070C */ int _n070C;
    /* 0710 */ int _n0710;
    /* 0714 */ int _n0714;
    /* 0718 */ int _n0718;
    /* 071C */ int _n071C;
    /* 0720 */ int _n0720;
    /* 0724 */ int _n0724;
    /* 0728 */ int _n0728;
    /* 072C */ int _n072C;
    /* 0730 */ int _n0730;
    /* 0734 */ int _n0734;
    /* 0738 */ int _n0738;
    /* 073C */ int _n073C;
    /* 0740 */ int _n0740;
    /* 0744 */ int _n0744;
    /* 0748 */ int _n0748;
    /* 074C */ int _n074C;
    /* 0750 */ int _n0750;
    /* 0754 */ int _n0754;
    /* 0758 */ int _n0758;
    /* 075C */ int _n075C;
    /* 0760 */ int _n0760;
    /* 0764 */ int _n0764; //Attacker SID ?
    /* 0768 */ UINT nSummonSpawnTick;
    /* 076C */ UINT nSummonExpireTime;    //in miliseconds 1200000 by default
    /* 0770 */ int _n0770;
    /* 0774 */ int _n0774;
    /* 0778 */ int nSummonType;
    /* 077C */ int _n077C; 
    /* 0780 */ UINT nMasterID;
    /* 0784 */ int _n0784;
    /* 0788 */ int nNpcClassID;
    /* 078C */ int nWeightPoint;
    /* 0790 */ int nRespawnTime;
    /* 0794 */ int _n0794;
    /* 0798 */ int _n0798;
    /* 079C */ int _n079C;
    /* 07A0 */ int _n07A0;
    /* 07A4 */ int _n07A4;
    /* 07A8 */ int _n07A8;
    /* 07AC */ int _n07AC;
    /* 07B0 */ int nClanHelpRange;
    /* 07B4 */ int _n07B4;
    /* 07B8 */ double AcquireExpRate;
    /* 07C0 */ int nPState;
    /* 07C4 */ int _n07C4;
    /* 07C8 */ int _n07C8;
    /* 07CC */ int _n07CC;
    /* 07D0 */ int nAvoidAgro; // BYTE bPassive
    /* 07D4 */ int _n07D4;
    /* 07D8 */ CreatureSharedData *pMasterSD;
    /* 07E0 */ int nAction;
    /* 07E4 */ int _n07E4;
    /* 07E8 */ int _n07E8;
    /* 07EC */ int _n07EC;
    /* 07F0 */ int _n07F0;
    /* 07F4 */ int nIsSpoiled; //byte
    /* 07F8 */ int _n07F8;
    /* 07FC */ int _n07FC;
    /* 0800 */ bool bCanBeSown;
    /* 0801 */ bool isSown;    //1 when seeded
    /* 0802 */ bool bUnkn802;
    /* 0803 */ bool bUnkn803;
    /* 0804 */ int nSeedType; // normal - 1 and alternative - 2
    /* 0808 */ UINT nSeederSID;
    /* 080C */ int _n080C;
    /* 0810 */ int _n0810;
    /* 0814 */ int nCurrentFeed;
    /* 0818 */ int nMaxFeed;
    /* 081C */ int nPetDBID;
    /* 0820 */ int nStriderLevel;
    /* 0824 */ int _n0824;
    /* 0828 */ int nMaxMagicLevel;
    /* 082C */ DWORD dHeroChatDelay; //Old AbnormalTable Start
    /* 0830 */ DWORD nSubJobManipulateDelay;
    /* 0834 */ int nNotUsed834;
    /* 0838 */ int nPledgeType;
    /* 083C */ int nCursedVictim;
    /* 0840 */ int nCursedOwner;
    /* 0844 */ UINT nAugmentationID;
    /* 0848 */ UINT nAugmentationTmp;
    /* 084C */ CDuelInfo DuelInfo;
    /* 0858 */ UINT nSponsorSID;
    /* 085C */ UINT nApprenticeSID;
    /* 0860 */ UINT nGetOffTimer;
    /* 0864 */ UINT activateOfflineShopTime;
    /* 0868 */ UINT _notUsed868;
    /* 086C */ int nSecondResurrection;
    /* 0870 */ int nPrivMsgFlag;
    /* 0874 */ int nPrivateStoreTimer;
    /* 0878 */ int nWaitingForMatch;
    /* 087C */ int nSpiritCounter;
    /* 0880 */ UINT nDeathPenalty;
    /* 0884 */ int nInCustomPvpZone;
    /* 0888 */ int nInSSQ_ZONE;
    /* 088C */ UINT nIsCCOwner;
    /* 0890 */ INT32 nCCPartyAmount;
    /* 0894 */ INT32 nCCMembersDistance;
    /* 0898 */ int nIsObserver;
    /* 089C */ int nInNickNameChangeZone;
    /* 08A0 */ int nInBlockSkillsZone;
    /* 08A4 */ int nInBlockItemsZone;
    /* 08A8 */ IVector spawnPos;
    /* 08B4 */ int buffedByBuffer;
    /* 08B8 */ int teamType;    /* 0 - None, 1 - Blue, 2 - Red */
    /* 08BC */ UINT nTimerTick;
    /* 08C0 */ UINT nProtectionTimeoutTmp;
    /* 08C4 */ BOOL nIsEpicNpc;
    /* 08C8 */ int nNotUsed8C8;    //End of OldAbnormal Table
    /* 08CC */ int nDBValue; 
    /* 08D0 */ int nDualGara1;
    /* 08D4 */ int nDualGara2;
    /* 08D8 */ int nTradeSkillLevel;
    /* 08DC */ int nMakerParam1;
    /* 08E0 */ int nMakerParam2;
    /* 08E4 */ int nMakerParam3;
    /* 08E8 */ __int64 n64_PledgePower1;
    /* 08F0 */ __int64 n64_PledgePower2;
    /* 08F8 */ __int64 n64_PledgePower3;
    /* 0900 */ __int64 n64_PledgePower4;
    /* 0908 */ BYTE bLang; //Korea=0, USA=1, Japan=2, Taiwan=3, China=4, Thailand=5
    /* 0909 */ BYTE bUnkn909;
    /* 090A */ short w90A;
    /* 090C */ int n90C;
    /* 0910 */ int AbnormalTable[40][2]; //AbnormalType, Level
    /* 0A50 */ CExData *pExData;
    /* 0A58 */ QuestData Quests[26];
    /* 0BF8 */ int vipLevel;    /* vip level */
    /* 0BFC */ DWORD vipTimestamp;    /* timestamp for vip - expiration time */
    /* 0C00 */ int _notUsedC00;
    /* 0C04 */ int _notUsedC04;
    /* 0C08 */ DWORD notUserdC08;

        bool RemoveMemo(int nQuestID);
        void DeleteAbnormalStatus(int nAbnormalType);
        void AddAbnormalStatus(int nAbnormalType, int nLevel);
        bool SetMemo(int QuestID, int Slot, int State);    //Slot = 1 perhaps create
};
 
Переменнта inCombatMode в классе CCreature
C++:
bool User::InCombat()
{
    if(ValidUser())
        return inCombatMode;
    else
        return false;
}

В шареддате
C++:
int nPledgeID;


Я думаю где то в шареддате тоже есть в атаке/спокоен, но ванг не отреверсил структуру до конца, в классике 166 есть вроде, можете сами поискать в Ida сравнив некоторые функции с пдб от 162
 
Просто хочу реализовать отображение уровня агрессивности и социальности в титле моба на уровне сервака без изменения клиента. Уровень уже реализован nLevel есть а вот остального пока не нашел.
 
It kinda depends on AI itself, each class (superclass) can have different aggressivity. Aggresivity itself can be even overwrited in npcdata/npcpos in params.
 
Аа, вы про уровень агрессии, да есть в шареддате, но у ванги нет в структуре, найдите в пдб от 162 функцию, где используется эта переменная, и найдите в своем с4 эту функцию и добавьте к себе в структуру по оффсету, делов то на три копейки.
 
Вы этот pdb имеете ввиду? Чем искать не подскажите? Какую переменную?
 

Вложения

  • ServerApp64.zip
    1,4 МБ · Просмотры: 5
Рано вы в птс полезли, почитайте что такое реверс инжиниринг, Ida pro, pdb файл отладки. Пдб файл для l2server.exe 162 протокола, что в шаре, он же тоталчекер. пдб , потом открываете свой l2server.exe. с4 и ищите ту же функцию, где используется эта переменная, по оффсету смотрите, где она находится и в своем расширителе меняете скорее всего тип int unk0.... на int Aggression; название сами придумайте своей переменной, или назовите как в 162 сервере
 
Спасибо. Скажу только что ваше объяснение крайне тяжёлое.
 
Спасибо. Скажу только что ваше объяснение крайне тяжёлое.
Это я вам честно разжевал, я когда учился этому, мне тоже так же на один мой вопрос ответили, и я решил, что надо вникать, потратил усердно больше года. Птс сфера это очень сложное математическое изобретение, которое включает в себя не только написание экста на с++, а еще дизасемблирование оригинального кода, перехват функций целеком или промежуточных значений, восстановление структур классов и многое другое. Введите в гугле обучение реверс инжинирингу в Ida pro. И сами все увидите.
 
Назад
Сверху Снизу