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

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

Ответ
 
DarkSempai

offline
Опыт: 56
Активность:
Извлечь integer из команды в чате
Еще один вопрос.)
Заранее скажу: У меня редактор UMS New Gen Эксперементальный
У меня есть триггер, который дант возможность в начале игры прописать команду: -gold 123456
123456 - это любое число которое будет введено после -gold. Оно должно установить кол-во голды для каждого при старте.
Я поставил событие ввода игрока в чат, тип совпадения счел поставить не Точное совпадение а Подстройка.
Может я сделал что то не так, но я замучался как сделать так, что бы я мог как то разделить -gold и число после него отведьно, то есть в действиях стоит SetVariable GoldInteger = что то там...
Как подставить именно цифры после введенной команды ипу как...
Подскажите плиз.
Старый 23.03.2010, 19:36
Mr_ILYAS
Kicked by XimikS
offline
Опыт: 492
Активность:
function Player_and_String_Conditions takes nothing returns boolean
return(GetTriggerPlayer()==Player(0))and(SubString(GetEventPlayerChatString(),0,6)=="-gold ") Проверяет, что строго после нулевого символа и до 6 включительно написано "-gold " (с пробелом), и что команду ввёл хост.
endfunction
function Gold_Actions takes nothing returns nothing
local integer i=0
loop Через цыкл устанавливаем всем игрокам нужного голды.
call SetPlayerState(Player(i),PLAYER_STATE_RESOURCE_GOLD,S2I(SubString(GetEventPlayerChatString(),6,Strin​gLength(GetEventPlayerChatString())))) Конвертируем строку в число, и берём за число то, что написано после 6 символа и до конца строки.
set i=i+1
exitwhen(i==11) Так как отсчёт первого игрока идёт от 0 в Jass'e, поэтому стоит 11
endloop
endfunction
function InitTrig_Gold takes nothing returns nothing
set gg_trg_Gold=CreateTrigger()
call TriggerRegisterPlayerChatEvent(gg_trg_Gold,Player(0),"",false)
call TriggerAddCondition(gg_trg_Gold,Condition(function Player_and_String_Conditions))
call TriggerAddAction(gg_trg_Gold,function Gold_Actions)
endfunction

Отредактировано Mr_ILYAS, 24.03.2010 в 04:40.
Старый 23.03.2010, 20:07
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
Mr_ILYAS, что по твоему хост? 1 (0) игрок?)))
в данном случае будет только работать при условии что введет 1 игрок, а как же остальные? допустим если ты зайдешь как игрок 2?
лучше через тот же массив обозначить игроков
Старый 23.03.2010, 20:17
Mr_ILYAS
Kicked by XimikS
offline
Опыт: 492
Активность:
Ну да. Он же сказал, что эта команда устанавливает голду для всех игроков, значит это должен быть хост.
И если уж на то пошло, как ты узнаешь, кто хост в триггерах?
Да и вообще не надо придираться, он сам там всё наладит, я просто показал, как надо работать с подстроками.
Старый 23.03.2010, 20:22
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
Mr_ILYAS, как определить хоста - была тема про это, поиск в помощь
я не придираюсь, сказал лишь только какие проблемы могут быть вызваны
Старый 23.03.2010, 20:27
Anufis

offline
Опыт: 6,290
Активность:
Mr_ILYAS:
И если уж на то пошло, как ты узнаешь, кто хост в триггерах?
В кеш локально у каждого игрока пишется его номер. Потом выполняется синхронизация в триггере, и извлекая данную переменную, получаем хоста.
Старый 23.03.2010, 22:25
adic3x

offline
Опыт: 108,439
Активность:
хост насколько я помню из триггеров определить нельзя. с другой стороны в большинстве это красный. в любом случае можно дать право прописывать только красному - это решит все проблемы.
счел поставить не Точное совпадение а Подстройка
правильно мыслите
я сейчас точно не вспомню как в варкравте это сделать правильно, но, используйте подстроку (substring) - позволяет извлеч символы от а до б (указываете сами какие) из заданной строки, при это в качестве конца можно использовать длину строки. а потом преобразовать ваши обрезанную строку (если все правильно - это будет "123456") в число. вот только где это в триггерах я незнаю
Старый 24.03.2010, 00:13
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
ADOLF, это разве нерабочий способ определить хост?
Старый 24.03.2010, 08:57
adic3x

offline
Опыт: 108,439
Активность:
незнаю т.к. непробывал и вообще впервые о нем слышу)
Старый 24.03.2010, 22:41
Sebra

offline
Опыт: 5,603
Активность:
FellGuard, было писано, что этот способ позволяет определить хост, если он не отвлёкся. (альт-табом например) А вообще он определяет наименьший лаг.
Старый 25.03.2010, 13:04
Mr_ILYAS
Kicked by XimikS
offline
Опыт: 492
Активность:
Кароче, ограничимся первыми 2мя строками в 7 посте этой темы
Старый 25.03.2010, 15:59
Ответ

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

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

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

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



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