AMX MOD X
Пятница, 19.04.2024, 20:56:31



Приветствую Вас Гость | RSS
[ Главная ] [ Spawn custom item in plugin "Weapon Physics". - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Полезная информация » Spawn custom item in plugin "Weapon Physics". (Решение проблемы со спавном "custom item" в этом плагине.)
Spawn custom item in plugin "Weapon Physics".
PAHANCSДата: Воскресенье, 28.06.2009, 16:40:32 | Сообщение # 1
Полковник
Группа: Пользователи
Сообщений: 183
Репутация: 4
Статус: Не в сети
Недавно я сталкнулся с проблемой спавна "custom item" в плагине "Weapon Physics",
в общем в этом плагине есть возможность добавить свою ентити для обработки физики,
или установить своей ентити предложеный "classname":

Code

// What the entity's classname is changed to after it's created, e.g. set_pev(ent, pev_classname, "fakeweapon")
new const custom_classname[][] = { "fakeweapon" }

Но проблема в том что нужные параметры для ентити ставятся на спавне, а спавн
своей ентити не происходит.

Для выхода из этого положения я создал ещё дополнительный плагин (SpawnCustomItem.sma)
и include файл (SpawnCustomItem.inc) с помощью которых можно это исправить.

Кидаете всё по нужным папкам, далее нужно сделать так:

в плагине "Weapon Physics" нужно добавить

Code

#include <SpawnCustomItem>

потом заменить существующие функции на эти

Code

public do_ham_hooks()
{
        new count = 0
               
        for (new i; i < sizeof persistant; i++)
        {
         hamhooks[count++] = RegisterHam(Ham_Spawn, persistant[i], "spawn_persistant_item", 1)
         hamhooks[count++] = RegisterHam(Ham_Touch, persistant[i], "touch_item")
         hamhooks[count++] = RegisterHam(Ham_TakeDamage, persistant[i], "damage_item")
         hamhooks[count++] = RegisterHam(Ham_TraceAttack, persistant[i], "shoot_item")
        }
               
        for (new x; x < sizeof classes; x++)
        {
         hamhooks[count++] = RegisterHam(Ham_Spawn, classes[x], "spawn_item", 1)
         hamhooks[count++] = RegisterHam(Ham_Touch, classes[x], "touch_item")
         hamhooks[count++] = RegisterHam(Ham_TakeDamage, classes[x], "damage_item")
         hamhooks[count++] = RegisterHam(Ham_TraceAttack, classes[x], "shoot_item")
        }
               
        for (new n; n < sizeof custom_base; n++)
        {
         //hamhooks[count++] = RegisterHam(Ham_Spawn, custom_base[n], "spawn_custom_item", 1)
         hamhooks[count++] = RegisterHam(Ham_Touch, custom_base[n], "touch_custom_item")
         hamhooks[count++] = RegisterHam(Ham_TakeDamage, custom_base[n], "damage_custom_item")
         hamhooks[count++] = RegisterHam(Ham_TraceAttack, custom_base[n], "shoot_custom_item")
        }
}

public update_hooks_and_forwards()
{
        if (get_pcvar_num(physics_pcvar))
        {
         for (new i; i < sizeof hamhooks-1; i++)
         {
          EnableHamForward(hamhooks[i])
         }
        }
        else
        {
         for (new i; i < sizeof hamhooks-1; i++)
         {
          DisableHamForward(hamhooks[i])
         }
        }
               
        if (get_pcvar_num(shootweapons_pcvar) && get_pcvar_num(physics_pcvar) && !traceline_fid)
        {
         traceline_fid = register_forward(FM_TraceLine, "fw_traceline")
        }
               
        if ((!get_pcvar_num(shootweapons_pcvar) || !get_pcvar_num(physics_pcvar)) && traceline_fid)
        {
         unregister_forward(FM_TraceLine, traceline_fid)
         traceline_fid = 0
        }
        if(get_pcvar_num(physics_pcvar) && !is_enabled_spawn_custom_item())        
        {
         enable_spawn_custom_item()
        }
        else        
        {
         disab le_spawn _custom_ item()
        }     
}

p ublic  spawn_custom_item(ent)
{
        if (is_custom_ent(ent))
        {
         return spawn_item(ent)
        }
        return PLUGIN_CONTINUE
}

Ну и конечно добавить свой "classname" или использовать предложеный

Code

new const custom_classname[][] = { "fakeweapon", "my_classname" }

Теперь переходим к своему плагину и добавляем нужные строки:

Code

#include <SpawnCustomItem> // эту строку

// это к примеру

public create_my_entity(Float:crwforigin[3], Float:crwfangles[3]) {
        new crent = fm_create_entity("info_target")
        if(!pev_valid(crent))
         return 0
        set_pev(crent, pev_classname, "my_classname")
        set_pev(crent, pev_solid, SOLID_TRIGGER)
        set_pev(crent, pev_movetype, MOVETYPE_TOSS)
        set_pev(crent, pev_origin, crwforigin)
        set_pev(crent, pev_angles, crwfangles)
        fm_entity_set_model(crent, "my_model")
        fm_entity_set_size(crent, {-12.0, -12.0, -0.5}, {12.0, 12.0, 0.5})
        execute_spawn_custom_item(crent) // эту строку
        return crent
}

В файле "configs\plugins.ini" нужно обязательно чтобы перед вашим плагином и
перед плагином "Weapon Physics" стоял "SpawnCustomItem.amxx"

Теперь всё компилируем, всё должно работать, а если у кого нет плагина
"Weapon Physics" или неполучается сделать, то можно ниже скачать уже передланый
плагин, вам останется только добавить в свой плагин нужные строки и в плагине
"Weapon Physics" добавить свой "classname" или использовать предложеный.

Добавлено (2009-06-25, 4:11 Pm)
---------------------------------------------
Забыл ещё добавить, в описании плагина написано что при выстрелах по оружию оно
должно отскакивать, к примеру у меня оно не отскакивает, я понял проблему, нужно
чтобы у ентити солид был установлен на "SOLID_BBOX" или "SOLID_SLIDEBOX"
(set_pev(ent, pev_solid, SOLID_BBOX) или set_pev(ent, pev_solid, SOLID_SLIDEBOX),
к сожелению на "натуральное" оружие солид неустанавливается, но зато можно установить
на свою ентити (custom item), поставить в своём плагине при создании ентити или в
плагине "Weapon Physics" на спавне "custom item":

Code

public spawn_custom_item(ent)
{
      if (is_custom_ent(ent))
      {
       set_pev(ent, pev_solid, SOLID_BBOX)
       return spawn_item(ent)
      }
      return PLUGIN_CONTINUE
}

Теперь при выстрелах по своей ентити она будет отскакивать.

Добавлено (2009-06-27, 8:43 Pm)
---------------------------------------------
Нашёл способ чтобы при выстреле по ентити отскакивало даже неимея солид
"SOLID_BBOX" или "SOLID_SLIDEBOX" или "SOLID_BSP" достаточно "SOLID_TRIGGER"
и желательно размер установить, а то без размера почти вообще нибудет замечать, и
на "натуральное" оружие тоже действует.

Долго описывать что там изменил и добавил просто перезалил переделаный плагин,
смысл добавления своей ентити такойже, только за место #include <SpawnCustomItem>
надо #include <WeaponPhysicsNatives>

Добавлено (2009-06-28, 4:40 Pm)
---------------------------------------------
Плагин перезалил, теперь при ударе ножом по ентити тоже будет отскакивать.

Прикрепления: WeaponPhysics_R.rar (30.0 Kb)


PAHANCS

Сообщение отредактировал PAHANCS - Воскресенье, 28.06.2009, 16:41:18
 
AMX Mod X Форум » Скриптинг » Полезная информация » Spawn custom item in plugin "Weapon Physics". (Решение проблемы со спавном "custom item" в этом плагине.)
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024