Курилка Флудим и шутим тут!
23.03.2017, 14:05
#1
Новичок
Регистрация: 25.08.2016
Сообщений: 21
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
[Lineage2] rGuard Interlude
Hello,
Any one tryed to adapt it on interlude?
Im trying, all work perfect except "Olympiad hero list tab" i get this error:
Цитата:
General protection fault!
History: UUIScript::execGetPledgeCrestTexFromPledgeCrestID <- UObject::ProcessEvent <- (HeroTowerWnd Transient.HeroTowerWnd0, Function Interface.HeroTowerWnd.OnEvent) <- XMLUIManager::ExecuteUIEvent <- NConsoleWnd::OnHeroList <- UGameEngine::OnHeroList <- ExHeroListPacket <- UNetworkHandler::Tick <- Function Name=ExHeroListPacke <- UGameEngine::Tick <- UpdateWorld <- MainLoop
Where can be problem?
rGaurd part of code:
Код:
void __cdecl new_SendPacket(unsigned int This, char *Format, ...)
{
if(enumas==0)
enumas=1;
unsigned char buf[10240];
int size = 0, len;
wchar_t *wstr;
va_list args;
va_start(args, Format);
while (*Format != 0)
{
switch (*Format)
{
case 'c':
*(unsigned char*) (buf + size) = va_arg(args, unsigned char);
size++;
break;
case 'h':
*(unsigned short int*) (buf + size) = va_arg(args, unsigned short int);
size += 2;
break;
case 'd':
*(unsigned int*) (buf + size) = va_arg(args, unsigned int);
size += 4;
break;
case 'Q':
*(unsigned __int64*) (buf + size) = va_arg(args, unsigned __int64);
size += 8;
break;
case 'b':
len = va_arg(args, unsigned int);
memcpy(buf + size, va_arg(args, void*), len);
size += len;
break;
case 'S':
wstr = va_arg(args, wchar_t*);
if (wstr == 0)
{
len = 2;
*(unsigned short int*) (buf + size) = 0;
}
else
{
len = wcslen(wstr) * 2 + 2;
memcpy(buf + size, wstr, len);
}
size += len;
break;
default:
true_SendPacket(This, "cc", 0xA1, 0x04);
ErrorExit("Send Packet Unknown Format!");
break;
}
Format++;
}
va_end(args);
true_SendPacket(This, "b", size, (int)buf);
}
int __fastcall new_AddNetworkQueue(unsigned int This, unsigned int EDX, TNetworkPacket *NetworkPacket)
{
if(enumas==0) enumas=1;
if (SendPacket == NULL) {
__asm {
mov ebx, ecx
mov ecx, [ebx + 0x48] ; see offset in disassembler
mov edx, [ecx]
mov _clientSocket, ecx
mov ecx, [edx + 0x68]; in disassembler too
mov _sendPacket, ecx;
}
true_SendPacket = (_SendPacket) splice((unsigned char*) _sendPacket, new_SendPacket);
SendPacket = 1;
}
return true_AddNetworkQueue(This, EDX, NetworkPacket);
}
23.03.2017, 19:12
#2
Местный
Регистрация: 24.10.2014
Сообщений: 190
Сказал Спасибо: 4
Имеет 42 спасибок в 40 сообщенях
Код:
unsigned char buf = (unsigned char*)malloc(65535);
and
after
Код:
true_SendPacket(This, "b", size, (int)buf);
24.03.2017, 13:15
#3
Новичок
Регистрация: 25.08.2016
Сообщений: 21
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Цитата:
Сообщение от
ScythLab
Код:
unsigned char buf = (unsigned char*)malloc(65535);
and
after
Код:
true_SendPacket(This, "b", size, (int)buf);
both codes after true_SendPacket...?
Now i get error about buf (unsigned char differs in levels of indirection from unsigned char[1024]) and about cannot convert from unsigned char* to unsigned char
28.03.2017, 13:20
#4
Новичок
Регистрация: 25.08.2016
Сообщений: 21
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Any one?
Добавлено через 1 час 12 минут
Ok, im fixed errors but same situtation im still get critical error on hero list in game.
Последний раз редактировалось wongerlt, 28.03.2017 в 13:20 .
Причина: Добавлено сообщение
29.03.2017, 12:23
#5
Местный
Регистрация: 24.10.2014
Сообщений: 190
Сказал Спасибо: 4
Имеет 42 спасибок в 40 сообщенях
Либо забудь о программировании, либо начинай думать самостоятельно.
Код, который я тебе привел, элементарен и прост, если ты его не можешь понять и скомпилировать, то найми себе программиста, кто сделает это за тебя, а сам занимайся более полезными вещами.
30.03.2017, 02:55
#6
Местный
Регистрация: 22.10.2014
Сообщений: 122
Сказал Спасибо: 1
Имеет 8 спасибок в 7 сообщенях
ща поцан такой русский выучит еще чтобы твой коммент прочитать))
я вот сам до сих пор не могу собраться за c++ взяться чтобы сплайсинг сделать))
30.03.2017, 21:30
#7
Местный
Регистрация: 24.10.2014
Сообщений: 190
Сказал Спасибо: 4
Имеет 42 спасибок в 40 сообщенях
alexov , пацан, если хоть немного мозгов есть, то воспользуется переводчиком. К тому же это этого его проблемы, не мои, что он зашел на русский ресурс и здесь надеется, чтобы за него все решили.
Ну а ты если возьмешься за с++, то я так думаю, что осилишь как заюзать массив на 64к вместо жалких 10, которых для некоторых пакетов не хватает
31.03.2017, 03:30
#8
Местный
Регистрация: 22.10.2014
Сообщений: 122
Сказал Спасибо: 1
Имеет 8 спасибок в 7 сообщенях
жестко как-то ты последнее время отвечаешь всем) злой стал))
я массив динамически выделяю, если пакет не влезает, массив заново выделяется. то есть на первых пакетах эта куча созданий массива, но зато потом он остается как раз того размера как нужен ни больше ни меньше)
а на с++ мне поди даже память выделять не придется, я хочу сделать просто коннектор: что приходит в функцию, то сразу в сокет записывать, отправлять себе по сети. а дальше уж на шарпе горы свернуть не вопрос)
31.03.2017, 08:09
#9
Пользователь
Регистрация: 14.07.2016
Сообщений: 59
Сказал Спасибо: 6
Имеет 10 спасибок в 9 сообщенях
Цитата:
Сообщение от
alexov
то есть на первых пакетах эта куча созданий массива
но зачем такое? под size выделено 4 байта -> максимум 2^16, столько можно выделить один раз и не задумываться.
Цитата:
Сообщение от
alexov
то сразу в сокет записывать, отправлять себе по сети.
куда по сети если не секрет?
24.08.2017, 03:01
#10
Новичок
Регистрация: 25.08.2016
Сообщений: 21
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
so any one know where problem?
Код:
void __cdecl new_SendPacket(unsigned int This, char *Format, ...)
{
if(enumas==0)
enumas=1;
unsigned char *buf;
buf = (unsigned char *) malloc(65535);
int size = 0, len;
wchar_t *wstr;
va_list args;
va_start(args, Format);
while (*Format != 0)
{
switch (*Format)
{
case 'c':
*(unsigned char*) (buf + size) = va_arg(args, unsigned char);
size++;
break;
case 'h':
*(unsigned short int*) (buf + size) = va_arg(args, unsigned short int);
size += 2;
break;
case 'd':
*(unsigned int*) (buf + size) = va_arg(args, unsigned int);
size += 4;
break;
case 'Q':
*(unsigned __int64*) (buf + size) = va_arg(args, unsigned __int64);
size += 8;
break;
case 'b':
len = va_arg(args, unsigned int);
memcpy(size+buf, va_arg(args, void*), len);
size += len;
break;
case 'S':
wstr = va_arg(args, wchar_t*);
if (wstr == 0)
{
len = 2;
*(unsigned short int*) (buf + size) = 0;
}
else
{
len = wcslen(wstr) * 2 + 2;
memcpy(size+buf, wstr, len);
}
size += len;
break;
default:
true_SendPacket(This, "cc", 0xA1, 0x04);
break;
}
Format++;
}
va_end(args);
true_SendPacket(This, "b", size, (int)buf);
free(buf);
}
all work but still error on hero list.
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
Часовой пояс GMT +4, время: 23:27 .
vBulletin style designed by
MSC Team .
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод:
zCarot
Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!