и так, ребята, как поделить 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 (коричневый)
?
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
27
2 года назад
1
выбрать всех играющих игроков, поделить золото на это кол-во и дать это кол-во всем играющим?
0
1
2 года назад
0
rsfghd, не между всеми играющими.
1 (красный)
2 (синий)
3 (сине-зелёный)
4 (фиолетовый)
5 (жёлтый)
6 (оранжевый)
7 (зелёный)
8 (розовый)
9 (серый)
10 (светло-синий)
11 (тёмно-зелёный)
12 (коричневый)
1
15
2 года назад
Отредактирован DarkLigthing
1
Проще отталкиваться будет от того, на каком этапе у тебя возникла трудность в поставленной задаче. Что было предпринято и что не сработало.
1
27
2 года назад
Отредактирован rsfghd
1
ProrokWorldEdit, ты же понимаешь, что играющих может быть не 12 человек, а 2 или 4? но если тебе прям принципиально 12, то в чём проблема поделить 4265 на 12 и выдать результат всем игрокам?
Этот комментарий удален
3
37
2 года назад
3
Советовал бы почитать учебники по математике за начальные классы.
Там как раз про то, как складывать, делить на количество и вычитать то, что не нужно
3
20
2 года назад
Отредактирован Unryze
3
Дам ему прямой ответ, правда я лишь с третьего раза понял что он хотел.
Так как индексы 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
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
Вроде как не допустил ошибок, если будет где-то ошибка, сообщи.
а на гуи нельзя?
Этот комментарий удален
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.