Steelgar Опубликовано 20 сентября, 2018 Поделиться Опубликовано 20 сентября, 2018 (изменено) Ревизия: 31079М Моб: https://asterios.tm/index.php?cmd=bd#mob.drop.21524 Из него появляется: https://asterios.tm/index.php?cmd=bd#mob.drop.21525 Проблема в том, что очень редко появляется моб с ИД 21525. Судя по кол-ву убийств, шанс появления около 8%. Когда на оффе/ПТС там около 90% шанс появления. И что странно, второй моб сразу в таргете, чего быть не должно. моб с ИД 21525 не должен заменять 21524 моба, они оба должны быть. Скрины статов мобов и кол-ва убийств: Скрытый текст p.s. С этим изменением было бы быстрее там качаться. Изменено 21 сентября, 2018 пользователем Steelgar 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
GGumbo Опубликовано 22 сентября, 2018 Поделиться Опубликовано 22 сентября, 2018 20.09.2018 в 22:00, Steelgar сказал: Когда на оффе/ПТС там около 90% шанс появления. где доказательства? и нужны точные цифры 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Steelgar Опубликовано 22 сентября, 2018 Автор Поделиться Опубликовано 22 сентября, 2018 (изменено) Откуда можно взять их? Какому источнику верят? HF на оффе уже сто лет нету... Я там просто много часов на руоффе провел, это сразу бросается в глаза Изменено 22 сентября, 2018 пользователем Steelgar 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Steelgar Опубликовано 22 сентября, 2018 Автор Поделиться Опубликовано 22 сентября, 2018 (изменено) https://youtu.be/pnRY8bifaQc Вроде офф Изменено 22 сентября, 2018 пользователем Steelgar 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Steelgar Опубликовано 22 сентября, 2018 Автор Поделиться Опубликовано 22 сентября, 2018 (изменено) Нашел кусок кода из PTS сервера из файла ai.obj Вот данные по описанию моба 21524: Скрытый текст npc_begin warrior 21524 [brilliant_blade] category={} level=61 exp=146308200 ex_crt_effect=0 unique=0 s_npc_prop_hp_rate=1 race=divine sex=male skill_list={@s_npc_prop_race_divine;@s_npc_prop_hp_lv_p0;@s_npc_prop_mp_lv_p0;@s_npc_prop_pa_lv_p3;@s_npc_prop_ma_lv_p3;@s_npc_prop_pd_lv_n3;@s_npc_prop_md_lv_n3;@s_npc_prop_armor_type_n;@s_npc_prop_weapon_type_sword;@s_npc_critical_power;@s_npc_critical_chance} slot_chest=[] slot_rhand=[dagger_of_magicflame] slot_lhand=[] collision_radius={13;13} collision_height={26;26} hit_time_factor=0.52 hit_time_factor_skill=-1 ground_high={165;0;0} ground_low={50;0;0} str=40 int=21 dex=30 wit=20 con=43 men=20 org_hp=1985.55926 org_hp_regen=7.5 org_mp=1066.8 org_mp_regen=2.7 base_attack_type=sword base_attack_range=40 base_damage_range={0;0;80;120} base_rand_dam=30 base_physical_attack=501.08068 base_critical=4 physical_hit_modify=4.75 base_attack_speed=253 base_reuse_delay=0 base_magic_attack=342.17315 base_defend=252.49346 base_magic_defend=168.112997103103 base_attribute_attack={none;0} base_attribute_defend={20;20;20;20;53;-13;0} physical_avoid_modify=0 shield_defense_rate=0 shield_defense=0 safe_height=100 soulshot_count=0 spiritshot_count=0 clan={@saint_clan} ignore_clan_list={} clan_help_range=300 undying=0 can_be_attacked=1 corpse_time=7 no_sleep_mode=0 agro_range=300 passable_door=0 can_move=1 flying=0 has_summoner=0 targetable=1 show_name_tag=1 npc_ai={[brilliant_blade];{[MoveAroundSocial]=90};{[MoveAroundSocial1]=74};{[MoveAroundSocial2]=90};{[OtherSelf]=@brilliant_blade_1};{[OtherSelfAI]=[brilliant_blade_1]};{[IsMainForm]=1};{[SoulShot]=200};{[SoulShotRate]=5};{[SpiritShot]=100};{[SpiritShotRate]=10};{[LongRangeGuardRate]=10};{[PhysicalSpecial]=@s_npc_super_strike6};{[SelfBuff]=@s_npc_ultimate_evasion2};{[TeleportEffect]=@s_av_teleport}} event_flag={0} unsowing=0 acquire_exp_rate=33.6581388 acquire_sp=11024 acquire_rp=0 corpse_make_list={{[rp_blue_wolve's_leather_mail];1;1;2.7858};{[hose_of_shrnoen_fabric];1;1;35.2032};{[scrl_of_ench_am_b];1;1;2.4585}} additional_make_list={} additional_make_multi_list={{{{[adena];12990;26340;100}};100};{{{[shrnoen's_leather_shirts_low];1;1;3.6406};{[shrnoen's_leather_shirts_fabric];1;1;26.8656};{[avadon_leather_mail_low];1;1;2.2343};{[avadon_leather_mail_lining];1;1;20.6395};{[shrnoen's_leather_gaiters_low];1;1;5.8287};{[shrnoen's_leather_gaiters_texture];1;1;40.7913}};9.9134};{{{[iron_ore];1;1;18.124};{[coal];1;1;18.124};{[charcoal];1;1;18.124};{[animal_bone];1;3;8.0551};{[animal_skin];1;1;24.1653};{[rp_blue_wolve's_tunic];1;1;0.0752};{[general_61_b];1;1;0.3021};{[special_61_b];1;1;0.0755};{[rare_61_b];1;1;0.0076};{[unique_61_b];1;1;0.0015};{[silver_arrow];20;60;12.9457}};100}} ex_item_drop_list={{{{[herb_of_hp_a];1;1;55};{[greater_herb_of_hp_a];1;1;38};{[full_herb_of_hp_a];1;1;7}};42};{{{[herb_of_mp_a];1;1;7};{[greater_herb_of_mp_a];1;1;81};{[full_herb_of_mp_a];1;1;12}};11};{{{[herb_of_pa];1;1;20};{[herb_of_pa_speed];1;1;20};{[herb_of_crt_rate];1;1;20};{[vampiric_rage_herb];1;1;20};{[death_whisper_herb];1;1;20}};25};{{{[herb_of_ma];1;1;50};{[herb_of_ma_speed];1;1;50}};10};{{{[figher_herb];1;1;33};{[magician_herb];1;1;33};{[recovery_herb];1;1;34}};1};{{{[herb_of_move_speed];1;1;94};{[big_head_herb];1;1;3};{[vitality_herb1];1;1;3}};11}} npc_end Так вот в файле ai.obj класс моба (brilliant_blade) наследует класс saint_ninja, в котором как раз прописан шанс 80% (выделил в коде), когда моба кто то атакует, кто именно появляется прописан в описании моба выше OtherSelf =@brilliant_anguish_1 Админы легко могут сами проверить взяв файлы с PTS сервера. Кстати не один такой моб 21524, а 21531 (появляется из него 21658), 21539 (появляется из него 21540) Класс brilliant_blade: Скрытый текст class brilliant_blade : saint_ninja { handler: EventHandler MY_DYING(always_list, code_info, i4, i9, last_attacker, lparty, member, random1_list, target) { always_list = AllocCodeInfoList(); random1_list = AllocCodeInfoList(); target = last_attacker; if (HaveMemo(target, @darkness_falls_upon_the_dusk) == 1 && GetMemoState(target, @darkness_falls_upon_the_dusk) == 1 * 10 + 1) { random1_list.SetInfo(0, target); } if (HaveMemo(target, @darkness_falls_upon_the_dusk) == 1 && GetMemoState(target, @darkness_falls_upon_the_dusk) == 1 * 10 + 1) { random1_list.SetInfo(0, target); } if (IsNull(lparty) == 0) { for (i9 = 0; i9 < lparty.member_count; ++i9) { target = GetMemberOfParty(lparty, i9); if (HaveMemo(target, @darkness_falls_upon_the_dusk) == 1 && GetMemoState(target, @darkness_falls_upon_the_dusk) == 1 * 10 + 1) { random1_list.SetInfo(0, target); } } } target = last_attacker; if (HaveMemo(target, @temptation_of_power) == 1 && GetMemoState(target, @temptation_of_power) == 1 * 10 + 1) { random1_list.SetInfo(1, target); } if (HaveMemo(target, @temptation_of_power) == 1 && GetMemoState(target, @temptation_of_power) == 1 * 10 + 1) { random1_list.SetInfo(1, target); } if (IsNull(lparty) == 0) { for (i9 = 0; i9 < lparty.member_count; ++i9) { target = GetMemberOfParty(lparty, i9); if (HaveMemo(target, @temptation_of_power) == 1 && GetMemoState(target, @temptation_of_power) == 1 * 10 + 1) { random1_list.SetInfo(1, target); } } } while (IsNull(code_info = always_list.Next()) == 0) { code_info.code; } code_info = random1_list.RandomSelectOne(); if (IsNull(code_info) == 0) { select (code_info.code) { case 0: SetCurrentQuestID(@darkness_falls_upon_the_dusk); target = code_info.RandomSelectOne(); if (IsNull(target) == 0 && DistFromMe(target) <= 1500) { i4 = Rand(1000); if (i4 < 692) { if (OwnItemCount(target, @q_blood_of_kel_mahum) + 1 >= 300) { if (OwnItemCount(target, @q_blood_of_kel_mahum) < 300) { GiveItem1(target, @q_blood_of_kel_mahum, 300 - OwnItemCount(target, @q_blood_of_kel_mahum)); SoundEffect(target, "ItemSound.quest_middle"); SetFlagJournal(target, @darkness_falls_upon_the_dusk, 2); ShowQuestMark(target, @darkness_falls_upon_the_dusk); SetMemoState(target, @darkness_falls_upon_the_dusk, 1 * 10 + 2); } } else { GiveItem1(target, @q_blood_of_kel_mahum, 1); SoundEffect(target, "ItemSound.quest_itemget"); } } } break; case 1: SetCurrentQuestID(@temptation_of_power); target = code_info.RandomSelectOne(); if (IsNull(target) == 0 && DistFromMe(target) <= 1500) { i4 = Rand(1000); if (i4 < 714) { if (OwnItemCount(target, @q_gem_of_submission) + 1 >= 300) { if (OwnItemCount(target, @q_gem_of_submission) < 300) { GiveItem1(target, @q_gem_of_submission, 300 - OwnItemCount(target, @q_gem_of_submission)); SoundEffect(target, "ItemSound.quest_middle"); SetFlagJournal(target, @temptation_of_power, 2); ShowQuestMark(target, @temptation_of_power); SetMemoState(target, @temptation_of_power, 1 * 10 + 2); } } else { GiveItem1(target, @q_gem_of_submission, 1); SoundEffect(target, "ItemSound.quest_itemget"); } } } break; } } super; } } класс saint_ninja : Скрытый текст class saint_ninja : warrior_physicalspecial { parameter: int PhysicalSpecial = @s_npc_strike1; int SelfBuff = @s_self_might1; int IsMainForm = 1; int TeleportEffect = @s_self_might1; int OtherSelf = @orc; string OtherSelfAI = "saint_ninja"; handler: EventHandler CREATED() { myself.i_ai0 = 0; if (Skill_GetConsumeMP(SelfBuff) < myself.sm.mp && Skill_GetConsumeHP(SelfBuff) < myself.sm.hp && Skill_InReuseDelay(SelfBuff) == 0) { AddUseSkillDesire(myself.sm, SelfBuff, @ST_HEAL, @AMT_MOVE_TO_TARGET, 1000000); } if (IsMainForm == 0) { AddTimerEx(2000, 60000 * 5); } AddTimerEx(2001, 60000); super; } EventHandler ATTACKED(attacker, damage) { if (Rand(100) < 80 && IsMainForm == 1 && myself.i_ai0 == 0) { CreateOnePrivateEx(OtherSelf, OtherSelfAI, 0, 0, FloatToInt(myself.sm.x) + Rand(20), FloatToInt(myself.sm.y) + Rand(20), FloatToInt(myself.sm.z), 32768, 1000, GetIndexFromCreature(attacker), 1); myself.i_ai0 = 1; } super; } EventHandler TIMER_FIRED_EX(timer_id) { if (timer_id == 2000) { if (myself.p_state != PSTATE_ATTACK) { Despawn(); return; } else { AddTimerEx(2000, 60000 * 5); } } if (timer_id == 2001) { if (myself.p_state != PSTATE_ATTACK) { InstantRandomTeleportInMyTerritory(); if (Skill_GetConsumeMP(TeleportEffect) < myself.sm.mp && Skill_GetConsumeHP(TeleportEffect) < myself.sm.hp && Skill_InReuseDelay(TeleportEffect) == 0) { AddUseSkillDesire(myself.sm, TeleportEffect, @ST_HEAL, @AMT_MOVE_TO_TARGET, 1000000); } } AddTimerEx(2001, 60000 * 5); } super; } EventHandler CLAN_ATTACKED(attacker, damage, i6, h0, f0) { if (IsInCombatMode(myself.sm) == 0 && DistFromMe(attacker) > 300 && myself.sm.alive == 1) { InstantTeleport(myself.sm, FloatToInt(attacker.x), FloatToInt(attacker.y), FloatToInt(attacker.z)); if (Skill_GetConsumeMP(TeleportEffect) < myself.sm.mp && Skill_GetConsumeHP(TeleportEffect) < myself.sm.hp && Skill_InReuseDelay(TeleportEffect) == 0) { AddUseSkillDesire(myself.sm, TeleportEffect, @ST_HEAL, @AMT_MOVE_TO_TARGET, 1000000); } if (attacker.is_pc != 0 || IsInCategory(@summon_npc_group, attacker.class_id)) { f0 = 0; if (SetHateGroup >= 0) { if (IsInCategory(SetHateGroup, attacker.occupation)) { f0 = f0 + SetHateGroupRatio; } } if (attacker.occupation == SetHateOccupation) { f0 = f0 + SetHateOccupationRatio; } if (SetHateRace == attacker.race) { f0 = f0 + SetHateRaceRatio; } f0 = 1.0 * damage / (myself.sm.level + 7) + f0 / 100 * 1.0 * damage / (myself.sm.level + 7); AddAttackDesire(attacker, @AMT_MOVE_TO_TARGET, f0 * 30); } } else { super; } } } Изменено 22 сентября, 2018 пользователем Steelgar 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
h123 Опубликовано 22 сентября, 2018 Поделиться Опубликовано 22 сентября, 2018 20.09.2018 в 22:00, Steelgar сказал: И что странно, второй моб сразу в таргете, чего быть не должно. Разве он автоматом не агрит? 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Steelgar Опубликовано 23 сентября, 2018 Автор Поделиться Опубликовано 23 сентября, 2018 (изменено) У него есть особенность, что при появлении он телепортируется к игроку, если расстояние более 300 (событие CLAN_ATTACKED в классе saint_ninja) и он видит как атакуют его сородичей, т.е. если моб был убит 1 нюком и появился второй, он никуда не ТП. Этот момент запечатлен на видео выше в 2:07, когда моб ТП к игроку. "Разве он автоматом не агрит? " Тут можно спорить, не 100% же должен менять цель. Изменено 23 сентября, 2018 пользователем Steelgar 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
h123 Опубликовано 23 сентября, 2018 Поделиться Опубликовано 23 сентября, 2018 Спорить смысла нет, так как я не помню уже, как должно быть) Но насколько я помню, там если не 100/100 агров, то 99/100 точно - меня бесил этот аггр на топовом споте, первом. 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.