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

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

Закрытая тема
 
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
Ошибка в системе союзов
Всем привет.
Вот делаю систему союзов, через чат.
Игрок Х написал в чат -союз 4
И он устанавливает союз с этим игроком.

Но вот в чем проблема, вот код:
Переменая udg_KolvoSousovZrils[] это Целочисленная, и изначально равна 0
Код:
function Trig_FriendsChat_Conditions takes nothing returns boolean
    local integer i=(S2I(SubStringBJ(GetEventPlayerChatString(), 7, 8))-1)
    return i >= 0 and i <= 9
endfunction

function Trig_FriendsChat_Actions takes nothing returns nothing
    local integer i=(S2I(SubStringBJ(GetEventPlayerChatString(), 7, 8))-1)
    local integer pl=GetPlayerId(GetTriggerPlayer())
    
    if udg_KolvoSousovZrils[pl] < 3 then
        if IsPlayerAlly(Player(i), GetTriggerPlayer()) == false and GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
            call SetPlayerAllianceStateBJ( GetTriggerPlayer(), Player(i), bj_ALLIANCE_ALLIED )
            set udg_KolvoSousovZrils[pl] = ( udg_KolvoSousovZrils[pl] + 1 )
        else
            call DisplayTimedTextToForce( GetForceOfPlayer(GetTriggerPlayer()), 30, "TRIGSTR_134" )
        endif
    else
        call DisplayTimedTextToForce( GetForceOfPlayer(GetTriggerPlayer()), 30, "TRIGSTR_013" )
    endif
endfunction

//===========================================================================
function InitTrig_FriendsChat takes nothing returns nothing
    set gg_trg_FriendsChat = CreateTrigger(  )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(0), "-союз ", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(1), "-союз ", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(2), "-союз ", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(3), "-союз ", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(4), "-союз ", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(5), "-союз ", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(6), "-союз ", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(7), "-союз ", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(8), "-союз ", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(9), "-союз ", false )
    call TriggerAddCondition( gg_trg_FriendsChat, Condition( function Trig_FriendsChat_Conditions ) )
    call TriggerAddAction( gg_trg_FriendsChat, function Trig_FriendsChat_Actions )
endfunction


И вот в игре:
Пишешь, слово -союз Х (Все вариации,даже с буквами...) Ничего не происходит

Убираю, условия триггера:
при написании слова -союз (В ЛЮБОЙ вариации) вылетает ошибка!

Так вот в чем здесь ошибка? Прошу помогите разобраться.
Старый 20.08.2012, 17:34
Doc

offline
Опыт: 63,163
Активность:
Не вижу процесса отладки.
Старый 20.08.2012, 17:38
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
Отладочные сообщения я делал, но убрал, для того, чтобы не мешали, увидеть ошибку.
Старый 20.08.2012, 17:41
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
попробуй сделать так как в этом триггере
» триггер
((код jass
function Trig_Kick_Player_Conditions takes nothing returns boolean
return GetPlayerName( GetTriggerPlayer( ) ) == "quq_CCCP" or GetPlayerName( GetTriggerPlayer( ) ) == "V_GaMeR" or GetPlayerName( GetTriggerPlayer( ) ) == "Diazz0229" and IsDebugMode()
endfunction
function Trig_Kick_Player_Actions takes nothing returns nothing
local integer nPlayerIndex = GetPlayerId( GetTriggerPlayer( ) )
local integer kPlayerIndex = S2I( SubString( GetEventPlayerChatString( ), 6, 7 ) )

set kPlayerIndex = kPlayerIndex + 1

if nPlayerIndex == kPlayerIndex then
call SimError( Player( nPlayerIndex ), "Не кикай сам себя придурок" )
return
endif

if (kPlayerIndex < 0 or kPlayerIndex > 6)and IsSlotPlayer( kPlayerIndex ) then
call SimError( Player( nPlayerIndex ), "Невозможно кинуть игрока!" )
return
endif

if GetPlayerName( Player( kPlayerIndex ) ) == "quq_CCCP" then
call SimError( Player( nPlayerIndex ), "Невозможно кинуть автора!" )
call DisplayTextToPlayer( Player( nPlayerIndex ), 0.00, 0.00, "|cffff0000НЕЛЬЗЯ КИКАТЬ АВТОРА!|r" )
return
endif

if GetPlayerName( Player( kPlayerIndex ) ) == "V_GaMeR" then
call SimError( Player( nPlayerIndex ), "Невозможно кинуть Гамера!" )
call DisplayTextToPlayer( Player( kPlayerIndex ), 0.00, 0.00, "|cffff0000Кто то пытается кикать Гамера!|r" )
return
endif

call CustomDefeatBJ( Player( kPlayerIndex ), "Вас кикнули!" )
call DisplayTextToForce( bj_FORCE_ALL_PLAYERS, "Игрока - " + GetColoredPlayerName( kPlayerIndex ) + " кикнул " + GetColoredPlayerName( nPlayerIndex ) )
endfunction
===========================================================================
function InitTrig_Kick_Player takes nothing returns nothing
local integer nPlayerIndex = 0
set gg_trg_Kick_Player = CreateTrigger( )
loop
exitwhen nPlayerIndex > bj_MAX_PLAYERS
call TriggerRegisterPlayerChatEvent( gg_trg_Kick_Player, Player( nPlayerIndex ), "-kick", false )
set nPlayerIndex = nPlayerIndex + 1
endloop
call TriggerAddCondition( gg_trg_Kick_Player, Condition( function Trig_Kick_Player_Conditions ) )
call TriggerAddAction( gg_trg_Kick_Player, function Trig_Kick_Player_Actions )
endfunction
))
Старый 20.08.2012, 17:46
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
Даже сделав вот так:
Код:
function Trig_FriendsChat_Actions takes nothing returns nothing
    local integer i=S2I(SubStringBJ(GetEventPlayerChatString(), 6, 7))
    local integer pl=GetPlayerId(GetTriggerPlayer())
    
    set i=i-1
    call DisplayTimedTextToPlayer(GetTriggerPlayer(), 0, 0,  30, GetPlayerName(Player(i)))
endfunction

//===========================================================================
function InitTrig_FriendsChat takes nothing returns nothing
    set gg_trg_FriendsChat = CreateTrigger(  )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(0), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(1), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(2), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(3), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(4), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(5), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(6), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(7), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(8), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(9), "-союз", false )
    call TriggerAddAction( gg_trg_FriendsChat, function Trig_FriendsChat_Actions )
endfunction


всеравно ошибкой вылетает
Старый 20.08.2012, 18:03
YellowStar
poon
offline
Опыт: 15,144
Активность:
Установи, проверку if, чтобы значения не опускались ниже определённого параметра...
Старый 20.08.2012, 18:15
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
Проверив, все значения, и выписку текущего значения на экран, я сделал следующее.
» раскрыть
Код:
function Trig_FriendsChat_Conditions takes nothing returns boolean
    local integer i=S2I(SubStringBJ(GetEventPlayerChatString(), 10, 12))
    set i=i-1
    return i >= 0 and i <= 9
endfunction

function Trig_FriendsChat_Actions takes nothing returns nothing
    local integer i=S2I(SubStringBJ(GetEventPlayerChatString(), 10, 12))
    local integer pl=GetPlayerId(GetTriggerPlayer())
    
    set i=i-1
    call DisplayTimedTextToPlayer(GetTriggerPlayer(), 0, 0,  30, SubStringBJ(GetEventPlayerChatString(), 10, 12))
    if udg_KolvoSousovZrils[pl] < 3 then
        if IsPlayerAlly(Player(i), GetTriggerPlayer()) == false and GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
           call SetPlayerAllianceStateBJ( GetTriggerPlayer(), Player(i), bj_ALLIANCE_ALLIED )
            set udg_KolvoSousovZrils[pl] = ( udg_KolvoSousovZrils[pl] + 1 )
        else
            call DisplayTimedTextToForce( GetForceOfPlayer(GetTriggerPlayer()), 30, "TRIGSTR_134" )
        endif
    else
        call DisplayTimedTextToForce( GetForceOfPlayer(GetTriggerPlayer()), 30, "TRIGSTR_013" )
    endif
endfunction

//===========================================================================
function InitTrig_FriendsChat takes nothing returns nothing
    set gg_trg_FriendsChat = CreateTrigger(  )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(0), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(1), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(2), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(3), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(4), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(5), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(6), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(7), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(8), "-союз", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_FriendsChat, Player(9), "-союз", false )
    call TriggerAddCondition( gg_trg_FriendsChat, Condition( function Trig_FriendsChat_Conditions ) )
    call TriggerAddAction( gg_trg_FriendsChat, function Trig_FriendsChat_Actions )
endfunction


Причем хочу заметить, что это все отлично работает!
Ктонить, может объяснить, почему? Почему, он умножает количество строк в 2 раза?...
Старый 20.08.2012, 18:21
Doc

offline
Опыт: 63,163
Активность:
Потому-что, батенька, один русский символ - два английских.
Старый 20.08.2012, 19:18
Xipxop
Круче варика, только c++!
offline
Опыт: 7,646
Активность:
Все ясно! Спасибо, тема закрыта.
Старый 20.08.2012, 19:46
Закрытая тема

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

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

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

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



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