Page 1 of 1

geo indi spell info

Posted: Mon Sep 15, 2014 12:44 am
by dlsmd
GEO indi info has been found at lest for player
here is the info taken from windower files
the location is {ctype='unsigned char', label='Indi Buff', fn=e+{'indi'}}, -- 58

Code: Select all

enums.indi = {
    [0x5F] = 'Enemy Dark',
    [0x5E] = 'Enemy Light',
    [0x5D] = 'Enemy Water',
    [0x5C] = 'Enemy Lightning',
    [0x5B] = 'Enemy Earth',
    [0x5A] = 'Enemy Wind',
    [0x59] = 'Enemy Ice',
    [0x58] = 'Enemy Fire',
    [0x57] = 'Party Dark',
    [0x56] = 'Party Light',
    [0x55] = 'Party Water',
    [0x54] = 'Party Lightning',
    [0x53] = 'Party Earth',
    [0x52] = 'Party Wind',
    [0x51] = 'Party Ice',
    [0x50] = 'Party Fire',
    [0x00] = 'None',}

in binary the first 3 bits are the element the forth bit is target(buff/debuff) 0=ally 1=enemy the last 4 are unknown(beleaved to be size of the clourser)

-- Player update
-- Buff IDs go can over 0xFF, but in the packet each buff only takes up one byte.
-- To address that there's a 8 byte bitmask starting at 0x4C where each 2 bits
-- represent how much to add to the value in the respective byte.
fields.incoming[0x037] = L{
    {ctype='unsigned char[32]', label='Buff',               fn=buff},           -- 04
    {ctype='unsigned int',      label='Player',             fn=id},             -- 24
    {ctype='unsigned short',    label='_unknown1'},                             -- 28   Called "Flags" on the old dev wiki
    {ctype='unsigned char',     label='HP %',               fn=percent},        -- 29
    {ctype='unsigned char',     label='_unknown2'},                             -- 2A   May somehow be tied to current animation (old dev wiki)
    {ctype='unsigned char',     label='_unknown3'},                             -- 2B
    {ctype='unsigned char',     label='_unknown4'},                             -- 2C
    {ctype='unsigned char',     label='_unknown5'},                             -- 2D
    {ctype='unsigned char',     label='_unknown6'},                             -- 2E
    {ctype='unsigned char',     label='Status',             fn=status},         -- 30
    {ctype='unsigned char',     label='LS Color Red'},                          -- 31
    {ctype='unsigned char',     label='LS Color Green'},                        -- 32
    {ctype='unsigned char',     label='LS Color Blue'},                         -- 33
    {ctype='char[8]',           label='_unknown7'},                             -- 34   Player's pet index * 8?
    {ctype='unsigned int',      label='_unknown8'},                             -- 3C
    {ctype='unsigned int',      label='Timestamp',          fn=time},           -- 40
    {ctype='char[8]',           label='_unknown9'},                             -- 44
    {ctype='char[8]',           label='Bit Mask'},                              -- 4C
    {ctype='char[4]',           label='_unknown10'},                            -- 54
    {ctype='unsigned char',     label='Indi Buff',          fn=e+{'indi'}},     -- 58
    {ctype='char[3]',           label='_unknown11'},                            -- 59

Re: geo indi spell info

Posted: Mon Sep 15, 2014 12:45 am
by dlsmd
we have yet to find the clourser info for pet or npc

Re: geo indi spell info

Posted: Mon Sep 15, 2014 1:17 am
by kjLotus
the pet's animation is entirely a modelid, you can find it by trying high end @costume (2700+)

Re: geo indi spell info

Posted: Wed Dec 05, 2018 8:15 pm
by bluesolarflare
How would one go about implementing these buff ids in the core?

Re: geo indi spell info

Posted: Tue Dec 11, 2018 1:20 pm
by bluesolarflare
Nvm I have it now...need to add the effect in charupdate packet based on status effect.
If anyone is interested in adding the indi GEO bubble to their character when the spell is cast, here is the code below. You will need to create a fake status effect called EFFECT_INDI_(name) like I have below and reference it in status_effects.sql, status_effects.h, and status.lua. Change the last digit at the end of the = sign to match what element as shown in the table in the original post. For this example I chose light for refresh

Add the following line to to char_update.cpp under the if statement for sneak attack towards the top

Code: Select all

    if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_INDI_REFRESH))
    {
        ref<uint8>(0x58) = 0x56;
    }
And to call via lua

Code: Select all

function onSpellCast(caster,target,spell)
    caster:addStatusEffectEx(EFFECT_INDI_REFRESH,EFFECT_REFRESH_II,5,0,30)
	return 0;	
end;
The simple code above will add the effect for 30 seconds at a potency of 5mp/tic