Jump to content
  • 0

Interlude NPC Buffer & Performance Question


Question

Posted

Hello everybody, I'm having a little bit of trouble.

 

I've been trying to use examples from other NPC buffers which seem to cast 'instantly' sort of.

What I had in mind was to allow the player to create different sets of buffs that they can also pick from later. I've defined two classes inside L2PcInstance:

 

ZCL_BUFF_ROW and ZCL_BUFF_TABLE.

Each instance of L2PcInstance has an object ZCL_BUFF_TABLE. The object_id of the character is passed to the constructor of this class and then the results are placed into hashtables:

 

private Hashtable<Integer,Integer> _buff_ids;

So the character has 24 values for 24 buffs.

 

In the above class, ZCL_BUFF_TABLE, there is another hashtable I've made to store the rows off buffs so a character can have multiple presets.

private Hashtable<Integer, zcl_buff_row> _buff_table;

 

The problem comes in later at the NPC buffer itself. I normally see that the useMagic() function is called at the Python script, but I wasn't sure if I'd be able to iterate across a java hashtable inside python. So I implemented two functions:

 

// Method of ZCL_BUFF_TABLE	
public void STApplyBuffRow(QuestState st, int index)
{
st.getPlayer().setTarget( st.getPlayer() );
_buff_table.get(index).STapplyBuffs(st);
}

// Method of ZCL_BUFF_ROW
public void STapplyBuffs(QuestState st)
{
L2Skill skill = null;
for ( int b_id : _buff_ids.values() )
{
	skill = SkillTable.getInstance().getInfo( b_id, 1 );
	st.getPlayer().useMagic(skill, false, false);
}
}

 

I'm passing the QuestState to the functions so I can apply the buffs to player in the Java code and just place the function

st.getPlayer().getBuffTable().STApplyBuffRow(st,1)

In the python code. However, what ends up happening is the player casts the buffs and it takes a long time which really isn't what I'm looking for. When I was looking at other examples, it's almost instant.

 

AND one last question.

I'm also new to java. I've taken peaks at the L2j server before but now I'm a bit more serious about it. I'm wondering though how in the long run will making additions to the player class affect the performance? For example, is a Hashtable in java an effecient way to store this list or is there perhaps a faster way?

3 answers to this question

Recommended Posts

  • 0
Posted

Ah sorry everybody, I figured it out. The NPC Buffers I was using as an example were using the clan hall buffs and such.

The line

st.getPlayer().useMagic(...)

 

I've switched too:

SkillTable.getInstance().getInfo(...).getEffects(st.getPlayer(),st.getPlayer())

 

Though the question still stands on the performance, though it's not an issue right now I'd like to know for the future.

  • 0
Posted

if you are going to use big map use then fastmap

http://javolution.org/target/site/apidocs/javolution/util/FastMap.html

 

and i dont know why do you need new classes, for the tables

you can just use a

ArrayList <ArrayList<Integer> >

 

 

Well I wanted to have my own interface seperate from the existing code, I'll take a look into that. Thanks!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • The character stops walking when using a mana potion. any can help me?   IemData item_begin    etcitem    728    [mana_potion]    item_type=etcitem    slot_bit_type={none}    armor_type=none    etcitem_type=potion    recipe_id=0    blessed=0    weight=180    default_action=action_skill_reduce    consume_type=consume_type_stackable    initial_count=1    maximum_count=20    soulshot_count=0    spiritshot_count=0    reduced_soulshot={}    reduced_spiritshot={}    reduced_mp_consume={}    immediate_effect=1    price=0    default_price=2000    item_skill=[s_mana_potion]    critical_attack_skill=[none]    attack_skill=[none]    magic_skill=[none]    item_skill_enchanted_four=[none]    material_type=liquid    crystal_type=none    crystal_count=0    is_trade=1    is_drop=1    is_destruct=1    physical_damage=0    random_damage=0    weapon_type=none    can_penetrate=0    critical=0    hit_modify=0    avoid_modify=0    dual_fhit_rate=0    shield_defense=0    shield_defense_rate=0    attack_range=0    damage_range={}    attack_speed=0    reuse_delay=10000    mp_consume=0    magical_damage=0    durability=0    damaged=0    physical_defense=0    magical_defense=0    mp_bonus=0    category={}    enchanted=0    html=[item_default.htm]    equip_pet={@ALL_PET}    magic_weapon=0    enchant_enable=0    can_equip_sex=-1    can_equip_race={}    can_equip_change_class=-1    can_equip_class={}    can_equip_agit=-1    can_equip_castle=-1    can_equip_castle_num={}    can_equip_clan_leader=-1    can_equip_clan_level=-1    can_equip_hero=-1    can_equip_nobless=-1    can_equip_chaotic=-1    item_end   SkillData   skill_begin    skill_name=[s_mana_potion]    skill_id=50004    level=1    operate_type=A2    magic_level=1    effect={{t_mp;57;3}}    is_magic=0    mp_consume2=0    cast_range=-1    effective_range=-1    skill_hit_time=0    skill_cool_time=0    skill_hit_cancel_time=0    reuse_delay=0    activate_rate=-1    lv_bonus_rate=0    basic_property=none    abnormal_time=15    abnormal_lv=1    abnormal_type=mp_recovery    attribute=attr_none    effect_point=0    target_type=self    affect_scope=single    affect_limit={0;0}    next_action=none    debuff=0    ride_state={@ride_none}    skill_end  
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock