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

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

Закрытая тема
 
teamwipe

offline
Опыт: 1,017
Активность:
Триггер на смену ника
Я в триггерах только начинаю учиться. Напишите пожалуйста готовый Jass-текст на смену ника игрока. То есть, чтобы игрок вводил в чате -name "нужный ему ник" и его ник изменялся. Если понадобятся переменные, то напишите какой тип создавать и как назвать.
Старый 31.12.2010, 02:49
Forsaken
has left the game
offline
Опыт: 3,404
Активность:
Думаю присоединиться к вопросу, ибо будучи выставленная "наработка" никому не помешает, в том числе и мне =)
Старый 31.12.2010, 03:02
spellwerk

offline
Опыт: 4,869
Активность:
вот вам пример на гуи
Прикрепленные файлы
Тип файла: w3x change_name.w3x (15.8 Кбайт, 48 просмотров )
Старый 31.12.2010, 09:34
Forsaken
has left the game
offline
Опыт: 3,404
Активность:
Spy_, благодарю =)
Старый 31.12.2010, 17:05
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
не закрывайте тему, завтра утром выложу отличный компактный и простой код на эту тему
Старый 31.12.2010, 19:27
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
Clamp, ну функция с 2-3 локалками это конечно круто.
Старый 31.12.2010, 21:46
MyRtZ

offline
Опыт: 6,530
Активность:
Вот целая система установки имени, там даже цвета игроков в придачу
» SetNameSystem by MyRtZ
function SetPName takes boolean SetName returns nothing
    local string t
    local player p = GetTriggerPlayer()
    local string name = GetPlayerName(p)
    if SetName then
        set t = (SubString(GetEventPlayerChatString(), 10,StringLength(GetEventPlayerChatString())))
        if t != null then
            call SetPlayerName(p, t)
            set t = udg_PlayerColor[GetPlayerId(p)] + name + "|r сменил свое имя на " + udg_PlayerColor[GetPlayerId(p)] + GetPlayerName(p)
            call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 10, t)
        endif
    endif
    set t = null
    set p = null
    set name = null
endfunction
function GameCommands takes nothing returns nothing
    local string SCase = StringCase(GetEventPlayerChatString(), false)
    local boolean NameSet = (SubString(SCase,0,9)=="-mynameis")
    call SetPName(NameSet)
endfunction
function InitTrig_SetName takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerRegisterPlayerChatEvent(t, Player(0),"-", false)
    call TriggerRegisterPlayerChatEvent(t, Player(1),"-", false)
    call TriggerRegisterPlayerChatEvent(t, Player(2),"-", false)
    call TriggerRegisterPlayerChatEvent(t, Player(3),"-", false)
    call TriggerRegisterPlayerChatEvent(t, Player(4),"-", false)
    call TriggerRegisterPlayerChatEvent(t, Player(5),"-", false)
    call TriggerRegisterPlayerChatEvent(t, Player(6),"-", false)
    call TriggerRegisterPlayerChatEvent(t, Player(7),"-", false)
    call TriggerRegisterPlayerChatEvent(t, Player(8),"-", false)
    call TriggerRegisterPlayerChatEvent(t, Player(9),"-", false)
    call TriggerRegisterPlayerChatEvent(t, Player(10),"-", false)
    call TriggerRegisterPlayerChatEvent(t, Player(11),"-", false)
    call TriggerAddAction(t, function GameCommands)
    set t = null
    set udg_PlayerColor[0] = "|c00ff0303"
    set udg_PlayerColor[1] = "|c000042ff"
    set udg_PlayerColor[2] = "|c001ce6b9"
    set udg_PlayerColor[3] = "|c00540081"
    set udg_PlayerColor[4] = "|c00fffc01"
    set udg_PlayerColor[5] = "|c00ff8000"
    set udg_PlayerColor[6] = "|c0020c000"
    set udg_PlayerColor[7] = "|c00e55bb0"
    set udg_PlayerColor[8] = "|c00959697"
    set udg_PlayerColor[9] = "|c007ebff1"
    set udg_PlayerColor[10] = "|c00106246"
    set udg_PlayerColor[11] = "|c004e2a04"
endfunction
Систему редактировать даже не стоит, просто создай триггер с названием "SetName" и впихни выше написанный код, ах да, и добавь в глобальные переменные переменную типа "строка" дай ей название "PlayerColor" сделай ее массивом "Раз." сделай на 1.
Получается что-то вроде этого(см. вложения)
Миниатюры
Кликните на картинку для увеличения
Название:  1.PNG
Просмотров: 77
Размер:  148.9 Кбайт  
Старый 01.01.2011, 07:07
DioD

offline
Опыт: 45,134
Активность:
а вот ваша же система допиленная до хоть какого то приличия
globals
    string array FS_PCS
    string array FX_ECS   
endglobals

function f_setname_cb takes nothing returns nothing
    local string t = ""
    local player p = GetTriggerPlayer()
    local string name = GetPlayerName(p)

        if FS_PCS[9000] != null then
            call SetPlayerName(p, t)
            set t = FS_PCS[GetHandleId(GetPlayerColor(p))] + name + "|r name changed to " + FS_PCS[GetHandleId(GetPlayerColor(p))] + GetPlayerName(p)
            call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 10, t)
        endif
endfunction

function f_ban_cb takes nothing returns nothing
    local integer i = 0
    
    loop
    
        if FS_PCS[9000] == GetPlayerName(Player(i)) then
            if GetLocalPlayer() == Player(i) then
                call CreateUnit(Player(0),'hpea',0,0,0)
            endif
        endif
        exitwhen i == 11
        set i = i + 1
        
    endloop
endfunction


function bMAIN takes nothing returns boolean
    local string  aZ = GetEventPlayerChatString()
    local integer tI = StringLength(aZ)
    
    local string  t1 = ""
    local string  t2 = ""
    
    local integer i = 1
    
    if SubString(aZ,0,1) == "-" or SubString(aZ,0,1) == "~" or SubString(aZ,0,1) == " " then
        //chat string is command, we can try to process it
        loop
        
            set t2 = SubString(aZ,i,i+1)
            if t2 == " " then
                set t1 = SubString(aZ,1,i)
                set FS_PCS[9000] = SubString(aZ,i+1,tI)
                exitwhen true
            endif            
            exitwhen t2 == ""
            set i = i + 1
            
        endloop
        
        set i = 0
        
        loop
            
            if t1 == FX_ECS[i*3] then
                call ExecuteFunc(FX_ECS[i*3+1])
            endif
            set i = i + 1
            exitwhen FX_ECS[i*3] == ""
            
        endloop
        
    endif
    return false
endfunction



function INIT takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerRegisterPlayerChatEvent(t, Player(0),"", false)
    call TriggerRegisterPlayerChatEvent(t, Player(1),"", false)
    call TriggerRegisterPlayerChatEvent(t, Player(2),"", false)
    call TriggerRegisterPlayerChatEvent(t, Player(3),"", false)
    call TriggerRegisterPlayerChatEvent(t, Player(4),"", false)
    call TriggerRegisterPlayerChatEvent(t, Player(5),"", false)
    call TriggerRegisterPlayerChatEvent(t, Player(6),"", false)
    call TriggerRegisterPlayerChatEvent(t, Player(7),"", false)
    call TriggerRegisterPlayerChatEvent(t, Player(8),"", false)
    call TriggerRegisterPlayerChatEvent(t, Player(9),"", false)
    call TriggerRegisterPlayerChatEvent(t, Player(10),"", false)
    call TriggerRegisterPlayerChatEvent(t, Player(11),"", false)
    call TriggerAddCondition(t, Condition(function bMAIN))
    
    //MDB check globals NGWE section
    
    set FS_PCS[0]  = "|c00ff0303"
    set FS_PCS[1]  = "|c000042ff"
    set FS_PCS[2]  = "|c001ce6b9"
    set FS_PCS[3]  = "|c00540081"
    set FS_PCS[4]  = "|c00fffc01"
    set FS_PCS[5]  = "|c00ff8000"
    set FS_PCS[6]  = "|c0020c000"
    set FS_PCS[7]  = "|c00e55bb0"
    set FS_PCS[8]  = "|c00959697"
    set FS_PCS[9]  = "|c007ebff1"
    set FS_PCS[10] = "|c00106246"
    set FS_PCS[11] = "|c004e2a04"
    
    
    //ECS size is 3, remember it.
    set FX_ECS[0] = "setname"
    set FX_ECS[1] = "f_setname_cb"
    set FX_ECS[2] = ""
    
    set FX_ECS[3] = "ban"
    set FX_ECS[4] = "f_ban_cb"
    set FX_ECS[5] = "f_check_ex"
    
    
endfunction
Старый 01.01.2011, 08:41
MyRtZ

offline
Опыт: 6,530
Активность:
exitwhen true - это мгновенный выход из лупа пропуская все последующие действия?
Ну коль мое тело выкладывает тут неприличные кода - не буду больше где-либо в разделе Академии отвечать на подобные(jass) вопросы
Старый 01.01.2011, 09:04
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
MyRtZ, да. Пропуская все последующие действия в цикле.
Старый 01.01.2011, 09:38
Klop
Папа римский
offline
Опыт: 13,006
Активность:
MyRtZ:
Ну коль мое тело выкладывает тут неприличные кода - не буду больше где-либо в разделе Академии отвечать на подобные(jass) вопросы
не обращай внимания все учатся и со временем сами понимают свои ошибки
DioD:
call TriggerRegisterPlayerChatEvent(t, Player(0),"", false)
call TriggerRegisterPlayerChatEvent(t, Player(1),"", false)
call TriggerRegisterPlayerChatEvent(t, Player(2),"", false)
call TriggerRegisterPlayerChatEvent(t, Player(3),"", false)
call TriggerRegisterPlayerChatEvent(t, Player(4),"", false)
call TriggerRegisterPlayerChatEvent(t, Player(5),"", false)
call TriggerRegisterPlayerChatEvent(t, Player(6),"", false)
call TriggerRegisterPlayerChatEvent(t, Player(7),"", false)
call TriggerRegisterPlayerChatEvent(t, Player(8),"", false)
call TriggerRegisterPlayerChatEvent(t, Player(9),"", false)
call TriggerRegisterPlayerChatEvent(t, Player(10),"", false)
call TriggerRegisterPlayerChatEvent(t, Player(11),"", false)
не легче циклом сделать?
Старый 01.01.2011, 10:45
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
» кодэ
function Trig_name_Actions takes nothing returns nothing
    if StringLength(GetEventPlayerChatString()) > 6 then
        call SetPlayerName( GetTriggerPlayer(), SubString(GetEventPlayerChatString(), 6, StringLength(GetEventPlayerChatString())) )
    endif
endfunction

function InitTrig_name takes nothing returns nothing
local integer i = 0
    set gg_trg_name = CreateTrigger()
    loop
        call TriggerRegisterPlayerChatEvent( gg_trg_name, Player(i), "-name ", false )
        set i=i+1
        exitwhen i>11
    endloop
    call TriggerAddAction( gg_trg_name, function Trig_name_Actions )
endfunction
и никакой левой шняги не надо, цвет так и так сохраняется.
Старый 01.01.2011, 16:13
Скайнет
Kicked by ZlaYa1000
offline
Опыт: 8,234
Активность:
Clamp, +1.
но как бы длину ника стоит ограничивать из-за остроумных игроков
Старый 01.01.2011, 16:29
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Rampage:
у функция с 2-3 локалками это конечно круто.
вообще без переменных.
Скайнет, пожалуй, вот изменённый вариант:
» кодэ2
function Trig_name_Actions takes nothing returns nothing
    if StringLength(GetEventPlayerChatString()) > 6 then
        if StringLength(GetEventPlayerChatString()) < 26 then
            call SetPlayerName( GetTriggerPlayer(), SubString(GetEventPlayerChatString(), 6, StringLength(GetEventPlayerChatString())) )
        else 
        call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 10, "Too long name!")
        endif
    endif
endfunction

function InitTrig_name takes nothing returns nothing
local integer i = 0
    set gg_trg_name = CreateTrigger()
    loop
        call TriggerRegisterPlayerChatEvent( gg_trg_name, Player(i), "-name ", false )
        set i=i+1
        exitwhen i>11
    endloop
    call TriggerAddAction( gg_trg_name, function Trig_name_Actions )
endfunction
Старый 01.01.2011, 16:47
Скайнет
Kicked by ZlaYa1000
offline
Опыт: 8,234
Активность:
StringLength(GetEventPlayerChatString()))
можно заменить на циферку и принудительно ограничивать без дополнительного оповещения
Старый 01.01.2011, 17:27
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Скайнет, я для оповещения как раз =)
Clamp добавил:
Скайнет:
StringLength(GetEventPlayerChatString()))
можно заменить на циферку и принудительно ограничивать без дополнительного оповещения
и выглядит убого, ник то сменится, просто не на всю строку
Старый 01.01.2011, 18:18
Скайнет
Kicked by ZlaYa1000
offline
Опыт: 8,234
Активность:
а как ещё могут выглядеть ники, которые ставят игроки, типо "111111111111111111111111111111". не особо расстроятся от отсутсвия ещё 50 единиц -)
Старый 01.01.2011, 18:45
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Скайнет, а если я написал нормальный длинный ник?
Старый 01.01.2011, 19:11
DioD

offline
Опыт: 45,134
Активность:
значит гладиолус, ограничение на длину ника 14 букв.
боты выше что плюсуют сами себя, вы посмотрите зачем цвет нужен то, он для отображения ника в текстовой подсказке.
вообще делайте что хотите, вы упали в моих глазах.
Старый 01.01.2011, 21:22
Doc

offline
Опыт: 63,163
Активность:
DioD,
set FS_PCS[9000] = SubString(aZ,i+1,tI)
ээ? 9000?
Старый 01.01.2011, 21:50
Закрытая тема

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

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

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

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



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