CustomGames.ru - Dota 2 пользовательские игры

Условия победы

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн UZzip

  • Продвинутый
  • 282
  • Мощь: 0
  • WorldEditor2
Условия победы
« : 07-02-2016, 08:12:41 »
Простите что задаю банальный вопрос. Но поиск по форуму и инету не дал нужного результата.
Я хочу сделать условие победы для своей карты к примеру: кто первым убил 50 раз того команда и выиграла.
Я нашел прям 1 в 1 тему но не сумел разобраться. https://moddota.com/forums/discussion/comment/2216/#Comment_2216
на форуме тоже читал про темы где выигрывает тот кто покупает предмет.

Ращитываю на вашу поддержку.

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
Re: Условия победы
« Ответ #1 : 07-02-2016, 09:00:26 »
Простите что задаю банальный вопрос. Но поиск по форуму и инету не дал нужного результата.
Я хочу сделать условие победы для своей карты к примеру: кто первым убил 50 раз того команда и выиграла.
Я нашел прям 1 в 1 тему но не сумел разобраться. https://moddota.com/forums/discussion/comment/2216/#Comment_2216
на форуме тоже читал про темы где выигрывает тот кто покупает предмет.

Ращитываю на вашу поддержку.
Нужно при убийстве юнита проверять сколько киллов у героя, если равно 50 то заканчивать игру этим GameRules:SetGameWinner(DOTA_TEAM_*)

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Re: Условия победы
« Ответ #2 : 07-02-2016, 10:22:40 »
Тот топик, что ты скинул - там есть все необходимое и почти ничего лишнего. Если хочешь добиться своей цели - разбирайся в скинутом там коде.   Можешь еще глянуть мою старую тему.

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Re: Условия победы
« Ответ #3 : 07-02-2016, 10:25:54 »
Хмм, вот я прочел первый пост своей старой темы и понял, что в твоем случае все гораздо легче:
Тебе всего навсего при смерти игрока надо проверять количество убийств команды через функцию PlayerResource:GetTeamKills(int iTeam).

Кроме того, если ты пользуешься barebones, то тебе даже не надо писать свой код: у него это все уже реализовано, достаточно настроить.

Оффлайн UZzip

  • Продвинутый
  • 282
  • Мощь: 0
  • WorldEditor2
Re: Условия победы
« Ответ #4 : 07-02-2016, 11:19:18 »
Илья, я и твою тему читал. Я просто не знаю с чего начать и что необходимо. Голым программированием занимаюсь впервые, сделайте пожалуйста скидку тупому преподу физ-культуры =))))
скрипткод писать в addon_game_mode.lua или в нужно новый файл создавать?

ps бранебойнес я не использую.
« Последнее редактирование: 07-02-2016, 11:22:03 от UZzip »

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Re: Условия победы
« Ответ #5 : 07-02-2016, 11:39:33 »
Если не знаком с программированием, то научись пользоваться шаблоном для не прогеров, над которым любезно поработал bmd.  Я про barebones.


Скинь содержимое addon_game_mode.lua, я напишу тебе в это раз код.

Оффлайн UZzip

  • Продвинутый
  • 282
  • Мощь: 0
  • WorldEditor2
Re: Условия победы
« Ответ #6 : 07-02-2016, 12:07:15 »
Илья,
Содержание addon_game_mode.lua
Код
require('stat_GameMode')
GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_GOODGUYS, 3 )
GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_BADGUYS, 3 )
function Precache( context )
PrecacheResource( "texture", "resource/flash3/images/items/longrange_rifle", context )
end


Укажу тебя в благодарностях обязательно!

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Re: Условия победы
« Ответ #7 : 07-02-2016, 14:34:56 »
Это все?

Скинь тогда содержимое "stat_GameMode"

Оффлайн UZzip

  • Продвинутый
  • 282
  • Мощь: 0
  • WorldEditor2
Re: Условия победы
« Ответ #8 : 07-02-2016, 15:12:58 »
Это все?

Скинь тогда содержимое "stat_GameMode"
да.
Код
CORPSE_MODEL = "models/development/invisiblebox.vmdl" --"models/items/pudge/pudge_skeleton_hook.vmdl"
--"particles/econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_eztzhok_ambient_blade_rope_lv.vpcf"
--"models/props_nature/grass_clump_00f.vmdl"
--"models/creeps/neutral_creeps/n_creep_troll_skeleton/n_creep_troll_skeleton_fx.vmdl"
CORPSE_DURATION = 88


_G.LIA_MODE_SURVIVAL = 1
_G.LIA_MODE_BATTLE_OF_CLANS = 2

_G.HERO_STATS_ATTACK_BONUS = 0.5

--Strenght
_G.HERO_STATS_HEALTH_BONUS = 1
_G.HERO_STATS_HEALTH_REGEN_BONUS = 0.00

--Agility
_G.HERO_STATS_ARMOR_BONUS = 1/6
_G.HERO_STATS_ATTACK_SPEED_BONUS = 1
_G.HERO_STATS_MOVE_SPEED_BONUS = 1

--Intellect
_G.HERO_STATS_MANA_BONUS = 1
_G.HERO_STATS_MANA_REGEN_BONUS = 0.00

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Re: Условия победы
« Ответ #9 : 07-02-2016, 19:14:52 »
Эмм, а он у тебя, выходит, нигде и не используется, stat_GameMode.  Ты сам писал или откуда он?

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
Re: Условия победы
« Ответ #10 : 07-02-2016, 19:39:25 »
Эмм, а он у тебя, выходит, нигде и не используется, stat_GameMode.  Ты сам писал или откуда он?
LIA - Life In Arena

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Re: Условия победы
« Ответ #11 : 07-02-2016, 19:44:38 »
Ну я хз в общем, насчет того файла. Единственное, что он может из себя представлять, так это хранилище констант. И то я не знаю, можно ли без объявление класса обращаться из него к глобалкам и к нему.


Вот так реализуй свой addon_game_mode.lua

Код

if main == nil then
_G.main = class({})
end

require('stat_GameMode')


function Precache( context )
PrecacheResource( "texture", "resource/flash3/images/items/longrange_rifle", context )
end


function Activate()
main:InitGameMode()
end

function main:InitGameMode()


GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_GOODGUYS, 3 )
GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_BADGUYS, 3 )

ListenToGameEvent("dota_player_killed", Dynamic_Wrap(main, "OnHeroKilled"), self)
end


function main:OnHeroKilled(data)

if PlayerResource:GetTeamKills(DOTA_TEAM_BADGUYS) > 48 then
GameRules:SetGameWinner(DOTA_TEAM_BADGUYS)
elseif PlayerResource:GetTeamKills(DOTA_TEAM_GOODGUYS) > 48 then
GameRules:SetGameWinner(DOTA_TEAM_GOODGUYS)
end

end


48 - потому что когда компилятор заходит в эту функцию, убийство, что только что было совершенно, еще не занесено в их счетчик. Поэтому должно быть 49, но т.к. ты хочешь именно на 50м убийстве закончить игру, а не на 51, то 48.
« Последнее редактирование: 07-02-2016, 19:46:10 от Илья »

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Re: Условия победы
« Ответ #12 : 07-02-2016, 19:50:10 »
Может кто и более красивый знает способ.
Можешь еще почитать тут разъяснение, может что-то в голове прояснится по поводу всех этих файлов и require.


« Последнее редактирование: 07-02-2016, 19:52:07 от Илья »

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
Re: Условия победы
« Ответ #13 : 07-02-2016, 20:34:08 »
Ну я хз в общем, насчет того файла. Единственное, что он может из себя представлять, так это хранилище констант. И то я не знаю, можно ли без объявление класса обращаться из него к глобалкам и к нему.

48 - потому что когда компилятор заходит в эту функцию, убийство, что только что было совершенно, еще не занесено в их счетчик. Поэтому должно быть 49, но т.к. ты хочешь именно на 50м убийстве закончить игру, а не на 51, то 48.
Можно, require подгружает файл в другой файл.

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Re: Условия победы
« Ответ #14 : 07-02-2016, 21:32:09 »
Да мало обычной подгрузки. По крайней мере, чтобы пользоваться функциями из других скриптов нужно объявить в других скриптах их главный  класс глобально, например так:

Код
if main == nil then
_G.main = class({})
end


Но вот мой вопрос касался именно того, что можно ли обращаться к переменным файла, что не есть класс. Ну то есть создавать отдельный файл, который в результате не скрипт, а холодильник продуктов: содержит просто константы.
« Последнее редактирование: 07-02-2016, 21:34:53 от Илья »