дорос мой бот до скриптов, ибо намертво зашитый функционал слишком не гибкий и давно уже не соответствует требованиям...
казалось бы - вполне хватит команд "а ля валкер" - ничего сложного вроде нет, вносим скрипт в Memo и запускаем.. но не тут то было!
в коде реализуем функции типа:
UseItem(id)
UseSkill(id)
MTL(x,y,z)
и дергать будем их из скрипта.
вопрос только в том, как распознать какую функцию и с каким параметром дернуть..
решение вида:
PHP код:
while (i<Memo1->Lines->Count)
{
c = 0;
opr = Memo1->Lines->Strings[i];
while (c<Memo1->Lines->Strings[i].Length())
{
c++;
if (opr[c] != '#')
{
if (opr[c] == 'M' && opr[c+1] == 'T' && opr[c+2] == 'L')
ShowMessage("MTL");
}
else
{
c = Memo1->Lines->Strings[i].Length();
ShowMessage("закоментированная строка");
}
}
i++;
}
действенно, но несколько не изящно и громоздко
когда количество скриптовых команд разрастется до 10+ можно будет в этом коде сломать не только голову...
к тому же могут возникнуть проблемы с параметрами, количество символов в которых может варьироваться.
гуглю не первый день, в выдаче странные результаты, местами мало относящиеся к моей теме.
использовать сторонние библиотеки и движки не вижу смысла, да нет желания прикручивать в Visual C++..
буду признателен за любые идеи и подсказки...
"нюхом чую", что решение где-то рядом, и совсем простое..
__________________
C++Builder 6, Delphi 7, RAD Studio XE2, MS VC++...
попадают под классификацию "быдлокод".
иначе бы я не задавал бы здесь вопросов, а сделал бы так и не морочил голову. в некоторых случаях такого более чем достаточно и нет смысла делать иначе.
у функций не переменное количество аргументов, а переменная "длина" параметров - там может передаваться, например, ник персонажа или название итема, и даже координаты могут иметь разную "величину"...
C++ не имеет встроенной реализации работы с регулярными выражениями.
поэтому приходится "лепить"
в phx используется Pax Compiler. это избыточно, громоздко и писалось для delphi.
__________________
C++Builder 6, Delphi 7, RAD Studio XE2, MS VC++...
зря ты удалил свое сообщение, оно содержало достаточно много полезной информации.
Удалил потому что провтыкал с языком, увидел memo и сразу подумал что это delphi.
Но суть та же. Что мешает в builder'e использовать готовый движок (К примеру Lua, я его использую) ? Причем тут visual c++. Ведь движки как правило ничего кроме stl не используют. В билдере какой-то не такой stl?
Кстати никто не заставляет использовать регулярки, хотя тот же boost имеет реализацию регулярок. функция strstr
К примеру так:
Код:
if (strstr(line, "MTL(") == line) { ... }
Ищем подстроку, и если она находиться в начале строки то ура.
Это не лучший вариант, т.к. в строковых параметрах к примеру может быть название функции ну и т.п.
Последний раз редактировалось n1ghtmare, 15.02.2013 в 23:43.
велосипеды - путь к более обширному понимаю того, что происходит. самый лучший путь к самообразванию.
чем я собственно и занимаюсь
готовые скриптовые движки (типа PaxCompiler) громоздки и избыточны.
да и конкретно Pax не очень хорошо совмещается с MSVC++
у меня уже есть варианты обработки, но пока это обрывки набросков и мыслей у меня в голове...
когда оформится это все в рабочий (или не очень ) код я обязательно выложу на суд общественности
__________________
C++Builder 6, Delphi 7, RAD Studio XE2, MS VC++...