Nagibator230

Пользователь

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

Nagibator230

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

doter.ua сказал(а):
Копаясь в различных доках и исходниках приобрел немного знаний про Scripting, которые изложу в этом посте. (Вся работа в файле addon_game_mode.lua)
Вкратце о чем пойдет речь:
  • Обработка событий
  • Как получить доступ к герою
  • Что дает этот доступ? например можно изменить:

    1. Текущее ХП,
    2. Золото,
    3. Увеличить Макс. запас ХП и т.д.

Итак, в этой теме уже было пару сообщений про события, но объяснять другие пункты не рассказав про события будет неправильно.


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 пост, потом шапку уже не смотрят. Создавай отдельную тему, перед темой вот так [] и в них по английски гайд. Я потом создам общую тему и туда буду только ссылки выкладывать, иначе мы просто утонем в этом д"рме.

Nagibator230

Пользователь

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

Nagibator230

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

DimakSerpg сказал(а):
Ты это скидывай советы в шапку, выше про addon_game_mode.lua

Или в тему с FAQ'oм
Нажмите, чтобы раскрыть...

Я не машина, тут овер 50 страниц. Вот если-бы морку дали на этот раздел, я бы тему подчищал. =/

Nagibator230

Пользователь

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

Nagibator230

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

УРА, УРА, УРА, УРА! Вольво поддержка ответила мне и поправила регистрацию на вики!

6o6uK

Пользователь

Регистрация: 03.08.2013

Сообщения: 956

Рейтинг: 730

6o6uK

Регистрация: 03.08.2013

Сообщения: 956

Рейтинг: 730

Вот основные события в доте, которые можно подслушать.
Делал вручную из файлов доты, дерзайте.

Спойлер: "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"

Epicroy

Пользователь

Регистрация: 31.03.2012

Сообщения: 1558

Рейтинг: 1698

Epicroy

Регистрация: 31.03.2012

Сообщения: 1558

Рейтинг: 1698

Как продвигается работа, мейкеры?

Nagibator230

Пользователь

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

Nagibator230

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

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 Молодец, поздравляю с потраченной жизнью

Nagibator230

Пользователь

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

Nagibator230

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

Epicroy сказал(а):
Как продвигается работа, мейкеры?
Нажмите, чтобы раскрыть...

Nagibator230

Пользователь

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

Nagibator230

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309


Мы в видео попали =)))

Nagibator230

Пользователь

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

Nagibator230

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

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"
Нажмите, чтобы раскрыть...

Тему лучше закрепленную обнови, добавь в шапку идеи из комментов.

6o6uK

Пользователь

Регистрация: 03.08.2013

Сообщения: 956

Рейтинг: 730

6o6uK

Регистрация: 03.08.2013

Сообщения: 956

Рейтинг: 730

Nagibator230 сказал(а):
Тему лучше закрепленную обнови, добавь в шапку идеи из комментов.
Нажмите, чтобы раскрыть...

Последнее редактирование: Вчера, в 18:39
Так что держу тему up to date :D

Kvothe

Пользователь

Регистрация: 09.10.2013

Сообщения: 1088

Рейтинг: 683

Kvothe

Регистрация: 09.10.2013

Сообщения: 1088

Рейтинг: 683

Nagibator230 сказал(а):
https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Built-In_Engine_Events Молодец, поздравляю с потраченной жизнью
Нажмите, чтобы раскрыть...

Лалка, хоть рандомные бы прочекал, в списке пачана есть те, которые не указаны вольвачами, вот только неизвестно будут ли они работать.

Nagibator230

Пользователь

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

Nagibator230

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

6o6uK сказал(а):
Последнее редактирование: Вчера, в 18:39
Так что держу тему up to date :D
Нажмите, чтобы раскрыть...

Смотри мне :d2wink:

Nagibator230

Пользователь

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

Nagibator230

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

Kvothe сказал(а):
Лалка, хоть рандомные бы прочекал, в списке пачана есть те, которые не указаны вольвачами, вот только неизвестно будут ли они работать.
Нажмите, чтобы раскрыть...

Лалка ты, я указал человеку на то, что он не удосужился проверить оф вики на наличие данного материала, никто не говорил что его труд бесполезен.

Kvothe

Пользователь

Регистрация: 09.10.2013

Сообщения: 1088

Рейтинг: 683

Kvothe

Регистрация: 09.10.2013

Сообщения: 1088

Рейтинг: 683

Nagibator230 сказал(а):
Лалка ты, я указал человеку на то, что он не удосужился проверить оф вики на наличие данного материала, никто не говорил что его труд бесполезен.
Нажмите, чтобы раскрыть...

Таки ты так и остался лалкой, лалка, пачан не говорил что нашел то, чего нет в оф вики, к тому же там не только то что есть в оф вики, так что ты обосрался под себя, кукаретик.

doter.ua

Пользователь

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

doter.ua

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

Где гамбургеры обсуждают воркшоп? Искал на дев и джоин дотах там очень стремные разделы. Где зависает кибермэт может у него блог есть? (Сам не гуглил. С телефона пмшу)

ArrowOfGood

Пользователь

Регистрация: 09.08.2014

Сообщения: 13

Рейтинг: 1

ArrowOfGood

Регистрация: 09.08.2014

Сообщения: 13

Рейтинг: 1

doter.ua сказал(а):
Где гамбургеры обсуждают воркшоп? Искал на дев и джоин дотах там очень стремные разделы. Где зависает кибермэт может у него блог есть? (Сам не гуглил. С телефона пмшу)
Нажмите, чтобы раскрыть...

в irc вроде #dota2mods

GrWizard

Пользователь

Регистрация: 05.04.2012

Сообщения: 4896

Рейтинг: 1462

GrWizard

Регистрация: 05.04.2012

Сообщения: 4896

Рейтинг: 1462

налабайте лучше терраген для дотки :) чтоб карты на прохождения генерила :)

L00na

Пользователь

Регистрация: 02.03.2014

Сообщения: 47

Рейтинг: 18

L00na

Регистрация: 02.03.2014

Сообщения: 47

Рейтинг: 18

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)

Надеюсь, я доходчиво объяснил.

doter.ua

Пользователь

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

doter.ua

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

Nagibator230 сказал(а):
Мы это уже проходили, +1 пост, потом еше +1 пост, потом шапку уже не смотрят. Создавай отдельную тему, перед темой вот так [] и в них по английски гайд. Я потом создам общую тему и туда буду только ссылки выкладывать, иначе мы просто утонем в этом д"рме.
Нажмите, чтобы раскрыть...


Юзай спойлеры, на 4pda по 100500 разделов в шапке, и норм читается.

Nagibator230

Пользователь

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

Nagibator230

Регистрация: 22.07.2013

Сообщения: 892

Рейтинг: 309

doter.ua сказал(а):
Юзай спойлеры, на 4pda по 100500 разделов в шапке, и норм читается.
Нажмите, чтобы раскрыть...

Ладно, позже закину в спойлеры, уговорил.

doter.ua

Пользователь

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

doter.ua

Регистрация: 04.07.2012

Сообщения: 547

Рейтинг: 214

L00na сказал(а):
Список всех событий нахидится здесь.
Вообще, в функции ListenToGameEvent нужно записывать не 'любое_имя', а название необходимого события, список которых я оставил выше. Также почти у всех событий есть кеи, например, кто совершил это событие, какая именно абилка была использована и кем и т.д. 'Имя_события' должно быть название функци, которая исполняет событие. То есть название может быть любое. В примере DotaPvP:EventHandlerAndMoreFunnyWordsAbilityUsed() прослушка события будет выглядеть так:

ListenToGameEvent('dota_player_used_ability', Dynamic_Wrap(DotaPvP, 'EventHandlerAndMoreFunnyWordsAbilityUsed'), self)

Надеюсь, я доходчиво объяснил.
Нажмите, чтобы раскрыть...


Ага, спс, теперь кое-что прояснилось. сделаю пару тестов и исправлю пост.

Feenond

Пользователь

Регистрация: 23.08.2013

Сообщения: 97

Рейтинг: 3

Feenond

Регистрация: 23.08.2013

Сообщения: 97

Рейтинг: 3

народ а как сделать что бы с каждой волной увеличивалось хп и атака у крипов ? или через 5-6 минут

smoke25

Пользователь

Регистрация: 10.05.2012

Сообщения: 89

Рейтинг: 7

smoke25

Регистрация: 10.05.2012

Сообщения: 89

Рейтинг: 7

Народ, где менять спелы у героев, и какой прогой открывать эти файлы

L00na

Пользователь

Регистрация: 02.03.2014

Сообщения: 47

Рейтинг: 18

L00na

Регистрация: 02.03.2014

Сообщения: 47

Рейтинг: 18

smoke25 сказал(а):
Народ, где менять спелы у героев
Нажмите, чтобы раскрыть...

путь\до\стима\SteamApps\common\dota 2 beta\dota_ugc\game\dota_addons\<название_аддона>\scripts\npc\npc_abilities_custom.txt
smoke25 сказал(а):
какой прогой открывать эти файлы
Нажмите, чтобы раскрыть...

Любым текстовым редактором: notepad, notepad++, sublime text и т.д.

iddqd

Пользователь

Регистрация: 10.11.2011

Сообщения: 261

Рейтинг: 74

iddqd

Регистрация: 10.11.2011

Сообщения: 261

Рейтинг: 74

кстати кому интересно можно посмотреть написанный валвами ai на пуджа, бруду, всяких минисларков слардаров итд из холдаута
в идеале бы кто-нибудь кто знает lua хоть както(а не как, пока, я, а я ещё и ленивый, старый стал:() расписал бы один пример ai(ну вдруг кто существует такой добрый)

я думаю оно пригодиться во всяких тдшках например

да, оно там и так больменее конечно понятно, если есть знания английского, но от более подробного яб не отказался почитать(за одно и допонять логику написания всякого на луа)