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

Илья

Друзья CG
25 Сен 2015
2,348
41
Я сейчас впервые от тебя услышал о такой необходимости :O

Значит, я проклят =\

Хотя, ради интереса глянул timers от bmd, и он там тоже класс определяет:

Код:
if Timers == nil then
	print ( '[Timers] creating Timers' )
	Timers = {}
	Timers.__index = Timers
end
 
Последнее редактирование модератором:

CryDeS

Друзья CG
14 Июл 2015
1,210
11
[quote author=Илья link=topic=731.msg2879#msg2879 date=1454966035]
Значит, я проклят =\

Хотя, ради интереса глянул timers от bmd, и он там тоже класс определяет:

Код:
if Timers == nil then
	print ( '[Timers] creating Timers' )
	Timers = {}
	Timers.__index = Timers
end
[/quote]
Библиотеки всегда делают классами, нет?
 

Илья

Друзья CG
25 Сен 2015
2,348
41
То есть библиотеки? Разве у lua есть какие-то библиотеки? Этот timers это же обычный скриптовый файл который bmd реализовал как отдельный модуль, что все себе подключают. Я точно так же реализую свои модули по работе с модом.
 

CryDeS

Друзья CG
14 Июл 2015
1,210
11
То есть библиотеки? Разве у lua есть какие-то библиотеки? Этот timers это же обычный скриптовый файл который bmd реализовал как отдельный модуль, что все себе подключают. Я точно так же реализую свои модули по работе с модом.
Можно условно разделить файлы на просто включаемые в мод и библиотеки. Для библиотек создаются классы, это что то вроде пространства имен, с той же целью.
 
Последнее редактирование модератором:

UZzip

Продвинутый
2 Янв 2016
282
1
Илья, в коде баг, когда один убил 49 раз, а потом убивает другой (к примеру 20 раз) то идёт победа тому кто набрал всего 49 очков
 

Илья

Друзья CG
25 Сен 2015
2,348
41
Ну сделай так:

if (PlayerResource:GetTeamKills(DOTA_TEAM_BADGUYS) + 1 ) > 49 then
GameRules:SetGameWinner(DOTA_TEAM_BADGUYS)
elseif (PlayerResource:GetTeamKills(DOTA_TEAM_GOODGUYS) +1) > 49 then
GameRules:SetGameWinner(DOTA_TEAM_GOODGUYS)
end
 
Последнее редактирование модератором:

zombijaic

Пользователь
28 Окт 2015
25
0
Ну сделай так:

if (PlayerResource:GetTeamKills(DOTA_TEAM_BADGUYS) + 1 ) > 49 then
GameRules:SetGameWinner(DOTA_TEAM_BADGUYS)
elseif (PlayerResource:GetTeamKills(DOTA_TEAM_GOODGUYS) +1) > 49 then
GameRules:SetGameWinner(DOTA_TEAM_GOODGUYS)
end


или можно как в арена реборн
END_GAME_ON_KILLS = true
KILLS_TO_END_GAME_FOR_TEAM = 50
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
или можно как в арена реборн
END_GAME_ON_KILLS = true
KILLS_TO_END_GAME_FOR_TEAM = 50

Это, похоже, их собственные константы, а не встроенные. Если на гитхабе смотрел, то скинь, я гляну.
 
Последнее редактирование модератором:

UZzip

Продвинутый
2 Янв 2016
282
1
Код:
END_GAME_ON_KILLS = true       
KILLS_TO_END_GAME_FOR_TEAM = 50

это куда прописать? за место
Код:
if PlayerResource:GetTeamKills(DOTA_TEAM_BADGUYS) > 49 then
	GameRules:SetGameWinner(DOTA_TEAM_BADGUYS)
elseif PlayerResource:GetTeamKills(DOTA_TEAM_GOODGUYS) > 49 then
	GameRules:SetGameWinner(DOTA_TEAM_GOODGUYS)
end
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
Никуда, я же сказал, что это их самодельные константы.
 

Adam Smith

Друзья CG
4 Окт 2014
473
2
Господи, зачем такой зашквар...таймер в гейммоде, который проверяет каждую сек. количество очков на топбаре
 

Илья

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

Я всегда клепаю код с расчетом на лучшую производительность и ресурсоемкость, ибо конечный пользователь кода - машина, а не человек. Это как говорить с англичанами на американском: вроде родина то одна, а языки разные.
 

UZzip

Продвинутый
2 Янв 2016
282
1
С вашими школами ещё детский сад столкнулся. Что ему делать, не понятно. у меня со счётом 20 - 20 вчера на тесте выиграли. Как сделать чтобы при нужном мне количестве побед сразу показывали выигрыш.
 

Илья

Друзья CG
25 Сен 2015
2,348
41
20:20 никак не мог получиться выигрыш из моего кода. Скинь свой addon_game_mode.
 

UZzip

Продвинутый
2 Янв 2016
282
1
Илья, ну я заменил 48 на 19
и получилось. Так как сначала один игрок дошел до 20, а победа при 21. А потом другой игрок убил 20 раз. И в результате счёт 20 - 20
 

Илья

Друзья CG
25 Сен 2015
2,348
41
У тебя так написано?

Код:
if (PlayerResource:GetTeamKills(DOTA_TEAM_BADGUYS) + 1 ) > 19 then
  GameRules:SetGameWinner(DOTA_TEAM_BADGUYS)
elseif (PlayerResource:GetTeamKills(DOTA_TEAM_GOODGUYS) +1) > 19 then
  GameRules:SetGameWinner(DOTA_TEAM_GOODGUYS)
end

Если да, то и так не может быть 20х20
 
Последнее редактирование модератором:

UZzip

Продвинутый
2 Янв 2016
282
1
Илья, а как за место> 19 then
сделать 10 умножить на (количество игроков)

Код:
if (PlayerResource:GetTeamKills(DOTA_TEAM_BADGUYS) + 1 ) > 10 * количество игроков then
  GameRules:SetGameWinner(DOTA_TEAM_BADGUYS)
elseif (PlayerResource:GetTeamKills(DOTA_TEAM_GOODGUYS) +1) > 10 * количество игроков then
  GameRules:SetGameWinner(DOTA_TEAM_GOODGUYS)
end
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
Сделай локальную переменную перед блоком if:
Код:
local CountPlayers = PlayerResource:GetPlayerCountForTeam(DOTA_TEAM_GOODGUYS) + PlayerResource:GetPlayerCountForTeam(DOTA_TEAM_BADGUYS)

И используй ее:

Код:
if (PlayerResource:GetTeamKills(DOTA_TEAM_BADGUYS) + 1 ) > (10 * CountPlayers) then
  GameRules:SetGameWinner(DOTA_TEAM_BADGUYS)
elseif (PlayerResource:GetTeamKills(DOTA_TEAM_GOODGUYS) +1) > (10 * CountPlayers) then
  GameRules:SetGameWinner(DOTA_TEAM_GOODGUYS)
end
 
Последнее редактирование модератором:
Реклама: