XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
Почему фаталит?
Вопрос уже задан, вот код:
Код:
local integer i=0
local integer j=-11
local player p
...
loop
    exitwhen i==11
        loop
            exitwhen j==10
               if GetPlayerState(Player(i),PLAYER_STATE_RESOURCE_LUMBER)>= GetPlayerState(Player((i+j)),PLAYER_STATE_RESOURCE_LUMBER) then
                   set p = Player(i)
                   call DisplayTimedTextToForce( GetPlayersAll(), 10.00, ( ( udg_ColorString[GetConvertedPlayerId(p)] + GetPlayerName(p) ) + "|r выиграл!"))
                   call DisplayTimedTextToForce( GetForceOfPlayer(p), 10.00, "Поздравляем!" )
                   call DisplayTimedTextToForce( GetPlayersAll(), 10.00, "Игра завершится через 20 секунд" )
                   ...
                   call CustomVictoryBJ(p, true, true)
               endif
            set j=j+1
        endloop
    set j=-11
    set i=i+1
endloop


Flareon добавил:
И как можно еще определить лидера по дереву?
Старый 23.12.2008, 19:44
agentex

offline
Опыт: 34,834
Активность:
наверно изза
Цитата:
call TriggerSleepAction(20)

?
таймером заменить нужно
Старый 23.12.2008, 19:47
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
я немного пропустил в триге: после создания локалок (там где ...) триггер отключается
Старый 23.12.2008, 19:50
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Flareon, тебе следовало писать в Jass разделе.

О проблеме:
Код:
if GetPlayerState(Player(i),PLAYER_STATE_RESOURCE_LUMBER)>= GetPlayerState(Player((i+j)),PLAYER_STATE_RESOURCE_LUMBER) then

Проблема здесь. Конкретнее - Player(i+j). Согласно условиям выхода из цикла i = [0..10], j = [-11..9]
Однако Player(10+6) . . . Player(10+9) не существует. Поэтому, видимо, фаталит.

Об альтернативном решении:
Задача: нахождение лидера
Старый 23.12.2008, 19:59
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
Цитата:
тебе следовало писать в Jass разделе.

извините, неподумал.

---

Код:
exitwhen j==6

так?
Старый 23.12.2008, 20:10
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Почти так... Нужно еще возвращать исходное значение при каждой итерации цикла с i.

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

Можно использовать вот такую штуку:
Код:
// fixed, Player(0) проверяется

function GetWinner takes nothing returns nothing
  local integer i = 0
  local integer j = GetPlayerState(Player(0), PLAYER_STATE_RESOURCE_LUMBER)
  local integer k = 0
  loop
    if GetPlayerState(Player(i), PLAYER_STATE_RESOURCE_LUMBER) > j then
      set j = GetPlayerState(Player(i), PLAYER_STATE_RESOURCE_LUMBER)
      set k = i
    endif
    set i = i + 1
    exitwhen i > 11
  endloop
  call DisplayTextToPlayer(GetPlayersAll(), 0., 0., GetPlayerName(Player(k)) + " has won!")
  // bla... -_-
endfunction

Хотя это неоптимальное решение, все же лучше того, что находится в первом посте.

Отредактировано ShadoW DaemoN, 24.12.2008 в 17:38.
Старый 23.12.2008, 20:29
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
ShadoW DaemoN, решил воспользоваться твоим вариантом, пусть он даже, как ты говоришь, и не самый оптимальный.
проверил несколько раз - все прекрасно работает!
всем спасибо за внимание, вопрос снят. тему можно закрыть.
Старый 23.12.2008, 21:39
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 18:03.