Vehd 2 Report post Posted June 6, 2017 Нужна база данных в которой можно было бы просматривать дроп изз сундуков типо мистика ,пурпурки , и т.д Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted June 6, 2017 Привет @Vehd! Такой базы данных нет в открытом доступе. Поэтому у Вас есть хорошая возможность её разработать и выложить первым. Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
Vehd 2 Report post Posted June 7, 2017 вот поэтому и хотелось бы приобрести ее,знаю что есть исходники арбаха, а так же мордо реализовали это. Quote Share this post Link to post Share on other sites
WVWMK 121 Report post Posted June 7, 2017 9 часов назад, Vehd сказал: вот поэтому и хотелось бы приобрести ее,знаю что есть исходники арбаха, а так же мордо реализовали это. Это не так уж и тяжело. Загружаете файл ItemEffect.lua на сайт, далее апгрейдите функцию отображения предмета: если тип предмета = сундук, то берем функцию предмета и проверяем ее на функцию GiveItem( role , ID , vaule, type) и выбираем оттуда ID далее создаем массив(список) предметов и отображаем его. Как то так. Quote Делай добро и бросай его в воду Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted June 8, 2017 13 часа назад, NMS3RR сказал: Это не так уж и тяжело. Загружаете файл ItemEffect.lua на сайт, далее апгрейдите функцию отображения предмета: если тип предмета = сундук, то берем функцию предмета и проверяем ее на функцию GiveItem( role , ID , vaule, type) и выбираем оттуда ID далее создаем массив(список) предметов и отображаем его. Как то так. Хорошая идея. Открываем файл ItemEffect.lua и построчно его читаем. Создаем переменную-счетчик, присваиваем ей ноль. Ищем ключевое слово function. Увеличиваем счетчик на единицу, если нашли. Если в строке встречается ключевое слово if, то увеличиваем счетчик на единицу. Если встречается ключевое слово end, то уменьшаем счетчик на единицу. Таким образом, когда счетчик будет опять равен нулю, значит мы прошли всю функцию. Между этим ищем в строках вызовы функции GiveItem() и извлекаем из них ID предметов, их количество. Чтобы каждый раз при просмотре предмета не читать файл ItemEffect.lua, что занимает время, нужно кэшировать информацию о выдаваемых предметах. Например, записать в ту же базу данных. Затем на странице просмотра предмета проверять, есть ли его ID в таблице с выдаваемыми предметами (с помощью данного предмета можно получить другие предметы), если есть, то выводить эти предметы. Что сложного? Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted June 10, 2017 Написал программу, которая разбирает ItemEffect.lua и составляет список какая функция какие предметы выдает. На выходе получаем текстовый файл примерно такого содержания: ItemUse_50AMFYBOX = 385,561,737,2207 ItemUse_50AMHHBOX = 355,531,707,2192 ItemUse_50AMSZBOX = 382,558,734,2204 ItemUse_50FYBOX = 369,545,721 ItemUse_50FYZWBOX = 102 ItemUse_50HHBOX = 345,521,697 ItemUse_50HHZWBOX = 1419 ItemUse_50JJBOX = 229,653 ItemUse_50JJZWBOX = 1373 ItemUse_50JUJBOX = 312,488,664 ItemUse_50JUJZWBOX = 40 ItemUse_50SJBOX = 299,475,651 ItemUse_50SJZWBOX = 1392 ItemUse_50SZBOX = 371,547,723 ItemUse_50SZZWBOX = 103 ItemUse_60AMFYBOX = 364,540,716,2201 ItemUse_60AMHHBOX = 358,534,710,2195 Этот файл можно распарсить и записать информацию в любую базу данных. Исходный код (С++): #include <iostream> #include <fstream> #include <string> #include <vector> #include <map> // Путь до файла ItemEffect.lua const std::string SCRIPT_PATH = "E:\\ItemEffect.lua"; // Путь до файла с информацией о выдаваемых предметах const std::string DB_PATH = "E:\\Database.txt"; // Убрать лишние пробелы из строки std::string Trim(std::string str); // Удалить комментарии из строки std::string Clear(std::string str); // Найти ключевое слово в строке bool FindKeyWord(const std::string& word, const std::string& str); // Точка входа int main(int argc, char *argv[]) { // Поддержка русского языка в консоли setlocale(LC_ALL, "Russian"); // Открываем ItemEffect.lua std::ifstream item_effect(SCRIPT_PATH); if (!item_effect.is_open()) { std::cout << "Не удалось открыть файл " << SCRIPT_PATH << std::endl; system("PAUSE"); return 1; } // Функция => Список предметов std::map<std::string, std::vector<int> > FunctionList; // Итератор по списку std::map<std::string, std::vector<int> >::iterator it; // Заведем статистику size_t function_number = 0; size_t good_function_number = 0; size_t item_number = 0; // Читаем файл построчно std::string line, function; int n = 0; while (std::getline(item_effect, line)) { // Удаляем из строки лишние пробелы line = Trim(line); // Проверяем что строка не пустая if (line.length() == 0) { continue; } // Проверяем что строка не закомментирована if (line.find("--") == 0) { continue; } // Удаляем комментарий из строки line = Clear(line); // Ищем ключевые слова if (n == 0) { if (FindKeyWord("function", line)) { // Увеличиваем счетчик n++; // Извлекаем имя функции function = Trim( line.substr(8, line.find("(") - 8) ); // Кладем имя функции в список std::vector<int> Items; FunctionList.insert( std::pair<std::string, std::vector<int> >(function, Items) ); // Увеличиваем количество функций function_number++; continue; } } else { if ( FindKeyWord("if", line) || FindKeyWord("for", line) || FindKeyWord("while", line) ) { n++; continue; } if (FindKeyWord("end", line)) { n--; continue; } } // Если n > 0, то мы внутри функции if (n > 0) { // Ищем функцию GiveItem if (line.find("GiveItem") != std::string::npos) { // Извлекаем ее параметры size_t s = line.find("(") + 1; size_t e = line.find(")"); std::string param = Trim(line.substr(s, e - s)); // Разбиваем строку по разделителю size_t pn = 1; while (true) { size_t offset = 0; size_t p = param.find(","); if (pn == 3) { std::string item_id = Trim(param.substr(offset, p)); // Кладем ID предмета в список int id = atoi(item_id.c_str()); if (id != 0) { it = FunctionList.find(function); it->second.push_back(id); item_number++; } break; } param = param.substr(p + 1); offset = p; pn++; } } } } // Закрываем ItemEffect.lua item_effect.close(); // Запишем информацию о выдаваемых предметах в файл // Название функции => ID предметов через запятую // Создаем новый файл std::ofstream db(DB_PATH); if (!db.is_open()) { std::cout << "Не удалось создать файл с информацией о выдаваемых предметах: " << DB_PATH << "!"; system("PAUSE"); return 1; } it = FunctionList.begin(); while (it != FunctionList.end()) { const std::vector<int>& items = it->second; size_t n = items.size(); if (n > 0) { good_function_number++; db << it->first << " = "; for (size_t i = 0; i < n; i++) { db << items[i]; if (i != (n - 1)) { db << ','; } } db << std::endl; } it++; } // Закрываем файл с информацией о выдаваемых предметах db.close(); // Напечатаем статистику std::cout << "Информация о выдаваемых предметах была записана в файл " << DB_PATH << "!" << std::endl; std::cout << "Всего функций: " << function_number << std::endl; std::cout << "Функции, которые выдают предметы: " << good_function_number << std::endl; std::cout << "Всего предметов: " << item_number << std::endl; system("PAUSE"); return 0; } // Убрать лишние пробелы из строки std::string Trim(std::string str) { size_t start_pos, end_pos; // Убираем пробелы в начале строки start_pos = str.find_first_not_of(" \t"); if (std::string::npos != start_pos) { str = str.substr(start_pos); } // Убираем пробелы в конце строки end_pos = str.find_last_not_of(" \t"); if (std::string::npos != end_pos) { str = str.substr(0, end_pos + 1); } return str; } // Удалить комментарии из строки std::string Clear(std::string str) { size_t comment = str.find("--"); if (comment != std::string::npos) { return str.substr(comment); } return str; } // Найти ключевое слово в строке bool FindKeyWord(const std::string& word, const std::string& str) { if (str.find(word) != std::string::npos && str.find(word) == 0) { return true; } return false; } Сама программа очень простая, никаких проверок на ошибки нет. Анализирует ItemEffect.lua по принципу одна строка - одно ключевое слово. Так же нет проверки на случай, если в одной функции предмет с одним и тем же ID выдается несколько раз. С ItemEffect.lua из сборки PKO138 вроде работает без косяков. Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
Vehd 2 Report post Posted June 22, 2017 Спасибо Quote Share this post Link to post Share on other sites