Добавляем Спрайт Лап[Claws] вместо ножа.
![Добавляем Спрайт Лап[Claws] вместо ножа.](/uploads/posts/1343226743_1.jpg)
Как добавить спрайт к классу зомби?
Итак.. Поехали:
Открываем исходник Zombie класса.
1)Создадим переменную для Веапон Листа:
new g_msgWeaponList
2) Зарегистрируем тип Мессага(сообщения для клиента) в public plugin_init(), либо же в public plugin_precache():
g_msgWeaponList = get_user_msgid( "WeaponList" )
3)Теперь Прекэшим файлы(Загружаем игровые файлы, в нашем случае это спрайт[.spr] и Текстовый документ[.txt] ):
precache_generic("sprites/class_runner_avp.txt")
precache_generic("sprites/zp-2u/class_alien.spr")
4) Теперь, нужно отловить момент заражения и момент, когда игрок становится человеком[Human]. В моем случае это: zp_fw_core_infect_post и zp_fw_core_cure_post.
public zp_fw_core_infect_post(id) // Такой тип форварда у версии zp50, у версии 4.3 zp_user_infected_post(id)
{
if ( !zp_class_nemesis_get(id) && zp_class_zombie_get_next(id) == g_Runner) // /* Делаем проверку на Класс зомби и предотвращаем замену спрайта у немезиды. */
{
message_begin(MSG_ONE, g_msgWeaponList, _, id)
write_string("class_runner_avp") // Имя txt файла, в котором будет находиться информация о спрайте и координатах прорисовки у клиента.
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(2)
write_byte(1)
write_byte(29)
write_byte(0)
message_end()
}
}
public zp_fw_core_cure_post(id) // У версии 4.3 : zp_user_humanized_post(id)
{
if ( !zp_class_nemesis_get ( id ) && zp_class_zombie_get_current(id) != g_Runner)
{
message_begin( MSG_ONE, g_msgWeaponList, _, id )
write_string("weapon_knife") // Стандартный спрайт ножа.
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(2)
write_byte(1)
write_byte(29)
write_byte(0)
message_end()
}
}
#include amxmodx
#include cstrike
#include zombieplague
// Zombie Attributes
new const zclass_name[] = "Zombie" // name
new const zclass_info[] = "Just Zombie" // description
new const zclass_model[] = "zombie" // model
new const zclass_clawmodel[] = "v_zombieclaws.mdl" // claw model
const zclass_health = 2000 // health
const zclass_speed = 170 // speed
const Float:zclass_gravity = 0.5 // gravity
const Float:zclass_knockback = 2.0 // knockback
new g_Zombie, g_msgWeaponList
// Plug info.
#define PLUG_VERSION "0.2"
#define PLUG_AUTH "?"
public plugin_precache()
{
// Plugin Info
register_plugin("[ZP] Zombie", PLUG_VERSION, PLUG_AUTH)
g_msgWeaponList = get_user_msgid( "WeaponList" )
// Register the new class and store ID for reference
g_Zombie = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
precache_generic("sprites/zp-2u/class_alien.spr")
precache_generic("sprites/class_runner_avp.txt")
}
public zp_user_humanized_post(id)
{
if ( !zp_get_user_nemesis ( id ) && zp_get_user_zombie_class(id) != g_Zombie)
{
message_begin( MSG_ONE, g_msgWeaponList, _, id )
write_string("weapon_knife") // Стандартный спрайт ножа.
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(2)
write_byte(1)
write_byte(29)
write_byte(0)
message_end()
}
}
public zp_user_infected_post(id)
{
if ( !zp_get_user_nemesis(id) && zp_get_user_zombie_class(id) == g_Zombie) // /* Делаем проверку на Класс зомби и предотвращаем замену спрайта у немезиды. */
{
message_begin(MSG_ONE, g_msgWeaponList, _, id)
write_string("class_runner_avp") // Имя txt файла, в котором будет находиться информация о спрайте и координатах прорисовки у клиента.
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(2)
write_byte(1)
write_byte(29)
write_byte(0)
message_end()
}
}
#include amxmodx
#include fakemeta
#include zp50_class_zombie
#include zp50_class_nemesis
// Leech Zombie Attributes
new const zombieclass5_name[] = "Drone"
new const zombieclass5_info[] = "[High Speed]"
new const zombieclass5_models[][] = { "alien-dog" }
new const zombieclass5_clawmodels[][] = { "models/go_zm/z_hands/v_knife_alien.mdl" }
const zombieclass5_health = 600
const Float:zombieclass5_speed = 1.05
const Float:zombieclass5_gravity = 0.95
const Float:zombieclass5_knockback = 1.0
new g_Runner
new defaultindex, model_index
new g_msgWeaponList
#define OFFSET_MODELINDEX 491
#define OFFSET_LINUX 5
public plugin_precache()
{
register_plugin("[ZP] Class: Alien: Runner", ZP_VERSION_STRING, "ZP Dev Team")
g_msgWeaponList = get_user_msgid( "WeaponList" )
new index
g_Runner = zp_class_zombie_register(zombieclass5_name, zombieclass5_info, zombieclass5_health, zombieclass5_speed, zombieclass5_gravity)
zp_class_zombie_register_kb(g_Runner, zombieclass5_knockback)
for (index = 0; index < sizeof zombieclass5_models; index++)
zp_class_zombie_register_model(g_Runner, zombieclass5_models[index])
for (index = 0; index < sizeof zombieclass5_clawmodels; index++)
zp_class_zombie_register_claw(g_Runner, zombieclass5_clawmodels[index])
model_index = precache_model("models/player/alien-dog/alien-dog.mdl")
defaultindex = precache_model("models/player/avp_gsg9/avp_gsg9.mdl")
precache_generic("sprites/class_runner_avp.txt")
precache_model("sprites/zp-2u/class_alien.spr")
}
public zp_fw_core_infect_post(id)
{
if ( !zp_class_nemesis_get(id) && zp_class_zombie_get_next(id) == g_Runner)
{
fm_set_user_model_index( id, model_index )
message_begin(MSG_ONE, g_msgWeaponList, _, id)
write_string("class_runner_avp")
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(2)
write_byte(1)
write_byte(29)
write_byte(0)
message_end()
}
}
public zp_fw_core_cure_post(id)
{
if ( !zp_class_nemesis_get ( id ) && zp_class_zombie_get_current(id) != g_Runner)
{
fm_set_user_model_index( id, defaultindex )
message_begin( MSG_ONE, g_msgWeaponList, _, id )
write_string("weapon_knife")
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(2)
write_byte(1)
write_byte(29)
write_byte(0)
message_end()
}
}
stock fm_set_user_model_index( id, value )
{
set_pdata_int(id, OFFSET_MODELINDEX, value, OFFSET_LINUX)
}
5)Создаем файловый документ txt:
2
weapon 640 zp-2u/class_alien 0 45 170 45
weapon_s 640 zp-2u/class_alien 0 45 170 45
Первая строка: Указывает кол-во заданной информации.
Вторая строка: Задает координаты спрайта в момент выбора оружия.
Третья строка: Задает координаты в остальных, оставшихся, случаях.
--------------------
weapon 640 zp-2u/class_alien 0 45 170 45
"640" - Тип отображение спрайта.
"zp-2u/class_alien" - Путь от спрайта, начиная от папки "Sprites".
"0" - Начальная координата спрайта по оси X.
"45" - Начальная Координата Спрайта по Оси Y.
"170" - Длина спрайта.
"45" - Ширина спрайта.
Примечание: Для определения координат, рекомендую использовать Paint.Net =)
Цитата: Примечание
Некоторые Нативы для 4.3 версии:
zp_core_is_zombie(id) == zp_get_user_zombie(id)
zp_class_zombie_get_current(id) == zp_get_user_zombie_class(id)
zp_class_nemesis_get(id) == zp_get_user_nemesis(id)
zp_fw_core_cure_post(id) == zp_user_humanized_post(id)
zp_fw_core_infect_post(id) == zp_user_infect_post(id)
Комментарии 33
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.