PDA

Просмотр полной версии : Пример плагина на С++


TechnoWiz@rd
04.02.2012, 00:15
Начал ваять под себя плагинчик на C++ для некоторого удобства игры в несколько окон и решил выложить зачатки этого дела. Может кому как шаблон для его собственных разработок сгодиться. Плагин написан в Visual Studio 2010, содержит базу для обработки пакетов + в качестве примера правка пакета MoveBackwardToLocation, блокировка вызова списка ГМ и авто прием в пати от заданного чара. Так-же присутствует возможность загрузки параметров из ".ini" файла. Комментарии в коде присутствуют, так что разобраться что к чему думаю труда не составит.

Проверен на phx версий 3.4.1.61 и 3.4.1.82.

Sherman
05.02.2012, 02:44
Начал ваять под себя плагинчик на C++ для некоторого удобства игры в несколько окон и решил выложить зачатки этого дела. Может кому как шаблон для его собственных разработок сгодиться. Плагин написан в Visual Studio 2010, содержит базу для обработки пакетов + в качестве примера правка пакета MoveBackwardToLocation, блокировка вызова списка ГМ и авто прием в пати от заданного чара. Так-же присутствует возможность загрузки параметров из ".ini" файла. Комментарии в коде присутствуют, так что разобраться что к чему думаю труда не составит.

Проверен на phx версий 3.4.1.61 и 3.4.1.82.

Помоему излишне разнечено по модулям. Но я смотрю с точки зрения паскакаля, а не насильника....

vo1ty
05.02.2012, 19:58
Доброго времени суток! Извиняюсь, возможно, вопрос будет нубский. у меня MSVS 2010. Собираю этот пример в дебаге нормально, а в релизе вот что выдает:
------ Build started: Project: L2Automatics, Configuration: Release Win32 ------
Build started 2/5/2012 6:51:39 PM.
InitializeBuildStatus:
Touching "Release\L2Automatics.unsuccessfulbuild".
ClCompile:
Configuration.cpp
Configuration.cpp(22): error C2664: 'GetModuleHandleW' : cannot convert parameter 1 from 'const char [17]' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Configuration.cpp(26): error C2664: 'GetPrivateProfileStringW' : cannot convert parameter 1 from 'const char [6]' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Configuration.cpp(28): error C2664: 'GetPrivateProfileStringW' : cannot convert parameter 1 from 'const char [6]' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Build FAILED.

Time Elapsed 00:00:00.48
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
кусок кода, на который ругается:void InitConfiguration( void )
{
// Получаем путь к папке с плагином
char FullPath[MAX_PATH+1];
/* строка 22 */ GetModuleFileName( GetModuleHandle( "L2Automatics.dll" ), FullPath, MAX_PATH+1 );
strcpy( &FullPath[ strlen(FullPath) - 3], "ini" );

char Buff[256];
GetPrivateProfileString( "Party", "AutoAcceptParty", "0", Buff, 256, FullPath );
sscanf_s( Buff, "%u", &g_bAutoAcceptParty );
GetPrivateProfileString( "Party", "LeaderName", "", g_pLeaderName, 17, FullPath );
};Не уверен, можно ли данную проблему решить таким простым способом, но я заменил функции GetModuleFileName, GetModuleHandle и GetPrivateProfileString на GetModuleFileNameA, GetModuleHandleA и GetPrivateProfileStringA соответственно, так скомпилировалось без ошибок, но, что в случае дебага, что в случае релиза, когда я включаю данный плагин, сообщения от сервера больше не показываются в логе пакетов, ну и, собственно, автоприём пати не работает. что я не то делаю?

P.S.: даже в L2PacketHandler.cpp заменил кое-что, а именно:
void SP_AskJoinParty( unsigned char tid )
{
// Автоматический прием в пати
if( 1 ) { // в любом случае
char WhoAsk[17];
ReadS( WhoAsk );
if( !strcmp( "vo1ty", WhoAsk ) ) { // для ника vo1ty
L2NewPacket( L2P_RequestAnswerJoinParty );
WriteD( 0x00000001 ); // Принять приглашение
SendToServer( tid );
};
};
};И все равно никакого автоприёма.

P.P.S.: Заранее спасибоу за совет. Пользоваться L2PHX начал только сегодня, опыт в С++ не очень-то большой, как видите, за что сразу извиняюсь. :)

Aries
05.02.2012, 20:13
Кодировку просто поменяй в проекте)
Открываешь свойства проекта. Выбираешь релиз сборку.
Там дальше Свойства Конфигурации => Общие => Набор символов.
И там выбираешь: Использовать многобайтовую кодировку

ЗЫ надеюсь, у тебя русский msvc) Хотя если английский, думаю по смыслу догадаешься)

vo1ty
05.02.2012, 20:19
Спасибо за не извращенный способ, теперь все компилируется нормально (у меня английский MSVS, но перевести смог :)). Но главные проблемы остаются:когда я включаю данный плагин, сообщения от сервера больше не показываются в логе пакетов, ну и, собственно, автоприём пати не работает. что я не то делаю?

P.S.: кое-как разобрался, я пытался запустить в новом ПНХ, в 3.4.1.83 работает.