Jump to content

Recommended Posts

Posted (edited)

hello everyone merry christmas. maybe one of you smart ones can help me and give me a tip where in (java/j2r/gameserver/ai) can i change the distance between monster and player?

 

  my problem is, almost all monsters run into the player before they start attacking, so they are practically in the same place as the player.

 

  I would like to have all the monsters stick to the attack range... and don't run into the player. does anyone have any good advice/tips?

 

is it this ,found at code line 1255

 

                final L2Character target = getAttackTarget();
                if (target != null)
                {
                    if (target.isMoving())
                    {
                        range -= 100;
                    }
                    // moveToPawn(target, Math.max(range, 5));
                    moveTo(target.getLocation());
                }
            }
            return;

Edited by Vision
Posted

can you give us more information? All monsters should go to player first before attacking. (attacking will auto path to player if not in range...)

Posted
14 hours ago, HyperBlown said:

can you give us more information? All monsters should go to player first before attacking. (attacking will auto path to player if not in range...)

hello, yes the monsters run to the player and then they attack, that works fine. only they run into the player, so they are far too close to the player. you only see a bunch of monsters standing inside each other in the same place as the player. I would like to change that, that the monsters stop just in front of the player and don't run into him.

Posted
moveTo goes on the exact same spot than X/Y/Z. It uses MoveToLocation packet, which got no specific content about offset. Use moveToPawn to set and handle an offset.

If you can't use moveToPawn (for no reason, but let's say you can't), edit updatePosition in order to handle offset and call a stopMove if you reached the place (if offset > 0 and dist < offset return true). It's definitively not what L2OFF is supposed to do, but it will work.

Without proper offset calculation/handling, everything like bows etc will make you melee.
Posted
3 hours ago, Tryskell said:

moveTo goes on the exact same spot than X/Y/Z. It uses MoveToLocation packet, which got no specific content about offset. Use moveToPawn to set and handle an offset.

If you can't use moveToPawn (for no reason, but let's say you can't), edit updatePosition in order to handle offset and call a stopMove if you reached the place (if offset > 0 and dist < offset return true). It's definitively not what L2OFF is supposed to do, but it will work.

Without proper offset calculation/handling, everything like bows etc will make you melee.

many thanks for your tips. The problem is that I don't know anything about writing code. if you would be so kind and give me an example of how the code you gave me as a tip should look like, i would be extremely grateful.

Posted
Movement is a complex (not the hardest, but still) code, unfortunately giving you an "exemple" would be basically coding it for you. And launching yourself on such thing without experience is bad aswell.

Eventually, read old L2J code, movement is working "ok" - at least it doesn't have your type of issue. Try to mimic what exists, on whatever pack the feature is working on.

You can begin to quote moveTo and unquote moveToPawn and figure if it works better or not.
Posted
7 hours ago, Tryskell said:

Movement is a complex (not the hardest, but still) code, unfortunately giving you an "exemple" would be basically coding it for you. And launching yourself on such thing without experience is bad aswell.

Eventually, read old L2J code, movement is working "ok" - at least it doesn't have your type of issue. Try to mimic what exists, on whatever pack the feature is working on.

You can begin to quote moveTo and unquote moveToPawn and figure if it works better or not.

ok thanks for your help. I am going to try it.

Posted

final L2Character target = getAttackTarget();
                if (target != null)
                {
                    if (target.isMoving())
                    {
                        range -= 100;
                    }
                    // moveToPawn(target, Math.max(range, 5)); -- delete the "//"  

"//" if is if front of a code line , the compiler wont use that line in your code. so you can try with movetopawn and it should work normal.
                    moveTo(target.getLocation());     --- delete this line at all
                } 
            }

 

 

===============================================

final L2Character target = getAttackTarget();
                if (target != null)
                {
                    if (target.isMoving())
                    {
                        range -= 100;
                    }

                    moveTo(target.getLocation());   

if (!this.isInsideRadius(worldPosition.getX(), worldPosition.getY(), (int) (10+ target.getCollisionRadius()), false))
        {

            
            int x = target.getX();
            int y = target.getY();
            
            double dx = worldPosition.getX() - x;
            double dy = worldPosition.getY() - y;
            
            double dist = Math.sqrt(dx * dx + dy * dy);
            
            double sin = dy / dist;
            double cos = dx / dist;
            
            dist -= offset - 5;
            
            x += (int) (dist * cos);
            y += (int) (dist * sin);
            
            moveTo(x, y, worldPosition.getZ());
            
        }

                } 
            }

 

try this maybe is bullshit maybe works , you can check how a raidboss and minions not colide into eachother and addapt or maybe just use movetopawn best but probably someone added "//" bcs he know smth we don't.

Posted
On 12/27/2022 at 4:37 PM, LoVe+ said:

final L2Character target = getAttackTarget();
                if (target != null)
                {
                    if (target.isMoving())
                    {
                        range -= 100;
                    }
                    // moveToPawn(target, Math.max(range, 5)); -- delete the "//"  

"//" if is if front of a code line , the compiler wont use that line in your code. so you can try with movetopawn and it should work normal.
                    moveTo(target.getLocation());     --- delete this line at all
                } 
            }

 

 

===============================================

final L2Character target = getAttackTarget();
                if (target != null)
                {
                    if (target.isMoving())
                    {
                        range -= 100;
                    }

                    moveTo(target.getLocation());   

if (!this.isInsideRadius(worldPosition.getX(), worldPosition.getY(), (int) (10+ target.getCollisionRadius()), false))
        {

            
            int x = target.getX();
            int y = target.getY();
            
            double dx = worldPosition.getX() - x;
            double dy = worldPosition.getY() - y;
            
            double dist = Math.sqrt(dx * dx + dy * dy);
            
            double sin = dy / dist;
            double cos = dx / dist;
            
            dist -= offset - 5;
            
            x += (int) (dist * cos);
            y += (int) (dist * sin);
            
            moveTo(x, y, worldPosition.getZ());
            
        }

                } 
            }

 

try this maybe is bullshit maybe works , you can check how a raidboss and minions not colide into eachother and addapt or maybe just use movetopawn best but probably someone added "//" bcs he know smth we don't.

hi thank you very much for your code example and your time. I just did it with, moveToPawn(target, Math.max(range, 50)); instead of (range, 5)) and it works perfectly.

 

you seem to know your way around the code extremely well....perhaps you can help me with a problem that's really nagging at me. I do a lot of client modding and bring new monsters into the game,...with the UE2003, and with every new monster I noticed that the spine_rotation_animation is missing with a normal hit. do you perhaps know what the error could be,..or is it in the class_uc_file?

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