и так, ребята, как поделить 4265 голды между играющими союзными игроками номера 1 и 7, то есть красным и зелёным, и так, чтобы между ими не делило. у 1 номера игрока союз 2, 3, 4, 5, 6 - у 7 номера игрока 8, 9, 10, 11, 12
как в доте поделить
1 (красный) - 2 (синий), 3 (сине-зелёный), 4 (фиолетовый), 5 (жёлтый), 6 (оранжевый)
7 (зелёный) - 8 (розовый), 9 (серый), 10 (светло-синий), 11 (тёмно-зелёный), 12 (коричневый)
?
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
1
2 года назад
0
Советовал бы почитать учебники по математике за начальные классы.
Там как раз про то, как складывать, делить на количество и вычитать то, что не нужно
Проблема не в деление голды, а в нюансах. А нюансов оч много

Дам ему прямой ответ, правда я лишь с третьего раза понял что он хотел.
Так как индексы 0 (1 в ГУИ - красный) и 6 (7 в ГУИ - зелёный) у нас компьютеры, с ними делиться не нужно, занчит кол-во игроков у нас не 12, а 10. получается так:
integer goldPerPlayer = R2I( 4265 / ( 12 - 2 ) )
Однако, если это делать по-человечески, то будет так:
function CountTeamPlayersEx takes integer team, playerslotstate slotstate, mapcontrol controlstate returns integer
    local integer i = 0
    local integer count = 0
    local player p = null
    local boolean isSlotOk = true
    local boolean isControlOk = true

    loop
        set p = Player( i )
        set isSlotOk = slotstate == null or GetPlayerSlotState( p ) == slotstate
        set isControlOk = controlstate == null or GetPlayerController( p ) == controlstate

        if isSlotOk and isControlOk and GetPlayerTeam( p ) == team then
            set count = count + 1
        endif

        set i = i + 1
        exitwhen i == bj_MAX_PLAYERS
    endloop

    set p = null // фактически не нужна, ибо Player( i ) не вызывает утечку.
    return count
endfunction

function CountRealTeamPlayers takes integer team returns integer
    return CountTeamPlayersEx( team, PLAYER_SLOT_STATE_PLAYING, MAP_CONTROL_USER )
endfunction

function GiveGoldToTeam takes integer team, integer gold returns nothing
    local integer i = 0

    loop
        set p = Player( i )
        if GetPlayerSlotState( p ) == PLAYER_SLOT_STATE_PLAYING and GetPlayerController( p ) == MAP_CONTROL_USER and GetPlayerTeam( p ) == team then
            call SetPlayerState( p, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState( p, PLAYER_STATE_RESOURCE_GOLD ) + gold )
        endif

        set i = i + 1
        exitwhen i == bj_MAX_PLAYERS
    endloop
endfunction

function GiveGoldToPlayers takes integer gold returns nothing
	local integer team1Players = CountRealTeamPlayers( 0 )
	local integer team2Players = CountRealTeamPlayers( 1 )
    local integer playerCount  = team1Players + team2Players
	local integer goldPerTeam  = R2I( gold * .5 )
	
    call GiveGoldToTeam( 0, R2I( goldPerTeam / team1Players ) )
    call GiveGoldToTeam( 1, R2I( goldPerTeam / team2Players ) )
endfunction
Вроде как не допустил ошибок, если будет где-то ошибка, сообщи.
а на гуи нельзя?
Этот комментарий удален
0
20
2 года назад
0
Motan021 жди гуишников тогда, я таким не промышляю.
0
1
2 года назад
Отредактирован Anonim2843
0
Я до сих пор не уверен, что понял, что человеку нужно.
А если понял правильно, то есть 2 команды, нужно 4265 золота разделить на каждую команду поровну между её игроками, в зависимости от кол-во игроков?
Если это так, то в чем проблема пробежаться циклом от 2 до 6, подсчитать кол-во играющих (Типо если Игрок(А) играет, то занести его в группу игроков 1 команды), поделить 4265 на это число игроков в команде и выдать каждому играющему? (собственно пересказал практически то же самое, что написал Unryze JASS кодом)
То же самое сделать с циклом от 8 до 12... (если нужно всё же учитывать 1 и 7 игрока, то циклы от 1 до 6, от 7 до 12)... Проблем не вижу, вопрос задан отстойно, примеров и своих попыток вопрос-стартер тоже не приводит...
2 комментария удалено
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.