Статья Про то Как Добавить новое оружие в меню покупки zp/zpa
Статья Про то Как Добавить новое оружие в меню покупки zp/zpa
Эта Статья научит вас добавлять новое оружие в меню zp/zpa
И Так Приступим:
Для этого нам понадобится само оружие и нативы, которые мы в нем сделаем. Возьмем Golden AK-47 для примера.
Собственно, вот наш Golden AK-47
Показать / Скрыть текст
/*
[ZP] Extra Item: Golden Ak 47
Team: Humans
Description: This plugin adds a new weapon for Human Teams.
Weapon Cost: 30
Features:
– This weapon do more damage
– This weapon has zoom
– Launch Lasers
– This weapon has unlimited bullets
Credits:
KaOs – For his Dual MP5 mod
Cvars:
– zp_goldenak_dmg_multiplier – Damage Multiplier for Golden Ak 47
– zp_goldenak_gold_bullets – Golden bullets effect ?
– zp_goldenak_custom_model – Golden ak Custom Model
– zp_goldenak_unlimited_clip – Golden ak Unlimited Clip
*/
#include
#include // Added by Shidla
#include
#include
#include
#include
#include
#define is_valid_player(%1) (1 clip) && (wpnid == CSW_AK47) && g_HasAk[id])
new vec1[3], vec2[3]
get_user_origin(id, vec1, 1) // origin; your camera point.
get_user_origin(id, vec2, 4) // termina; where your bullet goes (4 is cs-only)
//BEAMENTPOINTS
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte (0) //TE_BEAMENTPOINTS 0
write_coord(vec1[0])
write_coord(vec1[1])
write_coord(vec1[2])
write_coord(vec2[0])
write_coord(vec2[1])
write_coord(vec2[2])
write_short( m_spriteTexture )
write_byte(1) // framestart
write_byte(5) // framerate
write_byte(2) // life
write_byte(10) // width
write_byte(0) // noise
write_byte( 255 ) // r, g, b
write_byte( 215 ) // r, g, b
write_byte( 0 ) // r, g, b
write_byte(200) // brightness
write_byte(150) // speed
message_end()
bullets[id] = clip
public zp_extra_item_selected(player, itemid)
if ( itemid == g_itemid )
if ( user_has_weapon(player, CSW_AK47) )
drop_prim(player)
give_item(player, \”weapon_ak47\”)
print_col_chat( player, \”^4[ZP] ^1%L ^3[%L]\”, LANG_PLAYER, \”BUY_AK\”, LANG_PLAYER, \”GAK-47\”)
g_HasAk[player] = true;
// Added by Shidla
public fw_SetModel(entity, model[])
// Entity is not valid
if(!is_valid_ent(entity))
return FMRES_IGNORED;
// Entity model is not w_ak47
if(!equal(model, \”models/w_ak47.mdl\”))
return FMRES_IGNORED;
// Get classname
static szClassName[33]
entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
// Not a Weapon box
if(!equal(szClassName, \”weaponbox\”))
return FMRES_IGNORED
// Some vars
static iOwner, iStoredGalilID
// Get owner
iOwner = entity_get_edict(entity, EV_ENT_owner)
// Get drop weapon index (galil) to use in fw_Galil_AddToPlayer forward
iStoredGalilID = find_ent_by_owner(ENG_NULLENT, \”weapon_ak47\”, entity)
// Entity classname is weaponbox, and galil has founded
if(g_HasAk[iOwner] && is_valid_ent(iStoredGalilID))
// Setting weapon options
entity_set_int(iStoredGalilID, EV_INT_WEAPONKEY, GAK_WEAPONKEY)
// Reset user vars
g_HasAk[iOwner] = false
// Set weaponbox new model
entity_set_model(entity, AK_W_MODEL)
return FMRES_SUPERCEDE
return FMRES_IGNORED
// Added by Shidla
public fw_GAK47AddToPlayer (GAK47, id)
// Make sure that this is M79
if( is_valid_ent(GAK47) && is_user_connected(id) && entity_get_int(GAK47, EV_INT_WEAPONKEY) == GAK_WEAPONKEY)
// Update
g_HasAk[id] = true
// Reset weapon options
entity_set_int(GAK47, EV_INT_WEAPONKEY, 0)
return HAM_HANDLED
return HAM_IGNORED
stock drop_prim(id)
new weapons[32], num
get_user_weapons(id, weapons, num)
for (new i = 0; i < num; i++) {
if (Wep_ak47 & (1<<weapons[i]))
static wname[32]
get_weaponname(weapons[i], wname, sizeof wname – 1)
engclient_cmd(id, \”drop\”, wname)
stock print_col_chat(const id, const input[], any:…)
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, \”!g\”, \”^4\”); // Green Color
replace_all(msg, 190, \”!y\”, \”^1\”); // Default Color
replace_all(msg, 190, \”!t\”, \”^3\”); // Team Color
if (id) players[0] = id; else get_players(players, count, \”ch\”);
for ( new i = 0; i < count; i++ ) if ( is_user_connected(players[i]) ) message_begin(MSG_ONE_UNRELIABLE, SayText, _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
Далее мы делаем натив give_golden_ak(id)
Для этого мы создаем новую функцию и регистрируем в ней натив
public plugin_natives()
register_native(\”give_golden_ak\”, \”native_give_golden_ak\”, 1)
Далее мы создаем функцию, в которой описываем, что происходит при использовании натива give_golden_ak(id)
В ней мы должны подтвердить, что у игрока есть Golden AK-47
g_HasAk[player] = true;
Вставляем это в функцию native_give_golden_ak (она была зарегистрирована в нативе)
public native_give_golden_ak(player)
g_HasAk[player] = true;
Натив создан. Вот, что у нас вышло:
Показать / Скрыть текст
/*
[ZP] Extra Item: Golden Ak 47
Team: Humans
Description: This plugin adds a new weapon for Human Teams.
Weapon Cost: 30
Features:
– This weapon do more damage
– This weapon has zoom
– Launch Lasers
– This weapon has unlimited bullets
Credits:
KaOs – For his Dual MP5 mod
Cvars:
– zp_goldenak_dmg_multiplier – Damage Multiplier for Golden Ak 47
– zp_goldenak_gold_bullets – Golden bullets effect ?
– zp_goldenak_custom_model – Golden ak Custom Model
– zp_goldenak_unlimited_clip – Golden ak Unlimited Clip
*/
#include
#include // Added by Shidla
#include
#include
#include
#include
#include
#pragma tabsize 0
#define is_valid_player(%1) (1 clip) && (wpnid == CSW_AK47) && g_HasAk[id])
new vec1[3], vec2[3]
get_user_origin(id, vec1, 1) // origin; your camera point.
get_user_origin(id, vec2, 4) // termina; where your bullet goes (4 is cs-only)
//BEAMENTPOINTS
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte (0) //TE_BEAMENTPOINTS 0
write_coord(vec1[0])
write_coord(vec1[1])
write_coord(vec1[2])
write_coord(vec2[0])
write_coord(vec2[1])
write_coord(vec2[2])
write_short( m_spriteTexture )
write_byte(1) // framestart
write_byte(5) // framerate
write_byte(2) // life
write_byte(10) // width
write_byte(0) // noise
write_byte( 255 ) // r, g, b
write_byte( 215 ) // r, g, b
write_byte( 0 ) // r, g, b
write_byte(200) // brightness
write_byte(150) // speed
message_end()
bullets[id] = clip
public zp_extra_item_selected(player, itemid)
if ( itemid == g_itemid )
if ( user_has_weapon(player, CSW_AK47) )
drop_prim(player)
give_item(player, \”weapon_ak47\”)
print_col_chat( player, \”^4[ZP] ^1%L ^3[%L]\”, LANG_PLAYER, \”BUY_AK\”, LANG_PLAYER, \”GAK-47\”)
g_HasAk[player] = true;
// Added by Shidla
public fw_SetModel(entity, model[])
// Entity is not valid
if(!is_valid_ent(entity))
return FMRES_IGNORED;
// Entity model is not w_ak47
if(!equal(model, \”models/w_ak47.mdl\”))
return FMRES_IGNORED;
// Get classname
static szClassName[33]
entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
// Not a Weapon box
if(!equal(szClassName, \”weaponbox\”))
return FMRES_IGNORED
// Some vars
static iOwner, iStoredGalilID
// Get owner
iOwner = entity_get_edict(entity, EV_ENT_owner)
// Get drop weapon index (galil) to use in fw_Galil_AddToPlayer forward
iStoredGalilID = find_ent_by_owner(ENG_NULLENT, \”weapon_ak47\”, entity)
// Entity classname is weaponbox, and galil has founded
if(g_HasAk[iOwner] && is_valid_ent(iStoredGalilID))
// Setting weapon options
entity_set_int(iStoredGalilID, EV_INT_WEAPONKEY, GAK_WEAPONKEY)
// Reset user vars
g_HasAk[iOwner] = false
// Set weaponbox new model
entity_set_model(entity, AK_W_MODEL)
return FMRES_SUPERCEDE
return FMRES_IGNORED
// Added by Shidla
public fw_GAK47AddToPlayer (GAK47, id)
// Make sure that this is M79
if( is_valid_ent(GAK47) && is_user_connected(id) && entity_get_int(GAK47, EV_INT_WEAPONKEY) == GAK_WEAPONKEY)
// Update
g_HasAk[id] = true
// Reset weapon options
entity_set_int(GAK47, EV_INT_WEAPONKEY, 0)
return HAM_HANDLED
return HAM_IGNORED
stock drop_prim(id)
new weapons[32], num
get_user_weapons(id, weapons, num)
for (new i = 0; i < num; i++) {
if (Wep_ak47 & (1<<weapons[i]))
static wname[32]
get_weaponname(weapons[i], wname, sizeof wname – 1)
engclient_cmd(id, \”drop\”, wname)
public native_give_golden_ak(player)
g_HasAk[player] = true
stock print_col_chat(const id, const input[], any:…)
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, \”!g\”, \”^4\”); // Green Color
replace_all(msg, 190, \”!y\”, \”^1\”); // Default Color
replace_all(msg, 190, \”!t\”, \”^3\”); // Team Color
if (id) players[0] = id; else get_players(players, count, \”ch\”);
for ( new i = 0; i < count; i++ ) if ( is_user_connected(players[i]) ) message_begin(MSG_ONE_UNRELIABLE, SayText, _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
Дальше надо создать новый .inc файл: ( предположим: weapon.inc )
Пишем в нем:
/*
* Gives Golden AK-47
*
* @param id Player index.
*/
native give_golden_ak(id)
А теперь этот .inc нужно вызвать в Zombie Plague
Пишем в главном плагине Zombie Plague:
#include
Далее
Находим функцию, в которой и прописана выдача оружия.
Вот и она
// Buy Primary Weapon
buy_primary_weapon(id, selection)
// Drop previous weapons
drop_weapons(id, 1)
drop_weapons(id, 2)
// Strip off from weapons
fm_strip_user_weapons(id)
fm_give_item(id, \”weapon_knife\”)
// Get weapon\’s id and name
static weaponid, wname[32]
weaponid = ArrayGetCell(g_primary_weaponids, selection)
ArrayGetString(g_primary_items, selection, wname, charsmax(wname))
// Give the new weapon and full ammо
fm_give_item(id, wname)
ExecuteHamB(Ham_GiveAmmo, id, MAXBPAMMO[weaponid], AMMOTYPE[weaponid], MAXBPAMMO[weaponid])
// Weapons bought
g_canbuy[id] = false
// Give additional items
static i
for (i = 0; i < ArraySize(g_additional_items); i++) ArrayGetString(g_additional_items, i, wname, charsmax(wname))
fm_give_item(id, wname)
Итак, я изменил имя обычного АК на Golden AK-47, его мы и будем на него менять.
Вставляем этот код в функцию выдачи оружия, в здесь нам и потребуется натив.
Важно: Вставить его ( код оружия ) надо до того места, где выдается обычное оружие
if(weaponid == CSW_AK47)
give_golden_ak(id)
Вот, что у нас выходит.
// Buy Primary Weapon
buy_primary_weapon(id, selection)
// Drop previous weapons
drop_weapons(id, 1)
drop_weapons(id, 2)
// Strip off from weapons
fm_strip_user_weapons(id)
fm_give_item(id, \”weapon_knife\”)
// Get weapon\’s id and name
static weaponid, wname[32]
weaponid = ArrayGetCell(g_primary_weaponids, selection)
ArrayGetString(g_primary_items, selection, wname, charsmax(wname))
// Give our Golden AK-47
if(weaponid == CSW_AK47)
give_golden_ak(id)
// Give the new weapon and full ammо
fm_give_item(id, wname)
ExecuteHamB(Ham_GiveAmmo, id, MAXBPAMMO[weaponid], AMMOTYPE[weaponid], MAXBPAMMO[weaponid])
// Weapons bought
g_canbuy[id] = false
// Give additional items
static i
for (i = 0; i < ArraySize(g_additional_items); i++) ArrayGetString(g_additional_items, i, wname, charsmax(wname))
fm_give_item(id, wname)
Готово, компилируем оба плагина и наслаждаемся своим креативом
Источник:
Комментарии: