oleg_best_oleg, можно попробовать читать по две буквы.И вводить мод так -блаблабла% По % отслеживай конец строки.Просто я нуб и незнаю как отследить другим способом
Nyan Я в Знай наших Уже на форум не захожу, варкрафт перестал интересовать (
Сообщение отредактировал Novice998 - Воскресенье, 05 Февраля 2012, 18:07:47
Добавлено (05 Февраль 2012, 18:09:55) --------------------------------------------- Novice998, твой способ не понял... Мод сокращено и так пишется в 2 буквы, т.е: Boss Fight - bf...
Всегда в две? Тогда еще проще. Сначала проверяешь первые две буквы. Если они - мод, то сдвигаешь выделение на две позиции, иначе на одну. Проверяешь снова и т. д., пока не дойдешь до конца строки.
Всегда в две? Тогда еще проще. Сначала проверяешь первые две буквы. Если они - мод, то сдвигаешь выделение на две позиции, иначе на одну. Проверяешь снова и т. д., пока не дойдешь до конца строки.
function Trig_Mods_Actions takes nothing returns nothing local integer i=1 local integer i1=3 local string s="" local string sm="Выбран мод: " local string s1=SubString(GetEventPlayerChatString(),0,StringLength(GetEventPlayerChatString())) loop exitwhen i==21 set s=SubString(s1,i,i1) if s=="de" then
set sm=sm+"|cFF0A60FF Double Experience|r"+"/" endif if s=="ar" then
endif if s=="ap" then
set sm=sm+"|cFF0A60FF All Pick|r"+"/" endif if s=="om" then
set sm=sm+"|cFF0A60FF Only Mid|r"+"/" endif if s=="od" then
set sm=sm+"|cFF0A60FF Only Down|r /" endif if s=="ou" then
set sm=sm+"|cFF0A60FF Only Up|r"+"/" endif set i=i+2 set i1=i1+2 endloop call DisplayTextToPlayer(GetLocalPlayer(),.0,.0,SubString(sm,0,StringLength(sm)-1)) call DisableTrigger(GetTriggeringTrigger()) endfunction
НО это убогий пример есть пару багов. просто примерный алгоритм
Сначала проверяешь первые две буквы. Если они - мод, то сдвигаешь выделение на две позиции, иначе на одну. Проверяешь снова и т. д., пока не дойдешь до конца строки.
Я просто хотел обозначить конец строки символом %
Nyan Я в Знай наших Уже на форум не захожу, варкрафт перестал интересовать (
public function ModeChecked(integer index) -> boolean { return Mode[index]; }
public function ParseGameModes(string input, string dict) { string m[ ], s1 = SubString(input, 0, 1); integer count = 0, i = 1, j = 0, l = StringLength(dict); while (count + count < l) { m[count] = SubString(dict, count + count, count + count + 2); count = count + 1; } while (j < count) { Mode[j] = false; j = j + 1; } l = StringLength(input); while (i < l) { dict = SubString(input, i, i + 1); for (0 <= j < count) { if (s1 + dict == m[j]) { Mode[j] = true; i = i + 1; dict = SubString(input, i, i + 1); break; } } s1 = dict; i = i + 1; } } } //! endzinc
Code
call ParseGameModes(GetEventPlayerChatString(), "emfrapdu") if ModeChecked(0) then call BJDebugMsg("Easy mode") endif if ModeChecked(1) then call BJDebugMsg("Fast respawn") endif if ModeChecked(2) then call BJDebugMsg("All pick") endif if ModeChecked(3) then call BJDebugMsg("Dupplicate mode") endif
После //! endzinc нужно поставить пустую строку. Ну, или не пустую, главное, чтобы она была.