Jump to content

Graf

Community
  • Content Count

    593
  • Joined

  • Last visited

  • Days Won

    55

Everything posted by Graf

  1. Привет. Думаю только через исходники.
  2. Devil`s Fortune В разработке Добрового времени суток, дорогой форум! Хочу представить Вам мой проект (пока его начало разработки) - Devil`s Fortune. Проект состоит из 2-х серверов, а именно Devil (Фан сервер) и Demon (Полу-фан сервер). Сайт - https://devilfortune.ru/ Также там доступен форум. Естественно, это не окончательный его вид, но там уже доступен некоторый функционал. Новости и разделы/обсуждения форума я буду пополнять по мере разработки. Сам концепт серверов: Devil: Подстройка под новые реалии российских игроков, любящих простоту добычи, но азарт шансов. Все это подкреплено исходниками клиентами и, естественно, своей изюминкой. Demon: В планах сделать сервер, которые может по достоинству соревноваться с нашими зарубежными товарищами. В данный момент разработана база и пишутся новые системы улучшения экипировки. Первым в свет выйдет сервер - Devil
  3. Добрый день. Разбирая моды V3ctor столкнулся с проблемой, что "_TRUNCATE" не используется в старых версиях VS, как и "_snprintf_s" Помогите найти аналог, пожалуйста. Пример строки: _snprintf_s(buf, _TRUNCATE, "%.2d:%.2d", hours, minutes);
  4. [Исходники] Прокачка характеристик Добрый день. В файле: UIStateForm.cpp Есть функция: void CStateMgr::MainMouseDown(CGuiData *pSender, int x, int y, DWORD key) В целом, это выглядит, как.. Отпустил мышку, +1 характеристика прокачалась. Прошу помочь сделать так, чтобы при зажатой мышке, то есть по идее "MousePress" или "MouseON" прокачивались характеристики, пока мышку не отпустили.
  5. [Исходники] Компиляция 1-м кликом К сожалению не смог понять, как переделать мод V3ctor-а, поэтому воспользовался великим поиском Ctrl+F. А именно я искал параметр: table_bin Находим следующие строки: if(strParam.find("table_bin")!=-1) { extern void MakeBinTable(); MakeBinTable(); CExitTest::SetExit(true); return FALSE; } Заменяем на: //Если есть параметр table_bin, генерируем бинарники if(strParam.find("table_bin")!=-1) { extern void MakeBinTable(); MakeBinTable(); CExitTest::SetExit(true); return FALSE; } //Если есть параметр table_bin_offmsg, генерируем бинарники if(strParam.find("tab_bin_offmsg")!=-1) { extern void MakeBinTable_OffMsg(); MakeBinTable_OffMsg(); //CExitTest::SetExit(true); return FALSE; } Далее ищем функцию в этом же файле: void MakeBinTable() Вставляем после неё: void MakeBinTable_OffMsg() { g_bBinaryTable = FALSE; g_pGameApp->InitAllTable(); MPResourceSet* pResourceSet = new MPResourceSet(0, g_Config.m_nMaxResourceNum); pResourceSet->LoadRawDataInfo("scripts/table/ResourceInfo", g_bBinaryTable); //Информация об успешной компиляции MessageBox( NULL, g_oLangRec.GetString(193), "Info", 0 ); } И компилируем все это дело.. По итогу мы можем использовать 2 .bat файла. Первый вида: start system\Game.exe startgame table_bin Он работает, как все привыкли. Много MessageBox-ов о ненахождении файлов. Или же строки с другим параметром: start system\Game.exe startgame tab_bin_offmsg
  6. Update: 1. Немного изменил комментарии; 2. Убрал пару лишних строк из кода. Спасибо за помощь людям с сообщества)
  7. Совсем забыл. В файле UIHeadSay.cpp сверху нужно добавить: #include "ItemRecord.h"
  8. [Исходники] Медали (ожерелья) со званиями Всем привет. Тема основана на Моде от @V3ct0r по ссылке Моды.. Это, конечно, интересно.. Но, думаю всем любопытно, как это реализовать на исходных файлах клиента, которые уже доступны несколько лет. Итак, открыв мод, мы видим 2 функции: inline void SetPreName( const int n_item, char* sz_name, DWORD& dw_color ) и // void CHeadSay::Render(D3DXVECTOR3& pos) Ищем тоже самое в своих исходниках и пинаем их.. У меня знаний плюсов 0,00000.....0001%, поэтому мб код не очень красивый, но все работает. То есть перекрутить его на исходники я смог) Итак. Ниже представлена функция SetPreName inline void SetPreName( int nItem, char* szName, DWORD& dwColor ) { static DWORD cha_id = 0; // Узнаем информацию о предмете CItemRecord* pInfo = GetItemRecordInfo( nItem ); DWORD COLOR_SKYBLUE = D3DCOLOR_ARGB(255, 168, 168, 255); // Если найден предмет if (nItem != 0) { // Если вещь существует в ItemInfo.txt if (!pInfo == 0) { // Узнаем тип предмета const unsigned short int type = pInfo->sType; // Если это ожерелье(25 тип) if (type == 25) { // Читаем цвет из ItemInfo.txt в столбце модели ланса const char* rgb = pInfo->chModule[1]; // Узнаем титул(столбец комментария) const char* title = pInfo->szDescriptor; // Конвертируем строку RGB цвета в 16-значное число const unsigned long color = strtoul(rgb, 0, 16); // Проверяем, что цвет и титул имеют место быть)) if (color != 0 && strlen(title) > 0) { // Устанавливаем титул strcpy( szName, title ); // Устанавливаем цвет dwColor = color; // Завершаем работу функции return; } switch( nItem ) { case 3936: strcpy( szName, g_oLangRec.GetString(7) ); dwColor = D3DCOLOR_ARGB(255,192,192,192); return; case 3937: strcpy( szName, g_oLangRec.GetString(8) ); dwColor = D3DCOLOR_ARGB(255,000,255,012); return; case 3938: strcpy( szName, g_oLangRec.GetString(9) ); dwColor = D3DCOLOR_ARGB(255,217,255,119); return; case 3939: strcpy( szName, g_oLangRec.GetString(10) ); dwColor = D3DCOLOR_ARGB(255,070,182,240); return; case 3940: strcpy( szName, g_oLangRec.GetString(11) ); dwColor = D3DCOLOR_ARGB(255,255,207,000); return; case 3941: strcpy( szName, g_oLangRec.GetString(12) ); dwColor = D3DCOLOR_ARGB(255,255,000,000); return; case 3942: strcpy( szName, g_oLangRec.GetString(13) ); dwColor = D3DCOLOR_ARGB(255,241,014,240); return; case 5331: strcpy( szName, g_oLangRec.GetString(922) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,192,192,192); return; case 5332: strcpy( szName, g_oLangRec.GetString(923) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,135,135,135); return; case 5333: strcpy( szName, g_oLangRec.GetString(924) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,255,255,255); return; case 5334: strcpy( szName, g_oLangRec.GetString(925) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,070,182,240); return; case 5335: strcpy( szName, g_oLangRec.GetString(926) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,000,255,012); return; case 5336: strcpy( szName, g_oLangRec.GetString(927) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,217,255,119); return; case 5337: strcpy( szName, g_oLangRec.GetString(928) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,255,207,000); return; case 5338: strcpy( szName, g_oLangRec.GetString(929) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,255,127,000); return; case 5339: strcpy( szName, g_oLangRec.GetString(930) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,255,000,000); return; case 5340: strcpy( szName, g_oLangRec.GetString(931) ); dwColor = COLOR_SKYBLUE; return;//D3DCOLOR_ARGB(255,241,014,240); return; // TOM?? case 822: strcpy( szName, g_oLangRec.GetString(14) ); dwColor = D3DCOLOR_ARGB(255,255,000,000); return; // ???? case 823: strcpy( szName, g_oLangRec.GetString(15) ); dwColor = D3DCOLOR_ARGB(255,241,014,240); return; // ???? case 7238: strcpy( szName, "Developer" ); dwColor = D3DCOLOR_ARGB(255,5,153,252); return; default: szName[0] = '\0'; } } } } } Теперь находим строку во второй функции: s_dwNamePartsColors[NAME_INDEX][0] = _dwNameColor; И перед ней вставляем: // Узнаем информацию о персонаже const stNetChangeChaPart part = _pOwn->GetPart(); // Узнаем ID ожерелья int neck_id = part.SLink[enumEQUIP_NECK].sID; // Если ID ожерелья нашли, то.. if (neck_id != NULL) { // Узнаем информацию об ожерелье в ItemInfo.txt CItemRecord* item = GetItemRecordInfo(neck_id); // Если предмет найден в ItemInfo.txt if (item != 0) { // Узнаем Цвет Имени на месте модели Карциза const char* szColorName = item->chModule[2]; // Проверяем цвет на наличие if (std::strcmp(szColorName, "0") != 0) { //Дефолтный цвет ника unsigned int color = 0xFFFFFFFF; //Конвертируем цвет из ItemInfo color = std::strtoul(szColorName, 0, 16); // Устанавливаем цвет ника _dwNameColor = color; } } } Итог: P.S. надеюсь таких тем будет побольше, т.к. это все не так просто, как кажется и в одного понимать тяжело)) Также.. Надеюсь, что хоть кому-то помог)
  9. Today will start add multi-language and fix correct encoding ItemInfo.txt + Add some moments, which advised V3ctor. ------------------------------------------------ Сегодня начну дорабатывать программу, в частности определение кодировки(будет зависеть от выбранного языка программы) + Исправлять моменты, которые посоветовал Виктор.
  10. Сейчас немного углубился в свой проект. Чуть позже доработаю программу и сделаю мульти-язык. Спасибо)
  11. И это нужно будет менять не только в 1 месте.. Поэтому и говорю, проще использовать самоцветы с меньшим значением)
  12. Попробуй уменьшить прибавку самоцвета. Слишком большое значение для сервера.
  13. Я только поставил, но у меня момент разработки. Прошу не удалять/не чистить тему)
  14. Решение Ошибка игрового клиента "Account server has encountered a malfunction" Может появляться из-за триггеров в Ваших базах данных. Если решения из данной темы Вам не помогли, посмотрите в гугле, как увидеть триггеры в Вашей БД. Удаление триггера выглядит следующим образом: USE имя базы GO IF OBJECT_ID ('Имя триггера', 'TR') IS NOT NULL DROP TRIGGER Имя триггера; GO
  15. Также, чтобы не использовать картинки с Мордо, вытащите из архива Арбах (тема с pkodev) папки icons и monsters.
  16. [Помощь новичкам] Бывают ошибки, вида "нарушена индивидуальность". Для быстрого поиска проблемных ID заходим в application/model.php Находим функцию: public function processData($data,$table) { И после строк: $this->db->rollBack(); $this->errors[] = $e->getMessage(); $this->errors[] = $e->getTraceAsString(); Добавляем строку: var_dump($row); К примеру, я так узнал, что в ItemInfo есть 2 разных предмета с одинаковым ID. var_dump показал ID.
  17. Идея: Ввести функции (на серверной части): 1. Есть ли вещь в банке; 2. Удалить вещь в банке.
  18. @fotostocker Открываешь аддон с Vip системой. Ищешь: State_VIP_Add Приводишь к виду: State_VIP_Add = function(Player, StateLv) local Table = DataFile:Init(VIPSystem.Conf.Path, Table):Load() local PID = GetCharID(Player) if (Table[PID] ~= nil) then local VIPLv = Table[PID].VIPLv if (VIPLv ~= nil) and (VIPLv > 0) then local STR = VIPSystem.Conf.Bonus[VIPLv].STR local AGI = VIPSystem.Conf.Bonus[VIPLv].AGI local ACC = VIPSystem.Conf.Bonus[VIPLv].ACC local CON = VIPSystem.Conf.Bonus[VIPLv].CON local SPR = VIPSystem.Conf.Bonus[VIPLv].SPR local DEF = VIPSystem.Conf.Bonus[VIPLv].DEF local PR = VIPSystem.Conf.Bonus[VIPLv].PR local MSPD = VIPSystem.Conf.Bonus[VIPLv].MSPD SetCharaStatev(STR, Player, ATTR_STATEV_STR, "STATE_VIP") SetCharaStatev(SPR, Player, ATTR_STATEV_STA, "STATE_VIP") SetCharaStatev(AGI, Player, ATTR_STATEV_AGI, "STATE_VIP") SetCharaStatev(CON, Player, ATTR_STATEV_CON, "STATE_VIP") SetCharaStatev(ACC, Player, ATTR_STATEV_DEX, "STATE_VIP") SetCharaStatev(DEF, Player, ATTR_STATEV_DEF, "STATE_VIP") SetCharaStatev(PR, Player, ATTR_STATEV_PDEF, "STATE_VIP") SetCharaStatev(MSPD, Player, ATTR_STATEV_MSPD, "STATE_VIP") ALLExAttrSet(Player) end end end Далее ищешь: State_VIP_Rem Приводишь к виду: State_VIP_Rem = function(Player, Statelv) RemCharaStatev(0, Player, ATTR_STATEV_STR, "STATE_VIP") RemCharaStatev(0, Player, ATTR_STATEV_STA, "STATE_VIP") RemCharaStatev(0, Player, ATTR_STATEV_AGI, "STATE_VIP") RemCharaStatev(0, Player, ATTR_STATEV_CON, "STATE_VIP") RemCharaStatev(0, Player, ATTR_STATEV_DEX, "STATE_VIP") RemCharaStatev(0, Player, ATTR_STATEV_DEF, "STATE_VIP") RemCharaStatev(0, Player, ATTR_STATEV_PDEF, "STATE_VIP") RemCharaStatev(0, Player, ATTR_STATEV_MSPD, "STATE_VIP") ALLExAttrSet(Player) end Затем ищем функцию в skilleffect.lua, которая отвечают на "поссейшн". Называется она: State_JLFT_Add Все бонусы заменяем на подобные (это пример с моего тестового сервера, у Вас может что-то отличаться): if Item_ID ==232 then --local star = GetChaAttr( role , ATTR_BSTR )*statelv local star = lv_JL SetCharaStatev(star, role, ATTR_STATEV_STR, "STATE_JLFT") end Затем ищем функцию: State_JLFT_Rem Приводим к виду: function State_JLFT_Rem ( role , sklv ) RemCharaStatev(0, role, ATTR_STATEV_STR, "STATE_JLFT") RemCharaStatev(0, role, ATTR_STATEV_AGI, "STATE_JLFT") RemCharaStatev(0, role, ATTR_STATEV_DEX, "STATE_JLFT") RemCharaStatev(0, role, ATTR_STATEV_CON, "STATE_JLFT") RemCharaStatev(0, role, ATTR_STATEV_STA, "STATE_JLFT") RemCharaStatev(0, role, ATTR_STATEV_PDEF, "STATE_JLFT") ALLExAttrSet(role) RefreshCha(role) end
  19. В skilleffect.lua или в папку addon, если у Вас присутствует. Работает таким образом: //Добавляем эффект SetCharaStatev(strVal, player, ATTR_STATEV_STR, "STATE_AC") //Где STATE_AC - придуманное название //Снимаем эффект RemCharaStatev(0 , player , ATTR_STATEV_STR , "STATE_AC")
  20. @fotostocker Ссылка ниже поможет. https://www.mediafire.com/file/9t7eyypzuomo5z5/ModuleStatev.rar/file
×
×
  • Create New...