Dota 2 Workshop Tools (Глоссарий, общие обсуждения, вопросы)
121975
1534
doter.ua сказал(а):↑Копаясь в различных доках и исходниках приобрел немного знаний про Scripting, которые изложу в этом посте. (Вся работа в файле addon_game_mode.lua)
Вкратце о чем пойдет речь:
- Обработка событий
- Как получить доступ к герою
- Что дает этот доступ? например можно изменить:
- Текущее ХП,
- Золото,
- Увеличить Макс. запас ХП и т.д.
Итак, в этой теме уже было пару сообщений про события, но объяснять другие пункты не рассказав про события будет неправильно.
1) Под событием подразумевается блок кода, который будет выполнен, когда это событие произойдет.
2) К сожалению список таких событий я не нашел. (Подсмотрел пару штук в Исходниках) например когда погибает юнит, когда герой кастует заклинание, когда герой респавнится и т.д.
3) Пример события это простая функция:
function ИмяМода:Имя_События() // имя мода например DotaPvP (задается вначале)
Какие-нибудь действия
end
4) Событию нужно написать слушателя listener. Делается это в блоке
function ИмяМода:InitGameMode()
бла бла
ListenToGameEvent('любое_имя', Dynamic_Wrap(ИмяМода, 'Имя_события'), self)
бла бла
end
5) В примере будем работать с событием AbilityUsed - когда используется заклинание.
ИмяМетода - DotaPvP.
В самом низу документа вставим нашу функцию:
function DotaPvP:AbilityUsed()
print('[DotaPvP] AbilityUsed')
end
Для начала просто выведем сообщение в консоль методом print('текст')
![]()
6) API методы из доков вольво
https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/API
В разделе (по ссылке выше) список доступных методов.
- Часть из них можно вызвать просто скопировав название и передав параметры
Название_Метода( параметр_1, параметр_2 )
- Другая часть вызывается с помощью классов, методами которых они являются
чудо_класс:Название_Метода( параметр_1, параметр_2 )
Все методы делятся по разделам, у раздела Global стоит описание "Global functions. These can be called without any class" - могут вызываться без класса, то есть это та самая "первая часть", о которой я упоминал выше.
Однако есть разделы, в описании которых это не указано, тем не менее методы от туда так же вызываются без классов. Впрочем, с опытом, можно легко определить: вызывается ли тот или иной метод без класса.
Итак возьмем метод GameRules:SetGoldPerTick(5) где 5 - (число) кол-во золота, которое дается игроку за тик (просто капает со временем), GameRules - название раздела, SetGoldPerTick собственно сам метод. Между ними двоеточие - обязательный элемент.
Куда вставлять этот метод? туда же, где и слушатели listener (см. пункт 4)
7) Теперь перейдем к самому интересному - доступ к герою.
Да да речь пойдет про методы, которые нуждаются в классе.
Официального описания я не нашел (Но раздел scripting постоянно пополняется новыми разделами, надеюсь разрабы добавят инфы про нашу тему)
Скитаясь по разным исходникам.lua набрел на класс PlayerResource он позволяет получить доступ к герою.
Прелесть в том, что сам класс PlayerResource уже создан (наверно где-то в исходниках c++, да какая разница где, главное он есть) нужно всего лишь написать PlayerResource традиционное двоеточие и добавить метод из Раздела
CDOTA_PlayerResource
Возможно есть классы похожие на PlayerResource которые обеспечат доступ ко всем "нуждающимся в классах методам" Но я только 3 дня назад поставил Workshop tools на закачку и сам еще толком не разобрался.
8) Итак в разделе CDOTA_PlayerResource есть методы:
HasSelectedHero( число) - возвращает true\false если есть пикнутый герой (судя из названия)
GetSelectedHeroEntity( число) - возвращает класс, способный работать с методами из раздела CBaseEntity - собственно в нем и находятся методы, которые позволяют манипулировать над героем.
Объявим переменную local hero = PlayerResource:GetSelectedHeroEntity( номер )
- local - модификатор области видимости (сейчас это не важно)
- hero - просто название (Герой интуитивно понятно, что для работы с героем)
Что касается HasSelectedHero этот метод используется для проверки, вдруг ни одного героя не пикнули, а мы попробуем вызвать метод, который использует пикнутых героев.
Эта проверка была в блоке кода, в котором я и нашел класс PlayerResource.
9) Итак мы получили переменную (класс) hero с ее помощью сделаем следущее:
Все как раньше: ищем нужные методы в соответствующем разделе. (в случае с hero в разделе CBaseEntity)
- local maxHp = hero:GetMaxHealth() // текущий макс запас ХП.
- hero:SetMaxHealth( maxHp + 500 )
// ставим новый запас на 500 больше.- hero:SetHealth( maxHp + 500 )
// текущее хп = макс запасу (фулл).
Все это дело в цикле (блок повторяющийся заданное кол-во раз) по итерации (один обход цикла) на каждого героя.
Так же будем добавлять золото
PlayerResource:ModifyGold(nPlayerID, 500, false, 1)
- nPlayerID - id номер игрока (игроки нумеруются от 0) мы передаем переменную из цикла (это номер обхода цикла, т.е. если 10 игроков, то тело цикла сработает 10 раз и nPlayerID номер конкретного обхода.)
- 500 - кол-во голды
- false - boolean значение (надежное ли золото, которое не теряется при смерти)
- последний параметр - хз, просто принимает число(в описании нет ничего)
Стоит отметить, что цикл срабатывает для всех героев, независимо от того кто кастанул, чтобы делать для каждого героя отдельно нужно знать ID player который кастанул. и для этого ID уже делать манипуляции, я же не задумывался над тем где взять Конкретный ID, а просто для примера взял цикл со всеми героями (тем более тестил все сам, у меня то был всего один герой.)
итак ФУЛЛ КОД
Спойлер: "КОД"print( "Dota PvP game mode loaded." )
if DotaPvP == nil then
DotaPvP = class({})
end
-- ACTIVATE
function Activate()
GameRules.DotaPvP = DotaPvP()
GameRules.DotaPvP:InitGameMode()
end
-- INIT
function DotaPvP:InitGameMode()
local GameMode = GameRules:GetGameModeEntity()
-- Enable the standard Dota PvP game rules
GameRules:GetGameModeEntity():SetTowerBackdoorProtectionEnabled( true )
-- Register Think
GameMode:SetContextThink( "DotaPvP:GameThink", function() return self:GameThink() end, 0.25 )
-- Register Game Events
GameRules:SetGoldPerTick(5)
--listeners
ListenToGameEvent('dota_player_used_ability', Dynamic_Wrap(DotaPvP, 'AbilityUsed'), self)
end
--------------------------------------------------------------------------------
function DotaPvP:GameThink()
return 0.25
end
function DotaPvP:AbilityUsed()
print('[DotaPvP] AbilityUsed')
-- Цикл от 0 до системной константы DOTA_MAX_TEAM_PLAYERS
for nPlayerID = 0, DOTA_MAX_TEAM_PLAYERS-1 do
if PlayerResource:HasSelectedHero( nPlayerID ) then
local hero = PlayerResource:GetSelectedHeroEntity( nPlayerID )
local maxHp = hero:GetMaxHealth()
hero:SetMaxHealth( maxHp + 500 )
hero:SetHealth( maxHp + 500 )
PlayerResource:ModifyGold(nPlayerID, 500, false, 1)
end
end
end
Спойлер: "КОД"
Если пост будет полезный можно закрепить в шапку :blush:
Нажмите, чтобы раскрыть...
Мы это уже проходили, +1 пост, потом еше +1 пост, потом шапку уже не смотрят. Создавай отдельную тему, перед темой вот так [] и в них по английски гайд. Я потом создам общую тему и туда буду только ссылки выкладывать, иначе мы просто утонем в этом д"рме.
Вот основные события в доте, которые можно подслушать.
Делал вручную из файлов доты, дерзайте.
Спойлер: "Events to listen""dota_player_kill" "dota_player_deny" "dota_barracks_kill" "dota_tower_kill" "dota_roshan_kill" "dota_courier_lost" "dota_courier_respawned" "dota_glyph_used" "dota_super_creeps" "dota_item_purchase" "dota_item_gifted" "dota_rune_pickup" "dota_rune_spotted" "dota_item_spotted" "dota_no_battle_points" "dota_chat_informational" "dota_action_item" "dota_chat_ban_notification" "dota_chat_event" "dota_chat_timed_reward" "dota_pause_event" "dota_chat_kill_streak" "dota_chat_first_blood" "dota_player_update_hero_selection" "dota_player_update_selected_unit" "dota_player_update_query_unit" "dota_player_update_killcam_unit" "dota_player_take_tower_damage" "dota_hud_error_message" "dota_action_success" "dota_starting_position_changed" "dota_money_changed" "dota_enemy_money_changed" "dota_portrait_unit_stats_changed" "dota_portrait_unit_modifiers_changed" "dota_force_portrait_update" "dota_inventory_changed" "dota_item_picked_up" "dota_inventory_item_changed" "dota_ability_changed" "dota_portrait_ability_layout_changed" "dota_inventory_item_added" "dota_inventory_changed_query_unit" "dota_link_clicked" "dota_set_quick_buy" "dota_quick_buy_changed" "dota_player_shop_changed" "dota_player_show_killcam" "dota_player_show_minikillcam" "gc_user_session_created" "team_data_updated" "guild_data_updated" "guild_open_parties_updated" "fantasy_updated" "fantasy_league_changed" "fantasy_score_info_changed" "player_info_updated" "game_rules_state_change" "match_history_updated" "match_details_updated" "live_games_updated" "recent_matches_updated" "news_updated" "persona_updated" "tournament_state_updated" "party_updated" "lobby_updated" "dashboard_caches_cleared" "last_hit" "player_completed_game" "player_reconnected" "nommed_tree" "dota_rune_activated_server" "dota_player_gained_level" "dota_player_learned_ability" "dota_player_used_ability" "dota_non_player_used_ability" "dota_ability_channel_finished" "dota_holdout_revive_complete" "dota_player_killed" "bindpanel_open" "bindpanel_close" "keybind_changed" "dota_item_drag_begin" "dota_item_drag_end" "dota_shop_item_drag_begin" "dota_shop_item_drag_end" "dota_item_purchased" "dota_item_used" "dota_item_auto_purchase" "dota_unit_event" "dota_quest_started" "dota_quest_completed" "gameui_activated" "gameui_hidden" "player_fullyjoined" "dota_spectate_hero" "dota_match_done" "dota_match_done_client" "set_instructor_group_enabled" "joined_chat_channel" "left_chat_channel" "gc_chat_channel_list_updated" "today_messages_updated" "file_downloaded" "player_report_counts_updated" "scaleform_file_download_complete" "item_purchased" "gc_mismatched_version" "demo_skip" "demo_start" "demo_stop" "map_shutdown" "dota_workshop_fileselected" "dota_workshop_filecanceled" "rich_presence_updated" "dota_hero_random" "dota_rd_chat_turn" "dota_favorite_heroes_updated" "profile_opened" "profile_closed" "item_preview_closed" "dashboard_switched_section" "dota_tournament_item_event" "dota_hero_swap" "dota_reset_suggested_items" "halloween_high_score_received" "halloween_phase_end" "halloween_high_score_request_failed" "dota_hud_skin_changed" "dota_inventory_player_got_item" "player_is_experienced" "player_is_notexperienced" "dota_tutorial_lesson_start" "map_location_updated" "richpresence_custom_updated" "game_end_visible" "antiaddiction_update" "highlight_hud_element" "hide_highlight_hud_element" "intro_video_finished" "matchmaking_status_visibility_changed" "practice_lobby_visibility_changed" "dota_courier_transfer_item" "full_ui_unlocked" "client_connectionless_packet" "hero_selector_preview_set" "antiaddiction_toast" "hero_picker_shown" "hero_picker_hidden" "dota_local_quickbuy_changed" "show_center_message" "hud_flip_changed" "frosty_points_updated" "defeated" "reset_defeated" "booster_state_updated" "event_points_updated" "local_player_event_points" "custom_game_difficulty" "tree_cut" "ugc_details_arrived" "ugc_subscribed" "ugc_unsubscribed" "prizepool_received" "microtransaction_success" "dota_rubick_ability_steal" "compendium_event_actions_loaded" "compendium_selections_loaded" "compendium_set_selection_failed" "community_cached_names_updated" "spec_item_pickup" "spec_aegis_reclaim_time"
6o6uK сказал(а):↑Вот основные события в доте, которые можно подслушать.
Делал вручную из файлов доты, дерзайте.
Спойлер: "Events to listen""dota_player_kill" "dota_player_deny" "dota_barracks_kill" "dota_tower_kill" "dota_roshan_kill" "dota_courier_lost" "dota_courier_respawned" "dota_glyph_used" "dota_super_creeps" "dota_item_purchase" "dota_item_gifted" "dota_rune_pickup" "dota_rune_spotted" "dota_item_spotted" "dota_no_battle_points" "dota_chat_informational" "dota_action_item" "dota_chat_ban_notification" "dota_chat_event" "dota_chat_timed_reward" "dota_pause_event" "dota_chat_kill_streak" "dota_chat_first_blood" "dota_player_update_hero_selection" "dota_player_update_selected_unit" "dota_player_update_query_unit" "dota_player_update_killcam_unit" "dota_player_take_tower_damage" "dota_hud_error_message" "dota_action_success" "dota_starting_position_changed" "dota_money_changed" "dota_enemy_money_changed" "dota_portrait_unit_stats_changed" "dota_portrait_unit_modifiers_changed" "dota_force_portrait_update" "dota_inventory_changed" "dota_item_picked_up" "dota_inventory_item_changed" "dota_ability_changed" "dota_portrait_ability_layout_changed" "dota_inventory_item_added" "dota_inventory_changed_query_unit" "dota_link_clicked" "dota_set_quick_buy" "dota_quick_buy_changed" "dota_player_shop_changed" "dota_player_show_killcam" "dota_player_show_minikillcam" "gc_user_session_created" "team_data_updated" "guild_data_updated" "guild_open_parties_updated" "fantasy_updated" "fantasy_league_changed" "fantasy_score_info_changed" "player_info_updated" "game_rules_state_change" "match_history_updated" "match_details_updated" "live_games_updated" "recent_matches_updated" "news_updated" "persona_updated" "tournament_state_updated" "party_updated" "lobby_updated" "dashboard_caches_cleared" "last_hit" "player_completed_game" "player_reconnected" "nommed_tree" "dota_rune_activated_server" "dota_player_gained_level" "dota_player_learned_ability" "dota_player_used_ability" "dota_non_player_used_ability" "dota_ability_channel_finished" "dota_holdout_revive_complete" "dota_player_killed" "bindpanel_open" "bindpanel_close" "keybind_changed" "dota_item_drag_begin" "dota_item_drag_end" "dota_shop_item_drag_begin" "dota_shop_item_drag_end" "dota_item_purchased" "dota_item_used" "dota_item_auto_purchase" "dota_unit_event" "dota_quest_started" "dota_quest_completed" "gameui_activated" "gameui_hidden" "player_fullyjoined" "dota_spectate_hero" "dota_match_done" "dota_match_done_client" "set_instructor_group_enabled" "joined_chat_channel" "left_chat_channel" "gc_chat_channel_list_updated" "today_messages_updated" "file_downloaded" "player_report_counts_updated" "scaleform_file_download_complete" "item_purchased" "gc_mismatched_version" "demo_skip" "demo_start" "demo_stop" "map_shutdown" "dota_workshop_fileselected" "dota_workshop_filecanceled" "rich_presence_updated" "dota_hero_random" "dota_rd_chat_turn" "dota_favorite_heroes_updated" "profile_opened" "profile_closed" "item_preview_closed" "dashboard_switched_section" "dota_tournament_item_event" "dota_hero_swap" "dota_reset_suggested_items" "halloween_high_score_received" "halloween_phase_end" "halloween_high_score_request_failed" "dota_hud_skin_changed" "dota_inventory_player_got_item" "player_is_experienced" "player_is_notexperienced" "dota_tutorial_lesson_start" "map_location_updated" "richpresence_custom_updated" "game_end_visible" "antiaddiction_update" "highlight_hud_element" "hide_highlight_hud_element" "intro_video_finished" "matchmaking_status_visibility_changed" "practice_lobby_visibility_changed" "dota_courier_transfer_item" "full_ui_unlocked" "client_connectionless_packet" "hero_selector_preview_set" "antiaddiction_toast" "hero_picker_shown" "hero_picker_hidden" "dota_local_quickbuy_changed" "show_center_message" "hud_flip_changed" "frosty_points_updated" "defeated" "reset_defeated" "booster_state_updated" "event_points_updated" "local_player_event_points" "custom_game_difficulty" "tree_cut" "ugc_details_arrived" "ugc_subscribed" "ugc_unsubscribed" "prizepool_received" "microtransaction_success" "dota_rubick_ability_steal" "compendium_event_actions_loaded" "compendium_selections_loaded" "compendium_set_selection_failed" "community_cached_names_updated" "spec_item_pickup" "spec_aegis_reclaim_time"Нажмите, чтобы раскрыть...
https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Built-In_Engine_Events Молодец, поздравляю с потраченной жизнью
6o6uK сказал(а):↑Вот основные события в доте, которые можно подслушать.
Делал вручную из файлов доты, дерзайте.
Спойлер: "Events to listen""dota_player_kill" "dota_player_deny" "dota_barracks_kill" "dota_tower_kill" "dota_roshan_kill" "dota_courier_lost" "dota_courier_respawned" "dota_glyph_used" "dota_super_creeps" "dota_item_purchase" "dota_item_gifted" "dota_rune_pickup" "dota_rune_spotted" "dota_item_spotted" "dota_no_battle_points" "dota_chat_informational" "dota_action_item" "dota_chat_ban_notification" "dota_chat_event" "dota_chat_timed_reward" "dota_pause_event" "dota_chat_kill_streak" "dota_chat_first_blood" "dota_player_update_hero_selection" "dota_player_update_selected_unit" "dota_player_update_query_unit" "dota_player_update_killcam_unit" "dota_player_take_tower_damage" "dota_hud_error_message" "dota_action_success" "dota_starting_position_changed" "dota_money_changed" "dota_enemy_money_changed" "dota_portrait_unit_stats_changed" "dota_portrait_unit_modifiers_changed" "dota_force_portrait_update" "dota_inventory_changed" "dota_item_picked_up" "dota_inventory_item_changed" "dota_ability_changed" "dota_portrait_ability_layout_changed" "dota_inventory_item_added" "dota_inventory_changed_query_unit" "dota_link_clicked" "dota_set_quick_buy" "dota_quick_buy_changed" "dota_player_shop_changed" "dota_player_show_killcam" "dota_player_show_minikillcam" "gc_user_session_created" "team_data_updated" "guild_data_updated" "guild_open_parties_updated" "fantasy_updated" "fantasy_league_changed" "fantasy_score_info_changed" "player_info_updated" "game_rules_state_change" "match_history_updated" "match_details_updated" "live_games_updated" "recent_matches_updated" "news_updated" "persona_updated" "tournament_state_updated" "party_updated" "lobby_updated" "dashboard_caches_cleared" "last_hit" "player_completed_game" "player_reconnected" "nommed_tree" "dota_rune_activated_server" "dota_player_gained_level" "dota_player_learned_ability" "dota_player_used_ability" "dota_non_player_used_ability" "dota_ability_channel_finished" "dota_holdout_revive_complete" "dota_player_killed" "bindpanel_open" "bindpanel_close" "keybind_changed" "dota_item_drag_begin" "dota_item_drag_end" "dota_shop_item_drag_begin" "dota_shop_item_drag_end" "dota_item_purchased" "dota_item_used" "dota_item_auto_purchase" "dota_unit_event" "dota_quest_started" "dota_quest_completed" "gameui_activated" "gameui_hidden" "player_fullyjoined" "dota_spectate_hero" "dota_match_done" "dota_match_done_client" "set_instructor_group_enabled" "joined_chat_channel" "left_chat_channel" "gc_chat_channel_list_updated" "today_messages_updated" "file_downloaded" "player_report_counts_updated" "scaleform_file_download_complete" "item_purchased" "gc_mismatched_version" "demo_skip" "demo_start" "demo_stop" "map_shutdown" "dota_workshop_fileselected" "dota_workshop_filecanceled" "rich_presence_updated" "dota_hero_random" "dota_rd_chat_turn" "dota_favorite_heroes_updated" "profile_opened" "profile_closed" "item_preview_closed" "dashboard_switched_section" "dota_tournament_item_event" "dota_hero_swap" "dota_reset_suggested_items" "halloween_high_score_received" "halloween_phase_end" "halloween_high_score_request_failed" "dota_hud_skin_changed" "dota_inventory_player_got_item" "player_is_experienced" "player_is_notexperienced" "dota_tutorial_lesson_start" "map_location_updated" "richpresence_custom_updated" "game_end_visible" "antiaddiction_update" "highlight_hud_element" "hide_highlight_hud_element" "intro_video_finished" "matchmaking_status_visibility_changed" "practice_lobby_visibility_changed" "dota_courier_transfer_item" "full_ui_unlocked" "client_connectionless_packet" "hero_selector_preview_set" "antiaddiction_toast" "hero_picker_shown" "hero_picker_hidden" "dota_local_quickbuy_changed" "show_center_message" "hud_flip_changed" "frosty_points_updated" "defeated" "reset_defeated" "booster_state_updated" "event_points_updated" "local_player_event_points" "custom_game_difficulty" "tree_cut" "ugc_details_arrived" "ugc_subscribed" "ugc_unsubscribed" "prizepool_received" "microtransaction_success" "dota_rubick_ability_steal" "compendium_event_actions_loaded" "compendium_selections_loaded" "compendium_set_selection_failed" "community_cached_names_updated" "spec_item_pickup" "spec_aegis_reclaim_time"Нажмите, чтобы раскрыть...
Тему лучше закрепленную обнови, добавь в шапку идеи из комментов.
Nagibator230 сказал(а):↑https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Built-In_Engine_Events Молодец, поздравляю с потраченной жизньюНажмите, чтобы раскрыть...
Лалка, хоть рандомные бы прочекал, в списке пачана есть те, которые не указаны вольвачами, вот только неизвестно будут ли они работать.
Kvothe сказал(а):↑Лалка, хоть рандомные бы прочекал, в списке пачана есть те, которые не указаны вольвачами, вот только неизвестно будут ли они работать.Нажмите, чтобы раскрыть...
Лалка ты, я указал человеку на то, что он не удосужился проверить оф вики на наличие данного материала, никто не говорил что его труд бесполезен.
Nagibator230 сказал(а):↑Лалка ты, я указал человеку на то, что он не удосужился проверить оф вики на наличие данного материала, никто не говорил что его труд бесполезен.Нажмите, чтобы раскрыть...
Таки ты так и остался лалкой, лалка, пачан не говорил что нашел то, чего нет в оф вики, к тому же там не только то что есть в оф вики, так что ты обосрался под себя, кукаретик.
doter.ua сказал(а):↑
2) К сожалению список таких событий я не нашел. (Подсмотрел пару штук в Исходниках) например когда погибает юнит, когда герой кастует заклинание, когда герой респавнится и т.д.
3) Пример события это простая функция:
function ИмяМода:Имя_События() // имя мода например DotaPvP (задается вначале)
Какие-нибудь действия
end
4) Событию нужно написать слушателя listener. Делается это в блоке
function ИмяМода:InitGameMode()
бла бла
ListenToGameEvent('любое_имя', Dynamic_Wrap(ИмяМода, 'Имя_события'), self)
бла бла
end
5) В примере будем работать с событием AbilityUsed - когда используется заклинание.
ИмяМетода - DotaPvP.
В самом низу документа вставим нашу функцию:
function DotaPvP:AbilityUsed()
print('[DotaPvP] AbilityUsed')
endНажмите, чтобы раскрыть...
Список всех событий нахидится здесь.
Вообще, в функции ListenToGameEvent нужно записывать не 'любое_имя', а название необходимого события, список которых я оставил выше. Также почти у всех событий есть кеи, например, кто совершил это событие, какая именно абилка была использована и кем и т.д. 'Имя_события' должно быть название функци, которая исполняет событие. То есть название может быть любое. В примере DotaPvP:EventHandlerAndMoreFunnyWordsAbilityUsed() прослушка события будет выглядеть так:
ListenToGameEvent('dota_player_used_ability', Dynamic_Wrap(DotaPvP, 'EventHandlerAndMoreFunnyWordsAbilityUsed'), self)
Надеюсь, я доходчиво объяснил.
Nagibator230 сказал(а):↑Мы это уже проходили, +1 пост, потом еше +1 пост, потом шапку уже не смотрят. Создавай отдельную тему, перед темой вот так [] и в них по английски гайд. Я потом создам общую тему и туда буду только ссылки выкладывать, иначе мы просто утонем в этом д"рме.Нажмите, чтобы раскрыть...
Юзай спойлеры, на 4pda по 100500 разделов в шапке, и норм читается.
L00na сказал(а):↑Список всех событий нахидится здесь.
Вообще, в функции ListenToGameEvent нужно записывать не 'любое_имя', а название необходимого события, список которых я оставил выше. Также почти у всех событий есть кеи, например, кто совершил это событие, какая именно абилка была использована и кем и т.д. 'Имя_события' должно быть название функци, которая исполняет событие. То есть название может быть любое. В примере DotaPvP:EventHandlerAndMoreFunnyWordsAbilityUsed() прослушка события будет выглядеть так:
ListenToGameEvent('dota_player_used_ability', Dynamic_Wrap(DotaPvP, 'EventHandlerAndMoreFunnyWordsAbilityUsed'), self)
Надеюсь, я доходчиво объяснил.Нажмите, чтобы раскрыть...
Ага, спс, теперь кое-что прояснилось. сделаю пару тестов и исправлю пост.
smoke25 сказал(а):↑Народ, где менять спелы у героевНажмите, чтобы раскрыть...
путь\до\стима\SteamApps\common\dota 2 beta\dota_ugc\game\dota_addons\<название_аддона>\scripts\npc\npc_abilities_custom.txt
smoke25 сказал(а):↑какой прогой открывать эти файлыНажмите, чтобы раскрыть...
Любым текстовым редактором: notepad, notepad++, sublime text и т.д.
кстати кому интересно можно посмотреть написанный валвами ai на пуджа, бруду, всяких минисларков слардаров итд из холдаута
в идеале бы кто-нибудь кто знает lua хоть както(а не как, пока, я, а я ещё и ленивый, старый стал:() расписал бы один пример ai(ну вдруг кто существует такой добрый)
я думаю оно пригодиться во всяких тдшках например
да, оно там и так больменее конечно понятно, если есть знания английского, но от более подробного яб не отказался почитать(за одно и допонять логику написания всякого на луа)
Тема закрыта
-
ЗаголовокОтветов ПросмотровПоследнее сообщение
-
Skiffersan 21 Dec 2024 в 15:27Сообщений: 1 21 Dec 2024 в 15:27
Сообщений:1
Просмотров:5
-
Сообщений:6
Просмотров:23
-
Сообщений:15
Просмотров:41
-
Сообщений:8
Просмотров:26
-
внук берии 21 Dec 2024 в 14:31Сообщений: 5 21 Dec 2024 в 14:31
Сообщений:5
Просмотров:34