Урок Слушатели / Listeners . Я слежу за тобой .

vulkantsk

Супермодератор
Команда форума
21 Июн 2017
873
148
www.dotabuff.com
Проект
Roshan defense
"Слушатель это как смотритель маяка , который следит за всем , что происходит в бушующем море ..."
© Маяковский

Слушатели это обработчики событий.
Эти самые обработчики прислушиваются к какому-то определенному событию , и когда событие происходит , то выполняется функция , которую вы задали в слушателе.
Базовый список слушателей вы можете найти в barebones.lua , если он у вас подключен.
Код:
	ListenToGameEvent('dota_player_gained_level', Dynamic_Wrap(GameMode, 'OnPlayerLevelUp'), self) // Получение уровня
	ListenToGameEvent('dota_ability_channel_finished', Dynamic_Wrap(GameMode, 'OnAbilityChannelFinished'), self) // Конец каста способности
	ListenToGameEvent('dota_player_learned_ability', Dynamic_Wrap(GameMode, 'OnPlayerLearnedAbility'), self) // Изучение способности
	ListenToGameEvent('entity_killed', Dynamic_Wrap(GameMode, 'OnEntityKilled'), self) // Убийства любого юнита
	ListenToGameEvent('player_connect_full', Dynamic_Wrap(GameMode, 'OnConnectFull'), self) // Подключение игрока
	ListenToGameEvent('player_disconnect', Dynamic_Wrap(GameMode, 'OnDisconnect'), self) // Отключении игрока
	ListenToGameEvent('dota_item_purchased', Dynamic_Wrap(GameMode, 'OnItemPurchased'), self) // Покупка предмета
	ListenToGameEvent('dota_item_picked_up', Dynamic_Wrap(GameMode, 'OnItemPickedUp'), self) // Взять предмет
	ListenToGameEvent('last_hit', Dynamic_Wrap(GameMode, 'OnLastHit'), self) // Добивание юнита
	ListenToGameEvent('dota_non_player_used_ability', Dynamic_Wrap(GameMode, 'OnNonPlayerUsedAbility'), self) // Не игрок использовал способность
	ListenToGameEvent('player_changename', Dynamic_Wrap(GameMode, 'OnPlayerChangedName'), self) // Игрок сменил имя
	ListenToGameEvent('dota_rune_activated_server', Dynamic_Wrap(GameMode, 'OnRuneActivated'), self) // Взять руну
	ListenToGameEvent('dota_player_take_tower_damage', Dynamic_Wrap(GameMode, 'OnPlayerTakeTowerDamage'), self) // Получение урона от башни
	ListenToGameEvent('tree_cut', Dynamic_Wrap(GameMode, 'OnTreeCut'), self) // Дерево срублено
	ListenToGameEvent('entity_hurt', Dynamic_Wrap(GameMode, 'OnEntityHurt'), self) // Получение урона
	ListenToGameEvent('player_connect', Dynamic_Wrap(GameMode, 'PlayerConnect'), self) // Подключение
	ListenToGameEvent('dota_player_used_ability', Dynamic_Wrap(GameMode, 'OnAbilityUsed'), self) // Использлвание способности
	ListenToGameEvent('game_rules_state_change', Dynamic_Wrap(GameMode, 'OnGameRulesStateChange'), self) // Стадия игры
	ListenToGameEvent('npc_spawned', Dynamic_Wrap(GameMode, 'OnNPCSpawned'), self) // Спаун любого юнита
	ListenToGameEvent('dota_player_pick_hero', Dynamic_Wrap(GameMode, 'OnPlayerPickHero'), self) // Герой был пикнут
	ListenToGameEvent('dota_team_kill_credit', Dynamic_Wrap(GameMode, 'OnTeamKillCredit'), self) // Изменение счетчика убийств ?
	ListenToGameEvent("player_reconnected", Dynamic_Wrap(GameMode, 'OnPlayerReconnect'), self) // Переподключение
Приведу пример слушателей для двух событий.
1)Когда игра начнется ( 0:00 на таймере ) , то выведется сообщение в чат "Внимание игра началась !!! ".
2)Когда юнит умирает , то на его месте появляется треант ( аналог способности ульта Фуриона с Аганимом ).
Код:
	ListenToGameEvent('game_rules_state_change', Dynamic_Wrap(GameMode, 'OnGameRulesStateChange'), self)
	ListenToGameEvent('entity_killed', Dynamic_Wrap(GameMode, 'OnEntityKilled'), self)
Код:
function GameMode:OnGameRulesStateChange(keys)
	local newState = GameRules:State_Get()
	
	if newState == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
		Say(nil,"Внимание игра началась !!!", false)
	end
end
Код:
function GameMode:OnEntityKilled( keys )
	local killedUnit = EntIndexToHScript( keys.entindex_killed )
	local team= killedUnit:GetTeam()
	local unit_position = killedUnit:GetAbsOrigin()
	if killedUnit:IsRealHero() then local unit = CreateUnitByName("npc_dota_furion_treant_large", unit_position + RandomVector( RandomFloat( 0, 50)), true, nil, nil, team) end
	 else local unit = CreateUnitByName("npc_dota_furion_treant", unit_position + RandomVector( RandomFloat( 0, 50)), true, nil, nil, team) end
	
end
Поздравляю ,теперь ты прокачан 8)
 
Последнее редактирование модератором:
  • Нравится
Реакции: .F.R.I.D.
Реклама: