Как да направя зобми клас за админ/вип
-
User12
Извън линия - Потребител
- Мнения: 321
- Регистриран на: 25 Яну 2018, 22:39
- Местоположение: Сливен
- Се отблагодари: 40 пъти
- Получена благодарност: 17 пъти
- Обратна връзка:
Как да направя зобми клас за админ/вип
-
Nikolow
Извън линия - AMXX Скриптър
- Мнения: 196
- Регистриран на: 27 Ное 2016, 13:02
- Местоположение: Варна
- Се отблагодари: 7 пъти
- Получена благодарност: 79 пъти
- Обратна връзка:
Как да направя зобми клас за админ/вип
- Правиш нормален клас.
- Гледаш това:
Код за потвърждение: Избери целия код
/**
* 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)
В 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 !")
}
}
}
Правим нормален зомби клас, при което при инфекция добавяме бонус кръв.
Код за потвърждение: Избери целия код
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))
}
-
User12
Извън линия - Потребител
- Мнения: 321
- Регистриран на: 25 Яну 2018, 22:39
- Местоположение: Сливен
- Се отблагодари: 40 пъти
- Получена благодарност: 17 пъти
- Обратна връзка:
Как да направя зобми клас за админ/вип
Код за потвърждение: Избери целия код
/*================================================================================
[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
}
-
Nikolow
Извън линия - AMXX Скриптър
- Мнения: 196
- Регистриран на: 27 Ное 2016, 13:02
- Местоположение: Варна
- Се отблагодари: 7 пъти
- Получена благодарност: 79 пъти
- Обратна връзка:
Как да направя зобми клас за админ/вип
В случая беше нужно да се направят 2 forward-a (ние ползваме само единият -> pre) и 1 native.
Forward-ите ги правим съответно както останалите в мода, а именно:
Най-горе добавяме:
Код за потвърждение: Избери целия код
new g_fwClass_Choosed_Post, g_fwClass_Choosed_Pre;
Код за потвърждение: Избери целия код
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)
Функцията се казва
Код за потвърждение: Избери целия код
public menu_zclass(id, menuid, item)
Код за потвърждение: Избери целия код
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 плъгин.
-
User12
Извън линия - Потребител
- Мнения: 321
- Регистриран на: 25 Яну 2018, 22:39
- Местоположение: Сливен
- Се отблагодари: 40 пъти
- Получена благодарност: 17 пъти
- Обратна връзка:
Как да направя зобми клас за админ/вип
Код за потвърждение: Избери целия код
#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;
}
-
Nikolow
Извън линия - AMXX Скриптър
- Мнения: 196
- Регистриран на: 27 Ное 2016, 13:02
- Местоположение: Варна
- Се отблагодари: 7 пъти
- Получена благодарност: 79 пъти
- Обратна връзка:
Как да направя зобми клас за админ/вип
С моят начин се иска това:
- Теглиш редактираната версия от мен и компилираш.
- Ако имаш твоя версия, просто следвай инструкциите, които съм дал, за да добавиш forward-ите и nativе функцията.
- Правиш си плъгина за класа подобен на моя примерният.
-
User12
Извън линия - Потребител
- Мнения: 321
- Регистриран на: 25 Яну 2018, 22:39
- Местоположение: Сливен
- Се отблагодари: 40 пъти
- Получена благодарност: 17 пъти
- Обратна връзка:
Как да направя зобми клас за админ/вип
-
Nikolow
Извън линия - AMXX Скриптър
- Мнения: 196
- Регистриран на: 27 Ное 2016, 13:02
- Местоположение: Варна
- Се отблагодари: 7 пъти
- Получена благодарност: 79 пъти
- Обратна връзка:
Как да направя зобми клас за админ/вип
Не можах да разбера какво точно искаш ? Какви флагове ? Какви проверки ? Къде ? Защо ? Каква е целта ? Какво трябва да стане ?
С моят начин нещата работят перфектно. Какво повече желаеш, не знам ?
Без такава редакция няма как да се получи това, което ти желаеш, или поне аз не се досещам.
-
User12
Извън линия - Потребител
- Мнения: 321
- Регистриран на: 25 Яну 2018, 22:39
- Местоположение: Сливен
- Се отблагодари: 40 пъти
- Получена благодарност: 17 пъти
- Обратна връзка:
Как да направя зобми клас за админ/вип
-
OciXCrom
Извън линия - Администратор
- Мнения: 7206
- Регистриран на: 06 Окт 2016, 19:20
- Местоположение: /resetscore
- Се отблагодари: 117 пъти
- Получена благодарност: 1295 пъти
- Обратна връзка:
Как да направя зобми клас за админ/вип
-
- Подобни теми
- Отговори
- Преглеждания
- Последно мнение
-
- 0 Отговори
- 943 Преглеждания
-
Последно мнение от The Pain
-
- 6 Отговори
- 1098 Преглеждания
-
Последно мнение от Stilex
-
- 2 Отговори
- 728 Преглеждания
-
Последно мнение от The Pain
-
- 2 Отговори
- 641 Преглеждания
-
Последно мнение от Stilex
-
- 3 Отговори
- 812 Преглеждания
-
Последно мнение от OciXCrom
-
- 1 Отговори
- 1365 Преглеждания
-
Последно мнение от Huehue
-
- 2 Отговори
- 1698 Преглеждания
-
Последно мнение от OciXCrom
Кой е на линия
Потребители разглеждащи този форум: 0 регистрирани и 14 госта