Available Teleport Zombie and Robot zombie (Z-Noid)

Unpaid Requests, Public Plugins
Post Reply
User avatar
DarkZombie
Member
Member
Hungary
Posts: 76
Joined: 5 years ago
Contact:

Teleport Zombie and Robot zombie (Z-Noid)

#1

Post by DarkZombie » 5 years ago

Hello, These zombie types come from "CSO" mode. it would be necessary to convert it to Escape Mode.
If any file is missing then write it!
Images and information about zombie types: http://cso.wikia.com/wiki/Z-Noid
Attachments
sprites.rar
(549.98 KiB) Downloaded 419 times
sprites.rar
(549.98 KiB) Downloaded 419 times
zp_class_cso_lilith.sma
(31.1 KiB) Downloaded 435 times
zp_class_cso_lilith.sma
(31.1 KiB) Downloaded 435 times
zp_class_cso_metatronic.sma
(18.75 KiB) Downloaded 406 times
zp_class_cso_metatronic.sma
(18.75 KiB) Downloaded 406 times
models.rar
(2.03 MiB) Downloaded 492 times
models.rar
(2.03 MiB) Downloaded 492 times
sounds.rar
(556.95 KiB) Downloaded 449 times
sounds.rar
(556.95 KiB) Downloaded 449 times


User avatar
Night Fury
Mod Developer
Mod Developer
Posts: 677
Joined: 7 years ago
Contact:

#3

Post by Night Fury » 5 years ago

Code: Select all

#include <zombie_escape>
#include <ze_zombie_class>
#include <fakemeta_util>
#include <engine>
#include <fun>

#define PLUGIN	"[CSO] LILITH ZOMBIE (Z-NOID) || ZP CLASS"
#define VERSION	"1.0"
#define AUTHOR	"Asep Khairul Anam"

/*
***************************************
The Plugins Is Made By Asep KhairulAnam
***************************************
************ ZOMBIE-MOD.RU ************
***************************************
- Added Auto Unstuck At The Portal Teleport
*/

// Teleport Mark
#define TELEPORT_MARK_MODEL		"models/asep/teleport_zombie_mark.mdl"
#define TELEPORT_MARK_CLASSNAME		"lilith_mark_teleport"

// Teleport Portal
#define TELEPORT_PORTAL_MODEL		"sprites/asep/ef_teleportzombie.spr"
#define TELEPORT_PORTAL_CLASSNAME	"lilith_portal_teleport"

// Teleport Origin ++
#define TELEPORT_X 			25.0
#define TELEPORT_Z 			15.0

// Zombie Configuration (String)
#define ZOMBIE_NAME			"Teleportator"
#define ZOMBIE_INFO			"\r[Admin]"
#define ZOMBIE_MODEL			"lilith_zombie"
#define ZOMBIE_CLAW_MDL			"v_knife_lilith.mdl"
#define ZOMBIE_BOMB_MDL			"models/zombie_plague/v_bomb_lilith_merah.mdl"

// Zombie Configuration (Value)
#define ZOMBIE_HEALTH			4500
#define ZOMBIE_SPEED			260
#define ZOMBIE_GRAVITY			780
#define ZOMBIE_KNOCKBACK		0.8

// Delay Skill Configuration
#define DELAY_SKILL_1			30
#define DELAY_SKILL_2			40

// Task
#define TASK_TELEPORT			10221
#define	TASK_DELAY			10222

new const Float:UnstuckVector[][] =
{
	{0.0, 0.0, 1.0}, {0.0, 0.0, -1.0}, {0.0, 1.0, 0.0}, {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {-1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0}, {-1.0, -1.0, 1.0}, {1.0, -1.0, -1.0}, {-1.0, 1.0, -1.0}, {-1.0, -1.0, -1.0},
	{0.0, 0.0, 2.0}, {0.0, 0.0, -2.0}, {0.0, 2.0, 0.0}, {0.0, -2.0, 0.0}, {2.0, 0.0, 0.0}, {-2.0, 0.0, 0.0}, {-2.0, 2.0, 2.0}, {2.0, 2.0, 2.0}, {2.0, -2.0, 2.0}, {2.0, 2.0, -2.0}, {-2.0, -2.0, 2.0}, {2.0, -2.0, -2.0}, {-2.0, 2.0, -2.0}, {-2.0, -2.0, -2.0},
	{0.0, 0.0, 3.0}, {0.0, 0.0, -3.0}, {0.0, 3.0, 0.0}, {0.0, -3.0, 0.0}, {3.0, 0.0, 0.0}, {-3.0, 0.0, 0.0}, {-3.0, 3.0, 3.0}, {3.0, 3.0, 3.0}, {3.0, -3.0, 3.0}, {3.0, 3.0, -3.0}, {-3.0, -3.0, 3.0}, {3.0, -3.0, -3.0}, {-3.0, 3.0, -3.0}, {-3.0, -3.0, -3.0},
	{0.0, 0.0, 4.0}, {0.0, 0.0, -4.0}, {0.0, 4.0, 0.0}, {0.0, -4.0, 0.0}, {4.0, 0.0, 0.0}, {-4.0, 0.0, 0.0}, {-4.0, 4.0, 4.0}, {4.0, 4.0, 4.0}, {4.0, -4.0, 4.0}, {4.0, 4.0, -4.0}, {-4.0, -4.0, 4.0}, {4.0, -4.0, -4.0}, {-4.0, 4.0, -4.0}, {-4.0, -4.0, -4.0},
	{0.0, 0.0, 5.0}, {0.0, 0.0, -5.0}, {0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}, {5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {-5.0, 5.0, 5.0}, {5.0, 5.0, 5.0}, {5.0, -5.0, 5.0}, {5.0, 5.0, -5.0}, {-5.0, -5.0, 5.0}, {5.0, -5.0, -5.0}, {-5.0, 5.0, -5.0}, {-5.0, -5.0, -5.0},
	{0.0, 0.0, 6.0}, {0.0, 0.0, -6.0}, {0.0, 6.0, 0.0}, {0.0, -6.0, 0.0}, {6.0, 0.0, 0.0}, {-6.0, 0.0, 0.0}, {-6.0, 6.0, 6.0}, {6.0, 6.0, 6.0}, {6.0, -6.0, 6.0}, {6.0, 6.0, -6.0}, {-6.0, -6.0, 6.0}, {6.0, -6.0, -6.0}, {-6.0, 6.0, -6.0}, {-6.0, -6.0, -6.0},
	{0.0, 0.0, 7.0}, {0.0, 0.0, -7.0}, {0.0, 7.0, 0.0}, {0.0, -7.0, 0.0}, {7.0, 0.0, 0.0}, {-7.0, 0.0, 0.0}, {-7.0, 7.0, 7.0}, {7.0, 7.0, 7.0}, {7.0, -7.0, 7.0}, {7.0, 7.0, -7.0}, {-7.0, -7.0, 7.0}, {7.0, -7.0, -7.0}, {-7.0, 7.0, -7.0}, {-7.0, -7.0, -7.0},
	{0.0, 0.0, 8.0}, {0.0, 0.0, -8.0}, {0.0, 8.0, 0.0}, {0.0, -8.0, 0.0}, {8.0, 0.0, 0.0}, {-8.0, 0.0, 0.0}, {-8.0, 8.0, 8.0}, {8.0, 8.0, 8.0}, {8.0, -8.0, 8.0}, {8.0, 8.0, -8.0}, {-8.0, -8.0, 8.0}, {8.0, -8.0, -8.0}, {-8.0, 8.0, -8.0}, {-8.0, -8.0, -8.0},
	{0.0, 0.0, 9.0}, {0.0, 0.0, -9.0}, {0.0, 9.0, 0.0}, {0.0, -9.0, 0.0}, {9.0, 0.0, 0.0}, {-9.0, 0.0, 0.0}, {-9.0, 9.0, 9.0}, {9.0, 9.0, 9.0}, {9.0, -9.0, 9.0}, {9.0, 9.0, -9.0}, {-9.0, -9.0, 9.0}, {9.0, -9.0, -9.0}, {-9.0, 9.0, -9.0}, {-9.0, -9.0, -9.0},
	{0.0, 0.0, 10.0}, {0.0, 0.0, -10.0}, {0.0, 10.0, 0.0}, {0.0, -10.0, 0.0}, {10.0, 0.0, 0.0}, {-10.0, 0.0, 0.0}, {-10.0, 10.0, 10.0}, {10.0, 10.0, 10.0}, {10.0, -10.0, 10.0}, {10.0, 10.0, -10.0}, {-10.0, -10.0, 10.0}, {10.0, -10.0, -10.0}, {-10.0, 10.0, -10.0}, {-10.0, -10.0, -10.0},
	{0.0, 0.0, 11.0}, {0.0, 0.0, -11.0}, {0.0, 11.0, 0.0}, {0.0, -11.0, 0.0}, {11.0, 0.0, 0.0}, {-11.0, 0.0, 0.0}, {-11.0, 11.0, 11.0}, {11.0, 11.0, 11.0}, {11.0, -11.0, 11.0}, {11.0, 11.0, -11.0}, {-11.0, -11.0, 11.0}, {11.0, -11.0, -11.0}, {-11.0, 11.0, -11.0}, {-11.0, -11.0, -11.0},
	{0.0, 0.0, 12.0}, {0.0, 0.0, -12.0}, {0.0, 12.0, 0.0}, {0.0, -12.0, 0.0}, {12.0, 0.0, 0.0}, {-12.0, 0.0, 0.0}, {-12.0, 12.0, 12.0}, {12.0, 12.0, 12.0}, {12.0, -12.0, 12.0}, {12.0, 12.0, -12.0}, {-12.0, -12.0, 12.0}, {12.0, -12.0, -12.0}, {-12.0, 12.0, -12.0}, {-12.0, -12.0, -12.0},
	{0.0, 0.0, 13.0}, {0.0, 0.0, -13.0}, {0.0, 13.0, 0.0}, {0.0, -13.0, 0.0}, {13.0, 0.0, 0.0}, {-13.0, 0.0, 0.0}, {-13.0, 13.0, 13.0}, {13.0, 13.0, 13.0}, {13.0, -13.0, 13.0}, {13.0, 13.0, -13.0}, {-13.0, -13.0, 13.0}, {13.0, -13.0, -13.0}, {-13.0, 13.0, -13.0}, {-13.0, -13.0, -13.0},
	{0.0, 0.0, 14.0}, {0.0, 0.0, -14.0}, {0.0, 14.0, 0.0}, {0.0, -14.0, 0.0}, {14.0, 0.0, 0.0}, {-14.0, 0.0, 0.0}, {-14.0, 14.0, 14.0}, {14.0, 14.0, 14.0}, {14.0, -14.0, 14.0}, {14.0, 14.0, -14.0}, {-14.0, -14.0, 14.0}, {14.0, -14.0, -14.0}, {-14.0, 14.0, -14.0}, {-14.0, -14.0, -14.0},
	{0.0, 0.0, 15.0}, {0.0, 0.0, -15.0}, {0.0, 15.0, 0.0}, {0.0, -15.0, 0.0}, {15.0, 0.0, 0.0}, {-15.0, 0.0, 0.0}, {-15.0, 15.0, 15.0}, {15.0, 15.0, 15.0}, {15.0, -15.0, 15.0}, {15.0, 15.0, -15.0}, {-15.0, -15.0, 15.0}, {15.0, -15.0, -15.0}, {-15.0, 15.0, -15.0}, {-15.0, -15.0, -15.0},
	{0.0, 0.0, 16.0}, {0.0, 0.0, -16.0}, {0.0, 16.0, 0.0}, {0.0, -16.0, 0.0}, {16.0, 0.0, 0.0}, {-16.0, 0.0, 0.0}, {-16.0, 16.0, 16.0}, {16.0, 16.0, 16.0}, {16.0, -16.0, 16.0}, {16.0, 16.0, -16.0}, {-16.0, -16.0, 16.0}, {16.0, -16.0, -16.0}, {-16.0, 16.0, -16.0}, {-16.0, -16.0, -16.0},
	{0.0, 0.0, 17.0}, {0.0, 0.0, -17.0}, {0.0, 17.0, 0.0}, {0.0, -17.0, 0.0}, {17.0, 0.0, 0.0}, {-17.0, 0.0, 0.0}, {-17.0, 17.0, 17.0}, {17.0, 17.0, 17.0}, {17.0, -17.0, 17.0}, {17.0, 17.0, -17.0}, {-17.0, -17.0, 17.0}, {17.0, -17.0, -17.0}, {-17.0, 17.0, -17.0}, {-17.0, -17.0, -17.0},
	{0.0, 0.0, 18.0}, {0.0, 0.0, -18.0}, {0.0, 18.0, 0.0}, {0.0, -18.0, 0.0}, {18.0, 0.0, 0.0}, {-18.0, 0.0, 0.0}, {-18.0, 18.0, 18.0}, {18.0, 18.0, 18.0}, {18.0, -18.0, 18.0}, {18.0, 18.0, -18.0}, {-18.0, -18.0, 18.0}, {18.0, -18.0, -18.0}, {-18.0, 18.0, -18.0}, {-18.0, -18.0, -18.0},
	{0.0, 0.0, 19.0}, {0.0, 0.0, -19.0}, {0.0, 19.0, 0.0}, {0.0, -19.0, 0.0}, {19.0, 0.0, 0.0}, {-19.0, 0.0, 0.0}, {-19.0, 19.0, 19.0}, {19.0, 19.0, 19.0}, {19.0, -19.0, 19.0}, {19.0, 19.0, -19.0}, {-19.0, -19.0, 19.0}, {19.0, -19.0, -19.0}, {-19.0, 19.0, -19.0}, {-19.0, -19.0, -19.0},
	{0.0, 0.0, 20.0}, {0.0, 0.0, -20.0}, {0.0, 20.0, 0.0}, {0.0, -20.0, 0.0}, {20.0, 0.0, 0.0}, {-20.0, 0.0, 0.0}, {-20.0, 20.0, 20.0}, {20.0, 20.0, 20.0}, {20.0, -20.0, 20.0}, {20.0, 20.0, -20.0}, {-20.0, -20.0, 20.0}, {20.0, -20.0, -20.0}, {-20.0, 20.0, -20.0}, {-20.0, -20.0, -20.0},
	{0.0, 0.0, 21.0}, {0.0, 0.0, -21.0}, {0.0, 21.0, 0.0}, {0.0, -21.0, 0.0}, {21.0, 0.0, 0.0}, {-21.0, 0.0, 0.0}, {-21.0, 21.0, 21.0}, {21.0, 21.0, 21.0}, {21.0, -21.0, 21.0}, {21.0, 21.0, -21.0}, {-21.0, -21.0, 21.0}, {21.0, -21.0, -21.0}, {-21.0, 21.0, -21.0}, {-21.0, -21.0, -21.0},
	{0.0, 0.0, 22.0}, {0.0, 0.0, -22.0}, {0.0, 22.0, 0.0}, {0.0, -22.0, 0.0}, {22.0, 0.0, 0.0}, {-22.0, 0.0, 0.0}, {-22.0, 22.0, 22.0}, {22.0, 22.0, 22.0}, {22.0, -22.0, 22.0}, {22.0, 22.0, -22.0}, {-22.0, -22.0, 22.0}, {22.0, -22.0, -22.0}, {-22.0, 22.0, -22.0}, {-22.0, -22.0, -22.0},
	{0.0, 0.0, 23.0}, {0.0, 0.0, -23.0}, {0.0, 23.0, 0.0}, {0.0, -23.0, 0.0}, {23.0, 0.0, 0.0}, {-23.0, 0.0, 0.0}, {-23.0, 23.0, 23.0}, {23.0, 23.0, 23.0}, {23.0, -23.0, 23.0}, {23.0, 23.0, -23.0}, {-23.0, -23.0, 23.0}, {23.0, -23.0, -23.0}, {-23.0, 23.0, -23.0}, {-23.0, -23.0, -23.0},
	{0.0, 0.0, 24.0}, {0.0, 0.0, -24.0}, {0.0, 24.0, 0.0}, {0.0, -24.0, 0.0}, {24.0, 0.0, 0.0}, {-24.0, 0.0, 0.0}, {-24.0, 24.0, 24.0}, {24.0, 24.0, 24.0}, {24.0, -24.0, 24.0}, {24.0, 24.0, -24.0}, {-24.0, -24.0, 24.0}, {24.0, -24.0, -24.0}, {-24.0, 24.0, -24.0}, {-24.0, -24.0, -24.0},
	{0.0, 0.0, 25.0}, {0.0, 0.0, -25.0}, {0.0, 25.0, 0.0}, {0.0, -25.0, 0.0}, {25.0, 0.0, 0.0}, {-25.0, 0.0, 0.0}, {-25.0, 25.0, 25.0}, {25.0, 25.0, 25.0}, {25.0, -25.0, 25.0}, {25.0, 25.0, -25.0}, {-25.0, -25.0, 25.0}, {25.0, -25.0, -25.0}, {-25.0, 25.0, -25.0}, {-25.0, -25.0, -25.0},
	{0.0, 0.0, 26.0}, {0.0, 0.0, -26.0}, {0.0, 26.0, 0.0}, {0.0, -26.0, 0.0}, {26.0, 0.0, 0.0}, {-26.0, 0.0, 0.0}, {-26.0, 26.0, 26.0}, {26.0, 26.0, 26.0}, {26.0, -26.0, 26.0}, {26.0, 26.0, -26.0}, {-26.0, -26.0, 26.0}, {26.0, -26.0, -26.0}, {-26.0, 26.0, -26.0}, {-26.0, -26.0, -26.0},
	{0.0, 0.0, 27.0}, {0.0, 0.0, -27.0}, {0.0, 27.0, 0.0}, {0.0, -27.0, 0.0}, {27.0, 0.0, 0.0}, {-27.0, 0.0, 0.0}, {-27.0, 27.0, 27.0}, {27.0, 27.0, 27.0}, {27.0, -27.0, 27.0}, {27.0, 27.0, -27.0}, {-27.0, -27.0, 27.0}, {27.0, -27.0, -27.0}, {-27.0, 27.0, -27.0}, {-27.0, -27.0, -27.0},
	{0.0, 0.0, 28.0}, {0.0, 0.0, -28.0}, {0.0, 28.0, 0.0}, {0.0, -28.0, 0.0}, {28.0, 0.0, 0.0}, {-28.0, 0.0, 0.0}, {-28.0, 28.0, 28.0}, {28.0, 28.0, 28.0}, {28.0, -28.0, 28.0}, {28.0, 28.0, -28.0}, {-28.0, -28.0, 28.0}, {28.0, -28.0, -28.0}, {-28.0, 28.0, -28.0}, {-28.0, -28.0, -28.0},
	{0.0, 0.0, 29.0}, {0.0, 0.0, -29.0}, {0.0, 29.0, 0.0}, {0.0, -29.0, 0.0}, {29.0, 0.0, 0.0}, {-29.0, 0.0, 0.0}, {-29.0, 29.0, 29.0}, {29.0, 29.0, 29.0}, {29.0, -29.0, 29.0}, {29.0, 29.0, -29.0}, {-29.0, -29.0, 29.0}, {29.0, -29.0, -29.0}, {-29.0, 29.0, -29.0}, {-29.0, -29.0, -29.0},
	{0.0, 0.0, 30.0}, {0.0, 0.0, -30.0}, {0.0, 30.0, 0.0}, {0.0, -30.0, 0.0}, {30.0, 0.0, 0.0}, {-30.0, 0.0, 0.0}, {-30.0, 30.0, 30.0}, {30.0, 30.0, 30.0}, {30.0, -30.0, 30.0}, {30.0, 30.0, -30.0}, {-30.0, -30.0, 30.0}, {30.0, -30.0, -30.0}, {-30.0, 30.0, -30.0}, {-30.0, -30.0, -30.0},
	{0.0, 0.0, 31.0}, {0.0, 0.0, -31.0}, {0.0, 31.0, 0.0}, {0.0, -31.0, 0.0}, {31.0, 0.0, 0.0}, {-31.0, 0.0, 0.0}, {-31.0, 31.0, 31.0}, {31.0, 31.0, 31.0}, {31.0, -31.0, 31.0}, {31.0, 31.0, -31.0}, {-31.0, -31.0, 31.0}, {31.0, -31.0, -31.0}, {-31.0, 31.0, -31.0}, {-31.0, -31.0, -31.0},
	{0.0, 0.0, 32.0}, {0.0, 0.0, -32.0}, {0.0, 32.0, 0.0}, {0.0, -32.0, 0.0}, {32.0, 0.0, 0.0}, {-32.0, 0.0, 0.0}, {-32.0, 32.0, 32.0}, {32.0, 32.0, 32.0}, {32.0, -32.0, 32.0}, {32.0, 32.0, -32.0}, {-32.0, -32.0, 32.0}, {32.0, -32.0, -32.0}, {-32.0, 32.0, -32.0}, {-32.0, -32.0, -32.0},
	{0.0, 0.0, 33.0}, {0.0, 0.0, -33.0}, {0.0, 33.0, 0.0}, {0.0, -33.0, 0.0}, {33.0, 0.0, 0.0}, {-33.0, 0.0, 0.0}, {-33.0, 33.0, 33.0}, {33.0, 33.0, 33.0}, {33.0, -33.0, 33.0}, {33.0, 33.0, -33.0}, {-33.0, -33.0, 33.0}, {33.0, -33.0, -33.0}, {-33.0, 33.0, -33.0}, {-33.0, -33.0, -33.0},
	{0.0, 0.0, 34.0}, {0.0, 0.0, -34.0}, {0.0, 34.0, 0.0}, {0.0, -34.0, 0.0}, {34.0, 0.0, 0.0}, {-34.0, 0.0, 0.0}, {-34.0, 34.0, 34.0}, {34.0, 34.0, 34.0}, {34.0, -34.0, 34.0}, {34.0, 34.0, -34.0}, {-34.0, -34.0, 34.0}, {34.0, -34.0, -34.0}, {-34.0, 34.0, -34.0}, {-34.0, -34.0, -34.0},
	{0.0, 0.0, 35.0}, {0.0, 0.0, -35.0}, {0.0, 35.0, 0.0}, {0.0, -35.0, 0.0}, {35.0, 0.0, 0.0}, {-35.0, 0.0, 0.0}, {-35.0, 35.0, 35.0}, {35.0, 35.0, 35.0}, {35.0, -35.0, 35.0}, {35.0, 35.0, -35.0}, {-35.0, -35.0, 35.0}, {35.0, -35.0, -35.0}, {-35.0, 35.0, -35.0}, {-35.0, -35.0, -35.0},
	{0.0, 0.0, 36.0}, {0.0, 0.0, -36.0}, {0.0, 36.0, 0.0}, {0.0, -36.0, 0.0}, {36.0, 0.0, 0.0}, {-36.0, 0.0, 0.0}, {-36.0, 36.0, 36.0}, {36.0, 36.0, 36.0}, {36.0, -36.0, 36.0}, {36.0, 36.0, -36.0}, {-36.0, -36.0, 36.0}, {36.0, -36.0, -36.0}, {-36.0, 36.0, -36.0}, {-36.0, -36.0, -36.0},
	{0.0, 0.0, 37.0}, {0.0, 0.0, -37.0}, {0.0, 37.0, 0.0}, {0.0, -37.0, 0.0}, {37.0, 0.0, 0.0}, {-37.0, 0.0, 0.0}, {-37.0, 37.0, 37.0}, {37.0, 37.0, 37.0}, {37.0, -37.0, 37.0}, {37.0, 37.0, -37.0}, {-37.0, -37.0, 37.0}, {37.0, -37.0, -37.0}, {-37.0, 37.0, -37.0}, {-37.0, -37.0, -37.0},
	{0.0, 0.0, 38.0}, {0.0, 0.0, -38.0}, {0.0, 38.0, 0.0}, {0.0, -38.0, 0.0}, {38.0, 0.0, 0.0}, {-38.0, 0.0, 0.0}, {-38.0, 38.0, 38.0}, {38.0, 38.0, 38.0}, {38.0, -38.0, 38.0}, {38.0, 38.0, -38.0}, {-38.0, -38.0, 38.0}, {38.0, -38.0, -38.0}, {-38.0, 38.0, -38.0}, {-38.0, -38.0, -38.0},
	{0.0, 0.0, 39.0}, {0.0, 0.0, -39.0}, {0.0, 39.0, 0.0}, {0.0, -39.0, 0.0}, {39.0, 0.0, 0.0}, {-39.0, 0.0, 0.0}, {-39.0, 39.0, 39.0}, {39.0, 39.0, 39.0}, {39.0, -39.0, 39.0}, {39.0, 39.0, -39.0}, {-39.0, -39.0, 39.0}, {39.0, -39.0, -39.0}, {-39.0, 39.0, -39.0}, {-39.0, -39.0, -39.0},
	{0.0, 0.0, 40.0}, {0.0, 0.0, -40.0}, {0.0, 40.0, 0.0}, {0.0, -40.0, 0.0}, {40.0, 0.0, 0.0}, {-40.0, 0.0, 0.0}, {-40.0, 40.0, 40.0}, {40.0, 40.0, 40.0}, {40.0, -40.0, 40.0}, {40.0, 40.0, -40.0}, {-40.0, -40.0, 40.0}, {40.0, -40.0, -40.0}, {-40.0, 40.0, -40.0}, {-40.0, -40.0, -40.0}
}

enum _:LILITH_SKILL
{
	SKILL_READY = 0,
	SKILL_USE,
	SKILL_DELAY,
}

enum _:LILITH_ANIMATION
{
	V_ANIM_SKILL_1	= 2,
	V_ANIM_SKILL_2	= 8,
	P_ANIM_SKILL_1	= 152,
	P_ANIM_SKILL_2	= 153
}

enum _:LILITH_SOUND
{
	SKILL_1 = 0,
	SKILL_2_IN,
	SKILL_2_OUT,
	PAIN_HURT,
	PAIN_GATE,
	PAIN_DEATH
}

enum _:LILITH_ENT
{
	ENT_MARK = 0,
	ENT_PORTAL1,
	ENT_PORTAL2
}

new const LilithSound[][] = 
{
	"asep/lilith_teleport_skill1.wav",
	"asep/lilith_teleport_skill2_in.wav",
	"asep/lilith_teleport_skill2_out.wav",
	"asep/lilith_pain_hurt.wav",
	"asep/lilith_pain_gate.wav",
	"asep/lilith_pain_death.wav"
}

new g_teleport_ent[33][3]
new class_lilith[33]
new g_skill1[33]
new g_skill2[33]
new sync_hud[2]
new index_lilith
new g_HamBot
new g_lilith

public plugin_init()
{
	// Register Plugins .....
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	// Forward Event
	register_event("DeathMsg", "Event_Death", "a")
	register_event("CurWeapon","Event_CurWeapon","be","1=1")
	register_event("HLTV", "Event_RoundStart", "a", "1=0", "2=0")
	
	// Forward Log Event
	register_logevent("Event_RoundEnd", 2, "1=Round_End")
	
	// Forward Fakemeta
	register_forward(FM_CmdStart , "Forward_CmdStart")
	
	// Forward Ham
	RegisterHam(Ham_TakeDamage, "player", "Forward_TakeDamage")
	
	// Forward Think Entity
	register_think(TELEPORT_MARK_CLASSNAME, "Forward_Mark_Think")
	register_think(TELEPORT_PORTAL_CLASSNAME, "Forward_Portal_Think")
	register_touch(TELEPORT_MARK_CLASSNAME, "player", "Forward_Mark_Touch")
	
	// Create Sync Hud
	sync_hud[0] = CreateHudSyncObj(12)
	sync_hud[1] = CreateHudSyncObj(13)
	g_lilith = ze_register_zombie_class(ZOMBIE_NAME, ZOMBIE_INFO, ZOMBIE_HEALTH, ZOMBIE_SPEED, ZOMBIE_GRAVITY)
}

public plugin_precache()
{	
	for(new i = 0; i < sizeof(LilithSound); i++)
		precache_sound(LilithSound[i])
	
	new CLAW_MDL[101]
	formatex(CLAW_MDL, charsmax(CLAW_MDL), "models/zombie_plague/%s", ZOMBIE_CLAW_MDL)
	
	precache_model(CLAW_MDL)
	precache_model(ZOMBIE_BOMB_MDL)
	precache_viewmodel_sound(ZOMBIE_BOMB_MDL)
	
	precache_model(TELEPORT_MARK_MODEL)
	precache_model(TELEPORT_PORTAL_MODEL)
	
	precache_sound("common/null.wav")
	
	new player_models[101]
	formatex(player_models, charsmax(player_models), "models/player/%s/%s.mdl", ZOMBIE_MODEL, ZOMBIE_MODEL)
	index_lilith = precache_model(player_models)
}

public client_putinserver(id)
{
	if(!g_HamBot && is_user_bot(id))
	{
		g_HamBot = 1
		set_task(0.1, "Do_RegisterHam", id)
	}
}

public Do_RegisterHam(id)
{
	RegisterHamFromEntity(Ham_TakeDamage, id, "Forward_TakeDamage")
}

public Event_RoundEnd(id) lilith_reset_value(id)
public Event_RoundStart(id) lilith_reset_value(id)
public Event_Death()
{
	new id = read_data(2)
	if(ze_is_user_zombie(id) && class_lilith[id])
	{
		engfunc(EngFunc_EmitSound, id, CHAN_ITEM, LilithSound[PAIN_DEATH], 1.0, ATTN_NORM, 0, PITCH_NORM)
		lilith_reset_value(id)
	
	}
}

public Event_CurWeapon(id)
{
	if(!is_user_alive(id))
		return
	if(!ze_is_user_zombie(id) || !class_lilith[id])
		return
	
	if(g_skill1[id] != SKILL_USE) set_user_maxspeed(id, float(ZOMBIE_SPEED))
	else if(g_skill2[id] != SKILL_USE) set_user_maxspeed(id, float(ZOMBIE_SPEED))
	switch(read_data(2))
	{
		case CSW_KNIFE:
		{
			new CLAW_MDL[101]
			formatex(CLAW_MDL, charsmax(CLAW_MDL), "models/zombie_plague/%s", ZOMBIE_CLAW_MDL)
			
			set_pev(id, pev_viewmodel2, CLAW_MDL)
			set_pev(id, pev_weaponmodel2, "")
		}
		case CSW_SMOKEGRENADE: set_pev(id, pev_viewmodel2, ZOMBIE_BOMB_MDL)
		case CSW_HEGRENADE: set_pev(id, pev_viewmodel2, ZOMBIE_BOMB_MDL)
		case CSW_FLASHBANG: set_pev(id, pev_viewmodel2, ZOMBIE_BOMB_MDL)
	}
	
}

public Forward_TakeDamage(victim, inflictor, attacker, Float:damage, dmgtype)
{
	if(!is_user_alive(attacker) || ze_is_user_zombie(attacker))
		return
	if(!is_user_alive(victim) || !is_user_connected(victim))
		return
	if(!ze_is_user_zombie(victim) || !class_lilith[victim])
		return
		
	engfunc(EngFunc_EmitSound, victim, CHAN_ITEM, LilithSound[PAIN_HURT], 1.0, ATTN_NORM, 0, PITCH_NORM)
}

public show_lilith_hud(id)
{
	static Temp_Skill_1[128], Temp_Skill_2[128]
	static Red[2], Blue[2], Green[2]
	if(g_skill1[id] == SKILL_READY)
	{
		Red[0] = 0
		Green[0] = 255
		Blue[0] = 0
		
		formatex(Temp_Skill_1, sizeof(Temp_Skill_1), "[ E ] -> Create Portal (Finish)")
	}
	else if(g_skill1[id] == SKILL_USE)
	{
		Red[0] = 200
		Green[0] = 200
		Blue[0] = 0
		
		formatex(Temp_Skill_1, sizeof(Temp_Skill_1), "Creating a portal ....")
	}
	else if(g_skill1[id] == SKILL_DELAY)
	{
		Red[0] = 255
		Green[0] = 0
		Blue[0] = 0
		
		formatex(Temp_Skill_1, sizeof(Temp_Skill_1), "[ E ] -> Create a Portal (Reload)")
	}
	
	if(g_skill2[id] == SKILL_READY)
	{
		if(!pev_valid(g_teleport_ent[id][ENT_MARK]))
		{
			Red[1] = 255
			Green[1] = 0
			Blue[1] = 0
		}
		else
		{
			Red[1] = 0
			Green[1] = 255
			Blue[1] = 0
		}
		
		formatex(Temp_Skill_2, sizeof(Temp_Skill_2), "^n[ R ] -> Teleport (Done)")
	}
	else if(g_skill2[id] == SKILL_USE)
	{
		Red[1] = 200
		Green[1] = 200
		Blue[1] = 0
		
		formatex(Temp_Skill_2, sizeof(Temp_Skill_2), "^nTeleportation .....")
	}
	else if(g_skill2[id] == SKILL_DELAY)
	{
		Red[1] = 255
		Green[1] = 0
		Blue[1] = 0
		
		formatex(Temp_Skill_2, sizeof(Temp_Skill_2), "^n[ R ] -> Teleport (Recharge)")
	}
	
	set_hudmessage(Red[0], Green[0], Blue[0], -1.0, -0.79, 0, 2.0, 10.0)
	ShowSyncHudMsg(id, sync_hud[0], Temp_Skill_1)
	
	set_hudmessage(Red[1], Green[1], Blue[1], -1.0, -0.76, 0, 2.0, 10.0)
	ShowSyncHudMsg(id, sync_hud[1], Temp_Skill_2)
}

public Forward_CmdStart(id, UC_Handle, seed)
{
	if(!is_user_alive(id))
		return
	if(!ze_is_user_zombie(id) || !class_lilith[id])
		return
	
	static Float:CurrentTime, Float:g_hud_delay[33]
	CurrentTime = get_gametime()
	
	if(CurrentTime - 1.0 > g_hud_delay[id])
	{
		show_lilith_hud(id)
		
		if(pev(id, pev_solid) == SOLID_NOT)
			set_pev(id, pev_solid, SOLID_BBOX)
		
		g_hud_delay[id] = CurrentTime
	}
	
	static PressedButton
	PressedButton = get_uc(UC_Handle, UC_Buttons)
	
	if(PressedButton & IN_RELOAD)
	{
		if(g_skill2[id] != SKILL_READY)
			return
		if(!pev_valid(g_teleport_ent[id][ENT_MARK]))
			return
			
		set_uc(UC_Handle, UC_Buttons, IN_ATTACK2)
		set_task(0.001, "action_teleport", id)
	}
	else if(PressedButton & IN_USE)
	{
		if(pev(id, pev_flags) & FL_DUCKING)
		{
			client_print(id, print_center, "You Can't Create Teleport Portal If You Ducking ...")
			return
		}
		
		if(g_skill1[id] != SKILL_READY)
			return
		
		set_uc(UC_Handle, UC_Buttons, IN_ATTACK2)
		set_task(0.001, "action_create_teleport_mark", id)
	}
	
	auto_unstuck(id)
}

public auto_unstuck(id)
{
	static Float:origin[3], Float:mins[3], hull, Float:vec[3], i
	
	pev(id, pev_origin, origin)
	hull = pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
	
	if(!is_hull_vacant(origin, hull, id))
	{
		pev(id, pev_mins, mins)
		vec[2] = origin[2]
		
		for (i = 0; i < sizeof UnstuckVector; ++i)
		{
			vec[0] = origin[0] - mins[0] * UnstuckVector[i][0]
			vec[1] = origin[1] - mins[1] * UnstuckVector[i][1]
			vec[2] = origin[2] - mins[2] * UnstuckVector[i][2]
			
			if(is_hull_vacant(vec, hull, id))
			{
				engfunc(EngFunc_SetOrigin, id, vec)
				set_pev(id,pev_velocity,{0.0,0.0,0.0})
			
				i = sizeof UnstuckVector
			}
		}
	}
}

public ze_user_infected(id)
{
	if(ze_get_current_zombie_class(id) == g_lilith)
	{
		class_lilith[id] = true
	
		show_lilith_hud(id)
		lilith_reset_var_skill(id)
		
		fm_strip_user_weapons(id)
		fm_give_item(id, "weapon_knife")
		
		set_pdata_int(id, 491, index_lilith, 5)
	}
}

public ze_user_infected_pre(id) 
{ 
    	if(!(get_user_flags(id) & ADMIN_MAP)) 
	{ 
        	if(ze_get_next_zombie_class(id) == g_lilith) 
		{ 
            		ze_set_next_zombie_class(id, 0) 
			client_print(id, print_chat, "Данный класс только для Админов")
        	}     
    	}	 
} 

public action_teleport(id)
{
	if(!is_user_alive(id))
		return
	if(!ze_is_user_zombie(id) || !class_lilith[id])
		return
	if(g_skill2[id] != SKILL_READY)
		return
	
	g_skill2[id] = SKILL_USE
	
	set_weapon_anim(id, V_ANIM_SKILL_2)
	set_pev(id, pev_sequence, P_ANIM_SKILL_2)
	set_pev(id, pev_framerate, 0.3)
		
	set_user_maxspeed(id, 0.1)
	set_user_gravity(id, 2.0)
	set_pdata_float(id, 83, 2.0, 5)
	
	new Float:fOrigin[3]
	pev(id, pev_origin, fOrigin)
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_DLIGHT)
	engfunc(EngFunc_WriteCoord, fOrigin[0])
	engfunc(EngFunc_WriteCoord, fOrigin[1])
	engfunc(EngFunc_WriteCoord, fOrigin[2])
	write_byte(20) // radius
	write_byte(200)    // r
	write_byte(200)  // g
	write_byte(255)   // b
	write_byte(40) // life in 10's
	write_byte(1)  // decay rate in 10's
	message_end() 
	
	new Float:OriginPlayer[3]
	get_position(id, 5.0, 0.0, 0.0, OriginPlayer)
	create_teleport_portal(g_teleport_ent[id][ENT_PORTAL1], id, SKILL_2_IN, OriginPlayer)
	
	if(pev_valid(g_teleport_ent[id][ENT_MARK]))
	{
		static Float:OriginTeleport[3]
		pev(g_teleport_ent[id][ENT_MARK], pev_origin, OriginTeleport)
		OriginTeleport[2] += 50.0
		create_teleport_portal(g_teleport_ent[id][ENT_PORTAL2], id, SKILL_2_OUT, OriginTeleport)
	}
	
	set_task(2.0, "do_teleport", id+TASK_TELEPORT)
}

public do_teleport(id)
{
	id -= TASK_TELEPORT
	if(!is_user_alive(id))
		return
	if(!ze_is_user_zombie(id) || !class_lilith[id])
	{
		remove_task(id+TASK_TELEPORT)
		return
	}
	
	if(!pev_valid(g_teleport_ent[id][ENT_MARK]))
		return
	if(g_skill2[id] != SKILL_USE)
		return
	
	client_cmd(id, "+duck")
	
	static Float:OriginTeleport[3]
	pev(g_teleport_ent[id][ENT_MARK], pev_origin, OriginTeleport)
	OriginTeleport[2] += 50.0
	set_pev(id, pev_origin, OriginTeleport)
	engfunc(EngFunc_EmitSound, g_teleport_ent[id][ENT_MARK], CHAN_ITEM, "common/null.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
	
	remove_entity(g_teleport_ent[id][ENT_MARK])
	g_teleport_ent[id][ENT_MARK] = 0
	
	set_user_maxspeed(id, float(ZOMBIE_SPEED))
	set_user_gravity(id, (float(ZOMBIE_GRAVITY)/800.0))
	set_pev(id, pev_framerate, 1.0)
	client_cmd(id, "-duck")
	
	g_skill2[id] = SKILL_DELAY
	set_task(float(DELAY_SKILL_2), "skill2_delay", id+TASK_DELAY)
}

public skill2_delay(id)
{
	id -= TASK_DELAY
	
	if(g_skill2[id] != SKILL_DELAY)
		return
	
	g_skill2[id] = SKILL_READY
}

public action_create_teleport_mark(id)
{
	if(!is_user_alive(id))
		return
	if(!ze_is_user_zombie(id) || !class_lilith[id])
		return
	if(g_skill1[id] != SKILL_READY)
		return
	
	g_skill1[id] = SKILL_USE
	
	set_weapon_anim(id, V_ANIM_SKILL_1)
	set_pev(id, pev_sequence, P_ANIM_SKILL_1)
	set_pev(id, pev_framerate, 0.5)
	
	set_user_maxspeed(id, 0.1)
	set_user_gravity(id, 2.0)
	
	new Float:fOrigin[3]
	pev(id, pev_origin, fOrigin)
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_DLIGHT)
	engfunc(EngFunc_WriteCoord, fOrigin[0])
	engfunc(EngFunc_WriteCoord, fOrigin[1])
	engfunc(EngFunc_WriteCoord, fOrigin[2])
	write_byte(20) // radius
	write_byte(200)    // r
	write_byte(200)  // g
	write_byte(255)   // b
	write_byte(40) // life in 10's
	write_byte(1)  // decay rate in 10's
	message_end() 
	
	engfunc(EngFunc_EmitSound, id, CHAN_ITEM, LilithSound[SKILL_1], 1.0, ATTN_NORM, 0, PITCH_NORM)
	set_pdata_float(id, 83, 1.0, 5)
	
	set_task(0.63, "create_teleport_mark", id+TASK_TELEPORT)
}

public create_teleport_mark(id)
{
	id -= TASK_TELEPORT
	
	if(!is_user_alive(id))
		return
	if(!ze_is_user_zombie(id) || !class_lilith[id])
	{
		remove_task(id+TASK_TELEPORT)
		return
	}
	
	if(g_skill1[id] != SKILL_USE)
		return
	
	if(pev_valid(g_teleport_ent[id][ENT_MARK]))
	{
		remove_entity(g_teleport_ent[id][ENT_MARK])
		g_teleport_ent[id][ENT_MARK] = 0
	}
	
	set_user_maxspeed(id, float(ZOMBIE_SPEED))
	set_user_gravity(id, (float(ZOMBIE_GRAVITY)/800.0))
	set_pev(id, pev_framerate, 1.0)
	
	static Float:fOrigin1[3], Float:fOrigin2[3]
	g_teleport_ent[id][ENT_MARK] = create_entity("env_sprite")
	
	set_pev(g_teleport_ent[id][ENT_MARK], pev_classname, TELEPORT_MARK_CLASSNAME)
	engfunc(EngFunc_SetModel, g_teleport_ent[id][ENT_MARK], TELEPORT_MARK_MODEL)
	
	pev(id, pev_origin, fOrigin1)
	set_pev(g_teleport_ent[id][ENT_MARK], pev_origin, fOrigin1)
	
	drop_to_floor(g_teleport_ent[id][ENT_MARK])
	
	pev(g_teleport_ent[id][ENT_MARK], pev_origin, fOrigin2)
	fOrigin2[0] += TELEPORT_X
	
	set_pev(g_teleport_ent[id][ENT_MARK], pev_origin, fOrigin2)
	
	set_pev(g_teleport_ent[id][ENT_MARK], pev_solid, SOLID_NOT)
	set_pev(g_teleport_ent[id][ENT_MARK], pev_movetype, MOVETYPE_NOCLIP)
	
	set_pev(g_teleport_ent[id][ENT_MARK], pev_animtime, get_gametime())
	set_pev(g_teleport_ent[id][ENT_MARK], pev_framerate, 1.0)
	set_pev(g_teleport_ent[id][ENT_MARK], pev_sequence, 0)
	set_pev(g_teleport_ent[id][ENT_MARK], pev_owner, id)
	
	set_pev(g_teleport_ent[id][ENT_MARK], pev_nextthink, get_gametime() + 2.0)
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_DLIGHT)
	engfunc(EngFunc_WriteCoord, fOrigin2[0])
	engfunc(EngFunc_WriteCoord, fOrigin2[1])
	engfunc(EngFunc_WriteCoord, fOrigin2[2])
	write_byte(10) // radius
	write_byte(200)    // r
	write_byte(200)  // g
	write_byte(255)   // b
	write_byte(40) // life in 10's
	write_byte(1)  // decay rate in 10's
	message_end() 
	
	engfunc(EngFunc_EmitSound, g_teleport_ent[id][ENT_MARK], CHAN_ITEM, LilithSound[PAIN_GATE], 1.0, ATTN_NORM, 0, PITCH_NORM)
	
	g_skill1[id] = SKILL_DELAY
	set_task(float(DELAY_SKILL_1), "skill1_delay", id+TASK_DELAY)
}

public skill1_delay(id)
{
	id -= TASK_DELAY
	
	if(g_skill1[id] != SKILL_DELAY)
		return
	
	g_skill1[id] = SKILL_READY
}

public create_teleport_portal(ent, owner, const Sound, Float:Origin[3])
{
	ent = create_entity("env_sprite")
	
	Origin[0] += TELEPORT_X
	Origin[2] += TELEPORT_Z
	
	set_pev(ent, pev_classname, TELEPORT_PORTAL_CLASSNAME)
	engfunc(EngFunc_SetModel, ent, TELEPORT_PORTAL_MODEL)
	
	set_pev(ent, pev_origin, Origin)
	
	set_pev(ent, pev_solid, SOLID_NOT)
	set_pev(ent, pev_movetype, MOVETYPE_NOCLIP)
	
	set_pev(ent, pev_rendermode, kRenderTransAdd)
	set_pev(ent, pev_renderamt, 150.0)
	set_pev(ent, pev_scale, 0.5)
	
	set_pev(ent, pev_frame, 0.0)
	set_pev(ent, pev_owner, owner)
	set_pev(ent, pev_fuser1, get_gametime() + 3.0)
	
	set_pev(ent, pev_nextthink, get_gametime() + 0.05)
	engfunc(EngFunc_EmitSound, ent, CHAN_ITEM, LilithSound[Sound], 1.0, ATTN_NORM, 0, PITCH_NORM)
}

public Forward_Portal_Think(ent)
{
	if(!pev_valid(ent))
		return
	
	static Float:fFrame, Float:Origin[3], owner
	owner = pev(ent, pev_owner)
	pev(ent, pev_frame, fFrame)
	pev(ent, pev_origin, Origin)

	if(ent == g_teleport_ent[owner][ENT_PORTAL2])
	{
		fFrame += 1.0
		if(fFrame > 15.0) fFrame = 0.0
	}
	else if(ent == g_teleport_ent[owner][ENT_PORTAL1])
	{
		fFrame -= 1.0
		if(fFrame == 0.0) fFrame = 15.0
	}
	
	set_pev(ent, pev_frame, fFrame)
	set_pev(ent, pev_nextthink, get_gametime() + 0.05)
	
	static Float:fTimeRemove
	pev(ent, pev_fuser1, fTimeRemove)
	if(get_gametime() >= pev(ent, pev_fuser1))
	{
		engfunc(EngFunc_RemoveEntity, ent)
		return
	}
}

public Forward_Mark_Think(ent)
{
	if(!pev_valid(ent))
		return
	
	static Float:Origin[3]
	pev(ent, pev_origin, Origin)
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_DLIGHT)
	engfunc(EngFunc_WriteCoord, Origin[0])
	engfunc(EngFunc_WriteCoord, Origin[1])
	engfunc(EngFunc_WriteCoord, Origin[2])
	write_byte(10) // radius
	write_byte(200)    // r
	write_byte(200)  // g
	write_byte(255)   // b
	write_byte(40) // life in 10's
	write_byte(1)  // decay rate in 10's
	message_end()
	
	engfunc(EngFunc_EmitSound, ent, CHAN_ITEM, LilithSound[PAIN_GATE], 1.0, ATTN_NORM, 0, PITCH_NORM)
	set_pev(ent, pev_nextthink, get_gametime() + 2.0)
}

public Forward_Mark_Touch(ent, id)
{
	if(!pev_valid(ent))
		return
	if(!is_user_alive(id))
		return
	
	if(pev(id, pev_solid) != SOLID_NOT)
		set_pev(id, pev_solid, SOLID_NOT)
}

public lilith_reset_value(id)
{
	class_lilith[id] = false
	lilith_reset_var_skill(id)
}

public lilith_reset_var_skill(id)
{
	remove_task(id+TASK_TELEPORT)
	
	if(pev_valid(g_teleport_ent[id][ENT_MARK]))
	{
		remove_entity(g_teleport_ent[id][ENT_MARK])
		g_teleport_ent[id][ENT_PORTAL2] = 0
	}
	
	if(pev_valid(g_teleport_ent[id][ENT_PORTAL1]))
	{
		remove_entity(g_teleport_ent[id][ENT_PORTAL1])
		g_teleport_ent[id][ENT_PORTAL2] = 0
	}
	
	if(pev_valid(g_teleport_ent[id][ENT_PORTAL2]))
	{
		remove_entity(g_teleport_ent[id][ENT_PORTAL2])
		g_teleport_ent[id][ENT_PORTAL2] = 0
	}
	
	g_skill1[id] = 0
	g_skill2[id] = 0
	g_teleport_ent[id][ENT_MARK] = 0
}

stock bool:is_hull_vacant(const Float:origin[3], hull,id)
{
	static tr
	engfunc(EngFunc_TraceHull, origin, origin, 0, hull, id, tr)
	if (!get_tr2(tr, TR_StartSolid) || !get_tr2(tr, TR_AllSolid))
		return true;
	
	return false;
}

stock get_position(id, Float:forw, Float:right, Float:up, Float:vStart[])
{
	new Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
	
	pev(id, pev_origin, vOrigin)
	pev(id, pev_view_ofs,vUp) //for player
	xs_vec_add(vOrigin,vUp,vOrigin)
	pev(id, pev_v_angle, vAngle) // if normal entity ,use pev_angles
	
	angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForward) //or use EngFunc_AngleVectors
	angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight)
	angle_vector(vAngle,ANGLEVECTOR_UP,vUp)
	
	vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
	vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
	vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
}

stock set_weapon_anim(id, anim)
{
	set_pev(id, pev_weaponanim, anim)
	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = id)
	write_byte(anim)
	write_byte(pev(id, pev_body))
	message_end()
}

stock precache_viewmodel_sound(const model[]) // I Get This From BTE
{
	new file, i, k
	if((file = fopen(model, "rt")))
	{
		new szsoundpath[64], NumSeq, SeqID, Event, NumEvents, EventID
		fseek(file, 164, SEEK_SET)
		fread(file, NumSeq, BLOCK_INT)
		fread(file, SeqID, BLOCK_INT)
		
		for(i = 0; i < NumSeq; i++)
		{
			fseek(file, SeqID + 48 + 176 * i, SEEK_SET)
			fread(file, NumEvents, BLOCK_INT)
			fread(file, EventID, BLOCK_INT)
			fseek(file, EventID + 176 * i, SEEK_SET)
			
			// The Output Is All Sound To Precache In ViewModels (GREAT :V)
			for(k = 0; k < NumEvents; k++)
			{
				fseek(file, EventID + 4 + 76 * k, SEEK_SET)
				fread(file, Event, BLOCK_INT)
				fseek(file, 4, SEEK_CUR)
				
				if(Event != 5004)
					continue
				
				fread_blocks(file, szsoundpath, 64, BLOCK_CHAR)
				
				if(strlen(szsoundpath))
				{
					strtolower(szsoundpath)
					engfunc(EngFunc_PrecacheSound, szsoundpath)
				}
			}
		}
	}
	fclose(file)
}

Code: Select all

#include <zombie_escape>
#include <ze_zombie_class>
#include <fakemeta_util>
#include <engine>
#include <fun>

#define PLUGIN	"[CSO] Metatronic Zombie (Z-NOID)"
#define VERSION	"1.0"
#define AUTHOR	"Asep Khairul Anam"

/*
***************************************
The Plugins Is Made By Asep KhairulAnam
***************************************
************ ZOMBIE-MOD.RU ************
***************************************
NOTE: Please To Don't Enabled Admin Knife
Zombie Or Admin Knife Player Models To Work
The Plugins ...
*/

// Player Model In The "cstrike/models/player/metatronic_zombie/metatronic_zombie.mdl"
#define PLAYER_MODEL		"metatronic_zombie"

// Zombie Configuration (String)
#define ZOMBIE_NAME			"Robot"
#define ZOMBIE_INFO			"\r[Admin]"
#define ZOMBIE_MODEL			"metatronic_zombie"
#define ZOMBIE_CLAW_MDL			"v_knife_metatronic.mdl"
#define ZOMBIE_BOMB_MDL			"models/zombie_plague/v_bomb_metatronic_merah.mdl"

// Buff Sprites
#define BUFFSPR_MODEL		"sprites/zb_skill_hpbuff.spr"
#define BUFFSPR_CLASSNAME	"buffspr_skill"
#define BUFFSPR_SCALE		1.0
#define BUFFSPR_ORIGIN_X	0.0
#define BUFFSPR_ORIGIN_Y	0.0
#define BUFFSPR_ORIGIN_Z	50.0

// Heal Sprites
#define SPR_MODEL		"sprites/zb_skill_hp.spr"
#define SPR_CLASSNAME		"buffspr_skill"
#define SPR_SCALE		1.0
#define SPR_ORIGIN_X		0.0
#define SPR_ORIGIN_Y		0.0
#define SPR_ORIGIN_Z		50.0

// Zombie Configuration
#define ZOMBIE_HEALTH		4500
#define ZOMBIE_SPEED		250
#define ZOMBIE_GRAVITY		790

// Zombie Configuration (Skill)
#define ZOMBIE_SKILL_1_TIME		5	// Time GodMode + Regeneration
#define ZOMBIE_SKILL_1_COUNT		5	// Count Regen
#define ZOMBIE_SKILL_1_REGEN		100	// Health Regen
#define ZOMBIE_SKILL_2_FAKE_HEALTH	1000	// Fake Health Count
#define DELAY_SKILL_1			50	// Delay To Use The Skill Again
#define DELAY_SKILL_2			30	// Delay To Use The Skill Again

// Task
#define TASK_SKILL	10221
#define	TASK_DELAY	10222

enum _:METATRONIC_SKILL
{
	SKILL_READY = 0,
	SKILL_USE,
	SKILL_DELAY,
	SKILL_DO
}

enum _:METATRONIC_ANIMATION
{
	V_ANIM_SKILL_1	= 2,
	P_ANIM_SKILL_1	= 150
}

enum _:METATRONIC_SOUND
{
	SKILL_1 = 0,
	SKILL_2,
	PAIN_HURT,
	PAIN_DEATH_1,
	PAIN_DEATH_2,
	PAIN_HEAL
}

enum _:METATRONIC_ENT
{
	ENT_HEAD_SPR_HP_BUFF = 0,
	ENT_HEAD_SPR_HP
}

new const MetatronicSound[][] = 
{
	"asep/metatronic_skill.wav",
	"asep/metatronic_revival.wav",
	"asep/metatronic_pain_hurt.wav",
	"asep/metatronic_pain_death1.wav",
	"asep/metatronic_pain_death2.wav",
	"asep/metatronic_heal.wav"
}

new g_head_spr_ent[33][2]
new class_metatronic[33]
new g_skill1[33]
new g_skill1_regen_count[33]
new g_skill2[33]
new g_skill2_fake_health[33]
new Float:g_speed_hud[33]
new sync_hud[2]
new g_godmode_temp[33]
new g_HamBot
new index_metatronic
new g_metatronic

public plugin_init()
{
	// Register Plugins .....
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	// Forward Event
	register_event("DeathMsg", "Event_Death", "a")
	register_event("CurWeapon","Event_CurWeapon","be","1=1")
	register_event("HLTV", "Event_RoundStart", "a", "1=0", "2=0")
	
	// Forward Log Event
	register_logevent("Event_RoundEnd", 2, "1=Round_End")
	
	// Forward Fakemeta
	register_forward(FM_CmdStart , "Forward_CmdStart")
	
	// Forward Ham
	RegisterHam(Ham_TakeDamage, "player", "Forward_TakeDamage")
	
	// Forward Think Entity
	register_think(BUFFSPR_CLASSNAME, "Forward_Buffspr_Think")
	register_think(SPR_MODEL, "Forward_Spr_Think")
	
	// Create Sync Hud
	sync_hud[0] = CreateHudSyncObj(12)
	sync_hud[1] = CreateHudSyncObj(13)
	g_metatronic = ze_register_zombie_class(ZOMBIE_NAME, ZOMBIE_INFO, ZOMBIE_HEALTH, ZOMBIE_SPEED, ZOMBIE_GRAVITY)
}

public plugin_precache()
{	
	for(new i = 0; i < sizeof(MetatronicSound); i++)
		precache_sound(MetatronicSound[i])
	
	new CLAW_MDL[101]
	formatex(CLAW_MDL, charsmax(CLAW_MDL), "models/zombie_plague/%s", ZOMBIE_CLAW_MDL)
	precache_model(CLAW_MDL)
	
	precache_model(ZOMBIE_BOMB_MDL)
	precache_viewmodel_sound(ZOMBIE_BOMB_MDL)
	
	precache_model(BUFFSPR_MODEL)
	precache_model(SPR_MODEL)
	
	new player_models[101]
	formatex(player_models, charsmax(player_models), "models/player/%s/%s.mdl", PLAYER_MODEL, PLAYER_MODEL)
	index_metatronic = precache_model(player_models)
}

public client_putinserver(id)
{
	if(!g_HamBot && is_user_bot(id))
	{
		g_HamBot = 1
		set_task(0.1, "Do_RegisterHam", id)
	}
}

public Do_RegisterHam(id)
{
	RegisterHamFromEntity(Ham_TakeDamage, id, "Forward_TakeDamage")
}

public ze_user_humanized(id) metatronic_reset_value(id)
public Event_RoundEnd(id) metatronic_reset_value(id)
public Event_RoundStart(id) metatronic_reset_value(id)
public Event_Death()
{
	new id = read_data(2)
	if(ze_is_user_zombie(id) && class_metatronic[id])
	{
		engfunc(EngFunc_EmitSound, id, CHAN_ITEM, MetatronicSound[random_num(PAIN_DEATH_1, PAIN_DEATH_2)], 1.0, ATTN_NORM, 0, PITCH_NORM)
		metatronic_reset_value(id)
	}
}

public Event_CurWeapon(id)
{
	if(!is_user_alive(id))
		return
	if(!ze_is_user_zombie(id) || !class_metatronic[id])
		return
	
	if(g_skill1[id] != SKILL_USE) set_user_maxspeed(id, float(ZOMBIE_SPEED))
	else if(g_skill2[id] != SKILL_USE) set_user_maxspeed(id, float(ZOMBIE_SPEED))
	switch(read_data(2))
	{
		case CSW_SMOKEGRENADE: set_pev(id, pev_viewmodel2, ZOMBIE_BOMB_MDL)
		case CSW_HEGRENADE: set_pev(id, pev_viewmodel2, ZOMBIE_BOMB_MDL)
		case CSW_FLASHBANG: set_pev(id, pev_viewmodel2, ZOMBIE_BOMB_MDL)
	}
	
}

public Forward_TakeDamage(victim, inflictor, attacker, Float:damage, dmgtype)
{
	if(!is_user_connected(victim) || !is_user_connected(attacker))
		return HAM_IGNORED
	if(!ze_is_user_zombie(victim) || ze_is_user_zombie(attacker))
		return HAM_IGNORED
	if(!class_metatronic[victim])
		return HAM_IGNORED
	
	engfunc(EngFunc_EmitSound, victim, CHAN_BODY, MetatronicSound[PAIN_HURT], 1.0, ATTN_NORM, 0, PITCH_NORM)

	if(g_skill1[victim] == SKILL_USE)
		return HAM_SUPERCEDE
		
	if(g_skill1[victim] == SKILL_USE && damage >= get_user_health(victim) && !g_godmode_temp[victim])
	{
		g_skill1[victim] = SKILL_DO
		g_godmode_temp[victim] = 2
		return HAM_SUPERCEDE
	}
	
	if(g_skill1[victim] == SKILL_DO && damage >= get_user_health(victim) && g_godmode_temp[victim] > 0)
	{
		g_godmode_temp[victim]--
		return HAM_SUPERCEDE
	}
	
	if(g_skill2[victim] == SKILL_USE)
	{
		if(g_skill2_fake_health[victim] > 0)
		{
			g_skill2_fake_health[victim] -= floatround(damage)
			g_speed_hud[victim] = 0.05
			ExecuteHam(Ham_TakeDamage, victim, attacker, attacker, 0.0, dmgtype)
		}
		else if(g_skill2_fake_health[victim] <= 0)
		{
			g_skill2[victim] = SKILL_DELAY
			g_skill2_fake_health[victim] = 0
			g_speed_hud[victim] = 1.0
			metatronic_remove_headspr(victim, ENT_HEAD_SPR_HP_BUFF)
			set_task(float(DELAY_SKILL_2), "action_skill2_delay", victim+TASK_DELAY)
		}
		
		return HAM_SUPERCEDE
	}
		
	return HAM_HANDLED
}

public show_metatronic_hud(id)
{
	static Temp_Skill_1[128], Temp_Skill_2[128]
	static Red[2], Blue[2], Green[2]
	if(g_skill1[id] == SKILL_READY)
	{
		Red[0] = 200
		Green[0] = 200
		Blue[0] = 200
		
		formatex(Temp_Skill_1, sizeof(Temp_Skill_1), "[ E ] - Revival || Not Avaible")
	}
	else if(g_skill1[id] == SKILL_USE)
	{
		Red[0] = 200
		Green[0] = 200
		Blue[0] = 0
		
		formatex(Temp_Skill_1, sizeof(Temp_Skill_1), "[ E ] - Revival || Using")
	}
	else if(g_skill1[id] == SKILL_DELAY)
	{
		Red[0] = 255
		Green[0] = 0
		Blue[0] = 0
		
		formatex(Temp_Skill_1, sizeof(Temp_Skill_1), "[ E ] - Revival || Delayed")
	}
	else if(g_skill1[id] == SKILL_DO)
	{
		Red[0] = 0
		Green[0] = 255
		Blue[0] = 0
		
		formatex(Temp_Skill_1, sizeof(Temp_Skill_1), "[ E ] - Revival || Avaible !!")
	}
	
	if(g_skill2[id] == SKILL_READY)
	{
		Red[1] = 0
		Green[1] = 255
		Blue[1] = 0
		
		formatex(Temp_Skill_2, sizeof(Temp_Skill_2), "[ R ] - Fake Health || Ready")
	}
	else if(g_skill2[id] == SKILL_USE)
	{
		Red[1] = 0
		Green[1] = 180
		Blue[1] = 200
		
		formatex(Temp_Skill_2, sizeof(Temp_Skill_2), "---- FAKE HEALTH: %i ----", g_skill2_fake_health[id])
	}
	else if(g_skill2[id] == SKILL_DELAY)
	{
		Red[1] = 255
		Green[1] = 0
		Blue[1] = 0
		
		formatex(Temp_Skill_2, sizeof(Temp_Skill_2), "[ R ] - Fake Health || Delay ...")
	}
	
	set_hudmessage(Red[0], Green[0], Blue[0], -1.0, -0.79, 0, 2.0, 10.0)
	ShowSyncHudMsg(id, sync_hud[0], Temp_Skill_1)
	
	set_hudmessage(Red[1], Green[1], Blue[1], -1.0, -0.76, 0, 2.0, 10.0)
	ShowSyncHudMsg(id, sync_hud[1], Temp_Skill_2)
}

public Forward_CmdStart(id, UC_Handle, seed)
{
	if(!is_user_alive(id))
		return
	if(!ze_is_user_zombie(id) || !class_metatronic[id])
		return
	
	static Float:CurrentTime, Float:g_hud_delay[33]
	CurrentTime = get_gametime()
	
	if(CurrentTime - g_speed_hud[id] > g_hud_delay[id])
	{
		show_metatronic_hud(id)
		
		if(pev(id, pev_solid) == SOLID_NOT)
			set_pev(id, pev_solid, SOLID_BBOX)
			
		if(g_skill1[id] == SKILL_USE && g_skill1_regen_count[id] > 0)
		{
			set_user_health(id, get_user_health(id) + ZOMBIE_SKILL_1_REGEN)
			engfunc(EngFunc_EmitSound, id, CHAN_ITEM, MetatronicSound[SKILL_2], 1.0, ATTN_NORM, 0, PITCH_NORM)
			
			g_skill1_regen_count[id]--
		}
		
		if(g_speed_hud[id] < 1.0)
			g_speed_hud[id] = 1.0
			
		g_hud_delay[id] = CurrentTime
	}
	
	if(g_skill1[id] == SKILL_READY && get_user_health(id) <= 100)
		g_skill1[id] = SKILL_DO
	
	static PressedButton
	PressedButton = get_uc(UC_Handle, UC_Buttons)
	
	if(PressedButton & IN_USE)
	{
		if(g_skill1[id] != SKILL_DO)
			return
			
		set_uc(UC_Handle, UC_Buttons, IN_ATTACK2)
		set_task(0.001, "action_skill_1", id+TASK_SKILL)
	}
	else if(PressedButton & IN_RELOAD)
	{
		if(g_skill2[id] != SKILL_READY)
			return
		
		set_task(0.001, "action_skill_2", id+TASK_SKILL)
	}
	
}

public ze_user_infected(id)
{
	if(ze_get_current_zombie_class(id) == g_metatronic)
	{
		class_metatronic[id] = true
	
		show_metatronic_hud(id)
		metatronic_reset_var_skill(id)
		
		fm_strip_user_weapons(id)
		fm_give_item(id, "weapon_knife")
		
		set_pdata_int(id, 491, index_metatronic, 5)
		
		set_user_maxspeed(id, float(ZOMBIE_SPEED))
		set_user_gravity(id, (float(ZOMBIE_GRAVITY)/800.0))
		
		remove_task(id)
		remove_task(id+TASK_SKILL)
		remove_task(id+TASK_DELAY)
	}
}

public ze_user_infected_pre(id) 
{ 
    	if(!(get_user_flags(id) & ADMIN_SLAY)) 
	{ 
        	if(ze_get_next_zombie_class(id) == g_metatronic) 
		{ 
            		ze_set_next_zombie_class(id, 0) 
			client_print(id, print_chat, "Данный класс только для Админов")
        	}     
    	}	 
} 

public action_skill_1(id)
{
	id -= TASK_SKILL
	
	if(!is_user_alive(id))
		return
	if(!ze_is_user_zombie(id) || !class_metatronic[id])
		return
	if(g_skill1[id] != SKILL_DO)
		return
	
	g_skill1[id] = SKILL_USE
	g_skill1_regen_count[id] = ZOMBIE_SKILL_1_COUNT
	
	set_pdata_float(id, 83, 1.03, 5)
	
	set_weapon_anim(id, V_ANIM_SKILL_1)
	set_pev(id, pev_sequence, P_ANIM_SKILL_1)
	set_pev(id, pev_framerate, 0.5)
	engfunc(EngFunc_EmitSound, id, CHAN_WEAPON, MetatronicSound[SKILL_1], 1.0, ATTN_NORM, 0, PITCH_NORM)
	
	new Float:fOrigin[3]
	pev(id, pev_origin, fOrigin)
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_DLIGHT)
	engfunc(EngFunc_WriteCoord, fOrigin[0])
	engfunc(EngFunc_WriteCoord, fOrigin[1])
	engfunc(EngFunc_WriteCoord, fOrigin[2])
	write_byte(30) // radius
	write_byte(150)    // r
	write_byte(150)  // g
	write_byte(255)   // b
	write_byte(40) // life in 10's
	write_byte(40)  // decay rate in 10's
	message_end()
	
	// Create Head SPR (By Dias)
	Create_Head_Sprites(id, ENT_HEAD_SPR_HP, SPR_CLASSNAME, SPR_MODEL, 0.75, 20.0, 5.0, 255.0, SPR_ORIGIN_X, SPR_ORIGIN_Y, SPR_ORIGIN_Z, 1, 0, 180, 220)
	
	set_task(1.0, "action_reset_ability", id+TASK_SKILL)
	set_task(float(ZOMBIE_SKILL_1_TIME), "reset_action_skill_1", id+TASK_SKILL)
}

public action_reset_ability(id)
{
	id -= TASK_SKILL
	
	if(!is_user_alive(id))
		return
	if(!ze_is_user_zombie(id) || !class_metatronic[id])
		return
	if(g_skill1[id] != SKILL_USE)
		return
	
	set_pev(id, pev_framerate, 1.0)
}

public reset_action_skill_1(id)
{
	id -= TASK_SKILL
	
	if(!is_user_alive(id))
		return
	if(!ze_is_user_zombie(id) || !class_metatronic[id])
		return
	if(g_skill1[id] != SKILL_USE)
		return
	
	g_skill1[id] = SKILL_DELAY
	metatronic_remove_headspr(id, ENT_HEAD_SPR_HP)
	
	set_task(float(DELAY_SKILL_1), "action_skill1_delay", id+TASK_DELAY)
}

public action_skill1_delay(id)
{
	id -= TASK_DELAY
	
	if(!is_user_alive(id))
		return
	if(!ze_is_user_zombie(id) || !class_metatronic[id])
		return
	if(g_skill1[id] != SKILL_DELAY)
	{
		remove_task(id+TASK_DELAY)
		return
	}
	
	g_skill1[id] = SKILL_READY
}

public action_skill_2(id)
{
	id -= TASK_SKILL
	
	if(!is_user_alive(id))
		return
	if(!ze_is_user_zombie(id) || !class_metatronic[id])
		return
	if(g_skill2[id] != SKILL_READY)
		return
	
	g_skill2[id] = SKILL_USE
	g_skill2_fake_health[id] = ZOMBIE_SKILL_2_FAKE_HEALTH
	engfunc(EngFunc_EmitSound, id, CHAN_WEAPON, MetatronicSound[PAIN_HEAL], 1.0, ATTN_NORM, 0, PITCH_NORM)
	engfunc(EngFunc_EmitSound, id, CHAN_ITEM, MetatronicSound[SKILL_2], 1.0, ATTN_NORM, 0, PITCH_NORM)
	
	Create_Head_Sprites(id, ENT_HEAD_SPR_HP_BUFF,  BUFFSPR_CLASSNAME, BUFFSPR_MODEL, 0.5, 0.0, 0.0, 255.0, BUFFSPR_ORIGIN_X, BUFFSPR_ORIGIN_Y, BUFFSPR_ORIGIN_Z, 1, 0, 180, 220)
}

public action_skill2_delay(id)
{
	id -= TASK_DELAY
	
	if(!is_user_alive(id))
		return
	if(!ze_is_user_zombie(id) || !class_metatronic[id])
		return
	if(g_skill2[id] != SKILL_DELAY)
	{
		remove_task(id+TASK_DELAY)
		return
	}
	
	g_skill2[id] = SKILL_READY
	g_skill2_fake_health[id] = 0
}

public Create_Head_Sprites(id, num, const Classname[], const Sprite[], Float:Scale, Float:Frame, Float:Time, Float:Transparent, Float:Forward, Float:Right, Float:Up, ColorActivate, Red, Green, Blue)
{
	// Thanks To Dias ... 
	
	static Ent; Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_sprite"))
	if(!pev_valid(Ent))
		return
		
	g_head_spr_ent[id][num] = Ent
	
	static Float:Origin[3]
	pev(id, pev_origin, Origin)
	
	Origin[0] += Forward
	Origin[2] += Up
	
	set_pev(Ent, pev_origin, Origin)
		
	set_pev(Ent, pev_takedamage, DAMAGE_NO)
	set_pev(Ent, pev_solid, SOLID_NOT)
	set_pev(Ent, pev_movetype, MOVETYPE_FOLLOW)
	
	set_pev(Ent, pev_classname, Classname)
	engfunc(EngFunc_SetModel, Ent, Sprite)
	
	set_pev(Ent, pev_renderfx, kRenderFxNone)
	set_pev(Ent, pev_rendermode, kRenderTransAdd)
	set_pev(Ent, pev_renderamt, Transparent)
	
	new Color[3]
	Color[0] = Red
	Color[1] = Green
	Color[2] = Blue
	
	if(ColorActivate)
		set_pev(Ent, pev_rendercolor, Color)
	
	set_pev(Ent, pev_owner, id)
	set_pev(Ent, pev_scale, Scale)
	
	if(Time > 0.0)
		set_pev(Ent, pev_fuser1, get_gametime() + Time)
	
	set_pev(Ent, pev_fuser2, Forward)
	set_pev(Ent, pev_fuser3, Right)
	set_pev(Ent, pev_fuser4, Up)
	
	set_pev(Ent, pev_frame, 0.0)
	set_pev(Ent, pev_iuser1, floatround(Frame))
	
	set_pev(Ent, pev_nextthink, get_gametime() + 0.01)
}

public Forward_Buffspr_Think(ent)
{
	if(!pev_valid(ent))
		return
	
	static Float:Origin[3], owner
	owner = pev(ent, pev_owner)
	pev(owner, pev_origin, Origin)
	
	Origin[0] += pev(ent, pev_fuser2)
	Origin[1] += pev(ent, pev_fuser3)
	Origin[2] += pev(ent, pev_fuser4)
	
	engfunc(EngFunc_SetOrigin, ent, Origin)
	set_pev(ent, pev_nextthink, get_gametime() + 0.000001)
}

public Forward_Spr_Think(ent)
{
	if(!pev_valid(ent))
		return
	
	static Float:Origin[3], owner
	static Float:fFrame
	
	owner = pev(ent, pev_owner)
	pev(owner, pev_origin, Origin)
	pev(ent, pev_frame, fFrame)
	
	fFrame += 1.0
	if(fFrame > 20.0) fFrame = 0.0
	
	Origin[0] += pev(ent, pev_fuser2)
	Origin[1] += pev(ent, pev_fuser3)
	Origin[2] += pev(ent, pev_fuser4)
	
	set_pev(ent, pev_frame, fFrame)
	engfunc(EngFunc_SetOrigin, ent, Origin)
	set_pev(ent, pev_nextthink, get_gametime() + 0.001)
	
	static Float:fTimeRemove
	pev(ent, pev_fuser1, fTimeRemove)
	if(get_gametime() >= pev(ent, pev_fuser1) || g_skill1[owner] != SKILL_USE)
	{
		engfunc(EngFunc_RemoveEntity, ent)
		return
	}
}

public metatronic_reset_value(id)
{
	class_metatronic[id] = false
	metatronic_reset_var_skill(id)
}

public metatronic_reset_var_skill(id)
{
	g_skill1[id] = 0
	g_skill2[id] = 0
	g_skill1_regen_count[id] = 0
	g_skill2_fake_health[id] = 0
	g_speed_hud[id] = 1.0
	
	if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP]))
	{
		remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP])
		g_head_spr_ent[id][ENT_HEAD_SPR_HP] = 0
	}
	if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF]))
	{
		remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF])
		g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF] = 0
	}
}

public metatronic_remove_headspr(id, num)
{
	if(num == ENT_HEAD_SPR_HP)
	{
		if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP]))
		{
			remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP])
			g_head_spr_ent[id][ENT_HEAD_SPR_HP] = 0
		}
	}
	else if(num == ENT_HEAD_SPR_HP_BUFF)
	{
		if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF]))
		{
			remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF])
			g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF] = 0
		}
	}
	else if(num == 2)
	{
		if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP]))
		{
			remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP])
			g_head_spr_ent[id][ENT_HEAD_SPR_HP] = 0
		}
		if(pev_valid(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF]))
		{
			remove_entity(g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF])
			g_head_spr_ent[id][ENT_HEAD_SPR_HP_BUFF] = 0
		}
	}
}

stock set_weapon_anim(id, anim)
{
	set_pev(id, pev_weaponanim, anim)
	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = id)
	write_byte(anim)
	write_byte(pev(id, pev_body))
	message_end()
}

stock precache_viewmodel_sound(const model[]) // I Get This From BTE
{
	new file, i, k
	if((file = fopen(model, "rt")))
	{
		new szsoundpath[64], NumSeq, SeqID, Event, NumEvents, EventID
		fseek(file, 164, SEEK_SET)
		fread(file, NumSeq, BLOCK_INT)
		fread(file, SeqID, BLOCK_INT)
		
		for(i = 0; i < NumSeq; i++)
		{
			fseek(file, SeqID + 48 + 176 * i, SEEK_SET)
			fread(file, NumEvents, BLOCK_INT)
			fread(file, EventID, BLOCK_INT)
			fseek(file, EventID + 176 * i, SEEK_SET)
			
			// The Output Is All Sound To Precache In ViewModels (GREAT :V)
			for(k = 0; k < NumEvents; k++)
			{
				fseek(file, EventID + 4 + 76 * k, SEEK_SET)
				fread(file, Event, BLOCK_INT)
				fseek(file, 4, SEEK_CUR)
				
				if(Event != 5004)
					continue
				
				fread_blocks(file, szsoundpath, 64, BLOCK_CHAR)
				
				if(strlen(szsoundpath))
				{
					strtolower(szsoundpath)
					engfunc(EngFunc_PrecacheSound, szsoundpath)
				}
			}
		}
	}
	fclose(file)
}
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

User avatar
DarkZombie
Member
Member
Hungary
Posts: 76
Joined: 5 years ago
Contact:

#4

Post by DarkZombie » 5 years ago

L 10/03/2018 - 22:24:00: [AMXX] Plugin "zp_class_cso_lilith.amxx" failed to load: Plugin uses an unknown function (name "zp_set_user_zombie_class") - check your modules.ini.
L 10/03/2018 - 22:24:00: [AMXX] Plugin "zp_class_cso_metatronic.amxx" failed to load: Plugin uses an unknown function (name "zp_set_user_zombie_class") - check your

User avatar
Night Fury
Mod Developer
Mod Developer
Posts: 677
Joined: 7 years ago
Contact:

#5

Post by Night Fury » 5 years ago

DarkZombie wrote: 5 years ago L 10/03/2018 - 22:24:00: [AMXX] Plugin "zp_class_cso_lilith.amxx" failed to load: Plugin uses an unknown function (name "zp_set_user_zombie_class") - check your modules.ini.
L 10/03/2018 - 22:24:00: [AMXX] Plugin "zp_class_cso_metatronic.amxx" failed to load: Plugin uses an unknown function (name "zp_set_user_zombie_class") - check your
Make sure you used my codes because i have tried to compile & i got no errors.
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

User avatar
DarkZombie
Member
Member
Hungary
Posts: 76
Joined: 5 years ago
Contact:

#6

Post by DarkZombie » 5 years ago

It does not work for me.

User avatar
DarkZombie
Member
Member
Hungary
Posts: 76
Joined: 5 years ago
Contact:

#7

Post by DarkZombie » 5 years ago

can not be used, check it

User avatar
Night Fury
Mod Developer
Mod Developer
Posts: 677
Joined: 7 years ago
Contact:

#8

Post by Night Fury » 5 years ago

Compiled fine ( i call the file t.sma ).
Screenshot_2.jpg
Screenshot_2.jpg (24.02 KiB) Viewed 10225 times
Screenshot_2.jpg
Screenshot_2.jpg (24.02 KiB) Viewed 10225 times
Screenshot_3.jpg
Screenshot_3.jpg (23.99 KiB) Viewed 10225 times
Screenshot_3.jpg
Screenshot_3.jpg (23.99 KiB) Viewed 10225 times
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

shady101852
Member
Member
United States of America
Posts: 27
Joined: 5 years ago
Contact:

#9

Post by shady101852 » 5 years ago

Jack GamePlay wrote: 5 years ago Compiled fine ( i call the file t.sma ).

Screenshot_2.jpg
Screenshot_3.jpg
the codes compile fine, the error is from the server console when you type amxx plugins. Or from server error logs.

Load fails: Plugin uses an unknown function (name "ze_set_next_zombie_class") - check your modules.ini.

User avatar
Night Fury
Mod Developer
Mod Developer
Posts: 677
Joined: 7 years ago
Contact:

#10

Post by Night Fury » 5 years ago

shady101852 wrote: 5 years ago
the codes compile fine, the error is from the server console when you type amxx plugins. Or from server error logs.

Load fails: Plugin uses an unknown function (name "ze_set_next_zombie_class") - check your modules.ini.
Then go to your code & find that native & replace it with this:

Code: Select all

ze_set_next_zombie_class
Then recompile your code.
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

shady101852
Member
Member
United States of America
Posts: 27
Joined: 5 years ago
Contact:

#11

Post by shady101852 » 5 years ago

Jack GamePlay wrote: 5 years ago
shady101852 wrote: 5 years ago
the codes compile fine, the error is from the server console when you type amxx plugins. Or from server error logs.

Load fails: Plugin uses an unknown function (name "ze_set_next_zombie_class") - check your modules.ini.
Then go to your code & find that native & replace it with this:

Code: Select all

ze_set_next_zombie_class
Then recompile your code.
it seems i was missing the zombie classes plugin lol. I have a request if you could for that first zombie. The teleportation seems to be limited to only the ground under the player, not able to teleport to walls or in the middle of the air. Can you make it possible, but still avoid getting the zombie stuck in the wall please? It would be a good change because the way it is now the teleportation is not much useful against running humans.

User avatar
DarkZombie
Member
Member
Hungary
Posts: 76
Joined: 5 years ago
Contact:

#12

Post by DarkZombie » 5 years ago

still dont works for me when try compile write ze_set_next_zombie_class missing

Post Reply

Create an account or sign in to join the discussion

You need to be a member in order to post a reply

Create an account

Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute

Register

Sign in

Who is online

Users browsing this forum: No registered users and 3 guests