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

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

Ответ
 
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Цикл по группе
call ForceEnumPlayers(group_player,null)
loop
set s = GetEnumPlayer()
exitwhen s == null
call BJDebugMsg(GetPlayerName(s) )
call ForceRemovePlayer(group_player,s)
endloop
Пробую так не получается
Вообщем хочу сделать систему ассистов
Сделал все работает только с текстом проблема...
Нужно чтоб игроки ассисты были в строку
Тоесть игрок1/игрок2/игрок3/игрок4
у меня так (через ForGroup)
игрок1
игрок2
игрок3
игрок4
Нужна помощь
function The_system_assists_Group takes nothing returns nothing // функция от ForGroup
local player p = GetEnumPlayer() // каждый игрок в группе
local integer i = GetPlayerId(p)+1 
local integer goldassist = udg_KillHeroAssist[1]
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)+goldassist)​
call DisplayTimedTextToForce( GetPlayersAll(), 0.80, ( "Помощь " + ( ( udg_ColorString[GetConvertedPlayerId(p)] + GetPlayerName(p)  + ( " |r Награда |c00E8E800" + I2S(goldassist)+"|r" ) ) ) ) )
set udg_Assist_Count[i] = udg_Assist_Count[i] + 1
call MultiboardSetItemValueBJ( udg_StatsHero, 4,i, udg_ColorString[24] + I2S(udg_Assist_Count[i]) + "|r")
endif
set p = null
endfunction
Старый 20.02.2014, 22:51
Borodach

offline
Опыт: 5,785
Активность:
local player array p
local integer i = 0

call ForceEnumPlayers(group_player,null)
	loop
		set s = GetEnumPlayer()
		exitwhen s == null
		set p[GetPlayerId(s)] = s
		call ForceRemovePlayer(group_player,s)
	endloop

loop
	call BJDebugMsg(GetPlayerName(p[i]) )
	set i = i + 1
exitwhen i >= 11
endloop
Я тебя правильно понял?
Старый 20.02.2014, 23:09
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Borodach, надо в колону чтоб написано было
а у тебя щас в ряд
Старый 20.02.2014, 23:44
Borodach

offline
Опыт: 5,785
Активность:
Попробуй добавить + "|n" в конце
Старый 20.02.2014, 23:46
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Попробуй добавить + "|n" в конце
зачем ведь это наоборот будет перенос а надо в строку
игрок1/игрок2/игрок3/игрок4
а щас
игрок1
игрок2
игрок3
игрок4
Старый 20.02.2014, 23:49
Borodach

offline
Опыт: 5,785
Активность:
Cosonic5:
надо в колону чтоб написано было
Cosonic5:
а надо в строку
ты определись....
Borodach добавил:
Теперь понял
Borodach добавил:
local string array Name
local integer i = 0

call ForceEnumPlayers(group_player,null)
	loop
		 set s = GetEnumPlayer()
		exitwhen s == null
		set Name[i] = PlayerNeme(s)
   		set i = i + 1
		call ForceRemovePlayer(group_player,s)
	endloop

     loop
          if Name[i] != null then
               set Name[13] = Name[13] +  Name[i] + "/" 
          endif
          set i = i - 1
          exitwhen i == 0
     endloop

 call BJDebugMsg(Name[13])
Старый 21.02.2014, 00:20
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Borodach, Увы не работает
Так тоже хотя так удалось проверить что цикл выполняется
но имя игрока не показывает
set m = CountPlayersInForceBJ(group_player)
//call BJDebugMsg(I2S(m))
call ForceEnumPlayers(group_player,null)
	loop
        set s = GetEnumPlayer()
        call BJDebugMsg(("РАБОТАЕТ 1 ЦИКЛ!!"))
		exitwhen m < 1
   		set m = m - 1
        call BJDebugMsg(I2S(m))
        set Name[m] = GetPlayerName(s)
        call BJDebugMsg((Name[m]))
		call ForceRemovePlayer(group_player,s)
	endloop

     loop
          if Name[m] != null then
              call BJDebugMsg(("РАБОТАЕТ 2 ЦИКЛ!!"))
               set Name[13] = Name[13] +  Name[m] + "/" 
          endif
          exitwhen m < 0
          set m = m - 1
          //call BJDebugMsg(Name[13])
     endloop
 call BJDebugMsg(Name[13])

Отредактировано Cosonic5, 21.02.2014 в 14:21.
Старый 21.02.2014, 06:56
Borodach

offline
Опыт: 5,785
Активность:
Я проверял, работает. У тябя 1 цыкл изменен, наверно ошибка в нем
Borodach добавил:
И почему exitwhen < countplayers? отсчет шел с 0, и должен в обратном порядке проверить
Старый 21.02.2014, 13:53
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Borodach, cмотри
function The_system_assists_Actions takes nothing returns nothing
local unit hero = GetDyingUnit()
local unit killer = GetKillingUnit()
local player p = GetOwningPlayer(killer)
local integer i = LoadInteger(udg_hash,GetHandleId(killer),110)
local integer gold = 150+50*i
local force group_player = LoadForceHandle(udg_hash,GetHandleId(hero),100)
local integer q = 0
local integer assistgold = gold/3
local player s //= LoadPlayerHandle(udg_hash,GetHandleId(hero),99)
local integer m = 0
local string array Name
call ForceRemovePlayer(group_player,p)
set q = CountPlayersInForceBJ(group_player)
call BJDebugMsg(I2S(q ))
//local integer i = 0

call ForceEnumPlayers(group_player,null)
	loop
        set s = GetEnumPlayer()
		exitwhen s == null
		set Name[m] = GetPlayerName(s)
   		set m = m + 1
		call ForceRemovePlayer(group_player,s)
	endloop

     loop
          if Name[m] != null then
               set Name[13] = Name[13] +  Name[m] + "/" 
          endif
          set m = m - 1
          exitwhen m == 0
     endloop
 call BJDebugMsg(Name[13])
//set m = CountPlayersInForceBJ(group_player)
//call BJDebugMsg(I2S(m ))
//if m!=0 then
//call BJDebugMsg("Помог ассист" + GetPlayerName(ForcePickRandomPlayer(group_player)) + GetPlayerName(ForcePickRandomPlayer(group_player)) + GetPlayerName(ForcePickRandomPlayer(group_player)) )
//endif
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)+gold)
set udg_KillHeroAssist[1] = assistgold
//call ForForce(group_player,function The_system_assists_Group)
call ForceClear(group_player)
call DestroyForce(group_player)
//set udg_KillHeroAssist[2] = 0
set hero = null
set killer = null
set p = null
set s = null
set group_player = null
endfunction
не робит цикл,
если проверяю колличество игроков показывает все верно показывает что игроки там есть

Отредактировано Cosonic5, 21.02.2014 в 14:34.
Старый 21.02.2014, 14:27
Borodach

offline
Опыт: 5,785
Активность:
Вот такой же триггер, ток вместо игроков показывает имена юнитов
Прикрепленные файлы
Тип файла: w3m del.w3m (7.8 Кбайт, 4 просмотров )
Старый 21.02.2014, 14:42
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Borodach, проверил норм работает а можешь с игроками также проделать?
Cosonic5 добавил:
Borodach, вот скрин
пишет null
хотя число 1 колличество помогающих
и пишет помог ассист игрок 6 и число 1 там как раз игрок 9 и игрок 6
если 9 убил в помощь идет игрок 6 все робит
но имена не показывает...
Миниатюры
Кликните на картинку для увеличения
Название:  Scr01.jpg
Просмотров: 23
Размер:  980.6 Кбайт  
Старый 21.02.2014, 14:55
Borodach

offline
Опыт: 5,785
Активность:
globals
force  EnumPlayer   = CreateForce()
integer i           = 0
string array Name   [13]
endglobals

function Picked takes nothing returns nothing
    set Name[i] = GetPlayerName(GetEnumPlayer())
    set i = i + 1
endfunction

function Trig_s_Actions takes nothing returns nothing
set i = 0
call ForceEnumPlayers(EnumPlayer,null)
    call ForForce(EnumPlayer,function Picked)

loop
    if Name[i] != null then
        if i == 0 then
            set Name[13] = Name[13] +  Name[i]
        else
            set Name[13] = Name[13] +  Name[i] + "/"
        endif
    endif
	set i = i - 1
exitwhen i < 0
endloop

    call BJDebugMsg(Name[13])
endfunction
Старый 21.02.2014, 15:38
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Borodach, Спасибо проверю скажу че да как.
Старый 21.02.2014, 17:22
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Сделал мож кому пригодиться выложил сюда рабочую версию
globals
integer m           = 0
string s2
player z
endglobals

function PickedName takes nothing returns nothing
    set z = GetEnumPlayer()
    set s2 = s2 + ( ( udg_ColorString[GetConvertedPlayerId(z)])) + GetPlayerName(z) + "|r/" 
    //call SetPlayerState(z,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(z,PLAYER_STATE_RESOURCE_GOLD)+udg_KillHer​oAssist[1])
endfunction


function The_system_assists_Actions takes nothing returns nothing
local unit hero = GetDyingUnit()
local unit killer = GetKillingUnit()
local player p = GetOwningPlayer(killer)
local integer i = LoadInteger(udg_hash,GetHandleId(killer),110)
local integer gold = 150+50*i
local force group_player = LoadForceHandle(udg_hash,GetHandleId(hero),100)
local integer countplayers = 0
local integer assistgold  = gold/3
local string s1 = I2S(assistgold)
call SetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(p,PLAYER_STATE_RESOURCE_GOLD)+gold)
call ForceRemovePlayer(group_player,p)
set udg_KillHeroAssist[1] = assistgold
set s2 = "|c00ACACACПомощь|r "
call ForForce(group_player,function PickedName)
call BJDebugMsg(s2+ " |r Награда|c00E8E800 " + s1 +"|r")
call ForceClear(group_player)
call DestroyForce(group_player)
set hero = null
set killer = null
set p = null
set z = null
set group_player = null
endfunction

function The_system_assists_Conditions takes nothing returns boolean
    return IsUnitIllusion(GetDyingUnit()) == false and GetUnitTypeId(GetDyingUnit()) != 'h00U' and IsUnitType(GetDyingUnit(), UNIT_TYPE_HERO) == true 
endfunction
Старый 21.02.2014, 23:51
Ответ

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

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

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

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



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