И так суть наработки вот в чем. Вы вводите своё имя и оно будет отображаться над вашим героем. Если имя было уже введено, то рядом выводится текст, который вы будете писать. Все очень просто. Вызывается 1 строкой, требует 3 глобальные переменные. Работает с любой версией вара, знания jass необязательны.
- нужна переменная isdestroy(логическа) - отвечает за отображение текста игрока, который он пишет в чате (да - не будет отображаться, нет - будет) - нужен триггер otheractions(сработает после выбора имени любым игроком) - юнит блокируется пока имя не будет выбрано [jass] function MoveName takes nothing returns nothing local integer i = 1 loop exitwhen i > 12 if udg_tt[i] != null then call SetTextTagPosUnit(udg_tt[i],udg_u[i],0) endif set i = i + 1 endloop set i = 0 endfunction function CreateName takes nothing returns nothing local integer pid = GetPlayerId(GetTriggerPlayer()) + 1 if udg_name[pid] == "" then if GetEventPlayerChatString() != "" then set udg_name[pid] = GetEventPlayerChatString() set udg_tt[pid] = CreateTextTag() call SetTextTagText(udg_tt[pid],"|c00FF0000"+udg_name[pid]+"|r",10 * 0.023 / 10) call SetTextTagPosUnit(udg_tt[pid],udg_u[pid],0) call DisplayTextToPlayer(GetTriggerPlayer(),1,1,"|c0000FF00Имя принято|r") call PauseUnit(udg_u[pid],false) call TriggerExecute(gg_trg_otheractions) if udg_isdestroy then call DestroyTrigger(GetTriggeringTrigger()) endif else call DisplayTextToPlayer(GetTriggerPlayer(),1,1,"|c00FF0000Имя не должно быть пустым|r") endif else call SetTextTagText(udg_tt[pid],"|c00FF0000"+udg_name[pid]+"|r: "+GetEventPlayerChatString(),10 * 0.023/10) call TriggerSleepAction(10) call SetTextTagText(udg_tt[pid],"|c00FF0000"+udg_name[pid]+"|r",10 * 0.023 / 10) endif set pid = 0 endfunction function InitTT takes nothing returns nothing local timer t = CreateTimer() call TimerStart(t,0.01,true,function MoveName) set t = null endfunction function InitNameForPlayer takes integer id returns nothing local trigger t = CreateTrigger() local player p = Player(id-1) call PauseUnit(udg_u[id],true) call DisplayTextToPlayer(p,1,1,"|c00FF8000Введите имя|r") call TriggerRegisterPlayerChatEvent( t, p, "", true ) call TriggerAddAction(t,function CreateName) set t = null endfunction [/jass]
[jass] function MoveName takes nothing returns nothing local integer i = 1 loop exitwhen i > 12 if udg_tt[i] != null then call SetTextTagPosUnit(udg_tt[i],udg_u[i],0) endif set i = i + 1 endloop set i = 0 endfunction function CreateName takes nothing returns nothing local integer pid = GetPlayerId(GetTriggerPlayer()) + 1 if udg_name[pid] == "" then if GetEventPlayerChatString() != "" then set udg_name[pid] = GetEventPlayerChatString() set udg_tt[pid] = CreateTextTag() call SetTextTagText(udg_tt[pid],"|c00FF0000"+udg_name[pid]+"|r",10 * 0.023 / 10) call SetTextTagPosUnit(udg_tt[pid],udg_u[pid],0) call DisplayTextToPlayer(GetTriggerPlayer(),1,1,"|c0000FF00Имя принято|r") else call DisplayTextToPlayer(GetTriggerPlayer(),1,1,"|c00FF0000Имя не должно быть пустым|r") endif else call SetTextTagText(udg_tt[pid],"|c00FF0000"+udg_name[pid]+"|r: "+GetEventPlayerChatString(),10 * 0.023/10) call TriggerSleepAction(10) call SetTextTagText(udg_tt[pid],"|c00FF0000"+udg_name[pid]+"|r",10 * 0.023 / 10) endif set pid = 0 endfunction function InitTT takes nothing returns nothing local timer t = CreateTimer() call TimerStart(t,0.01,true,function MoveName) set t = null endfunction function InitNameForPlayer takes integer id returns nothing local trigger t = CreateTrigger() local player p = Player(id-1) call DisplayTextToPlayer(p,1,1,"|c00FF8000Введите имя|r") call TriggerRegisterPlayerChatEvent( t, p, "", true ) call TriggerAddAction(t,function CreateName) set t = null endfunction [/jass]
кидаете этот код в кустом скрипт карты, создаете 3 переменные массива: u-тип юнит, name - строка, tt - плавающий текст. Затем в любом месте где нужно будет указать имя сперва указываете в переменной u, где номер масива номер игрока(начиная с 1), юнита для которого будет происходить подборка имени. А затем вызываете функцию [jass]call InitNameForPlayer()[/jass] Где , это номер игрока, для которому принадлежит юнит u[] Все очень просто ========================== И так я неочень люблю тестировать но сейчас пришлось! Версия 1.01)))) Инициализация теперь в 2 строчки Теперь еще надо добавить [jass]call InitTT()[/jass] это чтобы имя двигалось за юнитом.