Jump to content

Graf

Community
  • Content Count

    595
  • Joined

  • Last visited

  • Days Won

    55

Posts posted by Graf


  1. Привет.

    Перечитывая тему 3-й раз, вспомнил в чем проблема)))

    В редакторе карт клиента есть "изменение высоты". То есть тебе еще бегать нужно, править это чудо.

    Где именно не помню, последний раз там лазал года 4 назад.

    • Thanks 1

  2. [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 - нельзя вытащить самоцвет

    • Like 2
    • Thanks 1

  3. Devil`s Fortune

    В разработке

    spacer.png

    Добрового времени суток, дорогой форум!

    Хочу представить Вам мой проект (пока его начало разработки) - Devil`s Fortune.

    Проект состоит из 2-х серверов, а именно Devil (Фан сервер) и Demon (Полу-фан сервер).

     

    Сайтhttps://devilfortune.ru/

    Также там доступен форум.

    Естественно, это не окончательный его вид, но там уже доступен некоторый функционал.

    Новости и разделы/обсуждения форума я буду пополнять по мере разработки.

     

    Сам концепт серверов:

    Devil:

    Подстройка под новые реалии российских игроков, любящих простоту добычи, но азарт шансов. Все это подкреплено исходниками клиентами и, естественно, своей изюминкой.

     

    Demon:

    В планах сделать сервер, которые может по достоинству соревноваться с нашими зарубежными товарищами. В данный момент разработана база и пишутся новые системы улучшения экипировки.

     

    Первым в свет выйдет сервер - Devil

     

    • Like 1

  4. Добрый день.

    Разбирая моды V3ctor столкнулся с проблемой, что "_TRUNCATE" не используется в старых версиях VS, как и "_snprintf_s"

    Помогите найти аналог, пожалуйста.

    Пример строки:

    _snprintf_s(buf, _TRUNCATE, "%.2d:%.2d", hours, minutes);

     


  5. [Исходники] Прокачка характеристик

    Добрый день.

    В файле:

    UIStateForm.cpp

    Есть функция:

    void CStateMgr::MainMouseDown(CGuiData *pSender, int x, int y, DWORD key)

    В целом, это выглядит, как.. Отпустил мышку, +1 характеристика прокачалась.

    Прошу помочь сделать так, чтобы при зажатой мышке, то есть по идее "MousePress" или "MouseON" прокачивались характеристики, пока мышку не отпустили.

     


  6. 58 минут назад, 1nosensio сказал:

    @V3ct0rПривет!

    Хотелось бы попросить помощи при следующей ошибке на сервере - Профессия персонажа падает на Newbie при релоге или телепорте куда-либо.

    До сих пор админы сталкиваются с данной проблемой и не могут найти её решения, на форуме такая тема была уже поднята, но обоснованного ответа не было видно.

    Я думаю было бы неплохо если бы кто-то помог с данной ошибкой, чтоб в дальнейшем игроки не испытывали неприятностей, заранее спасибо!

     

    • Thanks 1

  7. [Исходники] Компиляция 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

     

    • Thanks 1

  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;
    		}
    	}
    }

     

    Итог:

    spacer.png

     

    P.S. надеюсь таких тем будет побольше, т.к. это все не так просто, как кажется и в одного понимать тяжело))

    Также.. Надеюсь, что хоть кому-то помог)

    • Like 1
    • Thanks 1

  9. Today will start add multi-language and fix correct encoding ItemInfo.txt

    +

    Add some moments, which advised V3ctor.

    ------------------------------------------------

    Сегодня начну дорабатывать программу, в частности определение кодировки(будет зависеть от выбранного языка программы)

    +

    Исправлять моменты, которые посоветовал Виктор.

    • Thanks 1

  10. 31 минуту назад, V3ct0r сказал:

    Да, кстати, @Graf, можно перевести программу на английский язык и выложить в англоязычном разделе, я, думаю, программа будет пользоваться популярностью.

    Сейчас немного углубился в свой проект. Чуть позже доработаю программу и сделаю мульти-язык. Спасибо)

    • Like 1
    • Thanks 1

  11. 6 минут назад, 3kov сказал:

    Нашел корень проблемы. В Gameserver.exe на прибавку от самоцветов стоит Short тип данных от -32767 до +32767. Надо хексить ГС и менять тип данных на это. Но как это сделать решения у меня нет.

    И это нужно будет менять не только в 1 месте.. Поэтому и говорю, проще использовать самоцветы с меньшим значением)

    • Thanks 1

  12. Решение

    Ошибка игрового клиента "Account server has encountered a malfunction"

    Может появляться из-за триггеров в Ваших базах данных.

    Если решения из данной темы Вам не помогли, посмотрите в гугле, как увидеть триггеры в Вашей БД.

    Удаление триггера выглядит следующим образом:

    USE имя базы
    GO  
    IF OBJECT_ID ('Имя триггера', 'TR') IS NOT NULL  
       DROP TRIGGER Имя триггера;  
    GO  

     

    • Thanks 1

  13. [Помощь новичкам]

    Бывают ошибки, вида "нарушена индивидуальность".

    Для быстрого поиска проблемных 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.


  14. @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

     

    • Like 1
    • Thanks 1
×
×
  • Create New...