Были взяты как образец 2 плагина на оружие Ак-47 и М4А1, по примеру так же сделал на оружие: XM1014, SG550, SG552, M3, AUG.
Вот пример:
1) Ак-47 в руках
Вы должны зарегистрироваться, чтобы видеть ссылки.
2) Ак-47 на земле
Вы должны зарегистрироваться, чтобы видеть ссылки.
Скрипт для АК-47
- Код: Выделить всё
#define DAMAGE 1.5
const COST = 15000
const VIPCOST = 0
const giAllowedRound = 2
#define BUYCMD
#define ACCESS_FLAG ADMIN_LEVEL_G
new AK_V_MODEL[] = "models/biohazard/gold_weap/v_ak47.mdl" // view weapon model
new AK_P_MODEL[] = "models/biohazard/gold_weap/p_ak47.mdl" // player weapon model
new AK_W_MODEL[] = "models/biohazard/gold_weap/w_ak47.mdl" // world weapon model
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#include <colorchat>
new bool:g_HasAk[33] = false
new bool:g_bHasGA[33] = false
new g_is_connected[33]
new bool: g_BotsRegistered
new giCounter
#if defined BUYTIME
new Float:g_GameTime
#endif
#define is_valid_player(%1) (1 <= %1 <= 32)
#define AK 3333
// offsets
const XO_WEAPON = 4
const XO_CBASEPLAYER = 5
const MAX_ITEM_TYPES = 6
const m_pPlayer = 41
const m_pNext = 42
const m_iId = 43
const m_rgpPlayerItems_CWeaponBox = 34
const m_rgpPlayerItems_CBasePlayer = 367
#define PLUGIN_NAME "Gold Ak-47"
#define PLUGIN_VERSION "1.0.0"
#define PLUGIN_AUTHOR "L1ga"
public plugin_precache()
{
precache_model(AK_V_MODEL);
precache_model(AK_P_MODEL);
precache_model(AK_W_MODEL);
}
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
// mapcheck
new mapname[4]
get_mapname(mapname, 3)
if(equali(mapname, "de_") || equali(mapname, "cs_"))
{
#if defined BUYCMD
register_clcmd( "buy_ak47", "buyAk47")
#endif
register_event( "TextMsg", "Event_NewGame", "a", "2=#Game_will_restart_in", "2=#Game_Commencing" )
register_event ( "HLTV", "ev_RoundStart", "a", "1=0", "2=0" )
register_event("DeathMsg", "Death", "a")
register_forward(FM_SetModel, "fw_SetModel")
RegisterHam(Ham_Item_Deploy, "weapon_ak47" , "Fwd_ItemDeploy_Weap_Post", .Post = 1 )
RegisterHam(Ham_Item_AttachToPlayer, "weapon_ak47", "fw_Item_AttachToPlayer" )
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
}
else
pause("a")
}
public client_connect(id)
{
g_HasAk[id] = true
g_bHasGA[id] = false
g_is_connected[id] = true
}
public client_disconnect(id)
{
g_HasAk[id] = true
g_bHasGA[id] = false
g_is_connected[id] = false
}
public Event_NewGame()
{
new iPlayers[32], iNum
get_players ( iPlayers, iNum )
for ( --iNum; iNum >= 0; --iNum )
{
g_HasAk[iPlayers[iNum]] = false
g_bHasGA[iPlayers[iNum]] = false
}
giCounter = 0
}
public ev_RoundStart ()
{
new iPlayers[32], iNum
get_players ( iPlayers, iNum )
for ( --iNum; iNum >= 0; --iNum )
g_bHasGA[iPlayers[iNum]] = false
#if defined BUYTIME
g_GameTime = get_gametime()
#endif
giCounter++
}
// register CZ bots with ham
public client_authorized(id)
{
if(!g_BotsRegistered && is_user_bot(id))
{
set_task(0.1, "register_bots", id);
}
}
public register_bots(id)
{
if(!g_BotsRegistered && g_is_connected[id])
{
RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage");
g_BotsRegistered = true;
}
}
public Death()
{
g_HasAk[read_data(2)] = false
g_bHasGA[read_data(2)] = false
}
public buyAk47(id)
{
// check if the player is in the buyzone
#if defined INBUYZONE
if(!cs_get_user_buyzone(id))
{
ColorChat(id, GREEN,"[VIP] Вы вне зоны закупки!")
return PLUGIN_HANDLED
}
#endif
// check buying time
#if defined BUYTIME
new Float:buytime = get_cvar_float("mp_buytime") * 60.0;
new Float:timepassed = get_gametime() - g_GameTime;
if(floatcmp(timepassed , buytime) == 1)
{
client_print(id, print_center,"%0.f seconds have passed. You can't buy anything now!",buytime)
return PLUGIN_HANDLED
}
#endif
if(!is_user_alive(id))
{
ColorChat(id, GREEN,"[VIP] Доступно только для живых игроков!")
return PLUGIN_HANDLED
}
if(giCounter < giAllowedRound)
{
ColorChat(id, GREEN,"[VIP] Золотые оружия доступны со 2 раунда!")
return PLUGIN_HANDLED
}
else
{
if(get_user_flags(id)& ACCESS_FLAG )
{
if(cs_get_user_money(id) < VIPCOST )
{
ColorChat(id, GREEN,"[VIP] У вас нехватает денег!")
return PLUGIN_HANDLED
}
else
{
cs_set_user_money(id , cs_get_user_money(id) - VIPCOST , 1);
giveak47(id)
}
}
else
{
if(cs_get_user_money(id) < COST )
{
ColorChat(id, GREEN, "[VIP] У вас нехватает денег!")
return PLUGIN_HANDLED
}
else
{
cs_set_user_money(id , cs_get_user_money(id) - COST , 1);
giveak47(id)
}
}
}
return PLUGIN_CONTINUE
}
public giveak47(id)
{
Player_DropWeapons (id, 1)
g_HasAk[id] = true
ham_give_weapon(id, "weapon_ak47")
engclient_cmd(id, "weapon_ak47")
}
public Fwd_ItemDeploy_Weap_Post(ent)
{
new iPlayer = get_pdata_cbase(ent, m_pPlayer, XO_WEAPON);
if (g_HasAk[iPlayer])
{
set_pev(iPlayer, pev_viewmodel2, AK_V_MODEL);
set_pev(iPlayer, pev_weaponmodel2, AK_P_MODEL);
}
return HAM_IGNORED;
}
public fw_Item_AttachToPlayer (ent, id)
{
if ( pev (ent, pev_impulse)==AK)
g_HasAk[id] = true
Fwd_ItemDeploy_Weap_Post(ent )
return HAM_IGNORED
}
public fw_SetModel ( ent, model[] )
{
if ( pev_valid ( ent ) != 2 )
return FMRES_IGNORED
if ( strlen ( model ) < 8 )
return FMRES_IGNORED
if ( model[7] != 'w' || model[8] != '_' )
return FMRES_IGNORED
static sClassName[32]
pev ( ent, pev_classname, sClassName, charsmax ( sClassName ) )
if ( !equal ( sClassName, "weaponbox" ) )
return FMRES_IGNORED
new id = pev ( ent, pev_owner )
if ( pev_valid ( id ) != 2 )
return FMRES_IGNORED
for (new i, iItem; i < MAX_ITEM_TYPES; i++)
{
iItem = get_pdata_cbase ( ent, m_rgpPlayerItems_CWeaponBox + i, XO_WEAPON )
if ( pev_valid ( iItem ) == 2 && pev(iItem, pev_impulse)==AK)
{
g_HasAk[id] = true
engfunc ( EngFunc_SetModel, ent, AK_W_MODEL )
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits)
{
if(!g_is_connected[attacker])
return HAM_IGNORED;
if (!(damage_bits & DMG_BULLET))
return HAM_IGNORED;
if (pev_valid(victim) != 2)
return HAM_IGNORED;
if(get_user_weapon(attacker) != CSW_AK47)
return HAM_IGNORED;
if(g_HasAk[attacker])
SetHamParamFloat(4, damage * DAMAGE);
return HAM_IGNORED;
}
stock Player_DropWeapons(const iPlayer, const iSlot)
{
new szWeaponName[32], iItem = get_pdata_cbase(iPlayer, m_rgpPlayerItems_CBasePlayer + iSlot, XO_CBASEPLAYER);
while (pev_valid(iItem) == 2)
{
pev(iItem, pev_classname, szWeaponName, charsmax(szWeaponName));
engclient_cmd(iPlayer, "drop", szWeaponName);
iItem = get_pdata_cbase(iItem, m_pNext, XO_WEAPON);
}
}
stock ham_give_weapon(id,weapon[])
{
if(!equal(weapon,"weapon_",7)) return 0;
new wEnt = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,weapon));
if(!pev_valid(wEnt)) return 0;
set_pev(wEnt,pev_spawnflags,SF_NORESPAWN);
dllfunc(DLLFunc_Spawn,wEnt);
if(!ExecuteHamB(Ham_AddPlayerItem,id,wEnt))
{
if(pev_valid(wEnt)) set_pev(wEnt,pev_flags,pev(wEnt,pev_flags) | FL_KILLME);
return 0;
}
ExecuteHamB(Ham_Item_AttachToPlayer,wEnt,id);
ExecuteHamB(Ham_GiveAmmo, id, 300, "762nato", 300);
set_pev(wEnt, pev_impulse, AK)
return 1;
}
Скрипт для XM1014
- Код: Выделить всё
#define DAMAGE 1.5
const COST = 8000
const VIPCOST = 0
const giAllowedRound = 2
#define BUYCMD
#define ACCESS_FLAG ADMIN_LEVEL_G
new XM1014_V_MODEL[] = "models/biohazard/gold_weap/v_xm1014.mdl" // view weapon model
new XM1014_P_MODEL[] = "models/biohazard/gold_weap/p_xm1014.mdl" // player weapon model
new XM1014_W_MODEL[] = "models/biohazard/gold_weap/w_xm1014.mdl" // world weapon model
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#include <colorchat>
new bool:g_Hasxm1014[33] = false
new bool:g_bHasGA[33] = false
new g_is_connected[33]
new bool: g_BotsRegistered
new giCounter
#if defined BUYTIME
new Float:g_GameTime
#endif
#define is_valid_player(%1) (1 <= %1 <= 32)
#define XM1014 3333
// offsets
const XO_WEAPON = 4
const XO_CBASEPLAYER = 5
const MAX_ITEM_TYPES = 6
const m_pPlayer = 41
const m_pNext = 42
const m_iId = 43
const m_rgpPlayerItems_CWeaponBox = 34
const m_rgpPlayerItems_CBasePlayer = 367
#define PLUGIN_NAME "Gold xm1014"
#define PLUGIN_VERSION "1.0.0"
#define PLUGIN_AUTHOR "L1ga"
public plugin_precache()
{
precache_model(XM1014_V_MODEL);
precache_model(XM1014_P_MODEL);
precache_model(XM1014_W_MODEL);
}
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
// mapcheck
new mapname[4]
get_mapname(mapname, 3)
if(equali(mapname, "de_") || equali(mapname, "cs_"))
{
#if defined BUYCMD
register_clcmd( "buy_xm1014", "buyXM1014")
#endif
register_event( "TextMsg", "Event_NewGame", "a", "2=#Game_will_restart_in", "2=#Game_Commencing" )
register_event ( "HLTV", "ev_RoundStart", "a", "1=0", "2=0" )
register_event("DeathMsg", "Death", "a")
register_forward(FM_SetModel, "fw_SetModel")
RegisterHam(Ham_Item_Deploy, "weapon_xm1014" , "Fwd_ItemDeploy_Weap_Post", .Post = 1 )
RegisterHam(Ham_Item_AttachToPlayer, "weapon_xm1014", "fw_Item_AttachToPlayer" )
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
}
else
pause("a")
}
public client_connect(id)
{
g_Hasxm1014[id] = false
g_bHasGA[id] = false
g_is_connected[id] = true
}
public client_disconnect(id)
{
g_Hasxm1014[id] = false
g_bHasGA[id] = false
g_is_connected[id] = false
}
public Event_NewGame()
{
new iPlayers[32], iNum
get_players ( iPlayers, iNum )
for ( --iNum; iNum >= 0; --iNum )
{
g_Hasxm1014[iPlayers[iNum]] = false
g_bHasGA[iPlayers[iNum]] = false
}
giCounter = 0
}
public ev_RoundStart ()
{
new iPlayers[32], iNum
get_players ( iPlayers, iNum )
for ( --iNum; iNum >= 0; --iNum )
g_bHasGA[iPlayers[iNum]] = false
#if defined BUYTIME
g_GameTime = get_gametime()
#endif
giCounter++
}
// register CZ bots with ham
public client_authorized(id)
{
if(!g_BotsRegistered && is_user_bot(id))
{
set_task(0.1, "register_bots", id);
}
}
public register_bots(id)
{
if(!g_BotsRegistered && g_is_connected[id])
{
RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage");
g_BotsRegistered = true;
}
}
public Death()
{
g_Hasxm1014[read_data(2)] = false
g_bHasGA[read_data(2)] = false
}
public buyXM1014(id)
{
// check if the player is in the buyzone
#if defined INBUYZONE
if(!cs_get_user_buyzone(id))
{
ColorChat(id, GREEN,"[VIP] ^1Вы вне зоны закупки!")
return PLUGIN_HANDLED
}
#endif
// check buying time
#if defined BUYTIME
new Float:buytime = get_cvar_float("mp_buytime") * 60.0;
new Float:timepassed = get_gametime() - g_GameTime;
if(floatcmp(timepassed , buytime) == 1)
{
client_print(id, print_center,"%0.f seconds have passed. You can't buy anything now!",buytime)
return PLUGIN_HANDLED
}
#endif
if(!is_user_alive(id))
{
ColorChat(id, GREEN,"[VIP] ^1Доступно Только для Живых Игроков!")
return PLUGIN_HANDLED
}
if(giCounter < giAllowedRound)
{
ColorChat(id, GREEN,"[VIP] ^1Золотые оружия доступны со 2 раунда!")
return PLUGIN_HANDLED
}
else
{
if(get_user_flags(id)& ACCESS_FLAG )
{
if(cs_get_user_money(id) < VIPCOST )
{
ColorChat(id, GREEN,"[VIP] ^1Увас нехватает Денег!")
return PLUGIN_HANDLED
}
else
{
cs_set_user_money(id , cs_get_user_money(id) - VIPCOST , 1);
givexm1014(id)
}
}
else
{
if(cs_get_user_money(id) < COST )
{
ColorChat(id, GREEN, "[VIP] ^1Увас нехватает Денег!")
return PLUGIN_HANDLED
}
else
{
cs_set_user_money(id , cs_get_user_money(id) - COST , 1);
givexm1014(id)
}
}
}
return PLUGIN_CONTINUE
}
public givexm1014(id)
{
Player_DropWeapons (id, 1)
g_Hasxm1014[id] = true
ham_give_weapon(id, "weapon_xm1014")
engclient_cmd(id, "weapon_xm1014")
}
public Fwd_ItemDeploy_Weap_Post(ent)
{
new iPlayer = get_pdata_cbase(ent, m_pPlayer, XO_WEAPON);
if (g_Hasxm1014[iPlayer])
{
set_pev(iPlayer, pev_viewmodel2, XM1014_V_MODEL);
set_pev(iPlayer, pev_weaponmodel2, XM1014_P_MODEL);
}
return HAM_IGNORED;
}
public fw_Item_AttachToPlayer (ent, id)
{
if ( pev (ent, pev_impulse)==XM1014)
g_Hasxm1014[id] = true
Fwd_ItemDeploy_Weap_Post(ent )
return HAM_IGNORED
}
public fw_SetModel ( ent, model[] )
{
if ( pev_valid ( ent ) != 2 )
return FMRES_IGNORED
if ( strlen ( model ) < 8 )
return FMRES_IGNORED
if ( model[7] != 'w' || model[8] != '_' )
return FMRES_IGNORED
static sClassName[32]
pev ( ent, pev_classname, sClassName, charsmax ( sClassName ) )
if ( !equal ( sClassName, "weaponbox" ) )
return FMRES_IGNORED
new id = pev ( ent, pev_owner )
if ( pev_valid ( id ) != 2 )
return FMRES_IGNORED
for (new i, iItem; i < MAX_ITEM_TYPES; i++)
{
iItem = get_pdata_cbase ( ent, m_rgpPlayerItems_CWeaponBox + i, XO_WEAPON )
if ( pev_valid ( iItem ) == 2 && pev(iItem, pev_impulse)==XM1014)
{
g_Hasxm1014[id] = false
engfunc ( EngFunc_SetModel, ent, XM1014_W_MODEL )
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits)
{
if(!g_is_connected[attacker])
return HAM_IGNORED;
if (!(damage_bits & DMG_BULLET))
return HAM_IGNORED;
if (pev_valid(victim) != 2)
return HAM_IGNORED;
if(get_user_weapon(attacker) != CSW_XM1014)
return HAM_IGNORED;
if(g_Hasxm1014[attacker])
SetHamParamFloat(4, damage * DAMAGE);
return HAM_IGNORED;
}
stock Player_DropWeapons(const iPlayer, const iSlot)
{
new szWeaponName[32], iItem = get_pdata_cbase(iPlayer, m_rgpPlayerItems_CBasePlayer + iSlot, XO_CBASEPLAYER);
while (pev_valid(iItem) == 2)
{
pev(iItem, pev_classname, szWeaponName, charsmax(szWeaponName));
engclient_cmd(iPlayer, "drop", szWeaponName);
iItem = get_pdata_cbase(iItem, m_pNext, XO_WEAPON);
}
}
stock ham_give_weapon(id,weapon[])
{
if(!equal(weapon,"weapon_",7)) return 0;
new wEnt = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,weapon));
if(!pev_valid(wEnt)) return 0;
set_pev(wEnt,pev_spawnflags,SF_NORESPAWN);
dllfunc(DLLFunc_Spawn,wEnt);
if(!ExecuteHamB(Ham_AddPlayerItem,id,wEnt))
{
if(pev_valid(wEnt)) set_pev(wEnt,pev_flags,pev(wEnt,pev_flags) | FL_KILLME);
return 0;
}
ExecuteHamB(Ham_Item_AttachToPlayer,wEnt,id);
ExecuteHamB(Ham_GiveAmmo, id, 128, "KBPOWER_BUCKSHOT", 128);
set_pev(wEnt, pev_impulse, XM1014)
return 1;
}
3) М4А1 в руках
Вы должны зарегистрироваться, чтобы видеть ссылки.
4) М4А1 на земле (W)
Вы должны зарегистрироваться, чтобы видеть ссылки.
Скрипт для М4А1
- Код: Выделить всё
#define DAMAGE 1.5
const COST = 15000
const VIPCOST = 0
const giAllowedRound = 2
#define BUYCMD
#define ACCESS_FLAG ADMIN_LEVEL_B
new M4A1_V_MODEL[] = "models/biohazard/gold_weap/v_m4a1.mdl" // view weapon model
new M4A1_P_MODEL[] = "models/biohazard/gold_weap/p_m4a1.mdl" // player weapon model
new M4A1_W_MODEL[] = "models/biohazard/gold_weap/w_m4a1.mdl" // world weapon model
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#include <colorchat>
new bool:g_HasM4a1[33] = false
new bool:g_bHasGA[33] = false
new g_is_connected[33]
new bool: g_BotsRegistered
new giCounter
#if defined BUYTIME
new Float:g_GameTime
#endif
#define is_valid_player(%1) (1 <= %1 <= 32)
#define M4 4444
// offsets
const XO_WEAPON = 4
const XO_CBASEPLAYER = 5
const MAX_ITEM_TYPES = 6
const m_pPlayer = 41
const m_pNext = 42
const m_iId = 43
const m_rgpPlayerItems_CWeaponBox = 34
const m_rgpPlayerItems_CBasePlayer = 367
#define PLUGIN_NAME "Gold M4A1"
#define PLUGIN_VERSION "1.0.0"
#define PLUGIN_AUTHOR "L1ga"
public plugin_precache()
{
precache_model(M4A1_V_MODEL);
precache_model(M4A1_P_MODEL);
precache_model(M4A1_W_MODEL);
}
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
// mapcheck
new mapname[4]
get_mapname(mapname, 3)
if(equali(mapname, "de_") || equali(mapname, "cs_"))
{
#if defined BUYCMD
register_clcmd( "buy_m4a1", "buyM4a1")
#endif
register_event( "TextMsg", "Event_NewGame", "a", "2=#Game_will_restart_in", "2=#Game_Commencing" )
register_event ( "HLTV", "ev_RoundStart", "a", "1=0", "2=0" )
register_event("DeathMsg", "Death", "a")
register_forward(FM_SetModel, "fw_SetModel")
RegisterHam(Ham_Item_Deploy, "weapon_m4a1" , "Fwd_ItemDeploy_Weap_Post", .Post = 1 )
RegisterHam(Ham_Item_AttachToPlayer, "weapon_m4a1", "fw_Item_AttachToPlayer" )
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
}
else
pause("a")
}
public client_connect(id)
{
g_HasM4a1[id] = false
g_bHasGA[id] = false
g_is_connected[id] = true
}
public client_disconnect(id)
{
g_HasM4a1[id] = false
g_bHasGA[id] = false
g_is_connected[id] = false
}
public Event_NewGame()
{
new iPlayers[32], iNum
get_players ( iPlayers, iNum )
for ( --iNum; iNum >= 0; --iNum )
{
g_HasM4a1[iPlayers[iNum]] = false
g_bHasGA[iPlayers[iNum]] = false
}
giCounter = 0
}
public ev_RoundStart ()
{
new iPlayers[32], iNum
get_players ( iPlayers, iNum )
for ( --iNum; iNum >= 0; --iNum )
g_bHasGA[iPlayers[iNum]] = false
#if defined BUYTIME
g_GameTime = get_gametime()
#endif
giCounter++
}
// register CZ bots with ham
public client_authorized(id)
{
if(!g_BotsRegistered && is_user_bot(id))
{
set_task(0.1, "register_bots", id);
}
}
public register_bots(id)
{
if(!g_BotsRegistered && g_is_connected[id])
{
RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage");
g_BotsRegistered = true;
}
}
public Death()
{
g_HasM4a1[read_data(2)] = false
g_bHasGA[read_data(2)] = false
}
public buyM4a1(id)
{
// check if the player is in the buyzone
#if defined INBUYZONE
if(!cs_get_user_buyzone(id))
{
ColorChat(id, GREEN,"[VIP] ^1¬ы вне зоны закупки!")
return PLUGIN_HANDLED
}
#endif
// check buying time
#if defined BUYTIME
new Float:buytime = get_cvar_float("mp_buytime") * 60.0;
new Float:timepassed = get_gametime() - g_GameTime;
if(floatcmp(timepassed , buytime) == 1)
{
client_print(id, print_center,"%0.f seconds have passed. You can't buy anything now!",buytime)
return PLUGIN_HANDLED
}
#endif
if(!is_user_alive(id))
{
ColorChat(id, GREEN,"[VIP] ^1ƒоступно “олько дл¤ ∆ивых »гроков!")
return PLUGIN_HANDLED
}
if(giCounter < giAllowedRound)
{
ColorChat(id, GREEN,"[VIP] ^1«олотые оружи¤ доступны со 2 раунда!")
return PLUGIN_HANDLED
}
else
{
if(get_user_flags(id)& ACCESS_FLAG )
{
if(cs_get_user_money(id) < VIPCOST )
{
ColorChat(id, GREEN, "[VIP] ^1”вас нехватает ƒенег!")
return PLUGIN_HANDLED
}
else
{
cs_set_user_money(id , cs_get_user_money(id) - VIPCOST , 1);
givem4a1(id)
}
}
else
{
if(cs_get_user_money(id) < COST )
{
ColorChat(id, GREEN, "[VIP] ^1”вас нехватает ƒенег!")
return PLUGIN_HANDLED
}
else
{
cs_set_user_money(id , cs_get_user_money(id) - COST , 1);
givem4a1(id)
}
}
}
return PLUGIN_CONTINUE
}
public givem4a1(id)
{
Player_DropWeapons (id, 1)
g_HasM4a1[id] = true
ham_give_weapon(id, "weapon_m4a1")
engclient_cmd(id, "weapon_m4a1")
}
public Fwd_ItemDeploy_Weap_Post(ent)
{
new iPlayer = get_pdata_cbase(ent, m_pPlayer, XO_WEAPON);
if (g_HasM4a1[iPlayer])
{
set_pev(iPlayer, pev_viewmodel2, M4A1_V_MODEL)
set_pev(iPlayer, pev_weaponmodel2, M4A1_P_MODEL)
}
return HAM_IGNORED;
}
public fw_Item_AttachToPlayer (ent, id)
{
if ( pev (ent, pev_impulse)==M4)
g_HasM4a1[id] = true
Fwd_ItemDeploy_Weap_Post(ent )
return HAM_IGNORED
}
public fw_SetModel ( ent, model[] )
{
if ( pev_valid ( ent ) != 2 )
return FMRES_IGNORED
if ( strlen ( model ) < 8 )
return FMRES_IGNORED
if ( model[7] != 'w' || model[8] != '_' )
return FMRES_IGNORED
static sClassName[32]
pev ( ent, pev_classname, sClassName, charsmax ( sClassName ) )
if ( !equal ( sClassName, "weaponbox" ) )
return FMRES_IGNORED
new id = pev ( ent, pev_owner )
if ( pev_valid ( id ) != 2 )
return FMRES_IGNORED
for (new i, iItem; i < MAX_ITEM_TYPES; i++)
{
iItem = get_pdata_cbase ( ent, m_rgpPlayerItems_CWeaponBox + i, XO_WEAPON )
if ( pev_valid ( iItem ) == 2 && pev(iItem, pev_impulse)==M4)
{
g_HasM4a1[id] = false
engfunc ( EngFunc_SetModel, ent, M4A1_W_MODEL )
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits)
{
if(!g_is_connected[attacker])
return HAM_IGNORED;
if (!(damage_bits & DMG_BULLET))
return HAM_IGNORED;
if (pev_valid(victim) != 2)
return HAM_IGNORED;
if(get_user_weapon(attacker) != CSW_M4A1)
return HAM_IGNORED;
if(g_HasM4a1[attacker])
SetHamParamFloat(4, damage * DAMAGE);
return HAM_IGNORED;
}
stock Player_DropWeapons(const iPlayer, const iSlot)
{
new szWeaponName[32], iItem = get_pdata_cbase(iPlayer, m_rgpPlayerItems_CBasePlayer + iSlot, XO_CBASEPLAYER);
while (pev_valid(iItem) == 2)
{
pev(iItem, pev_classname, szWeaponName, charsmax(szWeaponName));
engclient_cmd(iPlayer, "drop", szWeaponName);
iItem = get_pdata_cbase(iItem, m_pNext, XO_WEAPON);
}
}
stock ham_give_weapon(id,weapon[])
{
if(!equal(weapon,"weapon_",7)) return 0;
new wEnt = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,weapon));
if(!pev_valid(wEnt)) return 0;
set_pev(wEnt,pev_spawnflags,SF_NORESPAWN);
dllfunc(DLLFunc_Spawn,wEnt);
if(!ExecuteHamB(Ham_AddPlayerItem,id,wEnt))
{
if(pev_valid(wEnt)) set_pev(wEnt,pev_flags,pev(wEnt,pev_flags) | FL_KILLME);
return 0;
}
ExecuteHamB(Ham_Item_AttachToPlayer,wEnt,id);
ExecuteHamB(Ham_GiveAmmo, id, 300, "556nato", 300);
set_pev(wEnt, pev_impulse, M4)
return 1;
}
Скрипт для SG552
- Код: Выделить всё
#define DAMAGE 1.5
const COST = 15000
const VIPCOST = 0
const giAllowedRound = 2
#define BUYCMD
#define ACCESS_FLAG ADMIN_LEVEL_B
new SG552_V_MODEL[] = "models/biohazard/gold_weap/v_sg552.mdl" // view weapon model
new SG552_P_MODEL[] = "models/biohazard/gold_weap/p_sg552.mdl" // player weapon model
new SG552_W_MODEL[] = "models/biohazard/gold_weap/w_sg552.mdl" // world weapon model
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#include <colorchat>
new bool:g_HasSG552[33] = false
new bool:g_bHasGA[33] = false
new g_is_connected[33]
new bool: g_BotsRegistered
new giCounter
#if defined BUYTIME
new Float:g_GameTime
#endif
#define is_valid_player(%1) (1 <= %1 <= 32)
#define SG552 4444
// offsets
const XO_WEAPON = 4
const XO_CBASEPLAYER = 5
const MAX_ITEM_TYPES = 6
const m_pPlayer = 41
const m_pNext = 42
const m_iId = 43
const m_rgpPlayerItems_CWeaponBox = 34
const m_rgpPlayerItems_CBasePlayer = 367
#define PLUGIN_NAME "Gold SG552"
#define PLUGIN_VERSION "1.0.0"
#define PLUGIN_AUTHOR "L1ga"
public plugin_precache()
{
precache_model(SG552_V_MODEL);
precache_model(SG552_P_MODEL);
precache_model(SG552_W_MODEL);
}
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
// mapcheck
new mapname[4]
get_mapname(mapname, 3)
if(equali(mapname, "de_") || equali(mapname, "cs_"))
{
#if defined BUYCMD
register_clcmd( "buy_sg552", "buySG552")
#endif
register_event( "TextMsg", "Event_NewGame", "a", "2=#Game_will_restart_in", "2=#Game_Commencing" )
register_event ( "HLTV", "ev_RoundStart", "a", "1=0", "2=0" )
register_event("DeathMsg", "Death", "a")
register_forward(FM_SetModel, "fw_SetModel")
RegisterHam(Ham_Item_Deploy, "weapon_sg552" , "Fwd_ItemDeploy_Weap_Post", .Post = 1 )
RegisterHam(Ham_Item_AttachToPlayer, "weapon_sg552", "fw_Item_AttachToPlayer" )
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
}
else
pause("a")
}
public client_connect(id)
{
g_HasSG552[id] = false
g_bHasGA[id] = false
g_is_connected[id] = true
}
public client_disconnect(id)
{
g_HasSG552[id] = false
g_bHasGA[id] = false
g_is_connected[id] = false
}
public Event_NewGame()
{
new iPlayers[32], iNum
get_players ( iPlayers, iNum )
for ( --iNum; iNum >= 0; --iNum )
{
g_HasSG552[iPlayers[iNum]] = false
g_bHasGA[iPlayers[iNum]] = false
}
giCounter = 0
}
public ev_RoundStart ()
{
new iPlayers[32], iNum
get_players ( iPlayers, iNum )
for ( --iNum; iNum >= 0; --iNum )
g_bHasGA[iPlayers[iNum]] = false
#if defined BUYTIME
g_GameTime = get_gametime()
#endif
giCounter++
}
// register CZ bots with ham
public client_authorized(id)
{
if(!g_BotsRegistered && is_user_bot(id))
{
set_task(0.1, "register_bots", id);
}
}
public register_bots(id)
{
if(!g_BotsRegistered && g_is_connected[id])
{
RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage");
g_BotsRegistered = true;
}
}
public Death()
{
g_HasSG552[read_data(2)] = false
g_bHasGA[read_data(2)] = false
}
public buySG552(id)
{
// check if the player is in the buyzone
#if defined INBUYZONE
if(!cs_get_user_buyzone(id))
{
ColorChat(id, GREEN,"[VIP] ^1Вы вне зоны закупки!")
return PLUGIN_HANDLED
}
#endif
// check buying time
#if defined BUYTIME
new Float:buytime = get_cvar_float("mp_buytime") * 60.0;
new Float:timepassed = get_gametime() - g_GameTime;
if(floatcmp(timepassed , buytime) == 1)
{
client_print(id, print_center,"%0.f seconds have passed. You can't buy anything now!",buytime)
return PLUGIN_HANDLED
}
#endif
if(!is_user_alive(id))
{
ColorChat(id, GREEN,"[VIP] ^1Доступно Только для Живых Игроков!")
return PLUGIN_HANDLED
}
if(giCounter < giAllowedRound)
{
ColorChat(id, GREEN,"[VIP] ^1Золотые оружия доступны со 2 раунда!")
return PLUGIN_HANDLED
}
else
{
if(get_user_flags(id)& ACCESS_FLAG )
{
if(cs_get_user_money(id) < VIPCOST )
{
ColorChat(id, GREEN, "[VIP] ^1Увас нехватает Денег!")
return PLUGIN_HANDLED
}
else
{
cs_set_user_money(id , cs_get_user_money(id) - VIPCOST , 1);
giveSG552(id)
}
}
else
{
if(cs_get_user_money(id) < COST )
{
ColorChat(id, GREEN, "[VIP] ^1Увас нехватает Денег!")
return PLUGIN_HANDLED
}
else
{
cs_set_user_money(id , cs_get_user_money(id) - COST , 1);
giveSG552(id)
}
}
}
return PLUGIN_CONTINUE
}
public giveSG552(id)
{
Player_DropWeapons (id, 1)
g_HasSG552[id] = true
ham_give_weapon(id, "weapon_sg552")
engclient_cmd(id, "weapon_sg552")
}
public Fwd_ItemDeploy_Weap_Post(ent)
{
new iPlayer = get_pdata_cbase(ent, m_pPlayer, XO_WEAPON);
if (g_HasSG552[iPlayer])
{
set_pev(iPlayer, pev_viewmodel2, SG552_V_MODEL)
set_pev(iPlayer, pev_weaponmodel2, SG552_P_MODEL)
}
return HAM_IGNORED;
}
public fw_Item_AttachToPlayer (ent, id)
{
if ( pev (ent, pev_impulse)==SG552)
g_HasSG552[id] = true
Fwd_ItemDeploy_Weap_Post(ent )
return HAM_IGNORED
}
public fw_SetModel ( ent, model[] )
{
if ( pev_valid ( ent ) != 2 )
return FMRES_IGNORED
if ( strlen ( model ) < 8 )
return FMRES_IGNORED
if ( model[7] != 'w' || model[8] != '_' )
return FMRES_IGNORED
static sClassName[32]
pev ( ent, pev_classname, sClassName, charsmax ( sClassName ) )
if ( !equal ( sClassName, "weaponbox" ) )
return FMRES_IGNORED
new id = pev ( ent, pev_owner )
if ( pev_valid ( id ) != 2 )
return FMRES_IGNORED
for (new i, iItem; i < MAX_ITEM_TYPES; i++)
{
iItem = get_pdata_cbase ( ent, m_rgpPlayerItems_CWeaponBox + i, XO_WEAPON )
if ( pev_valid ( iItem ) == 2 && pev(iItem, pev_impulse)==SG552)
{
g_HasSG552[id] = false
engfunc ( EngFunc_SetModel, ent, SG552_W_MODEL )
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits)
{
if(!g_is_connected[attacker])
return HAM_IGNORED;
if (!(damage_bits & DMG_BULLET))
return HAM_IGNORED;
if (pev_valid(victim) != 2)
return HAM_IGNORED;
if(get_user_weapon(attacker) != CSW_SG552)
return HAM_IGNORED;
if(g_HasSG552[attacker])
SetHamParamFloat(4, damage * DAMAGE);
return HAM_IGNORED;
}
stock Player_DropWeapons(const iPlayer, const iSlot)
{
new szWeaponName[32], iItem = get_pdata_cbase(iPlayer, m_rgpPlayerItems_CBasePlayer + iSlot, XO_CBASEPLAYER);
while (pev_valid(iItem) == 2)
{
pev(iItem, pev_classname, szWeaponName, charsmax(szWeaponName));
engclient_cmd(iPlayer, "drop", szWeaponName);
iItem = get_pdata_cbase(iItem, m_pNext, XO_WEAPON);
}
}
stock ham_give_weapon(id,weapon[])
{
if(!equal(weapon,"weapon_",7)) return 0;
new wEnt = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,weapon));
if(!pev_valid(wEnt)) return 0;
set_pev(wEnt,pev_spawnflags,SF_NORESPAWN);
dllfunc(DLLFunc_Spawn,wEnt);
if(!ExecuteHamB(Ham_AddPlayerItem,id,wEnt))
{
if(pev_valid(wEnt)) set_pev(wEnt,pev_flags,pev(wEnt,pev_flags) | FL_KILLME);
return 0;
}
ExecuteHamB(Ham_Item_AttachToPlayer,wEnt,id);
ExecuteHamB(Ham_GiveAmmo, id, 300, "556nato", 300);
set_pev(wEnt, pev_impulse, SG552)
return 1;
}