Смена модели оружия - Полезные статьи - .::Создание и настройка серверов::. - Форум - game.pro Lutsk Arena - Луцький форум. Чатовка, друзі, спілкування. Запчасти для фотоапаратов Canon, Sony, Olympus, Nikon
Страница 1 из 11
Форум » .::Создание и настройка серверов::. » Полезные статьи » Смена модели оружия
Смена модели оружия
@)(otnikДата: Суббота, 31.10.2009, 16:18 | Сообщение # 1
Сообщений: 2183
Статус:
Автор: Cheap_Suit
Перевод: DJ_WEST

Данная статья рассказывает простой метод смены модели оружия игрока в Counter-Strike 1.6. Данный метод поможет вам изменить все 3 типа модели: v_, p_ и w_.

Метод с использованием модулей Engine и Fakemeta

Quote
#include <amxmodx>
#include <engine>
#include <fakemeta>

new VIEW_MODEL[] = "models/v_<имя модели>.mdl"
new PLAYER_MODEL[] = "models/p_<имя модели>.mdl"
new WORLD_MODEL[] = "models/w_<имя модели>.mdl"

new OLDWORLD_MODEL[] = "models/w_<имя модели>.mdl" // имя модели, которую мы хотим заменить

new PLUGIN_NAME[] = "Custom Weapon Model"
new PLUGIN_AUTHOR[] = "Cheap_Suit"
new PLUGIN_VERSION[] = "1.0"

public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
register_event("CurWeapon", "Event_CurWeapon", "be","1=1")
register_forward(FM_SetModel, "fw_SetModel")
}

public plugin_precache()
{
precache_model(VIEW_MODEL)
precache_model(PLAYER_MODEL)
precache_model(WORLD_MODEL)
}

public Event_CurWeapon(id)
{
// Получаем ID оружия, может не работать для других модов
new weaponID = read_data(2)

// Если оружие не AK47, то возвращаем PLUGIN_CONTINUE
if (weaponID != CSW_AK47)
return PLUGIN_CONTINUE

// Установка v_ модели, которая отображается в руках игрока
entity_set_string(id, EV_SZ_viewmodel, VIEW_MODEL)

// Установка p_ модели, которая отображается, когда мы смотрим на игрока
entity_set_string(id, EV_SZ_weaponmodel, PLAYER_MODEL)

return PLUGIN_CONTINUE
}

public fw_SetModel(entity, model[])
{
// Проверяем существует ли объект
if (!is_valid_ent(entity))
return FMRES_IGNORED

// Проверяем та ли это w_ модель, которую му хотим изменить
if (!equali(model, OLDWORLD_MODEL))
return FMRES_IGNORED

new className[33]

// Получаем класс объекта
entity_get_string(entity, EV_SZ_classname, className, 32)

// Сравниваем равняется ли полученный класс объекта weaponbox (выкинутое оружие) или armoury_entity (оружие, которое лежит на карте), или grenade (C4 и гранаты)
if (equal(className, "weaponbox") || equal(className, "armoury_entity") || equal(className, "grenade"))
{
// Установка w_ модели, которая отображается на земле
entity_set_model(entity, WORLD_MODEL)
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}

Метод с использованием только модуля Fakemeta

Quote
public Event_CurWeapon(id)
{
// Получаем ID оружия, может не работать для других модов
new weaponID = read_data(2)

// Если оружие не AK47, то возвращаем PLUGIN_CONTINUE
if (weaponID != CSW_AK47)
return PLUGIN_CONTINUE

// Установка v_ модели, которая отображается в руках игрока
set_pev(id, pev_viewmodel, engfunc(EngFunc_AllocString, VIEW_MODEL))

// Установка p_ модели, которая отображается, когда мы смотрим на игрока
set_pev(id, pev_weaponmodel, engfunc(EngFunc_AllocString, PLAYER_MODEL))

return PLUGIN_CONTINUE
}

public fw_SetModel(entity, model[])
{
// Проверяем существует ли объект
if (!pev_valid(entity))
return FMRES_IGNORED

// Проверяем та ли это w_ модель, которую му хотим изменить
if (!equali(model, OLDWORLD_MODEL))
return FMRES_IGNORED

new className[33]

// Получаем класс объекта
pev(entity, pev_classname, className, 32)

// Сравниваем равняется ли полученный класс объекта weaponbox (выкинутое оружие) или armoury_entity (оружие, которое лежит на карте), или grenade (C4 и гранаты)
if(equal(className, "weaponbox") || equal(className, "armoury_entity") || equal(className, "grenade"))
{
// Установка w_ модели, которая отображается на земле
engfunc(EngFunc_SetModel, entity, WORLD_MODEL)
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}

Примечание:
Для второго метода, там где используется:

Quote
// Установка v_ модели, которая отображается в руках игрока
set_pev(id, pev_viewmodel, engfunc(EngFunc_AllocString, VIEW_MODEL))

// Установка p_ модели, которая отображается, когда мы смотрим на игрока
set_pev(id, pev_weaponmodel, engfunc(EngFunc_AllocString, PLAYER_MODEL))

Можно использовать:

Quote
// Установка v_ модели, которая отображается в руках игрока
set_pev(id, pev_viewmodel2, VIEW_MODEL)

// Установка p_ модели, которая отображается, когда мы смотрим на игрока
set_pev(id, pev_weaponmodel2, PLAYER_MODEL)

Тем самым не использовав EngFunc_AllocString.

ID оружия:

Quote
#define CSW_P228 1
#define CSW_SCOUT 3
#define CSW_HEGRENADE 4
#define CSW_XM1014 5
#define CSW_C4 6
#define CSW_MAC10 7
#define CSW_AUG 8
#define CSW_SMOKEGRENADE 9
#define CSW_ELITE 10
#define CSW_FIVESEVEN 11
#define CSW_UMP45 12
#define CSW_SG550 13
#define CSW_GALI 14
#define CSW_GALIL 14
#define CSW_FAMAS 15
#define CSW_USP 16
#define CSW_GLOCK18 17
#define CSW_AWP 18
#define CSW_MP5NAVY 19
#define CSW_M249 20
#define CSW_M3 21
#define CSW_M4A1 22
#define CSW_TMP 23
#define CSW_G3SG1 24
#define CSW_FLASHBANG 25
#define CSW_DEAGLE 26
#define CSW_SG552 27
#define CSW_AK47 28
#define CSW_KNIFE 29
#define CSW_P90 30

Пример для смены модели ножа:

Quote
#include <amxmodx>
#include <fakemeta>

new VIEW_MODEL[] = "models/v_newKnife.mdl"
new PLAYER_MODEL[] = "models/p_newKnife.mdl"
new WORLD_MODEL[] = "models/w_knife.mdl"

new OLDWORLD_MODEL[] = "models/w_knife.mdl"

new PLUGIN_NAME[] = "Custom Knife Model"
new PLUGIN_AUTHOR[] = "Cheap_Suit"
new PLUGIN_VERSION[] = "1.0"

public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
register_event("CurWeapon", "Event_CurWeapon", "be","1=1")
register_forward(FM_SetModel, "fw_SetModel")
}

public plugin_precache()
{
precache_model(VIEW_MODEL)
precache_model(PLAYER_MODEL)
precache_model(WORLD_MODEL)
}

public Event_CurWeapon(id)
{
new weaponID = read_data(2)

if(weaponID != CSW_KNIFE)
return PLUGIN_CONTINUE

set_pev(id, pev_viewmodel2, VIEW_MODEL)
set_pev(id, pev_weaponmodel2, PLAYER_MODEL)

return PLUGIN_CONTINUE
}

public fw_SetModel(entity, model[])
{
if (!pev_valid(entity))
return FMRES_IGNORED

if (!equali(model, OLDWORLD_MODEL))
return FMRES_IGNORED

new className[33]
pev(entity, pev_classname, className, 32)

if (equal(className, "weaponbox") || equal(className, "armoury_entity") || equal(className, "grenade"))
{
engfunc(EngFunc_SetModel, entity, WORLD_MODEL)
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}




Купуємо стім (Ліцензійну Counter Strike 1.6) тут http://www.cs-lutsk.org.ua/index/0-135
 
Форум » .::Создание и настройка серверов::. » Полезные статьи » Смена модели оружия
Страница 1 из 11
Поиск: