У меня есть 4 игрока и мне требуется создать таблицу лидеров для них. Я не понимаю как создать таблицу, которая отображает любой нанесенный единицами игрока урон в первой колонке,
а полученный урон во второй. Есть какие либо идеи как это реализовать?

Принятый ответ

Happy:
Unryze:
Считываешь нанесение урона через триггер EVENT_UNIT_DAMAGED, нанесённый урон записываешь за игроком - владельцем юнита, который нанёс урон, а полученный за игроком владельцем юнита, который получает урон.
Далее просто складываешь полученные числа с числами из таблицы.
Не сочтите за глупость, но можете более подробно расписать?
Пример Кода
globals
	real array DamageDealt
	real array DamageReceived
	group GroupEnum = CreateGroup( )
	group DamagedGroup = CreateGroup( )
	trigger DamageTrigger = CreateTrigger( )
endglobals

function RegisterDealtDamage takes nothing returns nothing
	local integer SourceID = GetPlayerId( GetOwningPlayer( GetEventDamageSource( ) ) )
	local integer TargetID = GetPlayerId( GetOwningPlayer( GetTriggerUnit( ) ) )

	set DamageDealt[ SourceID ] = DamageDealt[ SourceID ] + GetEventDamage( )
	set DamageReceived[ TargetID ] = DamageReceived[ TargetID ] + GetEventDamage( )
endfunction

function AddUnitToDamageCheck takes nothing returns boolean
	if not IsUnitInGroup( GetFilterUnit( ), DamagedGroup ) then
		call GroupAddUnit( DamagedGroup, GetFilterUnit( ) )
		call TriggerRegisterUnitEvent( DamageTrigger, GetFilterUnit( ), EVENT_UNIT_DAMAGED )
	endif
	
	return true
endfunction

function RegisterDamageTaken takes nothing returns nothing
	call GroupEnumUnitsInRect( GroupEnum, GetWorldBounds( ), Filter( function AddUnitToDamageCheck ) )
endfunction

function InitData takes nothing returns nothing
	call TriggerAddAction( DamageTrigger, function RegisterDealtDamage )
	call RegisterDamageTaken( )
endfunction
Функция InitData создаёт действие триггеру DamageTrigger, которым мы будем принимать эвент получения урона, RegisterDamageTaken - функция для проверки юнитов по всей карте и добавлении их в триггер DamageTrigger, если они не существуют в группе DamagedGroup (фильтрация), ну а дальше всё банально, нанесённый урон = полученному, потому DamageDealt[ SourceID ] где SourceID - ID игрока наносившего урон и DamageReceived[ TargetID ] - ID игрока получившего урон.
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
20
5 лет назад
1
Считываешь нанесение урона через триггер EVENT_UNIT_DAMAGED, нанесённый урон записываешь за игроком - владельцем юнита, который нанёс урон, а полученный за игроком владельцем юнита, который получает урон.
Далее просто складываешь полученные числа с числами из таблицы.
0
2
5 лет назад
0
Unryze:
Считываешь нанесение урона через триггер EVENT_UNIT_DAMAGED, нанесённый урон записываешь за игроком - владельцем юнита, который нанёс урон, а полученный за игроком владельцем юнита, который получает урон.
Далее просто складываешь полученные числа с числами из таблицы.
Не сочтите за глупость, но можете более подробно расписать?
2
20
5 лет назад
Отредактирован Unryze
2
Happy:
Unryze:
Считываешь нанесение урона через триггер EVENT_UNIT_DAMAGED, нанесённый урон записываешь за игроком - владельцем юнита, который нанёс урон, а полученный за игроком владельцем юнита, который получает урон.
Далее просто складываешь полученные числа с числами из таблицы.
Не сочтите за глупость, но можете более подробно расписать?
Пример Кода
globals
	real array DamageDealt
	real array DamageReceived
	group GroupEnum = CreateGroup( )
	group DamagedGroup = CreateGroup( )
	trigger DamageTrigger = CreateTrigger( )
endglobals

function RegisterDealtDamage takes nothing returns nothing
	local integer SourceID = GetPlayerId( GetOwningPlayer( GetEventDamageSource( ) ) )
	local integer TargetID = GetPlayerId( GetOwningPlayer( GetTriggerUnit( ) ) )

	set DamageDealt[ SourceID ] = DamageDealt[ SourceID ] + GetEventDamage( )
	set DamageReceived[ TargetID ] = DamageReceived[ TargetID ] + GetEventDamage( )
endfunction

function AddUnitToDamageCheck takes nothing returns boolean
	if not IsUnitInGroup( GetFilterUnit( ), DamagedGroup ) then
		call GroupAddUnit( DamagedGroup, GetFilterUnit( ) )
		call TriggerRegisterUnitEvent( DamageTrigger, GetFilterUnit( ), EVENT_UNIT_DAMAGED )
	endif
	
	return true
endfunction

function RegisterDamageTaken takes nothing returns nothing
	call GroupEnumUnitsInRect( GroupEnum, GetWorldBounds( ), Filter( function AddUnitToDamageCheck ) )
endfunction

function InitData takes nothing returns nothing
	call TriggerAddAction( DamageTrigger, function RegisterDealtDamage )
	call RegisterDamageTaken( )
endfunction
Функция InitData создаёт действие триггеру DamageTrigger, которым мы будем принимать эвент получения урона, RegisterDamageTaken - функция для проверки юнитов по всей карте и добавлении их в триггер DamageTrigger, если они не существуют в группе DamagedGroup (фильтрация), ну а дальше всё банально, нанесённый урон = полученному, потому DamageDealt[ SourceID ] где SourceID - ID игрока наносившего урон и DamageReceived[ TargetID ] - ID игрока получившего урон.
Принятый ответ
0
2
5 лет назад
0
Благодарю за помощь)
0
20
5 лет назад
0
Happy:
Благодарю за помощь)
Обновил сообщение выше + пояснения написал.
1
2
5 лет назад
1
Unryze:
Happy:
Благодарю за помощь)
Обновил сообщение выше + пояснения написал.
Еще раз спасибо, могу ли я связаться с вами в лс для дополнительных пояснений? ибо слаб в триггерной составляющей.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.