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

UZzip

Продвинутый
2 Янв 2016
282
1
Простите что задаю банальный вопрос. Но поиск по форуму и инету не дал нужного результата.
Я хочу сделать условие победы для своей карты к примеру: кто первым убил 50 раз того команда и выиграла.
Я нашел прям 1 в 1 тему но не сумел разобраться. https://moddota.com/forums/discussion/comment/2216/#Comment_2216
на форуме тоже читал про темы где выигрывает тот кто покупает предмет.

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

CryDeS

Друзья CG
14 Июл 2015
1,210
11
[quote author=UZzip link=topic=731.msg2849#msg2849 date=1454832761]
Простите что задаю банальный вопрос. Но поиск по форуму и инету не дал нужного результата.
Я хочу сделать условие победы для своей карты к примеру: кто первым убил 50 раз того команда и выиграла.
Я нашел прям 1 в 1 тему но не сумел разобраться. https://moddota.com/forums/discussion/comment/2216/#Comment_2216
на форуме тоже читал про темы где выигрывает тот кто покупает предмет.

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

Илья

Друзья CG
25 Сен 2015
2,348
41
Тот топик, что ты скинул - там есть все необходимое и почти ничего лишнего. Если хочешь добиться своей цели - разбирайся в скинутом там коде. Можешь еще глянуть мою старую тему.
 

Илья

Друзья CG
25 Сен 2015
2,348
41
Хмм, вот я прочел первый пост своей старой темы и понял, что в твоем случае все гораздо легче:
Тебе всего навсего при смерти игрока надо проверять количество убийств команды через функцию PlayerResource:GetTeamKills(int iTeam).

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

UZzip

Продвинутый
2 Янв 2016
282
1
Илья, я и твою тему читал. Я просто не знаю с чего начать и что необходимо. Голым программированием занимаюсь впервые, сделайте пожалуйста скидку тупому преподу физ-культуры =))))
скрипткод писать в addon_game_mode.lua или в нужно новый файл создавать?

ps бранебойнес я не использую.
 

Илья

Друзья CG
25 Сен 2015
2,348
41
Если не знаком с программированием, то научись пользоваться шаблоном для не прогеров, над которым любезно поработал bmd. Я про barebones.


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

UZzip

Продвинутый
2 Янв 2016
282
1
Илья,
Содержание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

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

Илья

Друзья CG
25 Сен 2015
2,348
41
Это все?

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

UZzip

Продвинутый
2 Янв 2016
282
1
Это все?

Скинь тогда содержимое "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
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
Эмм, а он у тебя, выходит, нигде и не используется, stat_GameMode. Ты сам писал или откуда он?
 

Илья

Друзья CG
25 Сен 2015
2,348
41
Ну я хз в общем, насчет того файла. Единственное, что он может из себя представлять, так это хранилище констант. И то я не знаю, можно ли без объявление класса обращаться из него к глобалкам и к нему.


Вот так реализуй свой 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.
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
Может кто и более красивый знает способ.
Можешь еще почитать тут разъяснение, может что-то в голове прояснится по поводу всех этих файлов и require.
 

CryDeS

Друзья CG
14 Июл 2015
1,210
11
Ну я хз в общем, насчет того файла. Единственное, что он может из себя представлять, так это хранилище констант. И то я не знаю, можно ли без объявление класса обращаться из него к глобалкам и к нему.

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

Илья

Друзья CG
25 Сен 2015
2,348
41
Да мало обычной подгрузки. По крайней мере, чтобы пользоваться функциями из других скриптов нужно объявить в других скриптах их главный класс глобально, например так:

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


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

CryDeS

Друзья CG
14 Июл 2015
1,210
11
Да мало обычной подгрузки. По крайней мере, чтобы пользоваться функциями из других скриптов нужно объявить в других скриптах их главный класс глобально, например так:

Но вот мой вопрос касался именно того, что можно ли обращаться к переменным файла, что не есть класс. Ну то есть создавать отдельный файл, который в результате не скрипт, а холодильник продуктов: содержит просто константы.
Я пользовался норм функциями без создания классов оО
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
Я пользовался норм функциями без создания классов оО

Ну, например, если функцию вызывать как функцию из скриптового файла в каком-нибудь txt файле (например в абилках) то да, там вовсе необязательно создавать класс. Но, если, к примеру, разделить работу мода на несколько файлов lua, т.е. допустим в одном у нас идет работа с монстрами, в другом с игроками и т.д. и все они связаны между собой одним главным классом, то там необходимо объявлять эти второстепенные классы.
 
Последнее редактирование модератором:

CryDeS

Друзья CG
14 Июл 2015
1,210
11
Ну, например, если функцию вызывать как функцию из скриптового файла в каком-нибудь txt файле (например в абилках) то да, там вовсе необязательно создавать класс. Но, если, к примеру, разделить работу мода на несколько файлов lua, т.е. допустим в одном у нас идет работа с монстрами, в другом с игроками и т.д. и все они связаны между собой одним главным классом, то там необходимо объявлять эти второстепенные классы.
Нет, не надо :D
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
Ну, не знаю, у меня всегда компилятор жалуется на неопределенность классов.
 
Реклама: