Дракан 39 Report post Posted October 30, 2021 Добрый вечер форумчане! Нужна помощь, помню как то решал ее, но забыл. При наведении курсора на аппарель не появляется значок атаки персонажа. Если память не изменяет это связано с моделями. https://skr.sh/sAmFBoBCzJN Другая аппарель при том же наведении https://skr.sh/sAmBirG9rFU Quote Share this post Link to post Share on other sites
e1mer 102 Report post Posted October 30, 2021 Не советую помогать этому человеку ничем. 1 Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted November 10, 2021 Привет, @Дракан! Попробуй сравнить строки этих аппарелей в ItemInfo.txt, возможно, там есть какие-то различия, влияющие на поведение курсора. @e1mer по существу вопроса советы будут? 1 Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
e1mer 102 Report post Posted November 11, 2021 22 часа назад, V3ct0r сказал: Привет, @Дракан! Попробуй сравнить строки этих аппарелей в ItemInfo.txt, возможно, там есть какие-то различия, влияющие на поведение курсора. @e1mer по существу вопроса советы будут? Нет конечно)) 1 Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted November 25, 2021 @Дракан, привет! Есть какие-нибудь результаты по решению проблемы? Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
Fomin 53 Report post Posted November 25, 2021 В 30.10.2021 в 21:16, Дракан сказал: Добрый вечер форумчане! Нужна помощь, помню как то решал ее, но забыл. При наведении курсора на аппарель не появляется значок атаки персонажа. Если память не изменяет это связано с моделями. https://skr.sh/sAmFBoBCzJN Другая аппарель при том же наведении https://skr.sh/sAmBirG9rFU Проблема именно с моделями, копай в этом направлении. ItemInfo тут не причем. 1 Quote Share this post Link to post Share on other sites
Kst 45 Report post Posted November 25, 2021 (edited) Судя по коду, проблема связана с матрицами самой модели (часть тела). Есть функция CWorldScene::CursorFrame, она вызывается раз в фрейм (30 раз в секунду) и отвечает за определение действия при наведении на цель. Вырезка из собственных исходников с комментариями: CCharacter* pCha = HitSelectCharacter(nMouseX, nMouseY, enumSC_ALL); // Ищет актера в позициях мышки (любого) if (pCha) { if (GetMainCha() != pCha) { CSkillRecord* pSkill = GetMainCha()->GetDefaultSkillInfo(); // Если используется дефолтный скилл (бить рукой) if (pCha->getEvent()) { // с целью можно взаимодействовать CancelHoverFrame(); if (_HaveEventCursor(pCha->getEvent(), GetMainCha()->GetMainType())) { // у цели есть свой курсор _cMouseDown.SetEvent(pCha, pCha->getEvent()); } else { CCursor::I()->SetFrame(CCursor::stStop); } return; } if (pCha->IsNPC()) { // Если выбранная цель NPC CancelHoverFrame(); CCursor::I()->SetFrame(CCursor::stChat); pCha->SetColor(_bAttackRed, _bAttackGreen, _bAttackBlue); _cMouseDown.SetNpc(pCha); return; } if (pSkill && g_SkillUse.IsAttack(pSkill, GetMainCha(), pCha) || g_pGameApp->IsCtrlPress()) { // Цель можно атаковать или зажат CTRL if (pCha->IsMonster() && !g_pGameApp->IsCtrlPress() || !pCha->IsMonster()) { // Если это монстр, то только если CTRL не зажат HoverFrame(pCha); CCursor::I()->SetFrame(CCursor::stAttack); pCha->SetColor(_bAttackRed, _bAttackGreen, _bAttackBlue); _cMouseDown.SetAttackCha(pSkill, pCha, CGameApp::GetCurTick()); return; } } if (pCha->IsPlayer()) { // Если выбранная цель игрок HoverFrame(pCha); CCursor::I()->SetFrame(CCursor::stMouse); pCha->SetColor(_bAttackRed, _bAttackGreen, _bAttackBlue); if (g_pGameApp->IsAltPress()) { CCursor::I()->SetFrame(CCursor::stActive); _cMouseDown.SetFollow(pCha); } return; } } return; } Тут нас интересует CCharacter* pCha = HitSelectCharacter(nMouseX, nMouseY, enumSC_ALL); // Ищет актера в позициях мышки (любого) Внутри которой идёт поиск цели в указанных координатах nMouseX и MouseY и срабатывает метод LW_RESULT MPCharacter::HitTestPrimitive(lwPickInfo* info, const lwVector3* org, const lwVector3* ray) { return _physique->HitTestPrimitive(info, org, ray); } А сам метод _physique->HitTestPrimitive пробегает по максимальному количеству примитив у модели и смотрит вхождение в каждую. lwPhysique::HitTestPrimitive(lwPickInfo* info, const lwVector3* org, const lwVector3* ray) LW_MAX_SUBSKIN_NUM равен 10 for (DWORD i = 0; i < LW_MAX_SUBSKIN_NUM; i++) { if ((imp_generic = _obj_seq[i]) == 0) continue; if (LW_SUCCEEDED(imp_generic->HitTest(&x, org, ray))) { if ((obj_id == LW_INVALID_INDEX) || (xx.dis > x.dis)) { xx = x; obj_id = i; } } } Исходя из этого можно сделать вывод, что проблема в том что imp_generic->HitTest возвращает отрицательный результат => не может найти вхождение nMouseX и nMouseY (относительно модели персонажа) в матрицу модели (часть тела). LW_RESULT lwPrimitive::HitTest(lwPickInfo* info, const lwVector3* org, const lwVector3* ray) { LW_RESULT ret = LW_RET_FAILED; if (_helper_object == 0) goto __ret; lwIBoundingSphere* bs = 0; lwIBoundingBox* bb = 0; lwMatrix44* mat = _render_agent->GetGlobalMatrix(); if ((bs = _helper_object->GetBoundingSphere()) != 0) { if (LW_SUCCEEDED(bs->HitTest(info, org, ray, mat))) goto __addr_ret_ok; } if ((bb = _helper_object->GetBoundingBox()) != 0) { if (LW_SUCCEEDED(bb->HitTest(info, org, ray, mat))) goto __addr_ret_ok; } goto __ret; __addr_ret_ok: ret = LW_RET_OK; __ret: return ret; } Вероятнее всего проблема связана с тем что модель экспортировали не той версией, которую использует игра (разная структуру) исправить это можно если только переделать модель или пере экспортировать. Edited November 25, 2021 by Kst 2 1 Quote Работаем над портированием пиратии под все платформы (win, linux, android, macos, ios) We are developing the tales of pirates to all platform (win, linux, android, macos, ios) telegram: https://t.me/magicsea_online Share this post Link to post Share on other sites