Как да направя зобми клас за админ/вип

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
User12
Извън линия
Потребител
Потребител
Мнения: 321
Регистриран на: 25 Яну 2018, 22:39
Местоположение: Сливен
Се отблагодари: 40 пъти
Получена благодарност: 17 пъти
Обратна връзка:

Как да направя зобми клас за админ/вип

Мнение от User12 » 03 Фев 2018, 23:29

Добър вечер искам да направя определен зомби клас да бъде само за АДМИН или само за ВИП , как да го направя мода е Zombie Plague 4.3 .
Каналът ми в YouTube : Георги Пламенов

Изображение

Аватар
Nikolow
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 196
Регистриран на: 27 Ное 2016, 13:02
Местоположение: Варна
Се отблагодари: 7 пъти
Получена благодарност: 79 пъти
Обратна връзка:

Как да направя зобми клас за админ/вип

Мнение от Nikolow » 04 Фев 2018, 11:45

Най-лесният вариант без много редакция е следният:
- Правиш нормален клас.
- Гледаш това:

Код за потвърждение: Избери целия код

/**
 * Called when a player gets infected.
 *
 * @param id		Player index who was infected.
 * @param infector	Player index who infected him (if applicable).
 * @param nemesis	Whether the player was turned into a nemesis.
 */
forward zp_user_infected_pre(id, infector, nemesis)
forward zp_user_infected_post(id, infector, nemesis)
В post по подразбиране си слагаш екстрите на самото зомби, ако мислиш да е по-различно.

В pre правиш проверката дали играчът е точно с тези флагове, които искаш да е. Проста проверка, при която ако не е директно му задаваш първият клас (предполага се че вече имаш такъв).

Код за потвърждение: Избери целия код

/**
 * Sets a player's next zombie class ID (for the next infection).
 *
 * @param id		Player index.
 * @param classid	A valid zombie class ID.
 * @return		True on success, false otherwise.
 */
native zp_set_user_zombie_class(id, classid)

Следователно става нещо такова:

Код за потвърждение: Избери целия код

public zp_user_infected_pre(id)
{
    if(!(get_user_flags(id) & ADMIN_RESERVATION))
    {
        if (zp_get_user_next_class(id) == g_zclass_vip)
        {
            zp_set_user_zombie_class(id, 0)
            client_print(id, print_chat, "This is Zombie Class is only for VIP Users !")
        }
    }
}
И понеже може да не е много ясно всичко с post, ще дам пример и за това.
Правим нормален зомби клас, при което при инфекция добавяме бонус кръв.

Код за потвърждение: Избери целия код

const zclass5_infecthp = 200 // extra hp for infections

public zp_user_infected_post(id, infector)
{
	if (zp_get_user_zombie_class(infector) == g_zclass_vip)
		set_pev(infector, pev_health, float(pev(infector, pev_health) + zclass5_infecthp))
}
Tired and retired...

Аватар
User12
Извън линия
Потребител
Потребител
Мнения: 321
Регистриран на: 25 Яну 2018, 22:39
Местоположение: Сливен
Се отблагодари: 40 пъти
Получена благодарност: 17 пъти
Обратна връзка:

Как да направя зобми клас за админ/вип

Мнение от User12 » 04 Фев 2018, 20:12

Направих го така :

Код за потвърждение: Избери целия код

/*================================================================================
 [Zombie Plague Forwards]
=================================================================================*/

public zp_user_infected_pre(id)
{
    if(!(get_user_flags(id) & ADMIN_IMMUNITY))
    {
        if (zp_get_user_next_class(id) == g_iZSwarmID)
        {
            zp_set_user_zombie_class(id, 0)
            CC_SendMessage(id, "^4[FireZone] ^1This Zombie Class is only for ^4ADMINS !")
        }
    }
}
public zp_user_infect_attempt(victim, infector, nemesis)
{
	// Non-player infection or turned into a nemesis
	if(!infector || nemesis)	
		return PLUGIN_CONTINUE
		
	// Check Swarm Zombie class and block infection.
	// I'm detecting if is Zombie and isn't Nemesis because
	// can be an infection by zp_infect_user native
	if(zp_get_user_zombie_class(infector) == g_iZSwarmID && zp_get_user_zombie(infector) && !zp_get_user_nemesis(infector))
	{
		// With infection grenade then must kill or infect, defined by cvar.
		if(zp_get_user_infection_nade(infector))
		{
			switch(g_bCvar_Infbomb_Infect)
			{
				case true: 	return PLUGIN_CONTINUE // Infect
				case false: 	ExecuteHamB(Ham_Killed, victim, infector, 0) // Kill
			}
		}
		
		return ZP_PLUGIN_HANDLED
	}
		
	return PLUGIN_CONTINUE
}
забелязах само , че когато оникновен играч избере зомбито не му изписва , че е само за админ/вип с определен флаг , изписва едва когато се инфектира играча и му задава първото зомби за игра . Как мога да го направя по друг начин още при избирането на зомби-то да не дава да се вземе от обкновен играч . и да изписва съобщение в чата ?
Каналът ми в YouTube : Георги Пламенов

Изображение

Аватар
Nikolow
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 196
Регистриран на: 27 Ное 2016, 13:02
Местоположение: Варна
Се отблагодари: 7 пъти
Получена благодарност: 79 пъти
Обратна връзка:

Как да направя зобми клас за админ/вип

Мнение от Nikolow » 04 Фев 2018, 23:59

Тъй като ми стана интересно от тази заявка и по принцип всички VIP класове при 4.3 версията се правят на този принцип, защо не направим лек едит на главният плъгин, който ни позволява да направим точно това, което ти желаеш -> При избор през меню-то да ти избира Classic Zombie + Да ти отваря меню-то отново и да ти казва, че е само за VIP.

В случая беше нужно да се направят 2 forward-a (ние ползваме само единият -> pre) и 1 native.

Forward-ите ги правим съответно както останалите в мода, а именно:
Най-горе добавяме:

Код за потвърждение: Избери целия код

new g_fwClass_Choosed_Post, g_fwClass_Choosed_Pre;
В plugin_init добавяме:

Код за потвърждение: Избери целия код

	g_fwClass_Choosed_Post = CreateMultiForward("zp_zombie_class_choosed_post", ET_IGNORE, FP_CELL, FP_CELL)
	g_fwClass_Choosed_Pre = CreateMultiForward("zp_zombie_class_choosed_pre", ET_IGNORE, FP_CELL, FP_CELL)
И вече във функцията за избиране на зомби класа добавяме на подходящите места двата forward-а.
Функцията се казва

Код за потвърждение: Избери целия код

public menu_zclass(id, menuid, item)
Първият forward (PRE) го добавяме точно след

Код за потвърждение: Избери целия код

	g_zombieclassnext[id] = classid
>>

Код за потвърждение: Избери целия код

	g_zombieclassnext[id] = classid
	
	ExecuteForward(g_fwClass_Choosed_Pre, g_fwDummyResult, id, classid);

След това поставяме и вторият forward (POST) и го добавяме точно след съобщението за избраният зомби клас, точно преди да дестройнем меню-то.

Код за потвърждение: Избери целия код

	menu_destroy(menuid)
>>

Код за потвърждение: Избери целия код

	ExecuteForward(g_fwClass_Choosed_Post, g_fwDummyResult, id, classid);
	
	menu_destroy(menuid)

Готови сме с двата Forward-а и можем да си действаме по кода.
Остана ни само да си направим native за отваряне на клас меню-то, понеже нямаме команда.

Намирате

Код за потвърждение: Избери целия код

public plugin_natives()
и добавяте най-отгоре ВЪВ функцията

Код за потвърждение: Избери целия код

register_native("zp_open_class_menu", "native_open_class_menu", 1)
След това някъде в кода, например най-отдолу добавяте следното:

Код за потвърждение: Избери целия код

public native_open_class_menu(id)
{
	show_menu_zclass(id);
	return 1;
}

И реално след това остана да пипаме по кода на вип класа.

Реално това, което правим е, да ползваме PRE forwarda

Код за потвърждение: Избери целия код

public zp_zombie_class_choosed_pre(id, classid)
{
	if (zp_get_user_next_class(id) == g_zclass_vip)
	{
		if(!(get_user_flags(id) & ADMIN_RESERVATION))
		{
			zp_set_user_zombie_class(id, 0)

			ColorChat(id, "^x04[ZP]^x01 This Zombie Class is only for^x04 VIP Users");
			zp_open_class_menu(id);
			
			return ZP_PLUGIN_HANDLED;
		}
	}
	return PLUGIN_CONTINUE;
}

Нека не забравяме да добавим най-отгоре, че ползваме native и forward от друг плъгин, понеже ги няма добавени в .inc файла.

Код за потвърждение: Избери целия код

native zp_open_class_menu(id);
forward zp_zombie_class_choosed_pre(id, classid);


И реално кода за VIP класа става така:

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <fakemeta>
#include <zombieplague>
#include <cromchat>

native zp_open_class_menu(id);
forward zp_zombie_class_choosed_pre(id, classid);

new const zclass5_name[] = { "VIP Ultimate Zombie" }
new const zclass5_info[] = { "[ \rHP- HP/Jump/Speed+ \y]" }
new const zclass5_model[] = { "zombie_source" }
new const zclass5_clawmodel[] = { "v_knife_zombie.mdl" }
const zclass5_health = 3200
const zclass5_speed = 300
const Float:zclass5_gravity = 0.8
const Float:zclass5_knockback = 0.9
const zclass5_infecthp = 200 // extra hp for infections

new g_zclass_vip
public plugin_precache()
{
	register_plugin("[ZP] VIP ZOMBIE", "4.3", "MeRcyLeZZ")
	g_zclass_vip = zp_register_zombie_class(zclass5_name, zclass5_info, zclass5_model, zclass5_clawmodel, zclass5_health, zclass5_speed, zclass5_gravity, zclass5_knockback)
}

public zp_user_infected_post(id, infector)
{
	if (zp_get_user_zombie_class(infector) == g_zclass_vip)
		set_pev(infector, pev_health, float(pev(infector, pev_health) + zclass5_infecthp))
}

public zp_zombie_class_choosed_pre(id, classid)
{
	if (zp_get_user_next_class(id) == g_zclass_vip)
	{
		if(!(get_user_flags(id) & ADMIN_RESERVATION))
		{
			zp_set_user_zombie_class(id, 0)

			ColorChat(id, "^x04[ZP]^x01 This Zombie Class is only for^x04 VIP Users");
			zp_open_class_menu(id);
			
			return ZP_PLUGIN_HANDLED;
		}
	}
	return PLUGIN_CONTINUE;
}

Прикачам и редактираната версия на главният 4.3 плъгин.
zombie_plague40.sma
+zp_zombie_class_choosed_pre / post +zp_open_class_menu
(335.43 KiB) Свалено 99 пъти
zombie_plague40.sma
+zp_zombie_class_choosed_pre / post +zp_open_class_menu
(335.43 KiB) Свалено 99 пъти
Tired and retired...

Аватар
User12
Извън линия
Потребител
Потребител
Мнения: 321
Регистриран на: 25 Яну 2018, 22:39
Местоположение: Сливен
Се отблагодари: 40 пъти
Получена благодарност: 17 пъти
Обратна връзка:

Как да направя зобми клас за админ/вип

Мнение от User12 » 05 Фев 2018, 01:15

Чакай обърках се , аз исках само да задам определен зомби клас да бъде или само за админ или само за вип , което успях да направя зададох ADMIN_IMMUNITY това е кода на зомби класа :

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#include <cromchat>

/*================================================================================
 [Customizations]
=================================================================================*/

// Zombie Attributes
new const zclass_name[] = "Swarm Zombie" // name
new const zclass_info[] = "Zombie Killer [Only for ADMINS]" // description
new const zclass_model[] = "wzm_swarm" // model
new const zclass_clawmodel[] = "v_fast.mdl" // claw model

const zclass_health = 5000 // health
const zclass_speed = 260 // speed

const Float:zclass_gravity = 1.0 // gravity
const Float:zclass_knockback = 0.49 // knockback

/*================================================================================
 Customization ends here! Yes, that's it. Editing anything beyond
 here is not officially supported. Proceed at your own risk...
=================================================================================*/

// Variables
new g_iZSwarmID, g_iMaxPlayers

// Cvar pointers
new cvar_dmgmult, cvar_surv_dmgmult, cvar_blockinfbomb_infect

// Cached cvars
new bool:g_bCvar_Infbomb_Infect, Float:g_flCvar_DmgMult, Float:g_flCvar_SurvDmgMult

// Bools
new bool:g_bIsConnected[33]

// Offsets
const m_pPlayer = 41

// Plug info.
#define PLUG_VERSION "0.6"
#define PLUG_AUTH "meTaLiCroSS"

// Macros
#define is_user_valid_connected(%1) (1 <= %1 <= g_iMaxPlayers && g_bIsConnected[%1])

/*================================================================================
 [Init and Precache]
=================================================================================*/

public plugin_init()
{
	// Plugin Register
	register_plugin("[ZP] Zombie Class: Swarm Zombie", PLUG_VERSION, PLUG_AUTH)
		
	// Main events
	register_event("HLTV", "event_RoundStart", "a", "1=0", "2=0")
	
	// Hamsandwich Forwards
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fw_KnifeAttack")
	RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fw_KnifeAttack")
	
	// Cvars
	cvar_dmgmult = register_cvar("zp_zclass_swarm_damage_mult", "2.0")
	cvar_surv_dmgmult = register_cvar("zp_zclass_swarm_surv_damage_mult", "3.0")
	cvar_blockinfbomb_infect = register_cvar("zp_zclass_swarm_infbomb_infect", "1")
	
	static szCvar[30]
	formatex(szCvar, charsmax(szCvar), "v%s by %s", PLUG_VERSION, PLUG_AUTH)
	register_cvar("zp_zclass_swarm", szCvar, FCVAR_SERVER|FCVAR_SPONLY) 
	
	// Vars
	g_iMaxPlayers = get_maxplayers()
}

public plugin_precache()
{
	// Hamsandwich Forwards
	RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
	
	// Register the new class and store ID for reference
	g_iZSwarmID = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)	
	
}

/*================================================================================
 [Main Events]
=================================================================================*/

public event_RoundStart()
{
	g_bCvar_Infbomb_Infect = bool:get_pcvar_num(cvar_blockinfbomb_infect)
	g_flCvar_DmgMult = get_pcvar_float(cvar_dmgmult)
	g_flCvar_SurvDmgMult = get_pcvar_float(cvar_surv_dmgmult)
}

/*================================================================================
 [Main Forwards]
=================================================================================*/

public client_putinserver(id)
{
	// Updating bool
	g_bIsConnected[id] = true
}

public client_disconnect(id)
{
	// Updating bool
	g_bIsConnected[id] = false
}

public fw_KnifeAttack(knife)
{
	// We need to block the Knife attack, because
	// when has throwed an Infection bomb it can Kill/Infect
	// with Knife, and will be a bug
	// ----
	// Get knife owner (player)
	static iPlayer 
	iPlayer = get_pdata_cbase(knife, m_pPlayer, 4)
	
	// Non-player entity
	if(!is_user_valid_connected(iPlayer))
		return HAM_IGNORED
	
	// Swarm zombie class, not a nemesis and has throwed a infection nade
	if(zp_get_user_zombie_class(iPlayer) == g_iZSwarmID && !zp_get_user_nemesis(iPlayer) && zp_get_user_infection_nade(iPlayer))
		return HAM_SUPERCEDE
	
	return HAM_IGNORED
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype)
{
	// In the Main ZP plugin, the TakeDamage forward is Superceded, so
	// we need to register this in Precache to get it working again
	// ----
	// Non-player attacker, self kill, killed by world, or isn't make damage by himself
	if(!is_user_valid_connected(attacker) || victim == attacker || !attacker || attacker != inflictor)
		return HAM_IGNORED
		
	// Swarm zombie class
	if(zp_get_user_zombie(attacker) && zp_get_user_zombie_class(attacker) == g_iZSwarmID && !zp_get_user_nemesis(attacker))
	{
		// Get damage result (with survivor and human damage multiplier)
		static Float:flDamageResult 
		flDamageResult = zp_get_user_survivor(victim) ? damage * g_flCvar_SurvDmgMult : damage * g_flCvar_DmgMult
		
		// Making damage again...
		ExecuteHam(Ham_TakeDamage, victim, inflictor, attacker, flDamageResult, damagetype)
		
		return HAM_SUPERCEDE;
	}
		
	return HAM_IGNORED
}

/*================================================================================
 [Zombie Plague Forwards]
=================================================================================*/

public zp_user_infected_pre(id)
{
    if(!(get_user_flags(id) & ADMIN_IMMUNITY))
    {
        if (zp_get_user_next_class(id) == g_iZSwarmID)
        {
            zp_set_user_zombie_class(id, 0)
            CC_SendMessage(id, "^4[FireZone] ^1This Zombie Class is only for ^4ADMINS !")
        }
    }
}
public zp_user_infect_attempt(victim, infector, nemesis)
{
	// Non-player infection or turned into a nemesis
	if(!infector || nemesis)	
		return PLUGIN_CONTINUE
		
	// Check Swarm Zombie class and block infection.
	// I'm detecting if is Zombie and isn't Nemesis because
	// can be an infection by zp_infect_user native
	if(zp_get_user_zombie_class(infector) == g_iZSwarmID && zp_get_user_zombie(infector) && !zp_get_user_nemesis(infector))
	{
		// With infection grenade then must kill or infect, defined by cvar.
		if(zp_get_user_infection_nade(infector))
		{
			switch(g_bCvar_Infbomb_Infect)
			{
				case true: 	return PLUGIN_CONTINUE // Infect
				case false: 	ExecuteHamB(Ham_Killed, victim, infector, 0) // Kill
			}
		}
		
		return ZP_PLUGIN_HANDLED
	}
		
	return PLUGIN_CONTINUE
}

/*================================================================================
 [Stocks]
=================================================================================*/

stock zp_get_user_infection_nade(id)
{
	static iNade
	iNade = get_grenade(id)
	
	if(iNade && entity_get_int(iNade, EV_INT_flTimeStepSound) == 1111)
		return iNade;
	
	return 0;
}
Аз нямам сма на мода за да го редактирам и барам от там , мога само плъгините да бъзикам и това е . Обяснили сте ми доста неща по горе но има ли нужда от тях , за да може като се избере зомби класа да не дава на играча да го вземе и да му излиза че е само за админи , а не когато бъде заразен тогава да му изпише , че не може да ползва този зомби клас .
Каналът ми в YouTube : Георги Пламенов

Изображение

Аватар
Nikolow
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 196
Регистриран на: 27 Ное 2016, 13:02
Местоположение: Варна
Се отблагодари: 7 пъти
Получена благодарност: 79 пъти
Обратна връзка:

Как да направя зобми клас за админ/вип

Мнение от Nikolow » 05 Фев 2018, 02:01

Аз друг начин с версия 4.3 без редакция на главният плъгин, с добавяне на forward-и не знам. Нека компетентните колеги се изкажат по въпроса и дадат повече акъл ако има друг начин да се постигне това, което ти желаеш.

С моят начин се иска това:
- Теглиш редактираната версия от мен и компилираш.
- Ако имаш твоя версия, просто следвай инструкциите, които съм дал, за да добавиш forward-ите и nativе функцията.
- Правиш си плъгина за класа подобен на моя примерният.
Tired and retired...

Аватар
User12
Извън линия
Потребител
Потребител
Мнения: 321
Регистриран на: 25 Яну 2018, 22:39
Местоположение: Сливен
Се отблагодари: 40 пъти
Получена благодарност: 17 пъти
Обратна връзка:

Как да направя зобми клас за админ/вип

Мнение от User12 » 05 Фев 2018, 12:52

А дали може с някаква проверка на играча да се направи това да се провери дали има админ флаг или няма ?
Каналът ми в YouTube : Георги Пламенов

Изображение

Аватар
Nikolow
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 196
Регистриран на: 27 Ное 2016, 13:02
Местоположение: Варна
Се отблагодари: 7 пъти
Получена благодарност: 79 пъти
Обратна връзка:

Как да направя зобми клас за админ/вип

Мнение от Nikolow » 05 Фев 2018, 13:33

User12 написа: 05 Фев 2018, 12:52 А дали може с някаква проверка на играча да се направи това да се провери дали има админ флаг или няма ?
Не можах да разбера какво точно искаш ? Какви флагове ? Какви проверки ? Къде ? Защо ? Каква е целта ? Какво трябва да стане ?
С моят начин нещата работят перфектно. Какво повече желаеш, не знам ?
Без такава редакция няма как да се получи това, което ти желаеш, или поне аз не се досещам.
Tired and retired...

Аватар
User12
Извън линия
Потребител
Потребител
Мнения: 321
Регистриран на: 25 Яну 2018, 22:39
Местоположение: Сливен
Се отблагодари: 40 пъти
Получена благодарност: 17 пъти
Обратна връзка:

Как да направя зобми клас за админ/вип

Мнение от User12 » 05 Фев 2018, 18:46

Това което исках стана , " исках да направя определен клас зомби за админ зададах флаг и в момента само админ с този флаг има достъп до зомби класа " , когато тествах с обикновен играч дали дава да се изпозлва този зомби клас , при избирането от меню-то на самото зомби показва информация че зомбито има еди колко си кръв , скорост и т.н , след това едва когато играча бъде инфектиран му изписва съобщение че зомбито е само за админ и му задава първото зомби от списъка за игра . Питах се дали ако се промени кода на зомби класа по някакъв начин не може да се накара при самото избиране на зомбито от меню-то да излиза съобщение в чата , че е само за АДМИН (както съм го направил в случеяс флаг за имунитет) .
Каналът ми в YouTube : Георги Пламенов

Изображение

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Как да направя зобми клас за админ/вип

Мнение от OciXCrom » 05 Фев 2018, 19:54

Менюто се намира в главния плъгин на мода, съответно трябва той да се редактира. API-то му не позволява добавяне на класове за хора с определен флаг и затова трябва да го редактираш и да добавиш въпросната поддръжка. В самия плъгин за класа не може да се направи абсолютно нищо, тъй като регистрирането става със само един ред, ползвайки функцията zp_register_zombie_class

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Помощ в скриптирането”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 14 госта