Принцип следующий:
Скриптом в чат шепчется вопрос, например "1+2*3 =?"
1. если кто-то рядом стоящий говорит seven - скрипт награждает его, и переходит к следующему вопросу
2. если в течение минуты никто не ответил правильно - скрипт выдает одну из подсказок:
2.1. Первую букву ответа и точки вместо недостающих букв.
2.2. Все буквы ответа беспорядочно, например "veens"при ответе "seven"
3. если в течение пяти минут никто не отвтеил - скрипт переходит к следующему вопросу.
Возможны следующие варианты загрузки вопросов в скрипт:
- несколько notecard, и рандомная загрузка по одному вопросу/ответу из рандомной нотекарты
- загрузка каждого вопроса/ответа с вэб-сервера
А теперь сложность задачи:
при работе с английскими буквами - все окей. легко слова преобразуются в нижний регистр для сравнения с оригиналом, буквы слов легко помещаются в список, который потом перемешивается и т.д.
но т.к. делаю викторину для русского языка - нужно чтобы была возможность работать с кирилицей.
вижу следующие варианты решения:
либо научиться как-то работать с кирилицей внутри lsl, либо, если этот вариант технчиески возможен - поместить на вэбсервер еще один обработчик, который вместе с вопросом, ответом - также будет выдавать подсказку - т.е. обрабатвать ее непосредственно на вэбсервере. но тут все-равно остается проблема с переводом русских слов, вбитых пользователей в нижний регистр.
вопросы:
1. есть ли варианты решений, чтобы обойтись без выноса генератора подсказки на вэбсервер?
2. есть ли вообще возможность непосредственно в LSL производить манипуляции над кирилицей?
//States
//default - initilize
//get question from notecard
//say question and waiting answers
// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
string curent_question;
string current_right_answer;
integer handle1;
integer hint_time;
default {
state_entry() {
llWhisper(0, "Let`s start!");
state get_questions;
}
}
state get_questions {
state_entry(){
curent_question = "1+2*3 =";
current_right_answer = "seven";
state get_answers_from_ppl;
}
}
state get_answers_from_ppl {
state_entry() {
llWhisper(0,"Next question:");
llWhisper(0,curent_question);
handle1 = llListen(0,"",NULL_KEY,"");
llSetTimerEvent(15);
}
listen(integer channel, string name, key id, string message){
if (llToLower(message) == current_right_answer)
{
llSay(0,name + ", you are winner!!! Answer is: "+current_right_answer);
state get_questions;
}
}
timer(){
hint_time=hint_time+1;
if (hint_time == 1){
llWhisper(0,"There is a hint N"+(string)hint_time);
integer AnswerLenght = llStringLength(current_right_answer);
string points = "";
integer x;
for (x=1;x<AnswerLenght;x++)
{
points = points + " .";
};
llWhisper(0,llGetSubString(current_right_answer,0,0)+(string)points);
}
else if (hint_time == 5) {
llWhisper(0, "Five minutes in past. Nobody win!");
llSetTimerEvent(0);
state get_questions;
}
}
state_exit() {llListenRemove(handle1); llSetTimerEvent(0); hint_time = 0;}
}










