-
Content Count
595 -
Joined
-
Last visited
-
Days Won
55
Posts posted by Graf
-
-
[HEX] Вытаскиваем самоцветы из колец и ожерелий
Открываем Game.exe и ищем строку:
Цитата6B 90 47 00 00 00 00 00 01 01 00 01 00 01 00 01 01 01 01 01 01 01 01 00 01 00 00 00 01 01 00
Зеленый цвет - тип предметаКрасным выделил как раз 25 и 26 - т.е. кольца и ожерелья.
Ну и итог:
00 - можно вытащить самоцвет
01 - нельзя вытащить самоцвет
- 2
- 1
-
Привет.
Думаю только через исходники.
-
Devil`s Fortune
В разработке
Добрового времени суток, дорогой форум!
Хочу представить Вам мой проект (пока его начало разработки) - Devil`s Fortune.
Проект состоит из 2-х серверов, а именно Devil (Фан сервер) и Demon (Полу-фан сервер).
Сайт - https://devilfortune.ru/
Также там доступен форум.
Естественно, это не окончательный его вид, но там уже доступен некоторый функционал.
Новости и разделы/обсуждения форума я буду пополнять по мере разработки.
Сам концепт серверов:
Devil:
Подстройка под новые реалии российских игроков, любящих простоту добычи, но азарт шансов. Все это подкреплено исходниками клиентами и, естественно, своей изюминкой.
Demon:
В планах сделать сервер, которые может по достоинству соревноваться с нашими зарубежными товарищами. В данный момент разработана база и пишутся новые системы улучшения экипировки.
Первым в свет выйдет сервер - Devil
- 1
-
Добрый день.
Разбирая моды V3ctor столкнулся с проблемой, что "_TRUNCATE" не используется в старых версиях VS, как и "_snprintf_s"
Помогите найти аналог, пожалуйста.
Пример строки:
_snprintf_s(buf, _TRUNCATE, "%.2d:%.2d", hours, minutes);
-
Решено с помощью:
evtMouseDownContinue
- 1
- 2
-
[Исходники] Прокачка характеристик
Добрый день.
В файле:
UIStateForm.cpp
Есть функция:
void CStateMgr::MainMouseDown(CGuiData *pSender, int x, int y, DWORD key)
В целом, это выглядит, как.. Отпустил мышку, +1 характеристика прокачалась.
Прошу помочь сделать так, чтобы при зажатой мышке, то есть по идее "MousePress" или "MouseON" прокачивались характеристики, пока мышку не отпустили.
-
58 минут назад, 1nosensio сказал:@V3ct0rПривет!
Хотелось бы попросить помощи при следующей ошибке на сервере - Профессия персонажа падает на Newbie при релоге или телепорте куда-либо.
До сих пор админы сталкиваются с данной проблемой и не могут найти её решения, на форуме такая тема была уже поднята, но обоснованного ответа не было видно.
Я думаю было бы неплохо если бы кто-то помог с данной ошибкой, чтоб в дальнейшем игроки не испытывали неприятностей, заранее спасибо!
- 1
-
[Исходники] Компиляция 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
- 1
-
Update:
1. Немного изменил комментарии;
2. Убрал пару лишних строк из кода.
Спасибо за помощь людям с сообщества)
- 1
-
Совсем забыл.
В файле UIHeadSay.cpp сверху нужно добавить:
#include "ItemRecord.h"
- 1
-
[Исходники] Медали (ожерелья) со званиями
Всем привет. Тема основана на Моде от @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. надеюсь таких тем будет побольше, т.к. это все не так просто, как кажется и в одного понимать тяжело))
Также.. Надеюсь, что хоть кому-то помог)
- 1
- 1
-
Today will start add multi-language and fix correct encoding ItemInfo.txt
+
Add some moments, which advised V3ctor.
------------------------------------------------
Сегодня начну дорабатывать программу, в частности определение кодировки(будет зависеть от выбранного языка программы)
+
Исправлять моменты, которые посоветовал Виктор.
- 1
-
3 часа назад, Mesut сказал:i wonder if somebody make it eng language so ppl can read it? cool anyway awsome work...
Yes, i will do multi-language, but later)
- 1
- 1
-
31 минуту назад, V3ct0r сказал:Да, кстати, @Graf, можно перевести программу на английский язык и выложить в англоязычном разделе, я, думаю, программа будет пользоваться популярностью.
Сейчас немного углубился в свой проект. Чуть позже доработаю программу и сделаю мульти-язык. Спасибо)
- 1
- 1
-
6 минут назад, 3kov сказал:Нашел корень проблемы. В Gameserver.exe на прибавку от самоцветов стоит Short тип данных от -32767 до +32767. Надо хексить ГС и менять тип данных на это. Но как это сделать решения у меня нет.
И это нужно будет менять не только в 1 месте.. Поэтому и говорю, проще использовать самоцветы с меньшим значением)
- 1
-
54 минуты назад, 3kov сказал:Столкнулся с данной проблемой, если узнали как решить дайте знать. Или может кто-то еще поможет
Попробуй уменьшить прибавку самоцвета. Слишком большое значение для сервера.
-
1 час назад, V3ct0r сказал:Кто-нибудь пользуется этой штукой в реальных условиях с игроками? Как она работает?
Я только поставил, но у меня момент разработки. Прошу не удалять/не чистить тему)
- 1
-
15 минут назад, V3ct0r сказал:AccontServer -> TradeDB. Передавал значение ПСТ.
Подробно не разбирал.
- 1
-
Решение
Ошибка игрового клиента "Account server has encountered a malfunction"
Может появляться из-за триггеров в Ваших базах данных.
Если решения из данной темы Вам не помогли, посмотрите в гугле, как увидеть триггеры в Вашей БД.
Удаление триггера выглядит следующим образом:
USE имя базы GO IF OBJECT_ID ('Имя триггера', 'TR') IS NOT NULL DROP TRIGGER Имя триггера; GO
- 1
-
Также, чтобы не использовать картинки с Мордо, вытащите из архива Арбах (тема с pkodev) папки icons и monsters.
- 1
-
[Помощь новичкам]
Бывают ошибки, вида "нарушена индивидуальность".
Для быстрого поиска проблемных 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.
-
Идея:
Ввести функции (на серверной части):
1. Есть ли вещь в банке;
2. Удалить вещь в банке.
-
Check config files GameServer1,2 and etc..
-
Открываешь аддон с 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
- 1
- 1
Проблема c созданием(изменением) высот на карте
in Пиратия: Помощь
Posted · Edited by Graf · Report reply
Привет.
Перечитывая тему 3-й раз, вспомнил в чем проблема)))
В редакторе карт клиента есть "изменение высоты". То есть тебе еще бегать нужно, править это чудо.
Где именно не помню, последний раз там лазал года 4 назад.