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

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

Ответ
 
S

offline
Опыт: 43,833
Активность:
Триггер не отлавливает событие
предположим, у нас есть
Код:
function i takes nothing returns nothing
local trigger t=CreateTrigger()
call TriggerRegisterPlayerChatEvent(t,Player(0),"-hello world",false)
call TriggerAddAction(t,function et)

в функции et происходит перебор по SubString, и уже потом производятся действия.

Внимание вопрос: из-за чего триггер t может не отловить ввод сообщения?
Старый 13.05.2008, 13:08
adic3x

offline
Опыт: 108,439
Активность:
изза магнитных бурь, других вариантов не видя всего кода предложить немогу
пробей в фции ет дебаг принтом вызывается ли она вообще
Старый 13.05.2008, 13:45
S

offline
Опыт: 43,833
Активность:
Цитата:
изза магнитных бурь, других вариантов не видя всего кода предложить немогу

я спрашиваю теоритические проблемы...
Цитата:
пробей в фции ет дебаг принтом вызывается ли она вообще

вызывается, но отлов сообщения не производится.

Так вопрос остается в силе: по каким причинам триггер может не отлавливать событие?
Старый 13.05.2008, 13:50
Toadcop

offline
Опыт: 54,313
Активность:
Код:
function i takes nothing returns nothing
local trigger t=CreateTrigger()
call TriggerRegisterPlayerChatEvent(t,GetLocalPlayer(),"-hello world",false)
call TriggerAddAction(t,function et)


? а так ?
Старый 13.05.2008, 13:54
S

offline
Опыт: 43,833
Активность:
Я конечно прошу прощения, но что это изменит? Скрипт расчитан-то на мультиплеер (просто вместо Player(0) будет цикл с перебором плэйеров)
Старый 13.05.2008, 14:01
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
вызывается, но отлов сообщения не производится.

если тригер срабатывает значит ошибка в отлове сообщения
давай код
Старый 13.05.2008, 14:04
S

offline
Опыт: 43,833
Активность:
Код:
function ChiefCondition takes nothing returns boolean
return GetTriggerPlayer() == udg_Hostz
endfunction

function helloworld takes nothing returns nothing
local player p=GetTriggerPlayer()
local string s=GetEventPlayerChatString()
local string i=SubString(s,0,6)
if i=="-cheat"
call CustomDefeatBJ(p,"lolzor")
elseif i=="-chits" then
call CustomDefeatBJ(p,"never use cheats ;)")
endif
endfunction

function ChiefHouse takes nothing returns nothing
local integer zaq =0
set zaq = 0
loop
exitwhen zaq > 11
call TriggerRegisterPlayerChatEvent(REGGIST,Player(zaq),"-",false)
set zaq = zaq+1
endloop
call TriggerAddCondition(REGGIST,Condition(function ChiefCondition))
call TriggerAddAction(REGGIST,function helloworld)
endfunction


Sasha добавил:
Примерно такой код...

Отредактировано Sasha, 13.05.2008 в 16:23.
Старый 13.05.2008, 14:09
adic3x

offline
Опыт: 108,439
Активность:
Код:
function helloworld takes nothing returns nothing
local player p=GetTriggerPlayer()
local string s=GetEventPlayerChatString()
local string i=SubString(s,0,6)
//
 call BJDebugMsg(s+"\n"+i)
//
if i=="-cheat"
call CustomDefeatBJ(p,"lolzor")
elseif i=="-chits" then
call CustomDefeatBJ(p,"never use cheats ;)")
endif
endfunction


попробуй так и посмотри что выдаст)
Старый 13.05.2008, 14:28
S

offline
Опыт: 43,833
Активность:
Уже пробовал (писал же), дебаг не выводится.
Старый 13.05.2008, 15:15
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Код:
function ChiefHouse takes nothing returns nothing
local integer zaq =0
set zaq = 0
loop
exitwhen zaq > 11
call TriggerRegisterPlayerChatEvent(REGGIST,Player(zaq),"-",false)
set zaq = zaq+1
endloop
call TriggerAddCondition(REGGIST,Condition(function ChiefCondition))
call TriggerAddAction(REGGIST,function helloworld)
endfunction
а где ты собстено триггер создаеш?

Jon добавил:
ну мб ты его и в глобалках создаеш, это неимеет значения, в любом случае попробуй так:
Код:
function ChiefHouse takes nothing returns nothing
local integer zaq =0
set REGGIST = CreateTrigger()
loop
exitwhen zaq > 11
call TriggerRegisterPlayerChatEvent(REGGIST,Player(zaq),"-",false)
set zaq = zaq+1
endloop
call TriggerAddCondition(REGGIST,Condition(function ChiefCondition))
call TriggerAddAction(REGGIST,function helloworld)
endfunction
Старый 13.05.2008, 15:29
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
Sasha не мог бы ты прояснить картину в целом, для чего тебе это, как должно работать в идеале...может быть найдётся другой вариант решения задачи в целом

хотя этот вариант я тоже попозже попробую у себя сотворить, в теории вседа всё работает, а на практике...сами знаете :)
Старый 13.05.2008, 15:30
Toadcop

offline
Опыт: 54,313
Активность:
Ужос такие темы надо удалять ибо афторы нубы. И это чисто их ошибка. "банальная"
Старый 13.05.2008, 15:58
S

offline
Опыт: 43,833
Активность:
Цитата:
ну мб ты его и в глобалках создаеш, это неимеет значения, в любом случае попробуй так:

Попробую.

Попробовал. Не работает =\

Отредактировано Sasha, 13.05.2008 в 16:16.
Старый 13.05.2008, 15:59
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
триггер создаётся в функции, которая никогда не вызывается?
+нет then после if
Старый 14.05.2008, 01:09
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
df Hunter, функция вызывается, так как...
Цитата:
ADOLF: пробей в фции ет дебаг принтом вызывается ли она вообще
Sasha: вызывается, но отлов сообщения не производится.

Имхо, нужно проверить, что на момент ввода сообщения игроком в udg_Hostz не покоится null либо другой игрок (не тот, под которым ты тестируешь карту).
Старый 14.05.2008, 06:11
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
ADOLF: пробей в фции ет дебаг принтом вызывается ли она вообще
Sasha: вызывается, но отлов сообщения не производится.
//...
ADOLF: попробуй так и посмотри что выдаст)
Sasha: Уже пробовал (писал же), дебаг не выводится.


и что я могу на это ответить?
Старый 14.05.2008, 14:07
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Хмм, я не заметил)
Значит дело, скорее всего, в отсутствии вызова функции.
Старый 14.05.2008, 14:37
J
expert
offline
Опыт: 48,447
Активность:
Sasha да выложи карту, я уверен стоит всего 0,5-10 минут покапацо...
Старый 14.05.2008, 15:24
S

offline
Опыт: 43,833
Активность:
Цитата:
+нет then после if

я примерный код ф-ии написал
Цитата:
udg_Hostz не покоится null либо другой игрок

убирал условие - тот самый игрок.
Старый 14.05.2008, 17:15
silumin

offline
Опыт: 11,153
Активность:
Sasha, мб я туплю, но мне кажется, что дело в коде:
local string i=SubString(s,0,6)
s - введённая строка
0 - номер символа с которого начинать "вырезать" подстроку
6 - номер последнего символа в подстроке

т.е. ты "вырезаешь" подстроку длинной 7 символов, в то время как сравниваешь со строками состоящими из 6 символов:
0...1...2...3...4...5...6
-...c....h...e...a...t
-...c....h....i...t....s
Старый 14.05.2008, 17:35
Ответ

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

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

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

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



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