Русское сообщество по скриптингу

AMXX Decompiler

Файлы и модули, которые пригодятся при скриптинге для AMX Mod X или SourceMod.
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено выкладывать файлы или модули для AMXX/SM, которые пригодятся при программировании.

AMXX Decompiler

Сообщение quckly » 21 июн 2016, 16:07

Сразу ссылка: Вы должны зарегистрироваться, чтобы видеть ссылки.
Взят оригинальный декомпилятор Lysis Вы должны зарегистрироваться, чтобы видеть ссылки. для SourceMod и добавлена поддержка amxx плагинов с отладочной информацией.
Так же была начата работа по поддержке декомпиляции плагинов без отладочной информации с помощью кода от Wraith Disassembler.
Текущая версия декомпилирует только часть функций. (Декомпилятор может декомпилировать некоторые функции, а на некоторых полностью упасть.)
Если у кого то есть желание, то он может улучшить декомпилятор.
Так же в комплекте идут измененные include файлы, для автоматической подстановки например set_pev(ent, pev_velocity... и других констант.

Исходники: Вы должны зарегистрироваться, чтобы видеть ссылки.
Использование: Compile and copy amxx_include and opcodes.txt to bin/Debug folder.
Lysis plugin.[amxx|smx]

Тема перемещена в раздел "Файлы и модули" // Subb98
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 243 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: AMXX Decompiler

Сообщение RevCrew » 21 июн 2016, 16:40

quckly, ошибки надо кидать?)

Добавлено спустя 12 минут 37 секунд:
Если делать изначально плагин по инклудам(Как colored translit), то при декомпиляции, все плохо
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: AMXX Decompiler

Сообщение Fedcomp » 21 июн 2016, 17:22

Очень круто. Жаль C#
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4936
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 813 раз.
Поблагодарили: 1317 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

Re: AMXX Decompiler

Сообщение Asmodai » 22 июн 2016, 16:52

С дебагом можно вообще 1в1, но это не интересно. А без дебага и не нужно, не стоит оно того.
Аватара пользователя
Asmodai
Адмирал
 
Сообщения: 466
Зарегистрирован: 24 фев 2011, 20:48
Благодарил (а): 0 раз.
Поблагодарили: 393 раз.
Языки программирования: Counter-Strike 1.6

Re: AMXX Decompiler

Сообщение quckly » 10 июл 2016, 12:57

Использование: Перетащить .amxx файл на LysisDecompile.

Скачать:
1. Во вложении
2. Вы должны зарегистрироваться, чтобы видеть ссылки.

Пример декомпиляции:
Код: Выделить всё
#pragma semicolon 1
#pragma ctrlchar '\'

new g_TutorPrecache[11][] =
{
    
"gfx/career/icon_!.tga",
    
"gfx/career/icon_!-bigger.tga",
    
"gfx/career/icon_i.tga",
    
"gfx/career/icon_i-bigger.tga",
    
"gfx/career/icon_skulls.tga",
    
"gfx/career/round_corner_ne.tga",
    
"gfx/career/round_corner_nw.tga",
    
"gfx/career/round_corner_se.tga",
    
"gfx/career/round_corner_sw.tga",
    
"resource/TutorScheme.res",
    
"resource/UI/TutorTextWindow.res"
};
new Array:
TutorMSG[5];
new 
g_iNextMSG[5];
new 
g_iNextColor;
new 
g_bLoaded;
new 
g_pStartRound;
new 
g_pRepeatTime;
new 
g_pNextColor;
new 
g_pNextMsg;
new 
g_iMsgTutor;
new 
g_iMsgTutClose;
new 
g_iMaxPlayers;

bool:operator!=(Float:,Float:)(Float:oper1Float:oper2)
{
    return 
floatcmp(oper1oper2) != 0;
}

bool:operator>(Float:,Float:)(Float:oper1Float:oper2)
{
    return 
floatcmp(oper1oper2);
}

replace_all(String:string[], lenString:what[], String:with[])
{
    new 
pos 0;
    new 
var1 contain(stringwhat);
    
pos var1;
    if (
var1 == -1)
    {
        return 
0;
    }
    new 
total 0;
    new 
with_len strlen(with);
    new 
diff strlen(what) - with_len;
    new 
total_len strlen(string);
    new 
temp_pos 0;
    while (
replace(string[pos], len poswhatwith))
    {
        
pos with_len pos;
        
total_len -= diff;
        if (
pos >= total_len)
        {
            return 
total;
        }
        else
        {
            
temp_pos contain(string[pos], what);
            if (
temp_pos == -1)
            {
                return 
total;
            }
            else
            {
                
pos temp_pos pos;
                
total++;
            }
            return 
total;
        }
        return 
total;
    }
    return 
total;
}

get_configsdir(String:name[], len)
{
    return 
get_localinfo("amxx_configsdir"namelen);
}

public 
plugin_precache()
{
    new 
0;
    while (
11)
    {
        
precache_generic(g_TutorPrecache[i][0][0]);
        
i++;
    }
    return 
0;
}

public 
plugin_init()
{
    
register_plugin("Tutor advertisement""0.3.1""quckly");
    
g_iMsgTutor get_user_msgid("TutorText");
    
g_iMsgTutClose get_user_msgid("TutorClose");
    
g_iMaxPlayers get_maxplayers();
    
g_pStartRound register_cvar("adtutor_round""0"00.00);
    
g_pRepeatTime register_cvar("adtutor_repeat""120.0"00.00);
    
g_pNextColor register_cvar("adtutor_nextcolor""1"00.00);
    
g_pNextMsg register_cvar("adtutor_nextmsg""1"00.00);
    
register_cvar("adtutor_version""0.3.1"680.00);
    
set_cvar_string("adtutor_version""0.3.1");
    
TutorMSG[1] = ArrayCreate(19232);
    
TutorMSG[2] = ArrayCreate(19232);
    
TutorMSG[3] = ArrayCreate(19232);
    
TutorMSG[4] = ArrayCreate(19232);
    
register_event("HLTV""EventRoundStart""a""1=0""2=0");
    
register_logevent("EventRoundEnd"2"1=Round_End");
    
set_task(15.00"Task_Load"57810""0""0);
    
g_bLoaded 0;
    
g_iNextColor 4;
    new 
1;
    while (
<= 4)
    {
        
g_iNextMSG[i] = 0;
        
i++;
    }
    return 
0;
}

public 
EventRoundStart()
{
    !!! 
Removed Phi
    
if (!g_bLoaded)
    {
        return 
0;
    }
    if (
get_pcvar_num(g_pStartRound))
    {
        if (
get_pcvar_num(g_pStartRound))
        {
            
set_task(float(get_pcvar_num(g_pStartRound)), "Task_Show"57830""0""0);
        }
    }
    else
    {
        
TutorShowNext();
    }
    if (
get_pcvar_float(g_pRepeatTime) > 0)
    {
        
set_task(get_pcvar_float(g_pRepeatTime), "Task_Show"57820""0"b"0);
    }
    return 
0;
}

public 
EventRoundEnd()
{
    
remove_task(578200);
    
remove_task(578300);
    return 
0;
}

public 
Task_Show()
{
    
TutorShowNext();
    return 
0;
}

TutorShowNext()
{
    !!! 
Removed Phi
    
static szTutorText[192];
    if (
get_pcvar_num(g_pNextColor))
    {
        do {
            new 
var1 get_next_color(g_iNextColor);
            
g_iNextColor var1;
        } while (
ArraySize(TutorMSG[var1][0][0]));
    }
    if (
get_pcvar_num(g_pNextMsg))
    {
        
g_iNextMSG[g_iNextColor] = get_next_msg(g_iNextMSG[g_iNextColor][0][0]);
    }
    else
    {
        
g_iNextMSG[g_iNextColor] = random_num(0ArraySize(TutorMSG[g_iNextColor][0][0]) - 1);
    }
    
ArrayGetString(TutorMSG[g_iNextColor][0][0], g_iNextMSG[g_iNextColor][0][0], szTutorText191);
    
tutorMake(0g_iNextColor10.00szTutorText);
    return 
0;
}


/ * 
ERRORDecompile function Task_Load timeout * /
 function 
"Task_Load" (number 10)
get_next_color(iColor)
{
    if (
iColor == 4)
    {
        return 
1;
    }
    return 
iColor 1;
}

get_next_msg(iNumMsg)
{
    new 
var1 ArraySize(TutorMSG[g_iNextColor][0][0]) - 1;
    if (
var1 == iNumMsg)
    {
        return 
0;
    }
    
iNumMsg++;
    return 
var1;
}

tutorMake(idTutorColor:ColorFloat:fTimeString:szText[])
{
    !!! 
Removed Phi
    
new szMessage[192];
    
vformat(szMessage191szText5);
    if (!
id)
    {
        
message_begin(MSG_BROADCASTg_iMsgTutor35120);
        
write_string(szMessage);
        
write_byte(0);
        
write_short(0);
        
write_short(0);
        
write_short(<< Color);
        
message_end();
    }
    else
    {
        if (
is_user_connected(id))
        {
            
message_begin(MSG_ONE_UNRELIABLEg_iMsgTutor3512id);
            
write_string(szMessage);
            
write_byte(0);
            
write_short(0);
            
write_short(0);
            
write_short(<< Color);
            
message_end();
        }
    }
    if (
0.00 != fTime)
    {
        if (!
id)
        {
            new 
1;
            while (
<= g_iMaxPlayers)
            {
                
remove_task(578400);
                
i++;
            }
            
set_task(fTime"tutorClose"57840""0""0);
        }
        
remove_task(id 578400);
        
set_task(fTime"tutorClose"id 57840""0""0);
    }
    return 
0;
}

public 
tutorClose(iTask)
{
    new 
id iTask + -57840;
    if (!
id)
    {
        
message_begin(MSG_BROADCASTg_iMsgTutClose35120);
        
message_end();
    }
    else
    {
        if (
is_user_connected(id))
        {
            
message_begin(MSG_ONE_UNRELIABLEg_iMsgTutClose3512id);
            
message_end();
        }
    }
    return 
0;
}

 
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 243 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: AMXX Decompiler

Сообщение liFe iS GoOD » 10 июл 2016, 13:17

Заметил , что в названии папки в которой будет лежать декомпилятор не должно быть пробелов , иначе :

Код: Выделить всё

Необработанное исключение: System.IO.FileNotFoundException: Файл 'D:\Te' не найден.
   в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   в System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
   в Lysis.PawnFile.FromFile(String path)
   в Lysis.Program.Main(String[] args)
Аватара пользователя
liFe iS GoOD
Модератор
 
Сообщения: 1416
Зарегистрирован: 24 май 2012, 19:48
Благодарил (а): 116 раз.
Поблагодарили: 472 раз.

Re: AMXX Decompiler

Сообщение quckly » 10 июл 2016, 14:23

liFe iS GoOD писал(а):Заметил , что в названии папки в которой будет лежать декомпилятор не должно быть пробелов , иначе :

Код: Выделить всё

Необработанное исключение: System.IO.FileNotFoundException: Файл 'D:\Te' не найден.
   в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   в System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
   в Lysis.PawnFile.FromFile(String path)
   в Lysis.Program.Main(String[] args)

Наверное это-то из-за использование LysisDecompile и, когда файл перетаскивается на программу, он скорее всего обернут в "", и при редиректе пути к файлу на саму lysis кавычки убираются. Можно написать какой-нибудь другой батник, или напрямую lysis запускать и вывод программы в файл писать.
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 243 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: AMXX Decompiler

Сообщение Nixon133 » 10 июл 2016, 16:59

Скомпилировал на VS 2013. При попытке декомпилировать плагин на AMX 1.8.2. крашится и пишет:
Код: Выделить всё
Необработанное исключение: System.ComponentModel.Win32Exception: Не удается найти указанный файл
   в System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
   в System.Diagnostics.Process.Start()
   в LysisDecompile.Program.Main(String[] args) в c:\Users\Alexander\Desktop\quckly-lysis-7c768649e988\LysisDecompile\Program.cs:строка 23
скуйп - legaalize
Аватара пользователя
Nixon133
 
Сообщения: 476
Зарегистрирован: 13 ноя 2012, 12:20
Благодарил (а): 107 раз.
Поблагодарили: 56 раз.
Опыт программирования: Больше трех лет
Языки программирования: C, Pawn

Re: AMXX Decompiler

Сообщение quckly » 10 июл 2016, 22:15

Nixon133 писал(а):Скомпилировал на VS 2013. При попытке декомпилировать плагин на AMX 1.8.2. крашится и пишет:
Код: Выделить всё
Необработанное исключение: System.ComponentModel.Win32Exception: Не удается найти указанный файл
   в System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
   в System.Diagnostics.Process.Start()
   в LysisDecompile.Program.Main(String[] args) в c:\Users\Alexander\Desktop\quckly-lysis-7c768649e988\LysisDecompile\Program.cs:строка 23

LysisDecompile - просто запускает Lysis и сохраняет вывод в файл. Для его работы необходимо положить Lysis и LysisDecompile в одну папку.
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 243 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: AMXX Decompiler

Сообщение Nixon133 » 10 июл 2016, 22:34

quckly, То что появляются ошибки вроде:
Код: Выделить всё
Необработанное исключение: Amx.Ops.InvalidOpException: There is no opcode corresponding to the number 120
   в Amx.Ops.Ops.get_Item(Int32 index)
   в Amx.Cod.Disassembly.DisassembleCod(IAmxInstance file, Ops ops)
   в Amx.Cod.Disassembly.Disassemble()
   в AMXModX.AMXWraithFile..ctor(Byte[] binary)
   в AMXModX.AMXModXFile.GetPawnFile(Byte[] binary)
   в Lysis.PawnFile.FromFile(String path)
   в Lysis.Program.Main(String[] args)


Это примерно говорит о чём?
скуйп - legaalize
Аватара пользователя
Nixon133
 
Сообщения: 476
Зарегистрирован: 13 ноя 2012, 12:20
Благодарил (а): 107 раз.
Поблагодарили: 56 раз.
Опыт программирования: Больше трех лет
Языки программирования: C, Pawn

След.

Вернуться в Файлы и модули

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7