Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 1 из 1
  1. #1
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±

    ResetState - изменяет состояние автоматона на исходное

    Описание:
    Изменяет состояние автоматона на исходное, поскольку обычным оператором state это сделать невозможно.

    Параметры:
    name - название автоматона
    any_state - любое состояние автоматона

    Возвращаемое значение:
    Всегда возвращает нуль.

    Минусы реализации:
    • Несовместимость с JIT-плагином.
    • Необходимо использовать библиотеку AMX Assembly, точнее библиотеки amx_header, opcode.

    Код:
    PHP код:
    // ResetState(name, any_state)
    #define ResetState(%1,%2) __ResetState();state %1:%2

    stock __ResetState()
    {
        new
            
    ret_address,
            
    ip,
            
    hdr[AMX_HDR];

        
    GetAmxHeader(hdr);

        
    #emit load.s.pri 4  // ret addr
        #emit stor.s.pri ret_address

        
    ip hdr[AMX_HDR_COD] - hdr[AMX_HDR_DAT] + ret_address;

        if (
    UnrelocateOpcode(Opcode:ReadAmxMemory(ip)) == OP_BREAK)
            
    ip += 4;

        
    assert (ReadAmxMemory(ip) == _:OP_CONST_PRI);

        
    WriteAmxMemory(ip 40);

        return 
    0;

    Пример использования:
    PHP код:
    somefunc() <>
    {
        print(
    "Called somefunc() <>");
    }

    somefunc() <somestate:one>
    {
        print(
    "Called somefunc() <somestate:one>");
    }


    main()
    {
        
    state somestate:one;
        
    somefunc();

        
    ResetState(somestateone);
        
    somefunc();

    См. также:

    Автор: VVWVV
    Копирование данной статьи на других ресурсах без разрешения автора запрещено.

  2. 2 пользователя(ей) сказали cпасибо:
    Geebrox (09.04.2017) SooBad (09.04.2017)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •